[
  {
    "path": ".gitignore",
    "content": ".idea\n*.scad\n*.pyc\n*.pyo\n.installed.cfg\ndist\nbin\ndevelop-eggs\n*.egg-info\ndist\ndownloads\neggs\nparts\n*.egg-info\nlib\nlib64\nDoc/_build\nscratch/\n*.swp\n*.bak\n*.escad\n*.stl\n*.draft.*\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"solid2/libs/BOSL2\"]\n\tpath = solid2/extensions/bosl2/BOSL2\n\turl = git@github.com:revarbat/BOSL2.git\n[submodule \"solid2/libs/py_scadparser\"]\n\tpath = solid2/libs/py_scadparser\n\turl = https://github.com/jeff-dh/py_scadparser.git\n"
  },
  {
    "path": "Doc/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# User-friendly check for sphinx-build\nifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)\n$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)\nendif\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\nclean:\n\trm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/SolidPython.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/SolidPython.qhc\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/SolidPython\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SolidPython\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n"
  },
  {
    "path": "Doc/conf.py",
    "content": "#!/usr/bin/env python2.7\n# -*- coding: utf-8 -*-\n#\n# SolidPython documentation build configuration file, created by\n# sphinx-quickstart on Thu May  1 19:55:31 2014.\n#\n# This file is execfile()d with the current directory set to its\n# containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys\nimport os\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\nsys.path.insert(0, os.path.abspath('.'))\nsys.path.insert(0, os.path.abspath('..'))\n\n\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.viewcode',\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n#source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = 'SolidPython2'\ncopyright = '2014, Evan Jones'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = '0.1.2'\n# The full version, including alpha/beta/rc tags.\nrelease = '0.1.2'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#today = ''\n# Else, today_fmt is used as the format for a strftime call.\n#today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all\n# documents.\n#default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n#modindex_common_prefix = []\n\n# If true, keep warnings as \"system message\" paragraphs in the built documents.\n#keep_warnings = False\n\n\n# -- Options for HTML output ----------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = 'default'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n#html_theme_path = []\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n#html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n#html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Add any extra paths that contain custom files (such as robots.txt or\n# .htaccess) here, relative to this directory. These files are copied\n# directly to the root of the documentation.\n#html_extra_path = []\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n#html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#html_additional_pages = {}\n\n# If false, no module index is generated.\n#html_domain_indices = True\n\n# If false, no index is generated.\n#html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n#html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n#html_file_suffix = None\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'SolidPythondoc'\n\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n    # The paper size ('letterpaper' or 'a4paper').\n    #'papersize': 'letterpaper',\n\n    # The font size ('10pt', '11pt' or '12pt').\n    #'pointsize': '10pt',\n\n    # Additional stuff for the LaTeX preamble.\n    #'preamble': '',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n    ('index', 'SolidPython.tex', 'SolidPython Documentation',\n     'Evan Jones', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#latex_use_parts = False\n\n# If true, show page references after internal links.\n#latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n#latex_appendices = []\n\n# If false, no module index is generated.\n#latex_domain_indices = True\n\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    ('index', 'solidpython', 'SolidPython Documentation',\n     ['Evan Jones'], 1)\n]\n\n# If true, show URL addresses after external links.\n#man_show_urls = False\n\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n    ('index', 'SolidPython', 'SolidPython Documentation',\n     'Evan Jones', 'SolidPython', 'One line description of project.',\n     'Miscellaneous'),\n]\n\n# Documents to append as an appendix to all manuals.\n#texinfo_appendices = []\n\n# If false, no module index is generated.\n#texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#texinfo_show_urls = 'footnote'\n\n# If true, do not generate a @detailmenu in the \"Top\" node's menu.\n#texinfo_no_detailmenu = False\n"
  },
  {
    "path": "Doc/index.rst",
    "content": ".. SolidPython documentation master file, created by\n   sphinx-quickstart on Thu May  1 19:55:31 2014.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\nWelcome to SolidPython's documentation!\n=======================================\n\n.. toctree::\n   :maxdepth: 2\n\n.. include:: ../README.rst\n\nLibrary Reference\n=================\n\n.. automodule:: solid2\n    :imported-members:\n    :undoc-members:\n    :exclude-members: Path, ObjectBase, ModifierBase, OpenSCADObject, singledispatch\n    :members:\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search`\n   :members:\n"
  },
  {
    "path": "Doc/make.bat",
    "content": "@ECHO OFF\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset BUILDDIR=_build\nset ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .\nset I18NSPHINXOPTS=%SPHINXOPTS% .\nif NOT \"%PAPER%\" == \"\" (\n\tset ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%\n\tset I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%\n)\n\nif \"%1\" == \"\" goto help\n\nif \"%1\" == \"help\" (\n\t:help\n\techo.Please use `make ^<target^>` where ^<target^> is one of\n\techo.  html       to make standalone HTML files\n\techo.  dirhtml    to make HTML files named index.html in directories\n\techo.  singlehtml to make a single large HTML file\n\techo.  pickle     to make pickle files\n\techo.  json       to make JSON files\n\techo.  htmlhelp   to make HTML files and a HTML help project\n\techo.  qthelp     to make HTML files and a qthelp project\n\techo.  devhelp    to make HTML files and a Devhelp project\n\techo.  epub       to make an epub\n\techo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\n\techo.  text       to make text files\n\techo.  man        to make manual pages\n\techo.  texinfo    to make Texinfo files\n\techo.  gettext    to make PO message catalogs\n\techo.  changes    to make an overview over all changed/added/deprecated items\n\techo.  xml        to make Docutils-native XML files\n\techo.  pseudoxml  to make pseudoxml-XML files for display purposes\n\techo.  linkcheck  to check all external links for integrity\n\techo.  doctest    to run all doctests embedded in the documentation if enabled\n\tgoto end\n)\n\nif \"%1\" == \"clean\" (\n\tfor /d %%i in (%BUILDDIR%\\*) do rmdir /q /s %%i\n\tdel /q /s %BUILDDIR%\\*\n\tgoto end\n)\n\n\n%SPHINXBUILD% 2> nul\nif errorlevel 9009 (\n\techo.\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\n\techo.installed, then set the SPHINXBUILD environment variable to point\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\n\techo.may add the Sphinx directory to PATH.\n\techo.\n\techo.If you don't have Sphinx installed, grab it from\n\techo.http://sphinx-doc.org/\n\texit /b 1\n)\n\nif \"%1\" == \"html\" (\n\t%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The HTML pages are in %BUILDDIR%/html.\n\tgoto end\n)\n\nif \"%1\" == \"dirhtml\" (\n\t%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.\n\tgoto end\n)\n\nif \"%1\" == \"singlehtml\" (\n\t%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.\n\tgoto end\n)\n\nif \"%1\" == \"pickle\" (\n\t%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can process the pickle files.\n\tgoto end\n)\n\nif \"%1\" == \"json\" (\n\t%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can process the JSON files.\n\tgoto end\n)\n\nif \"%1\" == \"htmlhelp\" (\n\t%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can run HTML Help Workshop with the ^\n.hhp project file in %BUILDDIR%/htmlhelp.\n\tgoto end\n)\n\nif \"%1\" == \"qthelp\" (\n\t%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; now you can run \"qcollectiongenerator\" with the ^\n.qhcp project file in %BUILDDIR%/qthelp, like this:\n\techo.^> qcollectiongenerator %BUILDDIR%\\qthelp\\SolidPython.qhcp\n\techo.To view the help file:\n\techo.^> assistant -collectionFile %BUILDDIR%\\qthelp\\SolidPython.ghc\n\tgoto end\n)\n\nif \"%1\" == \"devhelp\" (\n\t%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished.\n\tgoto end\n)\n\nif \"%1\" == \"epub\" (\n\t%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The epub file is in %BUILDDIR%/epub.\n\tgoto end\n)\n\nif \"%1\" == \"latex\" (\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished; the LaTeX files are in %BUILDDIR%/latex.\n\tgoto end\n)\n\nif \"%1\" == \"latexpdf\" (\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\n\tcd %BUILDDIR%/latex\n\tmake all-pdf\n\tcd %BUILDDIR%/..\n\techo.\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\n\tgoto end\n)\n\nif \"%1\" == \"latexpdfja\" (\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\n\tcd %BUILDDIR%/latex\n\tmake all-pdf-ja\n\tcd %BUILDDIR%/..\n\techo.\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\n\tgoto end\n)\n\nif \"%1\" == \"text\" (\n\t%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The text files are in %BUILDDIR%/text.\n\tgoto end\n)\n\nif \"%1\" == \"man\" (\n\t%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The manual pages are in %BUILDDIR%/man.\n\tgoto end\n)\n\nif \"%1\" == \"texinfo\" (\n\t%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.\n\tgoto end\n)\n\nif \"%1\" == \"gettext\" (\n\t%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The message catalogs are in %BUILDDIR%/locale.\n\tgoto end\n)\n\nif \"%1\" == \"changes\" (\n\t%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.The overview file is in %BUILDDIR%/changes.\n\tgoto end\n)\n\nif \"%1\" == \"linkcheck\" (\n\t%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Link check complete; look for any errors in the above output ^\nor in %BUILDDIR%/linkcheck/output.txt.\n\tgoto end\n)\n\nif \"%1\" == \"doctest\" (\n\t%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Testing of doctests in the sources finished, look at the ^\nresults in %BUILDDIR%/doctest/output.txt.\n\tgoto end\n)\n\nif \"%1\" == \"xml\" (\n\t%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The XML files are in %BUILDDIR%/xml.\n\tgoto end\n)\n\nif \"%1\" == \"pseudoxml\" (\n\t%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml\n\tif errorlevel 1 exit /b 1\n\techo.\n\techo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.\n\tgoto end\n)\n\n:end\n"
  },
  {
    "path": "README.rst",
    "content": "SolidPython\n===========\n   \nOpenSCAD for Python\n-------------------\n\nSolidPython is a generalization of Phillip Tiefenbacher's openscad\nmodule, found on `Thingiverse <http://www.thingiverse.com/thing:1481>`__. It\ngenerates valid OpenSCAD code from Python code with minimal overhead. Here's a\nsimple example:\n\nThis Python code:\n\n.. code:: python\n\n    from solid2 import *\n    d = cube(5) + sphere(5).right(5) - cylinder(r=2, h=6)\n\nGenerates this OpenSCAD code:\n\n.. code::\n\n    difference(){\n        union(){\n            cube(5);\n            translate( [5, 0,0]){\n                sphere(5);\n            }\n        }\n        cylinder(r=2, h=6);\n    }\n\nAs can be clearly seen, the SolidPython code is a lot shorter (and I think a lot better readable and maintainable) than the OpenSCAD code it compiles to.\n\nAdvantages\n----------\n\nIn contrast to OpenSCAD -- which is a constrained domain specific language --\nPython is a full blown modern programming language and as such supports\npretty much all modern programming features. Furthermore a huge number of\nlibraries is available.\n\nSolidPython lets you use all these fancy python features to generate your\nconstructive solid geometry models.\n\nOn the one hand it makes the generation of your models a lot easier, because\nyou don't need to learn another domain specific language and you can use all\nthe programming technique you're already familiar with. On the other hand it\ngives you a lot more power, because you can use all the comprehensive python\nlibraries to generate your models.\n\n\nGetting Started\n---------------\n\nThe `wiki <https://github.com/jeff-dh/SolidPython/wiki>`__ is the place to look for docs and tutorials. Furthermore the `examples <https://github.com/jeff-dh/SolidPython/tree/master-2.0.0-beta-dev/solid2/examples>`__ might be interesting to you too.\n\nContact\n=======\n\nEnjoy!\n\nIf you have any questions or bug reports please report them to the SolidPython\n`GitHub page <https://github.com/jeff-dh/SolidPython>`__!\n\nCheers!\n\nLicense\n=======\n\nThis library is free software; you can redistribute it and/or modify it\nunder the terms of the GNU Lesser General Public License as published by\nthe Free Software Foundation; either version 2.1 of the License, or (at\nyour option) any later version.\n\nThis library is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\nGeneral Public License for more details.\n\n`Full text of the\nlicense <http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt>`__.\n\nSome class docstrings are derived from the `OpenSCAD User Manual\n<https://en.wikibooks.org/wiki/OpenSCAD_User_Manual>`__, so \nare available under the `Creative Commons Attribution-ShareAlike License\n<https://creativecommons.org/licenses/by-sa/3.0/>`__. \n\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[tool.poetry]\nname = \"solidpython2\"\nversion = \"2.1.3\"\ndescription = \"Python interface to the OpenSCAD declarative geometry language\"\nauthors = [\"jeff\"]\nhomepage = \"https://github.com/jeff-dh/SolidPython\"\nrepository = \"https://github.com/jeff-dh/SolidPython\"\nlicense = \"LGPL-2.1\"\nreadme = \"README.rst\"\nkeywords = [\n    \"3D\",\n    \"CAD\",\n    \"CSG\",\n    \"constructive solid geometry\",\n    \"geometry\",\n    \"modeling\",\n    \"OpenSCAD\",\n]\n\nclassifiers=[\n    \"Programming Language :: Python\",\n    \"Programming Language :: Python :: 3.7\",\n    \"Development Status :: 4 - Beta\",\n    \"Environment :: Other Environment\",\n    \"Intended Audience :: Developers\",\n    \"License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)\",\n    \"Operating System :: OS Independent\",\n    \"Topic :: Software Development :: Libraries :: Python Modules\",\n    \"Topic :: Scientific/Engineering :: Mathematics\",\n]\npackages=[\n    { include = \"solid2\"}\n]\n\n[tool.poetry.dependencies]\npython = \">=3.7\"\nply = \"^3.11\"\nsetuptools = \">=65.6.3\"\n\n[build-system]\nrequires = [\"poetry-core>=1.0.0\"]\nbuild-backend = \"poetry.core.masonry.api\"\n"
  },
  {
    "path": "solid2/__init__.py",
    "content": "#only import the external interface!\n\nfrom .core import *\n\nfrom .extensions.greedy_scad_interface import *\nfrom .extensions.scad_control_structures import *\n\n"
  },
  {
    "path": "solid2/config.py",
    "content": "#this is global config file for exp_solid\nfrom pathlib import Path\nimport os\nimport platform\nimport sys\nimport re\n\nclass Config:\n    def __init__(self):\n        self.use_implicit_builtins = \"--implicit\" in sys.argv\n\n        self.pickle_cache_dir = self.get_pickle_cache_dir()\n        self.enable_pickle_cache = True and self.pickle_cache_dir is not None\n\n        self.openscad_library_paths = self.get_openscad_library_paths()\n        self.openscad_stl_command = \"openscad -o '{stlfile}' '{scadfile}'\"\n\n    def get_openscad_library_paths(self):\n        \"\"\"\n        Return system-dependent OpenSCAD library paths or paths defined in\n        os.environ['OPENSCADPATH'] \"\"\"\n        paths = [Path('.')]\n\n        user_path = os.environ.get('OPENSCADPATH')\n        if user_path:\n            for s in re.split(r'\\s*[;:]\\s*', user_path):\n                paths.append(Path(s))\n\n        #user wide path\n        default_paths = {\n            'Linux':   Path.home() / '.local/share/OpenSCAD/libraries',\n            'Darwin':  Path.home() / 'Documents/OpenSCAD/libraries',\n            'Windows':  Path.home() / 'Documents/OpenSCAD/libraries'\n        }\n\n        try:\n            paths.append(default_paths[platform.system()])\n        except KeyError:\n            pass\n\n        #system wide paths\n        if platform.system() == 'Linux':\n            #sorry, but I've no clue what the paths are on other operating systems\n            paths.append(Path(\"/usr/share/openscad/libraries\"))\n\n        return paths\n\n    def get_pickle_cache_dir(self):\n        default_paths = {\n            'Linux':   Path.home() / '.local/share/SolidPython2/pickle_cache',\n            'Darwin':  Path.home() / 'Documents/SolidPython2/pickle_cache',\n            'Windows':  Path.home() / 'Documents/SolidPython2/pickle_cache'\n        }\n        try:\n            return default_paths[platform.system()]\n        except KeyError:\n            return None\n\n\nconfig = Config()\n\n"
  },
  {
    "path": "solid2/core/__init__.py",
    "content": "#only import the external interface!\nfrom .builtins import *\n\nfrom .scad_render import scad_render,\\\n                         scad_render_to_file,\\\n                         render_to_stl_file\n\nfrom .scad_import import import_scad, use, include\n\nfrom .object_base import scad_inline, scad_inline_parameter_func\n\nfrom .extension_manager import register_access_syntax, register_pre_render,\\\n                               register_post_render, register_root_wrapper\n"
  },
  {
    "path": "solid2/core/builtins/__init__.py",
    "content": "from .primitives import *\nfrom .convenience import *\n\nfrom . import openscad_functions\n"
  },
  {
    "path": "solid2/core/builtins/convenience.py",
    "content": "import numbers\nfrom ...config import config as _config\nfrom ..object_base import ObjectBase as _ObjectBase,\\\n                          OperatorMixin as _OperatorMixin,\\\n                          AccessSyntaxMixin as _AccessSyntaxMixin\nfrom .primitives import *\n\n# =============\n# = modifiers =\n# =============\nclass _ModifierBase(_ObjectBase, _OperatorMixin, _AccessSyntaxMixin):\n    def __init__(self, child=None):\n        super().__init__()\n        if child:\n            self._children += [child]\n\nclass debug(_ModifierBase):\n    def _render(self):\n        return \"#\" + super()._render()\n\nclass background(_ModifierBase):\n    def _render(self):\n        return \"%\" + super()._render()\n\nclass root(_ModifierBase):\n    def _render(self):\n        return \"!\" + super()._render()\n\nclass disable(_ModifierBase):\n    def _render(self):\n        return \"*\" + super()._render()\n\n# ==============\n# = Directions =\n# ==============\ndef up(z): return translate((0, 0, z))\ndef down(z): return translate((0, 0, -z))\ndef right(x): return translate((x, 0, 0))\ndef left(x): return translate((-x, 0, 0))\ndef forward(y): return translate((0, y, 0))\ndef fwd(y): return forward(y)\ndef back(y): return translate((0, -y, 0))\n\ndef translateX(x) : return translate((x, 0, 0))\ndef translateY(y) : return translate((0, y, 0))\ndef translateZ(z) : return translate((0, 0, z))\n\ndef rotateX(x): return rotate((x, 0, 0))\ndef rotateY(y): return rotate((0, y, 0))\ndef rotateZ(z): return rotate((0, 0, z))\n\ndef scaleX(x): return scale((x, 1, 1))\ndef scaleY(y): return scale((1, y, 1))\ndef scaleZ(z): return scale((1, 1, z))\n\nif not _config.use_implicit_builtins:\n    def resizeX(x): return resize((x, 0, 0))\n    def resizeY(y): return resize((0, y, 0))\n    def resizeZ(z): return resize((0, 0, z))\n\n    def mirrorX(): return mirror((1, 0, 0))\n    def mirrorY(): return mirror((0, 1, 0))\n    def mirrorZ(): return mirror((0, 0, 1))\n\n# ==============================================\n# = overwrite translate, rotate, scale, mirror =\n# ==============================================\n\"\"\"\n    This block overwrites translate, scale, mirror and rotate from builtins\n    to allow \"overloading\" those functions.\n    As result you don't need to pass vectors in as lists, you can provide\n    them as single integers / floats.\n\n    translate([1, 2, 3])  ->   translate(1, 2, 3)\n    rotate([1, 2, 3])   -> rotate(1, 2, 3)\n\"\"\"\ndef _extract_size_list(size_count, *args):\n    if len(args) <= 1:\n        return args\n\n    size_list = []\n    args_copy = list(args)\n\n    while args_copy and len(size_list) < size_count:\n        a = args_copy.pop(0)\n        if isinstance(a, numbers.Real):\n            size_list += [a]\n        else:\n            args_copy = [a] + args_copy\n            break\n\n    if len(size_list) == size_count:\n        return [size_list] + args_copy\n    else:\n        return size_list + args_copy\n\n_orig_translate = translate\ndef translate(*args, **kwargs):\n    args = _extract_size_list(3, *args)\n    return _orig_translate(*args, **kwargs)\n\n_orig_scale = scale\ndef scale(*args, **kwargs):\n    args = _extract_size_list(3, *args)\n    return _orig_scale(*args, **kwargs)\n\n_orig_rotate = rotate\ndef rotate(*args, **kwargs):\n    args = _extract_size_list(3, *args)\n    return _orig_rotate(*args, **kwargs)\n\n_orig_square = square\ndef square(*args, **kwargs):\n    args = _extract_size_list(2, *args)\n    return _orig_square(*args, **kwargs)\n\n_orig_cube = cube\ndef cube(*args, **kwargs):\n    args = _extract_size_list(3, *args)\n    return _orig_cube(*args, **kwargs)\n\nif not _config.use_implicit_builtins:\n    _orig_resize = resize\n    def resize(*args, **kwargs):\n        args = _extract_size_list(3, *args)\n        return _orig_resize(*args, **kwargs)\n\n    _orig_mirror = mirror\n    def mirror(*args, **kwargs):\n        args = _extract_size_list(3, *args)\n        return _orig_mirror(*args, **kwargs)\n\n"
  },
  {
    "path": "solid2/core/builtins/implicit.primitives",
    "content": "module sphere(r=default, d=default);\nmodule cube(size=default, center=default, r=default, x=default, y=default, z=default);\nmodule square(size=default, center=default, r=default, x=default, y=default);\nmodule cylinder(r=default, h=default, r1=default, r2=default,\n                $fn=default, center=default);\nmodule circle(r=default, $fn=default);\nmodule polygon(points, paths=default, r=default);\n\nmodule union(r=default);\nmodule difference(r=default);\nmodule intersection(r=default);\n\nmodule translate(v=default, x=default, y=default, z=default);\nmodule scale(v);\nmodule rotate(a=default, v=default);\n\nmodule linear_extrude(height=default,\n                      center=default,\n                      twist=default,\n                      scale=default,\n                      translate=default,\n                      r=default);\n\nmodule pack(size, sep);\nmodule shell(w);\n\nmodule rotate_extrude(a=default,\n                      r=default,\n                      translate=default,\n                      rotate=default);\n\nmodule unit(unit);\n\n"
  },
  {
    "path": "solid2/core/builtins/openscad.mutators",
    "content": "module translate(v);\nmodule scale(v);\nmodule rotate(a=default, v=default);\nmodule mirror(v);\nmodule resize(newsize, auto=default);\n\nmodule color(c, alpha=1.0);\n\nmodule minkowski();\nmodule offset(r=default, delta=default, chamfer=default, $fn=default);\nmodule hull();\nmodule render(convexity=default);\n\nmodule linear_extrude(height=default,\n                      center=default,\n                      convexity=default,\n                      twist=default,\n                      slices=default,\n                      scale=default);\n\nmodule rotate_extrude(angle=default,\n                      convexity=default,\n                      $fn=default);\n\nmodule projection(cut=default);\nmodule surface(file, center=default, convexity=default, invert=default);\n\n"
  },
  {
    "path": "solid2/core/builtins/openscad.primitives",
    "content": "module union();\nmodule difference();\nmodule intersection();\nmodule intersection_for(n);\n\nmodule translate(v);\nmodule scale(v);\nmodule rotate(a=default, v=default);\nmodule mirror(v);\nmodule resize(newsize, auto=default);\n\nmodule color(c, alpha=1.0);\n\nmodule minkowski();\nmodule offset(r=default, delta=default, chamfer=default, $fn=default);\nmodule hull();\nmodule render(convexity=default);\n\nmodule linear_extrude(height=default,\n                      center=default,\n                      convexity=default,\n                      twist=default,\n                      slices=default,\n                      scale=default);\n\nmodule rotate_extrude(angle=default,\n                      convexity=default,\n                      $fn=default);\n\nmodule projection(cut=default);\nmodule surface(file, center=default, convexity=default, invert=default);\n\nmodule child(index=default, vector=default, range=default);\nmodule children(index=default, vector=default, range=default);\n\nmodule import_stl(file, origin=default, convexity=default, layer=default);\nmodule import_dxf(file, origin=default, convexity=default, layer=default);\nmodule import(file, origin=default, convexity=default, layer=default);\n\nmodule assign();\nmodule multmatrix(m=default);\n\nmodule polygon(points, paths=default, convexity=default);\nmodule circle(r=default, d=default, $fn=default);\nmodule square(size=default, center=default);\nmodule sphere(r=default, d=default, $fn=default);\nmodule cube(size=default, center=default);\nmodule cylinder(r=default, h=default, r1=default, r2=default,\n                d=default, d1=default, d2=default, center=default, $fn=default);\nmodule polyhedron(points, faces, convexity=default, triangles=default);\nmodule text(text,\n            size=default,\n            font=default,\n            halign=default,\n            valign=default,\n            spacing=default,\n            direction=default,\n            language=default,\n            script=default,\n            $fn=default);\n"
  },
  {
    "path": "solid2/core/builtins/openscad_functions.py",
    "content": "\ndef _base_fn(name, *args):\n    from solid2.core.object_base import scad_inline as scad_inline\n    from solid2.core.utils import py2openscad as py2openscad\n\n    params = py2openscad(args)[1:-1]\n    return scad_inline(f'{name}({params})')\n\ndef cos(n):         return _base_fn(\"cos\", n)\ndef sin(n):         return _base_fn(\"sin\", n)\ndef tan(n):         return _base_fn(\"tan\", n)\ndef acos(n):        return _base_fn('acos', n)\ndef asin(n):        return _base_fn('asin', n)\ndef atan(n):        return _base_fn('atan', n)\ndef atan2(n, m):    return _base_fn('atan2', n, m)\n\ndef abs(n):         return _base_fn('abs', n)\ndef ceil(n):        return _base_fn('ceil', n)\ndef exp(n):         return _base_fn('exp', n)\ndef floor(n):       return _base_fn('floor', n)\ndef len(n):         return _base_fn('len', n)\ndef ln(n):          return _base_fn('ln', n)\ndef log(n):         return _base_fn('log', n)\ndef norm(v):        return _base_fn('norm', v)\ndef pow(n, m):      return _base_fn('pow', n, m)\ndef round(n):       return _base_fn('round', n)\ndef sign(n):        return _base_fn('sign', n)\ndef sqrt(n):        return _base_fn('sqrt', n)\n\ndef min(*args):     return _base_fn('min', *args)\ndef max(*args):     return _base_fn('max', *args)\n\ndef concat(*args):  return _base_fn('concat', *args)\ndef cross(*args):   return _base_fn('cross', *args)\ndef lookup(*args):  return _base_fn('lookup', *args)\ndef rands(*args):   return _base_fn('rands', *args)\ndef not_(*args):    return _base_fn('!', *args)\n\n"
  },
  {
    "path": "solid2/core/builtins/openscad_primitives.py",
    "content": "from ..object_base import OpenSCADObject as _OpenSCADObject, \\\n                          BareOpenSCADObject as _BareOpenSCADObject\n\nfrom pathlib import Path as _Path\nfrom typing import Sequence as _Sequence,\\\n                   Tuple as _Tuple,\\\n                   Union as _Union\n\nPathStr = _Union[_Path, str]\n\nP2 = _Tuple[float, float]\nP3 = _Tuple[float, float, float]\nP4 = _Tuple[float, float, float, float]\nVec3 = P3\nVec4 = P4\nVec34 = _Union[Vec3, Vec4]\nP3s = _Sequence[P3]\nP23 = _Union[P2, P3]\nPoints = _Sequence[P23]\nIndexes = _Union[_Sequence[int], _Sequence[_Sequence[int]]]\nScadSize = _Union[int, _Sequence[float]]\nOpenSCADObjectPlus = _Union[_OpenSCADObject, _Sequence[_OpenSCADObject]]\n\nclass polygon(_OpenSCADObject):\n    \"\"\"\n    Create a polygon with the specified points and paths.\n\n    :param points: the list of points of the polygon\n    :type points: sequence of 2 element sequences\n\n    :param paths: Either a single vector, enumerating the point list, ie. the\n    order to traverse the points, or, a vector of vectors, ie a list of point\n    lists for each separate curve of the polygon. The latter is required if the\n    polygon has holes. The parameter is optional and if omitted the points are\n    assumed in order. (The 'pN' components of the *paths* vector are 0-indexed\n    references to the elements of the *points* vector.)\n\n    :param convexity: OpenSCAD's convexity... yadda yadda\n\n    NOTE: OpenSCAD accepts only 2D points for `polygon()`. Convert any 3D points\n    to 2D before compiling\n    \"\"\"\n\n    def __init__(self, points: _Union[Points, _BareOpenSCADObject], paths: Indexes = None, convexity: int = None) -> None:\n        # Force points to 2D if they're defined in Python, pass through if they're\n        # included OpenSCAD code\n        pts = points # type: ignore\n        if not isinstance(points, _BareOpenSCADObject):\n            pts = list([(p[0], p[1]) for p in points]) # type: ignore\n\n        args = {'points':pts, 'convexity':convexity}\n        # If not supplied, OpenSCAD assumes all points in order for paths\n        if paths:\n            args['paths'] = paths # type: ignore\n        super().__init__('polygon', args)\n\n\nclass circle(_OpenSCADObject):\n    \"\"\"\n    Creates a circle at the origin of the coordinate system. The argument\n    name is optional.\n\n    :param r: This is the radius of the circle. Default value is 1.\n    :type r: number\n\n    :param d: This is the diameter of the circle. Default value is 1.\n    :type d: number\n\n    :param _fn: Number of fragments in 360 degrees.\n    :type _fn: int\n    \"\"\"\n\n    def __init__(self, r: float = None, d: float = None, _fn: int = None) -> None:\n        super().__init__('circle',\n                         {'r': r, 'd': d, '_fn': _fn})\n\n\nclass square(_OpenSCADObject):\n    \"\"\"\n    Creates a square at the origin of the coordinate system. When center is\n    True the square will be centered on the origin, otherwise it is created\n    in the first quadrant. The argument names are optional if the arguments\n    are given in the same order as specified in the parameters\n\n    :param size: If a single number is given, the result will be a square with\n    sides of that length. If a 2 value sequence is given, then the values will\n    correspond to the lengths of the X and Y sides.  Default value is 1.\n    :type size: number or 2 value sequence\n\n    :param center: This determines the positioning of the object. If True,\n    object is centered at (0,0). Otherwise, the square is placed in the positive\n    quadrant with one corner at (0,0). Defaults to False.\n    :type center: boolean\n    \"\"\"\n\n    def __init__(self, size: ScadSize = None, center: bool = None) -> None:\n        super().__init__('square',\n                         {'size': size, 'center': center})\n\n\nclass sphere(_OpenSCADObject):\n    \"\"\"\n    Creates a sphere at the origin of the coordinate system. The argument\n    name is optional.\n\n    :param r: Radius of the sphere.\n    :type r: number\n\n    :param d: Diameter of the sphere.\n    :type d: number\n\n    :param _fn: Resolution of the sphere\n    :type _fn: int\n    \"\"\"\n\n    def __init__(self, r: float = None, d: float = None, _fn: int = None) -> None:\n        super().__init__('sphere',\n                         {'r': r, 'd': d, '_fn': _fn})\n\n\nclass cube(_OpenSCADObject):\n    \"\"\"\n    Creates a cube at the origin of the coordinate system. When center is\n    True the cube will be centered on the origin, otherwise it is created in\n    the first octant. The argument names are optional if the arguments are\n    given in the same order as specified in the parameters\n\n    :param size: If a single number is given, the result will be a cube with\n    sides of that length. If a 3 value sequence is given, then the values will\n    correspond to the lengths of the X, Y, and Z sides. Default value is 1.\n    :type size: number or 3 value sequence\n\n    :param center: This determines the positioning of the object. If True,\n    object is centered at (0,0,0). Otherwise, the cube is placed in the positive\n    quadrant with one corner at (0,0,0). Defaults to False\n    :type center: boolean\n    \"\"\"\n\n    def __init__(self, size: ScadSize = None, center: bool = None) -> None:\n        super().__init__('cube',\n                         {'size': size, 'center': center})\n\n\nclass cylinder(_OpenSCADObject):\n    \"\"\"\n    Creates a cylinder or cone at the origin of the coordinate system. A\n    single radius (r) makes a cylinder, two different radii (r1, r2) make a\n    cone.\n\n    :param h: This is the height of the cylinder. Default value is 1.\n    :type h: number\n\n    :param r: The radius of both top and bottom ends of the cylinder. Use this\n    parameter if you want plain cylinder. Default value is 1.\n    :type r: number\n\n    :param r1: This is the radius of the cone on bottom end. Default value is 1.\n    :type r1: number\n\n    :param r2: This is the radius of the cone on top end. Default value is 1.\n    :type r2: number\n\n    :param d: The diameter of both top and bottom ends of the cylinder.  Use t\n    his parameter if you want plain cylinder. Default value is 1.\n    :type d: number\n\n    :param d1: This is the diameter of the cone on bottom end. Default value is 1.\n    :type d1: number\n\n    :param d2: This is the diameter of the cone on top end. Default value is 1.\n    :type d2: number\n\n    :param center: If True will center the height of the cone/cylinder around\n    the origin. Default is False, placing the base of the cylinder or r1 radius\n    of cone at the origin.\n    :type center: boolean\n\n    :param _fn: Number of fragments in 360 degrees.\n    :type _fn: int\n    \"\"\"\n\n    def __init__(self, h: float = None, r1: float = None, r2: float = None, center: bool = None,\n                 r: float = None, d: float = None, d1: float = None, d2: float = None,\n                 _fn: int = None) -> None:\n        super().__init__('cylinder',\n                         {'r': r, 'h': h, 'r1': r1, 'r2': r2, 'd': d,\n                          'd1': d1, 'd2': d2, 'center': center,\n                          '_fn': _fn})\n\n\nclass polyhedron(_OpenSCADObject):\n    \"\"\"\n    Create a polyhedron with a list of points and a list of faces. The point\n    list is all the vertices of the shape, the faces list is how the points\n    relate to the surfaces of the polyhedron.\n\n    *note: if your version of OpenSCAD is lower than 2014.03 replace \"faces\"\n    with \"triangles\" in the below examples*\n\n    :param points: sequence of points or vertices (each a 3 number sequence).\n\n    :param triangles: (*deprecated in version 2014.03, use faces*) vector of\n    point triplets (each a 3 number sequence). Each number is the 0-indexed point\n    number from the point vector.\n\n    :param faces: (*introduced in version 2014.03*) vector of point n-tuples\n    with n >= 3. Each number is the 0-indexed point number from the point vector.\n    That is, faces=[[0,1,4]] specifies a triangle made from the first, second,\n    and fifth point listed in points. When referencing more than 3 points in a\n    single tuple, the points must all be on the same plane.\n\n    :param convexity: The convexity parameter specifies the maximum number of\n    front sides (back sides) a ray intersecting the object might penetrate. This\n    parameter is only needed for correctly displaying the object in OpenCSG\n    preview mode and has no effect on the polyhedron rendering.\n    :type convexity: int\n    \"\"\"\n\n    def __init__(self, points: P3s, faces: Indexes, convexity: int = None, triangles: Indexes = None) -> None:\n        super().__init__('polyhedron',\n                         {'points': points, 'faces': faces,\n                          'convexity': convexity,\n                          'triangles': triangles})\n\n\nclass union(_OpenSCADObject):\n    \"\"\"\n    Creates a union of all its child nodes. This is the **sum** of all\n    children.\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__('union', {})\n\n\nclass intersection(_OpenSCADObject):\n    \"\"\"\n    Creates the intersection of all child nodes. This keeps the\n    **overlapping** portion\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__('intersection', {})\n\n\nclass difference(_OpenSCADObject):\n    \"\"\"\n    Subtracts the 2nd (and all further) child nodes from the first one.\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__('difference', {})\n\n\nclass translate(_OpenSCADObject):\n    \"\"\"\n    Translates (moves) its child elements along the specified vector.\n\n    :param v: X, Y and Z translation\n    :type v: 3 value sequence\n    \"\"\"\n\n    def __init__(self, v: P3 = None) -> None:\n        super().__init__('translate', {'v': v})\n\n\nclass scale(_OpenSCADObject):\n    \"\"\"\n    Scales its child elements using the specified vector.\n\n    :param v: X, Y and Z scale factor\n    :type v: 3 value sequence\n    \"\"\"\n\n    def __init__(self, v: P3 = None) -> None:\n        super().__init__('scale', {'v': v})\n\n\nclass rotate(_OpenSCADObject):\n    \"\"\"\n    Rotates its child 'a' degrees about the origin of the coordinate system\n    or around an arbitrary axis.\n\n    :param a: degrees of rotation, or sequence for degrees of rotation in each of the X, Y and Z axis.\n    :type a: number or 3 value sequence\n\n    :param v: sequence specifying 0 or 1 to indicate which axis to rotate by 'a' degrees. Ignored if 'a' is a sequence.\n    :type v: 3 value sequence\n    \"\"\"\n\n    def __init__(self, a: _Union[float, Vec3] = None, v: Vec3 = None) -> None:\n        super().__init__('rotate', {'a': a, 'v': v})\n\n\nclass mirror(_OpenSCADObject):\n    \"\"\"\n    Mirrors the child element on a plane through the origin.\n\n    :param v: the normal vector of a plane intersecting the origin through which to mirror the object.\n    :type v: 3 number sequence\n\n    \"\"\"\n\n    def __init__(self, v: Vec3) -> None:\n        super().__init__('mirror', {'v': v})\n\n\nclass resize(_OpenSCADObject):\n    \"\"\"\n    Modify the size of the child object to match the given new size.\n\n    :param newsize: X, Y and Z values\n    :type newsize: 3 value sequence\n\n    :param auto: 3-tuple of booleans to specify which axes should be scaled\n    :type auto: 3 boolean sequence\n    \"\"\"\n\n    def __init__(self, newsize: Vec3, auto: _Tuple[bool, bool, bool] = None) -> None:\n        super().__init__('resize', {'newsize': newsize, 'auto': auto})\n\n\nclass multmatrix(_OpenSCADObject):\n    \"\"\"\n    Multiplies the geometry of all child elements with the given 4x4\n    transformation matrix.\n\n    :param m: transformation matrix\n    :type m: sequence of 4 sequences, each containing 4 numbers.\n    \"\"\"\n\n    def __init__(self, m: _Tuple[Vec4, Vec4, Vec4, Vec4]) -> None:\n        super().__init__('multmatrix', {'m': m})\n\n\nclass color(_OpenSCADObject):\n    \"\"\"\n    Displays the child elements using the specified RGB color + alpha value.\n    This is only used for the F5 preview as CGAL and STL (F6) do not\n    currently support color. The alpha value will default to 1.0 (opaque) if\n    not specified.\n\n    :param c: RGB color + alpha value.\n    :type c: sequence of 3 or 4 numbers between 0 and 1, OR 3-, 4-, 6-, or 8-digit RGB/A hex code, OR string color name as described at https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#color\n\n    :param alpha: Alpha value from 0 to 1\n    :type alpha: float\n    \"\"\"\n\n    def __init__(self, c: _Union[Vec34, str], alpha: float = 1.0) -> None:\n        super().__init__('color', {'c': c, 'alpha': alpha})\n\n\nclass minkowski(_OpenSCADObject):\n    \"\"\"\n    Renders the `minkowski\n    sum <http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Minkowski_sum_3/Chapter_main.html>`__\n    of child nodes.\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__('minkowski', {})\n\n\nclass offset(_OpenSCADObject):\n    \"\"\"\n\n    :param r: Amount to offset the polygon (rounded corners). When negative,\n        the polygon is offset inwards. The parameter r specifies the radius\n        that is used to generate rounded corners, using delta gives straight edges.\n    :type r: number\n\n    :param delta: Amount to offset the polygon (sharp corners). When negative,\n        the polygon is offset inwards. The parameter r specifies the radius\n        that is used to generate rounded corners, using delta gives straight edges.\n    :type delta: number\n\n    :param chamfer: When using the delta parameter, this flag defines if edges\n        should be chamfered (cut off with a straight line) or not (extended to\n        their intersection).\n    :type chamfer: bool\n\n    :param _fn: Resolution of any radial curves\n    :type _fn: int\n    \"\"\"\n\n    def __init__(self, r: float = None, delta: float = None, chamfer: bool = False,\n                _fn: int=None) -> None:\n        if r is not None:\n            kwargs = {'r': r}\n        elif delta is not None:\n            kwargs = {'delta': delta, 'chamfer': chamfer}\n        else:\n            raise ValueError(\"offset(): Must supply r or delta\")\n        if _fn:\n            kwargs['_fn'] = _fn\n        super().__init__('offset', kwargs)\n\n\nclass hull(_OpenSCADObject):\n    \"\"\"\n    Renders the `convex\n    hull <http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Convex_hull_2/Chapter_main.html>`__\n    of child nodes.\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__('hull', {})\n\n\nclass render(_OpenSCADObject):\n    \"\"\"\n    Always calculate the CSG model for this tree (even in OpenCSG preview\n    mode).\n\n    :param convexity: The convexity parameter specifies the maximum number of front sides (back sides) a ray intersecting the object might penetrate. This parameter is only needed for correctly displaying the object in OpenCSG preview mode and has no effect on the polyhedron rendering.\n    :type convexity: int\n    \"\"\"\n\n    def __init__(self, convexity: int = None) -> None:\n        super().__init__('render', {'convexity': convexity})\n\n\nclass linear_extrude(_OpenSCADObject):\n    \"\"\"\n    Linear Extrusion is a modeling operation that takes a 2D polygon as\n    input and extends it in the third dimension. This way a 3D shape is\n    created.\n\n    :param height: the extrusion height.\n    :type height: number\n\n    :param center: determines if the object is centered on the Z-axis after extrusion.\n    :type center: boolean\n\n    :param convexity: The convexity parameter specifies the maximum number of\n    front sides (back sides) a ray intersecting the object might penetrate. This\n    parameter is only needed for correctly displaying the object in OpenCSG\n    preview mode and has no effect on the polyhedron rendering.\n    :type convexity: int\n\n    :param twist: Twist is the number of degrees of through which the shape is\n    extruded.  Setting to 360 will extrude through one revolution.  The twist\n    direction follows the left hand rule.\n    :type twist: number\n\n    :param slices: number of slices to extrude. Can be used to improve the output.\n    :type slices: int\n\n    :param scale: relative size of the top of the extrusion compared to the start\n    :type scale: number\n\n    \"\"\"\n\n    def __init__(self, height: float = None, center: bool = None, convexity: int = None,\n                 twist: float = None, slices: int = None, scale: float = None) -> None:\n        super().__init__('linear_extrude',\n                         {'height': height, 'center': center,\n                          'convexity': convexity, 'twist': twist,\n                          'slices': slices, 'scale': scale})\n\n\nclass rotate_extrude(_OpenSCADObject):\n    \"\"\"\n    A rotational extrusion is a Linear Extrusion with a twist, literally.\n    Unfortunately, it can not be used to produce a helix for screw threads\n    as the 2D outline must be normal to the axis of rotation, ie they need\n    to be flat in 2D space.\n\n    The 2D shape needs to be either completely on the positive, or negative\n    side (not recommended), of the X axis. It can touch the axis, i.e. zero,\n    however if the shape crosses the X axis a warning will be shown in the\n    console windows and the rotate/_extrude() will be ignored. If the shape\n    is in the negative axis the faces will be inside-out, you probably don't\n    want to do that; it may be fixed in the future.\n\n    :param angle: Defaults to 360. Specifies the number of degrees to sweep,\n    starting at the positive X axis. The direction of the sweep follows the\n    Right Hand Rule, hence a negative angle will sweep clockwise.\n    :type angle: number\n\n    :param _fn: Number of fragments in 360 degrees.\n    :type _fn: int\n\n    :param convexity: The convexity parameter specifies the maximum number of\n    front sides (back sides) a ray intersecting the object might penetrate. This\n    parameter is only needed for correctly displaying the object in OpenCSG\n    preview mode and has no effect on the polyhedron rendering.\n    :type convexity: int\n\n    \"\"\"\n\n    def __init__(self, angle: float = 360, convexity: int = None, _fn: int = None) -> None:\n        super().__init__('rotate_extrude',\n                         {'angle': angle, '_fn': _fn,\n                          'convexity': convexity})\n\n\nclass dxf_linear_extrude(_OpenSCADObject):\n    def __init__(self, file: PathStr, layer: float = None, height: float = None,\n                 center: bool = None, convexity: int = None, twist: float = None,\n                 slices: int = None) -> None:\n        super().__init__('dxf_linear_extrude',\n                         {'file': _Path(file).as_posix(), 'layer': layer,\n                          'height': height, 'center': center,\n                          'convexity': convexity, 'twist': twist,\n                          'slices': slices})\n\n\nclass projection(_OpenSCADObject):\n    \"\"\"\n    Creates 2d shapes from 3d models, and export them to the dxf format.\n    It works by projecting a 3D model to the (x,y) plane, with z at 0.\n\n    :param cut: when True only points with z=0 will be considered (effectively\n    cutting the object) When False points above and below the plane will be\n    considered as well (creating a proper projection).\n    :type cut: boolean\n    \"\"\"\n\n    def __init__(self, cut: bool = None) -> None:\n        super().__init__('projection', {'cut': cut})\n\n\nclass surface(_OpenSCADObject):\n    \"\"\"\n    Surface reads information from text or image files.\n\n    :param file: The path to the file containing the heightmap data.\n    :type file: PathStr\n\n    :param center: This determines the positioning of the generated object. If\n    True, object is centered in X- and Y-axis. Otherwise, the object is placed\n    in the positive quadrant. Defaults to False.\n    :type center: boolean\n\n    :param invert: Inverts how the color values of imported images are translated\n    into height values. This has no effect when importing text data files.\n    Defaults to False.\n    :type invert: boolean\n\n    :param convexity: The convexity parameter specifies the maximum number of\n    front sides (back sides) a ray intersecting the object might penetrate.\n    This parameter is only needed for correctly displaying the object in OpenCSG\n    preview mode and has no effect on the polyhedron rendering.\n    :type convexity: int\n    \"\"\"\n\n    def __init__(self, file, center: bool = None, convexity: int = None, invert=None) -> None:\n        super().__init__('surface',\n                         {'file': file, 'center': center,\n                          'convexity': convexity, 'invert': invert})\n\n\nclass text(_OpenSCADObject):\n    \"\"\"\n    Create text using fonts installed on the local system or provided as separate\n    font file.\n\n    :param text: The text to generate.\n    :type text: string\n\n    :param size: The generated text will have approximately an ascent of the given\n    value (height above the baseline). Default is 10.  Note that specific fonts\n    will vary somewhat and may not fill the size specified exactly, usually\n    slightly smaller.\n    :type size: number\n\n    :param font: The name of the font that should be used. This is not the name\n    of the font file, but the logical font name (internally handled by the\n    fontconfig library). A list of installed fonts can be obtained using the\n    font list dialog (Help -> Font List).\n    :type font: string\n\n    :param halign: The horizontal alignment for the text. Possible values are\n    \"left\", \"center\" and \"right\". Default is \"left\".\n    :type halign: string\n\n    :param valign: The vertical alignment for the text. Possible values are\n    \"top\", \"center\", \"baseline\" and \"bottom\". Default is \"baseline\".\n    :type valign: string\n\n    :param spacing: Factor to increase/decrease the character spacing.  The\n    default value of 1 will result in the normal spacing for the font, giving\n    a value greater than 1 will cause the letters to be spaced further apart.\n    :type spacing: number\n\n    :param direction: Direction of the text flow. Possible values are \"ltr\"\n    (left-to-right), \"rtl\" (right-to-left), \"ttb\" (top-to-bottom) and \"btt\"\n    (bottom-to-top). Default is \"ltr\".\n    :type direction: string\n\n    :param language: The language of the text. Default is \"en\".\n    :type language: string\n\n    :param script: The script of the text. Default is \"latin\".\n    :type script: string\n\n    :param _fn: used for subdividing the curved path _fn provided by\n    freetype\n    :type _fn: int\n    \"\"\"\n\n    def __init__(self, text: str, size: float = None, font: str = None, halign: str = None,\n                 valign: str = None, spacing: float = None, direction: str = None,\n                 language: str = None, script: str = None, _fn: int = None) -> None:\n        super().__init__('text',\n                         {'text': text, 'size': size, 'font': font,\n                          'halign': halign, 'valign': valign,\n                          'spacing': spacing, 'direction': direction,\n                          'language': language, 'script': script,\n                          '_fn': _fn})\n\n\nclass child(_OpenSCADObject):\n    def __init__(self, index: int = None, vector: _Sequence[int] = None, range=None) -> None:\n        super().__init__('child',\n                         {'index': index, 'vector': vector,\n                          'range': range})\n\n\nclass children(_OpenSCADObject):\n    \"\"\"\n    The child nodes of the module instantiation can be accessed using the\n    children() statement within the module. The number of module children\n    can be accessed using the $children variable.\n\n    :param index: select one child, at index value. Index start at 0 and should\n    be less than or equal to $children-1.\n    :type index: int\n\n    :param vector: select children with index in vector. Index should be between\n    0 and $children-1.\n    :type vector: sequence of int\n\n    :param range: [:] or [::]. select children between to , incremented by (default 1).\n    \"\"\"\n\n    def __init__(self, index: int = None, vector: float = None, range: P23 = None) -> None:\n        super().__init__('children',\n                         {'index': index, 'vector': vector,\n                          'range': range})\n\n\nclass import_stl(_OpenSCADObject):\n    def __init__(self, file: PathStr, origin: P2 = (0, 0), convexity: int = None, layer: int = None) -> None:\n        super().__init__('import',\n                         {'file': _Path(file).as_posix(), 'origin': origin,\n                          'convexity': convexity, 'layer': layer})\n\n\nclass import_dxf(_OpenSCADObject):\n    def __init__(self, file, origin=(0, 0), convexity: int = None, layer: int = None) -> None:\n        super().__init__('import',\n                         {'file': file, 'origin': origin,\n                          'convexity': convexity, 'layer': layer})\n\n\nclass import_(_OpenSCADObject):\n    \"\"\"\n    Imports a file for use in the current OpenSCAD model. OpenSCAD currently\n    supports import of DXF and STL (both ASCII and Binary) files.\n\n    :param file: path to the STL or DXF file.\n    :type file: PathStr\n\n    :param convexity: The convexity parameter specifies the maximum number of\n    front sides (back sides) a ray intersecting the object might penetrate. This\n    parameter is only needed for correctly displaying the object in OpenCSG\n    preview mode and has no effect on the polyhedron rendering.\n    :type convexity: int\n    \"\"\"\n\n    def __init__(self, file: PathStr, origin: P2 = (0, 0), convexity: int = None, layer: int = None) -> None:\n        super().__init__('import',\n                         {'file': _Path(file).as_posix(), 'origin': origin,\n                          'convexity': convexity, 'layer': layer})\n\nclass _import(import_): pass\n\n\nclass intersection_for(_OpenSCADObject):\n    \"\"\"\n    Iterate over the values in a vector or range and take an\n    intersection of the contents.\n    \"\"\"\n\n    def __init__(self, n: int) -> None:\n        super().__init__('intersection_for', {'n': n})\n\n\n"
  },
  {
    "path": "solid2/core/builtins/primitives.py",
    "content": "from ..scad_import import use as _use\nfrom ...config import config as _config\nfrom pathlib import Path as _Path\n\n# This loads all the built in OpenSCAD functions\n# (like circle, square, color, translate.....)\nif not _config.use_implicit_builtins:\n    from .openscad_primitives import *\nelse:\n    _use(_Path(__file__).parent / \"implicit.primitives\", skip_render=True)\n"
  },
  {
    "path": "solid2/core/extension_manager.py",
    "content": "\nclass ExtensionManager():\n    def __init__(self):\n        self.wrapper = []\n        self.pre_render = []\n        self.post_render = []\n        self.access_syntax = {}\n\n    def register_root_wrapper(self, ext):\n        self.wrapper.append(ext)\n\n    def register_pre_render(self, func):\n        self.pre_render.append(func)\n\n    def register_post_render(self, func):\n        self.post_render.append(func)\n\n    def register_access_syntax(self, fn):\n        import inspect\n        if fn.__name__ in self.access_syntax:\n            raise Exception(f'Unable to register \"{fn.__name__}\" plugin, it '\n                             'would overwrite an existing plugin or method.')\n\n        if inspect.isclass(fn):\n            self.access_syntax[fn.__name__] = \\\n                lambda y, *args, **kwargs: fn(*args, **kwargs)(y)\n        else:\n            self.access_syntax[fn.__name__] = fn\n\n    def wrap_root_node(self, root):\n        new_root_node = root\n        for w in self.wrapper:\n            new_root_node = w(new_root_node)\n\n        return new_root_node\n\n    def call_pre_render(self, root):\n        pre_render_str = ''\n\n        for f in self.pre_render:\n            pre_render_str += f(root)\n\n        return pre_render_str.strip()\n\n    def call_post_render(self, root):\n        post_render_str = ''\n\n        for f in self.post_render:\n            post_render_str += f(root)\n\n        return post_render_str.strip()\n\n    def access_syntax_lookup(self, key):\n        return self.access_syntax.get(key, None)\n\ndefault_extension_manager = ExtensionManager()\n\n# expose register functions as decorators / global functions\ndef register_access_syntax(fn):\n    default_extension_manager.register_access_syntax(fn)\n    return fn\n\ndef register_pre_render(fn):\n    default_extension_manager.register_pre_render(fn)\n    return fn\n\ndef register_post_render(fn):\n    default_extension_manager.register_post_render(fn)\n    return fn\n\ndef register_root_wrapper(fn):\n    default_extension_manager.register_root_wrapper(fn)\n    return fn\n\n"
  },
  {
    "path": "solid2/core/object_base/__init__.py",
    "content": "from .object_base_impl import *\n"
  },
  {
    "path": "solid2/core/object_base/access_syntax_mixin.py",
    "content": "from ...config import config\n\ndef builtins():\n    from .. import builtins\n    return builtins\n\nclass AccessSyntaxMixin:\n    if not config.use_implicit_builtins:\n        def intersection_for(self, n):     return builtins().intersection_for(n)(self)\n        def color(self, color, alpha=1.0): return builtins().color(color, alpha)(self)\n        def hull(self):                    return builtins().hull()(self)\n        def render(self, convexity=None):  return builtins().render(convexity)(self)\n        def projection(self, cut=None):    return builtins().projection(cut)(self)\n\n        def surface(self, file, center=None, convexity=None, invert=None):\n            return builtins().surface(file, center, convexity, invert)(self)\n        def offset(self, r=None, delta=None, chamfer=None, _fn=None):\n            return builtins().offset(r, delta, chamfer, _fn)(self)\n\n        def mirror(self, *args, **kwargs): return builtins().mirror(*args, **kwargs)(self)\n        def resize(self, *args, **kwargs): return builtins().resize(*args, **kwargs)(self)\n\n        def mirrorX(self): return builtins().mirrorX()(self)\n        def mirrorY(self): return builtins().mirrorY()(self)\n        def mirrorZ(self): return builtins().mirrorZ()(self)\n\n        def resizeX(self, x): return builtins().resizeX(x)(self)\n        def resizeY(self, y): return builtins().resizeY(y)(self)\n        def resizeZ(self, z): return builtins().resizeZ(z)(self)\n\n    def union(self):          return builtins().union()(self)\n    def difference(self):     return builtins().difference()(self)\n    def intersection(self):   return builtins().intersection()(self)\n\n\n    def rotate_extrude(self, angle=None, convexity=None, _fn=None):\n        return builtins().rotate_extrude(angle, convexity, _fn)(self)\n\n    def linear_extrude(self, height=None, center=None, convexity=None, \\\n                       twist=None, slices=None, scale=None):\n        return builtins().linear_extrude(height, center, convexity, twist,\n                                         slices, scale)(self)\n\n    def translate(self, *args, **kwargs): return builtins().translate(*args, **kwargs)(self)\n    def scale(self, *args, **kwargs):     return builtins().scale(*args, **kwargs)(self)\n    def rotate(self, *args, **kwargs):    return builtins().rotate(*args, **kwargs)(self)\n\n    def down(self, z):    return builtins().down(z)(self)\n    def up(self, z):      return builtins().up(z)(self)\n    def left(self, x):    return builtins().left(x)(self)\n    def right(self, x):   return builtins().right(x)(self)\n    def back(self, y):    return builtins().back(y)(self)\n    def fwd(self, y):     return builtins().fwd(y)(self)\n    def forward(self, y): return builtins().fwd(y)(self)\n\n    def translateX(self, x): return builtins().translateX(x)(self)\n    def translateY(self, y): return builtins().translateY(y)(self)\n    def translateZ(self, z): return builtins().translateZ(z)(self)\n\n    def rotateX(self, x): return builtins().rotateX(x)(self)\n    def rotateY(self, y): return builtins().rotateY(y)(self)\n    def rotateZ(self, z): return builtins().rotateZ(z)(self)\n\n    def scaleX(self, x): return builtins().scaleX(x)(self)\n    def scaleY(self, y): return builtins().scaleY(y)(self)\n    def scaleZ(self, z): return builtins().scaleZ(z)(self)\n\n    def debug(self):      return builtins().debug()(self)\n    def background(self): return builtins().background()(self)\n    def root(self):       return builtins().root()(self)\n    def disable(self):    return builtins().disable()(self)\n\n    def __getattr__(self, name):\n        #ask the extension manager for dynamic access syntax extensions\n        from ..extension_manager import default_extension_manager\n\n        fn = default_extension_manager.access_syntax_lookup(name)\n        if not fn:\n            raise AttributeError(f\"'{type(self).__name__}' object has no attribute '{name}'\")\n\n        return lambda *args, **kwargs: fn(self, *args, **kwargs)\n"
  },
  {
    "path": "solid2/core/object_base/object_base_impl.py",
    "content": "from .access_syntax_mixin import AccessSyntaxMixin\nfrom .operator_mixin import OperatorMixin\n\n#don't do relative imports on the global scope to be able to import this file\n#from \"everywhere\"\n\nclass RenderMixin:\n    def __repr__(self):\n        return self.as_scad()\n\n    def as_scad(self):\n        from ..scad_render import scad_render\n        return scad_render(self)[:-1]\n\n    def save_as_scad(self, filename='', outdir=''):\n        from ..scad_render import scad_render_to_file\n        return scad_render_to_file(self, filename, outdir)\n\n    def save_as_stl(self, filename=None):\n        from ..scad_render import render_to_stl_file\n        return render_to_stl_file(self, filename)\n\n    def _ipython_display_(self):\n        from IPython import get_ipython, display\n\n        def is_notebook():\n            return get_ipython().__class__.__name__ == 'ZMQInteractiveShell'\n\n        if is_notebook():\n            try:\n                from jupyterscad import render\n            except ImportError:\n                print(self.as_scad())\n                return\n\n            display.display(render(self))\n\nclass ObjectBase(RenderMixin):\n    def __init__(self):\n        self._children = []\n\n    def add(self, c):\n        def _add(c):\n            assert(hasattr(c, \"_render\"))\n            self._children += [c]\n\n        if isinstance(c, list):\n            for cc in c:\n                _add(cc)\n        else:\n            _add(c)\n\n        return self\n\n    def _render(self):\n        s = ''\n        for c in self._children:\n            s += c._render()\n        return s\n\n    def __call__(self, *args):\n        #translate(...)(cube())\n        #this adds cube() to translate._children\n        for a in args:\n            self.add(a)\n        return self\n\n\nclass BareOpenSCADObject(ObjectBase):\n    def __init__(self, name, params):\n        super().__init__()\n        self._name = name\n        self._params = params\n\n    def _render(self):\n        \"\"\"\n            returns the scad code for a given node tuple consiting of name,\n            params and children list.\n\n            -> translate(v = [1, 2, 3]) {children[0]; children[1]; ...};\\n\n        \"\"\"\n        from ..utils import indent\n        renderedChildsList = [indent(child._render()) for child in self._children]\n        if renderedChildsList:\n            renderedChilds = f\" {{\\n{''.join(renderedChildsList)}}}\\n\"\n        else:\n            renderedChilds = \";\\n\"\n\n        return self._generate_scad_head() + renderedChilds\n\n    def _generate_scad_head(self):\n        \"\"\"\n            for a given function name and dict of params it returns:\n                {name}(p1=v1, p2=v2,...)\n                -> translate(v = [1, 2, 3])\n        \"\"\"\n        from ..utils import unescape_openscad_identifier, py2openscad\n        from ...config import config\n\n        param_strings = []\n        for p in sorted(self._params.keys()):\n            if self._params[p] is None:\n                continue\n\n            if config.use_implicit_builtins and \\\n                        isinstance(self._params[p], OpenSCADParameterFunction):\n\n                param_strings.append(self._params[p]._render())\n            else:\n                scad_value = py2openscad(self._params[p])\n                scad_identifier = unescape_openscad_identifier(p)\n\n                param_strings.append(f'{scad_identifier} = {scad_value}')\n\n        scad_identifier = unescape_openscad_identifier(self._name)\n        param_str = \", \".join(param_strings)\n\n        return f'{scad_identifier}({param_str})'\n\nclass OpenSCADObject(AccessSyntaxMixin, OperatorMixin, BareOpenSCADObject):\n    pass\n\nclass OpenSCADConstant:\n    def __init__(self, value):\n        self.value = value\n\n        from ..utils import escape_openscad_identifier\n        self.__doc__ = escape_openscad_identifier(value)\n\n    def __repr__(self):\n        return f'{self.value}'\n\n    def __operator_base__(self, op, other):\n        return OpenSCADConstant(f'({self} {op} {other})')\n\n    def __roperator_base__(self, op, other):\n        return OpenSCADConstant(f'({other} {op} {self})')\n\n    def __unary_operator_base__(self, op):\n        return OpenSCADConstant(f'({op}{self})')\n\n    def __illegal_operator__(self):\n       raise Exception(\"You can't compare a OpenSCADConstant with something else, \" +\\\n                       \"because we don't know the customized value at \" +\\\n                       \"SolidPythons runtime because it might get customized \" +\\\n                       \"at OpenSCAD runtime.\")\n\n    #basic operators +, -, *, /, %, **\n    def __add__(self, other): return self.__operator_base__(\"+\", other)\n    def __sub__(self, other): return self.__operator_base__(\"-\", other)\n    def __mul__(self, other): return self.__operator_base__(\"*\", other)\n    def __mod__(self, other): return self.__operator_base__(\"%\", other)\n    def __pow__(self, other): return self.__operator_base__(\"^\", other)\n    def __truediv__(self, other): return self.__operator_base__(\"/\", other)\n\n    def __radd__(self, other): return self.__roperator_base__(\"+\", other)\n    def __rsub__(self, other): return self.__roperator_base__(\"-\", other)\n    def __rmul__(self, other): return self.__roperator_base__(\"*\", other)\n    def __rmod__(self, other): return self.__roperator_base__(\"%\", other)\n    def __rpow__(self, other): return self.__roperator_base__(\"^\", other)\n    def __rtruediv__(self, other): return self.__roperator_base__(\"/\", other)\n\n    #unary operators\n    def __neg__(self): return self.__unary_operator_base__(\"-\")\n\n    #other operators\n    def __abs__(self): return OpenSCADConstant(f'abs({self})')\n\n    #\"illegal\" operators\n    def __eq__(self, other): return self.__operator_base__(\"==\", other) #type: ignore\n    def __ne__(self, other): return self.__operator_base__(\"!=\", other) #type: ignore\n    def __le__(self, other): return self.__operator_base__(\"<=\", other)\n    def __ge__(self, other): return self.__operator_base__(\">=\", other)\n    def __lt__(self, other): return self.__operator_base__(\"<\", other)\n    def __gt__(self, other): return self.__operator_base__(\">\", other)\n\n    #do not allow to evaluate to bool\n    def __bool__(self):\n        raise Exception(\"You can't evaluate scad variables because \" +\\\n                        \"we don't know the value of the variable at \" +\\\n                        \"SolidPython runtime.\")\n\n    def _render(self):\n        from textwrap import dedent\n        return dedent(self.value)\n\ndef scad_inline(code):\n    return OpenSCADConstant(code)\n\nclass OpenSCADParameterFunction(OpenSCADConstant):\n    pass\n\ndef scad_inline_parameter_func(code):\n    return OpenSCADParameterFunction(code)\n\n"
  },
  {
    "path": "solid2/core/object_base/operator_mixin.py",
    "content": "\nclass OperatorMixin:\n    def _union_op(self, x, unionType):\n        \"\"\"\n        This makes u = a+b identical to:\n        u = union()(a, b )\n        \"\"\"\n        res = unionType()\n\n        #add self or all its children to res\n        if isinstance(self, unionType):\n            for c in self._children:\n                res.add(c)\n        else:\n            res.add(self)\n\n        #add x or all its children to res\n        if isinstance(x, unionType):\n            for c in x._children:\n                res.add(c)\n        else:\n            res.add(x)\n\n        return res\n\n    def _difference_op(self, x, differenceType):\n        \"\"\"\n        This makes u = a - b identical to:\n        u = difference()(a, b )\n        \"\"\"\n        res = differenceType()\n\n        if isinstance(self, differenceType) and len(self._children):\n            for c in self._children:\n                res.add(c)\n        else:\n            res.add(self)\n\n        res.add(x)\n        return res\n\n    def _intersection_op(self, x, intersectionType):\n        \"\"\"\n        This makes u = a * b identical to:\n        u = intersection()(a, b )\n        \"\"\"\n        res = intersectionType()\n\n        if isinstance(self, intersectionType) and len(self._children):\n            for c in self._children:\n                res.add(c)\n        else:\n            res.add(self)\n\n        if isinstance(x, intersectionType):\n            for c in x._children:\n                res.add(c)\n        else:\n            res.add(x)\n\n        return res\n\n    def __add__(self, x):\n        from ..builtins import union\n        return self._union_op(x, union)\n    def __or__(self, x):\n        from ..builtins import union\n        return self._union_op(x, union)\n    def __radd__(self, x):\n        from ..builtins import union\n        return union()(x)._union_op(self, union)\n    def __sub__(self, x):\n        from ..builtins import difference\n        return self._difference_op(x, difference)\n    def __mul__(self, x):\n        from ..builtins import intersection\n        return self._intersection_op(x, intersection)\n    def __and__(self, x):\n        from ..builtins import intersection\n        return self._intersection_op(x, intersection)\n    def __invert__(self):\n        from .. import builtins; return builtins.debug()(self)\n\n"
  },
  {
    "path": "solid2/core/object_factory.py",
    "content": "from .object_base import OpenSCADObject\nfrom .utils import escape_openscad_identifier\n\n# =========================\n# = creating the wrappers =\n# =========================\ndef check_signature(name, args_def, kwargs_def, *args, **kwargs):\n    #check whether the args and kwargs fit a function signature definition\n    #defined with args_def and kwargs_def. args_def and kwargs_def are lists\n    #of all parameter names the function {name} accepts\n\n    filtered_kwargs = {k: kwargs[k] for k in kwargs if not k.startswith(\"_\")}\n    if len(args) + len(filtered_kwargs) > len(args_def) + len(kwargs_def):\n        raise TypeError(f\"too many arguments to {name}(...)\")\n\n    full_args_tuples = list(zip(args_def + kwargs_def, args))\n    full_args_tuples += list(zip(filtered_kwargs.keys(), filtered_kwargs.values()))\n\n    full_args_names = [x[0] for x in full_args_tuples]\n\n    args_def_copy = args_def[:]\n    kwargs_def_copy = kwargs_def[:]\n\n    while full_args_names and (args_def_copy or kwargs_def_copy):\n        a = full_args_names.pop()\n\n        if a in args_def_copy:\n            args_def_copy.remove(a)\n\n        elif a in kwargs_def_copy:\n            kwargs_def_copy.remove(a)\n\n        else:\n            raise TypeError(f\"{name}(...) has no parameter {a} or it is \" +\\\n                            f\"already occupied by a positional argument\")\n\n    #are there still unmatched parameters left?\n    if full_args_names:\n        if not args_def_copy and not kwargs_def_copy:\n            raise TypeError(f\"{name}(...) too many arguments\")\n        else:\n            assert(False)\n\n    #are there still unmet args in args_def?\n    if args_def_copy and not full_args_names:\n        raise TypeError(f\"not enough parameters to {name}(...)\")\n\ndef create_openscad_wrapper_from_symbols(name, args, kwargs):\n\n    #this is the function we'll bind to the init function of the new class\n    #that we'll create to represent the openscad function\n    def init_func(self, *args, **kwargs):\n        def legacy_patch(kwargs):\n            # this function patches the kwargs to be backward compatible\n            import keyword\n            if \"segments\" in kwargs.keys():\n                kwargs[\"_fn\"] = kwargs.pop(\"segments\")\n            keys_to_replace = []\n\n            #replace keyword_ with _keyword\n            for k in kwargs.keys():\n                if k.endswith(\"_\") and keyword.iskeyword(k[:-1]):\n                    keys_to_replace.append(k)\n            for k in keys_to_replace:\n                kwargs[\"_\" + k[:-1]] = kwargs.pop(k)\n\n            #replace __[0-9]... with _[0-9]\n            keys_to_replace = []\n            for k in kwargs.keys():\n                if k.startswith(\"__\") and k[2].isdigit():\n                    keys_to_replace.append(k)\n            for k in keys_to_replace:\n                kwargs[\"_\" + k[2:]] = kwargs.pop(k)\n\n        legacy_patch(kwargs)\n\n        #check whether the *args and **kwargs meet our parameter definitions\n        check_signature(name, args_def, kwargs_def, *args, **kwargs)\n\n        #zip the args with the def dicts and update it with kwargs\n        #to get a single complete kwargs list\n        params = dict(zip(args_def + kwargs_def, args))\n        params.update(kwargs)\n\n        #call OpenSCADObject ctor\n        return super(self.__class__, self).__init__(name, params)\n\n\n    #escape all identifiers\n    name = escape_openscad_identifier(name)\n    args_def = list(map(escape_openscad_identifier, args))\n    kwargs_def = list(map(escape_openscad_identifier, kwargs))\n\n    #create the class and bind an \"instance of\" _init_func it's __init__ function\n    class_declaration = type(name, (OpenSCADObject,), {\"__init__\" : init_func})\n\n    #add the function signature as __doc__ string, so ExpSolidNamespace can\n    #display it\n    param_str = \",\".join([str(x) for x in args])\n    param_str += \",\" if param_str else ''\n    param_str += \",\".join([str(x) + \"=...\" for x in kwargs])\n    class_declaration.__doc__ = f'{name}({param_str})'\n\n    return class_declaration\n\n"
  },
  {
    "path": "solid2/core/parse_scad.py",
    "content": "import hashlib\nimport pickle\nfrom functools import partial\nfrom pathlib import Path\nfrom collections import namedtuple\n\nfrom ..config import config\nfrom .object_base import OpenSCADConstant\nfrom .utils import escape_openscad_identifier\nfrom .object_factory import create_openscad_wrapper_from_symbols\n\ncallables_entry = namedtuple(\"callables_entry\", [\"name\", \"args\", \"kwargs\"])\n\n\ndef get_pickle_filename(filename):\n    md5 = hashlib.md5()\n    md5.update(filename.as_posix().encode('utf-8'))\n    filename_hash = md5.hexdigest()\n\n    with open(filename, mode='rb') as f:\n        d = hashlib.md5()\n        for buf in iter(partial(f.read, 128), b''):\n            d.update(buf)\n        file_content_hash = d.hexdigest()\n\n    pickle_filename = Path(filename_hash).with_suffix(\".\" + file_content_hash).name\n    assert(config.pickle_cache_dir is not None)\n    return config.pickle_cache_dir / pickle_filename, filename_hash\n\ndef check_pickle_cache(filename):\n    if not config.enable_pickle_cache:\n        return None, None, False\n    assert(config.pickle_cache_dir is not None)\n\n    pickle_filename, _ = get_pickle_filename(filename)\n\n    #create pickle_cache_dir if neccessary\n    if not config.pickle_cache_dir.exists():\n        config.pickle_cache_dir.mkdir(parents=True)\n\n    #if the file exists, load and return it\n    if pickle_filename.exists():\n        with pickle_filename.open(\"rb\") as f:\n            pickler = pickle.Unpickler(f)\n            callables = pickler.load()\n            global_vars = pickler.load()\n            return callables, global_vars, True\n\n    return None, None, False\n\ndef update_pickle_cache(filename, callables, global_vars):\n    if not config.enable_pickle_cache:\n        return\n\n    pickle_filename, filename_hash = get_pickle_filename(filename)\n\n    #delete old files which correspond to this (absolute) filename(_hash)\n    for f in pickle_filename.parent.glob(filename_hash + \"*\"):\n        Path.unlink(f)\n\n    #write the callables and global_vars to disk\n    with pickle_filename.open(\"wb\") as f:\n        pickler = pickle.Pickler(f)\n        pickler.dump(callables)\n        pickler.dump(global_vars)\n\ndef get_scad_file_as_dict(filename):\n    assert(filename.is_absolute())\n\n    #check whether we have a valid up to date pickled version of it\n    callables, global_vars, cache_is_valid = check_pickle_cache(filename)\n    if not cache_is_valid:\n        #otherwise parse the file\n        from ..libs.py_scadparser import scad_parser\n        modules, functions, global_vars = scad_parser.parseFile(filename)\n\n        callables = []\n        for c in modules + functions:\n            #args = [p.name for p in c.parameters if not p.optional]\n            #kwargs = [p.name for p in c.parameters if p.optional]\n            kwargs = [p.name for p in c.parameters]\n\n            callables.append(callables_entry(c.name, [], kwargs))\n\n        #write the read version to disk so we can probably use it the next time\n        update_pickle_cache(filename, callables, global_vars)\n\n    #create a wrapper for each callable and add it to the dict\n    new_namespace_dict = {}\n    if callables:\n        for c in callables:\n            wrapper = create_openscad_wrapper_from_symbols(c.name, [], c.kwargs)\n            new_namespace_dict[escape_openscad_identifier(c.name)] = wrapper\n\n    if global_vars:\n        for c in global_vars:\n            new_namespace_dict[escape_openscad_identifier(c.name)] = \\\n                                                        OpenSCADConstant(c.name)\n\n    return new_namespace_dict\n\n"
  },
  {
    "path": "solid2/core/scad_import.py",
    "content": "from types import SimpleNamespace\nimport inspect\n\nfrom .utils import resolve_scad_filename, escape_openscad_identifier\nfrom .parse_scad import get_scad_file_as_dict\n\n# ===========================\n# = IMPORTING OPENSCAD CODE =\n# ===========================\nmodule_cache_by_resolved_filename = {}\nextra_scad_includes = []\n\ndef check_module_cache(resolved_scad, use_not_include):\n    global module_cache_by_resolved_filename\n\n    #check the module cache for the requested module\n    if resolved_scad in module_cache_by_resolved_filename.keys():\n        cache_entry = module_cache_by_resolved_filename[resolved_scad]\n\n        #if this is a include call and the module was only used until now\n        #set the \"use/include\" flag in the module cache\n        if not use_not_include and cache_entry[1]:\n            cache_entry[1] = False\n\n        return cache_entry[0]\n\n    return None\n\ndef update_module_cache(resolved_scad, new_namespace_dict, use_not_include, skip_render):\n    global module_cache_by_resolved_filename\n    module_cache_by_resolved_filename[resolved_scad] = \\\n                                        [new_namespace_dict, use_not_include, skip_render]\n\ndef load_scad_file_into_dict(resolved_scad, dest_namespace_dict, use_not_include, skip_render):\n    #check the cache\n    cached_dict = check_module_cache(resolved_scad, use_not_include)\n    if cached_dict:\n        dest_namespace_dict.update(cached_dict)\n        return\n\n    #otherwise parse the file\n    new_namespace_dict = get_scad_file_as_dict(resolved_scad)\n    dest_namespace_dict.update(new_namespace_dict)\n\n    #and update the cache\n    update_module_cache(resolved_scad, new_namespace_dict, use_not_include, skip_render)\n\ndef load_scad_dir_into_dict(resolved_scad, dest_namespace_dict, use_not_include, skip_render):\n    assert(resolved_scad.is_dir())\n\n    #for each file in the dir\n    for f in resolved_scad.iterdir():\n        #skip non .scad files\n        if f.is_file() and f.suffix != \".scad\":\n            continue\n\n        #load it\n        subspace = ExpSolidNamespace(f)\n        load_scad_file_or_dir_into_dict(f, subspace.__dict__, use_not_include, skip_render)\n\n        #and add it to the dest_namespace_dict\n        identifier = escape_openscad_identifier(f.stem)\n        dest_namespace_dict[identifier] = subspace\n\ndef load_scad_file_or_dir_into_dict(filename, dest_namespace_dict, use_not_include, skip_render):\n    assert(dest_namespace_dict != None)\n\n    resolved_scad = resolve_scad_filename(filename)\n\n    if not resolved_scad or not resolved_scad.exists():\n        raise ValueError(f'Could not find .scad file {filename}.')\n\n    if resolved_scad.is_file():\n        load_scad_file_into_dict(resolved_scad,\n                                 dest_namespace_dict,\n                                 use_not_include,\n                                 skip_render)\n    elif resolved_scad.is_dir():\n        load_scad_dir_into_dict(resolved_scad,\n                                dest_namespace_dict,\n                                use_not_include,\n                                skip_render)\n\n# use() & include() mimic OpenSCAD's use/include mechanics.\n# -- use() makes methods in scad_file_path.scad available to be called.\n# -- include() makes those methods available AND executes all code in\n#    scad_file_path.scad, which may have side effects.\n#    Unless you have a specific need, call use().\ndef get_callers_namespace_dict(depth=2):\n    frame = inspect.currentframe()\n    for _ in range(depth):\n        assert(frame)\n        frame = frame.f_back\n\n    assert(frame)\n    if frame.f_code.co_name == \"<module>\":\n        return frame.f_locals\n    else:\n        raise Exception(\"use & include can not be used inside a function!\\n\" +\\\n              \"they would polute the modules namespace and only if executed. This\\n\" +\\\n              \"has strange side effects! Use them on module level.\\n\")\n\ndef use(filename, skip_render=False):\n    load_scad_file_or_dir_into_dict(filename, get_callers_namespace_dict(), True, skip_render)\n\ndef include(filename, skip_render=False):\n    load_scad_file_or_dir_into_dict(filename, get_callers_namespace_dict(), False, skip_render)\n\ndef import_scad(filename, dest_namespace=None, use_not_include=True, skip_render=False):\n    if dest_namespace == None:\n        dest_namespace = ExpSolidNamespace(filename)\n\n    load_scad_file_or_dir_into_dict(filename, dest_namespace.__dict__, use_not_include, skip_render)\n\n    return dest_namespace\n\ndef extra_scad_include(filename, use_not_include=True):\n    global extra_scad_includes\n    extra_scad_includes.append((filename, use_not_include))\n\n# ========================\n# = our helper namespace =\n# ========================\nclass ExpSolidNamespace(SimpleNamespace):\n    \"\"\"\n    we create our own namespace class for imported openscad modules to be able\n    to overwrite the __repr__ func. This enables in a python shell\n\n        s = import_scad(\"...\")\n        print(s)\n\n    to list the \"contents\" of this namespace\n    \"\"\"\n    def __init__(self, filename):\n        super().__init__()\n        self.__filename__ = filename\n\n    def __repr__(self):\n        node_strings = []\n        for k in sorted(self.__dict__):\n            if not k.startswith(\"__\"):\n                i = self.__dict__[k]\n                if isinstance(i, ExpSolidNamespace):\n                    node_strings += [f'\\t{k}']\n                else:\n                    node_strings += [f'\\t{i.__doc__}']\n\n        return '\\n'.join([f'{self.__filename__}:'] + node_strings)\n\n"
  },
  {
    "path": "solid2/core/scad_render.py",
    "content": "from pathlib import Path\n\nfrom .scad_import import module_cache_by_resolved_filename, extra_scad_includes\nfrom ..config import config\n\n\ndef get_default_filename(suffix):\n    #try to get the filename of the calling module\n    import __main__\n    if hasattr(__main__, \"__file__\"):\n        #not called from a terminal\n        calling_file = Path(__main__.__file__).absolute()\n        outfile = calling_file.with_suffix(suffix)\n    else:\n        outfile = \"solid_out\" + suffix\n\n    return outfile\n\ndef render_to_stl_file(root, filename):\n    if not filename:\n        filename = get_default_filename(\".stl\")\n    scad_file = \\\n        scad_render_to_file(root,\n                            Path(filename).with_suffix(\".stl.scad\"))\n\n    cmd = config.openscad_stl_command.format(scadfile=scad_file, stlfile=filename)\n\n    import shlex\n    import subprocess\n    subprocess.check_call(shlex.split(cmd),\n                          stdout=subprocess.PIPE,\n                          stderr=subprocess.DEVNULL)\n\n    return Path(filename).absolute().as_posix()\n\ndef scad_render(root, file_header = ''):\n    #get a list of all used and included files\n    includes = get_include_string()\n\n    #call extensions pre_render\n    from .extension_manager import default_extension_manager\n    extensions_header_str = default_extension_manager.call_pre_render(root)\n    extensions_header_str += \"\\n\\n\" if extensions_header_str else ''\n\n    #wrap the extensions around the root node\n    root = default_extension_manager.wrap_root_node(root)\n\n    scad_body = root._render()\n\n    #call extensions post_render\n    extensions_footer_str = default_extension_manager.call_post_render(root)\n    extensions_footer_str += \"\\n\" if extensions_footer_str else ''\n\n    return file_header + includes + extensions_header_str + scad_body \\\n                       + extensions_footer_str\n\ndef scad_render_to_file(scad_object, filename=None, out_dir='', file_header=''):\n\n    if out_dir == None:\n        out_dir = ''\n\n    rendered_string = scad_render(scad_object, file_header=file_header)\n\n    return _write_to_file(rendered_string, filename, out_dir)\n\ndef _write_to_file(out_string, filename=None, outdir=''):\n    outfile = filename\n\n    if not outfile:\n        suffix = \".scad\" if not config.use_implicit_builtins else \".escad\"\n        outfile = get_default_filename(suffix)\n\n\n    outpath = Path(outdir)\n    if not outpath.exists():\n        outpath.mkdir()\n\n    outfile_path = outpath / Path(outfile)\n\n    outfile_path.write_text(out_string, encoding=\"utf-8\")\n    return outfile_path.absolute().as_posix()\n\ndef get_include_string():\n    strings = []\n    for file, use_not_include in extra_scad_includes:\n        if use_not_include:\n            strings.append(f\"use <{file}>;\")\n        else:\n            strings.append(f\"include <{file}>;\")\n\n    for k, v in module_cache_by_resolved_filename.items():\n        #skip builtins file\n        if v[2]: #skip_render flag\n            continue\n\n        if v[1]:\n            strings.append(f\"use <{k}>;\")\n        else:\n            strings.append(f\"include <{k}>;\")\n\n    s = \"\\n\".join(strings)\n    s += \"\\n\\n\" if s else ''\n\n    return s\n\n"
  },
  {
    "path": "solid2/core/utils.py",
    "content": "import keyword\nimport re\nimport textwrap\nfrom pathlib import Path\n\nfrom ..config import config\n\n#don't do relative imports on the global scope to be able to import this file\n#from \"everywhere\"\n\ndef indent(s):\n    return textwrap.indent(s, \"\\t\")\n\ndef escape_openscad_identifier(identifier):\n    \"\"\"\n    Append an underscore to any python reserved word.\n    Prepend an underscore to any OpenSCAD identifier starting with a digit.\n    No-op for all other strings, e.g. 'or' => 'or_', 'other' => 'other'\n    \"\"\"\n    if identifier in keyword.kwlist or identifier[0].isdigit():\n        return \"_\" + identifier\n\n    if identifier[0] == \"$\":\n        return \"_\" + identifier[1:]\n\n    return identifier\n\ndef unescape_openscad_identifier(identifier):\n    \"\"\"\n    Remove trailing underscore for already-subbed python reserved words.\n    Remove prepending underscore if remaining identifier starts with a digit.\n    No-op for all other strings: e.g. 'or_' => 'or', 'other_' => 'other_'\n    \"\"\"\n    if identifier.startswith(\"_\") and identifier[1:] in keyword.kwlist:\n        return identifier[1:]\n\n    if identifier.startswith(\"_\") and identifier[1].isdigit():\n        return identifier[1:]\n\n    if identifier.startswith(\"_\"):\n        return \"$\" + identifier[1:]\n\n    return identifier\n\ndef resolve_scad_filename(scad_file):\n    scad_path = Path(scad_file)\n    if scad_path.is_absolute():\n        return scad_path\n\n    for p in config.openscad_library_paths:\n        if (p / scad_path).exists():\n            return (p / scad_path).absolute()\n\n    return None\n\ndef py2openscad(o):\n    from .object_base import ObjectBase\n    if type(o) == bool:\n        return str(o).lower()\n    if type(o) == str:\n        escaped_str = re.sub(r'([\\\\\"])', r'\\\\\\1', o)\n        return f'\\\"{escaped_str}\\\"'  # type: ignore\n    if isinstance(o, ObjectBase):\n        return o._render().rstrip().removesuffix(\";\") #removing traling ;\\n\n    if hasattr(o, \"__iter__\"):\n        scadVals = [py2openscad(i) for i in o]\n        return f\"[{', '.join(scadVals)}]\"\n    return str(o)\n\n"
  },
  {
    "path": "solid2/examples/01-basics.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, sphere, difference, set_global_fn\n\nset_global_fn(72)\n\ndifference()(\n    cube([10, 20, 30]),\n    sphere(10)\n).save_as_scad()\n\n# this is very very basic but you can make this as complex as in OpenSCAD.\n# You can really just use \"python as OpenSCAD\". You just need to call\n# .save_as_scad() at last to write it to a *.scad file.\n#\n# If you execute this file it will create examples/01-basics.scad with the this\n# content:\n#\n#        $fn = 72;\n#\n#        difference() {\n#            cube(size = [10, 20, 30]);\n#            sphere(r = 10);\n#        }\n#\n"
  },
  {
    "path": "solid2/examples/02-vars-and-operators.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, sphere\n\n# you can store any \"openscad object\" in a regular variable. No matter whether\n# it's just a primitive or a complete assembly\nc = cube([10, 20, 30])\ns = sphere(10)\n\nd = c - s\n# Operators:\n# The following operators are defined:\n#\n#   operator    |   action\n#   ------------|-------------\n#      +, |     | union\n#      -        | difference\n#      *, &     | intersection\n#       ~       | debug (see 03-debug-background.py)\n\nd.save_as_scad()\n\n# this is the same as 01-basics just using a more pythonic way to express it.\n#\n# If you execute this file it will create examples/02-vars-and-operators.py with\n# this content:\n#\n#    // Generated by ExpSolidPython\n#\n#    difference() {\n#            cube(size = [10, 20, 30]);\n#            sphere(r = 10);\n#    };\n\n"
  },
  {
    "path": "solid2/examples/03-debug-background.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, sphere, cylinder, background, debug\n\nc = cube([10, 20, 30])\n\ns = debug()(sphere(10))\n\nd = c - s\n\nbg = background()(\n        cylinder(r=4, h=30)\n     )\n\n(d + bg).save_as_scad()\n\n#disable (*) and root (!) are accessible corresponding to debug and background\n#NOTE: the __invert__ operator is mapped to debug:\n#\n#            debug()(cube(1))\n#\n#       can be expressed as:\n#\n#             ~cube(1)\n#\n#this file generates the following scad code:\n#\n#    union() {\n#            difference() {\n#                    cube(size = [10, 20, 30]);\n#                    #sphere(r = 10);\n#            };\n#            %cylinder(h = 30, r = 4);\n#    };\n\n"
  },
  {
    "path": "solid2/examples/04-convenience.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, sphere, rotate, down, forward\n\n# the convenience module defines some convenience functions and \"overloads\" for\n# some transformations and primitives to get a more convenient access to it.\n# It provides for all OpenSCAD modules which need a \"size\" parameter to pass in\n# single integers / floats (not wrapped in a list or tuple). In other words: you\n# don't need to wrap sizes in [ and ]:\n#\n#       translate(10, 0, 0)(cube(1, 2, 3))\n#\n# The following transformations and modules are \"overloaded\":\n#\n#       translate, scale, resize, mirror, rotate, cube and square\n#\n# Furthermore it defines the following directions:\n#\n#       up, down, left, right, forward, fwd, back\n#\n# which all accept a single integer or float as parameter.\n\nc = rotate(45, 45, 45)(\n        down(5)(\n            cube(10, 20, 30)\n        )\n    )\n\ns = ~forward(5)(\n        sphere(10)\n    )\n\n(c-s).save_as_scad()\n\n# generates this scad code:\n#\n#    // Generated by ExpSolidPython\n#\n#    difference() {\n#            rotate(a = [45, 45, 45]) {\n#                    translate(v = [0, 0, -5]) {\n#                            cube(size = [10, 20, 30]);\n#                    };\n#            };\n#            #translate(v = [0, 5, 0]) {\n#                    sphere(r = 10);\n#            };\n#    };\n\n"
  },
  {
    "path": "solid2/examples/05-access-style-syntax.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, sphere\n\n# Since I don't like the OpenSCAD syntax I added \"access-style\" syntax. This\n# allows to call all OpenSCAD builtin transformations, the convenience\n# functions (up, down, left,...) and the modifiers (debug, background, ...) as\n# if you would call a member function.\n#\n#       cube(10).up(5)\n#\n# is equivalent to\n#\n#       up(5)(cube(10))\n\nc = cube(10, 20, 30).\\\n        down(5).\\\n            rotate(45, 45, 45)\n\ns = ~sphere(10).forward(5)\n\n(c-s).save_as_scad()\n\n# generates exactly the same code as 04-convenience.py:\n#\n#    // Generated by ExpSolidPython\n#\n#    difference() {\n#            rotate(a = [45, 45, 45]) {\n#                    translate(v = [0, 0, -5]) {\n#                            cube(size = [10, 20, 30]);\n#                    };\n#            };\n#            #translate(v = [0, 5, 0]) {\n#                    sphere(r = 10);\n#            };\n#    };\n\n"
  },
  {
    "path": "solid2/examples/06-functions.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cylinder, cube\n\n# as soon as the objects get more sophisticated it makes sense to use functions\n# to hierarchically assemble them.\n# You can use python functions pretty much the same way as OpenSCAD modules\n# except the children stuff. This is not possible with SolidPython but you\n# can pass other OpenSCAD objects as parameters to a function.\n#\n# This simple example assembles a car similar to the one from the OpenSCAD\n# tutorial:\n\ndef wheel():\n    return cylinder(r=35, h=15, center=True).rotate(0, 90, 0)\n\ndef axle():\n    a = cylinder(r=10, h=120, center=True).rotate(0, 90, 0)\n\n    w1 = wheel().left(70)\n    w2 = wheel().right(70)\n\n    return w1 + w2 + a\n\ndef torso():\n    bottom = cube(100, 250, 50, center=True)\n    top = cube(80, 100, 60, center=True)\n\n    window_cube = cube(200, 55 ,50, center=True).down(10)\n    top -= (window_cube + window_cube.rotate(0, 0, 90))\n\n    return bottom + top.up(50)\n\ndef car():\n    t = torso()\n\n    front_axle = axle().down(20).back(80)\n\n    rear_axle = axle().down(20).forward(80)\n\n    return t + front_axle + rear_axle\n\ncar().save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/07-libs-bosl2-attachable.py",
    "content": "from solid2.extensions.bosl2 import cube, sphere, xcyl, union, xcopies, \\\n                                    attachable, show_anchors, \\\n                                    CENTER, LEFT, TOP, UP\n\ndef cubic_barbell(s=100, anchor=CENTER, spin=0, orient=UP):\n    return attachable(anchor,spin,orient, size=[s*3,s,s]) (\n        union() (\n            xcopies(2*s)(cube(s, center=True)),\n            xcyl(h=2*s, d=s/4)\n        )\n    )\n\ncc = cubic_barbell(100)(\n        cube(50, center=True).attach(TOP),\n        sphere(50).attach(LEFT),\n        show_anchors(30)\n    )\n\ncc.save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/07-libs-bosl2-logo.py",
    "content": "# include <BOSL2/std.scad>\n# include <BOSL2/gears.scad>\n# include <BOSL2/beziers.scad>\n# include <BOSL2/screws.scad>\n# include <BOSL2/cubetruss.scad>\n\nfrom solid2.extensions.bosl2 import cuboid, regular_ngon, \\\n                                    RIGHT, FRONT, BACK, BOT, CENTER, \\\n                                    path_sweep, xdistribute\n\nfrom solid2.extensions.bosl2 import gears, beziers, screws, cubetruss\n\n# $fa=1;\n# $fs=1;\n\nfrom solid2 import set_global_fa, set_global_fs\nset_global_fa(1)\nset_global_fs(1)\n\ndef B():\n\t# recolor(\"#f77\")\n\t# diff(\"hole\")\n\t# cuboid([45,45,10], chamfer=10, edges=[RIGHT+BACK,RIGHT+FRONT], anchor=FRONT) {\n\t# \tcuboid([30,30,11], chamfer=5, edges=[RIGHT+BACK,RIGHT+FRONT], $tags=\"hole\");\n\t# \tattach(FRONT,BACK, overlap=5) {\n\t# \t\tdiff(\"hole\")\n\t# \t\tcuboid([45,45,10], rounding=15, edges=[RIGHT+BACK,RIGHT+FRONT]) {\n\t# \t\t\tcuboid([30,30,11], rounding=10, edges=[RIGHT+BACK,RIGHT+FRONT], $tags=\"hole\");\n\t# \t\t}\n\t# \t}\n\t# }\n\n    upperHalf = cuboid([45,45,10], chamfer=10, edges=[RIGHT+BACK,RIGHT+FRONT],\n                       anchor=FRONT)\n    lowerHalf = cuboid([45,45,10], rounding=15, edges=[RIGHT+BACK,RIGHT+FRONT])\n\n    upperHole = cuboid([30,30,11], chamfer=5, edges=[RIGHT+BACK,RIGHT+FRONT])\n    lowerHole = cuboid([30,30,11], rounding=10, edges=[RIGHT+BACK,RIGHT+FRONT])\n\n    upperHalf.add(upperHole.tag(\"hole\"))\n    lowerHalf.add(lowerHole.tag(\"hole\"))\n\n    upperHalf.add(lowerHalf.attach(FRONT, BACK, overlap=5))\n\n    return upperHalf.diff(\"hole\").recolor(\"#f77\")\n\ndef O():\n    # recolor(\"#7f7\")\n\t# bevel_gear(pitch=8, teeth=20, face_width=12, shaft_diam=25, pitch_angle=45,\n    #            slices=12, spiral_angle=30);\n    gear = gears.bevel_gear(pitch=8, teeth=20, face_width=12, shaft_diam=25,\n                            pitch_angle=45, slices=12, spiral_angle=30)\n\n    return gear.recolor(\"#7f7\")\n\ndef S():\n\t# x = 18;\n\t# y = 20;\n\t# s1 = 25;\n\t# s2 = 20;\n\t# sbez = [\n\t# \t            [-x,-y], [-x,-y-s1],\n\t# \t[ x,-y-s1], [ x,-y], [ x,-y+s2],\n\t# \t[-x, y-s2], [-x, y], [-x, y+s1],\n\t# \t[ x, y+s1], [ x, y]\n\t# ];\n\t# recolor(\"#99f\")\n\t# path_sweep(regular_ngon(n=3,d=10,spin=90), bezpath_curve(sbez));\n\n    x, y, s1, s2 = 18, 20, 25, 20\n    sbez = [\n                    [-x,-y], [-x,-y-s1],\n        [ x,-y-s1], [ x,-y], [ x,-y+s2],\n        [-x, y-s2], [-x, y], [-x, y+s1],\n        [ x, y+s1], [ x, y]\n    ]\n\n    s = path_sweep(regular_ngon(n=3,d=10,spin=90), beziers.bezpath_curve(sbez))\n    return s.recolor(\"#99f\")\n\ndef L():\n\t# recolor(\"#0bf\")\n\t# translate([-15,-35,0])\n\t# cubetruss_corner(size=10, strut=1, h=1, bracing=false, extents=[3,8,0,0,0],\n    #                  clipthick=0);\n    truss = cubetruss.cubetruss_corner(size=10, strut=1, h=1, bracing=False,\n                                       extents=[3,8,0,0,0], clipthick=0)\n\n    return truss.move([-15, -35, 0]).recolor(\"#0bf\")\n\ndef II():\n\t# recolor(\"#777\")\n\t# xdistribute(24) {\n\t# \tscrew(\"M12,70\", head=\"hex\", anchor=\"origin\", orient=BACK)\n\t# \t\tattach(BOT,CENTER)\n\t# \t\t\tnut(\"M12\", thickness=10, diameter=20);\n\t# \tscrew(\"M12,70\", head=\"hex\", anchor=\"origin\", orient=BACK)\n\t# \t\tattach(BOT,CENTER)\n\t# \t\t\tnut(\"M12\", thickness=10, diameter=20);\n\t# }\n\n    screw = screws.screw(\"M12,70\", head=\"hex\", anchor=\"origin\", orient=BACK)\n    nut = screws.nut(\"M12\", thickness=10)\n\n    screw.add(nut.attach(BOT, CENTER))\n\n    return xdistribute(24)(screw, screw).recolor(\"#777\")\n\n# xdistribute(50) { [...] }\nxdistribute(50)(B(), O(), S(), L(), II()).save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/07-libs-bosl2.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2.extensions.bosl2 import circle, cuboid, sphere, cylinder, \\\n                                    heightfield, diff, tag, attach, \\\n                                    TOP, CTR, metric_screws\n\n#basic stuff\ndef bolt():\n    return metric_screws.metric_bolt(size=20, headtype='hex', l=40)\n\ndef extrude_along_path():\n    path = [ [0, 0, 0], [33, 33, 33], [66, 33, 40], [100, 0, 0], [150,0,0] ]\n    return circle(r=10, _fn=6).path_extrude(path)\n\ndef heightfield_test():\n    def get_data():\n        from math import sqrt,sin\n        data = []\n        for y in range(50):\n            yrow = []\n            data.append(yrow)\n            for x in range(50):\n                yrow.append(sin(sqrt((y-25)**2+(x-25)**2)))\n\n        return data\n\n    return heightfield(size=[100,100], bottom=-1, data=get_data())\n\n#a little bit more complicated stuff\ndef bosl_diff():\n    #openscad example from bosl2 wiki:\n    #diff()\n    #    cuboid(50) {\n    #        tag(\"remove\") attach(TOP) sphere(d=40);\n    #        tag(\"keep\") attach(CTR) cylinder(h=40, d=10);\n    #    }\n    return \\\n    diff() (\n        cuboid(50) (\n            tag(\"remove\") (attach(TOP) (sphere(d=40))),\n            tag(\"keep\") (attach(CTR) (cylinder(h=40, d=10)))\n        )\n    )\n\ndef bosl_diff2():\n    #openscad example from bosl2 wiki:\n    #diff()\n    #    cuboid(50) {\n    #        tag(\"remove\") attach(TOP) sphere(d=40);\n    #        tag(\"keep\") attach(CTR) cylinder(h=40, d=10);\n    #    }\n    return \\\n        cuboid(50) (\n            sphere(d=40).attach(TOP).tag(\"remove\"),\n            cylinder(h=40, d=10).attach(CTR).tag(\"keep\")\n        ).diff()\n\nassembly = ~extrude_along_path().bounding_box() +\\\n           extrude_along_path().recolor(\"purple\") +\\\n           bosl_diff2().back(100) +\\\n           bolt().left(100) +\\\n           heightfield_test().fwd(100)\n\nassembly.save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/07-libs.x.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import import_scad\n\n# you can use OpenSCAD libraries in SolidPython. This examples needs the bosl\n# library to be installed in the OpenSCAD library path\n# (~.local/share/OpenSCAD/libraries)\n#\n# NOTE: you can import any *.scad file not only \"libraries\"\n\n#import bosl.metric_screw\nmetric_screws = import_scad(\"BOSL/metric_screws.scad\")\n\n#use it to generate a metric screw\nscrew = metric_screws.metric_bolt(size=6, headtype='hex', l=20)\n\nscrew.save_as_scad()\n\n#NOTE: BOSL2 see 07-libs-bosl2.py\n"
  },
  {
    "path": "solid2/examples/08-extensions.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, register_access_syntax, register_pre_render\n\nfrom solid2.core.object_base import OpenSCADObject, ObjectBase,\\\n                                    AccessSyntaxMixin, OperatorMixin\n\n# ==============\n# = Extensions =\n# ==============\n# expsolid is extendable through extensions. This (and the next) example show\n# some usage of it.\n\n# add a simple functions as access syntax extension\n@register_access_syntax\ndef leftUp(obj, x=1):\n    return obj.left(x).up(x)\n\n# create a custom OpenSCADObject that maps to color(c=\"red\")\n# and register it as access syntax extension\n@register_access_syntax\nclass red(OpenSCADObject):\n    def __init__(self):\n        super().__init__(name=\"color\", params={\"c\" : \"red\"})\n\n# a non sense object that's not an OpenSCADObject. You can use this to get\n# \"low-level\" access if you don't want the typical OpenSCAD\n# call(params)(children) syntax. For example the debug,background,.... modifiers\n# are implemented like this (see core/builtins.py)\n@register_access_syntax\nclass non_sense_comment(ObjectBase, AccessSyntaxMixin, OperatorMixin):\n    def _render(self):\n        return \"//non sense comment\\n\" + super()._render()\n\n# A pre render extension. This hooks it into the \"_render\" routine. It will be\n# called before the root node gets rendered. As a result you should(!) even be\n# able to manipulate the whole tree (this is untested!), but at least to extract\n# information from it, process it and use it to generate header contents\n@register_pre_render\ndef non_sense_pre_render(root):\n\n    def count_nense_recursive(node):\n        count = 0\n        if isinstance(node, non_sense_comment):\n            count += 1\n\n        for c in node._children:\n            count += count_nense_recursive(c)\n\n        return count\n\n    count = count_nense_recursive(root)\n    return f\"//the root tree contains {count} non sense comment(s)\\n\"\n\n# ==============\n\n# old school syntax\ncube1 = non_sense_comment()(\n            red()(\n                leftUp(\n                    cube(10)\n                )\n            )\n        )\n\n# access style syntax\ncube2 = cube(5).leftUp(3).red().non_sense_comment()\n\n(cube1 + cube2).save_as_scad()\n\n# This generates the following output:\n#\n#\n# //the root tree contains 2 non sense comment(s)\n#\n# union() {\n#         //non sense comment\n#         color(c = \"red\") {\n#                 translate(v = [0, 0, 1]) {\n#                         translate(v = [-1, 0, 0]) {\n#                                 cube(size = 10);\n#                         }\n#                 }\n#         }\n#         //non sense comment\n#         color(c = \"red\") {\n#                 translate(v = [0, 0, 1]) {\n#                         translate(v = [-1, 0, 0]) {\n#                                 cube(size = 5);\n#                         }\n#                 }\n#         }\n# }\n"
  },
  {
    "path": "solid2/examples/09-code-attach-extension.py",
    "content": "#! /usr/bin/env python\n\nfrom pathlib import Path\n\nfrom solid2 import cube, register_post_render\n\n# =============\n# = Extension =\n# =============\n# This is more or less the same as -- regular -- SolidPython does when it\n# writes a scad file. It appends the python source to the end of the *.scad\n# file.\n#\n# If you like this, you can simply import this extension that should do it.\n#\n# register the post_render extension using the decorator. This hooks it into\n# the \"_render\" routine. It will be called after the root gets rendered. It's\n# return string will be appended to the rendered string.\n@register_post_render\ndef attach_code_post_render(_):\n    #find the \"root\" file\n    calling_file = None\n\n    import __main__\n    # not called from a terminal?\n    if hasattr(__main__, \"__file__\"):\n        # extract filename and replace suffix\n        calling_file = Path(__main__.__file__).absolute()\n    else:\n        return '' # no code available. Called from withing a python shell\n\n    assert(calling_file.exists())\n\n    # read source file\n    with calling_file.open(\"r\") as f:\n        code_str = f.read()\n\n        # escape /* and */ because otherwise it would end this comment block which\n        # we use to inject the solid code\n        code_str = code_str.replace(\"/*\", \"/_*\")\n        code_str = code_str.replace(\"*/\", \"*_/\")\n\n        # return the string to be appended to the *.scad file\n        return f'/* Generated from the following ExpSolid code:\\n\\n' +\\\n               f'{code_str}*/'\n\n# =============\n\nif __name__ == \"__main__\":\n    c = cube(10)\n    c.save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/10-customizer.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, text, translate, union, scad_render_to_file, scad_inline, \\\n                   CustomizerDropdownVariable, CustomizerSliderVariable\n\n#register all the custom variables you want to use\nobjects = CustomizerDropdownVariable(\"objects\", 4, [2, 4, 6])\nside = CustomizerSliderVariable(\"side\", 4)\ncube_pos = CustomizerSliderVariable(\"cube_pos\", [5, 5, 5])\ncube_size = CustomizerSliderVariable(\"cube_size\", 5)\ncustomizedText = CustomizerDropdownVariable(\"text\", \"customize me!\",\n                                            [\"customize me!\", \"Thank you!\"])\n\n#use scad_inline to use them\nscene = union()\nscene += scad_inline(\"\"\"\n                    for (i = [1:objects]){\n                        translate([2*i*side,0,0]){\n                            cube(side);\n                        }\n                    }\n                    \"\"\")\n\nscene += translate(cube_pos) (\n            cube(cube_size * 2))\n\nscene += translate([0, -20, 0]) (\n            text(str(customizedText)))\n\nscad_render_to_file(scene)\n\n"
  },
  {
    "path": "solid2/examples/11-font/LICENSE_README",
    "content": "RichEatin.otf is from:\n  https://fontlibrary.org/en/font/rich-eatin\n\nAuthor: Cos Ryan\n\nLicense: CC BY\n  https://creativecommons.org/licenses/by/3.0/\n\nThanks!\n"
  },
  {
    "path": "solid2/examples/11-fonts.x.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import text, register_font, set_global_viewport_translation\n\nregister_font(\"11-font/RichEatin.otf\")\nset_global_viewport_translation([700, 900, 200])\n\ntext(font=\"Rich Eatin'\", text=\"blablub\").save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/12-animation.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, scad_render_to_file, \\\n                   set_global_viewport_translation, \\\n                   set_global_viewport_rotation, \\\n                   set_global_viewport_distance, \\\n                   CustomizerSliderVariable, \\\n                   get_animation_time\n\n\nrotation_speed = CustomizerSliderVariable(\"rotation_speed\", 1.0)\n\nset_global_viewport_translation([4, 3, 15])\nset_global_viewport_rotation([60, 0, rotation_speed * get_animation_time() * 360])\nset_global_viewport_distance(100)\n\nc = cube(get_animation_time() * 10)\n\nscad_render_to_file(c)\n\n"
  },
  {
    "path": "solid2/examples/13-animated-bouncing-ball.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import sphere, cube, translate, background, \\\n                   scad_inline, scad_render_to_file, \\\n                   set_global_viewport_translation, \\\n                   set_global_viewport_rotation, \\\n                   set_global_viewport_distance, \\\n                   set_global_variable\n\n\n#set steps in OpenSCAD to 1000\n\nball_radius = 100\n\nclass Vector3:\n    def __init__(self, x=0.0, y=0.0, z=0.0):\n        self.x = x\n        self.y = y\n        self.z = z\n\n    def __add__(self, other):\n        return Vector3(self.x + other.x,\n                       self.y + other.y,\n                       self.z + other.z)\n\n    def __mul__(self, factor):\n        return Vector3(self.x * factor,\n                       self.y * factor,\n                       self.z * factor)\n\n    def tolist(self):\n        return [self.x, self.y, self.z]\n\n#this is our little physics engine\ndef get_bouncing_ball_data(pos=Vector3(), vel=Vector3(5.0, 5.0, 200.0)):\n    data = []\n    gravity = Vector3(0.0, 0.0, -8.0)\n    for _ in range(1000):\n        vel = (vel + gravity) * 0.995\n        pos += vel\n        if pos.z < ball_radius:\n            vel.z = vel.z * -1\n            pos.z = ball_radius\n\n        data.append(pos.tolist())\n\n    return data\n\nset_global_viewport_translation([700, 900, 200])\nset_global_viewport_rotation([80, 0, 20])\nset_global_viewport_distance(6000)\n\n#store pre computed data in global OpenSCAD variable\nset_global_variable(\"bouncing_ball_data\", get_bouncing_ball_data())\n\n#get \"dynamic ball position over time\" from the data set\nball_pos_over_time = scad_inline(\"bouncing_ball_data[$t * 1000]\")\n\n#do some regular solid stuff with it\nball = translate(ball_pos_over_time)(sphere(ball_radius))\nfloor = background(cube([2000, 2000, 0.01]))\n\n#render it with the pre computed data stored in the header\nscad_render_to_file(ball + floor)\n\n# I think if you really want to do something like this you could put the data\n# into a seprate .scad file and include it into the main .scad file. You should\n# also be able inject OpenSCAD functions (or modules) and use them...\n#\n# No clue what this could be good for, but....... I guess it might be possible\n# to plug a -- more complex :-p -- physics engine into it and render animated\n# movies....\n#\n# ....and print them with a 4d printer....?!?\n\n"
  },
  {
    "path": "solid2/examples/14-implicitCAD.x.py",
    "content": "#! /usr/bin/env python\n\n# run extopenscad with -r 2 to get proper results:\n#       extopenscad -r 2 examples/14-implicitCAD.escad\n\n# this is the same example as 06-functions.py but with nice smooth implicitCAD\n# roundings....\n\n# this is how you activate the \"implicit mode\" of ExpSolid\n# I couldn't figure out a nicer way to set a parameter which can be accessed\n# during the import routine of exp_solid\n#\n# alternatively you can call the whole script with the --implicit parameter:\n#   python3 examples/14-implicitCAD.py --implicit\n\nimport sys\nsys.argv.append(\"--implicit\")\n\nfrom solid2 import cylinder, cube, difference, union\n\ndef wheel():\n    return cylinder(r=35, h=15, center=True).rotate(0, 90, 0)\n\ndef axle():\n    a = cylinder(r=10, h=130, center=True).\\\n            rotate(0, 90, 0)\n\n    w1 = wheel().left(67)\n    w2 = wheel().right(67)\n\n    return w1 + w2 + a\n\ndef torso():\n    bottom = cube(100, 250, 50, center=True, r=10)\n    top = cube(80, 100, 60, center=True, r=10)\n\n    window_cube = cube(200, 55 ,50, center=True, r=10).down(10)\n    top = difference(r=10) ( # type: ignore\n                top,\n                (union(r=10) (window_cube, window_cube.rotate(0, 0, 90))) # type: ignore\n            )\n\n    return union(r=10)(bottom, top.up(50)) # type: ignore\n\ndef car():\n    t = torso()\n\n    front_axle = axle().down(20).back(80)\n\n    rear_axle = front_axle.forward(160)\n\n    return union(r=3)(t, front_axle, rear_axle) # type: ignore\n\ncar().save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/15-implicitCAD2.x.py",
    "content": "#! /usr/bin/env python\n\nimport sys\nsys.argv.append(\"--implicit\")\n\nfrom solid2 import square, circle, cylinder, \\\n                   union, difference, \\\n                   translate, linear_extrude, rotate_extrude,\\\n                   scad_inline_parameter_func, shell # type: ignore\n\n#these are the Implicit examples from https://www.implicitcad.org/examples\n\ndef ex1():\n    return linear_extrude (height = 30, twist = 180, r=2) ( # type: ignore\n               union (r=2) ( # type: ignore\n                   square(x=[-2,2], y=[-10,10], r=2),\n                   square(x=[-10,10], y=[-2,2], r=2),\n               )\n           )\n\ndef ex2():\n    #function parameter are a little tricky, but they do work like this:\n    twist_func = scad_inline_parameter_func(\"twist(h) = 90*cos(h*2*pi/40)\")\n\n    return linear_extrude (height = 40, twist = twist_func) ( # type: ignore\n               difference () (\n                   shell(2) (circle (10)),\n                   square(x=[0,20], y=[-4,4]),\n               )\n           ).rotate(0, 0, 90).left(50)\n\ndef ex3():\n    return union() (\n               cylinder(r=19, h=10, _fn=6, center=True),\n               cylinder(r=10, h=40),\n               rotate_extrude(4*360, translate=[0,38]) ( # type: ignore\n                   translate ([10,0])( square([8,4], center=True))\n               ),\n           ).right(50)\n\ndef ex4():\n    height_func = scad_inline_parameter_func(\"height(x, y) = 10 + 5*cos(x) + 5*cos(y)\")\n\n    return linear_extrude(height = height_func) (circle(10)).left(100) # type: ignore\n\ndef ex5():\n    twist_func = scad_inline_parameter_func(\"twist(h) = 35*cos(h*2*pi/60)\")\n\n    return linear_extrude (height = 40, twist = twist_func) ( # type: ignore\n               union ( r = 8) ( # type: ignore\n                   circle (10),\n                   translate ([22,0]) (circle (10)),\n                   translate ([0,22]) (circle (10)),\n                   translate ([-22,0]) (circle (10)),\n                   translate ([0,-22]) (circle (10)),\n               )\n           ).right(130)\n\n(ex1() + ex2() + ex3() + ex4() + ex5()).save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/16-mazebox-bosl2.py",
    "content": "#! /usr/bin/env python\n\n# this is a basic \"a mazing box\" (mazebox), just tried to reimplement it with\n# bosl2. It's based on https://www.thingiverse.com/thing:1481\n\nfrom math import pi, cos\nfrom solid2.extensions.bosl2 import zcyl, zrot, tube, surface, projection, \\\n                                    cylindrical_extrude\n\ndef mazebox():\n    #the maze is 64x90 pixel\n    maze_surface = surface(file=\"maze7.png\", center=True, invert=True)\n    maze_projection = projection(cut=True) (maze_surface.up(10))\n\n    #make the radius of the cylinder 3 times the maze width\n    r = (64 * 3) / (2*pi)\n    maze_mask = []\n    segs = 10 #number of segments to get a \"rounded\" maze path\n\n    for i in range(segs):\n        maze_offset = maze_projection.offset(-1+cos(i/segs * pi /2))\n        maze_mask += cylindrical_extrude(_or=r-(2*i/segs), ir=r-(2*(i+1)/segs)) (maze_offset)\n\n    full_maze_mask = maze_mask + zrot(360/3)(maze_mask) + zrot(2*360/3)(maze_mask)\n\n    maze_tube = tube(_or=r-0.2, ir=r-2.2, h=88, center=True)\n    maze_tube_head = zcyl(r=r+5, h=10).down(40)\n\n    return maze_tube + maze_tube_head - full_maze_mask\n\nmazebox().save_as_scad()\n\n"
  },
  {
    "path": "solid2/examples/17-greedy-scad-interface.py",
    "content": "#! /usr/bin/env python\n\nfrom solid2 import cube, sphere, color, ScadValue, translate, \\\n                   openscad_functions, \\\n                   set_global_fn, \\\n                   set_global_viewport_distance, \\\n                   set_global_viewport_translation, \\\n                   set_global_viewport_rotation, \\\n                   set_global_viewport_fov, \\\n                   get_animation_time, \\\n                   CustomizerSliderVariable, \\\n                   CustomizerDropdownVariable\n\n\nset_global_fn(32)\nset_global_viewport_distance(abs(openscad_functions.sin(get_animation_time() * 360)) * 10 + 5)\nset_global_viewport_translation([0, -1, 0])\nset_global_viewport_rotation([63, 0, get_animation_time() * 360])\nset_global_viewport_fov(25)\n\ndef funny_cube():\n    customized_color = CustomizerDropdownVariable(name = \"cube_color\",\n                                                  default_value = \"blue\",\n                                                  options = [\"red\", \"green\", \"blue\"],\n                                                  label = \"The color of the cube\",\n                                                  tab=\"Colors\")\n\n    customized_animation_factor = CustomizerSliderVariable(name = \"anim_factor\",\n                                                           default_value = 1,\n                                                           min_ = 1, # type: ignore\n                                                           max_ = 10, # type: ignore\n                                                           step = 0.5, # type: ignore\n                                                           label = \"Animation speed factor\",\n                                                           tab = \"Animation\")\n\n    return color(customized_color) ( # type: ignore\n                cube(abs(openscad_functions.sin(get_animation_time() * 360 * customized_animation_factor)), center=True)\n           )\n\ndef funny_sphere():\n    customized_color = ScadValue(\"cube_color\")\n    customized_animation_factor = ScadValue(\"anim_factor\")\n\n    return translate([0, -2, 0]) (\n                color(customized_color) ( # type: ignore\n                    sphere(r = abs(openscad_functions.sin(get_animation_time() * 360 * customized_animation_factor - 90))) # type: ignore\n                )\n           )\n\ndef do_nots():\n    customized_color = ScadValue(\"cube_color\")\n    customized_animation_factor = ScadValue(\"anim_factor\")\n\n    #if customized_color == \"blue\":\n    #    print(\"This causes a python runtime error!\")\n\n    #for i in range(customized_animation_factor):\n    #    print(\"This causes a python runtime error!\")\n\n    #f = 1.0\n    #f *= customized_animation_factor\n    #for i in range(f):\n    #    print(\"This causes a python runtime error! (and this is why it is called greedy)\")\n\n(funny_cube() + funny_sphere()).save_as_scad()\n"
  },
  {
    "path": "solid2/examples/18-scad-control-structures.py",
    "content": "from solid2 import CustomizerDropdownVariable, \\\n                   CustomizerSliderVariable, \\\n                   cube, scad_range, scad_for, scad_if\n\nnumber_of_cubes = CustomizerSliderVariable(\"number_of_cubes\", 7)\nalt_color = CustomizerDropdownVariable(\"alt_color\", \"red\", [\"red\", \"blue\", \"green\"])\n\ndef f_loop(i):\n    c = scad_if(i % 2 == 0, cube(), cube().color(alt_color))\n    return c.up(i*2)\n\nscad_for(scad_range(0, number_of_cubes), f_loop).save_as_scad()\n"
  },
  {
    "path": "solid2/extensions/__init__.py",
    "content": "\n"
  },
  {
    "path": "solid2/extensions/bosl2/__init__.py",
    "content": "from ...config import config as _config\n\nif _config.use_implicit_builtins:\n    raise Exception(\"ExpSolid: unfortunately ImplicitCAD can't handle bosl2...\")\n\nfrom .std import *\n\nfrom .bosl2_patches import __nothing__\n"
  },
  {
    "path": "solid2/extensions/bosl2/affine.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/affine.scad'}\", False)\n\nclass affine2d_identity(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"affine2d_identity\", {**kwargs})\n\nclass affine2d_translate(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"affine2d_translate\", {\"v\" : v, **kwargs})\n\nclass affine2d_scale(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"affine2d_scale\", {\"v\" : v, **kwargs})\n\nclass affine2d_zrot(_Bosl2Base):\n    def __init__(self, ang=None, **kwargs):\n       super().__init__(\"affine2d_zrot\", {\"ang\" : ang, **kwargs})\n\nclass affine2d_mirror(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"affine2d_mirror\", {\"v\" : v, **kwargs})\n\nclass affine2d_skew(_Bosl2Base):\n    def __init__(self, xa=None, ya=None, **kwargs):\n       super().__init__(\"affine2d_skew\", {\"xa\" : xa, \"ya\" : ya, **kwargs})\n\nclass affine3d_identity(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"affine3d_identity\", {**kwargs})\n\nclass affine3d_translate(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"affine3d_translate\", {\"v\" : v, **kwargs})\n\nclass affine3d_scale(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"affine3d_scale\", {\"v\" : v, **kwargs})\n\nclass affine3d_xrot(_Bosl2Base):\n    def __init__(self, ang=None, **kwargs):\n       super().__init__(\"affine3d_xrot\", {\"ang\" : ang, **kwargs})\n\nclass affine3d_yrot(_Bosl2Base):\n    def __init__(self, ang=None, **kwargs):\n       super().__init__(\"affine3d_yrot\", {\"ang\" : ang, **kwargs})\n\nclass affine3d_zrot(_Bosl2Base):\n    def __init__(self, ang=None, **kwargs):\n       super().__init__(\"affine3d_zrot\", {\"ang\" : ang, **kwargs})\n\nclass affine3d_rot_by_axis(_Bosl2Base):\n    def __init__(self, u=None, ang=None, **kwargs):\n       super().__init__(\"affine3d_rot_by_axis\", {\"u\" : u, \"ang\" : ang, **kwargs})\n\nclass affine3d_rot_from_to(_Bosl2Base):\n    def __init__(self, _from=None, to=None, **kwargs):\n       super().__init__(\"affine3d_rot_from_to\", {\"_from\" : _from, \"to\" : to, **kwargs})\n\nclass affine3d_mirror(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"affine3d_mirror\", {\"v\" : v, **kwargs})\n\nclass affine3d_skew(_Bosl2Base):\n    def __init__(self, sxy=None, sxz=None, syx=None, syz=None, szx=None, szy=None, **kwargs):\n       super().__init__(\"affine3d_skew\", {\"sxy\" : sxy, \"sxz\" : sxz, \"syx\" : syx, \"syz\" : syz, \"szx\" : szx, \"szy\" : szy, **kwargs})\n\nclass affine3d_skew_xy(_Bosl2Base):\n    def __init__(self, xa=None, ya=None, **kwargs):\n       super().__init__(\"affine3d_skew_xy\", {\"xa\" : xa, \"ya\" : ya, **kwargs})\n\nclass affine3d_skew_xz(_Bosl2Base):\n    def __init__(self, xa=None, za=None, **kwargs):\n       super().__init__(\"affine3d_skew_xz\", {\"xa\" : xa, \"za\" : za, **kwargs})\n\nclass affine3d_skew_yz(_Bosl2Base):\n    def __init__(self, ya=None, za=None, **kwargs):\n       super().__init__(\"affine3d_skew_yz\", {\"ya\" : ya, \"za\" : za, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/attachments.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/attachments.scad'}\", False)\n\n_tags = _OpenSCADConstant('_tags')\n_tag = _OpenSCADConstant('_tag')\n_save_tag = _OpenSCADConstant('_save_tag')\n_tag_prefix = _OpenSCADConstant('_tag_prefix')\n_overlap = _OpenSCADConstant('_overlap')\n_color = _OpenSCADConstant('_color')\n_save_color = _OpenSCADConstant('_save_color')\n_anchor_override = _OpenSCADConstant('_anchor_override')\n_attach_to = _OpenSCADConstant('_attach_to')\n_attach_anchor = _OpenSCADConstant('_attach_anchor')\n_attach_alignment = _OpenSCADConstant('_attach_alignment')\n_parent_anchor = _OpenSCADConstant('_parent_anchor')\n_parent_spin = _OpenSCADConstant('_parent_spin')\n_parent_orient = _OpenSCADConstant('_parent_orient')\n_parent_size = _OpenSCADConstant('_parent_size')\n_parent_geom = _OpenSCADConstant('_parent_geom')\n_attach_inside = _OpenSCADConstant('_attach_inside')\n_edge_angle = _OpenSCADConstant('_edge_angle')\n_edge_length = _OpenSCADConstant('_edge_length')\n_tags_shown = _OpenSCADConstant('_tags_shown')\n_tags_hidden = _OpenSCADConstant('_tags_hidden')\n_ghost_this = _OpenSCADConstant('_ghost_this')\n_ghost = _OpenSCADConstant('_ghost')\n_ghosting = _OpenSCADConstant('_ghosting')\n_highlight_this = _OpenSCADConstant('_highlight_this')\n_highlight = _OpenSCADConstant('_highlight')\n_ANCHOR_TYPES = _OpenSCADConstant('_ANCHOR_TYPES')\nEDGES_NONE = _OpenSCADConstant('EDGES_NONE')\nEDGES_ALL = _OpenSCADConstant('EDGES_ALL')\nEDGE_OFFSETS = _OpenSCADConstant('EDGE_OFFSETS')\nCORNERS_NONE = _OpenSCADConstant('CORNERS_NONE')\nCORNERS_ALL = _OpenSCADConstant('CORNERS_ALL')\nCORNER_OFFSETS = _OpenSCADConstant('CORNER_OFFSETS')\nclass _quant_anch(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_quant_anch\", {\"x\" : x, **kwargs})\n\nclass _make_anchor_legal(_Bosl2Base):\n    def __init__(self, anchor=None, geom=None, **kwargs):\n       super().__init__(\"_make_anchor_legal\", {\"anchor\" : anchor, \"geom\" : geom, **kwargs})\n\nclass _is_geometry(_Bosl2Base):\n    def __init__(self, entry=None, **kwargs):\n       super().__init__(\"_is_geometry\", {\"entry\" : entry, **kwargs})\n\nclass reorient(_Bosl2Base):\n    def __init__(self, anchor=None, spin=None, orient=None, size=None, size2=None, shift=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, l=None, h=None, vnf=None, path=None, region=None, extent=None, offset=None, cp=None, anchors=None, two_d=None, axis=None, override=None, geom=None, p=None, **kwargs):\n       super().__init__(\"reorient\", {\"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"size\" : size, \"size2\" : size2, \"shift\" : shift, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"h\" : h, \"vnf\" : vnf, \"path\" : path, \"region\" : region, \"extent\" : extent, \"offset\" : offset, \"cp\" : cp, \"anchors\" : anchors, \"two_d\" : two_d, \"axis\" : axis, \"override\" : override, \"geom\" : geom, \"p\" : p, **kwargs})\n\nclass named_anchor(_Bosl2Base):\n    def __init__(self, name=None, pos=None, orient=None, spin=None, rot=None, flip=None, info=None, **kwargs):\n       super().__init__(\"named_anchor\", {\"name\" : name, \"pos\" : pos, \"orient\" : orient, \"spin\" : spin, \"rot\" : rot, \"flip\" : flip, \"info\" : info, **kwargs})\n\nclass attach_geom(_Bosl2Base):\n    def __init__(self, size=None, size2=None, shift=None, scale=None, twist=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, l=None, h=None, vnf=None, region=None, extent=None, cp=None, offset=None, anchors=None, two_d=None, axis=None, override=None, **kwargs):\n       super().__init__(\"attach_geom\", {\"size\" : size, \"size2\" : size2, \"shift\" : shift, \"scale\" : scale, \"twist\" : twist, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"h\" : h, \"vnf\" : vnf, \"region\" : region, \"extent\" : extent, \"cp\" : cp, \"offset\" : offset, \"anchors\" : anchors, \"two_d\" : two_d, \"axis\" : axis, \"override\" : override, **kwargs})\n\nclass define_part(_Bosl2Base):\n    def __init__(self, name=None, geom=None, inside=None, T=None, **kwargs):\n       super().__init__(\"define_part\", {\"name\" : name, \"geom\" : geom, \"inside\" : inside, \"T\" : T, **kwargs})\n\nclass _attach_geom_2d(_Bosl2Base):\n    def __init__(self, geom=None, **kwargs):\n       super().__init__(\"_attach_geom_2d\", {\"geom\" : geom, **kwargs})\n\nclass _attach_geom_size(_Bosl2Base):\n    def __init__(self, geom=None, **kwargs):\n       super().__init__(\"_attach_geom_size\", {\"geom\" : geom, **kwargs})\n\nclass _attach_geom_edge_path(_Bosl2Base):\n    def __init__(self, geom=None, edge=None, **kwargs):\n       super().__init__(\"_attach_geom_edge_path\", {\"geom\" : geom, \"edge\" : edge, **kwargs})\n\nclass _attach_transform(_Bosl2Base):\n    def __init__(self, anchor=None, spin=None, orient=None, geom=None, p=None, **kwargs):\n       super().__init__(\"_attach_transform\", {\"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"geom\" : geom, \"p\" : p, **kwargs})\n\nclass _get_cp(_Bosl2Base):\n    def __init__(self, geom=None, **kwargs):\n       super().__init__(\"_get_cp\", {\"geom\" : geom, **kwargs})\n\nclass _get_cp(_Bosl2Base):\n    def __init__(self, geom=None, **kwargs):\n       super().__init__(\"_get_cp\", {\"geom\" : geom, **kwargs})\n\nclass _three_edge_corner_dir(_Bosl2Base):\n    def __init__(self, facevecs=None, edges=None, **kwargs):\n       super().__init__(\"_three_edge_corner_dir\", {\"facevecs\" : facevecs, \"edges\" : edges, **kwargs})\n\nclass _find_anchor(_Bosl2Base):\n    def __init__(self, anchor=None, geom=None, **kwargs):\n       super().__init__(\"_find_anchor\", {\"anchor\" : anchor, \"geom\" : geom, **kwargs})\n\nclass _is_shown(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"_is_shown\", {**kwargs})\n\nclass _standard_anchors(_Bosl2Base):\n    def __init__(self, two_d=None, **kwargs):\n       super().__init__(\"_standard_anchors\", {\"two_d\" : two_d, **kwargs})\n\nclass _edges_vec_txt(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_edges_vec_txt\", {\"x\" : x, **kwargs})\n\nclass _edges_text(_Bosl2Base):\n    def __init__(self, edges=None, **kwargs):\n       super().__init__(\"_edges_text\", {\"edges\" : edges, **kwargs})\n\nclass _is_edge_array(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_is_edge_array\", {\"x\" : x, **kwargs})\n\nclass _edge_set(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_edge_set\", {\"v\" : v, **kwargs})\n\nclass _normalize_edges(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_normalize_edges\", {\"v\" : v, **kwargs})\n\nclass _edges(_Bosl2Base):\n    def __init__(self, v=None, _except=None, **kwargs):\n       super().__init__(\"_edges\", {\"v\" : v, \"_except\" : _except, **kwargs})\n\nclass _is_corner_array(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_is_corner_array\", {\"x\" : x, **kwargs})\n\nclass _normalize_corners(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_normalize_corners\", {\"v\" : v, **kwargs})\n\nclass _corner_set(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_corner_set\", {\"v\" : v, **kwargs})\n\nclass _corners(_Bosl2Base):\n    def __init__(self, v=None, _except=None, **kwargs):\n       super().__init__(\"_corners\", {\"v\" : v, \"_except\" : _except, **kwargs})\n\nclass _corner_edges(_Bosl2Base):\n    def __init__(self, edges=None, v=None, **kwargs):\n       super().__init__(\"_corner_edges\", {\"edges\" : edges, \"v\" : v, **kwargs})\n\nclass _corner_edge_count(_Bosl2Base):\n    def __init__(self, edges=None, v=None, **kwargs):\n       super().__init__(\"_corner_edge_count\", {\"edges\" : edges, \"v\" : v, **kwargs})\n\nclass _corners_text(_Bosl2Base):\n    def __init__(self, corners=None, **kwargs):\n       super().__init__(\"_corners_text\", {\"corners\" : corners, **kwargs})\n\nclass _force_rot(_Bosl2Base):\n    def __init__(self, T=None, **kwargs):\n       super().__init__(\"_force_rot\", {\"T\" : T, **kwargs})\n\nclass _local_struct_val(_Bosl2Base):\n    def __init__(self, struct=None, key=None, **kwargs):\n       super().__init__(\"_local_struct_val\", {\"struct\" : struct, \"key\" : key, **kwargs})\n\nclass _force_anchor_2d(_Bosl2Base):\n    def __init__(self, anchor=None, **kwargs):\n       super().__init__(\"_force_anchor_2d\", {\"anchor\" : anchor, **kwargs})\n\nclass _compute_spin(_Bosl2Base):\n    def __init__(self, anchor_dir=None, spin_dir=None, **kwargs):\n       super().__init__(\"_compute_spin\", {\"anchor_dir\" : anchor_dir, \"spin_dir\" : spin_dir, **kwargs})\n\nclass _canonical_edge(_Bosl2Base):\n    def __init__(self, edge=None, **kwargs):\n       super().__init__(\"_canonical_edge\", {\"edge\" : edge, **kwargs})\n\nclass parent(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"parent\", {**kwargs})\n\nclass parent_part(_Bosl2Base):\n    def __init__(self, name=None, **kwargs):\n       super().__init__(\"parent_part\", {\"name\" : name, **kwargs})\n\nclass desc_point(_Bosl2Base):\n    def __init__(self, desc=None, p=None, anchor=None, **kwargs):\n       super().__init__(\"desc_point\", {\"desc\" : desc, \"p\" : p, \"anchor\" : anchor, **kwargs})\n\nclass desc_dir(_Bosl2Base):\n    def __init__(self, desc=None, dir=None, anchor=None, **kwargs):\n       super().__init__(\"desc_dir\", {\"desc\" : desc, \"dir\" : dir, \"anchor\" : anchor, **kwargs})\n\nclass desc_attach(_Bosl2Base):\n    def __init__(self, desc=None, anchor=None, p=None, reverse=None, **kwargs):\n       super().__init__(\"desc_attach\", {\"desc\" : desc, \"anchor\" : anchor, \"p\" : p, \"reverse\" : reverse, **kwargs})\n\nclass desc_dist(_Bosl2Base):\n    def __init__(self, desc1=None, anchor1=None, desc2=None, anchor2=None, **kwargs):\n       super().__init__(\"desc_dist\", {\"desc1\" : desc1, \"anchor1\" : anchor1, \"desc2\" : desc2, \"anchor2\" : anchor2, **kwargs})\n\nclass transform_desc(_Bosl2Base):\n    def __init__(self, T=None, desc=None, **kwargs):\n       super().__init__(\"transform_desc\", {\"T\" : T, \"desc\" : desc, **kwargs})\n\nclass is_description(_Bosl2Base):\n    def __init__(self, desc=None, **kwargs):\n       super().__init__(\"is_description\", {\"desc\" : desc, **kwargs})\n\nclass position(_Bosl2Base):\n    def __init__(self, at=None, _from=None, **kwargs):\n       super().__init__(\"position\", {\"at\" : at, \"_from\" : _from, **kwargs})\n\nclass orient(_Bosl2Base):\n    def __init__(self, anchor=None, spin=None, **kwargs):\n       super().__init__(\"orient\", {\"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass align(_Bosl2Base):\n    def __init__(self, anchor=None, align=None, inside=None, inset=None, shiftout=None, overlap=None, **kwargs):\n       super().__init__(\"align\", {\"anchor\" : anchor, \"align\" : align, \"inside\" : inside, \"inset\" : inset, \"shiftout\" : shiftout, \"overlap\" : overlap, **kwargs})\n\nclass attach(_Bosl2Base):\n    def __init__(self, parent=None, child=None, overlap=None, align=None, spin=None, norot=None, inset=None, shiftout=None, inside=None, _from=None, to=None, **kwargs):\n       super().__init__(\"attach\", {\"parent\" : parent, \"child\" : child, \"overlap\" : overlap, \"align\" : align, \"spin\" : spin, \"norot\" : norot, \"inset\" : inset, \"shiftout\" : shiftout, \"inside\" : inside, \"_from\" : _from, \"to\" : to, **kwargs})\n\nclass attach_part(_Bosl2Base):\n    def __init__(self, name=None, **kwargs):\n       super().__init__(\"attach_part\", {\"name\" : name, **kwargs})\n\nclass tag(_Bosl2Base):\n    def __init__(self, tag=None, **kwargs):\n       super().__init__(\"tag\", {\"tag\" : tag, **kwargs})\n\nclass tag_this(_Bosl2Base):\n    def __init__(self, tag=None, **kwargs):\n       super().__init__(\"tag_this\", {\"tag\" : tag, **kwargs})\n\nclass force_tag(_Bosl2Base):\n    def __init__(self, tag=None, **kwargs):\n       super().__init__(\"force_tag\", {\"tag\" : tag, **kwargs})\n\nclass default_tag(_Bosl2Base):\n    def __init__(self, tag=None, do_tag=None, **kwargs):\n       super().__init__(\"default_tag\", {\"tag\" : tag, \"do_tag\" : do_tag, **kwargs})\n\nclass tag_scope(_Bosl2Base):\n    def __init__(self, scope=None, **kwargs):\n       super().__init__(\"tag_scope\", {\"scope\" : scope, **kwargs})\n\nclass diff(_Bosl2Base):\n    def __init__(self, remove=None, keep=None, **kwargs):\n       super().__init__(\"diff\", {\"remove\" : remove, \"keep\" : keep, **kwargs})\n\nclass tag_diff(_Bosl2Base):\n    def __init__(self, tag=None, remove=None, keep=None, **kwargs):\n       super().__init__(\"tag_diff\", {\"tag\" : tag, \"remove\" : remove, \"keep\" : keep, **kwargs})\n\nclass intersect(_Bosl2Base):\n    def __init__(self, intersect=None, keep=None, **kwargs):\n       super().__init__(\"intersect\", {\"intersect\" : intersect, \"keep\" : keep, **kwargs})\n\nclass tag_intersect(_Bosl2Base):\n    def __init__(self, tag=None, intersect=None, keep=None, **kwargs):\n       super().__init__(\"tag_intersect\", {\"tag\" : tag, \"intersect\" : intersect, \"keep\" : keep, **kwargs})\n\nclass conv_hull(_Bosl2Base):\n    def __init__(self, keep=None, **kwargs):\n       super().__init__(\"conv_hull\", {\"keep\" : keep, **kwargs})\n\nclass tag_conv_hull(_Bosl2Base):\n    def __init__(self, tag=None, keep=None, **kwargs):\n       super().__init__(\"tag_conv_hull\", {\"tag\" : tag, \"keep\" : keep, **kwargs})\n\nclass hide(_Bosl2Base):\n    def __init__(self, tags=None, **kwargs):\n       super().__init__(\"hide\", {\"tags\" : tags, **kwargs})\n\nclass hide_this(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"hide_this\", {**kwargs})\n\nclass show_only(_Bosl2Base):\n    def __init__(self, tags=None, **kwargs):\n       super().__init__(\"show_only\", {\"tags\" : tags, **kwargs})\n\nclass show_all(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"show_all\", {**kwargs})\n\nclass show_int(_Bosl2Base):\n    def __init__(self, tags=None, **kwargs):\n       super().__init__(\"show_int\", {\"tags\" : tags, **kwargs})\n\nclass face_mask(_Bosl2Base):\n    def __init__(self, faces=None, **kwargs):\n       super().__init__(\"face_mask\", {\"faces\" : faces, **kwargs})\n\nclass edge_mask(_Bosl2Base):\n    def __init__(self, edges=None, _except=None, **kwargs):\n       super().__init__(\"edge_mask\", {\"edges\" : edges, \"_except\" : _except, **kwargs})\n\nclass corner_mask(_Bosl2Base):\n    def __init__(self, corners=None, _except=None, **kwargs):\n       super().__init__(\"corner_mask\", {\"corners\" : corners, \"_except\" : _except, **kwargs})\n\nclass face_profile(_Bosl2Base):\n    def __init__(self, faces=None, r=None, d=None, excess=None, convexity=None, **kwargs):\n       super().__init__(\"face_profile\", {\"faces\" : faces, \"r\" : r, \"d\" : d, \"excess\" : excess, \"convexity\" : convexity, **kwargs})\n\nclass edge_profile(_Bosl2Base):\n    def __init__(self, edges=None, _except=None, excess=None, convexity=None, **kwargs):\n       super().__init__(\"edge_profile\", {\"edges\" : edges, \"_except\" : _except, \"excess\" : excess, \"convexity\" : convexity, **kwargs})\n\nclass edge_profile_asym(_Bosl2Base):\n    def __init__(self, edges=None, _except=None, excess=None, convexity=None, flip=None, corner_type=None, size=None, **kwargs):\n       super().__init__(\"edge_profile_asym\", {\"edges\" : edges, \"_except\" : _except, \"excess\" : excess, \"convexity\" : convexity, \"flip\" : flip, \"corner_type\" : corner_type, \"size\" : size, **kwargs})\n\nclass corner_profile(_Bosl2Base):\n    def __init__(self, corners=None, _except=None, r=None, d=None, convexity=None, **kwargs):\n       super().__init__(\"corner_profile\", {\"corners\" : corners, \"_except\" : _except, \"r\" : r, \"d\" : d, \"convexity\" : convexity, **kwargs})\n\nclass attachable(_Bosl2Base):\n    def __init__(self, anchor=None, spin=None, orient=None, size=None, size2=None, shift=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, l=None, h=None, vnf=None, path=None, region=None, extent=None, cp=None, offset=None, anchors=None, two_d=None, axis=None, override=None, geom=None, parts=None, expose_tags=None, keep_color=None, **kwargs):\n       super().__init__(\"attachable\", {\"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"size\" : size, \"size2\" : size2, \"shift\" : shift, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"h\" : h, \"vnf\" : vnf, \"path\" : path, \"region\" : region, \"extent\" : extent, \"cp\" : cp, \"offset\" : offset, \"anchors\" : anchors, \"two_d\" : two_d, \"axis\" : axis, \"override\" : override, \"geom\" : geom, \"parts\" : parts, \"expose_tags\" : expose_tags, \"keep_color\" : keep_color, **kwargs})\n\nclass _show_highlight(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"_show_highlight\", {**kwargs})\n\nclass _show_ghost(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"_show_ghost\", {**kwargs})\n\nclass show_anchors(_Bosl2Base):\n    def __init__(self, s=None, std=None, custom=None, **kwargs):\n       super().__init__(\"show_anchors\", {\"s\" : s, \"std\" : std, \"custom\" : custom, **kwargs})\n\nclass anchor_arrow(_Bosl2Base):\n    def __init__(self, s=None, color=None, flag=None, _tag=None, _fn=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"anchor_arrow\", {\"s\" : s, \"color\" : color, \"flag\" : flag, \"_tag\" : _tag, \"_fn\" : _fn, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass anchor_arrow2d(_Bosl2Base):\n    def __init__(self, s=None, color=None, _tag=None, **kwargs):\n       super().__init__(\"anchor_arrow2d\", {\"s\" : s, \"color\" : color, \"_tag\" : _tag, **kwargs})\n\nclass expose_anchors(_Bosl2Base):\n    def __init__(self, opacity=None, **kwargs):\n       super().__init__(\"expose_anchors\", {\"opacity\" : opacity, **kwargs})\n\nclass show_transform_list(_Bosl2Base):\n    def __init__(self, tlist=None, s=None, **kwargs):\n       super().__init__(\"show_transform_list\", {\"tlist\" : tlist, \"s\" : s, **kwargs})\n\nclass generic_airplane(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"generic_airplane\", {\"s\" : s, **kwargs})\n\nclass frame_ref(_Bosl2Base):\n    def __init__(self, s=None, opacity=None, **kwargs):\n       super().__init__(\"frame_ref\", {\"s\" : s, \"opacity\" : opacity, **kwargs})\n\nclass _edges_text3d(_Bosl2Base):\n    def __init__(self, txt=None, size=None, **kwargs):\n       super().__init__(\"_edges_text3d\", {\"txt\" : txt, \"size\" : size, **kwargs})\n\nclass _show_edges(_Bosl2Base):\n    def __init__(self, edges=None, size=None, text=None, txtsize=None, toplabel=None, **kwargs):\n       super().__init__(\"_show_edges\", {\"edges\" : edges, \"size\" : size, \"text\" : text, \"txtsize\" : txtsize, \"toplabel\" : toplabel, **kwargs})\n\nclass _show_corners(_Bosl2Base):\n    def __init__(self, corners=None, size=None, text=None, txtsize=None, toplabel=None, **kwargs):\n       super().__init__(\"_show_corners\", {\"corners\" : corners, \"size\" : size, \"text\" : text, \"txtsize\" : txtsize, \"toplabel\" : toplabel, **kwargs})\n\nclass _show_cube_faces(_Bosl2Base):\n    def __init__(self, faces=None, size=None, toplabel=None, botlabel=None, **kwargs):\n       super().__init__(\"_show_cube_faces\", {\"faces\" : faces, \"size\" : size, \"toplabel\" : toplabel, \"botlabel\" : botlabel, **kwargs})\n\nclass restore(_Bosl2Base):\n    def __init__(self, desc=None, **kwargs):\n       super().__init__(\"restore\", {\"desc\" : desc, **kwargs})\n\nclass desc_copies(_Bosl2Base):\n    def __init__(self, transforms=None, **kwargs):\n       super().__init__(\"desc_copies\", {\"transforms\" : transforms, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/ball_bearings.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/ball_bearings.scad'}\", False)\n\nclass ball_bearing_info(_Bosl2Base):\n    def __init__(self, trade_size=None, **kwargs):\n       super().__init__(\"ball_bearing_info\", {\"trade_size\" : trade_size, **kwargs})\n\nclass ball_bearing(_Bosl2Base):\n    def __init__(self, trade_size=None, id=None, od=None, width=None, shield=None, flange=None, fd=None, fw=None, rounding=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ball_bearing\", {\"trade_size\" : trade_size, \"id\" : id, \"od\" : od, \"width\" : width, \"shield\" : shield, \"flange\" : flange, \"fd\" : fd, \"fw\" : fw, \"rounding\" : rounding, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/beziers.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/beziers.scad'}\", False)\n\n_bezier_matrix_table = _OpenSCADConstant('_bezier_matrix_table')\nclass bezier_points(_Bosl2Base):\n    def __init__(self, curve=None, u=None, **kwargs):\n       super().__init__(\"bezier_points\", {\"curve\" : curve, \"u\" : u, **kwargs})\n\nclass _signed_pascals_triangle(_Bosl2Base):\n    def __init__(self, N=None, tri=None, **kwargs):\n       super().__init__(\"_signed_pascals_triangle\", {\"N\" : N, \"tri\" : tri, **kwargs})\n\nclass _compute_bezier_matrix(_Bosl2Base):\n    def __init__(self, N=None, **kwargs):\n       super().__init__(\"_compute_bezier_matrix\", {\"N\" : N, **kwargs})\n\nclass _bezier_matrix(_Bosl2Base):\n    def __init__(self, N=None, **kwargs):\n       super().__init__(\"_bezier_matrix\", {\"N\" : N, **kwargs})\n\nclass bezier_curve(_Bosl2Base):\n    def __init__(self, bezier=None, splinesteps=None, endpoint=None, **kwargs):\n       super().__init__(\"bezier_curve\", {\"bezier\" : bezier, \"splinesteps\" : splinesteps, \"endpoint\" : endpoint, **kwargs})\n\nclass bezier_derivative(_Bosl2Base):\n    def __init__(self, bezier=None, u=None, order=None, **kwargs):\n       super().__init__(\"bezier_derivative\", {\"bezier\" : bezier, \"u\" : u, \"order\" : order, **kwargs})\n\nclass bezier_tangent(_Bosl2Base):\n    def __init__(self, bezier=None, u=None, **kwargs):\n       super().__init__(\"bezier_tangent\", {\"bezier\" : bezier, \"u\" : u, **kwargs})\n\nclass bezier_curvature(_Bosl2Base):\n    def __init__(self, bezier=None, u=None, **kwargs):\n       super().__init__(\"bezier_curvature\", {\"bezier\" : bezier, \"u\" : u, **kwargs})\n\nclass bezier_closest_point(_Bosl2Base):\n    def __init__(self, bezier=None, pt=None, max_err=None, u=None, end_u=None, **kwargs):\n       super().__init__(\"bezier_closest_point\", {\"bezier\" : bezier, \"pt\" : pt, \"max_err\" : max_err, \"u\" : u, \"end_u\" : end_u, **kwargs})\n\nclass bezier_length(_Bosl2Base):\n    def __init__(self, bezier=None, start_u=None, end_u=None, max_deflect=None, **kwargs):\n       super().__init__(\"bezier_length\", {\"bezier\" : bezier, \"start_u\" : start_u, \"end_u\" : end_u, \"max_deflect\" : max_deflect, **kwargs})\n\nclass bezier_line_intersection(_Bosl2Base):\n    def __init__(self, bezier=None, line=None, **kwargs):\n       super().__init__(\"bezier_line_intersection\", {\"bezier\" : bezier, \"line\" : line, **kwargs})\n\nclass bezpath_points(_Bosl2Base):\n    def __init__(self, bezpath=None, curveind=None, u=None, N=None, **kwargs):\n       super().__init__(\"bezpath_points\", {\"bezpath\" : bezpath, \"curveind\" : curveind, \"u\" : u, \"N\" : N, **kwargs})\n\nclass bezpath_curve(_Bosl2Base):\n    def __init__(self, bezpath=None, splinesteps=None, N=None, endpoint=None, **kwargs):\n       super().__init__(\"bezpath_curve\", {\"bezpath\" : bezpath, \"splinesteps\" : splinesteps, \"N\" : N, \"endpoint\" : endpoint, **kwargs})\n\nclass bezpath_closest_point(_Bosl2Base):\n    def __init__(self, bezpath=None, pt=None, N=None, max_err=None, seg=None, min_seg=None, min_u=None, min_dist=None, **kwargs):\n       super().__init__(\"bezpath_closest_point\", {\"bezpath\" : bezpath, \"pt\" : pt, \"N\" : N, \"max_err\" : max_err, \"seg\" : seg, \"min_seg\" : min_seg, \"min_u\" : min_u, \"min_dist\" : min_dist, **kwargs})\n\nclass bezpath_length(_Bosl2Base):\n    def __init__(self, bezpath=None, N=None, max_deflect=None, **kwargs):\n       super().__init__(\"bezpath_length\", {\"bezpath\" : bezpath, \"N\" : N, \"max_deflect\" : max_deflect, **kwargs})\n\nclass path_to_bezpath(_Bosl2Base):\n    def __init__(self, path=None, closed=None, tangents=None, uniform=None, size=None, relsize=None, **kwargs):\n       super().__init__(\"path_to_bezpath\", {\"path\" : path, \"closed\" : closed, \"tangents\" : tangents, \"uniform\" : uniform, \"size\" : size, \"relsize\" : relsize, **kwargs})\n\nclass path_to_bezcornerpath(_Bosl2Base):\n    def __init__(self, path=None, closed=None, size=None, relsize=None, **kwargs):\n       super().__init__(\"path_to_bezcornerpath\", {\"path\" : path, \"closed\" : closed, \"size\" : size, \"relsize\" : relsize, **kwargs})\n\nclass _bez_path_corner(_Bosl2Base):\n    def __init__(self, p=None, curvesize=None, relative=None, mincurvesize=None, **kwargs):\n       super().__init__(\"_bez_path_corner\", {\"p\" : p, \"curvesize\" : curvesize, \"relative\" : relative, \"mincurvesize\" : mincurvesize, **kwargs})\n\nclass bezpath_close_to_axis(_Bosl2Base):\n    def __init__(self, bezpath=None, axis=None, N=None, **kwargs):\n       super().__init__(\"bezpath_close_to_axis\", {\"bezpath\" : bezpath, \"axis\" : axis, \"N\" : N, **kwargs})\n\nclass bezpath_offset(_Bosl2Base):\n    def __init__(self, offset=None, bezier=None, N=None, **kwargs):\n       super().__init__(\"bezpath_offset\", {\"offset\" : offset, \"bezier\" : bezier, \"N\" : N, **kwargs})\n\nclass bez_begin(_Bosl2Base):\n    def __init__(self, pt=None, a=None, r=None, p=None, **kwargs):\n       super().__init__(\"bez_begin\", {\"pt\" : pt, \"a\" : a, \"r\" : r, \"p\" : p, **kwargs})\n\nclass bez_tang(_Bosl2Base):\n    def __init__(self, pt=None, a=None, r1=None, r2=None, p=None, **kwargs):\n       super().__init__(\"bez_tang\", {\"pt\" : pt, \"a\" : a, \"r1\" : r1, \"r2\" : r2, \"p\" : p, **kwargs})\n\nclass bez_joint(_Bosl2Base):\n    def __init__(self, pt=None, a1=None, a2=None, r1=None, r2=None, p1=None, p2=None, **kwargs):\n       super().__init__(\"bez_joint\", {\"pt\" : pt, \"a1\" : a1, \"a2\" : a2, \"r1\" : r1, \"r2\" : r2, \"p1\" : p1, \"p2\" : p2, **kwargs})\n\nclass bez_end(_Bosl2Base):\n    def __init__(self, pt=None, a=None, r=None, p=None, **kwargs):\n       super().__init__(\"bez_end\", {\"pt\" : pt, \"a\" : a, \"r\" : r, \"p\" : p, **kwargs})\n\nclass is_bezier_patch(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_bezier_patch\", {\"x\" : x, **kwargs})\n\nclass bezier_patch_flat(_Bosl2Base):\n    def __init__(self, size=None, N=None, spin=None, orient=None, trans=None, **kwargs):\n       super().__init__(\"bezier_patch_flat\", {\"size\" : size, \"N\" : N, \"spin\" : spin, \"orient\" : orient, \"trans\" : trans, **kwargs})\n\nclass bezier_patch_reverse(_Bosl2Base):\n    def __init__(self, patch=None, **kwargs):\n       super().__init__(\"bezier_patch_reverse\", {\"patch\" : patch, **kwargs})\n\nclass bezier_patch_points(_Bosl2Base):\n    def __init__(self, patch=None, u=None, v=None, **kwargs):\n       super().__init__(\"bezier_patch_points\", {\"patch\" : patch, \"u\" : u, \"v\" : v, **kwargs})\n\nclass _bezier_rectangle(_Bosl2Base):\n    def __init__(self, patch=None, splinesteps=None, style=None, **kwargs):\n       super().__init__(\"_bezier_rectangle\", {\"patch\" : patch, \"splinesteps\" : splinesteps, \"style\" : style, **kwargs})\n\nclass bezier_vnf(_Bosl2Base):\n    def __init__(self, patches=None, splinesteps=None, style=None, **kwargs):\n       super().__init__(\"bezier_vnf\", {\"patches\" : patches, \"splinesteps\" : splinesteps, \"style\" : style, **kwargs})\n\nclass bezier_vnf_degenerate_patch(_Bosl2Base):\n    def __init__(self, patch=None, splinesteps=None, reverse=None, return_edges=None, **kwargs):\n       super().__init__(\"bezier_vnf_degenerate_patch\", {\"patch\" : patch, \"splinesteps\" : splinesteps, \"reverse\" : reverse, \"return_edges\" : return_edges, **kwargs})\n\nclass bezier_patch_normals(_Bosl2Base):\n    def __init__(self, patch=None, u=None, v=None, **kwargs):\n       super().__init__(\"bezier_patch_normals\", {\"patch\" : patch, \"u\" : u, \"v\" : v, **kwargs})\n\nclass bezier_sheet(_Bosl2Base):\n    def __init__(self, patch=None, delta=None, splinesteps=None, style=None, thickness=None, **kwargs):\n       super().__init__(\"bezier_sheet\", {\"patch\" : patch, \"delta\" : delta, \"splinesteps\" : splinesteps, \"style\" : style, \"thickness\" : thickness, **kwargs})\n\nclass debug_bezier(_Bosl2Base):\n    def __init__(self, bezpath=None, width=None, N=None, **kwargs):\n       super().__init__(\"debug_bezier\", {\"bezpath\" : bezpath, \"width\" : width, \"N\" : N, **kwargs})\n\nclass debug_bezier_patches(_Bosl2Base):\n    def __init__(self, patches=None, size=None, splinesteps=None, showcps=None, showdots=None, showpatch=None, convexity=None, style=None, **kwargs):\n       super().__init__(\"debug_bezier_patches\", {\"patches\" : patches, \"size\" : size, \"splinesteps\" : splinesteps, \"showcps\" : showcps, \"showdots\" : showdots, \"showpatch\" : showpatch, \"convexity\" : convexity, \"style\" : style, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/bosl2_access_syntax_mixin.py",
    "content": "\nfrom solid2.core.object_base import AccessSyntaxMixin as _AccessSyntaxMixin\n\nclass Bosl2AccessSyntaxMixin(_AccessSyntaxMixin):\n\n    def _get_std(self):\n        from . import std\n        return std\n\n    def move(self, v=None, p=None, **kwargs):\n        return self._get_std().move(v, p, **kwargs)(self)\n\n    def left(self, x=None, p=None, **kwargs):\n        return self._get_std().left(x, p, **kwargs)(self)\n\n    def right(self, x=None, p=None, **kwargs):\n        return self._get_std().right(x, p, **kwargs)(self)\n\n    def xmove(self, x=None, p=None, **kwargs):\n        return self._get_std().xmove(x, p, **kwargs)(self)\n\n    def fwd(self, y=None, p=None, **kwargs):\n        return self._get_std().fwd(y, p, **kwargs)(self)\n\n    def back(self, y=None, p=None, **kwargs):\n        return self._get_std().back(y, p, **kwargs)(self)\n\n    def ymove(self, y=None, p=None, **kwargs):\n        return self._get_std().ymove(y, p, **kwargs)(self)\n\n    def down(self, z=None, p=None, **kwargs):\n        return self._get_std().down(z, p, **kwargs)(self)\n\n    def up(self, z=None, p=None, **kwargs):\n        return self._get_std().up(z, p, **kwargs)(self)\n\n    def zmove(self, z=None, p=None, **kwargs):\n        return self._get_std().zmove(z, p, **kwargs)(self)\n\n    def rot(self, a=None, v=None, cp=None, _from=None, to=None, reverse=None, **kwargs):\n        return self._get_std().rot(a, v, cp, _from, to, reverse, **kwargs)(self)\n\n    def xrot(self, a=None, p=None, cp=None, **kwargs):\n        return self._get_std().xrot(a, p, cp, **kwargs)(self)\n\n    def yrot(self, a=None, p=None, cp=None, **kwargs):\n        return self._get_std().yrot(a, p, cp, **kwargs)(self)\n\n    def zrot(self, a=None, p=None, cp=None, **kwargs):\n        return self._get_std().zrot(a, p, cp, **kwargs)(self)\n\n    def tilt(self, to=None, cp=None, reverse=None, **kwargs):\n        return self._get_std().tilt(to, cp, reverse, **kwargs)(self)\n\n    def xscale(self, x=None, p=None, cp=None, **kwargs):\n        return self._get_std().xscale(x, p, cp, **kwargs)(self)\n\n    def yscale(self, y=None, p=None, cp=None, **kwargs):\n        return self._get_std().yscale(y, p, cp, **kwargs)(self)\n\n    def zscale(self, z=None, p=None, cp=None, **kwargs):\n        return self._get_std().zscale(z, p, cp, **kwargs)(self)\n\n    def xflip(self, p=None, x=None, **kwargs):\n        return self._get_std().xflip(p, x, **kwargs)(self)\n\n    def yflip(self, p=None, y=None, **kwargs):\n        return self._get_std().yflip(p, y, **kwargs)(self)\n\n    def zflip(self, p=None, z=None, **kwargs):\n        return self._get_std().zflip(p, z, **kwargs)(self)\n\n    def frame_map(self, x=None, y=None, z=None, p=None, reverse=None, **kwargs):\n        return self._get_std().frame_map(x, y, z, p, reverse, **kwargs)(self)\n\n    def skew(self, p=None, sxy=None, sxz=None, syx=None, syz=None, szx=None, szy=None, axy=None, axz=None, ayx=None, ayz=None, azx=None, azy=None, **kwargs):\n        return self._get_std().skew(p, sxy, sxz, syx, syz, szx, szy, axy, axz, ayx, ayz, azx, azy, **kwargs)(self)\n\n    def translate(self, v=None, **kwargs):\n        return self._get_std().translate(v, **kwargs)(self)\n\n    def rotate(self, a=None, v=None, **kwargs):\n        return self._get_std().rotate(a, v, **kwargs)(self)\n\n    def scale(self, v=None, **kwargs):\n        return self._get_std().scale(v, **kwargs)(self)\n\n    def multmatrix(self, m=None, **kwargs):\n        return self._get_std().multmatrix(m, **kwargs)(self)\n\n    def position(self, at=None, _from=None, **kwargs):\n        return self._get_std().position(at, _from, **kwargs)(self)\n\n    def orient(self, anchor=None, spin=None, **kwargs):\n        return self._get_std().orient(anchor, spin, **kwargs)(self)\n\n    def align(self, anchor=None, align=None, inside=None, inset=None, shiftout=None, overlap=None, **kwargs):\n        return self._get_std().align(anchor, align, inside, inset, shiftout, overlap, **kwargs)(self)\n\n    def attach(self, parent=None, child=None, overlap=None, align=None, spin=None, norot=None, inset=None, shiftout=None, inside=None, _from=None, to=None, **kwargs):\n        return self._get_std().attach(parent, child, overlap, align, spin, norot, inset, shiftout, inside, _from, to, **kwargs)(self)\n\n    def attach_part(self, name=None, **kwargs):\n        return self._get_std().attach_part(name, **kwargs)(self)\n\n    def tag(self, tag=None, **kwargs):\n        return self._get_std().tag(tag, **kwargs)(self)\n\n    def tag_this(self, tag=None, **kwargs):\n        return self._get_std().tag_this(tag, **kwargs)(self)\n\n    def force_tag(self, tag=None, **kwargs):\n        return self._get_std().force_tag(tag, **kwargs)(self)\n\n    def default_tag(self, tag=None, do_tag=None, **kwargs):\n        return self._get_std().default_tag(tag, do_tag, **kwargs)(self)\n\n    def tag_scope(self, scope=None, **kwargs):\n        return self._get_std().tag_scope(scope, **kwargs)(self)\n\n    def diff(self, remove=None, keep=None, **kwargs):\n        return self._get_std().diff(remove, keep, **kwargs)(self)\n\n    def tag_diff(self, tag=None, remove=None, keep=None, **kwargs):\n        return self._get_std().tag_diff(tag, remove, keep, **kwargs)(self)\n\n    def intersect(self, intersect=None, keep=None, **kwargs):\n        return self._get_std().intersect(intersect, keep, **kwargs)(self)\n\n    def tag_intersect(self, tag=None, intersect=None, keep=None, **kwargs):\n        return self._get_std().tag_intersect(tag, intersect, keep, **kwargs)(self)\n\n    def conv_hull(self, keep=None, **kwargs):\n        return self._get_std().conv_hull(keep, **kwargs)(self)\n\n    def tag_conv_hull(self, tag=None, keep=None, **kwargs):\n        return self._get_std().tag_conv_hull(tag, keep, **kwargs)(self)\n\n    def hide(self, tags=None, **kwargs):\n        return self._get_std().hide(tags, **kwargs)(self)\n\n    def hide_this(self, **kwargs):\n        return self._get_std().hide_this(**kwargs)(self)\n\n    def show_only(self, tags=None, **kwargs):\n        return self._get_std().show_only(tags, **kwargs)(self)\n\n    def show_all(self, **kwargs):\n        return self._get_std().show_all(**kwargs)(self)\n\n    def show_int(self, tags=None, **kwargs):\n        return self._get_std().show_int(tags, **kwargs)(self)\n\n    def face_mask(self, faces=None, **kwargs):\n        return self._get_std().face_mask(faces, **kwargs)(self)\n\n    def edge_mask(self, edges=None, _except=None, **kwargs):\n        return self._get_std().edge_mask(edges, _except, **kwargs)(self)\n\n    def corner_mask(self, corners=None, _except=None, **kwargs):\n        return self._get_std().corner_mask(corners, _except, **kwargs)(self)\n\n    def face_profile(self, faces=None, r=None, d=None, excess=None, convexity=None, **kwargs):\n        return self._get_std().face_profile(faces, r, d, excess, convexity, **kwargs)(self)\n\n    def edge_profile(self, edges=None, _except=None, excess=None, convexity=None, **kwargs):\n        return self._get_std().edge_profile(edges, _except, excess, convexity, **kwargs)(self)\n\n    def edge_profile_asym(self, edges=None, _except=None, excess=None, convexity=None, flip=None, corner_type=None, size=None, **kwargs):\n        return self._get_std().edge_profile_asym(edges, _except, excess, convexity, flip, corner_type, size, **kwargs)(self)\n\n    def corner_profile(self, corners=None, _except=None, r=None, d=None, convexity=None, **kwargs):\n        return self._get_std().corner_profile(corners, _except, r, d, convexity, **kwargs)(self)\n\n    def attachable(self, anchor=None, spin=None, orient=None, size=None, size2=None, shift=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, l=None, h=None, vnf=None, path=None, region=None, extent=None, cp=None, offset=None, anchors=None, two_d=None, axis=None, override=None, geom=None, parts=None, expose_tags=None, keep_color=None, **kwargs):\n        return self._get_std().attachable(anchor, spin, orient, size, size2, shift, r, r1, r2, d, d1, d2, l, h, vnf, path, region, extent, cp, offset, anchors, two_d, axis, override, geom, parts, expose_tags, keep_color, **kwargs)(self)\n\n    def show_anchors(self, s=None, std=None, custom=None, **kwargs):\n        return self._get_std().show_anchors(s, std, custom, **kwargs)(self)\n\n    def anchor_arrow(self, s=None, color=None, flag=None, _tag=None, _fn=None, anchor=None, spin=None, orient=None, **kwargs):\n        return self._get_std().anchor_arrow(s, color, flag, _tag, _fn, anchor, spin, orient, **kwargs)(self)\n\n    def anchor_arrow2d(self, s=None, color=None, _tag=None, **kwargs):\n        return self._get_std().anchor_arrow2d(s, color, _tag, **kwargs)(self)\n\n    def expose_anchors(self, opacity=None, **kwargs):\n        return self._get_std().expose_anchors(opacity, **kwargs)(self)\n\n    def show_transform_list(self, tlist=None, s=None, **kwargs):\n        return self._get_std().show_transform_list(tlist, s, **kwargs)(self)\n\n    def generic_airplane(self, s=None, **kwargs):\n        return self._get_std().generic_airplane(s, **kwargs)(self)\n\n    def frame_ref(self, s=None, opacity=None, **kwargs):\n        return self._get_std().frame_ref(s, opacity, **kwargs)(self)\n\n    def restore(self, desc=None, **kwargs):\n        return self._get_std().restore(desc, **kwargs)(self)\n\n    def desc_copies(self, transforms=None, **kwargs):\n        return self._get_std().desc_copies(transforms, **kwargs)(self)\n\n    def extrude_from_to(self, pt1=None, pt2=None, convexity=None, twist=None, scale=None, slices=None, **kwargs):\n        return self._get_std().extrude_from_to(pt1, pt2, convexity, twist, scale, slices, **kwargs)(self)\n\n    def path_extrude2d(self, path=None, caps=None, closed=None, s=None, convexity=None, **kwargs):\n        return self._get_std().path_extrude2d(path, caps, closed, s, convexity, **kwargs)(self)\n\n    def path_extrude(self, path=None, convexity=None, clipsize=None, **kwargs):\n        return self._get_std().path_extrude(path, convexity, clipsize, **kwargs)(self)\n\n    def cylindrical_extrude(self, ir=None, _or=None, od=None, id=None, size=None, convexity=None, spin=None, orient=None, **kwargs):\n        return self._get_std().cylindrical_extrude(ir, _or, od, id, size, convexity, spin, orient, **kwargs)(self)\n\n    def bounding_box(self, excess=None, planar=None, **kwargs):\n        return self._get_std().bounding_box(excess, planar, **kwargs)(self)\n\n    def chain_hull(self, **kwargs):\n        return self._get_std().chain_hull(**kwargs)(self)\n\n    def minkowski_difference(self, planar=None, **kwargs):\n        return self._get_std().minkowski_difference(planar, **kwargs)(self)\n\n    def offset3d(self, r=None, size=None, convexity=None, **kwargs):\n        return self._get_std().offset3d(r, size, convexity, **kwargs)(self)\n\n    def round3d(self, r=None, _or=None, ir=None, size=None, **kwargs):\n        return self._get_std().round3d(r, _or, ir, size, **kwargs)(self)\n\n    def move_copies(self, a=None, **kwargs):\n        return self._get_std().move_copies(a, **kwargs)(self)\n\n    def xcopies(self, spacing=None, n=None, l=None, sp=None, **kwargs):\n        return self._get_std().xcopies(spacing, n, l, sp, **kwargs)(self)\n\n    def ycopies(self, spacing=None, n=None, l=None, sp=None, **kwargs):\n        return self._get_std().ycopies(spacing, n, l, sp, **kwargs)(self)\n\n    def zcopies(self, spacing=None, n=None, l=None, sp=None, **kwargs):\n        return self._get_std().zcopies(spacing, n, l, sp, **kwargs)(self)\n\n    def line_of(self, spacing=None, n=None, l=None, p1=None, p2=None, **kwargs):\n        return self._get_std().line_of(spacing, n, l, p1, p2, **kwargs)(self)\n\n    def line_copies(self, spacing=None, n=None, l=None, p1=None, p2=None, **kwargs):\n        return self._get_std().line_copies(spacing, n, l, p1, p2, **kwargs)(self)\n\n    def grid2d(self, spacing=None, n=None, size=None, stagger=None, inside=None, nonzero=None, **kwargs):\n        return self._get_std().grid2d(spacing, n, size, stagger, inside, nonzero, **kwargs)(self)\n\n    def grid_copies(self, spacing=None, n=None, size=None, stagger=None, inside=None, nonzero=None, axes=None, **kwargs):\n        return self._get_std().grid_copies(spacing, n, size, stagger, inside, nonzero, axes, **kwargs)(self)\n\n    def rot_copies(self, rots=None, v=None, cp=None, n=None, sa=None, offset=None, delta=None, subrot=None, **kwargs):\n        return self._get_std().rot_copies(rots, v, cp, n, sa, offset, delta, subrot, **kwargs)(self)\n\n    def xrot_copies(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, **kwargs):\n        return self._get_std().xrot_copies(rots, cp, n, sa, r, d, subrot, **kwargs)(self)\n\n    def yrot_copies(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, **kwargs):\n        return self._get_std().yrot_copies(rots, cp, n, sa, r, d, subrot, **kwargs)(self)\n\n    def zrot_copies(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, **kwargs):\n        return self._get_std().zrot_copies(rots, cp, n, sa, r, d, subrot, **kwargs)(self)\n\n    def arc_of(self, n=None, r=None, rx=None, ry=None, d=None, dx=None, dy=None, sa=None, ea=None, rot=None, **kwargs):\n        return self._get_std().arc_of(n, r, rx, ry, d, dx, dy, sa, ea, rot, **kwargs)(self)\n\n    def arc_copies(self, n=None, r=None, rx=None, ry=None, d=None, dx=None, dy=None, sa=None, ea=None, rot=None, **kwargs):\n        return self._get_std().arc_copies(n, r, rx, ry, d, dx, dy, sa, ea, rot, **kwargs)(self)\n\n    def ovoid_spread(self, n=None, r=None, d=None, cone_ang=None, scale=None, perp=None, **kwargs):\n        return self._get_std().ovoid_spread(n, r, d, cone_ang, scale, perp, **kwargs)(self)\n\n    def sphere_copies(self, n=None, r=None, d=None, cone_ang=None, scale=None, perp=None, **kwargs):\n        return self._get_std().sphere_copies(n, r, d, cone_ang, scale, perp, **kwargs)(self)\n\n    def path_spread(self, path=None, n=None, spacing=None, sp=None, rotate_children=None, dist=None, closed=None, **kwargs):\n        return self._get_std().path_spread(path, n, spacing, sp, rotate_children, dist, closed, **kwargs)(self)\n\n    def path_copies(self, path=None, n=None, spacing=None, sp=None, dist=None, rotate_children=None, closed=None, **kwargs):\n        return self._get_std().path_copies(path, n, spacing, sp, dist, rotate_children, closed, **kwargs)(self)\n\n    def xflip_copy(self, offset=None, x=None, **kwargs):\n        return self._get_std().xflip_copy(offset, x, **kwargs)(self)\n\n    def yflip_copy(self, offset=None, y=None, **kwargs):\n        return self._get_std().yflip_copy(offset, y, **kwargs)(self)\n\n    def zflip_copy(self, offset=None, z=None, **kwargs):\n        return self._get_std().zflip_copy(offset, z, **kwargs)(self)\n\n    def mirror_copy(self, v=None, offset=None, cp=None, **kwargs):\n        return self._get_std().mirror_copy(v, offset, cp, **kwargs)(self)\n\n    def xdistribute(self, spacing=None, sizes=None, l=None, **kwargs):\n        return self._get_std().xdistribute(spacing, sizes, l, **kwargs)(self)\n\n    def ydistribute(self, spacing=None, sizes=None, l=None, **kwargs):\n        return self._get_std().ydistribute(spacing, sizes, l, **kwargs)(self)\n\n    def zdistribute(self, spacing=None, sizes=None, l=None, **kwargs):\n        return self._get_std().zdistribute(spacing, sizes, l, **kwargs)(self)\n\n    def distribute(self, spacing=None, sizes=None, dir=None, l=None, **kwargs):\n        return self._get_std().distribute(spacing, sizes, dir, l, **kwargs)(self)\n\n    def half_of(self, v=None, cp=None, s=None, planar=None, **kwargs):\n        return self._get_std().half_of(v, cp, s, planar, **kwargs)(self)\n\n    def left_half(self, s=None, x=None, planar=None, **kwargs):\n        return self._get_std().left_half(s, x, planar, **kwargs)(self)\n\n    def right_half(self, s=None, x=None, planar=None, **kwargs):\n        return self._get_std().right_half(s, x, planar, **kwargs)(self)\n\n    def front_half(self, s=None, y=None, planar=None, **kwargs):\n        return self._get_std().front_half(s, y, planar, **kwargs)(self)\n\n    def back_half(self, s=None, y=None, planar=None, **kwargs):\n        return self._get_std().back_half(s, y, planar, **kwargs)(self)\n\n    def bottom_half(self, s=None, z=None, **kwargs):\n        return self._get_std().bottom_half(s, z, **kwargs)(self)\n\n    def top_half(self, s=None, z=None, **kwargs):\n        return self._get_std().top_half(s, z, **kwargs)(self)\n\n    def partition_mask(self, l=None, w=None, h=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, inverse=None, anchor=None, spin=None, orient=None, **kwargs):\n        return self._get_std().partition_mask(l, w, h, cutsize, cutpath, gap, cutpath_centered, inverse, anchor, spin, orient, **kwargs)(self)\n\n    def partition_cut_mask(self, l=None, h=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, anchor=None, spin=None, orient=None, **kwargs):\n        return self._get_std().partition_cut_mask(l, h, cutsize, cutpath, gap, cutpath_centered, anchor, spin, orient, **kwargs)(self)\n\n    def partition(self, size=None, spread=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, spin=None, **kwargs):\n        return self._get_std().partition(size, spread, cutsize, cutpath, gap, cutpath_centered, spin, **kwargs)(self)\n\n    def recolor(self, c=None, **kwargs):\n        return self._get_std().recolor(c, **kwargs)(self)\n\n    def color_this(self, c=None, **kwargs):\n        return self._get_std().color_this(c, **kwargs)(self)\n\n    def rainbow(self, list=None, stride=None, maxhues=None, shuffle=None, seed=None, **kwargs):\n        return self._get_std().rainbow(list, stride, maxhues, shuffle, seed, **kwargs)(self)\n\n    def color_overlaps(self, color=None, **kwargs):\n        return self._get_std().color_overlaps(color, **kwargs)(self)\n\n    def highlight(self, highlight=None, **kwargs):\n        return self._get_std().highlight(highlight, **kwargs)(self)\n\n    def highlight_this(self, **kwargs):\n        return self._get_std().highlight_this(**kwargs)(self)\n\n    def ghost(self, ghost=None, **kwargs):\n        return self._get_std().ghost(ghost, **kwargs)(self)\n\n    def ghost_this(self, **kwargs):\n        return self._get_std().ghost_this(**kwargs)(self)\n\n    def hsl(self, h=None, s=None, l=None, a=None, **kwargs):\n        return self._get_std().hsl(h, s, l, a, **kwargs)(self)\n\n    def hsv(self, h=None, s=None, v=None, a=None, **kwargs):\n        return self._get_std().hsv(h, s, v, a, **kwargs)(self)\n"
  },
  {
    "path": "solid2/extensions/bosl2/bosl2_base.py",
    "content": "from solid2.core.object_base.object_base_impl import BareOpenSCADObject\nfrom solid2.core.object_base.operator_mixin import OperatorMixin\nfrom solid2.extensions.bosl2.bosl2_access_syntax_mixin import Bosl2AccessSyntaxMixin\n\n\nclass Bosl2OperatorMixin(OperatorMixin):\n    def __add__(self, x):\n        from .std import union\n        return self._union_op(x, union)\n\n    def __or__(self, x):\n        from .std import union\n        return self._union_op(x, union)\n\n    def __radd__(self, x):\n        from .std import union\n        return self._union_op(x, union)\n\n    def __sub__(self, x):\n        from .std import difference\n        return self._difference_op(x, difference)\n\n    def __mul__(self, x):\n        from .std import intersection\n        return self._intersection_op(x, intersection)\n\n    def __and__(self, x):\n        from .std import intersection\n        return self._intersection_op(x, intersection)\n\n\nclass Bosl2Base(Bosl2AccessSyntaxMixin, Bosl2OperatorMixin, BareOpenSCADObject):\n    pass\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/bosl2_patches.py",
    "content": "__nothing__ = None\n\nfrom .bosl2_base import Bosl2Base\nfrom .std import union, attachable\n\n#============ attachable add =============\n#enhance the add function of the attachable OpenSCADObject so it can be used\n#properly: cf. 07-libs-bosl2-attachable.py\nattachable_default_add = attachable.add\n\ndef attachable_add(self, c):\n    if len(self._children) == 0:\n        attachable_default_add(self, c)\n    elif len(self._children) == 1:\n        attachable_default_add(self, union()(c))\n    else:\n        assert(len(self._children) == 2)\n        self._children[1].add(c)\n\nattachable.add = attachable_add\n#============ attachable add end =============\n\n# flip back & fwd -> issue #54\n# https://github.com/jeff-dh/SolidPython/issues/54\nback = Bosl2Base.back\nBosl2Base.back = Bosl2Base.fwd #type: ignore\nBosl2Base.fwd = back #type: ignore\n"
  },
  {
    "path": "solid2/extensions/bosl2/bottlecaps.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/bottlecaps.scad'}\", False)\n\n_sp_specs = _OpenSCADConstant('_sp_specs')\n_sp_twist = _OpenSCADConstant('_sp_twist')\n_sp_thread_width = _OpenSCADConstant('_sp_thread_width')\nclass pco1810_neck(_Bosl2Base):\n    def __init__(self, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1810_neck\", {\"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass pco1810_cap(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, wall=None, texture=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1810_cap\", {\"h\" : h, \"r\" : r, \"d\" : d, \"wall\" : wall, \"texture\" : texture, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass pco1881_neck(_Bosl2Base):\n    def __init__(self, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1881_neck\", {\"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass pco1881_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1881_cap\", {\"wall\" : wall, \"texture\" : texture, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_bottle_neck(_Bosl2Base):\n    def __init__(self, neck_d=None, id=None, thread_od=None, height=None, support_d=None, pitch=None, round_supp=None, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_bottle_neck\", {\"neck_d\" : neck_d, \"id\" : id, \"thread_od\" : thread_od, \"height\" : height, \"support_d\" : support_d, \"pitch\" : pitch, \"round_supp\" : round_supp, \"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_bottle_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, height=None, thread_od=None, tolerance=None, neck_od=None, flank_angle=None, pitch=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_bottle_cap\", {\"wall\" : wall, \"texture\" : texture, \"height\" : height, \"thread_od\" : thread_od, \"tolerance\" : tolerance, \"neck_od\" : neck_od, \"flank_angle\" : flank_angle, \"pitch\" : pitch, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bottle_adapter_neck_to_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, cap_wall=None, cap_h=None, cap_thread_depth1=None, tolerance=None, cap_neck_od=None, cap_neck_id=None, cap_thread_taper=None, cap_thread_pitch=None, neck_d=None, neck_id=None, neck_thread_od=None, neck_h=None, neck_thread_pitch=None, neck_support_od=None, d=None, taper_lead_in=None, **kwargs):\n       super().__init__(\"bottle_adapter_neck_to_cap\", {\"wall\" : wall, \"texture\" : texture, \"cap_wall\" : cap_wall, \"cap_h\" : cap_h, \"cap_thread_depth1\" : cap_thread_depth1, \"tolerance\" : tolerance, \"cap_neck_od\" : cap_neck_od, \"cap_neck_id\" : cap_neck_id, \"cap_thread_taper\" : cap_thread_taper, \"cap_thread_pitch\" : cap_thread_pitch, \"neck_d\" : neck_d, \"neck_id\" : neck_id, \"neck_thread_od\" : neck_thread_od, \"neck_h\" : neck_h, \"neck_thread_pitch\" : neck_thread_pitch, \"neck_support_od\" : neck_support_od, \"d\" : d, \"taper_lead_in\" : taper_lead_in, **kwargs})\n\nclass bottle_adapter_cap_to_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, cap_h1=None, cap_thread_od1=None, tolerance=None, cap_neck_od1=None, cap_thread_pitch1=None, cap_h2=None, cap_thread_od2=None, cap_neck_od2=None, cap_thread_pitch2=None, d=None, neck_id1=None, neck_id2=None, taper_lead_in=None, **kwargs):\n       super().__init__(\"bottle_adapter_cap_to_cap\", {\"wall\" : wall, \"texture\" : texture, \"cap_h1\" : cap_h1, \"cap_thread_od1\" : cap_thread_od1, \"tolerance\" : tolerance, \"cap_neck_od1\" : cap_neck_od1, \"cap_thread_pitch1\" : cap_thread_pitch1, \"cap_h2\" : cap_h2, \"cap_thread_od2\" : cap_thread_od2, \"cap_neck_od2\" : cap_neck_od2, \"cap_thread_pitch2\" : cap_thread_pitch2, \"d\" : d, \"neck_id1\" : neck_id1, \"neck_id2\" : neck_id2, \"taper_lead_in\" : taper_lead_in, **kwargs})\n\nclass bottle_adapter_neck_to_neck(_Bosl2Base):\n    def __init__(self, d=None, neck_od1=None, neck_id1=None, thread_od1=None, height1=None, support_od1=None, thread_pitch1=None, neck_od2=None, neck_id2=None, thread_od2=None, height2=None, support_od2=None, pitch2=None, taper_lead_in=None, wall=None, **kwargs):\n       super().__init__(\"bottle_adapter_neck_to_neck\", {\"d\" : d, \"neck_od1\" : neck_od1, \"neck_id1\" : neck_id1, \"thread_od1\" : thread_od1, \"height1\" : height1, \"support_od1\" : support_od1, \"thread_pitch1\" : thread_pitch1, \"neck_od2\" : neck_od2, \"neck_id2\" : neck_id2, \"thread_od2\" : thread_od2, \"height2\" : height2, \"support_od2\" : support_od2, \"pitch2\" : pitch2, \"taper_lead_in\" : taper_lead_in, \"wall\" : wall, **kwargs})\n\nclass _sp_thread_profile(_Bosl2Base):\n    def __init__(self, tpi=None, a=None, S=None, style=None, flip=None, **kwargs):\n       super().__init__(\"_sp_thread_profile\", {\"tpi\" : tpi, \"a\" : a, \"S\" : S, \"style\" : style, \"flip\" : flip, **kwargs})\n\nclass sp_neck(_Bosl2Base):\n    def __init__(self, diam=None, type=None, wall=None, id=None, style=None, bead=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sp_neck\", {\"diam\" : diam, \"type\" : type, \"wall\" : wall, \"id\" : id, \"style\" : style, \"bead\" : bead, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass sp_diameter(_Bosl2Base):\n    def __init__(self, diam=None, type=None, **kwargs):\n       super().__init__(\"sp_diameter\", {\"diam\" : diam, \"type\" : type, **kwargs})\n\nclass pco1810_neck(_Bosl2Base):\n    def __init__(self, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1810_neck\", {\"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass pco1810_cap(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, wall=None, texture=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1810_cap\", {\"h\" : h, \"r\" : r, \"d\" : d, \"wall\" : wall, \"texture\" : texture, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass pco1881_neck(_Bosl2Base):\n    def __init__(self, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1881_neck\", {\"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass pco1881_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pco1881_cap\", {\"wall\" : wall, \"texture\" : texture, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_bottle_neck(_Bosl2Base):\n    def __init__(self, wall=None, neck_d=None, id=None, thread_od=None, height=None, support_d=None, pitch=None, round_supp=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_bottle_neck\", {\"wall\" : wall, \"neck_d\" : neck_d, \"id\" : id, \"thread_od\" : thread_od, \"height\" : height, \"support_d\" : support_d, \"pitch\" : pitch, \"round_supp\" : round_supp, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_bottle_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, height=None, thread_depth=None, thread_od=None, tolerance=None, neck_od=None, flank_angle=None, pitch=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_bottle_cap\", {\"wall\" : wall, \"texture\" : texture, \"height\" : height, \"thread_depth\" : thread_depth, \"thread_od\" : thread_od, \"tolerance\" : tolerance, \"neck_od\" : neck_od, \"flank_angle\" : flank_angle, \"pitch\" : pitch, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bottle_adapter_neck_to_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, cap_wall=None, cap_h=None, cap_thread_depth=None, tolerance=None, cap_neck_od=None, cap_neck_id=None, cap_thread_taper=None, cap_thread_pitch=None, neck_d=None, neck_id=None, neck_thread_od=None, neck_h=None, neck_thread_pitch=None, neck_support_od=None, d=None, taper_lead_in=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"bottle_adapter_neck_to_cap\", {\"wall\" : wall, \"texture\" : texture, \"cap_wall\" : cap_wall, \"cap_h\" : cap_h, \"cap_thread_depth\" : cap_thread_depth, \"tolerance\" : tolerance, \"cap_neck_od\" : cap_neck_od, \"cap_neck_id\" : cap_neck_id, \"cap_thread_taper\" : cap_thread_taper, \"cap_thread_pitch\" : cap_thread_pitch, \"neck_d\" : neck_d, \"neck_id\" : neck_id, \"neck_thread_od\" : neck_thread_od, \"neck_h\" : neck_h, \"neck_thread_pitch\" : neck_thread_pitch, \"neck_support_od\" : neck_support_od, \"d\" : d, \"taper_lead_in\" : taper_lead_in, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bottle_adapter_cap_to_cap(_Bosl2Base):\n    def __init__(self, wall=None, texture=None, cap_h1=None, cap_thread_depth1=None, tolerance=None, cap_neck_od1=None, cap_thread_pitch1=None, cap_h2=None, cap_thread_depth2=None, cap_neck_od2=None, cap_thread_pitch2=None, d=None, neck_id=None, taper_lead_in=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"bottle_adapter_cap_to_cap\", {\"wall\" : wall, \"texture\" : texture, \"cap_h1\" : cap_h1, \"cap_thread_depth1\" : cap_thread_depth1, \"tolerance\" : tolerance, \"cap_neck_od1\" : cap_neck_od1, \"cap_thread_pitch1\" : cap_thread_pitch1, \"cap_h2\" : cap_h2, \"cap_thread_depth2\" : cap_thread_depth2, \"cap_neck_od2\" : cap_neck_od2, \"cap_thread_pitch2\" : cap_thread_pitch2, \"d\" : d, \"neck_id\" : neck_id, \"taper_lead_in\" : taper_lead_in, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bottle_adapter_neck_to_neck(_Bosl2Base):\n    def __init__(self, d=None, neck_od1=None, neck_id1=None, thread_od1=None, height1=None, support_od1=None, thread_pitch1=None, neck_od2=None, neck_id2=None, thread_od2=None, height2=None, support_od2=None, pitch2=None, taper_lead_in=None, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"bottle_adapter_neck_to_neck\", {\"d\" : d, \"neck_od1\" : neck_od1, \"neck_id1\" : neck_id1, \"thread_od1\" : thread_od1, \"height1\" : height1, \"support_od1\" : support_od1, \"thread_pitch1\" : thread_pitch1, \"neck_od2\" : neck_od2, \"neck_id2\" : neck_id2, \"thread_od2\" : thread_od2, \"height2\" : height2, \"support_od2\" : support_od2, \"pitch2\" : pitch2, \"taper_lead_in\" : taper_lead_in, \"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass sp_neck(_Bosl2Base):\n    def __init__(self, diam=None, type=None, wall=None, id=None, style=None, bead=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sp_neck\", {\"diam\" : diam, \"type\" : type, \"wall\" : wall, \"id\" : id, \"style\" : style, \"bead\" : bead, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass sp_cap(_Bosl2Base):\n    def __init__(self, diam=None, type=None, wall=None, style=None, top_adj=None, bot_adj=None, texture=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sp_cap\", {\"diam\" : diam, \"type\" : type, \"wall\" : wall, \"style\" : style, \"top_adj\" : top_adj, \"bot_adj\" : bot_adj, \"texture\" : texture, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/color.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/color.scad'}\", False)\n\nclass highlight(_Bosl2Base):\n    def __init__(self, highlight=None, **kwargs):\n       super().__init__(\"highlight\", {\"highlight\" : highlight, **kwargs})\n\nclass highlight_this(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"highlight_this\", {**kwargs})\n\nclass ghost(_Bosl2Base):\n    def __init__(self, ghost=None, **kwargs):\n       super().__init__(\"ghost\", {\"ghost\" : ghost, **kwargs})\n\nclass ghost_this(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"ghost_this\", {**kwargs})\n\nclass hsl(_Bosl2Base):\n    def __init__(self, h=None, s=None, l=None, a=None, **kwargs):\n       super().__init__(\"hsl\", {\"h\" : h, \"s\" : s, \"l\" : l, \"a\" : a, **kwargs})\n\nclass hsv(_Bosl2Base):\n    def __init__(self, h=None, s=None, v=None, a=None, **kwargs):\n       super().__init__(\"hsv\", {\"h\" : h, \"s\" : s, \"v\" : v, \"a\" : a, **kwargs})\n\nclass recolor(_Bosl2Base):\n    def __init__(self, c=None, **kwargs):\n       super().__init__(\"recolor\", {\"c\" : c, **kwargs})\n\nclass color_this(_Bosl2Base):\n    def __init__(self, c=None, **kwargs):\n       super().__init__(\"color_this\", {\"c\" : c, **kwargs})\n\nclass rainbow(_Bosl2Base):\n    def __init__(self, list=None, stride=None, maxhues=None, shuffle=None, seed=None, **kwargs):\n       super().__init__(\"rainbow\", {\"list\" : list, \"stride\" : stride, \"maxhues\" : maxhues, \"shuffle\" : shuffle, \"seed\" : seed, **kwargs})\n\nclass color_overlaps(_Bosl2Base):\n    def __init__(self, color=None, **kwargs):\n       super().__init__(\"color_overlaps\", {\"color\" : color, **kwargs})\n\nclass highlight(_Bosl2Base):\n    def __init__(self, highlight=None, **kwargs):\n       super().__init__(\"highlight\", {\"highlight\" : highlight, **kwargs})\n\nclass highlight_this(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"highlight_this\", {**kwargs})\n\nclass ghost(_Bosl2Base):\n    def __init__(self, ghost=None, **kwargs):\n       super().__init__(\"ghost\", {\"ghost\" : ghost, **kwargs})\n\nclass ghost_this(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"ghost_this\", {**kwargs})\n\nclass hsl(_Bosl2Base):\n    def __init__(self, h=None, s=None, l=None, a=None, **kwargs):\n       super().__init__(\"hsl\", {\"h\" : h, \"s\" : s, \"l\" : l, \"a\" : a, **kwargs})\n\nclass hsv(_Bosl2Base):\n    def __init__(self, h=None, s=None, v=None, a=None, **kwargs):\n       super().__init__(\"hsv\", {\"h\" : h, \"s\" : s, \"v\" : v, \"a\" : a, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/comparisons.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/comparisons.scad'}\", False)\n\nclass approx(_Bosl2Base):\n    def __init__(self, a=None, b=None, eps=None, **kwargs):\n       super().__init__(\"approx\", {\"a\" : a, \"b\" : b, \"eps\" : eps, **kwargs})\n\nclass all_zero(_Bosl2Base):\n    def __init__(self, x=None, eps=None, **kwargs):\n       super().__init__(\"all_zero\", {\"x\" : x, \"eps\" : eps, **kwargs})\n\nclass all_nonzero(_Bosl2Base):\n    def __init__(self, x=None, eps=None, **kwargs):\n       super().__init__(\"all_nonzero\", {\"x\" : x, \"eps\" : eps, **kwargs})\n\nclass all_positive(_Bosl2Base):\n    def __init__(self, x=None, eps=None, **kwargs):\n       super().__init__(\"all_positive\", {\"x\" : x, \"eps\" : eps, **kwargs})\n\nclass all_negative(_Bosl2Base):\n    def __init__(self, x=None, eps=None, **kwargs):\n       super().__init__(\"all_negative\", {\"x\" : x, \"eps\" : eps, **kwargs})\n\nclass all_nonpositive(_Bosl2Base):\n    def __init__(self, x=None, eps=None, **kwargs):\n       super().__init__(\"all_nonpositive\", {\"x\" : x, \"eps\" : eps, **kwargs})\n\nclass all_nonnegative(_Bosl2Base):\n    def __init__(self, x=None, eps=None, **kwargs):\n       super().__init__(\"all_nonnegative\", {\"x\" : x, \"eps\" : eps, **kwargs})\n\nclass all_equal(_Bosl2Base):\n    def __init__(self, vec=None, eps=None, **kwargs):\n       super().__init__(\"all_equal\", {\"vec\" : vec, \"eps\" : eps, **kwargs})\n\nclass are_ends_equal(_Bosl2Base):\n    def __init__(self, list=None, eps=None, **kwargs):\n       super().__init__(\"are_ends_equal\", {\"list\" : list, \"eps\" : eps, **kwargs})\n\nclass is_increasing(_Bosl2Base):\n    def __init__(self, list=None, strict=None, **kwargs):\n       super().__init__(\"is_increasing\", {\"list\" : list, \"strict\" : strict, **kwargs})\n\nclass is_decreasing(_Bosl2Base):\n    def __init__(self, list=None, strict=None, **kwargs):\n       super().__init__(\"is_decreasing\", {\"list\" : list, \"strict\" : strict, **kwargs})\n\nclass _type_num(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_type_num\", {\"x\" : x, **kwargs})\n\nclass compare_vals(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"compare_vals\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass compare_lists(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"compare_lists\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass min_index(_Bosl2Base):\n    def __init__(self, vals=None, all=None, **kwargs):\n       super().__init__(\"min_index\", {\"vals\" : vals, \"all\" : all, **kwargs})\n\nclass max_index(_Bosl2Base):\n    def __init__(self, vals=None, all=None, **kwargs):\n       super().__init__(\"max_index\", {\"vals\" : vals, \"all\" : all, **kwargs})\n\nclass find_approx(_Bosl2Base):\n    def __init__(self, val=None, list=None, start=None, all=None, eps=None, **kwargs):\n       super().__init__(\"find_approx\", {\"val\" : val, \"list\" : list, \"start\" : start, \"all\" : all, \"eps\" : eps, **kwargs})\n\nclass __find_approx(_Bosl2Base):\n    def __init__(self, val=None, list=None, eps=None, i=None, **kwargs):\n       super().__init__(\"__find_approx\", {\"val\" : val, \"list\" : list, \"eps\" : eps, \"i\" : i, **kwargs})\n\nclass deduplicate(_Bosl2Base):\n    def __init__(self, list=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"deduplicate\", {\"list\" : list, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass deduplicate_indexed(_Bosl2Base):\n    def __init__(self, list=None, indices=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"deduplicate_indexed\", {\"list\" : list, \"indices\" : indices, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass list_wrap(_Bosl2Base):\n    def __init__(self, list=None, eps=None, **kwargs):\n       super().__init__(\"list_wrap\", {\"list\" : list, \"eps\" : eps, **kwargs})\n\nclass cleanup_path(_Bosl2Base):\n    def __init__(self, list=None, eps=None, **kwargs):\n       super().__init__(\"cleanup_path\", {\"list\" : list, \"eps\" : eps, **kwargs})\n\nclass close_path(_Bosl2Base):\n    def __init__(self, list=None, eps=None, **kwargs):\n       super().__init__(\"close_path\", {\"list\" : list, \"eps\" : eps, **kwargs})\n\nclass list_unwrap(_Bosl2Base):\n    def __init__(self, list=None, eps=None, **kwargs):\n       super().__init__(\"list_unwrap\", {\"list\" : list, \"eps\" : eps, **kwargs})\n\nclass unique(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"unique\", {\"list\" : list, **kwargs})\n\nclass _unique_sort(_Bosl2Base):\n    def __init__(self, l=None, **kwargs):\n       super().__init__(\"_unique_sort\", {\"l\" : l, **kwargs})\n\nclass unique_count(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"unique_count\", {\"list\" : list, **kwargs})\n\nclass unique_approx(_Bosl2Base):\n    def __init__(self, data=None, eps=None, **kwargs):\n       super().__init__(\"unique_approx\", {\"data\" : data, \"eps\" : eps, **kwargs})\n\nclass unique_approx_indexed(_Bosl2Base):\n    def __init__(self, data=None, eps=None, **kwargs):\n       super().__init__(\"unique_approx_indexed\", {\"data\" : data, \"eps\" : eps, **kwargs})\n\nclass _valid_idx(_Bosl2Base):\n    def __init__(self, idx=None, imin=None, imax=None, **kwargs):\n       super().__init__(\"_valid_idx\", {\"idx\" : idx, \"imin\" : imin, \"imax\" : imax, **kwargs})\n\nclass _group_sort_by_index(_Bosl2Base):\n    def __init__(self, l=None, idx=None, **kwargs):\n       super().__init__(\"_group_sort_by_index\", {\"l\" : l, \"idx\" : idx, **kwargs})\n\nclass _group_sort(_Bosl2Base):\n    def __init__(self, l=None, **kwargs):\n       super().__init__(\"_group_sort\", {\"l\" : l, **kwargs})\n\nclass _sort_scalars(_Bosl2Base):\n    def __init__(self, arr=None, **kwargs):\n       super().__init__(\"_sort_scalars\", {\"arr\" : arr, **kwargs})\n\nclass _sort_vectors(_Bosl2Base):\n    def __init__(self, arr=None, _i=None, **kwargs):\n       super().__init__(\"_sort_vectors\", {\"arr\" : arr, \"_i\" : _i, **kwargs})\n\nclass _sort_vectors(_Bosl2Base):\n    def __init__(self, arr=None, idxlist=None, _i=None, **kwargs):\n       super().__init__(\"_sort_vectors\", {\"arr\" : arr, \"idxlist\" : idxlist, \"_i\" : _i, **kwargs})\n\nclass _sort_general(_Bosl2Base):\n    def __init__(self, arr=None, idx=None, indexed=None, **kwargs):\n       super().__init__(\"_sort_general\", {\"arr\" : arr, \"idx\" : idx, \"indexed\" : indexed, **kwargs})\n\nclass _lexical_sort(_Bosl2Base):\n    def __init__(self, arr=None, **kwargs):\n       super().__init__(\"_lexical_sort\", {\"arr\" : arr, **kwargs})\n\nclass _indexed_sort(_Bosl2Base):\n    def __init__(self, arrind=None, **kwargs):\n       super().__init__(\"_indexed_sort\", {\"arrind\" : arrind, **kwargs})\n\nclass sort(_Bosl2Base):\n    def __init__(self, list=None, idx=None, **kwargs):\n       super().__init__(\"sort\", {\"list\" : list, \"idx\" : idx, **kwargs})\n\nclass sortidx(_Bosl2Base):\n    def __init__(self, list=None, idx=None, **kwargs):\n       super().__init__(\"sortidx\", {\"list\" : list, \"idx\" : idx, **kwargs})\n\nclass group_sort(_Bosl2Base):\n    def __init__(self, list=None, idx=None, **kwargs):\n       super().__init__(\"group_sort\", {\"list\" : list, \"idx\" : idx, **kwargs})\n\nclass group_data(_Bosl2Base):\n    def __init__(self, groups=None, values=None, **kwargs):\n       super().__init__(\"group_data\", {\"groups\" : groups, \"values\" : values, **kwargs})\n\nclass list_smallest(_Bosl2Base):\n    def __init__(self, list=None, k=None, **kwargs):\n       super().__init__(\"list_smallest\", {\"list\" : list, \"k\" : k, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/constants.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/constants.scad'}\", False)\n\n_UNDEF = _OpenSCADConstant('_UNDEF')\nINCH = _OpenSCADConstant('INCH')\nIDENT = _OpenSCADConstant('IDENT')\nLEFT = _OpenSCADConstant('LEFT')\nRIGHT = _OpenSCADConstant('RIGHT')\nFRONT = _OpenSCADConstant('FRONT')\nFWD = _OpenSCADConstant('FWD')\nFORWARD = _OpenSCADConstant('FORWARD')\nBACK = _OpenSCADConstant('BACK')\nBOTTOM = _OpenSCADConstant('BOTTOM')\nBOT = _OpenSCADConstant('BOT')\nDOWN = _OpenSCADConstant('DOWN')\nTOP = _OpenSCADConstant('TOP')\nUP = _OpenSCADConstant('UP')\nCENTER = _OpenSCADConstant('CENTER')\nCTR = _OpenSCADConstant('CTR')\nCENTRE = _OpenSCADConstant('CENTRE')\nSEGMENT = _OpenSCADConstant('SEGMENT')\nRAY = _OpenSCADConstant('RAY')\nLINE = _OpenSCADConstant('LINE')\nclass get_slop(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"get_slop\", {**kwargs})\n\nclass EDGE(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"EDGE\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass FACE(_Bosl2Base):\n    def __init__(self, i=None, **kwargs):\n       super().__init__(\"FACE\", {\"i\" : i, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/coords.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/coords.scad'}\", False)\n\nclass point2d(_Bosl2Base):\n    def __init__(self, p=None, fill=None, **kwargs):\n       super().__init__(\"point2d\", {\"p\" : p, \"fill\" : fill, **kwargs})\n\nclass path2d(_Bosl2Base):\n    def __init__(self, points=None, **kwargs):\n       super().__init__(\"path2d\", {\"points\" : points, **kwargs})\n\nclass point3d(_Bosl2Base):\n    def __init__(self, p=None, fill=None, **kwargs):\n       super().__init__(\"point3d\", {\"p\" : p, \"fill\" : fill, **kwargs})\n\nclass path3d(_Bosl2Base):\n    def __init__(self, points=None, fill=None, **kwargs):\n       super().__init__(\"path3d\", {\"points\" : points, \"fill\" : fill, **kwargs})\n\nclass point4d(_Bosl2Base):\n    def __init__(self, p=None, fill=None, **kwargs):\n       super().__init__(\"point4d\", {\"p\" : p, \"fill\" : fill, **kwargs})\n\nclass path4d(_Bosl2Base):\n    def __init__(self, points=None, fill=None, **kwargs):\n       super().__init__(\"path4d\", {\"points\" : points, \"fill\" : fill, **kwargs})\n\nclass polar_to_xy(_Bosl2Base):\n    def __init__(self, r=None, theta=None, **kwargs):\n       super().__init__(\"polar_to_xy\", {\"r\" : r, \"theta\" : theta, **kwargs})\n\nclass xy_to_polar(_Bosl2Base):\n    def __init__(self, x=None, y=None, **kwargs):\n       super().__init__(\"xy_to_polar\", {\"x\" : x, \"y\" : y, **kwargs})\n\nclass project_plane(_Bosl2Base):\n    def __init__(self, plane=None, p=None, **kwargs):\n       super().__init__(\"project_plane\", {\"plane\" : plane, \"p\" : p, **kwargs})\n\nclass lift_plane(_Bosl2Base):\n    def __init__(self, plane=None, p=None, **kwargs):\n       super().__init__(\"lift_plane\", {\"plane\" : plane, \"p\" : p, **kwargs})\n\nclass cylindrical_to_xyz(_Bosl2Base):\n    def __init__(self, r=None, theta=None, z=None, **kwargs):\n       super().__init__(\"cylindrical_to_xyz\", {\"r\" : r, \"theta\" : theta, \"z\" : z, **kwargs})\n\nclass xyz_to_cylindrical(_Bosl2Base):\n    def __init__(self, x=None, y=None, z=None, **kwargs):\n       super().__init__(\"xyz_to_cylindrical\", {\"x\" : x, \"y\" : y, \"z\" : z, **kwargs})\n\nclass spherical_to_xyz(_Bosl2Base):\n    def __init__(self, r=None, theta=None, phi=None, **kwargs):\n       super().__init__(\"spherical_to_xyz\", {\"r\" : r, \"theta\" : theta, \"phi\" : phi, **kwargs})\n\nclass xyz_to_spherical(_Bosl2Base):\n    def __init__(self, x=None, y=None, z=None, **kwargs):\n       super().__init__(\"xyz_to_spherical\", {\"x\" : x, \"y\" : y, \"z\" : z, **kwargs})\n\nclass altaz_to_xyz(_Bosl2Base):\n    def __init__(self, alt=None, az=None, r=None, **kwargs):\n       super().__init__(\"altaz_to_xyz\", {\"alt\" : alt, \"az\" : az, \"r\" : r, **kwargs})\n\nclass xyz_to_altaz(_Bosl2Base):\n    def __init__(self, x=None, y=None, z=None, **kwargs):\n       super().__init__(\"xyz_to_altaz\", {\"x\" : x, \"y\" : y, \"z\" : z, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/cubetruss.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/cubetruss.scad'}\", False)\n\n_cubetruss_size = _OpenSCADConstant('_cubetruss_size')\n_cubetruss_strut_size = _OpenSCADConstant('_cubetruss_strut_size')\n_cubetruss_bracing = _OpenSCADConstant('_cubetruss_bracing')\n_cubetruss_clip_thickness = _OpenSCADConstant('_cubetruss_clip_thickness')\nclass cubetruss_dist(_Bosl2Base):\n    def __init__(self, cubes=None, gaps=None, size=None, strut=None, **kwargs):\n       super().__init__(\"cubetruss_dist\", {\"cubes\" : cubes, \"gaps\" : gaps, \"size\" : size, \"strut\" : strut, **kwargs})\n\nclass cubetruss(_Bosl2Base):\n    def __init__(self, extents=None, clips=None, bracing=None, size=None, strut=None, clipthick=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss\", {\"extents\" : extents, \"clips\" : clips, \"bracing\" : bracing, \"size\" : size, \"strut\" : strut, \"clipthick\" : clipthick, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_corner(_Bosl2Base):\n    def __init__(self, h=None, extents=None, bracing=None, size=None, strut=None, clipthick=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_corner\", {\"h\" : h, \"extents\" : extents, \"bracing\" : bracing, \"size\" : size, \"strut\" : strut, \"clipthick\" : clipthick, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_support(_Bosl2Base):\n    def __init__(self, size=None, strut=None, extents=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_support\", {\"size\" : size, \"strut\" : strut, \"extents\" : extents, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_foot(_Bosl2Base):\n    def __init__(self, w=None, size=None, strut=None, clipthick=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_foot\", {\"w\" : w, \"size\" : size, \"strut\" : strut, \"clipthick\" : clipthick, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_joiner(_Bosl2Base):\n    def __init__(self, w=None, vert=None, size=None, strut=None, clipthick=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_joiner\", {\"w\" : w, \"vert\" : vert, \"size\" : size, \"strut\" : strut, \"clipthick\" : clipthick, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_uclip(_Bosl2Base):\n    def __init__(self, dual=None, size=None, strut=None, clipthick=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_uclip\", {\"dual\" : dual, \"size\" : size, \"strut\" : strut, \"clipthick\" : clipthick, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_segment(_Bosl2Base):\n    def __init__(self, size=None, strut=None, bracing=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_segment\", {\"size\" : size, \"strut\" : strut, \"bracing\" : bracing, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cubetruss_clip(_Bosl2Base):\n    def __init__(self, extents=None, size=None, strut=None, clipthick=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cubetruss_clip\", {\"extents\" : extents, \"size\" : size, \"strut\" : strut, \"clipthick\" : clipthick, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/distributors.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/distributors.scad'}\", False)\n\nclass move_copies(_Bosl2Base):\n    def __init__(self, a=None, p=None, **kwargs):\n       super().__init__(\"move_copies\", {\"a\" : a, \"p\" : p, **kwargs})\n\nclass xcopies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, sp=None, p=None, **kwargs):\n       super().__init__(\"xcopies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"sp\" : sp, \"p\" : p, **kwargs})\n\nclass ycopies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, sp=None, p=None, **kwargs):\n       super().__init__(\"ycopies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"sp\" : sp, \"p\" : p, **kwargs})\n\nclass zcopies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, sp=None, p=None, **kwargs):\n       super().__init__(\"zcopies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"sp\" : sp, \"p\" : p, **kwargs})\n\nclass line_copies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, p1=None, p2=None, p=None, **kwargs):\n       super().__init__(\"line_copies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"p1\" : p1, \"p2\" : p2, \"p\" : p, **kwargs})\n\nclass grid_copies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, size=None, stagger=None, inside=None, nonzero=None, axes=None, p=None, **kwargs):\n       super().__init__(\"grid_copies\", {\"spacing\" : spacing, \"n\" : n, \"size\" : size, \"stagger\" : stagger, \"inside\" : inside, \"nonzero\" : nonzero, \"axes\" : axes, \"p\" : p, **kwargs})\n\nclass rot_copies(_Bosl2Base):\n    def __init__(self, rots=None, v=None, cp=None, n=None, sa=None, offset=None, delta=None, subrot=None, p=None, **kwargs):\n       super().__init__(\"rot_copies\", {\"rots\" : rots, \"v\" : v, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"offset\" : offset, \"delta\" : delta, \"subrot\" : subrot, \"p\" : p, **kwargs})\n\nclass xrot_copies(_Bosl2Base):\n    def __init__(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, p=None, **kwargs):\n       super().__init__(\"xrot_copies\", {\"rots\" : rots, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"r\" : r, \"d\" : d, \"subrot\" : subrot, \"p\" : p, **kwargs})\n\nclass yrot_copies(_Bosl2Base):\n    def __init__(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, p=None, **kwargs):\n       super().__init__(\"yrot_copies\", {\"rots\" : rots, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"r\" : r, \"d\" : d, \"subrot\" : subrot, \"p\" : p, **kwargs})\n\nclass zrot_copies(_Bosl2Base):\n    def __init__(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, p=None, **kwargs):\n       super().__init__(\"zrot_copies\", {\"rots\" : rots, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"r\" : r, \"d\" : d, \"subrot\" : subrot, \"p\" : p, **kwargs})\n\nclass arc_copies(_Bosl2Base):\n    def __init__(self, n=None, r=None, rx=None, ry=None, d=None, dx=None, dy=None, sa=None, ea=None, rot=None, p=None, **kwargs):\n       super().__init__(\"arc_copies\", {\"n\" : n, \"r\" : r, \"rx\" : rx, \"ry\" : ry, \"d\" : d, \"dx\" : dx, \"dy\" : dy, \"sa\" : sa, \"ea\" : ea, \"rot\" : rot, \"p\" : p, **kwargs})\n\nclass sphere_copies(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, cone_ang=None, scale=None, perp=None, p=None, **kwargs):\n       super().__init__(\"sphere_copies\", {\"n\" : n, \"r\" : r, \"d\" : d, \"cone_ang\" : cone_ang, \"scale\" : scale, \"perp\" : perp, \"p\" : p, **kwargs})\n\nclass path_copies(_Bosl2Base):\n    def __init__(self, path=None, n=None, spacing=None, sp=None, dist=None, rotate_children=None, closed=None, p=None, **kwargs):\n       super().__init__(\"path_copies\", {\"path\" : path, \"n\" : n, \"spacing\" : spacing, \"sp\" : sp, \"dist\" : dist, \"rotate_children\" : rotate_children, \"closed\" : closed, \"p\" : p, **kwargs})\n\nclass xflip_copy(_Bosl2Base):\n    def __init__(self, offset=None, x=None, p=None, **kwargs):\n       super().__init__(\"xflip_copy\", {\"offset\" : offset, \"x\" : x, \"p\" : p, **kwargs})\n\nclass yflip_copy(_Bosl2Base):\n    def __init__(self, offset=None, y=None, p=None, **kwargs):\n       super().__init__(\"yflip_copy\", {\"offset\" : offset, \"y\" : y, \"p\" : p, **kwargs})\n\nclass zflip_copy(_Bosl2Base):\n    def __init__(self, offset=None, z=None, p=None, **kwargs):\n       super().__init__(\"zflip_copy\", {\"offset\" : offset, \"z\" : z, \"p\" : p, **kwargs})\n\nclass mirror_copy(_Bosl2Base):\n    def __init__(self, v=None, offset=None, cp=None, p=None, **kwargs):\n       super().__init__(\"mirror_copy\", {\"v\" : v, \"offset\" : offset, \"cp\" : cp, \"p\" : p, **kwargs})\n\nclass move_copies(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"move_copies\", {\"a\" : a, **kwargs})\n\nclass xcopies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, sp=None, **kwargs):\n       super().__init__(\"xcopies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"sp\" : sp, **kwargs})\n\nclass ycopies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, sp=None, **kwargs):\n       super().__init__(\"ycopies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"sp\" : sp, **kwargs})\n\nclass zcopies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, sp=None, **kwargs):\n       super().__init__(\"zcopies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"sp\" : sp, **kwargs})\n\nclass line_of(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, p1=None, p2=None, **kwargs):\n       super().__init__(\"line_of\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"p1\" : p1, \"p2\" : p2, **kwargs})\n\nclass line_copies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, l=None, p1=None, p2=None, **kwargs):\n       super().__init__(\"line_copies\", {\"spacing\" : spacing, \"n\" : n, \"l\" : l, \"p1\" : p1, \"p2\" : p2, **kwargs})\n\nclass grid2d(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, size=None, stagger=None, inside=None, nonzero=None, **kwargs):\n       super().__init__(\"grid2d\", {\"spacing\" : spacing, \"n\" : n, \"size\" : size, \"stagger\" : stagger, \"inside\" : inside, \"nonzero\" : nonzero, **kwargs})\n\nclass grid_copies(_Bosl2Base):\n    def __init__(self, spacing=None, n=None, size=None, stagger=None, inside=None, nonzero=None, axes=None, **kwargs):\n       super().__init__(\"grid_copies\", {\"spacing\" : spacing, \"n\" : n, \"size\" : size, \"stagger\" : stagger, \"inside\" : inside, \"nonzero\" : nonzero, \"axes\" : axes, **kwargs})\n\nclass rot_copies(_Bosl2Base):\n    def __init__(self, rots=None, v=None, cp=None, n=None, sa=None, offset=None, delta=None, subrot=None, **kwargs):\n       super().__init__(\"rot_copies\", {\"rots\" : rots, \"v\" : v, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"offset\" : offset, \"delta\" : delta, \"subrot\" : subrot, **kwargs})\n\nclass xrot_copies(_Bosl2Base):\n    def __init__(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, **kwargs):\n       super().__init__(\"xrot_copies\", {\"rots\" : rots, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"r\" : r, \"d\" : d, \"subrot\" : subrot, **kwargs})\n\nclass yrot_copies(_Bosl2Base):\n    def __init__(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, **kwargs):\n       super().__init__(\"yrot_copies\", {\"rots\" : rots, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"r\" : r, \"d\" : d, \"subrot\" : subrot, **kwargs})\n\nclass zrot_copies(_Bosl2Base):\n    def __init__(self, rots=None, cp=None, n=None, sa=None, r=None, d=None, subrot=None, **kwargs):\n       super().__init__(\"zrot_copies\", {\"rots\" : rots, \"cp\" : cp, \"n\" : n, \"sa\" : sa, \"r\" : r, \"d\" : d, \"subrot\" : subrot, **kwargs})\n\nclass arc_of(_Bosl2Base):\n    def __init__(self, n=None, r=None, rx=None, ry=None, d=None, dx=None, dy=None, sa=None, ea=None, rot=None, **kwargs):\n       super().__init__(\"arc_of\", {\"n\" : n, \"r\" : r, \"rx\" : rx, \"ry\" : ry, \"d\" : d, \"dx\" : dx, \"dy\" : dy, \"sa\" : sa, \"ea\" : ea, \"rot\" : rot, **kwargs})\n\nclass arc_copies(_Bosl2Base):\n    def __init__(self, n=None, r=None, rx=None, ry=None, d=None, dx=None, dy=None, sa=None, ea=None, rot=None, **kwargs):\n       super().__init__(\"arc_copies\", {\"n\" : n, \"r\" : r, \"rx\" : rx, \"ry\" : ry, \"d\" : d, \"dx\" : dx, \"dy\" : dy, \"sa\" : sa, \"ea\" : ea, \"rot\" : rot, **kwargs})\n\nclass ovoid_spread(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, cone_ang=None, scale=None, perp=None, **kwargs):\n       super().__init__(\"ovoid_spread\", {\"n\" : n, \"r\" : r, \"d\" : d, \"cone_ang\" : cone_ang, \"scale\" : scale, \"perp\" : perp, **kwargs})\n\nclass sphere_copies(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, cone_ang=None, scale=None, perp=None, **kwargs):\n       super().__init__(\"sphere_copies\", {\"n\" : n, \"r\" : r, \"d\" : d, \"cone_ang\" : cone_ang, \"scale\" : scale, \"perp\" : perp, **kwargs})\n\nclass path_spread(_Bosl2Base):\n    def __init__(self, path=None, n=None, spacing=None, sp=None, rotate_children=None, dist=None, closed=None, **kwargs):\n       super().__init__(\"path_spread\", {\"path\" : path, \"n\" : n, \"spacing\" : spacing, \"sp\" : sp, \"rotate_children\" : rotate_children, \"dist\" : dist, \"closed\" : closed, **kwargs})\n\nclass path_copies(_Bosl2Base):\n    def __init__(self, path=None, n=None, spacing=None, sp=None, dist=None, rotate_children=None, closed=None, **kwargs):\n       super().__init__(\"path_copies\", {\"path\" : path, \"n\" : n, \"spacing\" : spacing, \"sp\" : sp, \"dist\" : dist, \"rotate_children\" : rotate_children, \"closed\" : closed, **kwargs})\n\nclass xflip_copy(_Bosl2Base):\n    def __init__(self, offset=None, x=None, **kwargs):\n       super().__init__(\"xflip_copy\", {\"offset\" : offset, \"x\" : x, **kwargs})\n\nclass yflip_copy(_Bosl2Base):\n    def __init__(self, offset=None, y=None, **kwargs):\n       super().__init__(\"yflip_copy\", {\"offset\" : offset, \"y\" : y, **kwargs})\n\nclass zflip_copy(_Bosl2Base):\n    def __init__(self, offset=None, z=None, **kwargs):\n       super().__init__(\"zflip_copy\", {\"offset\" : offset, \"z\" : z, **kwargs})\n\nclass mirror_copy(_Bosl2Base):\n    def __init__(self, v=None, offset=None, cp=None, **kwargs):\n       super().__init__(\"mirror_copy\", {\"v\" : v, \"offset\" : offset, \"cp\" : cp, **kwargs})\n\nclass xdistribute(_Bosl2Base):\n    def __init__(self, spacing=None, sizes=None, l=None, **kwargs):\n       super().__init__(\"xdistribute\", {\"spacing\" : spacing, \"sizes\" : sizes, \"l\" : l, **kwargs})\n\nclass ydistribute(_Bosl2Base):\n    def __init__(self, spacing=None, sizes=None, l=None, **kwargs):\n       super().__init__(\"ydistribute\", {\"spacing\" : spacing, \"sizes\" : sizes, \"l\" : l, **kwargs})\n\nclass zdistribute(_Bosl2Base):\n    def __init__(self, spacing=None, sizes=None, l=None, **kwargs):\n       super().__init__(\"zdistribute\", {\"spacing\" : spacing, \"sizes\" : sizes, \"l\" : l, **kwargs})\n\nclass distribute(_Bosl2Base):\n    def __init__(self, spacing=None, sizes=None, dir=None, l=None, **kwargs):\n       super().__init__(\"distribute\", {\"spacing\" : spacing, \"sizes\" : sizes, \"dir\" : dir, \"l\" : l, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/drawing.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/drawing.scad'}\", False)\n\nclass stroke(_Bosl2Base):\n    def __init__(self, path=None, width=None, closed=None, endcaps=None, endcap1=None, endcap2=None, joints=None, dots=None, endcap_width=None, endcap_width1=None, endcap_width2=None, joint_width=None, dots_width=None, endcap_length=None, endcap_length1=None, endcap_length2=None, joint_length=None, dots_length=None, endcap_extent=None, endcap_extent1=None, endcap_extent2=None, joint_extent=None, dots_extent=None, endcap_angle=None, endcap_angle1=None, endcap_angle2=None, joint_angle=None, dots_angle=None, endcap_color=None, endcap_color1=None, endcap_color2=None, joint_color=None, dots_color=None, color=None, trim=None, trim1=None, trim2=None, singleton_scale=None, convexity=None, **kwargs):\n       super().__init__(\"stroke\", {\"path\" : path, \"width\" : width, \"closed\" : closed, \"endcaps\" : endcaps, \"endcap1\" : endcap1, \"endcap2\" : endcap2, \"joints\" : joints, \"dots\" : dots, \"endcap_width\" : endcap_width, \"endcap_width1\" : endcap_width1, \"endcap_width2\" : endcap_width2, \"joint_width\" : joint_width, \"dots_width\" : dots_width, \"endcap_length\" : endcap_length, \"endcap_length1\" : endcap_length1, \"endcap_length2\" : endcap_length2, \"joint_length\" : joint_length, \"dots_length\" : dots_length, \"endcap_extent\" : endcap_extent, \"endcap_extent1\" : endcap_extent1, \"endcap_extent2\" : endcap_extent2, \"joint_extent\" : joint_extent, \"dots_extent\" : dots_extent, \"endcap_angle\" : endcap_angle, \"endcap_angle1\" : endcap_angle1, \"endcap_angle2\" : endcap_angle2, \"joint_angle\" : joint_angle, \"dots_angle\" : dots_angle, \"endcap_color\" : endcap_color, \"endcap_color1\" : endcap_color1, \"endcap_color2\" : endcap_color2, \"joint_color\" : joint_color, \"dots_color\" : dots_color, \"color\" : color, \"trim\" : trim, \"trim1\" : trim1, \"trim2\" : trim2, \"singleton_scale\" : singleton_scale, \"convexity\" : convexity, **kwargs})\n\nclass dashed_stroke(_Bosl2Base):\n    def __init__(self, path=None, dashpat=None, closed=None, fit=None, mindash=None, **kwargs):\n       super().__init__(\"dashed_stroke\", {\"path\" : path, \"dashpat\" : dashpat, \"closed\" : closed, \"fit\" : fit, \"mindash\" : mindash, **kwargs})\n\nclass arc(_Bosl2Base):\n    def __init__(self, n=None, r=None, angle=None, d=None, cp=None, points=None, corner=None, width=None, thickness=None, start=None, wedge=None, long=None, cw=None, ccw=None, endpoint=None, rounding=None, **kwargs):\n       super().__init__(\"arc\", {\"n\" : n, \"r\" : r, \"angle\" : angle, \"d\" : d, \"cp\" : cp, \"points\" : points, \"corner\" : corner, \"width\" : width, \"thickness\" : thickness, \"start\" : start, \"wedge\" : wedge, \"long\" : long, \"cw\" : cw, \"ccw\" : ccw, \"endpoint\" : endpoint, \"rounding\" : rounding, **kwargs})\n\nclass _rounded_arc(_Bosl2Base):\n    def __init__(self, radius=None, rounding=None, angle=None, n=None, **kwargs):\n       super().__init__(\"_rounded_arc\", {\"radius\" : radius, \"rounding\" : rounding, \"angle\" : angle, \"n\" : n, **kwargs})\n\nclass catenary(_Bosl2Base):\n    def __init__(self, width=None, droop=None, n=None, angle=None, **kwargs):\n       super().__init__(\"catenary\", {\"width\" : width, \"droop\" : droop, \"n\" : n, \"angle\" : angle, **kwargs})\n\nclass helix(_Bosl2Base):\n    def __init__(self, l=None, h=None, turns=None, angle=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, **kwargs):\n       super().__init__(\"helix\", {\"l\" : l, \"h\" : h, \"turns\" : turns, \"angle\" : angle, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, **kwargs})\n\nclass _normal_segment(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, **kwargs):\n       super().__init__(\"_normal_segment\", {\"p1\" : p1, \"p2\" : p2, **kwargs})\n\nclass turtle(_Bosl2Base):\n    def __init__(self, commands=None, state=None, full_state=None, repeat=None, **kwargs):\n       super().__init__(\"turtle\", {\"commands\" : commands, \"state\" : state, \"full_state\" : full_state, \"repeat\" : repeat, **kwargs})\n\nclass _turtle_repeat(_Bosl2Base):\n    def __init__(self, commands=None, state=None, full_state=None, repeat=None, **kwargs):\n       super().__init__(\"_turtle_repeat\", {\"commands\" : commands, \"state\" : state, \"full_state\" : full_state, \"repeat\" : repeat, **kwargs})\n\nclass _turtle_command_len(_Bosl2Base):\n    def __init__(self, commands=None, index=None, **kwargs):\n       super().__init__(\"_turtle_command_len\", {\"commands\" : commands, \"index\" : index, **kwargs})\n\nclass _turtle(_Bosl2Base):\n    def __init__(self, commands=None, state=None, full_state=None, index=None, **kwargs):\n       super().__init__(\"_turtle\", {\"commands\" : commands, \"state\" : state, \"full_state\" : full_state, \"index\" : index, **kwargs})\n\nclass _turtle_command(_Bosl2Base):\n    def __init__(self, command=None, parm=None, parm2=None, state=None, index=None, **kwargs):\n       super().__init__(\"_turtle_command\", {\"command\" : command, \"parm\" : parm, \"parm2\" : parm2, \"state\" : state, \"index\" : index, **kwargs})\n\nclass stroke(_Bosl2Base):\n    def __init__(self, path=None, width=None, closed=None, endcaps=None, endcap1=None, endcap2=None, joints=None, dots=None, endcap_width=None, endcap_width1=None, endcap_width2=None, joint_width=None, dots_width=None, endcap_length=None, endcap_length1=None, endcap_length2=None, joint_length=None, dots_length=None, endcap_extent=None, endcap_extent1=None, endcap_extent2=None, joint_extent=None, dots_extent=None, endcap_angle=None, endcap_angle1=None, endcap_angle2=None, joint_angle=None, dots_angle=None, endcap_color=None, endcap_color1=None, endcap_color2=None, joint_color=None, dots_color=None, color=None, trim=None, trim1=None, trim2=None, singleton_scale=None, convexity=None, **kwargs):\n       super().__init__(\"stroke\", {\"path\" : path, \"width\" : width, \"closed\" : closed, \"endcaps\" : endcaps, \"endcap1\" : endcap1, \"endcap2\" : endcap2, \"joints\" : joints, \"dots\" : dots, \"endcap_width\" : endcap_width, \"endcap_width1\" : endcap_width1, \"endcap_width2\" : endcap_width2, \"joint_width\" : joint_width, \"dots_width\" : dots_width, \"endcap_length\" : endcap_length, \"endcap_length1\" : endcap_length1, \"endcap_length2\" : endcap_length2, \"joint_length\" : joint_length, \"dots_length\" : dots_length, \"endcap_extent\" : endcap_extent, \"endcap_extent1\" : endcap_extent1, \"endcap_extent2\" : endcap_extent2, \"joint_extent\" : joint_extent, \"dots_extent\" : dots_extent, \"endcap_angle\" : endcap_angle, \"endcap_angle1\" : endcap_angle1, \"endcap_angle2\" : endcap_angle2, \"joint_angle\" : joint_angle, \"dots_angle\" : dots_angle, \"endcap_color\" : endcap_color, \"endcap_color1\" : endcap_color1, \"endcap_color2\" : endcap_color2, \"joint_color\" : joint_color, \"dots_color\" : dots_color, \"color\" : color, \"trim\" : trim, \"trim1\" : trim1, \"trim2\" : trim2, \"singleton_scale\" : singleton_scale, \"convexity\" : convexity, **kwargs})\n\nclass dashed_stroke(_Bosl2Base):\n    def __init__(self, path=None, dashpat=None, width=None, closed=None, fit=None, roundcaps=None, **kwargs):\n       super().__init__(\"dashed_stroke\", {\"path\" : path, \"dashpat\" : dashpat, \"width\" : width, \"closed\" : closed, \"fit\" : fit, \"roundcaps\" : roundcaps, **kwargs})\n\nclass arc(_Bosl2Base):\n    def __init__(self, n=None, r=None, angle=None, d=None, cp=None, points=None, corner=None, width=None, thickness=None, start=None, wedge=None, rounding=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"arc\", {\"n\" : n, \"r\" : r, \"angle\" : angle, \"d\" : d, \"cp\" : cp, \"points\" : points, \"corner\" : corner, \"width\" : width, \"thickness\" : thickness, \"start\" : start, \"wedge\" : wedge, \"rounding\" : rounding, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass catenary(_Bosl2Base):\n    def __init__(self, width=None, droop=None, n=None, angle=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"catenary\", {\"width\" : width, \"droop\" : droop, \"n\" : n, \"angle\" : angle, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass helix(_Bosl2Base):\n    def __init__(self, l=None, h=None, turns=None, angle=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, **kwargs):\n       super().__init__(\"helix\", {\"l\" : l, \"h\" : h, \"turns\" : turns, \"angle\" : angle, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, **kwargs})\n\nclass turtle(_Bosl2Base):\n    def __init__(self, commands=None, state=None, full_state=None, repeat=None, **kwargs):\n       super().__init__(\"turtle\", {\"commands\" : commands, \"state\" : state, \"full_state\" : full_state, \"repeat\" : repeat, **kwargs})\n\nclass debug_polygon(_Bosl2Base):\n    def __init__(self, points=None, paths=None, vertices=None, edges=None, convexity=None, size=None, **kwargs):\n       super().__init__(\"debug_polygon\", {\"points\" : points, \"paths\" : paths, \"vertices\" : vertices, \"edges\" : edges, \"convexity\" : convexity, \"size\" : size, **kwargs})\n\nclass _debug_poly_verts(_Bosl2Base):\n    def __init__(self, points=None, size=None, **kwargs):\n       super().__init__(\"_debug_poly_verts\", {\"points\" : points, \"size\" : size, **kwargs})\n\nclass _debug_poly_edges(_Bosl2Base):\n    def __init__(self, j=None, points=None, path=None, vertices=None, size=None, **kwargs):\n       super().__init__(\"_debug_poly_edges\", {\"j\" : j, \"points\" : points, \"path\" : path, \"vertices\" : vertices, \"size\" : size, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/fnliterals.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/fnliterals.scad'}\", False)\n\nclass map(_Bosl2Base):\n    def __init__(self, func=None, list=None, **kwargs):\n       super().__init__(\"map\", {\"func\" : func, \"list\" : list, **kwargs})\n\nclass filter(_Bosl2Base):\n    def __init__(self, func=None, list=None, **kwargs):\n       super().__init__(\"filter\", {\"func\" : func, \"list\" : list, **kwargs})\n\nclass reduce(_Bosl2Base):\n    def __init__(self, func=None, list=None, init=None, **kwargs):\n       super().__init__(\"reduce\", {\"func\" : func, \"list\" : list, \"init\" : init, **kwargs})\n\nclass accumulate(_Bosl2Base):\n    def __init__(self, func=None, list=None, init=None, **kwargs):\n       super().__init__(\"accumulate\", {\"func\" : func, \"list\" : list, \"init\" : init, **kwargs})\n\nclass _while(_Bosl2Base):\n    def __init__(self, init=None, cond=None, func=None, **kwargs):\n       super().__init__(\"_while\", {\"init\" : init, \"cond\" : cond, \"func\" : func, **kwargs})\n\nclass for_n(_Bosl2Base):\n    def __init__(self, n=None, init=None, func=None, **kwargs):\n       super().__init__(\"for_n\", {\"n\" : n, \"init\" : init, \"func\" : func, **kwargs})\n\nclass find_all(_Bosl2Base):\n    def __init__(self, func=None, list=None, **kwargs):\n       super().__init__(\"find_all\", {\"func\" : func, \"list\" : list, **kwargs})\n\nclass find_first(_Bosl2Base):\n    def __init__(self, func=None, list=None, start=None, **kwargs):\n       super().__init__(\"find_first\", {\"func\" : func, \"list\" : list, \"start\" : start, **kwargs})\n\nclass binsearch(_Bosl2Base):\n    def __init__(self, key=None, list=None, idx=None, cmp=None, **kwargs):\n       super().__init__(\"binsearch\", {\"key\" : key, \"list\" : list, \"idx\" : idx, \"cmp\" : cmp, **kwargs})\n\nclass simple_hash(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"simple_hash\", {\"x\" : x, **kwargs})\n\nclass hashmap(_Bosl2Base):\n    def __init__(self, hashsize=None, items=None, table=None, **kwargs):\n       super().__init__(\"hashmap\", {\"hashsize\" : hashsize, \"items\" : items, \"table\" : table, **kwargs})\n\nclass f_1arg(_Bosl2Base):\n    def __init__(self, target_func=None, **kwargs):\n       super().__init__(\"f_1arg\", {\"target_func\" : target_func, **kwargs})\n\nclass f_2arg(_Bosl2Base):\n    def __init__(self, target_func=None, **kwargs):\n       super().__init__(\"f_2arg\", {\"target_func\" : target_func, **kwargs})\n\nclass f_2arg_simple(_Bosl2Base):\n    def __init__(self, target_func=None, **kwargs):\n       super().__init__(\"f_2arg_simple\", {\"target_func\" : target_func, **kwargs})\n\nclass f_3arg(_Bosl2Base):\n    def __init__(self, target_func=None, **kwargs):\n       super().__init__(\"f_3arg\", {\"target_func\" : target_func, **kwargs})\n\nclass ival(_Bosl2Base):\n    def __init__(self, target_func=None, **kwargs):\n       super().__init__(\"ival\", {\"target_func\" : target_func, **kwargs})\n\nclass xval(_Bosl2Base):\n    def __init__(self, target_func=None, **kwargs):\n       super().__init__(\"xval\", {\"target_func\" : target_func, **kwargs})\n\nclass f_cmp(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_cmp\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_gt(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_gt\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_lt(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_lt\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_gte(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_gte\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_lte(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_lte\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_eq(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_eq\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_neq(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_neq\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_approx(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_approx\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_napprox(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_napprox\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_or(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_or\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_and(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_and\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_nor(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_nor\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_nand(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_nand\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_xor(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_xor\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_not(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_not\", {\"a\" : a, **kwargs})\n\nclass f_even(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_even\", {\"a\" : a, **kwargs})\n\nclass f_odd(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_odd\", {\"a\" : a, **kwargs})\n\nclass f_add(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_add\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_sub(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_sub\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_mul(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_mul\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_div(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_div\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_mod(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_mod\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_pow(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_pow\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_neg(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_neg\", {\"a\" : a, **kwargs})\n\nclass f_min(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_min\", {\"a\" : a, **kwargs})\n\nclass f_max(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_max\", {\"a\" : a, **kwargs})\n\nclass f_min2(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_min2\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_max2(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_max2\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_min3(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, **kwargs):\n       super().__init__(\"f_min3\", {\"a\" : a, \"b\" : b, \"c\" : c, **kwargs})\n\nclass f_max3(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, **kwargs):\n       super().__init__(\"f_max3\", {\"a\" : a, \"b\" : b, \"c\" : c, **kwargs})\n\nclass f_sin(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_sin\", {\"a\" : a, **kwargs})\n\nclass f_cos(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_cos\", {\"a\" : a, **kwargs})\n\nclass f_tan(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_tan\", {\"a\" : a, **kwargs})\n\nclass f_asin(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_asin\", {\"a\" : a, **kwargs})\n\nclass f_acos(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_acos\", {\"a\" : a, **kwargs})\n\nclass f_atan(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_atan\", {\"a\" : a, **kwargs})\n\nclass f_atan2(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_atan2\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_len(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_len\", {\"a\" : a, **kwargs})\n\nclass f_chr(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_chr\", {\"a\" : a, **kwargs})\n\nclass f_ord(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_ord\", {\"a\" : a, **kwargs})\n\nclass f_str(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_str\", {\"a\" : a, **kwargs})\n\nclass f_str2(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_str2\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_str3(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, **kwargs):\n       super().__init__(\"f_str3\", {\"a\" : a, \"b\" : b, \"c\" : c, **kwargs})\n\nclass f_floor(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_floor\", {\"a\" : a, **kwargs})\n\nclass f_round(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_round\", {\"a\" : a, **kwargs})\n\nclass f_ceil(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_ceil\", {\"a\" : a, **kwargs})\n\nclass f_abs(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_abs\", {\"a\" : a, **kwargs})\n\nclass f_sign(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_sign\", {\"a\" : a, **kwargs})\n\nclass f_ln(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_ln\", {\"a\" : a, **kwargs})\n\nclass f_log(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_log\", {\"a\" : a, **kwargs})\n\nclass f_exp(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_exp\", {\"a\" : a, **kwargs})\n\nclass f_sqr(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_sqr\", {\"a\" : a, **kwargs})\n\nclass f_sqrt(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_sqrt\", {\"a\" : a, **kwargs})\n\nclass f_norm(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_norm\", {\"a\" : a, **kwargs})\n\nclass f_cross(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_cross\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_is_def(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_def\", {\"a\" : a, **kwargs})\n\nclass f_is_undef(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_undef\", {\"a\" : a, **kwargs})\n\nclass f_is_bool(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_bool\", {\"a\" : a, **kwargs})\n\nclass f_is_num(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_num\", {\"a\" : a, **kwargs})\n\nclass f_is_int(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_int\", {\"a\" : a, **kwargs})\n\nclass f_is_nan(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_nan\", {\"a\" : a, **kwargs})\n\nclass f_is_finite(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_finite\", {\"a\" : a, **kwargs})\n\nclass f_is_string(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_string\", {\"a\" : a, **kwargs})\n\nclass f_is_list(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_list\", {\"a\" : a, **kwargs})\n\nclass f_is_range(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_range\", {\"a\" : a, **kwargs})\n\nclass f_is_function(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_function\", {\"a\" : a, **kwargs})\n\nclass f_is_vector(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_is_vector\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_is_path(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"f_is_path\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass f_is_region(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_region\", {\"a\" : a, **kwargs})\n\nclass f_is_vnf(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_vnf\", {\"a\" : a, **kwargs})\n\nclass f_is_patch(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"f_is_patch\", {\"a\" : a, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/gears.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/gears.scad'}\", False)\n\n_GEAR_PITCH = _OpenSCADConstant('_GEAR_PITCH')\n_GEAR_HELICAL = _OpenSCADConstant('_GEAR_HELICAL')\n_GEAR_THICKNESS = _OpenSCADConstant('_GEAR_THICKNESS')\n_GEAR_PA = _OpenSCADConstant('_GEAR_PA')\n_parent_gear_type = _OpenSCADConstant('_parent_gear_type')\n_parent_gear_pitch = _OpenSCADConstant('_parent_gear_pitch')\n_parent_gear_teeth = _OpenSCADConstant('_parent_gear_teeth')\n_parent_gear_pa = _OpenSCADConstant('_parent_gear_pa')\n_parent_gear_helical = _OpenSCADConstant('_parent_gear_helical')\n_parent_gear_thickness = _OpenSCADConstant('_parent_gear_thickness')\n_parent_gear_dir = _OpenSCADConstant('_parent_gear_dir')\n_parent_gear_travel = _OpenSCADConstant('_parent_gear_travel')\nclass _inherit_gear_param(_Bosl2Base):\n    def __init__(self, name=None, val=None, pval=None, dflt=None, invert=None, **kwargs):\n       super().__init__(\"_inherit_gear_param\", {\"name\" : name, \"val\" : val, \"pval\" : pval, \"dflt\" : dflt, \"invert\" : invert, **kwargs})\n\nclass _inherit_gear_pitch(_Bosl2Base):\n    def __init__(self, fname=None, pitch=None, circ_pitch=None, diam_pitch=None, mod=None, warn=None, **kwargs):\n       super().__init__(\"_inherit_gear_pitch\", {\"fname\" : fname, \"pitch\" : pitch, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"warn\" : warn, **kwargs})\n\nclass _inherit_gear_pa(_Bosl2Base):\n    def __init__(self, pressure_angle=None, **kwargs):\n       super().__init__(\"_inherit_gear_pa\", {\"pressure_angle\" : pressure_angle, **kwargs})\n\nclass _inherit_gear_helical(_Bosl2Base):\n    def __init__(self, helical=None, invert=None, **kwargs):\n       super().__init__(\"_inherit_gear_helical\", {\"helical\" : helical, \"invert\" : invert, **kwargs})\n\nclass _inherit_gear_thickness(_Bosl2Base):\n    def __init__(self, thickness=None, dflt=None, **kwargs):\n       super().__init__(\"_inherit_gear_thickness\", {\"thickness\" : thickness, \"dflt\" : dflt, **kwargs})\n\nclass spur_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, thickness=None, shaft_diam=None, hide=None, pressure_angle=None, clearance=None, backlash=None, helical=None, interior=None, internal=None, profile_shift=None, slices=None, herringbone=None, shorten=None, diam_pitch=None, mod=None, pitch=None, gear_spin=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"spur_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"thickness\" : thickness, \"shaft_diam\" : shaft_diam, \"hide\" : hide, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"helical\" : helical, \"interior\" : interior, \"internal\" : internal, \"profile_shift\" : profile_shift, \"slices\" : slices, \"herringbone\" : herringbone, \"shorten\" : shorten, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, \"gear_spin\" : gear_spin, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass spur_gear2d(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, hide=None, pressure_angle=None, clearance=None, backlash=None, internal=None, interior=None, profile_shift=None, helical=None, shaft_diam=None, shorten=None, pitch=None, diam_pitch=None, mod=None, gear_spin=None, atype=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"spur_gear2d\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"hide\" : hide, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"internal\" : internal, \"interior\" : interior, \"profile_shift\" : profile_shift, \"helical\" : helical, \"shaft_diam\" : shaft_diam, \"shorten\" : shorten, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"gear_spin\" : gear_spin, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass rack(_Bosl2Base):\n    def __init__(self, pitch=None, teeth=None, thickness=None, backing=None, bottom=None, width=None, pressure_angle=None, backlash=None, clearance=None, helical=None, herringbone=None, profile_shift=None, circ_pitch=None, diam_pitch=None, mod=None, gear_travel=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rack\", {\"pitch\" : pitch, \"teeth\" : teeth, \"thickness\" : thickness, \"backing\" : backing, \"bottom\" : bottom, \"width\" : width, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"helical\" : helical, \"herringbone\" : herringbone, \"profile_shift\" : profile_shift, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"gear_travel\" : gear_travel, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rack2d(_Bosl2Base):\n    def __init__(self, pitch=None, teeth=None, backing=None, pressure_angle=None, backlash=None, clearance=None, helical=None, profile_shift=None, circ_pitch=None, diam_pitch=None, mod=None, width=None, bottom=None, gear_travel=None, rounding=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"rack2d\", {\"pitch\" : pitch, \"teeth\" : teeth, \"backing\" : backing, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"helical\" : helical, \"profile_shift\" : profile_shift, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"width\" : width, \"bottom\" : bottom, \"gear_travel\" : gear_travel, \"rounding\" : rounding, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass crown_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, backing=None, face_width=None, pressure_angle=None, clearance=None, backlash=None, profile_shift=None, slices=None, bottom=None, thickness=None, diam_pitch=None, pitch=None, mod=None, gear_spin=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"crown_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"backing\" : backing, \"face_width\" : face_width, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"profile_shift\" : profile_shift, \"slices\" : slices, \"bottom\" : bottom, \"thickness\" : thickness, \"diam_pitch\" : diam_pitch, \"pitch\" : pitch, \"mod\" : mod, \"gear_spin\" : gear_spin, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bevel_gear(_Bosl2Base):\n    def __init__(self, teeth=None, mate_teeth=None, shaft_angle=None, backing=None, thickness=None, bottom=None, face_width=None, pressure_angle=None, clearance=None, backlash=None, cutter_radius=None, spiral=None, right_handed=None, slices=None, cone_backing=None, pitch=None, circ_pitch=None, diam_pitch=None, mod=None, anchor=None, spin=None, gear_spin=None, orient=None, _return_anchors=None, **kwargs):\n       super().__init__(\"bevel_gear\", {\"teeth\" : teeth, \"mate_teeth\" : mate_teeth, \"shaft_angle\" : shaft_angle, \"backing\" : backing, \"thickness\" : thickness, \"bottom\" : bottom, \"face_width\" : face_width, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"cutter_radius\" : cutter_radius, \"spiral\" : spiral, \"right_handed\" : right_handed, \"slices\" : slices, \"cone_backing\" : cone_backing, \"pitch\" : pitch, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"anchor\" : anchor, \"spin\" : spin, \"gear_spin\" : gear_spin, \"orient\" : orient, \"_return_anchors\" : _return_anchors, **kwargs})\n\nclass worm(_Bosl2Base):\n    def __init__(self, circ_pitch=None, d=None, l=None, starts=None, left_handed=None, pressure_angle=None, backlash=None, clearance=None, diam_pitch=None, mod=None, pitch=None, gear_spin=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"worm\", {\"circ_pitch\" : circ_pitch, \"d\" : d, \"l\" : l, \"starts\" : starts, \"left_handed\" : left_handed, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, \"gear_spin\" : gear_spin, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass enveloping_worm(_Bosl2Base):\n    def __init__(self, circ_pitch=None, mate_teeth=None, d=None, left_handed=None, starts=None, arc=None, pressure_angle=None, gear_spin=None, rounding=None, taper=None, diam_pitch=None, mod=None, pitch=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"enveloping_worm\", {\"circ_pitch\" : circ_pitch, \"mate_teeth\" : mate_teeth, \"d\" : d, \"left_handed\" : left_handed, \"starts\" : starts, \"arc\" : arc, \"pressure_angle\" : pressure_angle, \"gear_spin\" : gear_spin, \"rounding\" : rounding, \"taper\" : taper, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass worm_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, worm_diam=None, worm_starts=None, worm_arc=None, crowning=None, left_handed=None, pressure_angle=None, backlash=None, clearance=None, profile_shift=None, slices=None, gear_spin=None, pitch=None, diam_pitch=None, mod=None, get_thickness=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"worm_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"worm_diam\" : worm_diam, \"worm_starts\" : worm_starts, \"worm_arc\" : worm_arc, \"crowning\" : crowning, \"left_handed\" : left_handed, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"profile_shift\" : profile_shift, \"slices\" : slices, \"gear_spin\" : gear_spin, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"get_thickness\" : get_thickness, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _gear_tooth_profile(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, pressure_angle=None, clearance=None, backlash=None, helical=None, internal=None, profile_shift=None, shorten=None, mod=None, diam_pitch=None, pitch=None, center=None, **kwargs):\n       super().__init__(\"_gear_tooth_profile\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"helical\" : helical, \"internal\" : internal, \"profile_shift\" : profile_shift, \"shorten\" : shorten, \"mod\" : mod, \"diam_pitch\" : diam_pitch, \"pitch\" : pitch, \"center\" : center, **kwargs})\n\nclass planetary_gears(_Bosl2Base):\n    def __init__(self, n=None, max_teeth=None, helical=None, circ_pitch=None, mod=None, diam_pitch=None, ring_carrier=None, carrier_ring=None, sun_carrier=None, carrier_sun=None, sun_ring=None, ring_sun=None, gear_spin=None, **kwargs):\n       super().__init__(\"planetary_gears\", {\"n\" : n, \"max_teeth\" : max_teeth, \"helical\" : helical, \"circ_pitch\" : circ_pitch, \"mod\" : mod, \"diam_pitch\" : diam_pitch, \"ring_carrier\" : ring_carrier, \"carrier_ring\" : carrier_ring, \"sun_carrier\" : sun_carrier, \"carrier_sun\" : carrier_sun, \"sun_ring\" : sun_ring, \"ring_sun\" : ring_sun, \"gear_spin\" : gear_spin, **kwargs})\n\nclass circular_pitch(_Bosl2Base):\n    def __init__(self, circ_pitch=None, mod=None, pitch=None, diam_pitch=None, **kwargs):\n       super().__init__(\"circular_pitch\", {\"circ_pitch\" : circ_pitch, \"mod\" : mod, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, **kwargs})\n\nclass diametral_pitch(_Bosl2Base):\n    def __init__(self, circ_pitch=None, mod=None, pitch=None, diam_pitch=None, **kwargs):\n       super().__init__(\"diametral_pitch\", {\"circ_pitch\" : circ_pitch, \"mod\" : mod, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, **kwargs})\n\nclass module_value(_Bosl2Base):\n    def __init__(self, circ_pitch=None, mod=None, pitch=None, diam_pitch=None, **kwargs):\n       super().__init__(\"module_value\", {\"circ_pitch\" : circ_pitch, \"mod\" : mod, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, **kwargs})\n\nclass _adendum(_Bosl2Base):\n    def __init__(self, circ_pitch=None, profile_shift=None, shorten=None, diam_pitch=None, mod=None, pitch=None, **kwargs):\n       super().__init__(\"_adendum\", {\"circ_pitch\" : circ_pitch, \"profile_shift\" : profile_shift, \"shorten\" : shorten, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, **kwargs})\n\nclass _dedendum(_Bosl2Base):\n    def __init__(self, circ_pitch=None, clearance=None, profile_shift=None, diam_pitch=None, mod=None, pitch=None, **kwargs):\n       super().__init__(\"_dedendum\", {\"circ_pitch\" : circ_pitch, \"clearance\" : clearance, \"profile_shift\" : profile_shift, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, **kwargs})\n\nclass pitch_radius(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, helical=None, mod=None, diam_pitch=None, pitch=None, **kwargs):\n       super().__init__(\"pitch_radius\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"helical\" : helical, \"mod\" : mod, \"diam_pitch\" : diam_pitch, \"pitch\" : pitch, **kwargs})\n\nclass outer_radius(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, clearance=None, internal=None, helical=None, profile_shift=None, pressure_angle=None, shorten=None, mod=None, pitch=None, diam_pitch=None, **kwargs):\n       super().__init__(\"outer_radius\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"clearance\" : clearance, \"internal\" : internal, \"helical\" : helical, \"profile_shift\" : profile_shift, \"pressure_angle\" : pressure_angle, \"shorten\" : shorten, \"mod\" : mod, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, **kwargs})\n\nclass root_radius(_Bosl2Base):\n    def __init__(self, teeth=None, helical=None, clearance=None, internal=None, profile_shift=None, pressure_angle=None, mod=None, pitch=None, diam_pitch=None, backlash=None, **kwargs):\n       super().__init__(\"root_radius\", {\"teeth\" : teeth, \"helical\" : helical, \"clearance\" : clearance, \"internal\" : internal, \"profile_shift\" : profile_shift, \"pressure_angle\" : pressure_angle, \"mod\" : mod, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"backlash\" : backlash, **kwargs})\n\nclass _root_radius_basic(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, clearance=None, internal=None, helical=None, profile_shift=None, diam_pitch=None, mod=None, pitch=None, **kwargs):\n       super().__init__(\"_root_radius_basic\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"clearance\" : clearance, \"internal\" : internal, \"helical\" : helical, \"profile_shift\" : profile_shift, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, **kwargs})\n\nclass _base_radius(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, pressure_angle=None, helical=None, diam_pitch=None, mod=None, pitch=None, **kwargs):\n       super().__init__(\"_base_radius\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"pressure_angle\" : pressure_angle, \"helical\" : helical, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, **kwargs})\n\nclass bevel_pitch_angle(_Bosl2Base):\n    def __init__(self, teeth=None, mate_teeth=None, drive_angle=None, **kwargs):\n       super().__init__(\"bevel_pitch_angle\", {\"teeth\" : teeth, \"mate_teeth\" : mate_teeth, \"drive_angle\" : drive_angle, **kwargs})\n\nclass worm_gear_thickness(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, worm_diam=None, worm_arc=None, pressure_angle=None, crowning=None, clearance=None, diam_pitch=None, mod=None, pitch=None, **kwargs):\n       super().__init__(\"worm_gear_thickness\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"worm_diam\" : worm_diam, \"worm_arc\" : worm_arc, \"pressure_angle\" : pressure_angle, \"crowning\" : crowning, \"clearance\" : clearance, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, **kwargs})\n\nclass worm_dist(_Bosl2Base):\n    def __init__(self, d=None, starts=None, teeth=None, mod=None, profile_shift=None, diam_pitch=None, circ_pitch=None, pressure_angle=None, backlash=None, **kwargs):\n       super().__init__(\"worm_dist\", {\"d\" : d, \"starts\" : starts, \"teeth\" : teeth, \"mod\" : mod, \"profile_shift\" : profile_shift, \"diam_pitch\" : diam_pitch, \"circ_pitch\" : circ_pitch, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, **kwargs})\n\nclass gear_dist(_Bosl2Base):\n    def __init__(self, teeth1=None, teeth2=None, helical=None, profile_shift1=None, profile_shift2=None, internal1=None, internal2=None, backlash=None, pressure_angle=None, diam_pitch=None, circ_pitch=None, mod=None, **kwargs):\n       super().__init__(\"gear_dist\", {\"teeth1\" : teeth1, \"teeth2\" : teeth2, \"helical\" : helical, \"profile_shift1\" : profile_shift1, \"profile_shift2\" : profile_shift2, \"internal1\" : internal1, \"internal2\" : internal2, \"backlash\" : backlash, \"pressure_angle\" : pressure_angle, \"diam_pitch\" : diam_pitch, \"circ_pitch\" : circ_pitch, \"mod\" : mod, **kwargs})\n\nclass _invol(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"_invol\", {\"a\" : a, **kwargs})\n\nclass _working_pressure_angle(_Bosl2Base):\n    def __init__(self, teeth1=None, profile_shift1=None, teeth2=None, profile_shift2=None, pressure_angle=None, helical=None, **kwargs):\n       super().__init__(\"_working_pressure_angle\", {\"teeth1\" : teeth1, \"profile_shift1\" : profile_shift1, \"teeth2\" : teeth2, \"profile_shift2\" : profile_shift2, \"pressure_angle\" : pressure_angle, \"helical\" : helical, **kwargs})\n\nclass gear_dist_skew(_Bosl2Base):\n    def __init__(self, teeth1=None, teeth2=None, helical1=None, helical2=None, profile_shift1=None, profile_shift2=None, pressure_angle=None, mod=None, circ_pitch=None, diam_pitch=None, backlash=None, **kwargs):\n       super().__init__(\"gear_dist_skew\", {\"teeth1\" : teeth1, \"teeth2\" : teeth2, \"helical1\" : helical1, \"helical2\" : helical2, \"profile_shift1\" : profile_shift1, \"profile_shift2\" : profile_shift2, \"pressure_angle\" : pressure_angle, \"mod\" : mod, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"backlash\" : backlash, **kwargs})\n\nclass _working_normal_pressure_angle_skew(_Bosl2Base):\n    def __init__(self, teeth1=None, profile_shift1=None, helical1=None, teeth2=None, profile_shift2=None, helical2=None, pressure_angle=None, **kwargs):\n       super().__init__(\"_working_normal_pressure_angle_skew\", {\"teeth1\" : teeth1, \"profile_shift1\" : profile_shift1, \"helical1\" : helical1, \"teeth2\" : teeth2, \"profile_shift2\" : profile_shift2, \"helical2\" : helical2, \"pressure_angle\" : pressure_angle, **kwargs})\n\nclass gear_skew_angle(_Bosl2Base):\n    def __init__(self, teeth1=None, teeth2=None, helical1=None, helical2=None, profile_shift1=None, profile_shift2=None, pressure_angle=None, **kwargs):\n       super().__init__(\"gear_skew_angle\", {\"teeth1\" : teeth1, \"teeth2\" : teeth2, \"helical1\" : helical1, \"helical2\" : helical2, \"profile_shift1\" : profile_shift1, \"profile_shift2\" : profile_shift2, \"pressure_angle\" : pressure_angle, **kwargs})\n\nclass get_profile_shift(_Bosl2Base):\n    def __init__(self, desired=None, teeth1=None, teeth2=None, helical=None, pressure_angle=None, mod=None, diam_pitch=None, circ_pitch=None, **kwargs):\n       super().__init__(\"get_profile_shift\", {\"desired\" : desired, \"teeth1\" : teeth1, \"teeth2\" : teeth2, \"helical\" : helical, \"pressure_angle\" : pressure_angle, \"mod\" : mod, \"diam_pitch\" : diam_pitch, \"circ_pitch\" : circ_pitch, **kwargs})\n\nclass auto_profile_shift(_Bosl2Base):\n    def __init__(self, teeth=None, pressure_angle=None, helical=None, min_teeth=None, profile_shift=None, get_min=None, **kwargs):\n       super().__init__(\"auto_profile_shift\", {\"teeth\" : teeth, \"pressure_angle\" : pressure_angle, \"helical\" : helical, \"min_teeth\" : min_teeth, \"profile_shift\" : profile_shift, \"get_min\" : get_min, **kwargs})\n\nclass gear_shorten(_Bosl2Base):\n    def __init__(self, teeth1=None, teeth2=None, helical=None, profile_shift1=None, profile_shift2=None, pressure_angle=None, **kwargs):\n       super().__init__(\"gear_shorten\", {\"teeth1\" : teeth1, \"teeth2\" : teeth2, \"helical\" : helical, \"profile_shift1\" : profile_shift1, \"profile_shift2\" : profile_shift2, \"pressure_angle\" : pressure_angle, **kwargs})\n\nclass gear_shorten_skew(_Bosl2Base):\n    def __init__(self, teeth1=None, teeth2=None, helical1=None, helical2=None, profile_shift1=None, profile_shift2=None, pressure_angle=None, **kwargs):\n       super().__init__(\"gear_shorten_skew\", {\"teeth1\" : teeth1, \"teeth2\" : teeth2, \"helical1\" : helical1, \"helical2\" : helical2, \"profile_shift1\" : profile_shift1, \"profile_shift2\" : profile_shift2, \"pressure_angle\" : pressure_angle, **kwargs})\n\nclass spur_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, thickness=None, shaft_diam=None, hide=None, pressure_angle=None, clearance=None, backlash=None, helical=None, internal=None, interior=None, profile_shift=None, slices=None, herringbone=None, shorten=None, pitch=None, diam_pitch=None, mod=None, atype=None, gear_spin=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"spur_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"thickness\" : thickness, \"shaft_diam\" : shaft_diam, \"hide\" : hide, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"helical\" : helical, \"internal\" : internal, \"interior\" : interior, \"profile_shift\" : profile_shift, \"slices\" : slices, \"herringbone\" : herringbone, \"shorten\" : shorten, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"atype\" : atype, \"gear_spin\" : gear_spin, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass spur_gear2d(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, hide=None, pressure_angle=None, clearance=None, backlash=None, internal=None, interior=None, profile_shift=None, helical=None, shorten=None, shaft_diam=None, pitch=None, diam_pitch=None, mod=None, gear_spin=None, atype=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"spur_gear2d\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"hide\" : hide, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"internal\" : internal, \"interior\" : interior, \"profile_shift\" : profile_shift, \"helical\" : helical, \"shorten\" : shorten, \"shaft_diam\" : shaft_diam, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"gear_spin\" : gear_spin, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass ring_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, thickness=None, backing=None, pressure_angle=None, helical=None, herringbone=None, profile_shift=None, clearance=None, backlash=None, _or=None, od=None, width=None, pitch=None, diam_pitch=None, mod=None, slices=None, gear_spin=None, anchor=None, atype=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ring_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"thickness\" : thickness, \"backing\" : backing, \"pressure_angle\" : pressure_angle, \"helical\" : helical, \"herringbone\" : herringbone, \"profile_shift\" : profile_shift, \"clearance\" : clearance, \"backlash\" : backlash, \"_or\" : _or, \"od\" : od, \"width\" : width, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"slices\" : slices, \"gear_spin\" : gear_spin, \"anchor\" : anchor, \"atype\" : atype, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass ring_gear2d(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, backing=None, pressure_angle=None, helical=None, profile_shift=None, clearance=None, backlash=None, _or=None, od=None, width=None, pitch=None, diam_pitch=None, mod=None, atype=None, gear_spin=None, shorten=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"ring_gear2d\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"backing\" : backing, \"pressure_angle\" : pressure_angle, \"helical\" : helical, \"profile_shift\" : profile_shift, \"clearance\" : clearance, \"backlash\" : backlash, \"_or\" : _or, \"od\" : od, \"width\" : width, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"atype\" : atype, \"gear_spin\" : gear_spin, \"shorten\" : shorten, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass rack(_Bosl2Base):\n    def __init__(self, pitch=None, teeth=None, thickness=None, backing=None, width=None, bottom=None, pressure_angle=None, backlash=None, clearance=None, helical=None, herringbone=None, profile_shift=None, gear_travel=None, circ_pitch=None, diam_pitch=None, mod=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rack\", {\"pitch\" : pitch, \"teeth\" : teeth, \"thickness\" : thickness, \"backing\" : backing, \"width\" : width, \"bottom\" : bottom, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"helical\" : helical, \"herringbone\" : herringbone, \"profile_shift\" : profile_shift, \"gear_travel\" : gear_travel, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rack2d(_Bosl2Base):\n    def __init__(self, pitch=None, teeth=None, backing=None, width=None, bottom=None, pressure_angle=None, backlash=None, clearance=None, helical=None, profile_shift=None, gear_travel=None, circ_pitch=None, diam_pitch=None, mod=None, rounding=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"rack2d\", {\"pitch\" : pitch, \"teeth\" : teeth, \"backing\" : backing, \"width\" : width, \"bottom\" : bottom, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"helical\" : helical, \"profile_shift\" : profile_shift, \"gear_travel\" : gear_travel, \"circ_pitch\" : circ_pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"rounding\" : rounding, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass crown_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, backing=None, face_width=None, pressure_angle=None, clearance=None, backlash=None, profile_shift=None, slices=None, bottom=None, thickness=None, diam_pitch=None, pitch=None, mod=None, gear_spin=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"crown_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"backing\" : backing, \"face_width\" : face_width, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"profile_shift\" : profile_shift, \"slices\" : slices, \"bottom\" : bottom, \"thickness\" : thickness, \"diam_pitch\" : diam_pitch, \"pitch\" : pitch, \"mod\" : mod, \"gear_spin\" : gear_spin, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bevel_gear(_Bosl2Base):\n    def __init__(self, teeth=None, mate_teeth=None, shaft_angle=None, bottom=None, backing=None, thickness=None, cone_backing=None, face_width=None, shaft_diam=None, pressure_angle=None, clearance=None, backlash=None, cutter_radius=None, spiral=None, right_handed=None, slices=None, pitch=None, diam_pitch=None, circ_pitch=None, mod=None, anchor=None, spin=None, gear_spin=None, orient=None, **kwargs):\n       super().__init__(\"bevel_gear\", {\"teeth\" : teeth, \"mate_teeth\" : mate_teeth, \"shaft_angle\" : shaft_angle, \"bottom\" : bottom, \"backing\" : backing, \"thickness\" : thickness, \"cone_backing\" : cone_backing, \"face_width\" : face_width, \"shaft_diam\" : shaft_diam, \"pressure_angle\" : pressure_angle, \"clearance\" : clearance, \"backlash\" : backlash, \"cutter_radius\" : cutter_radius, \"spiral\" : spiral, \"right_handed\" : right_handed, \"slices\" : slices, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"circ_pitch\" : circ_pitch, \"mod\" : mod, \"anchor\" : anchor, \"spin\" : spin, \"gear_spin\" : gear_spin, \"orient\" : orient, **kwargs})\n\nclass worm(_Bosl2Base):\n    def __init__(self, circ_pitch=None, d=None, l=None, starts=None, left_handed=None, pressure_angle=None, backlash=None, clearance=None, pitch=None, diam_pitch=None, mod=None, gear_spin=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"worm\", {\"circ_pitch\" : circ_pitch, \"d\" : d, \"l\" : l, \"starts\" : starts, \"left_handed\" : left_handed, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"gear_spin\" : gear_spin, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass enveloping_worm(_Bosl2Base):\n    def __init__(self, circ_pitch=None, mate_teeth=None, d=None, left_handed=None, starts=None, arc=None, pressure_angle=None, gear_spin=None, rounding=None, taper=None, diam_pitch=None, mod=None, pitch=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"enveloping_worm\", {\"circ_pitch\" : circ_pitch, \"mate_teeth\" : mate_teeth, \"d\" : d, \"left_handed\" : left_handed, \"starts\" : starts, \"arc\" : arc, \"pressure_angle\" : pressure_angle, \"gear_spin\" : gear_spin, \"rounding\" : rounding, \"taper\" : taper, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"pitch\" : pitch, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass worm_gear(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, worm_diam=None, worm_starts=None, worm_arc=None, crowning=None, left_handed=None, pressure_angle=None, backlash=None, clearance=None, profile_shift=None, slices=None, shaft_diam=None, gear_spin=None, pitch=None, diam_pitch=None, mod=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"worm_gear\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"worm_diam\" : worm_diam, \"worm_starts\" : worm_starts, \"worm_arc\" : worm_arc, \"crowning\" : crowning, \"left_handed\" : left_handed, \"pressure_angle\" : pressure_angle, \"backlash\" : backlash, \"clearance\" : clearance, \"profile_shift\" : profile_shift, \"slices\" : slices, \"shaft_diam\" : shaft_diam, \"gear_spin\" : gear_spin, \"pitch\" : pitch, \"diam_pitch\" : diam_pitch, \"mod\" : mod, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _show_gear_tooth_profile(_Bosl2Base):\n    def __init__(self, circ_pitch=None, teeth=None, pressure_angle=None, profile_shift=None, helical=None, internal=None, clearance=None, backlash=None, show_verts=None, diam_pitch=None, mod=None, **kwargs):\n       super().__init__(\"_show_gear_tooth_profile\", {\"circ_pitch\" : circ_pitch, \"teeth\" : teeth, \"pressure_angle\" : pressure_angle, \"profile_shift\" : profile_shift, \"helical\" : helical, \"internal\" : internal, \"clearance\" : clearance, \"backlash\" : backlash, \"show_verts\" : show_verts, \"diam_pitch\" : diam_pitch, \"mod\" : mod, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/geometry.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/geometry.scad'}\", False)\n\nclass is_point_on_line(_Bosl2Base):\n    def __init__(self, point=None, line=None, bounded=None, eps=None, **kwargs):\n       super().__init__(\"is_point_on_line\", {\"point\" : point, \"line\" : line, \"bounded\" : bounded, \"eps\" : eps, **kwargs})\n\nclass _is_point_on_line(_Bosl2Base):\n    def __init__(self, point=None, line=None, bounded=None, eps=None, **kwargs):\n       super().__init__(\"_is_point_on_line\", {\"point\" : point, \"line\" : line, \"bounded\" : bounded, \"eps\" : eps, **kwargs})\n\nclass _dist2line(_Bosl2Base):\n    def __init__(self, d=None, n=None, **kwargs):\n       super().__init__(\"_dist2line\", {\"d\" : d, \"n\" : n, **kwargs})\n\nclass _valid_line(_Bosl2Base):\n    def __init__(self, line=None, dim=None, eps=None, **kwargs):\n       super().__init__(\"_valid_line\", {\"line\" : line, \"dim\" : dim, \"eps\" : eps, **kwargs})\n\nclass _valid_plane(_Bosl2Base):\n    def __init__(self, p=None, eps=None, **kwargs):\n       super().__init__(\"_valid_plane\", {\"p\" : p, \"eps\" : eps, **kwargs})\n\nclass _is_at_left(_Bosl2Base):\n    def __init__(self, pt=None, line=None, eps=None, **kwargs):\n       super().__init__(\"_is_at_left\", {\"pt\" : pt, \"line\" : line, \"eps\" : eps, **kwargs})\n\nclass _degenerate_tri(_Bosl2Base):\n    def __init__(self, tri=None, eps=None, **kwargs):\n       super().__init__(\"_degenerate_tri\", {\"tri\" : tri, \"eps\" : eps, **kwargs})\n\nclass _tri_class(_Bosl2Base):\n    def __init__(self, tri=None, eps=None, **kwargs):\n       super().__init__(\"_tri_class\", {\"tri\" : tri, \"eps\" : eps, **kwargs})\n\nclass _pt_in_tri(_Bosl2Base):\n    def __init__(self, point=None, tri=None, eps=None, **kwargs):\n       super().__init__(\"_pt_in_tri\", {\"point\" : point, \"tri\" : tri, \"eps\" : eps, **kwargs})\n\nclass _point_left_of_line2d(_Bosl2Base):\n    def __init__(self, point=None, line=None, eps=None, **kwargs):\n       super().__init__(\"_point_left_of_line2d\", {\"point\" : point, \"line\" : line, \"eps\" : eps, **kwargs})\n\nclass is_collinear(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, eps=None, **kwargs):\n       super().__init__(\"is_collinear\", {\"a\" : a, \"b\" : b, \"c\" : c, \"eps\" : eps, **kwargs})\n\nclass point_line_distance(_Bosl2Base):\n    def __init__(self, pt=None, line=None, bounded=None, **kwargs):\n       super().__init__(\"point_line_distance\", {\"pt\" : pt, \"line\" : line, \"bounded\" : bounded, **kwargs})\n\nclass segment_distance(_Bosl2Base):\n    def __init__(self, seg1=None, seg2=None, eps=None, **kwargs):\n       super().__init__(\"segment_distance\", {\"seg1\" : seg1, \"seg2\" : seg2, \"eps\" : eps, **kwargs})\n\nclass line_normal(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, **kwargs):\n       super().__init__(\"line_normal\", {\"p1\" : p1, \"p2\" : p2, **kwargs})\n\nclass _general_line_intersection(_Bosl2Base):\n    def __init__(self, s1=None, s2=None, eps=None, **kwargs):\n       super().__init__(\"_general_line_intersection\", {\"s1\" : s1, \"s2\" : s2, \"eps\" : eps, **kwargs})\n\nclass line_intersection(_Bosl2Base):\n    def __init__(self, line1=None, line2=None, bounded1=None, bounded2=None, bounded=None, eps=None, **kwargs):\n       super().__init__(\"line_intersection\", {\"line1\" : line1, \"line2\" : line2, \"bounded1\" : bounded1, \"bounded2\" : bounded2, \"bounded\" : bounded, \"eps\" : eps, **kwargs})\n\nclass line_closest_point(_Bosl2Base):\n    def __init__(self, line=None, pt=None, bounded=None, **kwargs):\n       super().__init__(\"line_closest_point\", {\"line\" : line, \"pt\" : pt, \"bounded\" : bounded, **kwargs})\n\nclass _line_greatest_distance(_Bosl2Base):\n    def __init__(self, points=None, line=None, **kwargs):\n       super().__init__(\"_line_greatest_distance\", {\"points\" : points, \"line\" : line, **kwargs})\n\nclass line_from_points(_Bosl2Base):\n    def __init__(self, points=None, check_collinear=None, eps=None, fast=None, **kwargs):\n       super().__init__(\"line_from_points\", {\"points\" : points, \"check_collinear\" : check_collinear, \"eps\" : eps, \"fast\" : fast, **kwargs})\n\nclass is_coplanar(_Bosl2Base):\n    def __init__(self, points=None, eps=None, **kwargs):\n       super().__init__(\"is_coplanar\", {\"points\" : points, \"eps\" : eps, **kwargs})\n\nclass plane3pt(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, p3=None, **kwargs):\n       super().__init__(\"plane3pt\", {\"p1\" : p1, \"p2\" : p2, \"p3\" : p3, **kwargs})\n\nclass plane3pt_indexed(_Bosl2Base):\n    def __init__(self, points=None, i1=None, i2=None, i3=None, **kwargs):\n       super().__init__(\"plane3pt_indexed\", {\"points\" : points, \"i1\" : i1, \"i2\" : i2, \"i3\" : i3, **kwargs})\n\nclass plane_from_normal(_Bosl2Base):\n    def __init__(self, normal=None, pt=None, **kwargs):\n       super().__init__(\"plane_from_normal\", {\"normal\" : normal, \"pt\" : pt, **kwargs})\n\nclass _eigenvals_symm_3(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"_eigenvals_symm_3\", {\"M\" : M, **kwargs})\n\nclass _eigenvec_symm_3(_Bosl2Base):\n    def __init__(self, M=None, evals=None, i=None, **kwargs):\n       super().__init__(\"_eigenvec_symm_3\", {\"M\" : M, \"evals\" : evals, \"i\" : i, **kwargs})\n\nclass _covariance_evec_eval(_Bosl2Base):\n    def __init__(self, points=None, eigenvalue_id=None, **kwargs):\n       super().__init__(\"_covariance_evec_eval\", {\"points\" : points, \"eigenvalue_id\" : eigenvalue_id, **kwargs})\n\nclass plane_from_points(_Bosl2Base):\n    def __init__(self, points=None, check_coplanar=None, eps=None, fast=None, **kwargs):\n       super().__init__(\"plane_from_points\", {\"points\" : points, \"check_coplanar\" : check_coplanar, \"eps\" : eps, \"fast\" : fast, **kwargs})\n\nclass plane_from_polygon(_Bosl2Base):\n    def __init__(self, poly=None, check_coplanar=None, eps=None, fast=None, **kwargs):\n       super().__init__(\"plane_from_polygon\", {\"poly\" : poly, \"check_coplanar\" : check_coplanar, \"eps\" : eps, \"fast\" : fast, **kwargs})\n\nclass plane_normal(_Bosl2Base):\n    def __init__(self, plane=None, **kwargs):\n       super().__init__(\"plane_normal\", {\"plane\" : plane, **kwargs})\n\nclass plane_offset(_Bosl2Base):\n    def __init__(self, plane=None, **kwargs):\n       super().__init__(\"plane_offset\", {\"plane\" : plane, **kwargs})\n\nclass _general_plane_line_intersection(_Bosl2Base):\n    def __init__(self, plane=None, line=None, eps=None, **kwargs):\n       super().__init__(\"_general_plane_line_intersection\", {\"plane\" : plane, \"line\" : line, \"eps\" : eps, **kwargs})\n\nclass _normalize_plane(_Bosl2Base):\n    def __init__(self, plane=None, **kwargs):\n       super().__init__(\"_normalize_plane\", {\"plane\" : plane, **kwargs})\n\nclass plane_line_intersection(_Bosl2Base):\n    def __init__(self, plane=None, line=None, bounded=None, eps=None, **kwargs):\n       super().__init__(\"plane_line_intersection\", {\"plane\" : plane, \"line\" : line, \"bounded\" : bounded, \"eps\" : eps, **kwargs})\n\nclass plane_intersection(_Bosl2Base):\n    def __init__(self, plane1=None, plane2=None, plane3=None, **kwargs):\n       super().__init__(\"plane_intersection\", {\"plane1\" : plane1, \"plane2\" : plane2, \"plane3\" : plane3, **kwargs})\n\nclass plane_line_angle(_Bosl2Base):\n    def __init__(self, plane=None, line=None, **kwargs):\n       super().__init__(\"plane_line_angle\", {\"plane\" : plane, \"line\" : line, **kwargs})\n\nclass plane_closest_point(_Bosl2Base):\n    def __init__(self, plane=None, points=None, **kwargs):\n       super().__init__(\"plane_closest_point\", {\"plane\" : plane, \"points\" : points, **kwargs})\n\nclass point_plane_distance(_Bosl2Base):\n    def __init__(self, plane=None, point=None, **kwargs):\n       super().__init__(\"point_plane_distance\", {\"plane\" : plane, \"point\" : point, **kwargs})\n\nclass _pointlist_greatest_distance(_Bosl2Base):\n    def __init__(self, points=None, plane=None, **kwargs):\n       super().__init__(\"_pointlist_greatest_distance\", {\"points\" : points, \"plane\" : plane, **kwargs})\n\nclass are_points_on_plane(_Bosl2Base):\n    def __init__(self, points=None, plane=None, eps=None, **kwargs):\n       super().__init__(\"are_points_on_plane\", {\"points\" : points, \"plane\" : plane, \"eps\" : eps, **kwargs})\n\nclass _is_point_above_plane(_Bosl2Base):\n    def __init__(self, plane=None, point=None, **kwargs):\n       super().__init__(\"_is_point_above_plane\", {\"plane\" : plane, \"point\" : point, **kwargs})\n\nclass circle_line_intersection(_Bosl2Base):\n    def __init__(self, r=None, cp=None, line=None, bounded=None, d=None, eps=None, **kwargs):\n       super().__init__(\"circle_line_intersection\", {\"r\" : r, \"cp\" : cp, \"line\" : line, \"bounded\" : bounded, \"d\" : d, \"eps\" : eps, **kwargs})\n\nclass _circle_or_sphere_line_intersection(_Bosl2Base):\n    def __init__(self, r=None, cp=None, line=None, bounded=None, d=None, eps=None, **kwargs):\n       super().__init__(\"_circle_or_sphere_line_intersection\", {\"r\" : r, \"cp\" : cp, \"line\" : line, \"bounded\" : bounded, \"d\" : d, \"eps\" : eps, **kwargs})\n\nclass circle_circle_intersection(_Bosl2Base):\n    def __init__(self, r1=None, cp1=None, r2=None, cp2=None, eps=None, d1=None, d2=None, **kwargs):\n       super().__init__(\"circle_circle_intersection\", {\"r1\" : r1, \"cp1\" : cp1, \"r2\" : r2, \"cp2\" : cp2, \"eps\" : eps, \"d1\" : d1, \"d2\" : d2, **kwargs})\n\nclass circle_2tangents(_Bosl2Base):\n    def __init__(self, r=None, pt1=None, pt2=None, pt3=None, tangents=None, d=None, **kwargs):\n       super().__init__(\"circle_2tangents\", {\"r\" : r, \"pt1\" : pt1, \"pt2\" : pt2, \"pt3\" : pt3, \"tangents\" : tangents, \"d\" : d, **kwargs})\n\nclass circle_3points(_Bosl2Base):\n    def __init__(self, pt1=None, pt2=None, pt3=None, **kwargs):\n       super().__init__(\"circle_3points\", {\"pt1\" : pt1, \"pt2\" : pt2, \"pt3\" : pt3, **kwargs})\n\nclass circle_point_tangents(_Bosl2Base):\n    def __init__(self, r=None, cp=None, pt=None, d=None, **kwargs):\n       super().__init__(\"circle_point_tangents\", {\"r\" : r, \"cp\" : cp, \"pt\" : pt, \"d\" : d, **kwargs})\n\nclass circle_circle_tangents(_Bosl2Base):\n    def __init__(self, r1=None, cp1=None, r2=None, cp2=None, d1=None, d2=None, **kwargs):\n       super().__init__(\"circle_circle_tangents\", {\"r1\" : r1, \"cp1\" : cp1, \"r2\" : r2, \"cp2\" : cp2, \"d1\" : d1, \"d2\" : d2, **kwargs})\n\nclass _noncollinear_triple(_Bosl2Base):\n    def __init__(self, points=None, error=None, eps=None, **kwargs):\n       super().__init__(\"_noncollinear_triple\", {\"points\" : points, \"error\" : error, \"eps\" : eps, **kwargs})\n\nclass sphere_line_intersection(_Bosl2Base):\n    def __init__(self, r=None, cp=None, line=None, bounded=None, d=None, eps=None, **kwargs):\n       super().__init__(\"sphere_line_intersection\", {\"r\" : r, \"cp\" : cp, \"line\" : line, \"bounded\" : bounded, \"d\" : d, \"eps\" : eps, **kwargs})\n\nclass polygon_area(_Bosl2Base):\n    def __init__(self, poly=None, signed=None, **kwargs):\n       super().__init__(\"polygon_area\", {\"poly\" : poly, \"signed\" : signed, **kwargs})\n\nclass centroid(_Bosl2Base):\n    def __init__(self, object=None, eps=None, **kwargs):\n       super().__init__(\"centroid\", {\"object\" : object, \"eps\" : eps, **kwargs})\n\nclass _region_centroid(_Bosl2Base):\n    def __init__(self, region=None, eps=None, **kwargs):\n       super().__init__(\"_region_centroid\", {\"region\" : region, \"eps\" : eps, **kwargs})\n\nclass _polygon_centroid(_Bosl2Base):\n    def __init__(self, poly=None, eps=None, **kwargs):\n       super().__init__(\"_polygon_centroid\", {\"poly\" : poly, \"eps\" : eps, **kwargs})\n\nclass polygon_normal(_Bosl2Base):\n    def __init__(self, poly=None, **kwargs):\n       super().__init__(\"polygon_normal\", {\"poly\" : poly, **kwargs})\n\nclass _point_above_below_segment(_Bosl2Base):\n    def __init__(self, point=None, edge=None, **kwargs):\n       super().__init__(\"_point_above_below_segment\", {\"point\" : point, \"edge\" : edge, **kwargs})\n\nclass point_in_polygon(_Bosl2Base):\n    def __init__(self, point=None, poly=None, nonzero=None, eps=None, **kwargs):\n       super().__init__(\"point_in_polygon\", {\"point\" : point, \"poly\" : poly, \"nonzero\" : nonzero, \"eps\" : eps, **kwargs})\n\nclass polygon_line_intersection(_Bosl2Base):\n    def __init__(self, poly=None, line=None, bounded=None, nonzero=None, eps=None, **kwargs):\n       super().__init__(\"polygon_line_intersection\", {\"poly\" : poly, \"line\" : line, \"bounded\" : bounded, \"nonzero\" : nonzero, \"eps\" : eps, **kwargs})\n\nclass _merge_segments(_Bosl2Base):\n    def __init__(self, insegs=None, outsegs=None, eps=None, i=None, **kwargs):\n       super().__init__(\"_merge_segments\", {\"insegs\" : insegs, \"outsegs\" : outsegs, \"eps\" : eps, \"i\" : i, **kwargs})\n\nclass polygon_triangulate(_Bosl2Base):\n    def __init__(self, poly=None, ind=None, error=None, eps=None, **kwargs):\n       super().__init__(\"polygon_triangulate\", {\"poly\" : poly, \"ind\" : ind, \"error\" : error, \"eps\" : eps, **kwargs})\n\nclass _triangulate(_Bosl2Base):\n    def __init__(self, poly=None, ind=None, error=None, eps=None, tris=None, **kwargs):\n       super().__init__(\"_triangulate\", {\"poly\" : poly, \"ind\" : ind, \"error\" : error, \"eps\" : eps, \"tris\" : tris, **kwargs})\n\nclass _get_ear(_Bosl2Base):\n    def __init__(self, poly=None, ind=None, eps=None, _i=None, **kwargs):\n       super().__init__(\"_get_ear\", {\"poly\" : poly, \"ind\" : ind, \"eps\" : eps, \"_i\" : _i, **kwargs})\n\nclass _none_inside(_Bosl2Base):\n    def __init__(self, idxs=None, poly=None, p0=None, p1=None, p2=None, eps=None, i=None, **kwargs):\n       super().__init__(\"_none_inside\", {\"idxs\" : idxs, \"poly\" : poly, \"p0\" : p0, \"p1\" : p1, \"p2\" : p2, \"eps\" : eps, \"i\" : i, **kwargs})\n\nclass is_polygon_clockwise(_Bosl2Base):\n    def __init__(self, poly=None, **kwargs):\n       super().__init__(\"is_polygon_clockwise\", {\"poly\" : poly, **kwargs})\n\nclass clockwise_polygon(_Bosl2Base):\n    def __init__(self, poly=None, **kwargs):\n       super().__init__(\"clockwise_polygon\", {\"poly\" : poly, **kwargs})\n\nclass ccw_polygon(_Bosl2Base):\n    def __init__(self, poly=None, **kwargs):\n       super().__init__(\"ccw_polygon\", {\"poly\" : poly, **kwargs})\n\nclass reverse_polygon(_Bosl2Base):\n    def __init__(self, poly=None, **kwargs):\n       super().__init__(\"reverse_polygon\", {\"poly\" : poly, **kwargs})\n\nclass reindex_polygon(_Bosl2Base):\n    def __init__(self, reference=None, poly=None, return_error=None, **kwargs):\n       super().__init__(\"reindex_polygon\", {\"reference\" : reference, \"poly\" : poly, \"return_error\" : return_error, **kwargs})\n\nclass align_polygon(_Bosl2Base):\n    def __init__(self, reference=None, poly=None, angles=None, cp=None, trans=None, return_ind=None, **kwargs):\n       super().__init__(\"align_polygon\", {\"reference\" : reference, \"poly\" : poly, \"angles\" : angles, \"cp\" : cp, \"trans\" : trans, \"return_ind\" : return_ind, **kwargs})\n\nclass are_polygons_equal(_Bosl2Base):\n    def __init__(self, poly1=None, poly2=None, eps=None, **kwargs):\n       super().__init__(\"are_polygons_equal\", {\"poly1\" : poly1, \"poly2\" : poly2, \"eps\" : eps, **kwargs})\n\nclass _are_polygons_equal(_Bosl2Base):\n    def __init__(self, poly1=None, poly2=None, eps=None, st=None, **kwargs):\n       super().__init__(\"_are_polygons_equal\", {\"poly1\" : poly1, \"poly2\" : poly2, \"eps\" : eps, \"st\" : st, **kwargs})\n\nclass _is_polygon_in_list(_Bosl2Base):\n    def __init__(self, poly=None, polys=None, **kwargs):\n       super().__init__(\"_is_polygon_in_list\", {\"poly\" : poly, \"polys\" : polys, **kwargs})\n\nclass ___is_polygon_in_list(_Bosl2Base):\n    def __init__(self, poly=None, polys=None, i=None, **kwargs):\n       super().__init__(\"___is_polygon_in_list\", {\"poly\" : poly, \"polys\" : polys, \"i\" : i, **kwargs})\n\nclass hull(_Bosl2Base):\n    def __init__(self, points=None, **kwargs):\n       super().__init__(\"hull\", {\"points\" : points, **kwargs})\n\nclass _backtracking(_Bosl2Base):\n    def __init__(self, i=None, points=None, h=None, t=None, m=None, all=None, **kwargs):\n       super().__init__(\"_backtracking\", {\"i\" : i, \"points\" : points, \"h\" : h, \"t\" : t, \"m\" : m, \"all\" : all, **kwargs})\n\nclass _is_cw(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, all=None, **kwargs):\n       super().__init__(\"_is_cw\", {\"a\" : a, \"b\" : b, \"c\" : c, \"all\" : all, **kwargs})\n\nclass hull2d_path(_Bosl2Base):\n    def __init__(self, points=None, all=None, **kwargs):\n       super().__init__(\"hull2d_path\", {\"points\" : points, \"all\" : all, **kwargs})\n\nclass _hull_collinear(_Bosl2Base):\n    def __init__(self, points=None, **kwargs):\n       super().__init__(\"_hull_collinear\", {\"points\" : points, **kwargs})\n\nclass hull3d_faces(_Bosl2Base):\n    def __init__(self, points=None, **kwargs):\n       super().__init__(\"hull3d_faces\", {\"points\" : points, **kwargs})\n\nclass _hull3d_iterative(_Bosl2Base):\n    def __init__(self, points=None, triangles=None, planes=None, remaining=None, _i=None, **kwargs):\n       super().__init__(\"_hull3d_iterative\", {\"points\" : points, \"triangles\" : triangles, \"planes\" : planes, \"remaining\" : remaining, \"_i\" : _i, **kwargs})\n\nclass _remove_internal_edges(_Bosl2Base):\n    def __init__(self, halfedges=None, **kwargs):\n       super().__init__(\"_remove_internal_edges\", {\"halfedges\" : halfedges, **kwargs})\n\nclass _find_first_noncoplanar(_Bosl2Base):\n    def __init__(self, plane=None, points=None, i=None, **kwargs):\n       super().__init__(\"_find_first_noncoplanar\", {\"plane\" : plane, \"points\" : points, \"i\" : i, **kwargs})\n\nclass is_polygon_convex(_Bosl2Base):\n    def __init__(self, poly=None, eps=None, **kwargs):\n       super().__init__(\"is_polygon_convex\", {\"poly\" : poly, \"eps\" : eps, **kwargs})\n\nclass convex_distance(_Bosl2Base):\n    def __init__(self, points1=None, points2=None, eps=None, **kwargs):\n       super().__init__(\"convex_distance\", {\"points1\" : points1, \"points2\" : points2, \"eps\" : eps, **kwargs})\n\nclass _GJK_distance(_Bosl2Base):\n    def __init__(self, points1=None, points2=None, eps=None, lbd=None, d=None, simplex=None, **kwargs):\n       super().__init__(\"_GJK_distance\", {\"points1\" : points1, \"points2\" : points2, \"eps\" : eps, \"lbd\" : lbd, \"d\" : d, \"simplex\" : simplex, **kwargs})\n\nclass convex_collision(_Bosl2Base):\n    def __init__(self, points1=None, points2=None, eps=None, **kwargs):\n       super().__init__(\"convex_collision\", {\"points1\" : points1, \"points2\" : points2, \"eps\" : eps, **kwargs})\n\nclass _GJK_collide(_Bosl2Base):\n    def __init__(self, points1=None, points2=None, d=None, simplex=None, eps=None, **kwargs):\n       super().__init__(\"_GJK_collide\", {\"points1\" : points1, \"points2\" : points2, \"d\" : d, \"simplex\" : simplex, \"eps\" : eps, **kwargs})\n\nclass _closest_simplex(_Bosl2Base):\n    def __init__(self, s=None, eps=None, **kwargs):\n       super().__init__(\"_closest_simplex\", {\"s\" : s, \"eps\" : eps, **kwargs})\n\nclass _closest_s1(_Bosl2Base):\n    def __init__(self, s=None, eps=None, **kwargs):\n       super().__init__(\"_closest_s1\", {\"s\" : s, \"eps\" : eps, **kwargs})\n\nclass _closest_s2(_Bosl2Base):\n    def __init__(self, s=None, eps=None, **kwargs):\n       super().__init__(\"_closest_s2\", {\"s\" : s, \"eps\" : eps, **kwargs})\n\nclass _closest_s3(_Bosl2Base):\n    def __init__(self, s=None, eps=None, **kwargs):\n       super().__init__(\"_closest_s3\", {\"s\" : s, \"eps\" : eps, **kwargs})\n\nclass _tri_normal(_Bosl2Base):\n    def __init__(self, tri=None, **kwargs):\n       super().__init__(\"_tri_normal\", {\"tri\" : tri, **kwargs})\n\nclass _support_diff(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, d=None, **kwargs):\n       super().__init__(\"_support_diff\", {\"p1\" : p1, \"p2\" : p2, \"d\" : d, **kwargs})\n\nclass rot_decode(_Bosl2Base):\n    def __init__(self, M=None, long=None, **kwargs):\n       super().__init__(\"rot_decode\", {\"M\" : M, \"long\" : long, **kwargs})\n\nclass show_plane(_Bosl2Base):\n    def __init__(self, plane=None, size=None, offset=None, **kwargs):\n       super().__init__(\"show_plane\", {\"plane\" : plane, \"size\" : size, \"offset\" : offset, **kwargs})\n\nclass hull_points(_Bosl2Base):\n    def __init__(self, points=None, fast=None, **kwargs):\n       super().__init__(\"hull_points\", {\"points\" : points, \"fast\" : fast, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/hinges.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/hinges.scad'}\", False)\n\nclass knuckle_hinge(_Bosl2Base):\n    def __init__(self, length=None, segs=None, offset=None, inner=None, arm_height=None, arm_angle=None, gap=None, seg_ratio=None, knuckle_diam=None, pin_diam=None, fill=None, clear_top=None, round_bot=None, round_top=None, pin_fn=None, clearance=None, in_place=None, clip=None, tap_depth=None, screw_head=None, screw_tolerance=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"knuckle_hinge\", {\"length\" : length, \"segs\" : segs, \"offset\" : offset, \"inner\" : inner, \"arm_height\" : arm_height, \"arm_angle\" : arm_angle, \"gap\" : gap, \"seg_ratio\" : seg_ratio, \"knuckle_diam\" : knuckle_diam, \"pin_diam\" : pin_diam, \"fill\" : fill, \"clear_top\" : clear_top, \"round_bot\" : round_bot, \"round_top\" : round_top, \"pin_fn\" : pin_fn, \"clearance\" : clearance, \"in_place\" : in_place, \"clip\" : clip, \"tap_depth\" : tap_depth, \"screw_head\" : screw_head, \"screw_tolerance\" : screw_tolerance, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\nclass knuckle_hinge(_Bosl2Base):\n    def __init__(self, length=None, segs=None, offset=None, inner=None, arm_height=None, arm_angle=None, gap=None, seg_ratio=None, knuckle_diam=None, pin_diam=None, fill=None, clear_top=None, round_bot=None, round_top=None, pin_fn=None, clearance=None, teardrop=None, in_place=None, clip=None, tap_depth=None, screw_head=None, screw_tolerance=None, knuckle_clearance=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"knuckle_hinge\", {\"length\" : length, \"segs\" : segs, \"offset\" : offset, \"inner\" : inner, \"arm_height\" : arm_height, \"arm_angle\" : arm_angle, \"gap\" : gap, \"seg_ratio\" : seg_ratio, \"knuckle_diam\" : knuckle_diam, \"pin_diam\" : pin_diam, \"fill\" : fill, \"clear_top\" : clear_top, \"round_bot\" : round_bot, \"round_top\" : round_top, \"pin_fn\" : pin_fn, \"clearance\" : clearance, \"teardrop\" : teardrop, \"in_place\" : in_place, \"clip\" : clip, \"tap_depth\" : tap_depth, \"screw_head\" : screw_head, \"screw_tolerance\" : screw_tolerance, \"knuckle_clearance\" : knuckle_clearance, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\nclass _knuckle_hinge_profile(_Bosl2Base):\n    def __init__(self, offset=None, arm_height=None, arm_angle=None, knuckle_diam=None, pin_diam=None, fill=None, clear_top=None, round_bot=None, round_top=None, pin_fn=None, clearance=None, tearspin=None, clip=None, **kwargs):\n       super().__init__(\"_knuckle_hinge_profile\", {\"offset\" : offset, \"arm_height\" : arm_height, \"arm_angle\" : arm_angle, \"knuckle_diam\" : knuckle_diam, \"pin_diam\" : pin_diam, \"fill\" : fill, \"clear_top\" : clear_top, \"round_bot\" : round_bot, \"round_top\" : round_top, \"pin_fn\" : pin_fn, \"clearance\" : clearance, \"tearspin\" : tearspin, \"clip\" : clip, **kwargs})\n\nclass living_hinge_mask(_Bosl2Base):\n    def __init__(self, l=None, thick=None, layerheight=None, foldangle=None, hingegap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"living_hinge_mask\", {\"l\" : l, \"thick\" : thick, \"layerheight\" : layerheight, \"foldangle\" : foldangle, \"hingegap\" : hingegap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass folding_hinge_mask(_Bosl2Base):\n    def __init__(self, l=None, thick=None, layerheight=None, foldangle=None, hingegap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"folding_hinge_mask\", {\"l\" : l, \"thick\" : thick, \"layerheight\" : layerheight, \"foldangle\" : foldangle, \"hingegap\" : hingegap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass apply_folding_hinges_and_snaps(_Bosl2Base):\n    def __init__(self, thick=None, foldangle=None, hinges=None, snaps=None, sockets=None, snaplen=None, snapdiam=None, hingegap=None, layerheight=None, **kwargs):\n       super().__init__(\"apply_folding_hinges_and_snaps\", {\"thick\" : thick, \"foldangle\" : foldangle, \"hinges\" : hinges, \"snaps\" : snaps, \"sockets\" : sockets, \"snaplen\" : snaplen, \"snapdiam\" : snapdiam, \"hingegap\" : hingegap, \"layerheight\" : layerheight, **kwargs})\n\nclass snap_lock(_Bosl2Base):\n    def __init__(self, thick=None, snaplen=None, snapdiam=None, layerheight=None, foldangle=None, hingegap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"snap_lock\", {\"thick\" : thick, \"snaplen\" : snaplen, \"snapdiam\" : snapdiam, \"layerheight\" : layerheight, \"foldangle\" : foldangle, \"hingegap\" : hingegap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass snap_socket(_Bosl2Base):\n    def __init__(self, thick=None, snaplen=None, snapdiam=None, layerheight=None, foldangle=None, hingegap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"snap_socket\", {\"thick\" : thick, \"snaplen\" : snaplen, \"snapdiam\" : snapdiam, \"layerheight\" : layerheight, \"foldangle\" : foldangle, \"hingegap\" : hingegap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/isosurface.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/isosurface.scad'}\", False)\n\n_MCEdgeVertexIndices = _OpenSCADConstant('_MCEdgeVertexIndices')\n_MCTriangleTable = _OpenSCADConstant('_MCTriangleTable')\n_MCTriangleTable_reverse = _OpenSCADConstant('_MCTriangleTable_reverse')\n_MCFaceVertexIndices = _OpenSCADConstant('_MCFaceVertexIndices')\n_MCClipEdgeVertexIndices = _OpenSCADConstant('_MCClipEdgeVertexIndices')\n_MCClipTriangleTable = _OpenSCADConstant('_MCClipTriangleTable')\n_MTEdgeVertexIndices = _OpenSCADConstant('_MTEdgeVertexIndices')\n_MTriSegmentTable = _OpenSCADConstant('_MTriSegmentTable')\n_MTriSegmentTable_reverse = _OpenSCADConstant('_MTriSegmentTable_reverse')\n_MSquareSegmentTable = _OpenSCADConstant('_MSquareSegmentTable')\n_MSquareSegmentTable_reverse = _OpenSCADConstant('_MSquareSegmentTable_reverse')\n_metaball_vnf = _OpenSCADConstant('_metaball_vnf')\nclass _cubeindex(_Bosl2Base):\n    def __init__(self, f=None, isoval=None, **kwargs):\n       super().__init__(\"_cubeindex\", {\"f\" : f, \"isoval\" : isoval, **kwargs})\n\nclass _clipfacindex(_Bosl2Base):\n    def __init__(self, f=None, isovalmin=None, isovalmax=None, **kwargs):\n       super().__init__(\"_clipfacindex\", {\"f\" : f, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, **kwargs})\n\nclass _bbox_faces(_Bosl2Base):\n    def __init__(self, v0=None, voxsize=None, bbox=None, **kwargs):\n       super().__init__(\"_bbox_faces\", {\"v0\" : v0, \"voxsize\" : voxsize, \"bbox\" : bbox, **kwargs})\n\nclass _isosurface_cubes(_Bosl2Base):\n    def __init__(self, voxsize=None, bbox=None, fieldarray=None, fieldfunc=None, isovalmin=None, isovalmax=None, closed=None, **kwargs):\n       super().__init__(\"_isosurface_cubes\", {\"voxsize\" : voxsize, \"bbox\" : bbox, \"fieldarray\" : fieldarray, \"fieldfunc\" : fieldfunc, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, \"closed\" : closed, **kwargs})\n\nclass _isosurface_triangles(_Bosl2Base):\n    def __init__(self, cubelist=None, voxsize=None, isovalmin=None, isovalmax=None, tritablemin=None, tritablemax=None, **kwargs):\n       super().__init__(\"_isosurface_triangles\", {\"cubelist\" : cubelist, \"voxsize\" : voxsize, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, \"tritablemin\" : tritablemin, \"tritablemax\" : tritablemax, **kwargs})\n\nclass _clipfacevertices(_Bosl2Base):\n    def __init__(self, vcube=None, fld=None, bbface=None, isovalmin=None, isovalmax=None, **kwargs):\n       super().__init__(\"_clipfacevertices\", {\"vcube\" : vcube, \"fld\" : fld, \"bbface\" : bbface, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, **kwargs})\n\nclass _mctrindex(_Bosl2Base):\n    def __init__(self, f=None, isoval=None, **kwargs):\n       super().__init__(\"_mctrindex\", {\"f\" : f, \"isoval\" : isoval, **kwargs})\n\nclass _bbox_sides(_Bosl2Base):\n    def __init__(self, pc=None, pixsize=None, bbox=None, **kwargs):\n       super().__init__(\"_bbox_sides\", {\"pc\" : pc, \"pixsize\" : pixsize, \"bbox\" : bbox, **kwargs})\n\nclass _contour_pixels(_Bosl2Base):\n    def __init__(self, pixsize=None, bbox=None, fieldarray=None, fieldfunc=None, pixcenters=None, isovalmin=None, isovalmax=None, closed=None, **kwargs):\n       super().__init__(\"_contour_pixels\", {\"pixsize\" : pixsize, \"bbox\" : bbox, \"fieldarray\" : fieldarray, \"fieldfunc\" : fieldfunc, \"pixcenters\" : pixcenters, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, \"closed\" : closed, **kwargs})\n\nclass _contour_vertices(_Bosl2Base):\n    def __init__(self, pxlist=None, pxsize=None, isovalmin=None, isovalmax=None, segtablemin=None, segtablemax=None, **kwargs):\n       super().__init__(\"_contour_vertices\", {\"pxlist\" : pxlist, \"pxsize\" : pxsize, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, \"segtablemin\" : segtablemin, \"segtablemax\" : segtablemax, **kwargs})\n\nclass mb_cutoff(_Bosl2Base):\n    def __init__(self, dist=None, cutoff=None, **kwargs):\n       super().__init__(\"mb_cutoff\", {\"dist\" : dist, \"cutoff\" : cutoff, **kwargs})\n\nclass _mb_sphere_basic(_Bosl2Base):\n    def __init__(self, point=None, r=None, neg=None, **kwargs):\n       super().__init__(\"_mb_sphere_basic\", {\"point\" : point, \"r\" : r, \"neg\" : neg, **kwargs})\n\nclass _mb_sphere_influence(_Bosl2Base):\n    def __init__(self, point=None, r=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_sphere_influence\", {\"point\" : point, \"r\" : r, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_sphere_cutoff(_Bosl2Base):\n    def __init__(self, point=None, r=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_sphere_cutoff\", {\"point\" : point, \"r\" : r, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass _mb_sphere_full(_Bosl2Base):\n    def __init__(self, point=None, r=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_sphere_full\", {\"point\" : point, \"r\" : r, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_sphere(_Bosl2Base):\n    def __init__(self, r=None, cutoff=None, influence=None, negative=None, hide_debug=None, d=None, **kwargs):\n       super().__init__(\"mb_sphere\", {\"r\" : r, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d\" : d, **kwargs})\n\nclass _mb_cuboid_basic(_Bosl2Base):\n    def __init__(self, point=None, inv_size=None, xp=None, neg=None, **kwargs):\n       super().__init__(\"_mb_cuboid_basic\", {\"point\" : point, \"inv_size\" : inv_size, \"xp\" : xp, \"neg\" : neg, **kwargs})\n\nclass _mb_cuboid_influence(_Bosl2Base):\n    def __init__(self, point=None, inv_size=None, xp=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_cuboid_influence\", {\"point\" : point, \"inv_size\" : inv_size, \"xp\" : xp, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_cuboid_cutoff(_Bosl2Base):\n    def __init__(self, point=None, inv_size=None, xp=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_cuboid_cutoff\", {\"point\" : point, \"inv_size\" : inv_size, \"xp\" : xp, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass _mb_cuboid_full(_Bosl2Base):\n    def __init__(self, point=None, inv_size=None, xp=None, ex=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_cuboid_full\", {\"point\" : point, \"inv_size\" : inv_size, \"xp\" : xp, \"ex\" : ex, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass mb_cuboid(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, cutoff=None, influence=None, negative=None, hide_debug=None, **kwargs):\n       super().__init__(\"mb_cuboid\", {\"size\" : size, \"squareness\" : squareness, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, **kwargs})\n\nclass _revsurf_basic(_Bosl2Base):\n    def __init__(self, point=None, path=None, coef=None, neg=None, maxdist=None, **kwargs):\n       super().__init__(\"_revsurf_basic\", {\"point\" : point, \"path\" : path, \"coef\" : coef, \"neg\" : neg, \"maxdist\" : maxdist, **kwargs})\n\nclass _revsurf_influence(_Bosl2Base):\n    def __init__(self, point=None, path=None, coef=None, exp=None, neg=None, maxdist=None, **kwargs):\n       super().__init__(\"_revsurf_influence\", {\"point\" : point, \"path\" : path, \"coef\" : coef, \"exp\" : exp, \"neg\" : neg, \"maxdist\" : maxdist, **kwargs})\n\nclass _revsurf_cutoff(_Bosl2Base):\n    def __init__(self, point=None, path=None, coef=None, cutoff=None, neg=None, maxdist=None, **kwargs):\n       super().__init__(\"_revsurf_cutoff\", {\"point\" : point, \"path\" : path, \"coef\" : coef, \"cutoff\" : cutoff, \"neg\" : neg, \"maxdist\" : maxdist, **kwargs})\n\nclass _revsurf_full(_Bosl2Base):\n    def __init__(self, point=None, path=None, coef=None, cutoff=None, exp=None, neg=None, maxdist=None, **kwargs):\n       super().__init__(\"_revsurf_full\", {\"point\" : point, \"path\" : path, \"coef\" : coef, \"cutoff\" : cutoff, \"exp\" : exp, \"neg\" : neg, \"maxdist\" : maxdist, **kwargs})\n\nclass mb_cyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, rounding=None, r1=None, r2=None, l=None, height=None, length=None, d1=None, d2=None, d=None, cutoff=None, influence=None, negative=None, hide_debug=None, **kwargs):\n       super().__init__(\"mb_cyl\", {\"h\" : h, \"r\" : r, \"rounding\" : rounding, \"r1\" : r1, \"r2\" : r2, \"l\" : l, \"height\" : height, \"length\" : length, \"d1\" : d1, \"d2\" : d2, \"d\" : d, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, **kwargs})\n\nclass _mb_disk_basic(_Bosl2Base):\n    def __init__(self, point=None, hl=None, r=None, neg=None, **kwargs):\n       super().__init__(\"_mb_disk_basic\", {\"point\" : point, \"hl\" : hl, \"r\" : r, \"neg\" : neg, **kwargs})\n\nclass _mb_disk_influence(_Bosl2Base):\n    def __init__(self, point=None, hl=None, r=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_disk_influence\", {\"point\" : point, \"hl\" : hl, \"r\" : r, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_disk_cutoff(_Bosl2Base):\n    def __init__(self, point=None, hl=None, r=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_disk_cutoff\", {\"point\" : point, \"hl\" : hl, \"r\" : r, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass _mb_disk_full(_Bosl2Base):\n    def __init__(self, point=None, hl=None, r=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_disk_full\", {\"point\" : point, \"hl\" : hl, \"r\" : r, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_disk(_Bosl2Base):\n    def __init__(self, h=None, r=None, cutoff=None, influence=None, negative=None, hide_debug=None, d=None, l=None, height=None, length=None, **kwargs):\n       super().__init__(\"mb_disk\", {\"h\" : h, \"r\" : r, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d\" : d, \"l\" : l, \"height\" : height, \"length\" : length, **kwargs})\n\nclass _mb_capsule_basic(_Bosl2Base):\n    def __init__(self, dv=None, hl=None, r=None, neg=None, **kwargs):\n       super().__init__(\"_mb_capsule_basic\", {\"dv\" : dv, \"hl\" : hl, \"r\" : r, \"neg\" : neg, **kwargs})\n\nclass _mb_capsule_influence(_Bosl2Base):\n    def __init__(self, dv=None, hl=None, r=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_capsule_influence\", {\"dv\" : dv, \"hl\" : hl, \"r\" : r, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_capsule_cutoff(_Bosl2Base):\n    def __init__(self, dv=None, hl=None, r=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_capsule_cutoff\", {\"dv\" : dv, \"hl\" : hl, \"r\" : r, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass _mb_capsule_full(_Bosl2Base):\n    def __init__(self, dv=None, hl=None, r=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_capsule_full\", {\"dv\" : dv, \"hl\" : hl, \"r\" : r, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_capsule(_Bosl2Base):\n    def __init__(self, h=None, r=None, cutoff=None, influence=None, negative=None, hide_debug=None, d=None, l=None, height=None, length=None, **kwargs):\n       super().__init__(\"mb_capsule\", {\"h\" : h, \"r\" : r, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d\" : d, \"l\" : l, \"height\" : height, \"length\" : length, **kwargs})\n\nclass mb_connector(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, r=None, cutoff=None, influence=None, negative=None, hide_debug=None, d=None, **kwargs):\n       super().__init__(\"mb_connector\", {\"p1\" : p1, \"p2\" : p2, \"r\" : r, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d\" : d, **kwargs})\n\nclass _mb_torus_basic(_Bosl2Base):\n    def __init__(self, point=None, rmaj=None, rmin=None, neg=None, **kwargs):\n       super().__init__(\"_mb_torus_basic\", {\"point\" : point, \"rmaj\" : rmaj, \"rmin\" : rmin, \"neg\" : neg, **kwargs})\n\nclass _mb_torus_influence(_Bosl2Base):\n    def __init__(self, point=None, rmaj=None, rmin=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_torus_influence\", {\"point\" : point, \"rmaj\" : rmaj, \"rmin\" : rmin, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_torus_cutoff(_Bosl2Base):\n    def __init__(self, point=None, rmaj=None, rmin=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_torus_cutoff\", {\"point\" : point, \"rmaj\" : rmaj, \"rmin\" : rmin, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass _mb_torus_full(_Bosl2Base):\n    def __init__(self, point=None, rmaj=None, rmin=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_torus_full\", {\"point\" : point, \"rmaj\" : rmaj, \"rmin\" : rmin, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_torus(_Bosl2Base):\n    def __init__(self, r_maj=None, r_min=None, cutoff=None, influence=None, negative=None, hide_debug=None, d_maj=None, d_min=None, _or=None, od=None, ir=None, id=None, **kwargs):\n       super().__init__(\"mb_torus\", {\"r_maj\" : r_maj, \"r_min\" : r_min, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d_maj\" : d_maj, \"d_min\" : d_min, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, **kwargs})\n\nclass _mb_octahedron_basic(_Bosl2Base):\n    def __init__(self, point=None, invr=None, xp=None, neg=None, **kwargs):\n       super().__init__(\"_mb_octahedron_basic\", {\"point\" : point, \"invr\" : invr, \"xp\" : xp, \"neg\" : neg, **kwargs})\n\nclass _mb_octahedron_influence(_Bosl2Base):\n    def __init__(self, point=None, invr=None, xp=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_octahedron_influence\", {\"point\" : point, \"invr\" : invr, \"xp\" : xp, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_octahedron_cutoff(_Bosl2Base):\n    def __init__(self, point=None, invr=None, xp=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_octahedron_cutoff\", {\"point\" : point, \"invr\" : invr, \"xp\" : xp, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass _mb_octahedron_full(_Bosl2Base):\n    def __init__(self, point=None, invr=None, xp=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_octahedron_full\", {\"point\" : point, \"invr\" : invr, \"xp\" : xp, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_octahedron(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, cutoff=None, influence=None, negative=None, hide_debug=None, **kwargs):\n       super().__init__(\"mb_octahedron\", {\"size\" : size, \"squareness\" : squareness, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, **kwargs})\n\nclass _debug_cube(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, **kwargs):\n       super().__init__(\"_debug_cube\", {\"size\" : size, \"squareness\" : squareness, **kwargs})\n\nclass _debug_octahedron(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, **kwargs):\n       super().__init__(\"_debug_octahedron\", {\"size\" : size, \"squareness\" : squareness, **kwargs})\n\nclass debug_tetra(_Bosl2Base):\n    def __init__(self, r=None, **kwargs):\n       super().__init__(\"debug_tetra\", {\"r\" : r, **kwargs})\n\nclass metaballs(_Bosl2Base):\n    def __init__(self, spec=None, bounding_box=None, voxel_size=None, voxel_count=None, isovalue=None, closed=None, exact_bounds=None, show_stats=None, _debug=None, **kwargs):\n       super().__init__(\"metaballs\", {\"spec\" : spec, \"bounding_box\" : bounding_box, \"voxel_size\" : voxel_size, \"voxel_count\" : voxel_count, \"isovalue\" : isovalue, \"closed\" : closed, \"exact_bounds\" : exact_bounds, \"show_stats\" : show_stats, \"_debug\" : _debug, **kwargs})\n\nclass _mb_unwind_list(_Bosl2Base):\n    def __init__(self, list=None, parent_trans=None, depth=None, twoD=None, **kwargs):\n       super().__init__(\"_mb_unwind_list\", {\"list\" : list, \"parent_trans\" : parent_trans, \"depth\" : depth, \"twoD\" : twoD, **kwargs})\n\nclass _mb_circle_full(_Bosl2Base):\n    def __init__(self, point=None, r=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_circle_full\", {\"point\" : point, \"r\" : r, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_circle(_Bosl2Base):\n    def __init__(self, r=None, cutoff=None, influence=None, negative=None, hide_debug=None, d=None, **kwargs):\n       super().__init__(\"mb_circle\", {\"r\" : r, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d\" : d, **kwargs})\n\nclass _mb_squircle_full(_Bosl2Base):\n    def __init__(self, point=None, inv_size=None, xp=None, ex=None, cutoff=None, neg=None, **kwargs):\n       super().__init__(\"_mb_squircle_full\", {\"point\" : point, \"inv_size\" : inv_size, \"xp\" : xp, \"ex\" : ex, \"cutoff\" : cutoff, \"neg\" : neg, **kwargs})\n\nclass mb_rect(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, cutoff=None, influence=None, negative=None, hide_debug=None, **kwargs):\n       super().__init__(\"mb_rect\", {\"size\" : size, \"squareness\" : squareness, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, **kwargs})\n\nclass _trapsurf_full(_Bosl2Base):\n    def __init__(self, point=None, path=None, coef=None, cutoff=None, exp=None, neg=None, maxdist=None, **kwargs):\n       super().__init__(\"_trapsurf_full\", {\"point\" : point, \"path\" : path, \"coef\" : coef, \"cutoff\" : cutoff, \"exp\" : exp, \"neg\" : neg, \"maxdist\" : maxdist, **kwargs})\n\nclass mb_trapezoid(_Bosl2Base):\n    def __init__(self, h=None, w1=None, w2=None, ang=None, rounding=None, w=None, cutoff=None, influence=None, negative=None, hide_debug=None, **kwargs):\n       super().__init__(\"mb_trapezoid\", {\"h\" : h, \"w1\" : w1, \"w2\" : w2, \"ang\" : ang, \"rounding\" : rounding, \"w\" : w, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, **kwargs})\n\nclass _mb_stadium_full(_Bosl2Base):\n    def __init__(self, dv=None, hl=None, r=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_stadium_full\", {\"dv\" : dv, \"hl\" : hl, \"r\" : r, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass _mb_stadium_sideways_full(_Bosl2Base):\n    def __init__(self, dv=None, hl=None, r=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_stadium_sideways_full\", {\"dv\" : dv, \"hl\" : hl, \"r\" : r, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_stadium(_Bosl2Base):\n    def __init__(self, size=None, cutoff=None, influence=None, negative=None, hide_debug=None, **kwargs):\n       super().__init__(\"mb_stadium\", {\"size\" : size, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, **kwargs})\n\nclass mb_connector2d(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, r=None, cutoff=None, influence=None, negative=None, hide_debug=None, d=None, **kwargs):\n       super().__init__(\"mb_connector2d\", {\"p1\" : p1, \"p2\" : p2, \"r\" : r, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d\" : d, **kwargs})\n\nclass _mb_ring_full(_Bosl2Base):\n    def __init__(self, point=None, rmaj=None, rmin=None, cutoff=None, ex=None, neg=None, **kwargs):\n       super().__init__(\"_mb_ring_full\", {\"point\" : point, \"rmaj\" : rmaj, \"rmin\" : rmin, \"cutoff\" : cutoff, \"ex\" : ex, \"neg\" : neg, **kwargs})\n\nclass mb_ring(_Bosl2Base):\n    def __init__(self, r1=None, r2=None, cutoff=None, influence=None, negative=None, hide_debug=None, d1=None, d2=None, **kwargs):\n       super().__init__(\"mb_ring\", {\"r1\" : r1, \"r2\" : r2, \"cutoff\" : cutoff, \"influence\" : influence, \"negative\" : negative, \"hide_debug\" : hide_debug, \"d1\" : d1, \"d2\" : d2, **kwargs})\n\nclass metaballs2d(_Bosl2Base):\n    def __init__(self, spec=None, bounding_box=None, pixel_size=None, pixel_count=None, isovalue=None, closed=None, use_centers=None, smoothing=None, exact_bounds=None, show_stats=None, _debug=None, **kwargs):\n       super().__init__(\"metaballs2d\", {\"spec\" : spec, \"bounding_box\" : bounding_box, \"pixel_size\" : pixel_size, \"pixel_count\" : pixel_count, \"isovalue\" : isovalue, \"closed\" : closed, \"use_centers\" : use_centers, \"smoothing\" : smoothing, \"exact_bounds\" : exact_bounds, \"show_stats\" : show_stats, \"_debug\" : _debug, **kwargs})\n\nclass _metaballs2dfield(_Bosl2Base):\n    def __init__(self, funclist=None, transmatrix=None, bbox=None, pixsize=None, nballs=None, **kwargs):\n       super().__init__(\"_metaballs2dfield\", {\"funclist\" : funclist, \"transmatrix\" : transmatrix, \"bbox\" : bbox, \"pixsize\" : pixsize, \"nballs\" : nballs, **kwargs})\n\nclass isosurface(_Bosl2Base):\n    def __init__(self, f=None, isovalue=None, bounding_box=None, voxel_size=None, voxel_count=None, reverse=None, closed=None, exact_bounds=None, show_stats=None, _mball=None, **kwargs):\n       super().__init__(\"isosurface\", {\"f\" : f, \"isovalue\" : isovalue, \"bounding_box\" : bounding_box, \"voxel_size\" : voxel_size, \"voxel_count\" : voxel_count, \"reverse\" : reverse, \"closed\" : closed, \"exact_bounds\" : exact_bounds, \"show_stats\" : show_stats, \"_mball\" : _mball, **kwargs})\n\nclass _getautovoxsize(_Bosl2Base):\n    def __init__(self, bbox=None, numvoxels=None, **kwargs):\n       super().__init__(\"_getautovoxsize\", {\"bbox\" : bbox, \"numvoxels\" : numvoxels, **kwargs})\n\nclass _getvoxsize(_Bosl2Base):\n    def __init__(self, voxel_size=None, bounding_box=None, exactbounds=None, **kwargs):\n       super().__init__(\"_getvoxsize\", {\"voxel_size\" : voxel_size, \"bounding_box\" : bounding_box, \"exactbounds\" : exactbounds, **kwargs})\n\nclass _getbbox(_Bosl2Base):\n    def __init__(self, voxel_size=None, bounding_box=None, exactbounds=None, f=None, **kwargs):\n       super().__init__(\"_getbbox\", {\"voxel_size\" : voxel_size, \"bounding_box\" : bounding_box, \"exactbounds\" : exactbounds, \"f\" : f, **kwargs})\n\nclass _showstats_isosurface(_Bosl2Base):\n    def __init__(self, voxsize=None, bbox=None, isoval=None, cubes=None, triangles=None, faces=None, **kwargs):\n       super().__init__(\"_showstats_isosurface\", {\"voxsize\" : voxsize, \"bbox\" : bbox, \"isoval\" : isoval, \"cubes\" : cubes, \"triangles\" : triangles, \"faces\" : faces, **kwargs})\n\nclass contour(_Bosl2Base):\n    def __init__(self, f=None, isovalue=None, bounding_box=None, pixel_size=None, pixel_count=None, use_centers=None, smoothing=None, closed=None, exact_bounds=None, show_stats=None, _mball=None, **kwargs):\n       super().__init__(\"contour\", {\"f\" : f, \"isovalue\" : isovalue, \"bounding_box\" : bounding_box, \"pixel_size\" : pixel_size, \"pixel_count\" : pixel_count, \"use_centers\" : use_centers, \"smoothing\" : smoothing, \"closed\" : closed, \"exact_bounds\" : exact_bounds, \"show_stats\" : show_stats, \"_mball\" : _mball, **kwargs})\n\nclass _region_smooth(_Bosl2Base):\n    def __init__(self, reg=None, passes=None, bbox=None, count=None, **kwargs):\n       super().__init__(\"_region_smooth\", {\"reg\" : reg, \"passes\" : passes, \"bbox\" : bbox, \"count\" : count, **kwargs})\n\nclass _is_pt_on_bbox(_Bosl2Base):\n    def __init__(self, p=None, bbox=None, **kwargs):\n       super().__init__(\"_is_pt_on_bbox\", {\"p\" : p, \"bbox\" : bbox, **kwargs})\n\nclass _pathpts_on_bbox(_Bosl2Base):\n    def __init__(self, path=None, bbox=None, i=None, count=None, **kwargs):\n       super().__init__(\"_pathpts_on_bbox\", {\"path\" : path, \"bbox\" : bbox, \"i\" : i, \"count\" : count, **kwargs})\n\nclass _getautopixsize(_Bosl2Base):\n    def __init__(self, bbox=None, numpixels=None, **kwargs):\n       super().__init__(\"_getautopixsize\", {\"bbox\" : bbox, \"numpixels\" : numpixels, **kwargs})\n\nclass _getpixsize(_Bosl2Base):\n    def __init__(self, pixel_size=None, bounding_box=None, exactbounds=None, **kwargs):\n       super().__init__(\"_getpixsize\", {\"pixel_size\" : pixel_size, \"bounding_box\" : bounding_box, \"exactbounds\" : exactbounds, **kwargs})\n\nclass _getbbox2d(_Bosl2Base):\n    def __init__(self, pixel_size=None, bounding_box=None, exactbounds=None, f=None, **kwargs):\n       super().__init__(\"_getbbox2d\", {\"pixel_size\" : pixel_size, \"bounding_box\" : bounding_box, \"exactbounds\" : exactbounds, \"f\" : f, **kwargs})\n\nclass _showstats_contour(_Bosl2Base):\n    def __init__(self, pixelsize=None, bbox=None, isovalmin=None, isovalmax=None, pixels=None, pathlist=None, **kwargs):\n       super().__init__(\"_showstats_contour\", {\"pixelsize\" : pixelsize, \"bbox\" : bbox, \"isovalmin\" : isovalmin, \"isovalmax\" : isovalmax, \"pixels\" : pixels, \"pathlist\" : pathlist, **kwargs})\n\nclass metaballs(_Bosl2Base):\n    def __init__(self, spec=None, bounding_box=None, voxel_size=None, voxel_count=None, isovalue=None, closed=None, exact_bounds=None, convexity=None, cp=None, anchor=None, spin=None, orient=None, atype=None, show_stats=None, show_box=None, debug=None, **kwargs):\n       super().__init__(\"metaballs\", {\"spec\" : spec, \"bounding_box\" : bounding_box, \"voxel_size\" : voxel_size, \"voxel_count\" : voxel_count, \"isovalue\" : isovalue, \"closed\" : closed, \"exact_bounds\" : exact_bounds, \"convexity\" : convexity, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"show_stats\" : show_stats, \"show_box\" : show_box, \"debug\" : debug, **kwargs})\n\nclass metaballs2d(_Bosl2Base):\n    def __init__(self, spec=None, bounding_box=None, pixel_size=None, pixel_count=None, isovalue=None, use_centers=None, smoothing=None, exact_bounds=None, convexity=None, cp=None, anchor=None, spin=None, atype=None, show_stats=None, show_box=None, debug=None, **kwargs):\n       super().__init__(\"metaballs2d\", {\"spec\" : spec, \"bounding_box\" : bounding_box, \"pixel_size\" : pixel_size, \"pixel_count\" : pixel_count, \"isovalue\" : isovalue, \"use_centers\" : use_centers, \"smoothing\" : smoothing, \"exact_bounds\" : exact_bounds, \"convexity\" : convexity, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, \"show_stats\" : show_stats, \"show_box\" : show_box, \"debug\" : debug, **kwargs})\n\nclass isosurface(_Bosl2Base):\n    def __init__(self, f=None, isovalue=None, bounding_box=None, voxel_size=None, voxel_count=None, reverse=None, closed=None, exact_bounds=None, convexity=None, cp=None, anchor=None, spin=None, orient=None, atype=None, show_stats=None, show_box=None, _mball=None, **kwargs):\n       super().__init__(\"isosurface\", {\"f\" : f, \"isovalue\" : isovalue, \"bounding_box\" : bounding_box, \"voxel_size\" : voxel_size, \"voxel_count\" : voxel_count, \"reverse\" : reverse, \"closed\" : closed, \"exact_bounds\" : exact_bounds, \"convexity\" : convexity, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"show_stats\" : show_stats, \"show_box\" : show_box, \"_mball\" : _mball, **kwargs})\n\nclass contour(_Bosl2Base):\n    def __init__(self, f=None, isovalue=None, bounding_box=None, pixel_size=None, pixel_count=None, use_centers=None, smoothing=None, exact_bounds=None, cp=None, anchor=None, spin=None, atype=None, show_stats=None, show_box=None, _mball=None, **kwargs):\n       super().__init__(\"contour\", {\"f\" : f, \"isovalue\" : isovalue, \"bounding_box\" : bounding_box, \"pixel_size\" : pixel_size, \"pixel_count\" : pixel_count, \"use_centers\" : use_centers, \"smoothing\" : smoothing, \"exact_bounds\" : exact_bounds, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, \"show_stats\" : show_stats, \"show_box\" : show_box, \"_mball\" : _mball, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/joiners.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/joiners.scad'}\", False)\n\nclass half_joiner_clear(_Bosl2Base):\n    def __init__(self, l=None, w=None, ang=None, clearance=None, overlap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"half_joiner_clear\", {\"l\" : l, \"w\" : w, \"ang\" : ang, \"clearance\" : clearance, \"overlap\" : overlap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass half_joiner(_Bosl2Base):\n    def __init__(self, l=None, w=None, base=None, ang=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"half_joiner\", {\"l\" : l, \"w\" : w, \"base\" : base, \"ang\" : ang, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass half_joiner2(_Bosl2Base):\n    def __init__(self, l=None, w=None, base=None, ang=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"half_joiner2\", {\"l\" : l, \"w\" : w, \"base\" : base, \"ang\" : ang, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass joiner_clear(_Bosl2Base):\n    def __init__(self, l=None, w=None, ang=None, clearance=None, overlap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"joiner_clear\", {\"l\" : l, \"w\" : w, \"ang\" : ang, \"clearance\" : clearance, \"overlap\" : overlap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass joiner(_Bosl2Base):\n    def __init__(self, l=None, w=None, base=None, ang=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"joiner\", {\"l\" : l, \"w\" : w, \"base\" : base, \"ang\" : ang, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass dovetail(_Bosl2Base):\n    def __init__(self, gender=None, width=None, height=None, slide=None, h=None, w=None, angle=None, slope=None, thickness=None, taper=None, back_width=None, chamfer=None, extra=None, r=None, radius=None, round=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"dovetail\", {\"gender\" : gender, \"width\" : width, \"height\" : height, \"slide\" : slide, \"h\" : h, \"w\" : w, \"angle\" : angle, \"slope\" : slope, \"thickness\" : thickness, \"taper\" : taper, \"back_width\" : back_width, \"chamfer\" : chamfer, \"extra\" : extra, \"r\" : r, \"radius\" : radius, \"round\" : round, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _pin_size(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"_pin_size\", {\"size\" : size, **kwargs})\n\nclass snap_pin(_Bosl2Base):\n    def __init__(self, size=None, r=None, radius=None, d=None, diameter=None, l=None, length=None, nub_depth=None, snap=None, thickness=None, clearance=None, preload=None, pointed=None, anchor=None, spin=None, orient=None, center=None, **kwargs):\n       super().__init__(\"snap_pin\", {\"size\" : size, \"r\" : r, \"radius\" : radius, \"d\" : d, \"diameter\" : diameter, \"l\" : l, \"length\" : length, \"nub_depth\" : nub_depth, \"snap\" : snap, \"thickness\" : thickness, \"clearance\" : clearance, \"preload\" : preload, \"pointed\" : pointed, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"center\" : center, **kwargs})\n\nclass snap_pin_socket(_Bosl2Base):\n    def __init__(self, size=None, r=None, radius=None, l=None, length=None, d=None, diameter=None, nub_depth=None, snap=None, fixed=None, pointed=None, fins=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"snap_pin_socket\", {\"size\" : size, \"r\" : r, \"radius\" : radius, \"l\" : l, \"length\" : length, \"d\" : d, \"diameter\" : diameter, \"nub_depth\" : nub_depth, \"snap\" : snap, \"fixed\" : fixed, \"pointed\" : pointed, \"fins\" : fins, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rabbit_clip(_Bosl2Base):\n    def __init__(self, type=None, length=None, width=None, snap=None, thickness=None, depth=None, compression=None, clearance=None, lock=None, lock_clearance=None, splinesteps=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"rabbit_clip\", {\"type\" : type, \"length\" : length, \"width\" : width, \"snap\" : snap, \"thickness\" : thickness, \"depth\" : depth, \"compression\" : compression, \"clearance\" : clearance, \"lock\" : lock, \"lock_clearance\" : lock_clearance, \"splinesteps\" : splinesteps, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\nclass half_joiner_clear(_Bosl2Base):\n    def __init__(self, l=None, w=None, ang=None, clearance=None, overlap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"half_joiner_clear\", {\"l\" : l, \"w\" : w, \"ang\" : ang, \"clearance\" : clearance, \"overlap\" : overlap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass half_joiner(_Bosl2Base):\n    def __init__(self, l=None, w=None, base=None, ang=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"half_joiner\", {\"l\" : l, \"w\" : w, \"base\" : base, \"ang\" : ang, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass half_joiner2(_Bosl2Base):\n    def __init__(self, l=None, w=None, base=None, ang=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"half_joiner2\", {\"l\" : l, \"w\" : w, \"base\" : base, \"ang\" : ang, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass joiner_clear(_Bosl2Base):\n    def __init__(self, l=None, w=None, ang=None, clearance=None, overlap=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"joiner_clear\", {\"l\" : l, \"w\" : w, \"ang\" : ang, \"clearance\" : clearance, \"overlap\" : overlap, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass joiner(_Bosl2Base):\n    def __init__(self, l=None, w=None, base=None, ang=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"joiner\", {\"l\" : l, \"w\" : w, \"base\" : base, \"ang\" : ang, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass dovetail(_Bosl2Base):\n    def __init__(self, gender=None, width=None, height=None, slide=None, h=None, w=None, angle=None, slope=None, thickness=None, taper=None, back_width=None, chamfer=None, extra=None, r=None, radius=None, round=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"dovetail\", {\"gender\" : gender, \"width\" : width, \"height\" : height, \"slide\" : slide, \"h\" : h, \"w\" : w, \"angle\" : angle, \"slope\" : slope, \"thickness\" : thickness, \"taper\" : taper, \"back_width\" : back_width, \"chamfer\" : chamfer, \"extra\" : extra, \"r\" : r, \"radius\" : radius, \"round\" : round, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _pin_nub(_Bosl2Base):\n    def __init__(self, r=None, nub=None, h=None, **kwargs):\n       super().__init__(\"_pin_nub\", {\"r\" : r, \"nub\" : nub, \"h\" : h, **kwargs})\n\nclass _pin_slot(_Bosl2Base):\n    def __init__(self, l=None, r=None, t=None, d=None, nub=None, depth=None, stretch=None, **kwargs):\n       super().__init__(\"_pin_slot\", {\"l\" : l, \"r\" : r, \"t\" : t, \"d\" : d, \"nub\" : nub, \"depth\" : depth, \"stretch\" : stretch, **kwargs})\n\nclass _pin_shaft(_Bosl2Base):\n    def __init__(self, r=None, lStraight=None, nub=None, nubscale=None, stretch=None, d=None, pointed=None, **kwargs):\n       super().__init__(\"_pin_shaft\", {\"r\" : r, \"lStraight\" : lStraight, \"nub\" : nub, \"nubscale\" : nubscale, \"stretch\" : stretch, \"d\" : d, \"pointed\" : pointed, **kwargs})\n\nclass snap_pin(_Bosl2Base):\n    def __init__(self, size=None, r=None, radius=None, d=None, diameter=None, l=None, length=None, nub_depth=None, snap=None, thickness=None, clearance=None, preload=None, pointed=None, anchor=None, spin=None, orient=None, center=None, **kwargs):\n       super().__init__(\"snap_pin\", {\"size\" : size, \"r\" : r, \"radius\" : radius, \"d\" : d, \"diameter\" : diameter, \"l\" : l, \"length\" : length, \"nub_depth\" : nub_depth, \"snap\" : snap, \"thickness\" : thickness, \"clearance\" : clearance, \"preload\" : preload, \"pointed\" : pointed, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"center\" : center, **kwargs})\n\nclass snap_pin_socket(_Bosl2Base):\n    def __init__(self, size=None, r=None, radius=None, l=None, length=None, d=None, diameter=None, nub_depth=None, snap=None, fixed=None, pointed=None, fins=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"snap_pin_socket\", {\"size\" : size, \"r\" : r, \"radius\" : radius, \"l\" : l, \"length\" : length, \"d\" : d, \"diameter\" : diameter, \"nub_depth\" : nub_depth, \"snap\" : snap, \"fixed\" : fixed, \"pointed\" : pointed, \"fins\" : fins, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rabbit_clip(_Bosl2Base):\n    def __init__(self, type=None, length=None, width=None, snap=None, thickness=None, depth=None, compression=None, clearance=None, lock=None, lock_clearance=None, splinesteps=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"rabbit_clip\", {\"type\" : type, \"length\" : length, \"width\" : width, \"snap\" : snap, \"thickness\" : thickness, \"depth\" : depth, \"compression\" : compression, \"clearance\" : clearance, \"lock\" : lock, \"lock_clearance\" : lock_clearance, \"splinesteps\" : splinesteps, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\nclass hirth(_Bosl2Base):\n    def __init__(self, n=None, ir=None, _or=None, id=None, od=None, tooth_angle=None, cone_angle=None, chamfer=None, rounding=None, base=None, crop=None, skew=None, rot=None, orient=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"hirth\", {\"n\" : n, \"ir\" : ir, \"_or\" : _or, \"id\" : id, \"od\" : od, \"tooth_angle\" : tooth_angle, \"cone_angle\" : cone_angle, \"chamfer\" : chamfer, \"rounding\" : rounding, \"base\" : base, \"crop\" : crop, \"skew\" : skew, \"rot\" : rot, \"orient\" : orient, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/linalg.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/linalg.scad'}\", False)\n\nclass is_matrix(_Bosl2Base):\n    def __init__(self, A=None, m=None, n=None, square=None, **kwargs):\n       super().__init__(\"is_matrix\", {\"A\" : A, \"m\" : m, \"n\" : n, \"square\" : square, **kwargs})\n\nclass is_matrix_symmetric(_Bosl2Base):\n    def __init__(self, A=None, eps=None, **kwargs):\n       super().__init__(\"is_matrix_symmetric\", {\"A\" : A, \"eps\" : eps, **kwargs})\n\nclass is_rotation(_Bosl2Base):\n    def __init__(self, A=None, dim=None, centered=None, **kwargs):\n       super().__init__(\"is_rotation\", {\"A\" : A, \"dim\" : dim, \"centered\" : centered, **kwargs})\n\nclass echo_matrix(_Bosl2Base):\n    def __init__(self, M=None, description=None, sig=None, sep=None, eps=None, **kwargs):\n       super().__init__(\"echo_matrix\", {\"M\" : M, \"description\" : description, \"sig\" : sig, \"sep\" : sep, \"eps\" : eps, **kwargs})\n\nclass column(_Bosl2Base):\n    def __init__(self, M=None, i=None, **kwargs):\n       super().__init__(\"column\", {\"M\" : M, \"i\" : i, **kwargs})\n\nclass submatrix(_Bosl2Base):\n    def __init__(self, M=None, idx1=None, idx2=None, **kwargs):\n       super().__init__(\"submatrix\", {\"M\" : M, \"idx1\" : idx1, \"idx2\" : idx2, **kwargs})\n\nclass ident(_Bosl2Base):\n    def __init__(self, n=None, **kwargs):\n       super().__init__(\"ident\", {\"n\" : n, **kwargs})\n\nclass diagonal_matrix(_Bosl2Base):\n    def __init__(self, diag=None, offdiag=None, **kwargs):\n       super().__init__(\"diagonal_matrix\", {\"diag\" : diag, \"offdiag\" : offdiag, **kwargs})\n\nclass transpose(_Bosl2Base):\n    def __init__(self, M=None, reverse=None, **kwargs):\n       super().__init__(\"transpose\", {\"M\" : M, \"reverse\" : reverse, **kwargs})\n\nclass outer_product(_Bosl2Base):\n    def __init__(self, u=None, v=None, **kwargs):\n       super().__init__(\"outer_product\", {\"u\" : u, \"v\" : v, **kwargs})\n\nclass submatrix_set(_Bosl2Base):\n    def __init__(self, M=None, A=None, m=None, n=None, **kwargs):\n       super().__init__(\"submatrix_set\", {\"M\" : M, \"A\" : A, \"m\" : m, \"n\" : n, **kwargs})\n\nclass hstack(_Bosl2Base):\n    def __init__(self, M1=None, M2=None, M3=None, **kwargs):\n       super().__init__(\"hstack\", {\"M1\" : M1, \"M2\" : M2, \"M3\" : M3, **kwargs})\n\nclass block_matrix(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"block_matrix\", {\"M\" : M, **kwargs})\n\nclass linear_solve(_Bosl2Base):\n    def __init__(self, A=None, b=None, pivot=None, **kwargs):\n       super().__init__(\"linear_solve\", {\"A\" : A, \"b\" : b, \"pivot\" : pivot, **kwargs})\n\nclass linear_solve3(_Bosl2Base):\n    def __init__(self, A=None, b=None, **kwargs):\n       super().__init__(\"linear_solve3\", {\"A\" : A, \"b\" : b, **kwargs})\n\nclass matrix_inverse(_Bosl2Base):\n    def __init__(self, A=None, **kwargs):\n       super().__init__(\"matrix_inverse\", {\"A\" : A, **kwargs})\n\nclass rot_inverse(_Bosl2Base):\n    def __init__(self, T=None, **kwargs):\n       super().__init__(\"rot_inverse\", {\"T\" : T, **kwargs})\n\nclass null_space(_Bosl2Base):\n    def __init__(self, A=None, eps=None, **kwargs):\n       super().__init__(\"null_space\", {\"A\" : A, \"eps\" : eps, **kwargs})\n\nclass qr_factor(_Bosl2Base):\n    def __init__(self, A=None, pivot=None, **kwargs):\n       super().__init__(\"qr_factor\", {\"A\" : A, \"pivot\" : pivot, **kwargs})\n\nclass _qr_factor(_Bosl2Base):\n    def __init__(self, A=None, Q=None, P=None, pivot=None, col=None, m=None, n=None, **kwargs):\n       super().__init__(\"_qr_factor\", {\"A\" : A, \"Q\" : Q, \"P\" : P, \"pivot\" : pivot, \"col\" : col, \"m\" : m, \"n\" : n, **kwargs})\n\nclass _swap_matrix(_Bosl2Base):\n    def __init__(self, n=None, i=None, j=None, **kwargs):\n       super().__init__(\"_swap_matrix\", {\"n\" : n, \"i\" : i, \"j\" : j, **kwargs})\n\nclass back_substitute(_Bosl2Base):\n    def __init__(self, R=None, b=None, transpose=None, **kwargs):\n       super().__init__(\"back_substitute\", {\"R\" : R, \"b\" : b, \"transpose\" : transpose, **kwargs})\n\nclass _back_substitute(_Bosl2Base):\n    def __init__(self, R=None, b=None, x=None, **kwargs):\n       super().__init__(\"_back_substitute\", {\"R\" : R, \"b\" : b, \"x\" : x, **kwargs})\n\nclass cholesky(_Bosl2Base):\n    def __init__(self, A=None, **kwargs):\n       super().__init__(\"cholesky\", {\"A\" : A, **kwargs})\n\nclass _cholesky(_Bosl2Base):\n    def __init__(self, A=None, L=None, n=None, **kwargs):\n       super().__init__(\"_cholesky\", {\"A\" : A, \"L\" : L, \"n\" : n, **kwargs})\n\nclass det2(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"det2\", {\"M\" : M, **kwargs})\n\nclass det3(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"det3\", {\"M\" : M, **kwargs})\n\nclass det4(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"det4\", {\"M\" : M, **kwargs})\n\nclass determinant(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"determinant\", {\"M\" : M, **kwargs})\n\nclass norm_fro(_Bosl2Base):\n    def __init__(self, A=None, **kwargs):\n       super().__init__(\"norm_fro\", {\"A\" : A, **kwargs})\n\nclass matrix_trace(_Bosl2Base):\n    def __init__(self, M=None, **kwargs):\n       super().__init__(\"matrix_trace\", {\"M\" : M, **kwargs})\n\nclass echo_matrix(_Bosl2Base):\n    def __init__(self, M=None, description=None, sig=None, sep=None, eps=None, **kwargs):\n       super().__init__(\"echo_matrix\", {\"M\" : M, \"description\" : description, \"sig\" : sig, \"sep\" : sep, \"eps\" : eps, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/linear_bearings.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/linear_bearings.scad'}\", False)\n\nclass lmXuu_info(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"lmXuu_info\", {\"size\" : size, **kwargs})\n\nclass linear_bearing_housing(_Bosl2Base):\n    def __init__(self, d=None, l=None, tab=None, gap=None, wall=None, tabwall=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"linear_bearing_housing\", {\"d\" : d, \"l\" : l, \"tab\" : tab, \"gap\" : gap, \"wall\" : wall, \"tabwall\" : tabwall, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass linear_bearing(_Bosl2Base):\n    def __init__(self, l=None, od=None, id=None, length=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"linear_bearing\", {\"l\" : l, \"od\" : od, \"id\" : id, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass lmXuu_housing(_Bosl2Base):\n    def __init__(self, size=None, tab=None, gap=None, wall=None, tabwall=None, screwsize=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"lmXuu_housing\", {\"size\" : size, \"tab\" : tab, \"gap\" : gap, \"wall\" : wall, \"tabwall\" : tabwall, \"screwsize\" : screwsize, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass lmXuu_bearing(_Bosl2Base):\n    def __init__(self, size=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"lmXuu_bearing\", {\"size\" : size, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/lists.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/lists.scad'}\", False)\n\nclass is_homogeneous(_Bosl2Base):\n    def __init__(self, l=None, depth=None, **kwargs):\n       super().__init__(\"is_homogeneous\", {\"l\" : l, \"depth\" : depth, **kwargs})\n\nclass is_homogenous(_Bosl2Base):\n    def __init__(self, l=None, depth=None, **kwargs):\n       super().__init__(\"is_homogenous\", {\"l\" : l, \"depth\" : depth, **kwargs})\n\nclass _same_type(_Bosl2Base):\n    def __init__(self, a=None, b=None, depth=None, **kwargs):\n       super().__init__(\"_same_type\", {\"a\" : a, \"b\" : b, \"depth\" : depth, **kwargs})\n\nclass min_length(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"min_length\", {\"list\" : list, **kwargs})\n\nclass max_length(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"max_length\", {\"list\" : list, **kwargs})\n\nclass _list_shape_recurse(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_list_shape_recurse\", {\"v\" : v, **kwargs})\n\nclass _list_shape_recurse(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_list_shape_recurse\", {\"v\" : v, **kwargs})\n\nclass list_shape(_Bosl2Base):\n    def __init__(self, v=None, depth=None, **kwargs):\n       super().__init__(\"list_shape\", {\"v\" : v, \"depth\" : depth, **kwargs})\n\nclass in_list(_Bosl2Base):\n    def __init__(self, val=None, list=None, idx=None, **kwargs):\n       super().__init__(\"in_list\", {\"val\" : val, \"list\" : list, \"idx\" : idx, **kwargs})\n\nclass select(_Bosl2Base):\n    def __init__(self, list=None, start=None, end=None, **kwargs):\n       super().__init__(\"select\", {\"list\" : list, \"start\" : start, \"end\" : end, **kwargs})\n\nclass slice(_Bosl2Base):\n    def __init__(self, list=None, start=None, end=None, **kwargs):\n       super().__init__(\"slice\", {\"list\" : list, \"start\" : start, \"end\" : end, **kwargs})\n\nclass last(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"last\", {\"list\" : list, **kwargs})\n\nclass list_head(_Bosl2Base):\n    def __init__(self, list=None, to=None, **kwargs):\n       super().__init__(\"list_head\", {\"list\" : list, \"to\" : to, **kwargs})\n\nclass list_tail(_Bosl2Base):\n    def __init__(self, list=None, _from=None, **kwargs):\n       super().__init__(\"list_tail\", {\"list\" : list, \"_from\" : _from, **kwargs})\n\nclass bselect(_Bosl2Base):\n    def __init__(self, list=None, index=None, **kwargs):\n       super().__init__(\"bselect\", {\"list\" : list, \"index\" : index, **kwargs})\n\nclass repeat(_Bosl2Base):\n    def __init__(self, val=None, n=None, i=None, **kwargs):\n       super().__init__(\"repeat\", {\"val\" : val, \"n\" : n, \"i\" : i, **kwargs})\n\nclass list_bset(_Bosl2Base):\n    def __init__(self, indexset=None, valuelist=None, dflt=None, **kwargs):\n       super().__init__(\"list_bset\", {\"indexset\" : indexset, \"valuelist\" : valuelist, \"dflt\" : dflt, **kwargs})\n\nclass list(_Bosl2Base):\n    def __init__(self, l=None, **kwargs):\n       super().__init__(\"list\", {\"l\" : l, **kwargs})\n\nclass force_list(_Bosl2Base):\n    def __init__(self, value=None, n=None, fill=None, **kwargs):\n       super().__init__(\"force_list\", {\"value\" : value, \"n\" : n, \"fill\" : fill, **kwargs})\n\nclass reverse(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"reverse\", {\"list\" : list, **kwargs})\n\nclass list_rotate(_Bosl2Base):\n    def __init__(self, list=None, n=None, **kwargs):\n       super().__init__(\"list_rotate\", {\"list\" : list, \"n\" : n, **kwargs})\n\nclass shuffle(_Bosl2Base):\n    def __init__(self, list=None, seed=None, **kwargs):\n       super().__init__(\"shuffle\", {\"list\" : list, \"seed\" : seed, **kwargs})\n\nclass repeat_entries(_Bosl2Base):\n    def __init__(self, list=None, N=None, exact=None, **kwargs):\n       super().__init__(\"repeat_entries\", {\"list\" : list, \"N\" : N, \"exact\" : exact, **kwargs})\n\nclass list_pad(_Bosl2Base):\n    def __init__(self, list=None, minlen=None, fill=None, **kwargs):\n       super().__init__(\"list_pad\", {\"list\" : list, \"minlen\" : minlen, \"fill\" : fill, **kwargs})\n\nclass list_set(_Bosl2Base):\n    def __init__(self, list=None, indices=None, values=None, dflt=None, minlen=None, **kwargs):\n       super().__init__(\"list_set\", {\"list\" : list, \"indices\" : indices, \"values\" : values, \"dflt\" : dflt, \"minlen\" : minlen, **kwargs})\n\nclass list_insert(_Bosl2Base):\n    def __init__(self, list=None, indices=None, values=None, **kwargs):\n       super().__init__(\"list_insert\", {\"list\" : list, \"indices\" : indices, \"values\" : values, **kwargs})\n\nclass list_remove(_Bosl2Base):\n    def __init__(self, list=None, ind=None, **kwargs):\n       super().__init__(\"list_remove\", {\"list\" : list, \"ind\" : ind, **kwargs})\n\nclass list_remove_values(_Bosl2Base):\n    def __init__(self, list=None, values=None, all=None, **kwargs):\n       super().__init__(\"list_remove_values\", {\"list\" : list, \"values\" : values, \"all\" : all, **kwargs})\n\nclass idx(_Bosl2Base):\n    def __init__(self, list=None, s=None, e=None, step=None, **kwargs):\n       super().__init__(\"idx\", {\"list\" : list, \"s\" : s, \"e\" : e, \"step\" : step, **kwargs})\n\nclass pair(_Bosl2Base):\n    def __init__(self, list=None, wrap=None, **kwargs):\n       super().__init__(\"pair\", {\"list\" : list, \"wrap\" : wrap, **kwargs})\n\nclass triplet(_Bosl2Base):\n    def __init__(self, list=None, wrap=None, **kwargs):\n       super().__init__(\"triplet\", {\"list\" : list, \"wrap\" : wrap, **kwargs})\n\nclass combinations(_Bosl2Base):\n    def __init__(self, l=None, n=None, _s=None, **kwargs):\n       super().__init__(\"combinations\", {\"l\" : l, \"n\" : n, \"_s\" : _s, **kwargs})\n\nclass permutations(_Bosl2Base):\n    def __init__(self, l=None, n=None, **kwargs):\n       super().__init__(\"permutations\", {\"l\" : l, \"n\" : n, **kwargs})\n\nclass list_to_matrix(_Bosl2Base):\n    def __init__(self, v=None, cnt=None, dflt=None, **kwargs):\n       super().__init__(\"list_to_matrix\", {\"v\" : v, \"cnt\" : cnt, \"dflt\" : dflt, **kwargs})\n\nclass flatten(_Bosl2Base):\n    def __init__(self, l=None, **kwargs):\n       super().__init__(\"flatten\", {\"l\" : l, **kwargs})\n\nclass full_flatten(_Bosl2Base):\n    def __init__(self, l=None, **kwargs):\n       super().__init__(\"full_flatten\", {\"l\" : l, **kwargs})\n\nclass set_union(_Bosl2Base):\n    def __init__(self, a=None, b=None, get_indices=None, **kwargs):\n       super().__init__(\"set_union\", {\"a\" : a, \"b\" : b, \"get_indices\" : get_indices, **kwargs})\n\nclass set_difference(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"set_difference\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass set_intersection(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"set_intersection\", {\"a\" : a, \"b\" : b, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/masks2d.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/masks2d.scad'}\", False)\n\nclass _inset_corner(_Bosl2Base):\n    def __init__(self, corner=None, mask_angle=None, inset=None, excess=None, flat_top=None, **kwargs):\n       super().__init__(\"_inset_corner\", {\"corner\" : corner, \"mask_angle\" : mask_angle, \"inset\" : inset, \"excess\" : excess, \"flat_top\" : flat_top, **kwargs})\n\nclass mask2d_roundover(_Bosl2Base):\n    def __init__(self, r=None, inset=None, mask_angle=None, excess=None, clip_angle=None, flat_top=None, quarter_round=None, d=None, h=None, height=None, cut=None, joint=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_roundover\", {\"r\" : r, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"clip_angle\" : clip_angle, \"flat_top\" : flat_top, \"quarter_round\" : quarter_round, \"d\" : d, \"h\" : h, \"height\" : height, \"cut\" : cut, \"joint\" : joint, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_teardrop(_Bosl2Base):\n    def __init__(self, r=None, angle=None, inset=None, mask_angle=None, excess=None, flat_top=None, d=None, h=None, height=None, cut=None, joint=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_teardrop\", {\"r\" : r, \"angle\" : angle, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"flat_top\" : flat_top, \"d\" : d, \"h\" : h, \"height\" : height, \"cut\" : cut, \"joint\" : joint, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_cove(_Bosl2Base):\n    def __init__(self, r=None, inset=None, mask_angle=None, excess=None, flat_top=None, d=None, h=None, height=None, bulge=None, quarter_round=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_cove\", {\"r\" : r, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"flat_top\" : flat_top, \"d\" : d, \"h\" : h, \"height\" : height, \"bulge\" : bulge, \"quarter_round\" : quarter_round, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_chamfer(_Bosl2Base):\n    def __init__(self, edge=None, angle=None, inset=None, excess=None, mask_angle=None, flat_top=None, x=None, y=None, h=None, w=None, width=None, height=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_chamfer\", {\"edge\" : edge, \"angle\" : angle, \"inset\" : inset, \"excess\" : excess, \"mask_angle\" : mask_angle, \"flat_top\" : flat_top, \"x\" : x, \"y\" : y, \"h\" : h, \"w\" : w, \"width\" : width, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_rabbet(_Bosl2Base):\n    def __init__(self, size=None, mask_angle=None, excess=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_rabbet\", {\"size\" : size, \"mask_angle\" : mask_angle, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_dovetail(_Bosl2Base):\n    def __init__(self, edge=None, angle=None, slope=None, shelf=None, inset=None, mask_angle=None, excess=None, flat_top=None, w=None, width=None, h=None, height=None, anchor=None, spin=None, x=None, y=None, **kwargs):\n       super().__init__(\"mask2d_dovetail\", {\"edge\" : edge, \"angle\" : angle, \"slope\" : slope, \"shelf\" : shelf, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"flat_top\" : flat_top, \"w\" : w, \"width\" : width, \"h\" : h, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"x\" : x, \"y\" : y, **kwargs})\n\nclass mask2d_ogee(_Bosl2Base):\n    def __init__(self, pattern=None, excess=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_ogee\", {\"pattern\" : pattern, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_roundover(_Bosl2Base):\n    def __init__(self, r=None, inset=None, mask_angle=None, excess=None, flat_top=None, d=None, h=None, height=None, cut=None, quarter_round=None, joint=None, anchor=None, spin=None, clip_angle=None, **kwargs):\n       super().__init__(\"mask2d_roundover\", {\"r\" : r, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"flat_top\" : flat_top, \"d\" : d, \"h\" : h, \"height\" : height, \"cut\" : cut, \"quarter_round\" : quarter_round, \"joint\" : joint, \"anchor\" : anchor, \"spin\" : spin, \"clip_angle\" : clip_angle, **kwargs})\n\nclass mask2d_teardrop(_Bosl2Base):\n    def __init__(self, r=None, angle=None, mask_angle=None, excess=None, inset=None, flat_top=None, height=None, d=None, h=None, cut=None, joint=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_teardrop\", {\"r\" : r, \"angle\" : angle, \"mask_angle\" : mask_angle, \"excess\" : excess, \"inset\" : inset, \"flat_top\" : flat_top, \"height\" : height, \"d\" : d, \"h\" : h, \"cut\" : cut, \"joint\" : joint, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_cove(_Bosl2Base):\n    def __init__(self, r=None, inset=None, mask_angle=None, excess=None, flat_top=None, bulge=None, d=None, h=None, height=None, quarter_round=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_cove\", {\"r\" : r, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"flat_top\" : flat_top, \"bulge\" : bulge, \"d\" : d, \"h\" : h, \"height\" : height, \"quarter_round\" : quarter_round, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_chamfer(_Bosl2Base):\n    def __init__(self, edge=None, angle=None, inset=None, excess=None, mask_angle=None, flat_top=None, x=None, y=None, h=None, w=None, height=None, width=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_chamfer\", {\"edge\" : edge, \"angle\" : angle, \"inset\" : inset, \"excess\" : excess, \"mask_angle\" : mask_angle, \"flat_top\" : flat_top, \"x\" : x, \"y\" : y, \"h\" : h, \"w\" : w, \"height\" : height, \"width\" : width, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_rabbet(_Bosl2Base):\n    def __init__(self, size=None, mask_angle=None, excess=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_rabbet\", {\"size\" : size, \"mask_angle\" : mask_angle, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass mask2d_dovetail(_Bosl2Base):\n    def __init__(self, edge=None, angle=None, shelf=None, inset=None, mask_angle=None, excess=None, flat_top=None, w=None, h=None, width=None, height=None, slope=None, anchor=None, spin=None, x=None, y=None, **kwargs):\n       super().__init__(\"mask2d_dovetail\", {\"edge\" : edge, \"angle\" : angle, \"shelf\" : shelf, \"inset\" : inset, \"mask_angle\" : mask_angle, \"excess\" : excess, \"flat_top\" : flat_top, \"w\" : w, \"h\" : h, \"width\" : width, \"height\" : height, \"slope\" : slope, \"anchor\" : anchor, \"spin\" : spin, \"x\" : x, \"y\" : y, **kwargs})\n\nclass mask2d_ogee(_Bosl2Base):\n    def __init__(self, pattern=None, excess=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"mask2d_ogee\", {\"pattern\" : pattern, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/masks3d.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/masks3d.scad'}\", False)\n\nclass chamfer_edge_mask(_Bosl2Base):\n    def __init__(self, l=None, chamfer=None, excess=None, h=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"chamfer_edge_mask\", {\"l\" : l, \"chamfer\" : chamfer, \"excess\" : excess, \"h\" : h, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass chamfer_corner_mask(_Bosl2Base):\n    def __init__(self, chamfer=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"chamfer_corner_mask\", {\"chamfer\" : chamfer, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass chamfer_cylinder_mask(_Bosl2Base):\n    def __init__(self, r=None, chamfer=None, d=None, ang=None, from_end=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"chamfer_cylinder_mask\", {\"r\" : r, \"chamfer\" : chamfer, \"d\" : d, \"ang\" : ang, \"from_end\" : from_end, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_edge_mask(_Bosl2Base):\n    def __init__(self, l=None, r=None, ang=None, r1=None, r2=None, d=None, d1=None, d2=None, excess=None, anchor=None, spin=None, orient=None, h=None, height=None, length=None, **kwargs):\n       super().__init__(\"rounding_edge_mask\", {\"l\" : l, \"r\" : r, \"ang\" : ang, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"h\" : h, \"height\" : height, \"length\" : length, **kwargs})\n\nclass rounding_corner_mask(_Bosl2Base):\n    def __init__(self, r=None, ang=None, d=None, style=None, excess=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_corner_mask\", {\"r\" : r, \"ang\" : ang, \"d\" : d, \"style\" : style, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_angled_edge_mask(_Bosl2Base):\n    def __init__(self, h=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, ang=None, anchor=None, spin=None, orient=None, l=None, height=None, length=None, **kwargs):\n       super().__init__(\"rounding_angled_edge_mask\", {\"h\" : h, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"ang\" : ang, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"l\" : l, \"height\" : height, \"length\" : length, **kwargs})\n\nclass rounding_angled_corner_mask(_Bosl2Base):\n    def __init__(self, r=None, ang=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_angled_corner_mask\", {\"r\" : r, \"ang\" : ang, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_cylinder_mask(_Bosl2Base):\n    def __init__(self, r=None, rounding=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_cylinder_mask\", {\"r\" : r, \"rounding\" : rounding, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_hole_mask(_Bosl2Base):\n    def __init__(self, r=None, rounding=None, excess=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_hole_mask\", {\"r\" : r, \"rounding\" : rounding, \"excess\" : excess, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass teardrop_edge_mask(_Bosl2Base):\n    def __init__(self, l=None, r=None, angle=None, excess=None, d=None, anchor=None, spin=None, orient=None, h=None, height=None, length=None, **kwargs):\n       super().__init__(\"teardrop_edge_mask\", {\"l\" : l, \"r\" : r, \"angle\" : angle, \"excess\" : excess, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"h\" : h, \"height\" : height, \"length\" : length, **kwargs})\n\nclass teardrop_corner_mask(_Bosl2Base):\n    def __init__(self, r=None, angle=None, excess=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"teardrop_corner_mask\", {\"r\" : r, \"angle\" : angle, \"excess\" : excess, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass chamfer_edge_mask(_Bosl2Base):\n    def __init__(self, l=None, chamfer=None, excess=None, h=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"chamfer_edge_mask\", {\"l\" : l, \"chamfer\" : chamfer, \"excess\" : excess, \"h\" : h, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass chamfer_corner_mask(_Bosl2Base):\n    def __init__(self, chamfer=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"chamfer_corner_mask\", {\"chamfer\" : chamfer, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass chamfer_cylinder_mask(_Bosl2Base):\n    def __init__(self, r=None, chamfer=None, d=None, ang=None, from_end=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"chamfer_cylinder_mask\", {\"r\" : r, \"chamfer\" : chamfer, \"d\" : d, \"ang\" : ang, \"from_end\" : from_end, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_edge_mask(_Bosl2Base):\n    def __init__(self, l=None, r=None, ang=None, r1=None, r2=None, excess=None, d1=None, d2=None, d=None, length=None, h=None, height=None, anchor=None, spin=None, orient=None, rounding=None, rounding1=None, rounding2=None, chamfer=None, chamfer1=None, chamfer2=None, _remove_tag=None, **kwargs):\n       super().__init__(\"rounding_edge_mask\", {\"l\" : l, \"r\" : r, \"ang\" : ang, \"r1\" : r1, \"r2\" : r2, \"excess\" : excess, \"d1\" : d1, \"d2\" : d2, \"d\" : d, \"length\" : length, \"h\" : h, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"_remove_tag\" : _remove_tag, **kwargs})\n\nclass rounding_corner_mask(_Bosl2Base):\n    def __init__(self, r=None, ang=None, d=None, style=None, excess=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_corner_mask\", {\"r\" : r, \"ang\" : ang, \"d\" : d, \"style\" : style, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_angled_edge_mask(_Bosl2Base):\n    def __init__(self, h=None, r=None, r1=None, r2=None, d=None, d1=None, d2=None, ang=None, anchor=None, spin=None, orient=None, l=None, height=None, length=None, **kwargs):\n       super().__init__(\"rounding_angled_edge_mask\", {\"h\" : h, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"ang\" : ang, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"l\" : l, \"height\" : height, \"length\" : length, **kwargs})\n\nclass rounding_angled_corner_mask(_Bosl2Base):\n    def __init__(self, r=None, ang=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_angled_corner_mask\", {\"r\" : r, \"ang\" : ang, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_cylinder_mask(_Bosl2Base):\n    def __init__(self, r=None, rounding=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_cylinder_mask\", {\"r\" : r, \"rounding\" : rounding, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rounding_hole_mask(_Bosl2Base):\n    def __init__(self, r=None, rounding=None, excess=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rounding_hole_mask\", {\"r\" : r, \"rounding\" : rounding, \"excess\" : excess, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass teardrop_edge_mask(_Bosl2Base):\n    def __init__(self, l=None, r=None, angle=None, excess=None, d=None, anchor=None, spin=None, orient=None, h=None, height=None, length=None, **kwargs):\n       super().__init__(\"teardrop_edge_mask\", {\"l\" : l, \"r\" : r, \"angle\" : angle, \"excess\" : excess, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"h\" : h, \"height\" : height, \"length\" : length, **kwargs})\n\nclass teardrop_corner_mask(_Bosl2Base):\n    def __init__(self, r=None, angle=None, excess=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"teardrop_corner_mask\", {\"r\" : r, \"angle\" : angle, \"excess\" : excess, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/math.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/math.scad'}\", False)\n\nPHI = _OpenSCADConstant('PHI')\nEPSILON = _OpenSCADConstant('EPSILON')\nINF = _OpenSCADConstant('INF')\nNAN = _OpenSCADConstant('NAN')\nclass count(_Bosl2Base):\n    def __init__(self, n=None, s=None, step=None, reverse=None, **kwargs):\n       super().__init__(\"count\", {\"n\" : n, \"s\" : s, \"step\" : step, \"reverse\" : reverse, **kwargs})\n\nclass lerp(_Bosl2Base):\n    def __init__(self, a=None, b=None, u=None, **kwargs):\n       super().__init__(\"lerp\", {\"a\" : a, \"b\" : b, \"u\" : u, **kwargs})\n\nclass lerpn(_Bosl2Base):\n    def __init__(self, a=None, b=None, n=None, endpoint=None, **kwargs):\n       super().__init__(\"lerpn\", {\"a\" : a, \"b\" : b, \"n\" : n, \"endpoint\" : endpoint, **kwargs})\n\nclass bilerp(_Bosl2Base):\n    def __init__(self, points=None, x=None, y=None, **kwargs):\n       super().__init__(\"bilerp\", {\"points\" : points, \"x\" : x, \"y\" : y, **kwargs})\n\nclass sqr(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"sqr\", {\"x\" : x, **kwargs})\n\nclass log2(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"log2\", {\"x\" : x, **kwargs})\n\nclass hypot(_Bosl2Base):\n    def __init__(self, x=None, y=None, z=None, **kwargs):\n       super().__init__(\"hypot\", {\"x\" : x, \"y\" : y, \"z\" : z, **kwargs})\n\nclass factorial(_Bosl2Base):\n    def __init__(self, n=None, d=None, **kwargs):\n       super().__init__(\"factorial\", {\"n\" : n, \"d\" : d, **kwargs})\n\nclass binomial(_Bosl2Base):\n    def __init__(self, n=None, **kwargs):\n       super().__init__(\"binomial\", {\"n\" : n, **kwargs})\n\nclass binomial_coefficient(_Bosl2Base):\n    def __init__(self, n=None, k=None, **kwargs):\n       super().__init__(\"binomial_coefficient\", {\"n\" : n, \"k\" : k, **kwargs})\n\nclass gcd(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"gcd\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass _lcm(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"_lcm\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass _lcmlist(_Bosl2Base):\n    def __init__(self, a=None, **kwargs):\n       super().__init__(\"_lcmlist\", {\"a\" : a, **kwargs})\n\nclass lcm(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"lcm\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass rational_approx(_Bosl2Base):\n    def __init__(self, x=None, maxq=None, cfrac=None, p=None, q=None, **kwargs):\n       super().__init__(\"rational_approx\", {\"x\" : x, \"maxq\" : maxq, \"cfrac\" : cfrac, \"p\" : p, \"q\" : q, **kwargs})\n\nclass _cfrac_to_pq(_Bosl2Base):\n    def __init__(self, cfrac=None, p=None, q=None, ind=None, **kwargs):\n       super().__init__(\"_cfrac_to_pq\", {\"cfrac\" : cfrac, \"p\" : p, \"q\" : q, \"ind\" : ind, **kwargs})\n\nclass sinh(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"sinh\", {\"x\" : x, **kwargs})\n\nclass cosh(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"cosh\", {\"x\" : x, **kwargs})\n\nclass tanh(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"tanh\", {\"x\" : x, **kwargs})\n\nclass asinh(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"asinh\", {\"x\" : x, **kwargs})\n\nclass acosh(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"acosh\", {\"x\" : x, **kwargs})\n\nclass atanh(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"atanh\", {\"x\" : x, **kwargs})\n\nclass quant(_Bosl2Base):\n    def __init__(self, x=None, y=None, **kwargs):\n       super().__init__(\"quant\", {\"x\" : x, \"y\" : y, **kwargs})\n\nclass _roundall(_Bosl2Base):\n    def __init__(self, data=None, **kwargs):\n       super().__init__(\"_roundall\", {\"data\" : data, **kwargs})\n\nclass quantdn(_Bosl2Base):\n    def __init__(self, x=None, y=None, **kwargs):\n       super().__init__(\"quantdn\", {\"x\" : x, \"y\" : y, **kwargs})\n\nclass _floorall(_Bosl2Base):\n    def __init__(self, data=None, **kwargs):\n       super().__init__(\"_floorall\", {\"data\" : data, **kwargs})\n\nclass quantup(_Bosl2Base):\n    def __init__(self, x=None, y=None, **kwargs):\n       super().__init__(\"quantup\", {\"x\" : x, \"y\" : y, **kwargs})\n\nclass _ceilall(_Bosl2Base):\n    def __init__(self, data=None, **kwargs):\n       super().__init__(\"_ceilall\", {\"data\" : data, **kwargs})\n\nclass constrain(_Bosl2Base):\n    def __init__(self, v=None, minval=None, maxval=None, **kwargs):\n       super().__init__(\"constrain\", {\"v\" : v, \"minval\" : minval, \"maxval\" : maxval, **kwargs})\n\nclass posmod(_Bosl2Base):\n    def __init__(self, x=None, m=None, **kwargs):\n       super().__init__(\"posmod\", {\"x\" : x, \"m\" : m, **kwargs})\n\nclass modang(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"modang\", {\"x\" : x, **kwargs})\n\nclass mean_angle(_Bosl2Base):\n    def __init__(self, angle1=None, angle2=None, **kwargs):\n       super().__init__(\"mean_angle\", {\"angle1\" : angle1, \"angle2\" : angle2, **kwargs})\n\nclass fit_to_range(_Bosl2Base):\n    def __init__(self, M=None, minval=None, maxval=None, **kwargs):\n       super().__init__(\"fit_to_range\", {\"M\" : M, \"minval\" : minval, \"maxval\" : maxval, **kwargs})\n\nclass sum(_Bosl2Base):\n    def __init__(self, v=None, dflt=None, **kwargs):\n       super().__init__(\"sum\", {\"v\" : v, \"dflt\" : dflt, **kwargs})\n\nclass _sum(_Bosl2Base):\n    def __init__(self, v=None, _total=None, _i=None, **kwargs):\n       super().__init__(\"_sum\", {\"v\" : v, \"_total\" : _total, \"_i\" : _i, **kwargs})\n\nclass mean(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"mean\", {\"v\" : v, **kwargs})\n\nclass median(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"median\", {\"v\" : v, **kwargs})\n\nclass deltas(_Bosl2Base):\n    def __init__(self, v=None, wrap=None, **kwargs):\n       super().__init__(\"deltas\", {\"v\" : v, \"wrap\" : wrap, **kwargs})\n\nclass cumsum(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"cumsum\", {\"v\" : v, **kwargs})\n\nclass product(_Bosl2Base):\n    def __init__(self, list=None, right=None, **kwargs):\n       super().__init__(\"product\", {\"list\" : list, \"right\" : right, **kwargs})\n\nclass cumprod(_Bosl2Base):\n    def __init__(self, list=None, right=None, **kwargs):\n       super().__init__(\"cumprod\", {\"list\" : list, \"right\" : right, **kwargs})\n\nclass convolve(_Bosl2Base):\n    def __init__(self, p=None, q=None, **kwargs):\n       super().__init__(\"convolve\", {\"p\" : p, \"q\" : q, **kwargs})\n\nclass sum_of_sines(_Bosl2Base):\n    def __init__(self, a=None, sines=None, **kwargs):\n       super().__init__(\"sum_of_sines\", {\"a\" : a, \"sines\" : sines, **kwargs})\n\nclass rand_int(_Bosl2Base):\n    def __init__(self, minval=None, maxval=None, n=None, seed=None, **kwargs):\n       super().__init__(\"rand_int\", {\"minval\" : minval, \"maxval\" : maxval, \"n\" : n, \"seed\" : seed, **kwargs})\n\nclass random_points(_Bosl2Base):\n    def __init__(self, n=None, dim=None, scale=None, seed=None, **kwargs):\n       super().__init__(\"random_points\", {\"n\" : n, \"dim\" : dim, \"scale\" : scale, \"seed\" : seed, **kwargs})\n\nclass gaussian_rands(_Bosl2Base):\n    def __init__(self, n=None, mean=None, cov=None, seed=None, **kwargs):\n       super().__init__(\"gaussian_rands\", {\"n\" : n, \"mean\" : mean, \"cov\" : cov, \"seed\" : seed, **kwargs})\n\nclass exponential_rands(_Bosl2Base):\n    def __init__(self, n=None, _lambda=None, seed=None, **kwargs):\n       super().__init__(\"exponential_rands\", {\"n\" : n, \"_lambda\" : _lambda, \"seed\" : seed, **kwargs})\n\nclass spherical_random_points(_Bosl2Base):\n    def __init__(self, n=None, radius=None, seed=None, **kwargs):\n       super().__init__(\"spherical_random_points\", {\"n\" : n, \"radius\" : radius, \"seed\" : seed, **kwargs})\n\nclass random_polygon(_Bosl2Base):\n    def __init__(self, n=None, size=None, seed=None, **kwargs):\n       super().__init__(\"random_polygon\", {\"n\" : n, \"size\" : size, \"seed\" : seed, **kwargs})\n\nclass deriv(_Bosl2Base):\n    def __init__(self, data=None, h=None, closed=None, **kwargs):\n       super().__init__(\"deriv\", {\"data\" : data, \"h\" : h, \"closed\" : closed, **kwargs})\n\nclass _dnu_calc(_Bosl2Base):\n    def __init__(self, f1=None, fc=None, f2=None, h1=None, h2=None, **kwargs):\n       super().__init__(\"_dnu_calc\", {\"f1\" : f1, \"fc\" : fc, \"f2\" : f2, \"h1\" : h1, \"h2\" : h2, **kwargs})\n\nclass _deriv_nonuniform(_Bosl2Base):\n    def __init__(self, data=None, h=None, closed=None, **kwargs):\n       super().__init__(\"_deriv_nonuniform\", {\"data\" : data, \"h\" : h, \"closed\" : closed, **kwargs})\n\nclass deriv2(_Bosl2Base):\n    def __init__(self, data=None, h=None, closed=None, **kwargs):\n       super().__init__(\"deriv2\", {\"data\" : data, \"h\" : h, \"closed\" : closed, **kwargs})\n\nclass deriv3(_Bosl2Base):\n    def __init__(self, data=None, h=None, closed=None, **kwargs):\n       super().__init__(\"deriv3\", {\"data\" : data, \"h\" : h, \"closed\" : closed, **kwargs})\n\nclass complex(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"complex\", {\"list\" : list, **kwargs})\n\nclass c_mul(_Bosl2Base):\n    def __init__(self, z1=None, z2=None, **kwargs):\n       super().__init__(\"c_mul\", {\"z1\" : z1, \"z2\" : z2, **kwargs})\n\nclass _split_complex(_Bosl2Base):\n    def __init__(self, data=None, **kwargs):\n       super().__init__(\"_split_complex\", {\"data\" : data, **kwargs})\n\nclass _combine_complex(_Bosl2Base):\n    def __init__(self, data=None, **kwargs):\n       super().__init__(\"_combine_complex\", {\"data\" : data, **kwargs})\n\nclass _c_mul(_Bosl2Base):\n    def __init__(self, z1=None, z2=None, **kwargs):\n       super().__init__(\"_c_mul\", {\"z1\" : z1, \"z2\" : z2, **kwargs})\n\nclass c_div(_Bosl2Base):\n    def __init__(self, z1=None, z2=None, **kwargs):\n       super().__init__(\"c_div\", {\"z1\" : z1, \"z2\" : z2, **kwargs})\n\nclass c_conj(_Bosl2Base):\n    def __init__(self, z=None, **kwargs):\n       super().__init__(\"c_conj\", {\"z\" : z, **kwargs})\n\nclass c_real(_Bosl2Base):\n    def __init__(self, z=None, **kwargs):\n       super().__init__(\"c_real\", {\"z\" : z, **kwargs})\n\nclass c_imag(_Bosl2Base):\n    def __init__(self, z=None, **kwargs):\n       super().__init__(\"c_imag\", {\"z\" : z, **kwargs})\n\nclass c_ident(_Bosl2Base):\n    def __init__(self, n=None, **kwargs):\n       super().__init__(\"c_ident\", {\"n\" : n, **kwargs})\n\nclass c_norm(_Bosl2Base):\n    def __init__(self, z=None, **kwargs):\n       super().__init__(\"c_norm\", {\"z\" : z, **kwargs})\n\nclass quadratic_roots(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, real=None, **kwargs):\n       super().__init__(\"quadratic_roots\", {\"a\" : a, \"b\" : b, \"c\" : c, \"real\" : real, **kwargs})\n\nclass polynomial(_Bosl2Base):\n    def __init__(self, p=None, z=None, k=None, total=None, **kwargs):\n       super().__init__(\"polynomial\", {\"p\" : p, \"z\" : z, \"k\" : k, \"total\" : total, **kwargs})\n\nclass poly_mult(_Bosl2Base):\n    def __init__(self, p=None, q=None, **kwargs):\n       super().__init__(\"poly_mult\", {\"p\" : p, \"q\" : q, **kwargs})\n\nclass poly_div(_Bosl2Base):\n    def __init__(self, n=None, d=None, **kwargs):\n       super().__init__(\"poly_div\", {\"n\" : n, \"d\" : d, **kwargs})\n\nclass _poly_div(_Bosl2Base):\n    def __init__(self, n=None, d=None, q=None, **kwargs):\n       super().__init__(\"_poly_div\", {\"n\" : n, \"d\" : d, \"q\" : q, **kwargs})\n\nclass _poly_trim(_Bosl2Base):\n    def __init__(self, p=None, eps=None, **kwargs):\n       super().__init__(\"_poly_trim\", {\"p\" : p, \"eps\" : eps, **kwargs})\n\nclass poly_add(_Bosl2Base):\n    def __init__(self, p=None, q=None, **kwargs):\n       super().__init__(\"poly_add\", {\"p\" : p, \"q\" : q, **kwargs})\n\nclass poly_roots(_Bosl2Base):\n    def __init__(self, p=None, tol=None, error_bound=None, **kwargs):\n       super().__init__(\"poly_roots\", {\"p\" : p, \"tol\" : tol, \"error_bound\" : error_bound, **kwargs})\n\nclass _poly_roots(_Bosl2Base):\n    def __init__(self, p=None, pderiv=None, s=None, z=None, tol=None, i=None, **kwargs):\n       super().__init__(\"_poly_roots\", {\"p\" : p, \"pderiv\" : pderiv, \"s\" : s, \"z\" : z, \"tol\" : tol, \"i\" : i, **kwargs})\n\nclass real_roots(_Bosl2Base):\n    def __init__(self, p=None, eps=None, tol=None, **kwargs):\n       super().__init__(\"real_roots\", {\"p\" : p, \"eps\" : eps, \"tol\" : tol, **kwargs})\n\nclass root_find(_Bosl2Base):\n    def __init__(self, f=None, x0=None, x1=None, tol=None, **kwargs):\n       super().__init__(\"root_find\", {\"f\" : f, \"x0\" : x0, \"x1\" : x1, \"tol\" : tol, **kwargs})\n\nclass _rfcheck(_Bosl2Base):\n    def __init__(self, x=None, y=None, range=None, tol=None, **kwargs):\n       super().__init__(\"_rfcheck\", {\"x\" : x, \"y\" : y, \"range\" : range, \"tol\" : tol, **kwargs})\n\nclass _rootfind(_Bosl2Base):\n    def __init__(self, f=None, xpts=None, ypts=None, yrange=None, tol=None, i=None, **kwargs):\n       super().__init__(\"_rootfind\", {\"f\" : f, \"xpts\" : xpts, \"ypts\" : ypts, \"yrange\" : yrange, \"tol\" : tol, \"i\" : i, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/metric_screws.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/metric_screws.scad'}\", False)\n\nwarn = _OpenSCADConstant('warn')\nclass get_metric_bolt_head_size(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_bolt_head_size\", {\"size\" : size, **kwargs})\n\nclass get_metric_bolt_head_height(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_bolt_head_height\", {\"size\" : size, **kwargs})\n\nclass get_metric_socket_cap_diam(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_socket_cap_diam\", {\"size\" : size, **kwargs})\n\nclass get_metric_socket_cap_height(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_socket_cap_height\", {\"size\" : size, **kwargs})\n\nclass get_metric_socket_cap_socket_size(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_socket_cap_socket_size\", {\"size\" : size, **kwargs})\n\nclass get_metric_socket_cap_socket_depth(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_socket_cap_socket_depth\", {\"size\" : size, **kwargs})\n\nclass get_metric_iso_coarse_thread_pitch(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_iso_coarse_thread_pitch\", {\"size\" : size, **kwargs})\n\nclass get_metric_iso_fine_thread_pitch(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_iso_fine_thread_pitch\", {\"size\" : size, **kwargs})\n\nclass get_metric_iso_superfine_thread_pitch(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_iso_superfine_thread_pitch\", {\"size\" : size, **kwargs})\n\nclass get_metric_jis_thread_pitch(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_jis_thread_pitch\", {\"size\" : size, **kwargs})\n\nclass get_metric_nut_size(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_nut_size\", {\"size\" : size, **kwargs})\n\nclass get_metric_nut_thickness(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"get_metric_nut_thickness\", {\"size\" : size, **kwargs})\n\nclass generic_screw(_Bosl2Base):\n    def __init__(self, screwsize=None, screwlen=None, headsize=None, headlen=None, pitch=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_screw\", {\"screwsize\" : screwsize, \"screwlen\" : screwlen, \"headsize\" : headsize, \"headlen\" : headlen, \"pitch\" : pitch, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass metric_bolt(_Bosl2Base):\n    def __init__(self, headtype=None, size=None, l=None, shank=None, pitch=None, details=None, coarse=None, phillips=None, torx=None, flange=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"metric_bolt\", {\"headtype\" : headtype, \"size\" : size, \"l\" : l, \"shank\" : shank, \"pitch\" : pitch, \"details\" : details, \"coarse\" : coarse, \"phillips\" : phillips, \"torx\" : torx, \"flange\" : flange, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass metric_nut(_Bosl2Base):\n    def __init__(self, size=None, hole=None, pitch=None, details=None, flange=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"metric_nut\", {\"size\" : size, \"hole\" : hole, \"pitch\" : pitch, \"details\" : details, \"flange\" : flange, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/miscellaneous.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/miscellaneous.scad'}\", False)\n\nclass extrude_from_to(_Bosl2Base):\n    def __init__(self, pt1=None, pt2=None, convexity=None, twist=None, scale=None, slices=None, **kwargs):\n       super().__init__(\"extrude_from_to\", {\"pt1\" : pt1, \"pt2\" : pt2, \"convexity\" : convexity, \"twist\" : twist, \"scale\" : scale, \"slices\" : slices, **kwargs})\n\nclass path_extrude2d(_Bosl2Base):\n    def __init__(self, path=None, caps=None, closed=None, s=None, convexity=None, **kwargs):\n       super().__init__(\"path_extrude2d\", {\"path\" : path, \"caps\" : caps, \"closed\" : closed, \"s\" : s, \"convexity\" : convexity, **kwargs})\n\nclass path_extrude(_Bosl2Base):\n    def __init__(self, path=None, convexity=None, clipsize=None, **kwargs):\n       super().__init__(\"path_extrude\", {\"path\" : path, \"convexity\" : convexity, \"clipsize\" : clipsize, **kwargs})\n\nclass cylindrical_extrude(_Bosl2Base):\n    def __init__(self, ir=None, _or=None, od=None, id=None, size=None, convexity=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cylindrical_extrude\", {\"ir\" : ir, \"_or\" : _or, \"od\" : od, \"id\" : id, \"size\" : size, \"convexity\" : convexity, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass bounding_box(_Bosl2Base):\n    def __init__(self, excess=None, planar=None, **kwargs):\n       super().__init__(\"bounding_box\", {\"excess\" : excess, \"planar\" : planar, **kwargs})\n\nclass chain_hull(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"chain_hull\", {**kwargs})\n\nclass minkowski_difference(_Bosl2Base):\n    def __init__(self, planar=None, **kwargs):\n       super().__init__(\"minkowski_difference\", {\"planar\" : planar, **kwargs})\n\nclass offset3d(_Bosl2Base):\n    def __init__(self, r=None, size=None, convexity=None, **kwargs):\n       super().__init__(\"offset3d\", {\"r\" : r, \"size\" : size, \"convexity\" : convexity, **kwargs})\n\nclass round3d(_Bosl2Base):\n    def __init__(self, r=None, _or=None, ir=None, size=None, **kwargs):\n       super().__init__(\"round3d\", {\"r\" : r, \"_or\" : _or, \"ir\" : ir, \"size\" : size, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/modular_hose.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/modular_hose.scad'}\", False)\n\n_modhose_small_end = _OpenSCADConstant('_modhose_small_end')\n_modhose_big_end = _OpenSCADConstant('_modhose_big_end')\n_modhose_waist = _OpenSCADConstant('_modhose_waist')\nclass modular_hose(_Bosl2Base):\n    def __init__(self, size=None, type=None, clearance=None, waist_len=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"modular_hose\", {\"size\" : size, \"type\" : type, \"clearance\" : clearance, \"waist_len\" : waist_len, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass modular_hose_radius(_Bosl2Base):\n    def __init__(self, size=None, outer=None, **kwargs):\n       super().__init__(\"modular_hose_radius\", {\"size\" : size, \"outer\" : outer, **kwargs})\n\nclass modular_hose(_Bosl2Base):\n    def __init__(self, size=None, type=None, clearance=None, waist_len=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"modular_hose\", {\"size\" : size, \"type\" : type, \"clearance\" : clearance, \"waist_len\" : waist_len, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/mutators.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/mutators.scad'}\", False)\n\nclass bounding_box(_Bosl2Base):\n    def __init__(self, excess=None, planar=None, **kwargs):\n       super().__init__(\"bounding_box\", {\"excess\" : excess, \"planar\" : planar, **kwargs})\n\nclass chain_hull(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"chain_hull\", {**kwargs})\n\nclass path_extrude2d(_Bosl2Base):\n    def __init__(self, path=None, caps=None, closed=None, s=None, convexity=None, **kwargs):\n       super().__init__(\"path_extrude2d\", {\"path\" : path, \"caps\" : caps, \"closed\" : closed, \"s\" : s, \"convexity\" : convexity, **kwargs})\n\nclass cylindrical_extrude(_Bosl2Base):\n    def __init__(self, ir=None, _or=None, od=None, id=None, size=None, convexity=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cylindrical_extrude\", {\"ir\" : ir, \"_or\" : _or, \"od\" : od, \"id\" : id, \"size\" : size, \"convexity\" : convexity, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass extrude_from_to(_Bosl2Base):\n    def __init__(self, pt1=None, pt2=None, convexity=None, twist=None, scale=None, slices=None, **kwargs):\n       super().__init__(\"extrude_from_to\", {\"pt1\" : pt1, \"pt2\" : pt2, \"convexity\" : convexity, \"twist\" : twist, \"scale\" : scale, \"slices\" : slices, **kwargs})\n\nclass path_extrude(_Bosl2Base):\n    def __init__(self, path=None, convexity=None, clipsize=None, **kwargs):\n       super().__init__(\"path_extrude\", {\"path\" : path, \"convexity\" : convexity, \"clipsize\" : clipsize, **kwargs})\n\nclass minkowski_difference(_Bosl2Base):\n    def __init__(self, planar=None, **kwargs):\n       super().__init__(\"minkowski_difference\", {\"planar\" : planar, **kwargs})\n\nclass offset3d(_Bosl2Base):\n    def __init__(self, r=None, size=None, convexity=None, **kwargs):\n       super().__init__(\"offset3d\", {\"r\" : r, \"size\" : size, \"convexity\" : convexity, **kwargs})\n\nclass round3d(_Bosl2Base):\n    def __init__(self, r=None, _or=None, ir=None, size=None, **kwargs):\n       super().__init__(\"round3d\", {\"r\" : r, \"_or\" : _or, \"ir\" : ir, \"size\" : size, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/nema_steppers.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/nema_steppers.scad'}\", False)\n\nclass nema_motor_info(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"nema_motor_info\", {\"size\" : size, **kwargs})\n\nclass nema_stepper_motor(_Bosl2Base):\n    def __init__(self, size=None, h=None, shaft_len=None, details=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"nema_stepper_motor\", {\"size\" : size, \"h\" : h, \"shaft_len\" : shaft_len, \"details\" : details, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass nema_mount_mask(_Bosl2Base):\n    def __init__(self, size=None, depth=None, l=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"nema_mount_mask\", {\"size\" : size, \"depth\" : depth, \"l\" : l, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/nurbs.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/nurbs.scad'}\", False)\n\nclass nurbs_curve(_Bosl2Base):\n    def __init__(self, control=None, degree=None, splinesteps=None, u=None, mult=None, weights=None, type=None, knots=None, **kwargs):\n       super().__init__(\"nurbs_curve\", {\"control\" : control, \"degree\" : degree, \"splinesteps\" : splinesteps, \"u\" : u, \"mult\" : mult, \"weights\" : weights, \"type\" : type, \"knots\" : knots, **kwargs})\n\nclass _nurbs_pt(_Bosl2Base):\n    def __init__(self, knot=None, control=None, u=None, r=None, p=None, k=None, **kwargs):\n       super().__init__(\"_nurbs_pt\", {\"knot\" : knot, \"control\" : control, \"u\" : u, \"r\" : r, \"p\" : p, \"k\" : k, **kwargs})\n\nclass _extend_knot_mult(_Bosl2Base):\n    def __init__(self, mult=None, next=None, len=None, **kwargs):\n       super().__init__(\"_extend_knot_mult\", {\"mult\" : mult, \"next\" : next, \"len\" : len, **kwargs})\n\nclass _extend_knot_vector(_Bosl2Base):\n    def __init__(self, knots=None, next=None, len=None, **kwargs):\n       super().__init__(\"_extend_knot_vector\", {\"knots\" : knots, \"next\" : next, \"len\" : len, **kwargs})\n\nclass _calc_mult(_Bosl2Base):\n    def __init__(self, knots=None, **kwargs):\n       super().__init__(\"_calc_mult\", {\"knots\" : knots, **kwargs})\n\nclass is_nurbs_patch(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_nurbs_patch\", {\"x\" : x, **kwargs})\n\nclass nurbs_patch_points(_Bosl2Base):\n    def __init__(self, patch=None, degree=None, splinesteps=None, u=None, v=None, weights=None, type=None, mult=None, knots=None, **kwargs):\n       super().__init__(\"nurbs_patch_points\", {\"patch\" : patch, \"degree\" : degree, \"splinesteps\" : splinesteps, \"u\" : u, \"v\" : v, \"weights\" : weights, \"type\" : type, \"mult\" : mult, \"knots\" : knots, **kwargs})\n\nclass nurbs_vnf(_Bosl2Base):\n    def __init__(self, patch=None, degree=None, splinesteps=None, weights=None, type=None, mult=None, knots=None, style=None, **kwargs):\n       super().__init__(\"nurbs_vnf\", {\"patch\" : patch, \"degree\" : degree, \"splinesteps\" : splinesteps, \"weights\" : weights, \"type\" : type, \"mult\" : mult, \"knots\" : knots, \"style\" : style, **kwargs})\n\nclass debug_nurbs(_Bosl2Base):\n    def __init__(self, control=None, degree=None, splinesteps=None, width=None, size=None, mult=None, weights=None, type=None, knots=None, show_weights=None, show_knots=None, show_index=None, **kwargs):\n       super().__init__(\"debug_nurbs\", {\"control\" : control, \"degree\" : degree, \"splinesteps\" : splinesteps, \"width\" : width, \"size\" : size, \"mult\" : mult, \"weights\" : weights, \"type\" : type, \"knots\" : knots, \"show_weights\" : show_weights, \"show_knots\" : show_knots, \"show_index\" : show_index, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/openscad.py",
    "content": "from .bosl2_base import Bosl2Base as _Bosl2Base\n\nclass union(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"union\", {**kwargs})\n\nclass difference(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"difference\", {**kwargs})\n\nclass intersection(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"intersection\", {**kwargs})\n\nclass intersection_for(_Bosl2Base):\n    def __init__(self, n=None, **kwargs):\n       super().__init__(\"intersection_for\", {\"n\" : n, **kwargs})\n\nclass translate(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"translate\", {\"v\" : v, **kwargs})\n\nclass scale(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"scale\", {\"v\" : v, **kwargs})\n\nclass rotate(_Bosl2Base):\n    def __init__(self, a=None, v=None, **kwargs):\n       super().__init__(\"rotate\", {\"a\" : a, \"v\" : v, **kwargs})\n\nclass mirror(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"mirror\", {\"v\" : v, **kwargs})\n\nclass resize(_Bosl2Base):\n    def __init__(self, newsize=None, auto=None, **kwargs):\n       super().__init__(\"resize\", {\"newsize\" : newsize, \"auto\" : auto, **kwargs})\n\nclass color(_Bosl2Base):\n    def __init__(self, c=None, alpha=None, **kwargs):\n       super().__init__(\"color\", {\"c\" : c, \"alpha\" : alpha, **kwargs})\n\nclass minkowski(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"minkowski\", {**kwargs})\n\nclass offset(_Bosl2Base):\n    def __init__(self, r=None, delta=None, chamfer=None, _fn=None, **kwargs):\n       super().__init__(\"offset\", {\"r\" : r, \"delta\" : delta, \"chamfer\" : chamfer, \"_fn\" : _fn, **kwargs})\n\nclass hull(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"hull\", {**kwargs})\n\nclass render(_Bosl2Base):\n    def __init__(self, convexity=None, **kwargs):\n       super().__init__(\"render\", {\"convexity\" : convexity, **kwargs})\n\nclass linear_extrude(_Bosl2Base):\n    def __init__(self, height=None, center=None, convexity=None, twist=None, slices=None, scale=None, **kwargs):\n       super().__init__(\"linear_extrude\", {\"height\" : height, \"center\" : center, \"convexity\" : convexity, \"twist\" : twist, \"slices\" : slices, \"scale\" : scale, **kwargs})\n\nclass rotate_extrude(_Bosl2Base):\n    def __init__(self, angle=None, convexity=None, _fn=None, **kwargs):\n       super().__init__(\"rotate_extrude\", {\"angle\" : angle, \"convexity\" : convexity, \"_fn\" : _fn, **kwargs})\n\nclass projection(_Bosl2Base):\n    def __init__(self, cut=None, **kwargs):\n       super().__init__(\"projection\", {\"cut\" : cut, **kwargs})\n\nclass surface(_Bosl2Base):\n    def __init__(self, file=None, center=None, convexity=None, invert=None, **kwargs):\n       super().__init__(\"surface\", {\"file\" : file, \"center\" : center, \"convexity\" : convexity, \"invert\" : invert, **kwargs})\n\nclass child(_Bosl2Base):\n    def __init__(self, index=None, vector=None, range=None, **kwargs):\n       super().__init__(\"child\", {\"index\" : index, \"vector\" : vector, \"range\" : range, **kwargs})\n\nclass children(_Bosl2Base):\n    def __init__(self, index=None, vector=None, range=None, **kwargs):\n       super().__init__(\"children\", {\"index\" : index, \"vector\" : vector, \"range\" : range, **kwargs})\n\nclass import_stl(_Bosl2Base):\n    def __init__(self, file=None, origin=None, convexity=None, layer=None, **kwargs):\n       super().__init__(\"import_stl\", {\"file\" : file, \"origin\" : origin, \"convexity\" : convexity, \"layer\" : layer, **kwargs})\n\nclass import_dxf(_Bosl2Base):\n    def __init__(self, file=None, origin=None, convexity=None, layer=None, **kwargs):\n       super().__init__(\"import_dxf\", {\"file\" : file, \"origin\" : origin, \"convexity\" : convexity, \"layer\" : layer, **kwargs})\n\nclass _import(_Bosl2Base):\n    def __init__(self, file=None, origin=None, convexity=None, layer=None, **kwargs):\n       super().__init__(\"_import\", {\"file\" : file, \"origin\" : origin, \"convexity\" : convexity, \"layer\" : layer, **kwargs})\n\nclass assign(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"assign\", {**kwargs})\n\nclass multmatrix(_Bosl2Base):\n    def __init__(self, m=None, **kwargs):\n       super().__init__(\"multmatrix\", {\"m\" : m, **kwargs})\n\nclass polygon(_Bosl2Base):\n    def __init__(self, points=None, paths=None, convexity=None, **kwargs):\n       super().__init__(\"polygon\", {\"points\" : points, \"paths\" : paths, \"convexity\" : convexity, **kwargs})\n\nclass circle(_Bosl2Base):\n    def __init__(self, r=None, d=None, _fn=None, **kwargs):\n       super().__init__(\"circle\", {\"r\" : r, \"d\" : d, \"_fn\" : _fn, **kwargs})\n\nclass square(_Bosl2Base):\n    def __init__(self, size=None, center=None, **kwargs):\n       super().__init__(\"square\", {\"size\" : size, \"center\" : center, **kwargs})\n\nclass sphere(_Bosl2Base):\n    def __init__(self, r=None, d=None, _fn=None, **kwargs):\n       super().__init__(\"sphere\", {\"r\" : r, \"d\" : d, \"_fn\" : _fn, **kwargs})\n\nclass cube(_Bosl2Base):\n    def __init__(self, size=None, center=None, **kwargs):\n       super().__init__(\"cube\", {\"size\" : size, \"center\" : center, **kwargs})\n\nclass cylinder(_Bosl2Base):\n    def __init__(self, r=None, h=None, r1=None, r2=None, d=None, d1=None, d2=None, center=None, _fn=None, **kwargs):\n       super().__init__(\"cylinder\", {\"r\" : r, \"h\" : h, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"center\" : center, \"_fn\" : _fn, **kwargs})\n\nclass polyhedron(_Bosl2Base):\n    def __init__(self, points=None, faces=None, convexity=None, triangles=None, **kwargs):\n       super().__init__(\"polyhedron\", {\"points\" : points, \"faces\" : faces, \"convexity\" : convexity, \"triangles\" : triangles, **kwargs})\n\nclass text(_Bosl2Base):\n    def __init__(self, text=None, size=None, font=None, halign=None, valign=None, spacing=None, direction=None, language=None, script=None, _fn=None, **kwargs):\n       super().__init__(\"text\", {\"text\" : text, \"size\" : size, \"font\" : font, \"halign\" : halign, \"valign\" : valign, \"spacing\" : spacing, \"direction\" : direction, \"language\" : language, \"script\" : script, \"_fn\" : _fn, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/partitions.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/partitions.scad'}\", False)\n\nclass half_of(_Bosl2Base):\n    def __init__(self, p=None, v=None, cp=None, **kwargs):\n       super().__init__(\"half_of\", {\"p\" : p, \"v\" : v, \"cp\" : cp, **kwargs})\n\nclass left_half(_Bosl2Base):\n    def __init__(self, p=None, x=None, **kwargs):\n       super().__init__(\"left_half\", {\"p\" : p, \"x\" : x, **kwargs})\n\nclass right_half(_Bosl2Base):\n    def __init__(self, p=None, x=None, **kwargs):\n       super().__init__(\"right_half\", {\"p\" : p, \"x\" : x, **kwargs})\n\nclass front_half(_Bosl2Base):\n    def __init__(self, p=None, y=None, **kwargs):\n       super().__init__(\"front_half\", {\"p\" : p, \"y\" : y, **kwargs})\n\nclass back_half(_Bosl2Base):\n    def __init__(self, p=None, y=None, **kwargs):\n       super().__init__(\"back_half\", {\"p\" : p, \"y\" : y, **kwargs})\n\nclass bottom_half(_Bosl2Base):\n    def __init__(self, p=None, z=None, **kwargs):\n       super().__init__(\"bottom_half\", {\"p\" : p, \"z\" : z, **kwargs})\n\nclass top_half(_Bosl2Base):\n    def __init__(self, p=None, z=None, **kwargs):\n       super().__init__(\"top_half\", {\"p\" : p, \"z\" : z, **kwargs})\n\nclass _partition_subpath(_Bosl2Base):\n    def __init__(self, type=None, **kwargs):\n       super().__init__(\"_partition_subpath\", {\"type\" : type, **kwargs})\n\nclass _partition_cutpath(_Bosl2Base):\n    def __init__(self, l=None, h=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, **kwargs):\n       super().__init__(\"_partition_cutpath\", {\"l\" : l, \"h\" : h, \"cutsize\" : cutsize, \"cutpath\" : cutpath, \"gap\" : gap, \"cutpath_centered\" : cutpath_centered, **kwargs})\n\nclass half_of(_Bosl2Base):\n    def __init__(self, v=None, cp=None, s=None, planar=None, **kwargs):\n       super().__init__(\"half_of\", {\"v\" : v, \"cp\" : cp, \"s\" : s, \"planar\" : planar, **kwargs})\n\nclass left_half(_Bosl2Base):\n    def __init__(self, s=None, x=None, planar=None, **kwargs):\n       super().__init__(\"left_half\", {\"s\" : s, \"x\" : x, \"planar\" : planar, **kwargs})\n\nclass right_half(_Bosl2Base):\n    def __init__(self, s=None, x=None, planar=None, **kwargs):\n       super().__init__(\"right_half\", {\"s\" : s, \"x\" : x, \"planar\" : planar, **kwargs})\n\nclass front_half(_Bosl2Base):\n    def __init__(self, s=None, y=None, planar=None, **kwargs):\n       super().__init__(\"front_half\", {\"s\" : s, \"y\" : y, \"planar\" : planar, **kwargs})\n\nclass back_half(_Bosl2Base):\n    def __init__(self, s=None, y=None, planar=None, **kwargs):\n       super().__init__(\"back_half\", {\"s\" : s, \"y\" : y, \"planar\" : planar, **kwargs})\n\nclass bottom_half(_Bosl2Base):\n    def __init__(self, s=None, z=None, **kwargs):\n       super().__init__(\"bottom_half\", {\"s\" : s, \"z\" : z, **kwargs})\n\nclass top_half(_Bosl2Base):\n    def __init__(self, s=None, z=None, **kwargs):\n       super().__init__(\"top_half\", {\"s\" : s, \"z\" : z, **kwargs})\n\nclass partition_mask(_Bosl2Base):\n    def __init__(self, l=None, w=None, h=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, inverse=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"partition_mask\", {\"l\" : l, \"w\" : w, \"h\" : h, \"cutsize\" : cutsize, \"cutpath\" : cutpath, \"gap\" : gap, \"cutpath_centered\" : cutpath_centered, \"inverse\" : inverse, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass partition_cut_mask(_Bosl2Base):\n    def __init__(self, l=None, h=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"partition_cut_mask\", {\"l\" : l, \"h\" : h, \"cutsize\" : cutsize, \"cutpath\" : cutpath, \"gap\" : gap, \"cutpath_centered\" : cutpath_centered, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass partition(_Bosl2Base):\n    def __init__(self, size=None, spread=None, cutsize=None, cutpath=None, gap=None, cutpath_centered=None, spin=None, **kwargs):\n       super().__init__(\"partition\", {\"size\" : size, \"spread\" : spread, \"cutsize\" : cutsize, \"cutpath\" : cutpath, \"gap\" : gap, \"cutpath_centered\" : cutpath_centered, \"spin\" : spin, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/paths.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/paths.scad'}\", False)\n\nclass is_path(_Bosl2Base):\n    def __init__(self, list=None, dim=None, fast=None, **kwargs):\n       super().__init__(\"is_path\", {\"list\" : list, \"dim\" : dim, \"fast\" : fast, **kwargs})\n\nclass is_1region(_Bosl2Base):\n    def __init__(self, path=None, name=None, **kwargs):\n       super().__init__(\"is_1region\", {\"path\" : path, \"name\" : name, **kwargs})\n\nclass force_path(_Bosl2Base):\n    def __init__(self, path=None, name=None, **kwargs):\n       super().__init__(\"force_path\", {\"path\" : path, \"name\" : name, **kwargs})\n\nclass _path_select(_Bosl2Base):\n    def __init__(self, path=None, s1=None, u1=None, s2=None, u2=None, closed=None, **kwargs):\n       super().__init__(\"_path_select\", {\"path\" : path, \"s1\" : s1, \"u1\" : u1, \"s2\" : s2, \"u2\" : u2, \"closed\" : closed, **kwargs})\n\nclass path_merge_collinear(_Bosl2Base):\n    def __init__(self, path=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"path_merge_collinear\", {\"path\" : path, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass path_length(_Bosl2Base):\n    def __init__(self, path=None, closed=None, **kwargs):\n       super().__init__(\"path_length\", {\"path\" : path, \"closed\" : closed, **kwargs})\n\nclass path_segment_lengths(_Bosl2Base):\n    def __init__(self, path=None, closed=None, **kwargs):\n       super().__init__(\"path_segment_lengths\", {\"path\" : path, \"closed\" : closed, **kwargs})\n\nclass path_length_fractions(_Bosl2Base):\n    def __init__(self, path=None, closed=None, **kwargs):\n       super().__init__(\"path_length_fractions\", {\"path\" : path, \"closed\" : closed, **kwargs})\n\nclass _path_self_intersections(_Bosl2Base):\n    def __init__(self, path=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"_path_self_intersections\", {\"path\" : path, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass _sum_preserving_round(_Bosl2Base):\n    def __init__(self, data=None, index=None, **kwargs):\n       super().__init__(\"_sum_preserving_round\", {\"data\" : data, \"index\" : index, **kwargs})\n\nclass subdivide_path(_Bosl2Base):\n    def __init__(self, path=None, n=None, refine=None, maxlen=None, closed=None, exact=None, method=None, **kwargs):\n       super().__init__(\"subdivide_path\", {\"path\" : path, \"n\" : n, \"refine\" : refine, \"maxlen\" : maxlen, \"closed\" : closed, \"exact\" : exact, \"method\" : method, **kwargs})\n\nclass resample_path(_Bosl2Base):\n    def __init__(self, path=None, n=None, spacing=None, keep_corners=None, closed=None, **kwargs):\n       super().__init__(\"resample_path\", {\"path\" : path, \"n\" : n, \"spacing\" : spacing, \"keep_corners\" : keep_corners, \"closed\" : closed, **kwargs})\n\nclass is_path_simple(_Bosl2Base):\n    def __init__(self, path=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"is_path_simple\", {\"path\" : path, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass path_closest_point(_Bosl2Base):\n    def __init__(self, path=None, pt=None, closed=None, **kwargs):\n       super().__init__(\"path_closest_point\", {\"path\" : path, \"pt\" : pt, \"closed\" : closed, **kwargs})\n\nclass path_tangents(_Bosl2Base):\n    def __init__(self, path=None, closed=None, uniform=None, **kwargs):\n       super().__init__(\"path_tangents\", {\"path\" : path, \"closed\" : closed, \"uniform\" : uniform, **kwargs})\n\nclass path_normals(_Bosl2Base):\n    def __init__(self, path=None, tangents=None, closed=None, **kwargs):\n       super().__init__(\"path_normals\", {\"path\" : path, \"tangents\" : tangents, \"closed\" : closed, **kwargs})\n\nclass path_curvature(_Bosl2Base):\n    def __init__(self, path=None, closed=None, **kwargs):\n       super().__init__(\"path_curvature\", {\"path\" : path, \"closed\" : closed, **kwargs})\n\nclass path_torsion(_Bosl2Base):\n    def __init__(self, path=None, closed=None, **kwargs):\n       super().__init__(\"path_torsion\", {\"path\" : path, \"closed\" : closed, **kwargs})\n\nclass surface_normals(_Bosl2Base):\n    def __init__(self, surf=None, col_wrap=None, row_wrap=None, **kwargs):\n       super().__init__(\"surface_normals\", {\"surf\" : surf, \"col_wrap\" : col_wrap, \"row_wrap\" : row_wrap, **kwargs})\n\nclass path_cut(_Bosl2Base):\n    def __init__(self, path=None, cutdist=None, closed=None, **kwargs):\n       super().__init__(\"path_cut\", {\"path\" : path, \"cutdist\" : cutdist, \"closed\" : closed, **kwargs})\n\nclass _path_cut_getpaths(_Bosl2Base):\n    def __init__(self, path=None, cutlist=None, closed=None, **kwargs):\n       super().__init__(\"_path_cut_getpaths\", {\"path\" : path, \"cutlist\" : cutlist, \"closed\" : closed, **kwargs})\n\nclass path_cut_points(_Bosl2Base):\n    def __init__(self, path=None, cutdist=None, closed=None, direction=None, **kwargs):\n       super().__init__(\"path_cut_points\", {\"path\" : path, \"cutdist\" : cutdist, \"closed\" : closed, \"direction\" : direction, **kwargs})\n\nclass path_cut_points_recurse(_Bosl2Base):\n    def __init__(self, path=None, dists=None, closed=None, pind=None, dtotal=None, dind=None, result=None, **kwargs):\n       super().__init__(\"path_cut_points_recurse\", {\"path\" : path, \"dists\" : dists, \"closed\" : closed, \"pind\" : pind, \"dtotal\" : dtotal, \"dind\" : dind, \"result\" : result, **kwargs})\n\nclass _path_cut_single(_Bosl2Base):\n    def __init__(self, path=None, dist=None, closed=None, ind=None, eps=None, **kwargs):\n       super().__init__(\"_path_cut_single\", {\"path\" : path, \"dist\" : dist, \"closed\" : closed, \"ind\" : ind, \"eps\" : eps, **kwargs})\n\nclass _path_cuts_normals(_Bosl2Base):\n    def __init__(self, path=None, cuts=None, dirs=None, closed=None, **kwargs):\n       super().__init__(\"_path_cuts_normals\", {\"path\" : path, \"cuts\" : cuts, \"dirs\" : dirs, \"closed\" : closed, **kwargs})\n\nclass _path_plane(_Bosl2Base):\n    def __init__(self, path=None, ind=None, i=None, closed=None, **kwargs):\n       super().__init__(\"_path_plane\", {\"path\" : path, \"ind\" : ind, \"i\" : i, \"closed\" : closed, **kwargs})\n\nclass _path_cuts_dir(_Bosl2Base):\n    def __init__(self, path=None, cuts=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"_path_cuts_dir\", {\"path\" : path, \"cuts\" : cuts, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass _cut_to_seg_u_form(_Bosl2Base):\n    def __init__(self, pathcut=None, path=None, closed=None, **kwargs):\n       super().__init__(\"_cut_to_seg_u_form\", {\"pathcut\" : pathcut, \"path\" : path, \"closed\" : closed, **kwargs})\n\nclass split_path_at_self_crossings(_Bosl2Base):\n    def __init__(self, path=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"split_path_at_self_crossings\", {\"path\" : path, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass _tag_self_crossing_subpaths(_Bosl2Base):\n    def __init__(self, path=None, nonzero=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"_tag_self_crossing_subpaths\", {\"path\" : path, \"nonzero\" : nonzero, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass polygon_parts(_Bosl2Base):\n    def __init__(self, poly=None, nonzero=None, eps=None, **kwargs):\n       super().__init__(\"polygon_parts\", {\"poly\" : poly, \"nonzero\" : nonzero, \"eps\" : eps, **kwargs})\n\nclass _extreme_angle_fragment(_Bosl2Base):\n    def __init__(self, seg=None, fragments=None, rightmost=None, eps=None, **kwargs):\n       super().__init__(\"_extreme_angle_fragment\", {\"seg\" : seg, \"fragments\" : fragments, \"rightmost\" : rightmost, \"eps\" : eps, **kwargs})\n\nclass _assemble_a_path_from_fragments(_Bosl2Base):\n    def __init__(self, fragments=None, rightmost=None, startfrag=None, eps=None, **kwargs):\n       super().__init__(\"_assemble_a_path_from_fragments\", {\"fragments\" : fragments, \"rightmost\" : rightmost, \"startfrag\" : startfrag, \"eps\" : eps, **kwargs})\n\nclass _assemble_path_fragments(_Bosl2Base):\n    def __init__(self, fragments=None, eps=None, _finished=None, **kwargs):\n       super().__init__(\"_assemble_path_fragments\", {\"fragments\" : fragments, \"eps\" : eps, \"_finished\" : _finished, **kwargs})\n\nclass _assemble_partial_paths(_Bosl2Base):\n    def __init__(self, paths=None, closed=None, eps=None, **kwargs):\n       super().__init__(\"_assemble_partial_paths\", {\"paths\" : paths, \"closed\" : closed, \"eps\" : eps, **kwargs})\n\nclass _assemble_partial_paths_recur(_Bosl2Base):\n    def __init__(self, edges=None, eps=None, paths=None, i=None, **kwargs):\n       super().__init__(\"_assemble_partial_paths_recur\", {\"edges\" : edges, \"eps\" : eps, \"paths\" : paths, \"i\" : i, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/polyhedra.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/polyhedra.scad'}\", False)\n\n_tribonacci = _OpenSCADConstant('_tribonacci')\n_polyhedra_ = _OpenSCADConstant('_polyhedra_')\n_stellated_polyhedra_ = _OpenSCADConstant('_stellated_polyhedra_')\nclass _unique_groups(_Bosl2Base):\n    def __init__(self, m=None, **kwargs):\n       super().__init__(\"_unique_groups\", {\"m\" : m, **kwargs})\n\nclass _even_perms(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_even_perms\", {\"v\" : v, **kwargs})\n\nclass _all_perms(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"_all_perms\", {\"v\" : v, **kwargs})\n\nclass _point_ref(_Bosl2Base):\n    def __init__(self, points=None, sign=None, **kwargs):\n       super().__init__(\"_point_ref\", {\"points\" : points, \"sign\" : sign, **kwargs})\n\nclass regular_polyhedron_info(_Bosl2Base):\n    def __init__(self, info=None, name=None, index=None, type=None, faces=None, facetype=None, hasfaces=None, side=None, ir=None, mr=None, _or=None, r=None, d=None, anchor=None, facedown=None, stellate=None, longside=None, h=None, height=None, **kwargs):\n       super().__init__(\"regular_polyhedron_info\", {\"info\" : info, \"name\" : name, \"index\" : index, \"type\" : type, \"faces\" : faces, \"facetype\" : facetype, \"hasfaces\" : hasfaces, \"side\" : side, \"ir\" : ir, \"mr\" : mr, \"_or\" : _or, \"r\" : r, \"d\" : d, \"anchor\" : anchor, \"facedown\" : facedown, \"stellate\" : stellate, \"longside\" : longside, \"h\" : h, \"height\" : height, **kwargs})\n\nclass _stellate_faces(_Bosl2Base):\n    def __init__(self, scalefactor=None, stellate=None, vertices=None, faces_normals=None, **kwargs):\n       super().__init__(\"_stellate_faces\", {\"scalefactor\" : scalefactor, \"stellate\" : stellate, \"vertices\" : vertices, \"faces_normals\" : faces_normals, **kwargs})\n\nclass _trapezohedron(_Bosl2Base):\n    def __init__(self, faces=None, r=None, side=None, longside=None, h=None, height=None, d=None, **kwargs):\n       super().__init__(\"_trapezohedron\", {\"faces\" : faces, \"r\" : r, \"side\" : side, \"longside\" : longside, \"h\" : h, \"height\" : height, \"d\" : d, **kwargs})\n\nclass _facenormal(_Bosl2Base):\n    def __init__(self, pts=None, face=None, **kwargs):\n       super().__init__(\"_facenormal\", {\"pts\" : pts, \"face\" : face, **kwargs})\n\nclass _full_faces(_Bosl2Base):\n    def __init__(self, pts=None, faces=None, **kwargs):\n       super().__init__(\"_full_faces\", {\"pts\" : pts, \"faces\" : faces, **kwargs})\n\nclass regular_polyhedron(_Bosl2Base):\n    def __init__(self, name=None, index=None, type=None, faces=None, facetype=None, hasfaces=None, side=None, ir=None, mr=None, _or=None, r=None, d=None, anchor=None, rounding=None, repeat=None, facedown=None, draw=None, rotate_children=None, stellate=None, longside=None, h=None, height=None, **kwargs):\n       super().__init__(\"regular_polyhedron\", {\"name\" : name, \"index\" : index, \"type\" : type, \"faces\" : faces, \"facetype\" : facetype, \"hasfaces\" : hasfaces, \"side\" : side, \"ir\" : ir, \"mr\" : mr, \"_or\" : _or, \"r\" : r, \"d\" : d, \"anchor\" : anchor, \"rounding\" : rounding, \"repeat\" : repeat, \"facedown\" : facedown, \"draw\" : draw, \"rotate_children\" : rotate_children, \"stellate\" : stellate, \"longside\" : longside, \"h\" : h, \"height\" : height, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/regions.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/regions.scad'}\", False)\n\nclass is_region(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_region\", {\"x\" : x, **kwargs})\n\nclass is_valid_region(_Bosl2Base):\n    def __init__(self, region=None, eps=None, **kwargs):\n       super().__init__(\"is_valid_region\", {\"region\" : region, \"eps\" : eps, **kwargs})\n\nclass _polygon_crosses_region(_Bosl2Base):\n    def __init__(self, region=None, poly=None, eps=None, **kwargs):\n       super().__init__(\"_polygon_crosses_region\", {\"region\" : region, \"poly\" : poly, \"eps\" : eps, **kwargs})\n\nclass is_region_simple(_Bosl2Base):\n    def __init__(self, region=None, eps=None, **kwargs):\n       super().__init__(\"is_region_simple\", {\"region\" : region, \"eps\" : eps, **kwargs})\n\nclass make_region(_Bosl2Base):\n    def __init__(self, polys=None, nonzero=None, eps=None, **kwargs):\n       super().__init__(\"make_region\", {\"polys\" : polys, \"nonzero\" : nonzero, \"eps\" : eps, **kwargs})\n\nclass force_region(_Bosl2Base):\n    def __init__(self, poly=None, **kwargs):\n       super().__init__(\"force_region\", {\"poly\" : poly, **kwargs})\n\nclass point_in_region(_Bosl2Base):\n    def __init__(self, point=None, region=None, eps=None, **kwargs):\n       super().__init__(\"point_in_region\", {\"point\" : point, \"region\" : region, \"eps\" : eps, **kwargs})\n\nclass _point_in_region(_Bosl2Base):\n    def __init__(self, point=None, region=None, eps=None, i=None, cnt=None, **kwargs):\n       super().__init__(\"_point_in_region\", {\"point\" : point, \"region\" : region, \"eps\" : eps, \"i\" : i, \"cnt\" : cnt, **kwargs})\n\nclass region_area(_Bosl2Base):\n    def __init__(self, region=None, **kwargs):\n       super().__init__(\"region_area\", {\"region\" : region, **kwargs})\n\nclass _clockwise_region(_Bosl2Base):\n    def __init__(self, r=None, **kwargs):\n       super().__init__(\"_clockwise_region\", {\"r\" : r, **kwargs})\n\nclass are_regions_equal(_Bosl2Base):\n    def __init__(self, region1=None, region2=None, either_winding=None, **kwargs):\n       super().__init__(\"are_regions_equal\", {\"region1\" : region1, \"region2\" : region2, \"either_winding\" : either_winding, **kwargs})\n\nclass __are_regions_equal(_Bosl2Base):\n    def __init__(self, region1=None, region2=None, i=None, **kwargs):\n       super().__init__(\"__are_regions_equal\", {\"region1\" : region1, \"region2\" : region2, \"i\" : i, **kwargs})\n\nclass _region_region_intersections(_Bosl2Base):\n    def __init__(self, region1=None, region2=None, closed1=None, closed2=None, eps=None, **kwargs):\n       super().__init__(\"_region_region_intersections\", {\"region1\" : region1, \"region2\" : region2, \"closed1\" : closed1, \"closed2\" : closed2, \"eps\" : eps, **kwargs})\n\nclass split_region_at_region_crossings(_Bosl2Base):\n    def __init__(self, region1=None, region2=None, closed1=None, closed2=None, eps=None, **kwargs):\n       super().__init__(\"split_region_at_region_crossings\", {\"region1\" : region1, \"region2\" : region2, \"closed1\" : closed1, \"closed2\" : closed2, \"eps\" : eps, **kwargs})\n\nclass region_parts(_Bosl2Base):\n    def __init__(self, region=None, **kwargs):\n       super().__init__(\"region_parts\", {\"region\" : region, **kwargs})\n\nclass _offset_chamfer(_Bosl2Base):\n    def __init__(self, center=None, points=None, delta=None, **kwargs):\n       super().__init__(\"_offset_chamfer\", {\"center\" : center, \"points\" : points, \"delta\" : delta, **kwargs})\n\nclass _shift_segment(_Bosl2Base):\n    def __init__(self, segment=None, d=None, **kwargs):\n       super().__init__(\"_shift_segment\", {\"segment\" : segment, \"d\" : d, **kwargs})\n\nclass _segment_extension(_Bosl2Base):\n    def __init__(self, s1=None, s2=None, **kwargs):\n       super().__init__(\"_segment_extension\", {\"s1\" : s1, \"s2\" : s2, **kwargs})\n\nclass _makefaces(_Bosl2Base):\n    def __init__(self, direction=None, startind=None, good=None, pointcount=None, closed=None, **kwargs):\n       super().__init__(\"_makefaces\", {\"direction\" : direction, \"startind\" : startind, \"good\" : good, \"pointcount\" : pointcount, \"closed\" : closed, **kwargs})\n\nclass _makefaces_recurse(_Bosl2Base):\n    def __init__(self, startind1=None, startind2=None, numfirst=None, numsecond=None, lenlist=None, closed=None, firstind=None, secondind=None, faces=None, **kwargs):\n       super().__init__(\"_makefaces_recurse\", {\"startind1\" : startind1, \"startind2\" : startind2, \"numfirst\" : numfirst, \"numsecond\" : numsecond, \"lenlist\" : lenlist, \"closed\" : closed, \"firstind\" : firstind, \"secondind\" : secondind, \"faces\" : faces, **kwargs})\n\nclass _good_segments(_Bosl2Base):\n    def __init__(self, path=None, d=None, shiftsegs=None, closed=None, quality=None, **kwargs):\n       super().__init__(\"_good_segments\", {\"path\" : path, \"d\" : d, \"shiftsegs\" : shiftsegs, \"closed\" : closed, \"quality\" : quality, **kwargs})\n\nclass _segment_good(_Bosl2Base):\n    def __init__(self, path=None, pathseg_unit=None, pathseg_len=None, d=None, seg=None, alpha=None, index=None, **kwargs):\n       super().__init__(\"_segment_good\", {\"path\" : path, \"pathseg_unit\" : pathseg_unit, \"pathseg_len\" : pathseg_len, \"d\" : d, \"seg\" : seg, \"alpha\" : alpha, \"index\" : index, **kwargs})\n\nclass _point_dist(_Bosl2Base):\n    def __init__(self, path=None, pathseg_unit=None, pathseg_len=None, pt=None, **kwargs):\n       super().__init__(\"_point_dist\", {\"path\" : path, \"pathseg_unit\" : pathseg_unit, \"pathseg_len\" : pathseg_len, \"pt\" : pt, **kwargs})\n\nclass offset(_Bosl2Base):\n    def __init__(self, path=None, r=None, delta=None, chamfer=None, closed=None, check_valid=None, quality=None, error=None, return_faces=None, firstface_index=None, flip_faces=None, same_length=None, **kwargs):\n       super().__init__(\"offset\", {\"path\" : path, \"r\" : r, \"delta\" : delta, \"chamfer\" : chamfer, \"closed\" : closed, \"check_valid\" : check_valid, \"quality\" : quality, \"error\" : error, \"return_faces\" : return_faces, \"firstface_index\" : firstface_index, \"flip_faces\" : flip_faces, \"same_length\" : same_length, **kwargs})\n\nclass _filter_region_parts(_Bosl2Base):\n    def __init__(self, region1=None, region2=None, keep=None, eps=None, **kwargs):\n       super().__init__(\"_filter_region_parts\", {\"region1\" : region1, \"region2\" : region2, \"keep\" : keep, \"eps\" : eps, **kwargs})\n\nclass _list_three(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, **kwargs):\n       super().__init__(\"_list_three\", {\"a\" : a, \"b\" : b, \"c\" : c, **kwargs})\n\nclass union(_Bosl2Base):\n    def __init__(self, regions=None, b=None, c=None, eps=None, **kwargs):\n       super().__init__(\"union\", {\"regions\" : regions, \"b\" : b, \"c\" : c, \"eps\" : eps, **kwargs})\n\nclass difference(_Bosl2Base):\n    def __init__(self, regions=None, b=None, c=None, eps=None, **kwargs):\n       super().__init__(\"difference\", {\"regions\" : regions, \"b\" : b, \"c\" : c, \"eps\" : eps, **kwargs})\n\nclass intersection(_Bosl2Base):\n    def __init__(self, regions=None, b=None, c=None, eps=None, **kwargs):\n       super().__init__(\"intersection\", {\"regions\" : regions, \"b\" : b, \"c\" : c, \"eps\" : eps, **kwargs})\n\nclass exclusive_or(_Bosl2Base):\n    def __init__(self, regions=None, b=None, c=None, eps=None, **kwargs):\n       super().__init__(\"exclusive_or\", {\"regions\" : regions, \"b\" : b, \"c\" : c, \"eps\" : eps, **kwargs})\n\nclass hull_region(_Bosl2Base):\n    def __init__(self, region=None, **kwargs):\n       super().__init__(\"hull_region\", {\"region\" : region, **kwargs})\n\nclass fill(_Bosl2Base):\n    def __init__(self, region=None, **kwargs):\n       super().__init__(\"fill\", {\"region\" : region, **kwargs})\n\nclass region(_Bosl2Base):\n    def __init__(self, r=None, anchor=None, spin=None, cp=None, atype=None, **kwargs):\n       super().__init__(\"region\", {\"r\" : r, \"anchor\" : anchor, \"spin\" : spin, \"cp\" : cp, \"atype\" : atype, **kwargs})\n\nclass debug_region(_Bosl2Base):\n    def __init__(self, region=None, vertices=None, edges=None, convexity=None, size=None, **kwargs):\n       super().__init__(\"debug_region\", {\"region\" : region, \"vertices\" : vertices, \"edges\" : edges, \"convexity\" : convexity, \"size\" : size, **kwargs})\n\nclass exclusive_or(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"exclusive_or\", {**kwargs})\n\nclass hull_region(_Bosl2Base):\n    def __init__(self, region=None, **kwargs):\n       super().__init__(\"hull_region\", {\"region\" : region, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/rounding.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/rounding.scad'}\", False)\n\nclass round_corners(_Bosl2Base):\n    def __init__(self, path=None, method=None, radius=None, r=None, cut=None, joint=None, width=None, k=None, closed=None, verbose=None, **kwargs):\n       super().__init__(\"round_corners\", {\"path\" : path, \"method\" : method, \"radius\" : radius, \"r\" : r, \"cut\" : cut, \"joint\" : joint, \"width\" : width, \"k\" : k, \"closed\" : closed, \"verbose\" : verbose, **kwargs})\n\nclass _smooth_bez_fill(_Bosl2Base):\n    def __init__(self, points=None, k=None, **kwargs):\n       super().__init__(\"_smooth_bez_fill\", {\"points\" : points, \"k\" : k, **kwargs})\n\nclass _bezcorner(_Bosl2Base):\n    def __init__(self, points=None, parm=None, **kwargs):\n       super().__init__(\"_bezcorner\", {\"points\" : points, \"parm\" : parm, **kwargs})\n\nclass _chamfcorner(_Bosl2Base):\n    def __init__(self, points=None, parm=None, **kwargs):\n       super().__init__(\"_chamfcorner\", {\"points\" : points, \"parm\" : parm, **kwargs})\n\nclass _circlecorner(_Bosl2Base):\n    def __init__(self, points=None, parm=None, **kwargs):\n       super().__init__(\"_circlecorner\", {\"points\" : points, \"parm\" : parm, **kwargs})\n\nclass _rounding_offsets(_Bosl2Base):\n    def __init__(self, edgespec=None, z_dir=None, **kwargs):\n       super().__init__(\"_rounding_offsets\", {\"edgespec\" : edgespec, \"z_dir\" : z_dir, **kwargs})\n\nclass smooth_path(_Bosl2Base):\n    def __init__(self, path=None, tangents=None, size=None, relsize=None, method=None, splinesteps=None, uniform=None, closed=None, **kwargs):\n       super().__init__(\"smooth_path\", {\"path\" : path, \"tangents\" : tangents, \"size\" : size, \"relsize\" : relsize, \"method\" : method, \"splinesteps\" : splinesteps, \"uniform\" : uniform, \"closed\" : closed, **kwargs})\n\nclass _scalar_to_vector(_Bosl2Base):\n    def __init__(self, value=None, length=None, varname=None, **kwargs):\n       super().__init__(\"_scalar_to_vector\", {\"value\" : value, \"length\" : length, \"varname\" : varname, **kwargs})\n\nclass path_join(_Bosl2Base):\n    def __init__(self, paths=None, joint=None, k=None, relocate=None, closed=None, **kwargs):\n       super().__init__(\"path_join\", {\"paths\" : paths, \"joint\" : joint, \"k\" : k, \"relocate\" : relocate, \"closed\" : closed, **kwargs})\n\nclass _path_join(_Bosl2Base):\n    def __init__(self, paths=None, joint=None, k=None, i=None, result=None, relocate=None, closed=None, **kwargs):\n       super().__init__(\"_path_join\", {\"paths\" : paths, \"joint\" : joint, \"k\" : k, \"i\" : i, \"result\" : result, \"relocate\" : relocate, \"closed\" : closed, **kwargs})\n\nclass offset_stroke(_Bosl2Base):\n    def __init__(self, path=None, width=None, rounded=None, start=None, end=None, check_valid=None, quality=None, chamfer=None, closed=None, atype=None, anchor=None, spin=None, cp=None, **kwargs):\n       super().__init__(\"offset_stroke\", {\"path\" : path, \"width\" : width, \"rounded\" : rounded, \"start\" : start, \"end\" : end, \"check_valid\" : check_valid, \"quality\" : quality, \"chamfer\" : chamfer, \"closed\" : closed, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"cp\" : cp, **kwargs})\n\nclass os_pointed(_Bosl2Base):\n    def __init__(self, dist=None, loc=None, **kwargs):\n       super().__init__(\"os_pointed\", {\"dist\" : dist, \"loc\" : loc, **kwargs})\n\nclass os_round(_Bosl2Base):\n    def __init__(self, cut=None, angle=None, abs_angle=None, k=None, r=None, **kwargs):\n       super().__init__(\"os_round\", {\"cut\" : cut, \"angle\" : angle, \"abs_angle\" : abs_angle, \"k\" : k, \"r\" : r, **kwargs})\n\nclass os_flat(_Bosl2Base):\n    def __init__(self, angle=None, abs_angle=None, **kwargs):\n       super().__init__(\"os_flat\", {\"angle\" : angle, \"abs_angle\" : abs_angle, **kwargs})\n\nclass angle_between_lines(_Bosl2Base):\n    def __init__(self, line1=None, line2=None, **kwargs):\n       super().__init__(\"angle_between_lines\", {\"line1\" : line1, \"line2\" : line2, **kwargs})\n\nclass _parse_stroke_end(_Bosl2Base):\n    def __init__(self, spec=None, name=None, **kwargs):\n       super().__init__(\"_parse_stroke_end\", {\"spec\" : spec, \"name\" : name, **kwargs})\n\nclass _stroke_end(_Bosl2Base):\n    def __init__(self, width=None, left=None, right=None, spec=None, **kwargs):\n       super().__init__(\"_stroke_end\", {\"width\" : width, \"left\" : left, \"right\" : right, \"spec\" : spec, **kwargs})\n\nclass _path_line_intersection(_Bosl2Base):\n    def __init__(self, path=None, line=None, ind=None, **kwargs):\n       super().__init__(\"_path_line_intersection\", {\"path\" : path, \"line\" : line, \"ind\" : ind, **kwargs})\n\nclass _make_offset_polyhedron(_Bosl2Base):\n    def __init__(self, path=None, offsets=None, offset_type=None, flip_faces=None, quality=None, check_valid=None, cap=None, offsetind=None, vertexcount=None, vertices=None, faces=None, **kwargs):\n       super().__init__(\"_make_offset_polyhedron\", {\"path\" : path, \"offsets\" : offsets, \"offset_type\" : offset_type, \"flip_faces\" : flip_faces, \"quality\" : quality, \"check_valid\" : check_valid, \"cap\" : cap, \"offsetind\" : offsetind, \"vertexcount\" : vertexcount, \"vertices\" : vertices, \"faces\" : faces, **kwargs})\n\nclass _struct_valid(_Bosl2Base):\n    def __init__(self, spec=None, func=None, name=None, **kwargs):\n       super().__init__(\"_struct_valid\", {\"spec\" : spec, \"func\" : func, \"name\" : name, **kwargs})\n\nclass offset_sweep(_Bosl2Base):\n    def __init__(self, path=None, height=None, bottom=None, top=None, h=None, l=None, length=None, ends=None, bot=None, offset=None, r=None, steps=None, quality=None, check_valid=None, extra=None, caps=None, cut=None, chamfer_width=None, chamfer_height=None, joint=None, k=None, angle=None, anchor=None, orient=None, spin=None, atype=None, cp=None, _return_height=None, _flipdir=None, **kwargs):\n       super().__init__(\"offset_sweep\", {\"path\" : path, \"height\" : height, \"bottom\" : bottom, \"top\" : top, \"h\" : h, \"l\" : l, \"length\" : length, \"ends\" : ends, \"bot\" : bot, \"offset\" : offset, \"r\" : r, \"steps\" : steps, \"quality\" : quality, \"check_valid\" : check_valid, \"extra\" : extra, \"caps\" : caps, \"cut\" : cut, \"chamfer_width\" : chamfer_width, \"chamfer_height\" : chamfer_height, \"joint\" : joint, \"k\" : k, \"angle\" : angle, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, \"atype\" : atype, \"cp\" : cp, \"_return_height\" : _return_height, \"_flipdir\" : _flipdir, **kwargs})\n\nclass os_circle(_Bosl2Base):\n    def __init__(self, r=None, cut=None, h=None, height=None, clip_angle=None, extra=None, check_valid=None, quality=None, steps=None, offset=None, **kwargs):\n       super().__init__(\"os_circle\", {\"r\" : r, \"cut\" : cut, \"h\" : h, \"height\" : height, \"clip_angle\" : clip_angle, \"extra\" : extra, \"check_valid\" : check_valid, \"quality\" : quality, \"steps\" : steps, \"offset\" : offset, **kwargs})\n\nclass os_teardrop(_Bosl2Base):\n    def __init__(self, r=None, cut=None, extra=None, check_valid=None, quality=None, steps=None, offset=None, **kwargs):\n       super().__init__(\"os_teardrop\", {\"r\" : r, \"cut\" : cut, \"extra\" : extra, \"check_valid\" : check_valid, \"quality\" : quality, \"steps\" : steps, \"offset\" : offset, **kwargs})\n\nclass os_chamfer(_Bosl2Base):\n    def __init__(self, height=None, width=None, cut=None, angle=None, extra=None, check_valid=None, quality=None, steps=None, offset=None, **kwargs):\n       super().__init__(\"os_chamfer\", {\"height\" : height, \"width\" : width, \"cut\" : cut, \"angle\" : angle, \"extra\" : extra, \"check_valid\" : check_valid, \"quality\" : quality, \"steps\" : steps, \"offset\" : offset, **kwargs})\n\nclass os_smooth(_Bosl2Base):\n    def __init__(self, cut=None, joint=None, k=None, extra=None, check_valid=None, quality=None, steps=None, offset=None, **kwargs):\n       super().__init__(\"os_smooth\", {\"cut\" : cut, \"joint\" : joint, \"k\" : k, \"extra\" : extra, \"check_valid\" : check_valid, \"quality\" : quality, \"steps\" : steps, \"offset\" : offset, **kwargs})\n\nclass os_profile(_Bosl2Base):\n    def __init__(self, points=None, extra=None, check_valid=None, quality=None, offset=None, **kwargs):\n       super().__init__(\"os_profile\", {\"points\" : points, \"extra\" : extra, \"check_valid\" : check_valid, \"quality\" : quality, \"offset\" : offset, **kwargs})\n\nclass os_mask(_Bosl2Base):\n    def __init__(self, mask=None, out=None, extra=None, check_valid=None, quality=None, offset=None, **kwargs):\n       super().__init__(\"os_mask\", {\"mask\" : mask, \"out\" : out, \"extra\" : extra, \"check_valid\" : check_valid, \"quality\" : quality, \"offset\" : offset, **kwargs})\n\nclass convex_offset_extrude(_Bosl2Base):\n    def __init__(self, height=None, bottom=None, top=None, h=None, l=None, length=None, offset=None, r=None, steps=None, extra=None, cut=None, chamfer_width=None, chamfer_height=None, joint=None, k=None, angle=None, convexity=None, thickness=None, **kwargs):\n       super().__init__(\"convex_offset_extrude\", {\"height\" : height, \"bottom\" : bottom, \"top\" : top, \"h\" : h, \"l\" : l, \"length\" : length, \"offset\" : offset, \"r\" : r, \"steps\" : steps, \"extra\" : extra, \"cut\" : cut, \"chamfer_width\" : chamfer_width, \"chamfer_height\" : chamfer_height, \"joint\" : joint, \"k\" : k, \"angle\" : angle, \"convexity\" : convexity, \"thickness\" : thickness, **kwargs})\n\nclass _remove_undefined_vals(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"_remove_undefined_vals\", {\"list\" : list, **kwargs})\n\nclass _rp_compute_patches(_Bosl2Base):\n    def __init__(self, top=None, bot=None, rtop=None, rsides=None, ktop=None, ksides=None, concave=None, **kwargs):\n       super().__init__(\"_rp_compute_patches\", {\"top\" : top, \"bot\" : bot, \"rtop\" : rtop, \"rsides\" : rsides, \"ktop\" : ktop, \"ksides\" : ksides, \"concave\" : concave, **kwargs})\n\nclass rounded_prism(_Bosl2Base):\n    def __init__(self, bottom=None, top=None, joint_bot=None, joint_top=None, joint_sides=None, k_bot=None, k_top=None, k_sides=None, k=None, splinesteps=None, h=None, length=None, l=None, height=None, debug=None, _full_info=None, **kwargs):\n       super().__init__(\"rounded_prism\", {\"bottom\" : bottom, \"top\" : top, \"joint_bot\" : joint_bot, \"joint_top\" : joint_top, \"joint_sides\" : joint_sides, \"k_bot\" : k_bot, \"k_top\" : k_top, \"k_sides\" : k_sides, \"k\" : k, \"splinesteps\" : splinesteps, \"h\" : h, \"length\" : length, \"l\" : l, \"height\" : height, \"debug\" : debug, \"_full_info\" : _full_info, **kwargs})\n\nclass _cyl_hole(_Bosl2Base):\n    def __init__(self, r=None, path=None, **kwargs):\n       super().__init__(\"_cyl_hole\", {\"r\" : r, \"path\" : path, **kwargs})\n\nclass _circle_mask(_Bosl2Base):\n    def __init__(self, r=None, **kwargs):\n       super().__init__(\"_circle_mask\", {\"r\" : r, **kwargs})\n\nclass bent_cutout_mask(_Bosl2Base):\n    def __init__(self, r=None, thickness=None, path=None, radius=None, convexity=None, **kwargs):\n       super().__init__(\"bent_cutout_mask\", {\"r\" : r, \"thickness\" : thickness, \"path\" : path, \"radius\" : radius, \"convexity\" : convexity, **kwargs})\n\nclass join_prism(_Bosl2Base):\n    def __init__(self, polygon=None, base=None, base_r=None, base_d=None, base_T=None, scale=None, prism_end_T=None, short=None, length=None, l=None, height=None, h=None, aux=None, aux_T=None, aux_r=None, aux_d=None, overlap=None, base_overlap=None, aux_overlap=None, n=None, base_n=None, aux_n=None, end_n=None, fillet=None, base_fillet=None, aux_fillet=None, end_round=None, k=None, base_k=None, aux_k=None, end_k=None, uniform=None, base_uniform=None, aux_uniform=None, debug=None, return_axis=None, smooth_normals=None, base_smooth_normals=None, aux_smooth_normals=None, start=None, end=None, _name1=None, _name2=None, **kwargs):\n       super().__init__(\"join_prism\", {\"polygon\" : polygon, \"base\" : base, \"base_r\" : base_r, \"base_d\" : base_d, \"base_T\" : base_T, \"scale\" : scale, \"prism_end_T\" : prism_end_T, \"short\" : short, \"length\" : length, \"l\" : l, \"height\" : height, \"h\" : h, \"aux\" : aux, \"aux_T\" : aux_T, \"aux_r\" : aux_r, \"aux_d\" : aux_d, \"overlap\" : overlap, \"base_overlap\" : base_overlap, \"aux_overlap\" : aux_overlap, \"n\" : n, \"base_n\" : base_n, \"aux_n\" : aux_n, \"end_n\" : end_n, \"fillet\" : fillet, \"base_fillet\" : base_fillet, \"aux_fillet\" : aux_fillet, \"end_round\" : end_round, \"k\" : k, \"base_k\" : base_k, \"aux_k\" : aux_k, \"end_k\" : end_k, \"uniform\" : uniform, \"base_uniform\" : base_uniform, \"aux_uniform\" : aux_uniform, \"debug\" : debug, \"return_axis\" : return_axis, \"smooth_normals\" : smooth_normals, \"base_smooth_normals\" : base_smooth_normals, \"aux_smooth_normals\" : aux_smooth_normals, \"start\" : start, \"end\" : end, \"_name1\" : _name1, \"_name2\" : _name2, **kwargs})\n\nclass _fix_angle_list(_Bosl2Base):\n    def __init__(self, list=None, ind=None, result=None, **kwargs):\n       super().__init__(\"_fix_angle_list\", {\"list\" : list, \"ind\" : ind, \"result\" : result, **kwargs})\n\nclass _cyl_line_intersection(_Bosl2Base):\n    def __init__(self, R=None, line=None, ref=None, **kwargs):\n       super().__init__(\"_cyl_line_intersection\", {\"R\" : R, \"line\" : line, \"ref\" : ref, **kwargs})\n\nclass _sphere_line_isect_best(_Bosl2Base):\n    def __init__(self, R=None, line=None, ref=None, **kwargs):\n       super().__init__(\"_sphere_line_isect_best\", {\"R\" : R, \"line\" : line, \"ref\" : ref, **kwargs})\n\nclass _prism_line_isect(_Bosl2Base):\n    def __init__(self, poly_pairs=None, line=None, ref=None, **kwargs):\n       super().__init__(\"_prism_line_isect\", {\"poly_pairs\" : poly_pairs, \"line\" : line, \"ref\" : ref, **kwargs})\n\nclass _prism_fillet(_Bosl2Base):\n    def __init__(self, name=None, base=None, R=None, bot=None, top=None, d=None, k=None, N=None, overlap=None, uniform=None, smooth_normals=None, debug=None, **kwargs):\n       super().__init__(\"_prism_fillet\", {\"name\" : name, \"base\" : base, \"R\" : R, \"bot\" : bot, \"top\" : top, \"d\" : d, \"k\" : k, \"N\" : N, \"overlap\" : overlap, \"uniform\" : uniform, \"smooth_normals\" : smooth_normals, \"debug\" : debug, **kwargs})\n\nclass _prism_fillet_plane(_Bosl2Base):\n    def __init__(self, name=None, bot=None, top=None, d=None, k=None, N=None, overlap=None, debug=None, **kwargs):\n       super().__init__(\"_prism_fillet_plane\", {\"name\" : name, \"bot\" : bot, \"top\" : top, \"d\" : d, \"k\" : k, \"N\" : N, \"overlap\" : overlap, \"debug\" : debug, **kwargs})\n\nclass _prism_fillet_cyl(_Bosl2Base):\n    def __init__(self, name=None, R=None, bot=None, top=None, d=None, k=None, N=None, overlap=None, uniform=None, debug=None, **kwargs):\n       super().__init__(\"_prism_fillet_cyl\", {\"name\" : name, \"R\" : R, \"bot\" : bot, \"top\" : top, \"d\" : d, \"k\" : k, \"N\" : N, \"overlap\" : overlap, \"uniform\" : uniform, \"debug\" : debug, **kwargs})\n\nclass _prism_fillet_sphere(_Bosl2Base):\n    def __init__(self, name=None, R=None, bot=None, top=None, d=None, k=None, N=None, overlap=None, uniform=None, debug=None, **kwargs):\n       super().__init__(\"_prism_fillet_sphere\", {\"name\" : name, \"R\" : R, \"bot\" : bot, \"top\" : top, \"d\" : d, \"k\" : k, \"N\" : N, \"overlap\" : overlap, \"uniform\" : uniform, \"debug\" : debug, **kwargs})\n\nclass _getnormal(_Bosl2Base):\n    def __init__(self, polygon=None, index=None, u=None, smooth_normals=None, **kwargs):\n       super().__init__(\"_getnormal\", {\"polygon\" : polygon, \"index\" : index, \"u\" : u, \"smooth_normals\" : smooth_normals, **kwargs})\n\nclass _polygon_step(_Bosl2Base):\n    def __init__(self, poly=None, ind=None, u=None, dir=None, length=None, **kwargs):\n       super().__init__(\"_polygon_step\", {\"poly\" : poly, \"ind\" : ind, \"u\" : u, \"dir\" : dir, \"length\" : length, **kwargs})\n\nclass _prism_fillet_prism(_Bosl2Base):\n    def __init__(self, name=None, basepoly=None, bot=None, top=None, d=None, k=None, N=None, overlap=None, uniform=None, smooth_normals=None, inside=None, debug=None, **kwargs):\n       super().__init__(\"_prism_fillet_prism\", {\"name\" : name, \"basepoly\" : basepoly, \"bot\" : bot, \"top\" : top, \"d\" : d, \"k\" : k, \"N\" : N, \"overlap\" : overlap, \"uniform\" : uniform, \"smooth_normals\" : smooth_normals, \"inside\" : inside, \"debug\" : debug, **kwargs})\n\nclass _get_obj_type(_Bosl2Base):\n    def __init__(self, ind=None, geom=None, anchor=None, prof=None, **kwargs):\n       super().__init__(\"_get_obj_type\", {\"ind\" : ind, \"geom\" : geom, \"anchor\" : anchor, \"prof\" : prof, **kwargs})\n\nclass _check_join_shift(_Bosl2Base):\n    def __init__(self, ind=None, type=None, shift=None, flip=None, **kwargs):\n       super().__init__(\"_check_join_shift\", {\"ind\" : ind, \"type\" : type, \"shift\" : shift, \"flip\" : flip, **kwargs})\n\nclass _is_geom_an_edge(_Bosl2Base):\n    def __init__(self, geom=None, anchor=None, **kwargs):\n       super().__init__(\"_is_geom_an_edge\", {\"geom\" : geom, \"anchor\" : anchor, **kwargs})\n\nclass _prismoid_isect(_Bosl2Base):\n    def __init__(self, geom=None, line=None, bounded=None, flip=None, **kwargs):\n       super().__init__(\"_prismoid_isect\", {\"geom\" : geom, \"line\" : line, \"bounded\" : bounded, \"flip\" : flip, **kwargs})\n\nclass _cone_isect(_Bosl2Base):\n    def __init__(self, geom=None, line=None, bounded=None, flip=None, **kwargs):\n       super().__init__(\"_cone_isect\", {\"geom\" : geom, \"line\" : line, \"bounded\" : bounded, \"flip\" : flip, **kwargs})\n\nclass _extrusion_isect(_Bosl2Base):\n    def __init__(self, geom=None, line=None, bounded=None, flip=None, **kwargs):\n       super().__init__(\"_extrusion_isect\", {\"geom\" : geom, \"line\" : line, \"bounded\" : bounded, \"flip\" : flip, **kwargs})\n\nclass _find_center_anchor(_Bosl2Base):\n    def __init__(self, desc1=None, desc2=None, anchor2=None, flip=None, **kwargs):\n       super().__init__(\"_find_center_anchor\", {\"desc1\" : desc1, \"desc2\" : desc2, \"anchor2\" : anchor2, \"flip\" : flip, **kwargs})\n\nclass round_corners(_Bosl2Base):\n    def __init__(self, path=None, method=None, radius=None, r=None, cut=None, joint=None, width=None, k=None, closed=None, verbose=None, **kwargs):\n       super().__init__(\"round_corners\", {\"path\" : path, \"method\" : method, \"radius\" : radius, \"r\" : r, \"cut\" : cut, \"joint\" : joint, \"width\" : width, \"k\" : k, \"closed\" : closed, \"verbose\" : verbose, **kwargs})\n\nclass smooth_path(_Bosl2Base):\n    def __init__(self, path=None, tangents=None, size=None, relsize=None, method=None, splinesteps=None, uniform=None, closed=None, **kwargs):\n       super().__init__(\"smooth_path\", {\"path\" : path, \"tangents\" : tangents, \"size\" : size, \"relsize\" : relsize, \"method\" : method, \"splinesteps\" : splinesteps, \"uniform\" : uniform, \"closed\" : closed, **kwargs})\n\nclass path_join(_Bosl2Base):\n    def __init__(self, paths=None, joint=None, k=None, relocate=None, closed=None, **kwargs):\n       super().__init__(\"path_join\", {\"paths\" : paths, \"joint\" : joint, \"k\" : k, \"relocate\" : relocate, \"closed\" : closed, **kwargs})\n\nclass offset_stroke(_Bosl2Base):\n    def __init__(self, path=None, width=None, rounded=None, start=None, end=None, check_valid=None, quality=None, chamfer=None, closed=None, atype=None, anchor=None, spin=None, cp=None, **kwargs):\n       super().__init__(\"offset_stroke\", {\"path\" : path, \"width\" : width, \"rounded\" : rounded, \"start\" : start, \"end\" : end, \"check_valid\" : check_valid, \"quality\" : quality, \"chamfer\" : chamfer, \"closed\" : closed, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"cp\" : cp, **kwargs})\n\nclass _offset_sweep_region(_Bosl2Base):\n    def __init__(self, region=None, height=None, bottom=None, top=None, h=None, l=None, length=None, ends=None, bot=None, top_hole=None, bot_hole=None, bottom_hole=None, ends_hole=None, offset=None, r=None, steps=None, quality=None, check_valid=None, extra=None, cut=None, chamfer_width=None, chamfer_height=None, joint=None, k=None, angle=None, convexity=None, anchor=None, cp=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"_offset_sweep_region\", {\"region\" : region, \"height\" : height, \"bottom\" : bottom, \"top\" : top, \"h\" : h, \"l\" : l, \"length\" : length, \"ends\" : ends, \"bot\" : bot, \"top_hole\" : top_hole, \"bot_hole\" : bot_hole, \"bottom_hole\" : bottom_hole, \"ends_hole\" : ends_hole, \"offset\" : offset, \"r\" : r, \"steps\" : steps, \"quality\" : quality, \"check_valid\" : check_valid, \"extra\" : extra, \"cut\" : cut, \"chamfer_width\" : chamfer_width, \"chamfer_height\" : chamfer_height, \"joint\" : joint, \"k\" : k, \"angle\" : angle, \"convexity\" : convexity, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass offset_sweep(_Bosl2Base):\n    def __init__(self, path=None, height=None, bottom=None, top=None, h=None, l=None, length=None, ends=None, bot=None, offset=None, r=None, steps=None, quality=None, check_valid=None, extra=None, top_hole=None, bot_hole=None, bottom_hole=None, ends_hole=None, cut=None, chamfer_width=None, chamfer_height=None, joint=None, k=None, angle=None, convexity=None, anchor=None, cp=None, spin=None, orient=None, atype=None, _flipdir=None, **kwargs):\n       super().__init__(\"offset_sweep\", {\"path\" : path, \"height\" : height, \"bottom\" : bottom, \"top\" : top, \"h\" : h, \"l\" : l, \"length\" : length, \"ends\" : ends, \"bot\" : bot, \"offset\" : offset, \"r\" : r, \"steps\" : steps, \"quality\" : quality, \"check_valid\" : check_valid, \"extra\" : extra, \"top_hole\" : top_hole, \"bot_hole\" : bot_hole, \"bottom_hole\" : bottom_hole, \"ends_hole\" : ends_hole, \"cut\" : cut, \"chamfer_width\" : chamfer_width, \"chamfer_height\" : chamfer_height, \"joint\" : joint, \"k\" : k, \"angle\" : angle, \"convexity\" : convexity, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"_flipdir\" : _flipdir, **kwargs})\n\nclass convex_offset_extrude(_Bosl2Base):\n    def __init__(self, height=None, bottom=None, top=None, h=None, l=None, length=None, offset=None, r=None, steps=None, extra=None, cut=None, chamfer_width=None, chamfer_height=None, joint=None, k=None, angle=None, convexity=None, thickness=None, **kwargs):\n       super().__init__(\"convex_offset_extrude\", {\"height\" : height, \"bottom\" : bottom, \"top\" : top, \"h\" : h, \"l\" : l, \"length\" : length, \"offset\" : offset, \"r\" : r, \"steps\" : steps, \"extra\" : extra, \"cut\" : cut, \"chamfer_width\" : chamfer_width, \"chamfer_height\" : chamfer_height, \"joint\" : joint, \"k\" : k, \"angle\" : angle, \"convexity\" : convexity, \"thickness\" : thickness, **kwargs})\n\nclass rounded_prism(_Bosl2Base):\n    def __init__(self, bottom=None, top=None, joint_bot=None, joint_top=None, joint_sides=None, k_bot=None, k_top=None, k_sides=None, k=None, splinesteps=None, h=None, length=None, l=None, height=None, convexity=None, debug=None, anchor=None, cp=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"rounded_prism\", {\"bottom\" : bottom, \"top\" : top, \"joint_bot\" : joint_bot, \"joint_top\" : joint_top, \"joint_sides\" : joint_sides, \"k_bot\" : k_bot, \"k_top\" : k_top, \"k_sides\" : k_sides, \"k\" : k, \"splinesteps\" : splinesteps, \"h\" : h, \"length\" : length, \"l\" : l, \"height\" : height, \"convexity\" : convexity, \"debug\" : debug, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass bent_cutout_mask(_Bosl2Base):\n    def __init__(self, r=None, thickness=None, path=None, radius=None, convexity=None, **kwargs):\n       super().__init__(\"bent_cutout_mask\", {\"r\" : r, \"thickness\" : thickness, \"path\" : path, \"radius\" : radius, \"convexity\" : convexity, **kwargs})\n\nclass join_prism(_Bosl2Base):\n    def __init__(self, polygon=None, base=None, base_r=None, base_d=None, base_T=None, scale=None, prism_end_T=None, short=None, length=None, l=None, height=None, h=None, aux=None, aux_T=None, aux_r=None, aux_d=None, overlap=None, base_overlap=None, aux_overlap=None, n=None, base_n=None, end_n=None, aux_n=None, fillet=None, base_fillet=None, aux_fillet=None, end_round=None, k=None, base_k=None, aux_k=None, end_k=None, start=None, end=None, uniform=None, base_uniform=None, aux_uniform=None, smooth_normals=None, base_smooth_normals=None, aux_smooth_normals=None, debug=None, anchor=None, extent=None, cp=None, atype=None, orient=None, spin=None, convexity=None, _name1=None, _name2=None, **kwargs):\n       super().__init__(\"join_prism\", {\"polygon\" : polygon, \"base\" : base, \"base_r\" : base_r, \"base_d\" : base_d, \"base_T\" : base_T, \"scale\" : scale, \"prism_end_T\" : prism_end_T, \"short\" : short, \"length\" : length, \"l\" : l, \"height\" : height, \"h\" : h, \"aux\" : aux, \"aux_T\" : aux_T, \"aux_r\" : aux_r, \"aux_d\" : aux_d, \"overlap\" : overlap, \"base_overlap\" : base_overlap, \"aux_overlap\" : aux_overlap, \"n\" : n, \"base_n\" : base_n, \"end_n\" : end_n, \"aux_n\" : aux_n, \"fillet\" : fillet, \"base_fillet\" : base_fillet, \"aux_fillet\" : aux_fillet, \"end_round\" : end_round, \"k\" : k, \"base_k\" : base_k, \"aux_k\" : aux_k, \"end_k\" : end_k, \"start\" : start, \"end\" : end, \"uniform\" : uniform, \"base_uniform\" : base_uniform, \"aux_uniform\" : aux_uniform, \"smooth_normals\" : smooth_normals, \"base_smooth_normals\" : base_smooth_normals, \"aux_smooth_normals\" : aux_smooth_normals, \"debug\" : debug, \"anchor\" : anchor, \"extent\" : extent, \"cp\" : cp, \"atype\" : atype, \"orient\" : orient, \"spin\" : spin, \"convexity\" : convexity, \"_name1\" : _name1, \"_name2\" : _name2, **kwargs})\n\nclass prism_connector(_Bosl2Base):\n    def __init__(self, profile=None, desc1=None, anchor1=None, desc2=None, anchor2=None, shift1=None, shift2=None, spin_align=None, scale=None, fillet=None, fillet1=None, fillet2=None, overlap=None, overlap1=None, overlap2=None, k=None, k1=None, k2=None, n=None, n1=None, n2=None, uniform=None, uniform1=None, uniform2=None, smooth_normals=None, smooth_normals1=None, smooth_normals2=None, debug=None, debug_pos=None, **kwargs):\n       super().__init__(\"prism_connector\", {\"profile\" : profile, \"desc1\" : desc1, \"anchor1\" : anchor1, \"desc2\" : desc2, \"anchor2\" : anchor2, \"shift1\" : shift1, \"shift2\" : shift2, \"spin_align\" : spin_align, \"scale\" : scale, \"fillet\" : fillet, \"fillet1\" : fillet1, \"fillet2\" : fillet2, \"overlap\" : overlap, \"overlap1\" : overlap1, \"overlap2\" : overlap2, \"k\" : k, \"k1\" : k1, \"k2\" : k2, \"n\" : n, \"n1\" : n1, \"n2\" : n2, \"uniform\" : uniform, \"uniform1\" : uniform1, \"uniform2\" : uniform2, \"smooth_normals\" : smooth_normals, \"smooth_normals1\" : smooth_normals1, \"smooth_normals2\" : smooth_normals2, \"debug\" : debug, \"debug_pos\" : debug_pos, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/screw_drive.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/screw_drive.scad'}\", False)\n\nclass _phillips_shaft(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_phillips_shaft\", {\"x\" : x, **kwargs})\n\nclass _ph_bot_angle(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"_ph_bot_angle\", {**kwargs})\n\nclass _ph_side_angle(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"_ph_side_angle\", {**kwargs})\n\nclass phillips_depth(_Bosl2Base):\n    def __init__(self, size=None, d=None, **kwargs):\n       super().__init__(\"phillips_depth\", {\"size\" : size, \"d\" : d, **kwargs})\n\nclass phillips_diam(_Bosl2Base):\n    def __init__(self, size=None, depth=None, **kwargs):\n       super().__init__(\"phillips_diam\", {\"size\" : size, \"depth\" : depth, **kwargs})\n\nclass hex_drive_mask(_Bosl2Base):\n    def __init__(self, size=None, length=None, l=None, h=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"hex_drive_mask\", {\"size\" : size, \"length\" : length, \"l\" : l, \"h\" : h, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass torx_info(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"torx_info\", {\"size\" : size, **kwargs})\n\nclass torx_diam(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"torx_diam\", {\"size\" : size, **kwargs})\n\nclass torx_depth(_Bosl2Base):\n    def __init__(self, size=None, **kwargs):\n       super().__init__(\"torx_depth\", {\"size\" : size, **kwargs})\n\nclass phillips_mask(_Bosl2Base):\n    def __init__(self, size=None, _fn=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"phillips_mask\", {\"size\" : size, \"_fn\" : _fn, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass hex_drive_mask(_Bosl2Base):\n    def __init__(self, size=None, length=None, l=None, h=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"hex_drive_mask\", {\"size\" : size, \"length\" : length, \"l\" : l, \"h\" : h, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass torx_mask(_Bosl2Base):\n    def __init__(self, size=None, l=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"torx_mask\", {\"size\" : size, \"l\" : l, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass torx_mask2d(_Bosl2Base):\n    def __init__(self, size=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"torx_mask2d\", {\"size\" : size, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass robertson_mask(_Bosl2Base):\n    def __init__(self, size=None, extra=None, ang=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"robertson_mask\", {\"size\" : size, \"extra\" : extra, \"ang\" : ang, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/screws.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/screws.scad'}\", False)\n\nclass _get_spec(_Bosl2Base):\n    def __init__(self, spec=None, needtype=None, origin=None, thread=None, head=None, drive=None, drive_size=None, shape=None, thickness=None, **kwargs):\n       super().__init__(\"_get_spec\", {\"spec\" : spec, \"needtype\" : needtype, \"origin\" : origin, \"thread\" : thread, \"head\" : head, \"drive\" : drive, \"drive_size\" : drive_size, \"shape\" : shape, \"thickness\" : thickness, **kwargs})\n\nclass _struct_reset(_Bosl2Base):\n    def __init__(self, s=None, keyval=None, grow=None, **kwargs):\n       super().__init__(\"_struct_reset\", {\"s\" : s, \"keyval\" : keyval, \"grow\" : grow, **kwargs})\n\nclass _nominal_diam(_Bosl2Base):\n    def __init__(self, spec=None, **kwargs):\n       super().__init__(\"_nominal_diam\", {\"spec\" : spec, **kwargs})\n\nclass screw(_Bosl2Base):\n    def __init__(self, spec=None, head=None, drive=None, thread=None, drive_size=None, length=None, l=None, thread_len=None, tolerance=None, details=None, undersize=None, shaft_undersize=None, head_undersize=None, atype=None, anchor=None, spin=None, orient=None, _shoulder_diam=None, _shoulder_len=None, bevel=None, bevel1=None, bevel2=None, bevelsize=None, blunt_start=None, blunt_start1=None, blunt_start2=None, _internal=None, _counterbore=None, _teardrop=None, **kwargs):\n       super().__init__(\"screw\", {\"spec\" : spec, \"head\" : head, \"drive\" : drive, \"thread\" : thread, \"drive_size\" : drive_size, \"length\" : length, \"l\" : l, \"thread_len\" : thread_len, \"tolerance\" : tolerance, \"details\" : details, \"undersize\" : undersize, \"shaft_undersize\" : shaft_undersize, \"head_undersize\" : head_undersize, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"_shoulder_diam\" : _shoulder_diam, \"_shoulder_len\" : _shoulder_len, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevelsize\" : bevelsize, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"_internal\" : _internal, \"_counterbore\" : _counterbore, \"_teardrop\" : _teardrop, **kwargs})\n\nclass screw_hole(_Bosl2Base):\n    def __init__(self, spec=None, head=None, thread=None, oversize=None, hole_oversize=None, head_oversize=None, length=None, l=None, thread_len=None, tolerance=None, counterbore=None, teardrop=None, bevel=None, bevel1=None, bevel2=None, blunt_start=None, blunt_start1=None, blunt_start2=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"screw_hole\", {\"spec\" : spec, \"head\" : head, \"thread\" : thread, \"oversize\" : oversize, \"hole_oversize\" : hole_oversize, \"head_oversize\" : head_oversize, \"length\" : length, \"l\" : l, \"thread_len\" : thread_len, \"tolerance\" : tolerance, \"counterbore\" : counterbore, \"teardrop\" : teardrop, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass shoulder_screw(_Bosl2Base):\n    def __init__(self, s=None, d=None, length=None, head=None, thread_len=None, tolerance=None, head_size=None, drive=None, drive_size=None, thread=None, undersize=None, shaft_undersize=None, head_undersize=None, shoulder_undersize=None, blunt_start=None, blunt_start1=None, blunt_start2=None, atype=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"shoulder_screw\", {\"s\" : s, \"d\" : d, \"length\" : length, \"head\" : head, \"thread_len\" : thread_len, \"tolerance\" : tolerance, \"head_size\" : head_size, \"drive\" : drive, \"drive_size\" : drive_size, \"thread\" : thread, \"undersize\" : undersize, \"shaft_undersize\" : shaft_undersize, \"head_undersize\" : head_undersize, \"shoulder_undersize\" : shoulder_undersize, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"atype\" : atype, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\nclass _ISO_thread_tolerance(_Bosl2Base):\n    def __init__(self, diameter=None, pitch=None, internal=None, tolerance=None, **kwargs):\n       super().__init__(\"_ISO_thread_tolerance\", {\"diameter\" : diameter, \"pitch\" : pitch, \"internal\" : internal, \"tolerance\" : tolerance, **kwargs})\n\nclass _UTS_thread_tolerance(_Bosl2Base):\n    def __init__(self, diam=None, pitch=None, internal=None, tolerance=None, **kwargs):\n       super().__init__(\"_UTS_thread_tolerance\", {\"diam\" : diam, \"pitch\" : pitch, \"internal\" : internal, \"tolerance\" : tolerance, **kwargs})\n\nclass _exact_thread_tolerance(_Bosl2Base):\n    def __init__(self, d=None, P=None, **kwargs):\n       super().__init__(\"_exact_thread_tolerance\", {\"d\" : d, \"P\" : P, **kwargs})\n\nclass _parse_screw_name(_Bosl2Base):\n    def __init__(self, name=None, **kwargs):\n       super().__init__(\"_parse_screw_name\", {\"name\" : name, **kwargs})\n\nclass _parse_drive(_Bosl2Base):\n    def __init__(self, drive=None, drive_size=None, **kwargs):\n       super().__init__(\"_parse_drive\", {\"drive\" : drive, \"drive_size\" : drive_size, **kwargs})\n\nclass screw_head(_Bosl2Base):\n    def __init__(self, screw_info=None, details=None, counterbore=None, flat_height=None, teardrop=None, slop=None, **kwargs):\n       super().__init__(\"screw_head\", {\"screw_info\" : screw_info, \"details\" : details, \"counterbore\" : counterbore, \"flat_height\" : flat_height, \"teardrop\" : teardrop, \"slop\" : slop, **kwargs})\n\nclass nut(_Bosl2Base):\n    def __init__(self, spec=None, shape=None, thickness=None, nutwidth=None, thread=None, tolerance=None, hole_oversize=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, blunt_start=None, blunt_start1=None, blunt_start2=None, anchor=None, spin=None, orient=None, oversize=None, **kwargs):\n       super().__init__(\"nut\", {\"spec\" : spec, \"shape\" : shape, \"thickness\" : thickness, \"nutwidth\" : nutwidth, \"thread\" : thread, \"tolerance\" : tolerance, \"hole_oversize\" : hole_oversize, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"oversize\" : oversize, **kwargs})\n\nclass screw_info(_Bosl2Base):\n    def __init__(self, name=None, head=None, drive=None, thread=None, drive_size=None, shaft_oversize=None, head_oversize=None, _origin=None, **kwargs):\n       super().__init__(\"screw_info\", {\"name\" : name, \"head\" : head, \"drive\" : drive, \"thread\" : thread, \"drive_size\" : drive_size, \"shaft_oversize\" : shaft_oversize, \"head_oversize\" : head_oversize, \"_origin\" : _origin, **kwargs})\n\nclass nut_info(_Bosl2Base):\n    def __init__(self, name=None, shape=None, thickness=None, thread=None, hole_oversize=None, width=None, _origin=None, **kwargs):\n       super().__init__(\"nut_info\", {\"name\" : name, \"shape\" : shape, \"thickness\" : thickness, \"thread\" : thread, \"hole_oversize\" : hole_oversize, \"width\" : width, \"_origin\" : _origin, **kwargs})\n\nclass _nut_info_english(_Bosl2Base):\n    def __init__(self, diam=None, threadcount=None, thread=None, shape=None, thickness=None, width=None, **kwargs):\n       super().__init__(\"_nut_info_english\", {\"diam\" : diam, \"threadcount\" : threadcount, \"thread\" : thread, \"shape\" : shape, \"thickness\" : thickness, \"width\" : width, **kwargs})\n\nclass _downcase_if_str(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"_downcase_if_str\", {\"s\" : s, **kwargs})\n\nclass _nut_info_metric(_Bosl2Base):\n    def __init__(self, diam=None, pitch=None, thread=None, shape=None, thickness=None, width=None, **kwargs):\n       super().__init__(\"_nut_info_metric\", {\"diam\" : diam, \"pitch\" : pitch, \"thread\" : thread, \"shape\" : shape, \"thickness\" : thickness, \"width\" : width, **kwargs})\n\nclass _screw_info_english(_Bosl2Base):\n    def __init__(self, diam=None, threadcount=None, head=None, thread=None, drive=None, **kwargs):\n       super().__init__(\"_screw_info_english\", {\"diam\" : diam, \"threadcount\" : threadcount, \"head\" : head, \"thread\" : thread, \"drive\" : drive, **kwargs})\n\nclass _screw_info_metric(_Bosl2Base):\n    def __init__(self, diam=None, pitch=None, head=None, thread=None, drive=None, **kwargs):\n       super().__init__(\"_screw_info_metric\", {\"diam\" : diam, \"pitch\" : pitch, \"head\" : head, \"thread\" : thread, \"drive\" : drive, **kwargs})\n\nclass _is_positive(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_is_positive\", {\"x\" : x, **kwargs})\n\nclass _validate_nut_spec(_Bosl2Base):\n    def __init__(self, spec=None, **kwargs):\n       super().__init__(\"_validate_nut_spec\", {\"spec\" : spec, **kwargs})\n\nclass _validate_screw_spec(_Bosl2Base):\n    def __init__(self, spec=None, **kwargs):\n       super().__init__(\"_validate_screw_spec\", {\"spec\" : spec, **kwargs})\n\nclass thread_specification(_Bosl2Base):\n    def __init__(self, screw_spec=None, tolerance=None, internal=None, **kwargs):\n       super().__init__(\"thread_specification\", {\"screw_spec\" : screw_spec, \"tolerance\" : tolerance, \"internal\" : internal, **kwargs})\n\nclass screw(_Bosl2Base):\n    def __init__(self, spec=None, head=None, drive=None, thread=None, drive_size=None, length=None, l=None, thread_len=None, tolerance=None, details=None, undersize=None, shaft_undersize=None, head_undersize=None, atype=None, anchor=None, spin=None, orient=None, _shoulder_diam=None, _shoulder_len=None, bevel=None, bevel1=None, bevel2=None, bevelsize=None, blunt_start=None, blunt_start1=None, blunt_start2=None, _internal=None, _counterbore=None, _teardrop=None, **kwargs):\n       super().__init__(\"screw\", {\"spec\" : spec, \"head\" : head, \"drive\" : drive, \"thread\" : thread, \"drive_size\" : drive_size, \"length\" : length, \"l\" : l, \"thread_len\" : thread_len, \"tolerance\" : tolerance, \"details\" : details, \"undersize\" : undersize, \"shaft_undersize\" : shaft_undersize, \"head_undersize\" : head_undersize, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"_shoulder_diam\" : _shoulder_diam, \"_shoulder_len\" : _shoulder_len, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevelsize\" : bevelsize, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"_internal\" : _internal, \"_counterbore\" : _counterbore, \"_teardrop\" : _teardrop, **kwargs})\n\nclass screw_hole(_Bosl2Base):\n    def __init__(self, spec=None, head=None, thread=None, oversize=None, hole_oversize=None, head_oversize=None, length=None, l=None, thread_len=None, tolerance=None, counterbore=None, teardrop=None, bevel=None, bevel1=None, bevel2=None, blunt_start=None, blunt_start1=None, blunt_start2=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"screw_hole\", {\"spec\" : spec, \"head\" : head, \"thread\" : thread, \"oversize\" : oversize, \"hole_oversize\" : hole_oversize, \"head_oversize\" : head_oversize, \"length\" : length, \"l\" : l, \"thread_len\" : thread_len, \"tolerance\" : tolerance, \"counterbore\" : counterbore, \"teardrop\" : teardrop, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass shoulder_screw(_Bosl2Base):\n    def __init__(self, s=None, d=None, length=None, head=None, thread_len=None, tolerance=None, head_size=None, drive=None, drive_size=None, thread=None, undersize=None, shaft_undersize=None, head_undersize=None, shoulder_undersize=None, blunt_start=None, blunt_start1=None, blunt_start2=None, atype=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"shoulder_screw\", {\"s\" : s, \"d\" : d, \"length\" : length, \"head\" : head, \"thread_len\" : thread_len, \"tolerance\" : tolerance, \"head_size\" : head_size, \"drive\" : drive, \"drive_size\" : drive_size, \"thread\" : thread, \"undersize\" : undersize, \"shaft_undersize\" : shaft_undersize, \"head_undersize\" : head_undersize, \"shoulder_undersize\" : shoulder_undersize, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"atype\" : atype, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\nclass _driver(_Bosl2Base):\n    def __init__(self, spec=None, **kwargs):\n       super().__init__(\"_driver\", {\"spec\" : spec, **kwargs})\n\nclass screw_head(_Bosl2Base):\n    def __init__(self, screw_info=None, details=None, counterbore=None, flat_height=None, teardrop=None, slop=None, **kwargs):\n       super().__init__(\"screw_head\", {\"screw_info\" : screw_info, \"details\" : details, \"counterbore\" : counterbore, \"flat_height\" : flat_height, \"teardrop\" : teardrop, \"slop\" : slop, **kwargs})\n\nclass nut(_Bosl2Base):\n    def __init__(self, spec=None, shape=None, thickness=None, nutwidth=None, thread=None, tolerance=None, hole_oversize=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, blunt_start=None, blunt_start1=None, blunt_start2=None, anchor=None, spin=None, orient=None, oversize=None, **kwargs):\n       super().__init__(\"nut\", {\"spec\" : spec, \"shape\" : shape, \"thickness\" : thickness, \"nutwidth\" : nutwidth, \"thread\" : thread, \"tolerance\" : tolerance, \"hole_oversize\" : hole_oversize, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"oversize\" : oversize, **kwargs})\n\nclass nut_trap_side(_Bosl2Base):\n    def __init__(self, trap_width=None, spec=None, shape=None, thickness=None, nutwidth=None, anchor=None, orient=None, spin=None, poke_len=None, poke_diam=None, **kwargs):\n       super().__init__(\"nut_trap_side\", {\"trap_width\" : trap_width, \"spec\" : spec, \"shape\" : shape, \"thickness\" : thickness, \"nutwidth\" : nutwidth, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, \"poke_len\" : poke_len, \"poke_diam\" : poke_diam, **kwargs})\n\nclass nut_trap_inline(_Bosl2Base):\n    def __init__(self, length=None, spec=None, shape=None, l=None, height=None, h=None, nutwidth=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"nut_trap_inline\", {\"length\" : length, \"spec\" : spec, \"shape\" : shape, \"l\" : l, \"height\" : height, \"h\" : h, \"nutwidth\" : nutwidth, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/shapes2d.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/shapes2d.scad'}\", False)\n\nclass square(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"square\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass rect(_Bosl2Base):\n    def __init__(self, size=None, rounding=None, chamfer=None, atype=None, anchor=None, spin=None, _return_override=None, corner_flip=None, **kwargs):\n       super().__init__(\"rect\", {\"size\" : size, \"rounding\" : rounding, \"chamfer\" : chamfer, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"_return_override\" : _return_override, \"corner_flip\" : corner_flip, **kwargs})\n\nclass circle(_Bosl2Base):\n    def __init__(self, r=None, d=None, points=None, corner=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"circle\", {\"r\" : r, \"d\" : d, \"points\" : points, \"corner\" : corner, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass _ellipse_refine(_Bosl2Base):\n    def __init__(self, a=None, b=None, N=None, _theta=None, **kwargs):\n       super().__init__(\"_ellipse_refine\", {\"a\" : a, \"b\" : b, \"N\" : N, \"_theta\" : _theta, **kwargs})\n\nclass _ellipse_refine_realign(_Bosl2Base):\n    def __init__(self, a=None, b=None, N=None, _theta=None, i=None, **kwargs):\n       super().__init__(\"_ellipse_refine_realign\", {\"a\" : a, \"b\" : b, \"N\" : N, \"_theta\" : _theta, \"i\" : i, **kwargs})\n\nclass ellipse(_Bosl2Base):\n    def __init__(self, r=None, d=None, realign=None, circum=None, uniform=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"ellipse\", {\"r\" : r, \"d\" : d, \"realign\" : realign, \"circum\" : circum, \"uniform\" : uniform, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass regular_ngon(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, _mat=None, _anchs=None, **kwargs):\n       super().__init__(\"regular_ngon\", {\"n\" : n, \"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, \"_mat\" : _mat, \"_anchs\" : _anchs, **kwargs})\n\nclass pentagon(_Bosl2Base):\n    def __init__(self, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"pentagon\", {\"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass hexagon(_Bosl2Base):\n    def __init__(self, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"hexagon\", {\"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass octagon(_Bosl2Base):\n    def __init__(self, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"octagon\", {\"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass right_triangle(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"right_triangle\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass _trapezoid_dims(_Bosl2Base):\n    def __init__(self, h=None, w1=None, w2=None, shift=None, ang=None, **kwargs):\n       super().__init__(\"_trapezoid_dims\", {\"h\" : h, \"w1\" : w1, \"w2\" : w2, \"shift\" : shift, \"ang\" : ang, **kwargs})\n\nclass trapezoid(_Bosl2Base):\n    def __init__(self, h=None, w1=None, w2=None, ang=None, shift=None, chamfer=None, rounding=None, flip=None, anchor=None, spin=None, atype=None, _return_override=None, angle=None, **kwargs):\n       super().__init__(\"trapezoid\", {\"h\" : h, \"w1\" : w1, \"w2\" : w2, \"ang\" : ang, \"shift\" : shift, \"chamfer\" : chamfer, \"rounding\" : rounding, \"flip\" : flip, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, \"_return_override\" : _return_override, \"angle\" : angle, **kwargs})\n\nclass star(_Bosl2Base):\n    def __init__(self, n=None, r=None, ir=None, d=None, _or=None, od=None, id=None, step=None, realign=None, align_tip=None, align_pit=None, anchor=None, spin=None, atype=None, _mat=None, _anchs=None, **kwargs):\n       super().__init__(\"star\", {\"n\" : n, \"r\" : r, \"ir\" : ir, \"d\" : d, \"_or\" : _or, \"od\" : od, \"id\" : id, \"step\" : step, \"realign\" : realign, \"align_tip\" : align_tip, \"align_pit\" : align_pit, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, \"_mat\" : _mat, \"_anchs\" : _anchs, **kwargs})\n\nclass _path_add_jitter(_Bosl2Base):\n    def __init__(self, path=None, dist=None, closed=None, **kwargs):\n       super().__init__(\"_path_add_jitter\", {\"path\" : path, \"dist\" : dist, \"closed\" : closed, **kwargs})\n\nclass teardrop2d(_Bosl2Base):\n    def __init__(self, r=None, ang=None, cap_h=None, d=None, circum=None, realign=None, anchor=None, spin=None, bot_corner=None, _extrapt=None, **kwargs):\n       super().__init__(\"teardrop2d\", {\"r\" : r, \"ang\" : ang, \"cap_h\" : cap_h, \"d\" : d, \"circum\" : circum, \"realign\" : realign, \"anchor\" : anchor, \"spin\" : spin, \"bot_corner\" : bot_corner, \"_extrapt\" : _extrapt, **kwargs})\n\nclass egg(_Bosl2Base):\n    def __init__(self, length=None, r1=None, r2=None, R=None, d1=None, d2=None, D=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"egg\", {\"length\" : length, \"r1\" : r1, \"r2\" : r2, \"R\" : R, \"d1\" : d1, \"d2\" : d2, \"D\" : D, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass ring(_Bosl2Base):\n    def __init__(self, n=None, ring_width=None, r=None, r1=None, r2=None, angle=None, d=None, d1=None, d2=None, cp=None, points=None, corner=None, width=None, thickness=None, start=None, long=None, full=None, cw=None, ccw=None, **kwargs):\n       super().__init__(\"ring\", {\"n\" : n, \"ring_width\" : ring_width, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"angle\" : angle, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"cp\" : cp, \"points\" : points, \"corner\" : corner, \"width\" : width, \"thickness\" : thickness, \"start\" : start, \"long\" : long, \"full\" : full, \"cw\" : cw, \"ccw\" : ccw, **kwargs})\n\nclass glued_circles(_Bosl2Base):\n    def __init__(self, r=None, spread=None, tangent=None, d=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"glued_circles\", {\"r\" : r, \"spread\" : spread, \"tangent\" : tangent, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass squircle(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, style=None, anchor=None, spin=None, atype=None, **kwargs):\n       super().__init__(\"squircle\", {\"size\" : size, \"squareness\" : squareness, \"style\" : style, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, **kwargs})\n\nclass _squircle_fg(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, **kwargs):\n       super().__init__(\"_squircle_fg\", {\"size\" : size, \"squareness\" : squareness, **kwargs})\n\nclass squircle_radius_fg(_Bosl2Base):\n    def __init__(self, squareness=None, r=None, angle=None, **kwargs):\n       super().__init__(\"squircle_radius_fg\", {\"squareness\" : squareness, \"r\" : r, \"angle\" : angle, **kwargs})\n\nclass _linearize_squareness(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"_linearize_squareness\", {\"s\" : s, **kwargs})\n\nclass _squircle_se(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, **kwargs):\n       super().__init__(\"_squircle_se\", {\"size\" : size, \"squareness\" : squareness, **kwargs})\n\nclass squircle_radius_se(_Bosl2Base):\n    def __init__(self, n=None, r=None, angle=None, **kwargs):\n       super().__init__(\"squircle_radius_se\", {\"n\" : n, \"r\" : r, \"angle\" : angle, **kwargs})\n\nclass _squircle_se_exponent(_Bosl2Base):\n    def __init__(self, squareness=None, **kwargs):\n       super().__init__(\"_squircle_se_exponent\", {\"squareness\" : squareness, **kwargs})\n\nclass _squircle_bz(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, **kwargs):\n       super().__init__(\"_squircle_bz\", {\"size\" : size, \"squareness\" : squareness, **kwargs})\n\nclass keyhole(_Bosl2Base):\n    def __init__(self, l=None, r1=None, r2=None, shoulder_r=None, d1=None, d2=None, length=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"keyhole\", {\"l\" : l, \"r1\" : r1, \"r2\" : r2, \"shoulder_r\" : shoulder_r, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass reuleaux_polygon(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"reuleaux_polygon\", {\"n\" : n, \"r\" : r, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass supershape(_Bosl2Base):\n    def __init__(self, step=None, n=None, m1=None, m2=None, n1=None, n2=None, n3=None, a=None, b=None, r=None, d=None, anchor=None, spin=None, atype=None, **kwargs):\n       super().__init__(\"supershape\", {\"step\" : step, \"n\" : n, \"m1\" : m1, \"m2\" : m2, \"n1\" : n1, \"n2\" : n2, \"n3\" : n3, \"a\" : a, \"b\" : b, \"r\" : r, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, **kwargs})\n\nclass _superformula(_Bosl2Base):\n    def __init__(self, theta=None, m1=None, m2=None, n1=None, n2=None, n3=None, a=None, b=None, **kwargs):\n       super().__init__(\"_superformula\", {\"theta\" : theta, \"m1\" : m1, \"m2\" : m2, \"n1\" : n1, \"n2\" : n2, \"n3\" : n3, \"a\" : a, \"b\" : b, **kwargs})\n\nclass square(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"square\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass rect(_Bosl2Base):\n    def __init__(self, size=None, rounding=None, atype=None, chamfer=None, anchor=None, spin=None, corner_flip=None, **kwargs):\n       super().__init__(\"rect\", {\"size\" : size, \"rounding\" : rounding, \"atype\" : atype, \"chamfer\" : chamfer, \"anchor\" : anchor, \"spin\" : spin, \"corner_flip\" : corner_flip, **kwargs})\n\nclass circle(_Bosl2Base):\n    def __init__(self, r=None, d=None, points=None, corner=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"circle\", {\"r\" : r, \"d\" : d, \"points\" : points, \"corner\" : corner, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass ellipse(_Bosl2Base):\n    def __init__(self, r=None, d=None, realign=None, circum=None, uniform=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"ellipse\", {\"r\" : r, \"d\" : d, \"realign\" : realign, \"circum\" : circum, \"uniform\" : uniform, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass regular_ngon(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"regular_ngon\", {\"n\" : n, \"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass pentagon(_Bosl2Base):\n    def __init__(self, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"pentagon\", {\"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass hexagon(_Bosl2Base):\n    def __init__(self, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"hexagon\", {\"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass octagon(_Bosl2Base):\n    def __init__(self, r=None, d=None, _or=None, od=None, ir=None, id=None, side=None, rounding=None, realign=None, align_tip=None, align_side=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"octagon\", {\"r\" : r, \"d\" : d, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"side\" : side, \"rounding\" : rounding, \"realign\" : realign, \"align_tip\" : align_tip, \"align_side\" : align_side, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass right_triangle(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"right_triangle\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass trapezoid(_Bosl2Base):\n    def __init__(self, h=None, w1=None, w2=None, ang=None, shift=None, chamfer=None, rounding=None, flip=None, anchor=None, spin=None, atype=None, angle=None, **kwargs):\n       super().__init__(\"trapezoid\", {\"h\" : h, \"w1\" : w1, \"w2\" : w2, \"ang\" : ang, \"shift\" : shift, \"chamfer\" : chamfer, \"rounding\" : rounding, \"flip\" : flip, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, \"angle\" : angle, **kwargs})\n\nclass star(_Bosl2Base):\n    def __init__(self, n=None, r=None, ir=None, d=None, _or=None, od=None, id=None, step=None, realign=None, align_tip=None, align_pit=None, anchor=None, spin=None, atype=None, **kwargs):\n       super().__init__(\"star\", {\"n\" : n, \"r\" : r, \"ir\" : ir, \"d\" : d, \"_or\" : _or, \"od\" : od, \"id\" : id, \"step\" : step, \"realign\" : realign, \"align_tip\" : align_tip, \"align_pit\" : align_pit, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, **kwargs})\n\nclass jittered_poly(_Bosl2Base):\n    def __init__(self, path=None, dist=None, **kwargs):\n       super().__init__(\"jittered_poly\", {\"path\" : path, \"dist\" : dist, **kwargs})\n\nclass teardrop2d(_Bosl2Base):\n    def __init__(self, r=None, ang=None, cap_h=None, d=None, circum=None, realign=None, bot_corner=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"teardrop2d\", {\"r\" : r, \"ang\" : ang, \"cap_h\" : cap_h, \"d\" : d, \"circum\" : circum, \"realign\" : realign, \"bot_corner\" : bot_corner, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass egg(_Bosl2Base):\n    def __init__(self, length=None, r1=None, r2=None, R=None, d1=None, d2=None, D=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"egg\", {\"length\" : length, \"r1\" : r1, \"r2\" : r2, \"R\" : R, \"d1\" : d1, \"d2\" : d2, \"D\" : D, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass ring(_Bosl2Base):\n    def __init__(self, n=None, ring_width=None, r=None, r1=None, r2=None, angle=None, d=None, d1=None, d2=None, cp=None, points=None, corner=None, width=None, thickness=None, start=None, long=None, full=None, cw=None, ccw=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"ring\", {\"n\" : n, \"ring_width\" : ring_width, \"r\" : r, \"r1\" : r1, \"r2\" : r2, \"angle\" : angle, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"cp\" : cp, \"points\" : points, \"corner\" : corner, \"width\" : width, \"thickness\" : thickness, \"start\" : start, \"long\" : long, \"full\" : full, \"cw\" : cw, \"ccw\" : ccw, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass glued_circles(_Bosl2Base):\n    def __init__(self, r=None, spread=None, tangent=None, d=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"glued_circles\", {\"r\" : r, \"spread\" : spread, \"tangent\" : tangent, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass squircle(_Bosl2Base):\n    def __init__(self, size=None, squareness=None, style=None, anchor=None, spin=None, atype=None, **kwargs):\n       super().__init__(\"squircle\", {\"size\" : size, \"squareness\" : squareness, \"style\" : style, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, **kwargs})\n\nclass keyhole(_Bosl2Base):\n    def __init__(self, l=None, r1=None, r2=None, shoulder_r=None, d1=None, d2=None, length=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"keyhole\", {\"l\" : l, \"r1\" : r1, \"r2\" : r2, \"shoulder_r\" : shoulder_r, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass reuleaux_polygon(_Bosl2Base):\n    def __init__(self, n=None, r=None, d=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"reuleaux_polygon\", {\"n\" : n, \"r\" : r, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass supershape(_Bosl2Base):\n    def __init__(self, step=None, n=None, m1=None, m2=None, n1=None, n2=None, n3=None, a=None, b=None, r=None, d=None, anchor=None, spin=None, atype=None, **kwargs):\n       super().__init__(\"supershape\", {\"step\" : step, \"n\" : n, \"m1\" : m1, \"m2\" : m2, \"n1\" : n1, \"n2\" : n2, \"n3\" : n3, \"a\" : a, \"b\" : b, \"r\" : r, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"atype\" : atype, **kwargs})\n\nclass text(_Bosl2Base):\n    def __init__(self, text=None, size=None, font=None, halign=None, valign=None, spacing=None, direction=None, language=None, script=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"text\", {\"text\" : text, \"size\" : size, \"font\" : font, \"halign\" : halign, \"valign\" : valign, \"spacing\" : spacing, \"direction\" : direction, \"language\" : language, \"script\" : script, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass round2d(_Bosl2Base):\n    def __init__(self, r=None, _or=None, ir=None, **kwargs):\n       super().__init__(\"round2d\", {\"r\" : r, \"_or\" : _or, \"ir\" : ir, **kwargs})\n\nclass shell2d(_Bosl2Base):\n    def __init__(self, thickness=None, _or=None, ir=None, **kwargs):\n       super().__init__(\"shell2d\", {\"thickness\" : thickness, \"_or\" : _or, \"ir\" : ir, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/shapes3d.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/shapes3d.scad'}\", False)\n\nclass cube(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cube\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cuboid(_Bosl2Base):\n    def __init__(self, size=None, p1=None, p2=None, chamfer=None, rounding=None, edges=None, except_edges=None, trimcorners=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cuboid\", {\"size\" : size, \"p1\" : p1, \"p2\" : p2, \"chamfer\" : chamfer, \"rounding\" : rounding, \"edges\" : edges, \"except_edges\" : except_edges, \"trimcorners\" : trimcorners, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass prismoid(_Bosl2Base):\n    def __init__(self, size1=None, size2=None, h=None, shift=None, rounding=None, rounding1=None, rounding2=None, chamfer=None, chamfer1=None, chamfer2=None, l=None, height=None, length=None, center=None, anchor=None, spin=None, orient=None, xang=None, yang=None, _return_dim=None, **kwargs):\n       super().__init__(\"prismoid\", {\"size1\" : size1, \"size2\" : size2, \"h\" : h, \"shift\" : shift, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"l\" : l, \"height\" : height, \"length\" : length, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"xang\" : xang, \"yang\" : yang, \"_return_dim\" : _return_dim, **kwargs})\n\nclass regular_prism(_Bosl2Base):\n    def __init__(self, n=None, h=None, r=None, center=None, l=None, length=None, height=None, r1=None, r2=None, ir=None, ir1=None, ir2=None, _or=None, or1=None, or2=None, side=None, side1=None, side2=None, d=None, d1=None, d2=None, id=None, id1=None, id2=None, od=None, od1=None, od2=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, shift=None, teardrop=None, clip_angle=None, from_end=None, from_end1=None, from_end2=None, texture=None, tex_size=None, tex_reps=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_samples=None, tex_taper=None, style=None, anchor=None, spin=None, orient=None, _return_anchors=None, **kwargs):\n       super().__init__(\"regular_prism\", {\"n\" : n, \"h\" : h, \"r\" : r, \"center\" : center, \"l\" : l, \"length\" : length, \"height\" : height, \"r1\" : r1, \"r2\" : r2, \"ir\" : ir, \"ir1\" : ir1, \"ir2\" : ir2, \"_or\" : _or, \"or1\" : or1, \"or2\" : or2, \"side\" : side, \"side1\" : side1, \"side2\" : side2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"id\" : id, \"id1\" : id1, \"id2\" : id2, \"od\" : od, \"od1\" : od1, \"od2\" : od2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"shift\" : shift, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"from_end\" : from_end, \"from_end1\" : from_end1, \"from_end2\" : from_end2, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"tex_taper\" : tex_taper, \"style\" : style, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"_return_anchors\" : _return_anchors, **kwargs})\n\nclass textured_tile(_Bosl2Base):\n    def __init__(self, texture=None, size=None, ysize=None, height=None, w1=None, w2=None, ang=None, h=None, shift=None, thickness=None, tex_size=None, tex_reps=None, tex_inset=None, tex_rot=None, tex_depth=None, style=None, atype=None, tex_extra=None, tex_skip=None, anchor=None, spin=None, orient=None, _return_anchor=None, **kwargs):\n       super().__init__(\"textured_tile\", {\"texture\" : texture, \"size\" : size, \"ysize\" : ysize, \"height\" : height, \"w1\" : w1, \"w2\" : w2, \"ang\" : ang, \"h\" : h, \"shift\" : shift, \"thickness\" : thickness, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"style\" : style, \"atype\" : atype, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"_return_anchor\" : _return_anchor, **kwargs})\n\nclass _rect_tube_rounding(_Bosl2Base):\n    def __init__(self, factor=None, ir=None, r=None, alternative=None, size=None, isize=None, **kwargs):\n       super().__init__(\"_rect_tube_rounding\", {\"factor\" : factor, \"ir\" : ir, \"r\" : r, \"alternative\" : alternative, \"size\" : size, \"isize\" : isize, **kwargs})\n\nclass rect_tube(_Bosl2Base):\n    def __init__(self, h=None, size=None, isize=None, center=None, shift=None, wall=None, size1=None, size2=None, isize1=None, isize2=None, rounding=None, rounding1=None, rounding2=None, irounding=None, irounding1=None, irounding2=None, chamfer=None, chamfer1=None, chamfer2=None, ichamfer=None, ichamfer1=None, ichamfer2=None, anchor=None, spin=None, orient=None, l=None, length=None, height=None, **kwargs):\n       super().__init__(\"rect_tube\", {\"h\" : h, \"size\" : size, \"isize\" : isize, \"center\" : center, \"shift\" : shift, \"wall\" : wall, \"size1\" : size1, \"size2\" : size2, \"isize1\" : isize1, \"isize2\" : isize2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"irounding\" : irounding, \"irounding1\" : irounding1, \"irounding2\" : irounding2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"ichamfer\" : ichamfer, \"ichamfer1\" : ichamfer1, \"ichamfer2\" : ichamfer2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"l\" : l, \"length\" : length, \"height\" : height, **kwargs})\n\nclass wedge(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"wedge\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass octahedron(_Bosl2Base):\n    def __init__(self, size=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"octahedron\", {\"size\" : size, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cylinder(_Bosl2Base):\n    def __init__(self, h=None, r1=None, r2=None, center=None, r=None, d=None, d1=None, d2=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cylinder\", {\"h\" : h, \"r1\" : r1, \"r2\" : r2, \"center\" : center, \"r\" : r, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _cyl_path(_Bosl2Base):\n    def __init__(self, r1=None, r2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, from_end=None, from_end1=None, from_end2=None, teardrop=None, clip_angle=None, n=None, noscale=None, **kwargs):\n       super().__init__(\"_cyl_path\", {\"r1\" : r1, \"r2\" : r2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"from_end\" : from_end, \"from_end1\" : from_end1, \"from_end2\" : from_end2, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"n\" : n, \"noscale\" : noscale, **kwargs})\n\nclass cyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, center=None, l=None, r1=None, r2=None, d=None, d1=None, d2=None, length=None, height=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, shift=None, teardrop=None, clip_angle=None, from_end=None, from_end1=None, from_end2=None, texture=None, tex_size=None, tex_reps=None, tex_counts=None, tex_inset=None, tex_rot=None, tex_scale=None, tex_depth=None, tex_samples=None, tex_taper=None, style=None, tex_style=None, extra=None, extra1=None, extra2=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cyl\", {\"h\" : h, \"r\" : r, \"center\" : center, \"l\" : l, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"height\" : height, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"shift\" : shift, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"from_end\" : from_end, \"from_end1\" : from_end1, \"from_end2\" : from_end2, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_counts\" : tex_counts, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_scale\" : tex_scale, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"tex_taper\" : tex_taper, \"style\" : style, \"tex_style\" : tex_style, \"extra\" : extra, \"extra1\" : extra1, \"extra2\" : extra2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _teardrop_corner(_Bosl2Base):\n    def __init__(self, r=None, corner=None, ang=None, **kwargs):\n       super().__init__(\"_teardrop_corner\", {\"r\" : r, \"corner\" : corner, \"ang\" : ang, **kwargs})\n\nclass _clipped_corner(_Bosl2Base):\n    def __init__(self, r=None, corner=None, ang=None, **kwargs):\n       super().__init__(\"_clipped_corner\", {\"r\" : r, \"corner\" : corner, \"ang\" : ang, **kwargs})\n\nclass xcyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, r1=None, r2=None, d1=None, d2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, from_end=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"xcyl\", {\"h\" : h, \"r\" : r, \"d\" : d, \"r1\" : r1, \"r2\" : r2, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"from_end\" : from_end, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass ycyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, r1=None, r2=None, d1=None, d2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, from_end=None, height=None, length=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ycyl\", {\"h\" : h, \"r\" : r, \"d\" : d, \"r1\" : r1, \"r2\" : r2, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"from_end\" : from_end, \"height\" : height, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass zcyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, r1=None, r2=None, d1=None, d2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, from_end=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"zcyl\", {\"h\" : h, \"r\" : r, \"d\" : d, \"r1\" : r1, \"r2\" : r2, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"from_end\" : from_end, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass tube(_Bosl2Base):\n    def __init__(self, h=None, _or=None, ir=None, center=None, od=None, id=None, wall=None, or1=None, or2=None, od1=None, od2=None, ir1=None, ir2=None, id1=None, id2=None, realign=None, l=None, length=None, height=None, anchor=None, spin=None, orient=None, orounding1=None, irounding1=None, orounding2=None, irounding2=None, rounding1=None, rounding2=None, rounding=None, ochamfer1=None, ichamfer1=None, ochamfer2=None, ichamfer2=None, chamfer1=None, chamfer2=None, chamfer=None, irounding=None, ichamfer=None, orounding=None, ochamfer=None, teardrop=None, clip_angle=None, shift=None, ifn=None, rounding_fn=None, circum=None, **kwargs):\n       super().__init__(\"tube\", {\"h\" : h, \"_or\" : _or, \"ir\" : ir, \"center\" : center, \"od\" : od, \"id\" : id, \"wall\" : wall, \"or1\" : or1, \"or2\" : or2, \"od1\" : od1, \"od2\" : od2, \"ir1\" : ir1, \"ir2\" : ir2, \"id1\" : id1, \"id2\" : id2, \"realign\" : realign, \"l\" : l, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"orounding1\" : orounding1, \"irounding1\" : irounding1, \"orounding2\" : orounding2, \"irounding2\" : irounding2, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"rounding\" : rounding, \"ochamfer1\" : ochamfer1, \"ichamfer1\" : ichamfer1, \"ochamfer2\" : ochamfer2, \"ichamfer2\" : ichamfer2, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfer\" : chamfer, \"irounding\" : irounding, \"ichamfer\" : ichamfer, \"orounding\" : orounding, \"ochamfer\" : ochamfer, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"shift\" : shift, \"ifn\" : ifn, \"rounding_fn\" : rounding_fn, \"circum\" : circum, **kwargs})\n\nclass pie_slice(_Bosl2Base):\n    def __init__(self, h=None, r=None, ang=None, center=None, r1=None, r2=None, d=None, d1=None, d2=None, l=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pie_slice\", {\"h\" : h, \"r\" : r, \"ang\" : ang, \"center\" : center, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass sphere(_Bosl2Base):\n    def __init__(self, r=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sphere\", {\"r\" : r, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _subsample_triangle(_Bosl2Base):\n    def __init__(self, p=None, N=None, **kwargs):\n       super().__init__(\"_subsample_triangle\", {\"p\" : p, \"N\" : N, **kwargs})\n\nclass _dual_vertices(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"_dual_vertices\", {\"vnf\" : vnf, **kwargs})\n\nclass spheroid(_Bosl2Base):\n    def __init__(self, r=None, style=None, d=None, circum=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"spheroid\", {\"r\" : r, \"style\" : style, \"d\" : d, \"circum\" : circum, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass torus(_Bosl2Base):\n    def __init__(self, r_maj=None, r_min=None, center=None, d_maj=None, d_min=None, _or=None, od=None, ir=None, id=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"torus\", {\"r_maj\" : r_maj, \"r_min\" : r_min, \"center\" : center, \"d_maj\" : d_maj, \"d_min\" : d_min, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass teardrop(_Bosl2Base):\n    def __init__(self, h=None, r=None, ang=None, cap_h=None, r1=None, r2=None, d=None, d1=None, d2=None, cap_h1=None, cap_h2=None, chamfer=None, chamfer1=None, chamfer2=None, circum=None, realign=None, bot_corner1=None, bot_corner2=None, bot_corner=None, l=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"teardrop\", {\"h\" : h, \"r\" : r, \"ang\" : ang, \"cap_h\" : cap_h, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"cap_h1\" : cap_h1, \"cap_h2\" : cap_h2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"circum\" : circum, \"realign\" : realign, \"bot_corner1\" : bot_corner1, \"bot_corner2\" : bot_corner2, \"bot_corner\" : bot_corner, \"l\" : l, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass onion(_Bosl2Base):\n    def __init__(self, r=None, ang=None, cap_h=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"onion\", {\"r\" : r, \"ang\" : ang, \"cap_h\" : cap_h, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _cut_interp(_Bosl2Base):\n    def __init__(self, pathcut=None, path=None, data=None, **kwargs):\n       super().__init__(\"_cut_interp\", {\"pathcut\" : pathcut, \"path\" : path, \"data\" : data, **kwargs})\n\nclass fillet(_Bosl2Base):\n    def __init__(self, l=None, r=None, ang=None, r1=None, r2=None, d=None, d1=None, d2=None, excess=None, anchor=None, spin=None, orient=None, h=None, height=None, length=None, **kwargs):\n       super().__init__(\"fillet\", {\"l\" : l, \"r\" : r, \"ang\" : ang, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"excess\" : excess, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"h\" : h, \"height\" : height, \"length\" : length, **kwargs})\n\nclass plot3d(_Bosl2Base):\n    def __init__(self, f=None, x=None, y=None, zclip=None, zspan=None, base=None, anchor=None, orient=None, spin=None, atype=None, cp=None, style=None, **kwargs):\n       super().__init__(\"plot3d\", {\"f\" : f, \"x\" : x, \"y\" : y, \"zclip\" : zclip, \"zspan\" : zspan, \"base\" : base, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, \"atype\" : atype, \"cp\" : cp, \"style\" : style, **kwargs})\n\nclass plot_revolution(_Bosl2Base):\n    def __init__(self, f=None, angle=None, z=None, arclength=None, path=None, rclip=None, rspan=None, horiz=None, r1=None, r2=None, r=None, d1=None, d2=None, d=None, anchor=None, orient=None, spin=None, atype=None, cp=None, style=None, reverse=None, **kwargs):\n       super().__init__(\"plot_revolution\", {\"f\" : f, \"angle\" : angle, \"z\" : z, \"arclength\" : arclength, \"path\" : path, \"rclip\" : rclip, \"rspan\" : rspan, \"horiz\" : horiz, \"r1\" : r1, \"r2\" : r2, \"r\" : r, \"d1\" : d1, \"d2\" : d2, \"d\" : d, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, \"atype\" : atype, \"cp\" : cp, \"style\" : style, \"reverse\" : reverse, **kwargs})\n\nclass heightfield(_Bosl2Base):\n    def __init__(self, data=None, size=None, bottom=None, maxz=None, xrange=None, yrange=None, style=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"heightfield\", {\"data\" : data, \"size\" : size, \"bottom\" : bottom, \"maxz\" : maxz, \"xrange\" : xrange, \"yrange\" : yrange, \"style\" : style, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cylindrical_heightfield(_Bosl2Base):\n    def __init__(self, data=None, l=None, r=None, base=None, transpose=None, aspect=None, style=None, maxh=None, xrange=None, yrange=None, r1=None, r2=None, d=None, d1=None, d2=None, h=None, height=None, length=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cylindrical_heightfield\", {\"data\" : data, \"l\" : l, \"r\" : r, \"base\" : base, \"transpose\" : transpose, \"aspect\" : aspect, \"style\" : style, \"maxh\" : maxh, \"xrange\" : xrange, \"yrange\" : yrange, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"h\" : h, \"height\" : height, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cube(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cube\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cuboid(_Bosl2Base):\n    def __init__(self, size=None, p1=None, p2=None, chamfer=None, rounding=None, edges=None, _except=None, except_edges=None, trimcorners=None, teardrop=None, clip_angle=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cuboid\", {\"size\" : size, \"p1\" : p1, \"p2\" : p2, \"chamfer\" : chamfer, \"rounding\" : rounding, \"edges\" : edges, \"_except\" : _except, \"except_edges\" : except_edges, \"trimcorners\" : trimcorners, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass prismoid(_Bosl2Base):\n    def __init__(self, size1=None, size2=None, h=None, shift=None, xang=None, yang=None, rounding=None, rounding1=None, rounding2=None, chamfer=None, chamfer1=None, chamfer2=None, l=None, height=None, length=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"prismoid\", {\"size1\" : size1, \"size2\" : size2, \"h\" : h, \"shift\" : shift, \"xang\" : xang, \"yang\" : yang, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"l\" : l, \"height\" : height, \"length\" : length, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass regular_prism(_Bosl2Base):\n    def __init__(self, n=None, h=None, r=None, center=None, l=None, length=None, height=None, r1=None, r2=None, ir=None, ir1=None, ir2=None, _or=None, or1=None, or2=None, side=None, side1=None, side2=None, d=None, d1=None, d2=None, id=None, id1=None, id2=None, od=None, od1=None, od2=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, realign=None, shift=None, teardrop=None, clip_angle=None, from_end=None, from_end1=None, from_end2=None, texture=None, tex_size=None, tex_reps=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_samples=None, tex_taper=None, style=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"regular_prism\", {\"n\" : n, \"h\" : h, \"r\" : r, \"center\" : center, \"l\" : l, \"length\" : length, \"height\" : height, \"r1\" : r1, \"r2\" : r2, \"ir\" : ir, \"ir1\" : ir1, \"ir2\" : ir2, \"_or\" : _or, \"or1\" : or1, \"or2\" : or2, \"side\" : side, \"side1\" : side1, \"side2\" : side2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"id\" : id, \"id1\" : id1, \"id2\" : id2, \"od\" : od, \"od1\" : od1, \"od2\" : od2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"realign\" : realign, \"shift\" : shift, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"from_end\" : from_end, \"from_end1\" : from_end1, \"from_end2\" : from_end2, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"tex_taper\" : tex_taper, \"style\" : style, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass textured_tile(_Bosl2Base):\n    def __init__(self, texture=None, size=None, ysize=None, height=None, w1=None, w2=None, ang=None, h=None, shift=None, tex_size=None, tex_reps=None, tex_inset=None, tex_rot=None, tex_depth=None, diff=None, tex_extra=None, tex_skip=None, style=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"textured_tile\", {\"texture\" : texture, \"size\" : size, \"ysize\" : ysize, \"height\" : height, \"w1\" : w1, \"w2\" : w2, \"ang\" : ang, \"h\" : h, \"shift\" : shift, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"diff\" : diff, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"style\" : style, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rect_tube(_Bosl2Base):\n    def __init__(self, h=None, size=None, isize=None, center=None, shift=None, wall=None, size1=None, size2=None, isize1=None, isize2=None, rounding=None, rounding1=None, rounding2=None, irounding=None, irounding1=None, irounding2=None, chamfer=None, chamfer1=None, chamfer2=None, ichamfer=None, ichamfer1=None, ichamfer2=None, anchor=None, spin=None, orient=None, l=None, length=None, height=None, **kwargs):\n       super().__init__(\"rect_tube\", {\"h\" : h, \"size\" : size, \"isize\" : isize, \"center\" : center, \"shift\" : shift, \"wall\" : wall, \"size1\" : size1, \"size2\" : size2, \"isize1\" : isize1, \"isize2\" : isize2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"irounding\" : irounding, \"irounding1\" : irounding1, \"irounding2\" : irounding2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"ichamfer\" : ichamfer, \"ichamfer1\" : ichamfer1, \"ichamfer2\" : ichamfer2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"l\" : l, \"length\" : length, \"height\" : height, **kwargs})\n\nclass wedge(_Bosl2Base):\n    def __init__(self, size=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"wedge\", {\"size\" : size, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass octahedron(_Bosl2Base):\n    def __init__(self, size=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"octahedron\", {\"size\" : size, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cylinder(_Bosl2Base):\n    def __init__(self, h=None, r1=None, r2=None, center=None, r=None, d=None, d1=None, d2=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cylinder\", {\"h\" : h, \"r1\" : r1, \"r2\" : r2, \"center\" : center, \"r\" : r, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, center=None, l=None, r1=None, r2=None, d=None, d1=None, d2=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, shift=None, teardrop=None, clip_angle=None, from_end=None, from_end1=None, from_end2=None, texture=None, tex_size=None, tex_reps=None, tex_counts=None, tex_inset=None, tex_rot=None, tex_scale=None, tex_depth=None, tex_samples=None, length=None, height=None, tex_taper=None, style=None, tex_style=None, extra=None, extra1=None, extra2=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cyl\", {\"h\" : h, \"r\" : r, \"center\" : center, \"l\" : l, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"shift\" : shift, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"from_end\" : from_end, \"from_end1\" : from_end1, \"from_end2\" : from_end2, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_counts\" : tex_counts, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_scale\" : tex_scale, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"length\" : length, \"height\" : height, \"tex_taper\" : tex_taper, \"style\" : style, \"tex_style\" : tex_style, \"extra\" : extra, \"extra1\" : extra1, \"extra2\" : extra2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass xcyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, r1=None, r2=None, d1=None, d2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, from_end=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"xcyl\", {\"h\" : h, \"r\" : r, \"d\" : d, \"r1\" : r1, \"r2\" : r2, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"from_end\" : from_end, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass ycyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, r1=None, r2=None, d1=None, d2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, from_end=None, height=None, length=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ycyl\", {\"h\" : h, \"r\" : r, \"d\" : d, \"r1\" : r1, \"r2\" : r2, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"from_end\" : from_end, \"height\" : height, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass zcyl(_Bosl2Base):\n    def __init__(self, h=None, r=None, d=None, r1=None, r2=None, d1=None, d2=None, l=None, chamfer=None, chamfer1=None, chamfer2=None, chamfang=None, chamfang1=None, chamfang2=None, rounding=None, rounding1=None, rounding2=None, circum=None, realign=None, from_end=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"zcyl\", {\"h\" : h, \"r\" : r, \"d\" : d, \"r1\" : r1, \"r2\" : r2, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfang\" : chamfang, \"chamfang1\" : chamfang1, \"chamfang2\" : chamfang2, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"circum\" : circum, \"realign\" : realign, \"from_end\" : from_end, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass tube(_Bosl2Base):\n    def __init__(self, h=None, _or=None, ir=None, center=None, od=None, id=None, wall=None, or1=None, or2=None, od1=None, od2=None, ir1=None, ir2=None, id1=None, id2=None, realign=None, l=None, length=None, height=None, anchor=None, spin=None, orient=None, orounding1=None, irounding1=None, orounding2=None, irounding2=None, rounding1=None, rounding2=None, rounding=None, ochamfer1=None, ichamfer1=None, ochamfer2=None, ichamfer2=None, chamfer1=None, chamfer2=None, chamfer=None, irounding=None, ichamfer=None, orounding=None, ochamfer=None, teardrop=None, clip_angle=None, shift=None, ifn=None, rounding_fn=None, circum=None, **kwargs):\n       super().__init__(\"tube\", {\"h\" : h, \"_or\" : _or, \"ir\" : ir, \"center\" : center, \"od\" : od, \"id\" : id, \"wall\" : wall, \"or1\" : or1, \"or2\" : or2, \"od1\" : od1, \"od2\" : od2, \"ir1\" : ir1, \"ir2\" : ir2, \"id1\" : id1, \"id2\" : id2, \"realign\" : realign, \"l\" : l, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"orounding1\" : orounding1, \"irounding1\" : irounding1, \"orounding2\" : orounding2, \"irounding2\" : irounding2, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"rounding\" : rounding, \"ochamfer1\" : ochamfer1, \"ichamfer1\" : ichamfer1, \"ochamfer2\" : ochamfer2, \"ichamfer2\" : ichamfer2, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"chamfer\" : chamfer, \"irounding\" : irounding, \"ichamfer\" : ichamfer, \"orounding\" : orounding, \"ochamfer\" : ochamfer, \"teardrop\" : teardrop, \"clip_angle\" : clip_angle, \"shift\" : shift, \"ifn\" : ifn, \"rounding_fn\" : rounding_fn, \"circum\" : circum, **kwargs})\n\nclass pie_slice(_Bosl2Base):\n    def __init__(self, h=None, r=None, ang=None, center=None, r1=None, r2=None, d=None, d1=None, d2=None, l=None, length=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"pie_slice\", {\"h\" : h, \"r\" : r, \"ang\" : ang, \"center\" : center, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"l\" : l, \"length\" : length, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass sphere(_Bosl2Base):\n    def __init__(self, r=None, d=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sphere\", {\"r\" : r, \"d\" : d, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass spheroid(_Bosl2Base):\n    def __init__(self, r=None, style=None, d=None, circum=None, dual=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"spheroid\", {\"r\" : r, \"style\" : style, \"d\" : d, \"circum\" : circum, \"dual\" : dual, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass torus(_Bosl2Base):\n    def __init__(self, r_maj=None, r_min=None, center=None, d_maj=None, d_min=None, _or=None, od=None, ir=None, id=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"torus\", {\"r_maj\" : r_maj, \"r_min\" : r_min, \"center\" : center, \"d_maj\" : d_maj, \"d_min\" : d_min, \"_or\" : _or, \"od\" : od, \"ir\" : ir, \"id\" : id, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass teardrop(_Bosl2Base):\n    def __init__(self, h=None, r=None, ang=None, cap_h=None, r1=None, r2=None, d=None, d1=None, d2=None, cap_h1=None, cap_h2=None, l=None, length=None, height=None, circum=None, realign=None, chamfer=None, chamfer1=None, chamfer2=None, anchor=None, spin=None, orient=None, bot_corner1=None, bot_corner2=None, bot_corner=None, **kwargs):\n       super().__init__(\"teardrop\", {\"h\" : h, \"r\" : r, \"ang\" : ang, \"cap_h\" : cap_h, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"cap_h1\" : cap_h1, \"cap_h2\" : cap_h2, \"l\" : l, \"length\" : length, \"height\" : height, \"circum\" : circum, \"realign\" : realign, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"bot_corner1\" : bot_corner1, \"bot_corner2\" : bot_corner2, \"bot_corner\" : bot_corner, **kwargs})\n\nclass onion(_Bosl2Base):\n    def __init__(self, r=None, ang=None, cap_h=None, d=None, circum=None, realign=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"onion\", {\"r\" : r, \"ang\" : ang, \"cap_h\" : cap_h, \"d\" : d, \"circum\" : circum, \"realign\" : realign, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass text3d(_Bosl2Base):\n    def __init__(self, text=None, h=None, size=None, font=None, spacing=None, direction=None, language=None, script=None, height=None, thickness=None, atype=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"text3d\", {\"text\" : text, \"h\" : h, \"size\" : size, \"font\" : font, \"spacing\" : spacing, \"direction\" : direction, \"language\" : language, \"script\" : script, \"height\" : height, \"thickness\" : thickness, \"atype\" : atype, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass path_text(_Bosl2Base):\n    def __init__(self, path=None, text=None, font=None, size=None, thickness=None, lettersize=None, offset=None, reverse=None, normal=None, top=None, center=None, textmetrics=None, kern=None, height=None, h=None, valign=None, language=None, script=None, **kwargs):\n       super().__init__(\"path_text\", {\"path\" : path, \"text\" : text, \"font\" : font, \"size\" : size, \"thickness\" : thickness, \"lettersize\" : lettersize, \"offset\" : offset, \"reverse\" : reverse, \"normal\" : normal, \"top\" : top, \"center\" : center, \"textmetrics\" : textmetrics, \"kern\" : kern, \"height\" : height, \"h\" : h, \"valign\" : valign, \"language\" : language, \"script\" : script, **kwargs})\n\nclass interior_fillet(_Bosl2Base):\n    def __init__(self, l=None, r=None, ang=None, overlap=None, d=None, length=None, h=None, height=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"interior_fillet\", {\"l\" : l, \"r\" : r, \"ang\" : ang, \"overlap\" : overlap, \"d\" : d, \"length\" : length, \"h\" : h, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass fillet(_Bosl2Base):\n    def __init__(self, l=None, r=None, ang=None, r1=None, r2=None, excess=None, d1=None, d2=None, d=None, length=None, h=None, height=None, anchor=None, spin=None, orient=None, rounding=None, rounding1=None, rounding2=None, chamfer=None, chamfer1=None, chamfer2=None, **kwargs):\n       super().__init__(\"fillet\", {\"l\" : l, \"r\" : r, \"ang\" : ang, \"r1\" : r1, \"r2\" : r2, \"excess\" : excess, \"d1\" : d1, \"d2\" : d2, \"d\" : d, \"length\" : length, \"h\" : h, \"height\" : height, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"rounding\" : rounding, \"rounding1\" : rounding1, \"rounding2\" : rounding2, \"chamfer\" : chamfer, \"chamfer1\" : chamfer1, \"chamfer2\" : chamfer2, **kwargs})\n\nclass plot3d(_Bosl2Base):\n    def __init__(self, f=None, x=None, y=None, zclip=None, zspan=None, base=None, anchor=None, orient=None, spin=None, atype=None, cp=None, convexity=None, style=None, **kwargs):\n       super().__init__(\"plot3d\", {\"f\" : f, \"x\" : x, \"y\" : y, \"zclip\" : zclip, \"zspan\" : zspan, \"base\" : base, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, \"atype\" : atype, \"cp\" : cp, \"convexity\" : convexity, \"style\" : style, **kwargs})\n\nclass plot_revolution(_Bosl2Base):\n    def __init__(self, f=None, angle=None, z=None, arclength=None, path=None, rclip=None, rspan=None, horiz=None, r1=None, r2=None, r=None, d1=None, d2=None, d=None, convexity=None, anchor=None, orient=None, spin=None, atype=None, cp=None, style=None, reverse=None, **kwargs):\n       super().__init__(\"plot_revolution\", {\"f\" : f, \"angle\" : angle, \"z\" : z, \"arclength\" : arclength, \"path\" : path, \"rclip\" : rclip, \"rspan\" : rspan, \"horiz\" : horiz, \"r1\" : r1, \"r2\" : r2, \"r\" : r, \"d1\" : d1, \"d2\" : d2, \"d\" : d, \"convexity\" : convexity, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, \"atype\" : atype, \"cp\" : cp, \"style\" : style, \"reverse\" : reverse, **kwargs})\n\nclass heightfield(_Bosl2Base):\n    def __init__(self, data=None, size=None, bottom=None, maxz=None, xrange=None, yrange=None, style=None, convexity=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"heightfield\", {\"data\" : data, \"size\" : size, \"bottom\" : bottom, \"maxz\" : maxz, \"xrange\" : xrange, \"yrange\" : yrange, \"style\" : style, \"convexity\" : convexity, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass cylindrical_heightfield(_Bosl2Base):\n    def __init__(self, data=None, l=None, r=None, base=None, transpose=None, aspect=None, style=None, convexity=None, xrange=None, yrange=None, maxh=None, r1=None, r2=None, d=None, d1=None, d2=None, h=None, height=None, length=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"cylindrical_heightfield\", {\"data\" : data, \"l\" : l, \"r\" : r, \"base\" : base, \"transpose\" : transpose, \"aspect\" : aspect, \"style\" : style, \"convexity\" : convexity, \"xrange\" : xrange, \"yrange\" : yrange, \"maxh\" : maxh, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"h\" : h, \"height\" : height, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass ruler(_Bosl2Base):\n    def __init__(self, length=None, width=None, thickness=None, depth=None, labels=None, pipscale=None, maxscale=None, colors=None, alpha=None, unit=None, inch=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ruler\", {\"length\" : length, \"width\" : width, \"thickness\" : thickness, \"depth\" : depth, \"labels\" : labels, \"pipscale\" : pipscale, \"maxscale\" : maxscale, \"colors\" : colors, \"alpha\" : alpha, \"unit\" : unit, \"inch\" : inch, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/skin.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/skin.scad'}\", False)\n\n__vnf_no_n_mesg = _OpenSCADConstant('__vnf_no_n_mesg')\n_leadin_ogive = _OpenSCADConstant('_leadin_ogive')\n_leadin_cut = _OpenSCADConstant('_leadin_cut')\n_leadin_sqrt = _OpenSCADConstant('_leadin_sqrt')\n_leadin_linear = _OpenSCADConstant('_leadin_linear')\n_lead_in_table = _OpenSCADConstant('_lead_in_table')\n_MAP_DIAG = _OpenSCADConstant('_MAP_DIAG')\n_MAP_LEFT = _OpenSCADConstant('_MAP_LEFT')\n_MAP_UP = _OpenSCADConstant('_MAP_UP')\nclass skin(_Bosl2Base):\n    def __init__(self, profiles=None, slices=None, refine=None, method=None, sampling=None, caps=None, closed=None, z=None, style=None, anchor=None, cp=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"skin\", {\"profiles\" : profiles, \"slices\" : slices, \"refine\" : refine, \"method\" : method, \"sampling\" : sampling, \"caps\" : caps, \"closed\" : closed, \"z\" : z, \"style\" : style, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass _make_all_prism_anchors(_Bosl2Base):\n    def __init__(self, bot=None, top=None, startind=None, **kwargs):\n       super().__init__(\"_make_all_prism_anchors\", {\"bot\" : bot, \"top\" : top, \"startind\" : startind, **kwargs})\n\nclass linear_sweep(_Bosl2Base):\n    def __init__(self, region=None, height=None, center=None, twist=None, scale=None, shift=None, slices=None, maxseg=None, style=None, caps=None, cp=None, atype=None, h=None, texture=None, tex_size=None, tex_reps=None, tex_counts=None, tex_inset=None, tex_rot=None, tex_scale=None, tex_depth=None, tex_samples=None, l=None, length=None, anchor=None, spin=None, orient=None, _return_geom=None, **kwargs):\n       super().__init__(\"linear_sweep\", {\"region\" : region, \"height\" : height, \"center\" : center, \"twist\" : twist, \"scale\" : scale, \"shift\" : shift, \"slices\" : slices, \"maxseg\" : maxseg, \"style\" : style, \"caps\" : caps, \"cp\" : cp, \"atype\" : atype, \"h\" : h, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_counts\" : tex_counts, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_scale\" : tex_scale, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"l\" : l, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"_return_geom\" : _return_geom, **kwargs})\n\nclass rotate_sweep(_Bosl2Base):\n    def __init__(self, shape=None, angle=None, texture=None, tex_size=None, tex_counts=None, tex_reps=None, tex_inset=None, tex_rot=None, tex_scale=None, tex_depth=None, tex_samples=None, tex_aspect=None, pixel_aspect=None, tex_taper=None, shift=None, caps=None, closed=None, style=None, cp=None, atype=None, anchor=None, spin=None, orient=None, start=None, _tex_inhibit_y_slicing=None, **kwargs):\n       super().__init__(\"rotate_sweep\", {\"shape\" : shape, \"angle\" : angle, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_counts\" : tex_counts, \"tex_reps\" : tex_reps, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_scale\" : tex_scale, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"tex_aspect\" : tex_aspect, \"pixel_aspect\" : pixel_aspect, \"tex_taper\" : tex_taper, \"shift\" : shift, \"caps\" : caps, \"closed\" : closed, \"style\" : style, \"cp\" : cp, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"start\" : start, \"_tex_inhibit_y_slicing\" : _tex_inhibit_y_slicing, **kwargs})\n\nclass _force_xplus(_Bosl2Base):\n    def __init__(self, data=None, **kwargs):\n       super().__init__(\"_force_xplus\", {\"data\" : data, **kwargs})\n\nclass _ss_polygon_r(_Bosl2Base):\n    def __init__(self, N=None, theta=None, **kwargs):\n       super().__init__(\"_ss_polygon_r\", {\"N\" : N, \"theta\" : theta, **kwargs})\n\nclass spiral_sweep(_Bosl2Base):\n    def __init__(self, poly=None, h=None, r=None, turns=None, taper=None, r1=None, r2=None, d=None, d1=None, d2=None, internal=None, lead_in_shape=None, lead_in_shape1=None, lead_in_shape2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, height=None, l=None, length=None, lead_in_sample=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"spiral_sweep\", {\"poly\" : poly, \"h\" : h, \"r\" : r, \"turns\" : turns, \"taper\" : taper, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"internal\" : internal, \"lead_in_shape\" : lead_in_shape, \"lead_in_shape1\" : lead_in_shape1, \"lead_in_shape2\" : lead_in_shape2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"height\" : height, \"l\" : l, \"length\" : length, \"lead_in_sample\" : lead_in_sample, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass path_sweep(_Bosl2Base):\n    def __init__(self, shape=None, path=None, method=None, normal=None, closed=None, twist=None, twist_by_length=None, scale=None, scale_by_length=None, symmetry=None, last_normal=None, tangent=None, uniform=None, relaxed=None, caps=None, style=None, transforms=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_extra=None, tex_skip=None, anchor=None, cp=None, spin=None, orient=None, atype=None, _return_scales=None, **kwargs):\n       super().__init__(\"path_sweep\", {\"shape\" : shape, \"path\" : path, \"method\" : method, \"normal\" : normal, \"closed\" : closed, \"twist\" : twist, \"twist_by_length\" : twist_by_length, \"scale\" : scale, \"scale_by_length\" : scale_by_length, \"symmetry\" : symmetry, \"last_normal\" : last_normal, \"tangent\" : tangent, \"uniform\" : uniform, \"relaxed\" : relaxed, \"caps\" : caps, \"style\" : style, \"transforms\" : transforms, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"_return_scales\" : _return_scales, **kwargs})\n\nclass path_sweep2d(_Bosl2Base):\n    def __init__(self, shape=None, path=None, closed=None, caps=None, quality=None, style=None, anchor=None, cp=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"path_sweep2d\", {\"shape\" : shape, \"path\" : path, \"closed\" : closed, \"caps\" : caps, \"quality\" : quality, \"style\" : style, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass _ofs_vmap(_Bosl2Base):\n    def __init__(self, ofs=None, closed=None, **kwargs):\n       super().__init__(\"_ofs_vmap\", {\"ofs\" : ofs, \"closed\" : closed, **kwargs})\n\nclass _ofs_face_edge(_Bosl2Base):\n    def __init__(self, face=None, firstlen=None, second=None, **kwargs):\n       super().__init__(\"_ofs_face_edge\", {\"face\" : face, \"firstlen\" : firstlen, \"second\" : second, **kwargs})\n\nclass sweep(_Bosl2Base):\n    def __init__(self, shape=None, transforms=None, closed=None, caps=None, style=None, anchor=None, cp=None, spin=None, orient=None, atype=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_extra=None, tex_skip=None, _closed_for_normals=None, normals=None, **kwargs):\n       super().__init__(\"sweep\", {\"shape\" : shape, \"transforms\" : transforms, \"closed\" : closed, \"caps\" : caps, \"style\" : style, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"_closed_for_normals\" : _closed_for_normals, \"normals\" : normals, **kwargs})\n\nclass _force_int(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_force_int\", {\"x\" : x, **kwargs})\n\nclass _find_ps_dir(_Bosl2Base):\n    def __init__(self, frac=None, prevind=None, nextind=None, twist=None, anchor_pos=None, anchor_dir=None, **kwargs):\n       super().__init__(\"_find_ps_dir\", {\"frac\" : frac, \"prevind\" : prevind, \"nextind\" : nextind, \"twist\" : twist, \"anchor_pos\" : anchor_pos, \"anchor_dir\" : anchor_dir, **kwargs})\n\nclass subdivide_and_slice(_Bosl2Base):\n    def __init__(self, profiles=None, slices=None, numpoints=None, method=None, closed=None, **kwargs):\n       super().__init__(\"subdivide_and_slice\", {\"profiles\" : profiles, \"slices\" : slices, \"numpoints\" : numpoints, \"method\" : method, \"closed\" : closed, **kwargs})\n\nclass slice_profiles(_Bosl2Base):\n    def __init__(self, profiles=None, slices=None, closed=None, **kwargs):\n       super().__init__(\"slice_profiles\", {\"profiles\" : profiles, \"slices\" : slices, \"closed\" : closed, **kwargs})\n\nclass _closest_angle(_Bosl2Base):\n    def __init__(self, alpha=None, beta=None, **kwargs):\n       super().__init__(\"_closest_angle\", {\"alpha\" : alpha, \"beta\" : beta, **kwargs})\n\nclass _smooth(_Bosl2Base):\n    def __init__(self, data=None, len=None, closed=None, angle=None, **kwargs):\n       super().__init__(\"_smooth\", {\"data\" : data, \"len\" : len, \"closed\" : closed, \"angle\" : angle, **kwargs})\n\nclass rot_resample(_Bosl2Base):\n    def __init__(self, rotlist=None, n=None, twist=None, scale=None, smoothlen=None, long=None, turns=None, closed=None, method=None, **kwargs):\n       super().__init__(\"rot_resample\", {\"rotlist\" : rotlist, \"n\" : n, \"twist\" : twist, \"scale\" : scale, \"smoothlen\" : smoothlen, \"long\" : long, \"turns\" : turns, \"closed\" : closed, \"method\" : method, **kwargs})\n\nclass _dp_distance_array(_Bosl2Base):\n    def __init__(self, small=None, big=None, abort_thresh=None, **kwargs):\n       super().__init__(\"_dp_distance_array\", {\"small\" : small, \"big\" : big, \"abort_thresh\" : abort_thresh, **kwargs})\n\nclass _dp_distance_row(_Bosl2Base):\n    def __init__(self, small=None, big=None, small_ind=None, tdist=None, **kwargs):\n       super().__init__(\"_dp_distance_row\", {\"small\" : small, \"big\" : big, \"small_ind\" : small_ind, \"tdist\" : tdist, **kwargs})\n\nclass _dp_extract_map(_Bosl2Base):\n    def __init__(self, map=None, **kwargs):\n       super().__init__(\"_dp_extract_map\", {\"map\" : map, **kwargs})\n\nclass _skin_distance_match(_Bosl2Base):\n    def __init__(self, poly1=None, poly2=None, **kwargs):\n       super().__init__(\"_skin_distance_match\", {\"poly1\" : poly1, \"poly2\" : poly2, **kwargs})\n\nclass _skin_aligned_distance_match(_Bosl2Base):\n    def __init__(self, poly1=None, poly2=None, **kwargs):\n       super().__init__(\"_skin_aligned_distance_match\", {\"poly1\" : poly1, \"poly2\" : poly2, **kwargs})\n\nclass _skin_tangent_match(_Bosl2Base):\n    def __init__(self, poly1=None, poly2=None, **kwargs):\n       super().__init__(\"_skin_tangent_match\", {\"poly1\" : poly1, \"poly2\" : poly2, **kwargs})\n\nclass _find_one_tangent(_Bosl2Base):\n    def __init__(self, curve=None, edge=None, curve_offset=None, closed=None, **kwargs):\n       super().__init__(\"_find_one_tangent\", {\"curve\" : curve, \"edge\" : edge, \"curve_offset\" : curve_offset, \"closed\" : closed, **kwargs})\n\nclass associate_vertices(_Bosl2Base):\n    def __init__(self, polygons=None, split=None, curpoly=None, **kwargs):\n       super().__init__(\"associate_vertices\", {\"polygons\" : polygons, \"split\" : split, \"curpoly\" : curpoly, **kwargs})\n\nclass _tex_fn_default(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"_tex_fn_default\", {**kwargs})\n\nclass texture(_Bosl2Base):\n    def __init__(self, tex=None, n=None, border=None, gap=None, roughness=None, inset=None, **kwargs):\n       super().__init__(\"texture\", {\"tex\" : tex, \"n\" : n, \"border\" : border, \"gap\" : gap, \"roughness\" : roughness, \"inset\" : inset, **kwargs})\n\nclass _get_vnf_tile_edges(_Bosl2Base):\n    def __init__(self, texture=None, **kwargs):\n       super().__init__(\"_get_vnf_tile_edges\", {\"texture\" : texture, **kwargs})\n\nclass _validate_texture(_Bosl2Base):\n    def __init__(self, texture=None, **kwargs):\n       super().__init__(\"_validate_texture\", {\"texture\" : texture, **kwargs})\n\nclass _tex_height(_Bosl2Base):\n    def __init__(self, scale=None, inset=None, z=None, **kwargs):\n       super().__init__(\"_tex_height\", {\"scale\" : scale, \"inset\" : inset, \"z\" : z, **kwargs})\n\nclass _get_texture(_Bosl2Base):\n    def __init__(self, texture=None, tex_rot=None, **kwargs):\n       super().__init__(\"_get_texture\", {\"texture\" : texture, \"tex_rot\" : tex_rot, **kwargs})\n\nclass _textured_linear_sweep(_Bosl2Base):\n    def __init__(self, region=None, texture=None, tex_size=None, h=None, counts=None, inset=None, rot=None, tex_scale=None, twist=None, scale=None, shift=None, style=None, l=None, caps=None, height=None, length=None, samples=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"_textured_linear_sweep\", {\"region\" : region, \"texture\" : texture, \"tex_size\" : tex_size, \"h\" : h, \"counts\" : counts, \"inset\" : inset, \"rot\" : rot, \"tex_scale\" : tex_scale, \"twist\" : twist, \"scale\" : scale, \"shift\" : shift, \"style\" : style, \"l\" : l, \"caps\" : caps, \"height\" : height, \"length\" : length, \"samples\" : samples, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _tile_edge_path_list(_Bosl2Base):\n    def __init__(self, vnf=None, axis=None, maxopen=None, **kwargs):\n       super().__init__(\"_tile_edge_path_list\", {\"vnf\" : vnf, \"axis\" : axis, \"maxopen\" : maxopen, **kwargs})\n\nclass _textured_revolution(_Bosl2Base):\n    def __init__(self, shape=None, texture=None, tex_size=None, tex_scale=None, inset=None, rot=None, shift=None, taper=None, closed=None, angle=None, inhibit_y_slicing=None, tex_aspect=None, pixel_aspect=None, counts=None, samples=None, start=None, tex_extra=None, style=None, atype=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"_textured_revolution\", {\"shape\" : shape, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_scale\" : tex_scale, \"inset\" : inset, \"rot\" : rot, \"shift\" : shift, \"taper\" : taper, \"closed\" : closed, \"angle\" : angle, \"inhibit_y_slicing\" : inhibit_y_slicing, \"tex_aspect\" : tex_aspect, \"pixel_aspect\" : pixel_aspect, \"counts\" : counts, \"samples\" : samples, \"start\" : start, \"tex_extra\" : tex_extra, \"style\" : style, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _textured_point_array(_Bosl2Base):\n    def __init__(self, points=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, triangulate=None, tex_scaling=None, return_edges=None, col_wrap=None, tex_depth=None, row_wrap=None, caps=None, cap1=None, cap2=None, reverse=None, style=None, tex_extra=None, tex_skip=None, sidecaps=None, sidecap1=None, sidecap2=None, normals=None, **kwargs):\n       super().__init__(\"_textured_point_array\", {\"points\" : points, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"triangulate\" : triangulate, \"tex_scaling\" : tex_scaling, \"return_edges\" : return_edges, \"col_wrap\" : col_wrap, \"tex_depth\" : tex_depth, \"row_wrap\" : row_wrap, \"caps\" : caps, \"cap1\" : cap1, \"cap2\" : cap2, \"reverse\" : reverse, \"style\" : style, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"sidecaps\" : sidecaps, \"sidecap1\" : sidecap1, \"sidecap2\" : sidecap2, \"normals\" : normals, **kwargs})\n\nclass _resample_point_array(_Bosl2Base):\n    def __init__(self, data=None, size=None, col_wrap=None, row_wrap=None, **kwargs):\n       super().__init__(\"_resample_point_array\", {\"data\" : data, \"size\" : size, \"col_wrap\" : col_wrap, \"row_wrap\" : row_wrap, **kwargs})\n\nclass skin(_Bosl2Base):\n    def __init__(self, profiles=None, slices=None, refine=None, method=None, sampling=None, caps=None, closed=None, z=None, style=None, convexity=None, anchor=None, cp=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"skin\", {\"profiles\" : profiles, \"slices\" : slices, \"refine\" : refine, \"method\" : method, \"sampling\" : sampling, \"caps\" : caps, \"closed\" : closed, \"z\" : z, \"style\" : style, \"convexity\" : convexity, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass linear_sweep(_Bosl2Base):\n    def __init__(self, region=None, height=None, center=None, twist=None, scale=None, shift=None, slices=None, maxseg=None, style=None, convexity=None, caps=None, texture=None, tex_size=None, tex_reps=None, tex_counts=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_scale=None, tex_samples=None, cp=None, atype=None, h=None, l=None, length=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"linear_sweep\", {\"region\" : region, \"height\" : height, \"center\" : center, \"twist\" : twist, \"scale\" : scale, \"shift\" : shift, \"slices\" : slices, \"maxseg\" : maxseg, \"style\" : style, \"convexity\" : convexity, \"caps\" : caps, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_reps\" : tex_reps, \"tex_counts\" : tex_counts, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_scale\" : tex_scale, \"tex_samples\" : tex_samples, \"cp\" : cp, \"atype\" : atype, \"h\" : h, \"l\" : l, \"length\" : length, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rotate_sweep(_Bosl2Base):\n    def __init__(self, shape=None, angle=None, texture=None, tex_size=None, tex_counts=None, tex_reps=None, tex_inset=None, tex_rot=None, tex_scale=None, tex_depth=None, tex_samples=None, tex_taper=None, shift=None, style=None, caps=None, closed=None, tex_extra=None, tex_aspect=None, pixel_aspect=None, cp=None, convexity=None, atype=None, anchor=None, spin=None, orient=None, start=None, _tex_inhibit_y_slicing=None, **kwargs):\n       super().__init__(\"rotate_sweep\", {\"shape\" : shape, \"angle\" : angle, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_counts\" : tex_counts, \"tex_reps\" : tex_reps, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_scale\" : tex_scale, \"tex_depth\" : tex_depth, \"tex_samples\" : tex_samples, \"tex_taper\" : tex_taper, \"shift\" : shift, \"style\" : style, \"caps\" : caps, \"closed\" : closed, \"tex_extra\" : tex_extra, \"tex_aspect\" : tex_aspect, \"pixel_aspect\" : pixel_aspect, \"cp\" : cp, \"convexity\" : convexity, \"atype\" : atype, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"start\" : start, \"_tex_inhibit_y_slicing\" : _tex_inhibit_y_slicing, **kwargs})\n\nclass spiral_sweep(_Bosl2Base):\n    def __init__(self, poly=None, h=None, r=None, turns=None, taper=None, r1=None, r2=None, d=None, d1=None, d2=None, internal=None, lead_in_shape=None, lead_in_shape1=None, lead_in_shape2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, height=None, l=None, length=None, lead_in_sample=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"spiral_sweep\", {\"poly\" : poly, \"h\" : h, \"r\" : r, \"turns\" : turns, \"taper\" : taper, \"r1\" : r1, \"r2\" : r2, \"d\" : d, \"d1\" : d1, \"d2\" : d2, \"internal\" : internal, \"lead_in_shape\" : lead_in_shape, \"lead_in_shape1\" : lead_in_shape1, \"lead_in_shape2\" : lead_in_shape2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"height\" : height, \"l\" : l, \"length\" : length, \"lead_in_sample\" : lead_in_sample, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass path_sweep(_Bosl2Base):\n    def __init__(self, shape=None, path=None, method=None, normal=None, closed=None, twist=None, twist_by_length=None, scale=None, scale_by_length=None, symmetry=None, last_normal=None, tangent=None, uniform=None, relaxed=None, caps=None, style=None, convexity=None, anchor=None, cp=None, spin=None, orient=None, atype=None, profiles=None, width=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_extra=None, tex_skip=None, **kwargs):\n       super().__init__(\"path_sweep\", {\"shape\" : shape, \"path\" : path, \"method\" : method, \"normal\" : normal, \"closed\" : closed, \"twist\" : twist, \"twist_by_length\" : twist_by_length, \"scale\" : scale, \"scale_by_length\" : scale_by_length, \"symmetry\" : symmetry, \"last_normal\" : last_normal, \"tangent\" : tangent, \"uniform\" : uniform, \"relaxed\" : relaxed, \"caps\" : caps, \"style\" : style, \"convexity\" : convexity, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"profiles\" : profiles, \"width\" : width, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, **kwargs})\n\nclass path_sweep2d(_Bosl2Base):\n    def __init__(self, profile=None, path=None, closed=None, caps=None, quality=None, style=None, convexity=None, anchor=None, cp=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"path_sweep2d\", {\"profile\" : profile, \"path\" : path, \"closed\" : closed, \"caps\" : caps, \"quality\" : quality, \"style\" : style, \"convexity\" : convexity, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass sweep(_Bosl2Base):\n    def __init__(self, shape=None, transforms=None, closed=None, caps=None, style=None, convexity=None, anchor=None, cp=None, spin=None, orient=None, atype=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_extra=None, tex_skip=None, normals=None, **kwargs):\n       super().__init__(\"sweep\", {\"shape\" : shape, \"transforms\" : transforms, \"closed\" : closed, \"caps\" : caps, \"style\" : style, \"convexity\" : convexity, \"anchor\" : anchor, \"cp\" : cp, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"normals\" : normals, **kwargs})\n\nclass sweep_attach(_Bosl2Base):\n    def __init__(self, parent=None, child=None, frac=None, idx=None, pathlen=None, spin=None, overlap=None, atype=None, cp=None, **kwargs):\n       super().__init__(\"sweep_attach\", {\"parent\" : parent, \"child\" : child, \"frac\" : frac, \"idx\" : idx, \"pathlen\" : pathlen, \"spin\" : spin, \"overlap\" : overlap, \"atype\" : atype, \"cp\" : cp, **kwargs})\n\nclass _textured_revolution(_Bosl2Base):\n    def __init__(self, shape=None, texture=None, tex_size=None, tex_scale=None, inset=None, rot=None, shift=None, taper=None, closed=None, angle=None, style=None, atype=None, tex_aspect=None, pixel_aspect=None, inhibit_y_slicing=None, tex_extra=None, convexity=None, counts=None, samples=None, start=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"_textured_revolution\", {\"shape\" : shape, \"texture\" : texture, \"tex_size\" : tex_size, \"tex_scale\" : tex_scale, \"inset\" : inset, \"rot\" : rot, \"shift\" : shift, \"taper\" : taper, \"closed\" : closed, \"angle\" : angle, \"style\" : style, \"atype\" : atype, \"tex_aspect\" : tex_aspect, \"pixel_aspect\" : pixel_aspect, \"inhibit_y_slicing\" : inhibit_y_slicing, \"tex_extra\" : tex_extra, \"convexity\" : convexity, \"counts\" : counts, \"samples\" : samples, \"start\" : start, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/sliders.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/sliders.scad'}\", False)\n\nclass slider(_Bosl2Base):\n    def __init__(self, l=None, w=None, h=None, base=None, wall=None, ang=None, chamfer=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"slider\", {\"l\" : l, \"w\" : w, \"h\" : h, \"base\" : base, \"wall\" : wall, \"ang\" : ang, \"chamfer\" : chamfer, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rail(_Bosl2Base):\n    def __init__(self, l=None, w=None, h=None, chamfer=None, ang=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rail\", {\"l\" : l, \"w\" : w, \"h\" : h, \"chamfer\" : chamfer, \"ang\" : ang, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass slider(_Bosl2Base):\n    def __init__(self, l=None, w=None, h=None, base=None, wall=None, ang=None, chamfer=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"slider\", {\"l\" : l, \"w\" : w, \"h\" : h, \"base\" : base, \"wall\" : wall, \"ang\" : ang, \"chamfer\" : chamfer, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass rail(_Bosl2Base):\n    def __init__(self, l=None, w=None, h=None, chamfer=None, ang=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"rail\", {\"l\" : l, \"w\" : w, \"h\" : h, \"chamfer\" : chamfer, \"ang\" : ang, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/std.py",
    "content": "from .openscad import *\nfrom .version import *\nfrom .constants import *\nfrom .transforms import *\nfrom .distributors import *\nfrom .miscellaneous import *\nfrom .color import *\nfrom .attachments import *\nfrom .beziers import *\nfrom .shapes3d import *\nfrom .shapes2d import *\nfrom .drawing import *\nfrom .masks3d import *\nfrom .masks2d import *\nfrom . import math as bosl2_math\nfrom .paths import *\nfrom . import lists as bosl2_lists\nfrom .comparisons import *\nfrom .linalg import *\nfrom .trigonometry import *\nfrom .vectors import *\nfrom .affine import *\nfrom .coords import *\nfrom .geometry import *\nfrom .regions import *\nfrom . import strings as bosl2_strings\nfrom .vnf import *\nfrom .structs import *\nfrom .rounding import *\nfrom .skin import *\nfrom . import utility as bosl2_utility\nfrom .partitions import *\n"
  },
  {
    "path": "solid2/extensions/bosl2/strings.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/strings.scad'}\", False)\n\nclass _is_liststr(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"_is_liststr\", {\"s\" : s, **kwargs})\n\nclass substr(_Bosl2Base):\n    def __init__(self, str=None, pos=None, len=None, **kwargs):\n       super().__init__(\"substr\", {\"str\" : str, \"pos\" : pos, \"len\" : len, **kwargs})\n\nclass _substr(_Bosl2Base):\n    def __init__(self, str=None, pos=None, len=None, substr=None, **kwargs):\n       super().__init__(\"_substr\", {\"str\" : str, \"pos\" : pos, \"len\" : len, \"substr\" : substr, **kwargs})\n\nclass suffix(_Bosl2Base):\n    def __init__(self, str=None, len=None, **kwargs):\n       super().__init__(\"suffix\", {\"str\" : str, \"len\" : len, **kwargs})\n\nclass str_find(_Bosl2Base):\n    def __init__(self, str=None, pattern=None, start=None, last=None, all=None, **kwargs):\n       super().__init__(\"str_find\", {\"str\" : str, \"pattern\" : pattern, \"start\" : start, \"last\" : last, \"all\" : all, **kwargs})\n\nclass _str_find_first(_Bosl2Base):\n    def __init__(self, str=None, pattern=None, max_sindex=None, sindex=None, **kwargs):\n       super().__init__(\"_str_find_first\", {\"str\" : str, \"pattern\" : pattern, \"max_sindex\" : max_sindex, \"sindex\" : sindex, **kwargs})\n\nclass _str_find_last(_Bosl2Base):\n    def __init__(self, str=None, pattern=None, sindex=None, **kwargs):\n       super().__init__(\"_str_find_last\", {\"str\" : str, \"pattern\" : pattern, \"sindex\" : sindex, **kwargs})\n\nclass _str_find_all(_Bosl2Base):\n    def __init__(self, str=None, pattern=None, **kwargs):\n       super().__init__(\"_str_find_all\", {\"str\" : str, \"pattern\" : pattern, **kwargs})\n\nclass substr_match(_Bosl2Base):\n    def __init__(self, str=None, start=None, pattern=None, **kwargs):\n       super().__init__(\"substr_match\", {\"str\" : str, \"start\" : start, \"pattern\" : pattern, **kwargs})\n\nclass _substr_match_recurse(_Bosl2Base):\n    def __init__(self, str=None, sindex=None, pattern=None, plen=None, pindex=None, **kwargs):\n       super().__init__(\"_substr_match_recurse\", {\"str\" : str, \"sindex\" : sindex, \"pattern\" : pattern, \"plen\" : plen, \"pindex\" : pindex, **kwargs})\n\nclass starts_with(_Bosl2Base):\n    def __init__(self, str=None, pattern=None, **kwargs):\n       super().__init__(\"starts_with\", {\"str\" : str, \"pattern\" : pattern, **kwargs})\n\nclass ends_with(_Bosl2Base):\n    def __init__(self, str=None, pattern=None, **kwargs):\n       super().__init__(\"ends_with\", {\"str\" : str, \"pattern\" : pattern, **kwargs})\n\nclass str_split(_Bosl2Base):\n    def __init__(self, str=None, sep=None, keep_nulls=None, **kwargs):\n       super().__init__(\"str_split\", {\"str\" : str, \"sep\" : sep, \"keep_nulls\" : keep_nulls, **kwargs})\n\nclass _str_split_recurse(_Bosl2Base):\n    def __init__(self, str=None, sep=None, i=None, result=None, **kwargs):\n       super().__init__(\"_str_split_recurse\", {\"str\" : str, \"sep\" : sep, \"i\" : i, \"result\" : result, **kwargs})\n\nclass _remove_empty_strs(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"_remove_empty_strs\", {\"list\" : list, **kwargs})\n\nclass str_join(_Bosl2Base):\n    def __init__(self, list=None, sep=None, _i=None, _result=None, **kwargs):\n       super().__init__(\"str_join\", {\"list\" : list, \"sep\" : sep, \"_i\" : _i, \"_result\" : _result, **kwargs})\n\nclass _str_count_leading(_Bosl2Base):\n    def __init__(self, s=None, c=None, _i=None, **kwargs):\n       super().__init__(\"_str_count_leading\", {\"s\" : s, \"c\" : c, \"_i\" : _i, **kwargs})\n\nclass _str_count_trailing(_Bosl2Base):\n    def __init__(self, s=None, c=None, _i=None, **kwargs):\n       super().__init__(\"_str_count_trailing\", {\"s\" : s, \"c\" : c, \"_i\" : _i, **kwargs})\n\nclass str_strip(_Bosl2Base):\n    def __init__(self, s=None, c=None, start=None, end=None, **kwargs):\n       super().__init__(\"str_strip\", {\"s\" : s, \"c\" : c, \"start\" : start, \"end\" : end, **kwargs})\n\nclass str_pad(_Bosl2Base):\n    def __init__(self, str=None, length=None, char=None, left=None, **kwargs):\n       super().__init__(\"str_pad\", {\"str\" : str, \"length\" : length, \"char\" : char, \"left\" : left, **kwargs})\n\nclass str_replace_char(_Bosl2Base):\n    def __init__(self, str=None, char=None, replace=None, **kwargs):\n       super().__init__(\"str_replace_char\", {\"str\" : str, \"char\" : char, \"replace\" : replace, **kwargs})\n\nclass downcase(_Bosl2Base):\n    def __init__(self, str=None, **kwargs):\n       super().__init__(\"downcase\", {\"str\" : str, **kwargs})\n\nclass upcase(_Bosl2Base):\n    def __init__(self, str=None, **kwargs):\n       super().__init__(\"upcase\", {\"str\" : str, **kwargs})\n\nclass rand_str(_Bosl2Base):\n    def __init__(self, n=None, charset=None, seed=None, **kwargs):\n       super().__init__(\"rand_str\", {\"n\" : n, \"charset\" : charset, \"seed\" : seed, **kwargs})\n\nclass parse_int(_Bosl2Base):\n    def __init__(self, str=None, base=None, **kwargs):\n       super().__init__(\"parse_int\", {\"str\" : str, \"base\" : base, **kwargs})\n\nclass _parse_int_recurse(_Bosl2Base):\n    def __init__(self, str=None, base=None, i=None, **kwargs):\n       super().__init__(\"_parse_int_recurse\", {\"str\" : str, \"base\" : base, \"i\" : i, **kwargs})\n\nclass parse_float(_Bosl2Base):\n    def __init__(self, str=None, **kwargs):\n       super().__init__(\"parse_float\", {\"str\" : str, **kwargs})\n\nclass parse_frac(_Bosl2Base):\n    def __init__(self, str=None, mixed=None, improper=None, signed=None, **kwargs):\n       super().__init__(\"parse_frac\", {\"str\" : str, \"mixed\" : mixed, \"improper\" : improper, \"signed\" : signed, **kwargs})\n\nclass parse_num(_Bosl2Base):\n    def __init__(self, str=None, **kwargs):\n       super().__init__(\"parse_num\", {\"str\" : str, **kwargs})\n\nclass format_int(_Bosl2Base):\n    def __init__(self, i=None, mindigits=None, **kwargs):\n       super().__init__(\"format_int\", {\"i\" : i, \"mindigits\" : mindigits, **kwargs})\n\nclass format_fixed(_Bosl2Base):\n    def __init__(self, f=None, digits=None, **kwargs):\n       super().__init__(\"format_fixed\", {\"f\" : f, \"digits\" : digits, **kwargs})\n\nclass format_float(_Bosl2Base):\n    def __init__(self, f=None, sig=None, **kwargs):\n       super().__init__(\"format_float\", {\"f\" : f, \"sig\" : sig, **kwargs})\n\nclass _format_matrix(_Bosl2Base):\n    def __init__(self, M=None, sig=None, sep=None, eps=None, **kwargs):\n       super().__init__(\"_format_matrix\", {\"M\" : M, \"sig\" : sig, \"sep\" : sep, \"eps\" : eps, **kwargs})\n\nclass format(_Bosl2Base):\n    def __init__(self, fmt=None, vals=None, **kwargs):\n       super().__init__(\"format\", {\"fmt\" : fmt, \"vals\" : vals, **kwargs})\n\nclass is_lower(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"is_lower\", {\"s\" : s, **kwargs})\n\nclass is_upper(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"is_upper\", {\"s\" : s, **kwargs})\n\nclass is_digit(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"is_digit\", {\"s\" : s, **kwargs})\n\nclass is_hexdigit(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"is_hexdigit\", {\"s\" : s, **kwargs})\n\nclass is_letter(_Bosl2Base):\n    def __init__(self, s=None, **kwargs):\n       super().__init__(\"is_letter\", {\"s\" : s, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/structs.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/structs.scad'}\", False)\n\nclass struct_set(_Bosl2Base):\n    def __init__(self, struct=None, key=None, value=None, grow=None, **kwargs):\n       super().__init__(\"struct_set\", {\"struct\" : struct, \"key\" : key, \"value\" : value, \"grow\" : grow, **kwargs})\n\nclass _format_key(_Bosl2Base):\n    def __init__(self, key=None, **kwargs):\n       super().__init__(\"_format_key\", {\"key\" : key, **kwargs})\n\nclass struct_remove(_Bosl2Base):\n    def __init__(self, struct=None, key=None, **kwargs):\n       super().__init__(\"struct_remove\", {\"struct\" : struct, \"key\" : key, **kwargs})\n\nclass struct_val(_Bosl2Base):\n    def __init__(self, struct=None, key=None, default=None, **kwargs):\n       super().__init__(\"struct_val\", {\"struct\" : struct, \"key\" : key, \"default\" : default, **kwargs})\n\nclass struct_keys(_Bosl2Base):\n    def __init__(self, struct=None, **kwargs):\n       super().__init__(\"struct_keys\", {\"struct\" : struct, **kwargs})\n\nclass echo_struct(_Bosl2Base):\n    def __init__(self, struct=None, name=None, **kwargs):\n       super().__init__(\"echo_struct\", {\"struct\" : struct, \"name\" : name, **kwargs})\n\nclass is_struct(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_struct\", {\"x\" : x, **kwargs})\n\nclass echo_struct(_Bosl2Base):\n    def __init__(self, struct=None, name=None, **kwargs):\n       super().__init__(\"echo_struct\", {\"struct\" : struct, \"name\" : name, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/threading.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/threading.scad'}\", False)\n\nclass threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, starts=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, starts=None, shape=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, id1=None, id2=None, ibevel1=None, ibevel2=None, ibevel=None, bevang=None, thickness=None, height=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"starts\" : starts, \"shape\" : shape, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"id1\" : id1, \"id2\" : id2, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"ibevel\" : ibevel, \"bevang\" : bevang, \"thickness\" : thickness, \"height\" : height, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass trapezoidal_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, thread_angle=None, thread_depth=None, flank_angle=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, starts=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"trapezoidal_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"thread_angle\" : thread_angle, \"thread_depth\" : thread_depth, \"flank_angle\" : flank_angle, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass trapezoidal_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, thread_angle=None, thread_depth=None, shape=None, flank_angle=None, left_handed=None, starts=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel1=None, ibevel2=None, ibevel=None, thickness=None, height=None, id1=None, id2=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"trapezoidal_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"thread_angle\" : thread_angle, \"thread_depth\" : thread_depth, \"shape\" : shape, \"flank_angle\" : flank_angle, \"left_handed\" : left_handed, \"starts\" : starts, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"ibevel\" : ibevel, \"thickness\" : thickness, \"height\" : height, \"id1\" : id1, \"id2\" : id2, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass acme_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, tpi=None, pitch=None, starts=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"acme_threaded_rod\", {\"d\" : d, \"l\" : l, \"tpi\" : tpi, \"pitch\" : pitch, \"starts\" : starts, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass acme_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, tpi=None, pitch=None, starts=None, left_handed=None, shape=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"acme_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"tpi\" : tpi, \"pitch\" : pitch, \"starts\" : starts, \"left_handed\" : left_handed, \"shape\" : shape, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass npt_threaded_rod(_Bosl2Base):\n    def __init__(self, size=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, hollow=None, internal=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"npt_threaded_rod\", {\"size\" : size, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"hollow\" : hollow, \"internal\" : internal, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass buttress_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, left_handed=None, starts=None, bevel=None, bevel1=None, bevel2=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"buttress_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"left_handed\" : left_handed, \"starts\" : starts, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass buttress_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, shape=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, bevang=None, starts=None, ibevel=None, ibevel1=None, ibevel2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"buttress_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"shape\" : shape, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"starts\" : starts, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass square_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, starts=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"square_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass square_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, starts=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"square_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"starts\" : starts, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass ball_screw_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, ball_diam=None, ball_arc=None, starts=None, left_handed=None, internal=None, length=None, h=None, height=None, bevel=None, bevel1=None, bevel2=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ball_screw_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"ball_diam\" : ball_diam, \"ball_arc\" : ball_arc, \"starts\" : starts, \"left_handed\" : left_handed, \"internal\" : internal, \"length\" : length, \"h\" : h, \"height\" : height, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, profile=None, left_handed=None, internal=None, bevel=None, bevel1=None, bevel2=None, starts=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"profile\" : profile, \"left_handed\" : left_handed, \"internal\" : internal, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, profile=None, shape=None, left_handed=None, starts=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, id1=None, id2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"profile\" : profile, \"shape\" : shape, \"left_handed\" : left_handed, \"starts\" : starts, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"id1\" : id1, \"id2\" : id2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass thread_helix(_Bosl2Base):\n    def __init__(self, d=None, pitch=None, thread_depth=None, flank_angle=None, turns=None, profile=None, starts=None, left_handed=None, internal=None, d1=None, d2=None, thread_angle=None, lead_in_shape=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, lead_in_sample=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"thread_helix\", {\"d\" : d, \"pitch\" : pitch, \"thread_depth\" : thread_depth, \"flank_angle\" : flank_angle, \"turns\" : turns, \"profile\" : profile, \"starts\" : starts, \"left_handed\" : left_handed, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"thread_angle\" : thread_angle, \"lead_in_shape\" : lead_in_shape, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"lead_in_sample\" : lead_in_sample, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, starts=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, starts=None, shape=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, id1=None, id2=None, ibevel1=None, ibevel2=None, ibevel=None, bevang=None, thickness=None, height=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"starts\" : starts, \"shape\" : shape, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"id1\" : id1, \"id2\" : id2, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"ibevel\" : ibevel, \"bevang\" : bevang, \"thickness\" : thickness, \"height\" : height, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass trapezoidal_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, thread_angle=None, thread_depth=None, flank_angle=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, starts=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"trapezoidal_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"thread_angle\" : thread_angle, \"thread_depth\" : thread_depth, \"flank_angle\" : flank_angle, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass trapezoidal_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, thread_angle=None, thread_depth=None, shape=None, flank_angle=None, left_handed=None, starts=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel1=None, ibevel2=None, ibevel=None, thickness=None, height=None, id1=None, id2=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"trapezoidal_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"thread_angle\" : thread_angle, \"thread_depth\" : thread_depth, \"shape\" : shape, \"flank_angle\" : flank_angle, \"left_handed\" : left_handed, \"starts\" : starts, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"ibevel\" : ibevel, \"thickness\" : thickness, \"height\" : height, \"id1\" : id1, \"id2\" : id2, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass acme_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, tpi=None, pitch=None, starts=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"acme_threaded_rod\", {\"d\" : d, \"l\" : l, \"tpi\" : tpi, \"pitch\" : pitch, \"starts\" : starts, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass acme_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, tpi=None, pitch=None, starts=None, left_handed=None, shape=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"acme_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"tpi\" : tpi, \"pitch\" : pitch, \"starts\" : starts, \"left_handed\" : left_handed, \"shape\" : shape, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass npt_threaded_rod(_Bosl2Base):\n    def __init__(self, size=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, hollow=None, internal=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"npt_threaded_rod\", {\"size\" : size, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"hollow\" : hollow, \"internal\" : internal, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass buttress_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, left_handed=None, starts=None, bevel=None, bevel1=None, bevel2=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"buttress_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"left_handed\" : left_handed, \"starts\" : starts, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass buttress_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, shape=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, bevang=None, starts=None, ibevel=None, ibevel1=None, ibevel2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"buttress_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"shape\" : shape, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"starts\" : starts, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass square_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, starts=None, internal=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"square_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass square_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, left_handed=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, starts=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"square_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"left_handed\" : left_handed, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"starts\" : starts, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass ball_screw_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, ball_diam=None, ball_arc=None, starts=None, left_handed=None, internal=None, length=None, h=None, height=None, bevel=None, bevel1=None, bevel2=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"ball_screw_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"ball_diam\" : ball_diam, \"ball_arc\" : ball_arc, \"starts\" : starts, \"left_handed\" : left_handed, \"internal\" : internal, \"length\" : length, \"h\" : h, \"height\" : height, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_threaded_rod(_Bosl2Base):\n    def __init__(self, d=None, l=None, pitch=None, profile=None, left_handed=None, internal=None, bevel=None, bevel1=None, bevel2=None, starts=None, d1=None, d2=None, length=None, h=None, height=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_threaded_rod\", {\"d\" : d, \"l\" : l, \"pitch\" : pitch, \"profile\" : profile, \"left_handed\" : left_handed, \"internal\" : internal, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"starts\" : starts, \"d1\" : d1, \"d2\" : d2, \"length\" : length, \"h\" : h, \"height\" : height, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass generic_threaded_nut(_Bosl2Base):\n    def __init__(self, nutwidth=None, id=None, h=None, pitch=None, profile=None, shape=None, left_handed=None, starts=None, bevel=None, bevel1=None, bevel2=None, bevang=None, ibevel=None, ibevel1=None, ibevel2=None, id1=None, id2=None, height=None, thickness=None, length=None, l=None, blunt_start=None, blunt_start1=None, blunt_start2=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, end_len=None, end_len1=None, end_len2=None, lead_in_shape=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"generic_threaded_nut\", {\"nutwidth\" : nutwidth, \"id\" : id, \"h\" : h, \"pitch\" : pitch, \"profile\" : profile, \"shape\" : shape, \"left_handed\" : left_handed, \"starts\" : starts, \"bevel\" : bevel, \"bevel1\" : bevel1, \"bevel2\" : bevel2, \"bevang\" : bevang, \"ibevel\" : ibevel, \"ibevel1\" : ibevel1, \"ibevel2\" : ibevel2, \"id1\" : id1, \"id2\" : id2, \"height\" : height, \"thickness\" : thickness, \"length\" : length, \"l\" : l, \"blunt_start\" : blunt_start, \"blunt_start1\" : blunt_start1, \"blunt_start2\" : blunt_start2, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"end_len\" : end_len, \"end_len1\" : end_len1, \"end_len2\" : end_len2, \"lead_in_shape\" : lead_in_shape, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass _nutshape(_Bosl2Base):\n    def __init__(self, nutwidth=None, h=None, shape=None, bevel1=None, bevel2=None, **kwargs):\n       super().__init__(\"_nutshape\", {\"nutwidth\" : nutwidth, \"h\" : h, \"shape\" : shape, \"bevel1\" : bevel1, \"bevel2\" : bevel2, **kwargs})\n\nclass thread_helix(_Bosl2Base):\n    def __init__(self, d=None, pitch=None, thread_depth=None, flank_angle=None, turns=None, profile=None, starts=None, left_handed=None, internal=None, d1=None, d2=None, thread_angle=None, lead_in_shape=None, lead_in=None, lead_in1=None, lead_in2=None, lead_in_ang=None, lead_in_ang1=None, lead_in_ang2=None, lead_in_sample=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"thread_helix\", {\"d\" : d, \"pitch\" : pitch, \"thread_depth\" : thread_depth, \"flank_angle\" : flank_angle, \"turns\" : turns, \"profile\" : profile, \"starts\" : starts, \"left_handed\" : left_handed, \"internal\" : internal, \"d1\" : d1, \"d2\" : d2, \"thread_angle\" : thread_angle, \"lead_in_shape\" : lead_in_shape, \"lead_in\" : lead_in, \"lead_in1\" : lead_in1, \"lead_in2\" : lead_in2, \"lead_in_ang\" : lead_in_ang, \"lead_in_ang1\" : lead_in_ang1, \"lead_in_ang2\" : lead_in_ang2, \"lead_in_sample\" : lead_in_sample, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/transforms.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/transforms.scad'}\", False)\n\n_NO_ARG = _OpenSCADConstant('_NO_ARG')\n_transform = _OpenSCADConstant('_transform')\nclass move(_Bosl2Base):\n    def __init__(self, v=None, p=None, **kwargs):\n       super().__init__(\"move\", {\"v\" : v, \"p\" : p, **kwargs})\n\nclass translate(_Bosl2Base):\n    def __init__(self, v=None, p=None, **kwargs):\n       super().__init__(\"translate\", {\"v\" : v, \"p\" : p, **kwargs})\n\nclass left(_Bosl2Base):\n    def __init__(self, x=None, p=None, **kwargs):\n       super().__init__(\"left\", {\"x\" : x, \"p\" : p, **kwargs})\n\nclass right(_Bosl2Base):\n    def __init__(self, x=None, p=None, **kwargs):\n       super().__init__(\"right\", {\"x\" : x, \"p\" : p, **kwargs})\n\nclass xmove(_Bosl2Base):\n    def __init__(self, x=None, p=None, **kwargs):\n       super().__init__(\"xmove\", {\"x\" : x, \"p\" : p, **kwargs})\n\nclass fwd(_Bosl2Base):\n    def __init__(self, y=None, p=None, **kwargs):\n       super().__init__(\"fwd\", {\"y\" : y, \"p\" : p, **kwargs})\n\nclass back(_Bosl2Base):\n    def __init__(self, y=None, p=None, **kwargs):\n       super().__init__(\"back\", {\"y\" : y, \"p\" : p, **kwargs})\n\nclass ymove(_Bosl2Base):\n    def __init__(self, y=None, p=None, **kwargs):\n       super().__init__(\"ymove\", {\"y\" : y, \"p\" : p, **kwargs})\n\nclass down(_Bosl2Base):\n    def __init__(self, z=None, p=None, **kwargs):\n       super().__init__(\"down\", {\"z\" : z, \"p\" : p, **kwargs})\n\nclass up(_Bosl2Base):\n    def __init__(self, z=None, p=None, **kwargs):\n       super().__init__(\"up\", {\"z\" : z, \"p\" : p, **kwargs})\n\nclass zmove(_Bosl2Base):\n    def __init__(self, z=None, p=None, **kwargs):\n       super().__init__(\"zmove\", {\"z\" : z, \"p\" : p, **kwargs})\n\nclass rot(_Bosl2Base):\n    def __init__(self, a=None, v=None, cp=None, _from=None, to=None, reverse=None, p=None, **kwargs):\n       super().__init__(\"rot\", {\"a\" : a, \"v\" : v, \"cp\" : cp, \"_from\" : _from, \"to\" : to, \"reverse\" : reverse, \"p\" : p, **kwargs})\n\nclass xrot(_Bosl2Base):\n    def __init__(self, a=None, p=None, cp=None, **kwargs):\n       super().__init__(\"xrot\", {\"a\" : a, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass yrot(_Bosl2Base):\n    def __init__(self, a=None, p=None, cp=None, **kwargs):\n       super().__init__(\"yrot\", {\"a\" : a, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass zrot(_Bosl2Base):\n    def __init__(self, a=None, p=None, cp=None, **kwargs):\n       super().__init__(\"zrot\", {\"a\" : a, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass tilt(_Bosl2Base):\n    def __init__(self, to=None, cp=None, reverse=None, p=None, **kwargs):\n       super().__init__(\"tilt\", {\"to\" : to, \"cp\" : cp, \"reverse\" : reverse, \"p\" : p, **kwargs})\n\nclass scale(_Bosl2Base):\n    def __init__(self, v=None, p=None, cp=None, **kwargs):\n       super().__init__(\"scale\", {\"v\" : v, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass xscale(_Bosl2Base):\n    def __init__(self, x=None, p=None, cp=None, **kwargs):\n       super().__init__(\"xscale\", {\"x\" : x, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass yscale(_Bosl2Base):\n    def __init__(self, y=None, p=None, cp=None, **kwargs):\n       super().__init__(\"yscale\", {\"y\" : y, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass zscale(_Bosl2Base):\n    def __init__(self, z=None, p=None, cp=None, **kwargs):\n       super().__init__(\"zscale\", {\"z\" : z, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass mirror(_Bosl2Base):\n    def __init__(self, v=None, p=None, **kwargs):\n       super().__init__(\"mirror\", {\"v\" : v, \"p\" : p, **kwargs})\n\nclass xflip(_Bosl2Base):\n    def __init__(self, p=None, x=None, **kwargs):\n       super().__init__(\"xflip\", {\"p\" : p, \"x\" : x, **kwargs})\n\nclass yflip(_Bosl2Base):\n    def __init__(self, p=None, y=None, **kwargs):\n       super().__init__(\"yflip\", {\"p\" : p, \"y\" : y, **kwargs})\n\nclass zflip(_Bosl2Base):\n    def __init__(self, p=None, z=None, **kwargs):\n       super().__init__(\"zflip\", {\"p\" : p, \"z\" : z, **kwargs})\n\nclass frame_map(_Bosl2Base):\n    def __init__(self, x=None, y=None, z=None, p=None, reverse=None, **kwargs):\n       super().__init__(\"frame_map\", {\"x\" : x, \"y\" : y, \"z\" : z, \"p\" : p, \"reverse\" : reverse, **kwargs})\n\nclass skew(_Bosl2Base):\n    def __init__(self, p=None, sxy=None, sxz=None, syx=None, syz=None, szx=None, szy=None, axy=None, axz=None, ayx=None, ayz=None, azx=None, azy=None, **kwargs):\n       super().__init__(\"skew\", {\"p\" : p, \"sxy\" : sxy, \"sxz\" : sxz, \"syx\" : syx, \"syz\" : syz, \"szx\" : szx, \"szy\" : szy, \"axy\" : axy, \"axz\" : axz, \"ayx\" : ayx, \"ayz\" : ayz, \"azx\" : azx, \"azy\" : azy, **kwargs})\n\nclass is_2d_transform(_Bosl2Base):\n    def __init__(self, t=None, **kwargs):\n       super().__init__(\"is_2d_transform\", {\"t\" : t, **kwargs})\n\nclass apply(_Bosl2Base):\n    def __init__(self, transform=None, points=None, **kwargs):\n       super().__init__(\"apply\", {\"transform\" : transform, \"points\" : points, **kwargs})\n\nclass _apply(_Bosl2Base):\n    def __init__(self, transform=None, points=None, **kwargs):\n       super().__init__(\"_apply\", {\"transform\" : transform, \"points\" : points, **kwargs})\n\nclass move(_Bosl2Base):\n    def __init__(self, v=None, p=None, **kwargs):\n       super().__init__(\"move\", {\"v\" : v, \"p\" : p, **kwargs})\n\nclass left(_Bosl2Base):\n    def __init__(self, x=None, p=None, **kwargs):\n       super().__init__(\"left\", {\"x\" : x, \"p\" : p, **kwargs})\n\nclass right(_Bosl2Base):\n    def __init__(self, x=None, p=None, **kwargs):\n       super().__init__(\"right\", {\"x\" : x, \"p\" : p, **kwargs})\n\nclass xmove(_Bosl2Base):\n    def __init__(self, x=None, p=None, **kwargs):\n       super().__init__(\"xmove\", {\"x\" : x, \"p\" : p, **kwargs})\n\nclass fwd(_Bosl2Base):\n    def __init__(self, y=None, p=None, **kwargs):\n       super().__init__(\"fwd\", {\"y\" : y, \"p\" : p, **kwargs})\n\nclass back(_Bosl2Base):\n    def __init__(self, y=None, p=None, **kwargs):\n       super().__init__(\"back\", {\"y\" : y, \"p\" : p, **kwargs})\n\nclass ymove(_Bosl2Base):\n    def __init__(self, y=None, p=None, **kwargs):\n       super().__init__(\"ymove\", {\"y\" : y, \"p\" : p, **kwargs})\n\nclass down(_Bosl2Base):\n    def __init__(self, z=None, p=None, **kwargs):\n       super().__init__(\"down\", {\"z\" : z, \"p\" : p, **kwargs})\n\nclass up(_Bosl2Base):\n    def __init__(self, z=None, p=None, **kwargs):\n       super().__init__(\"up\", {\"z\" : z, \"p\" : p, **kwargs})\n\nclass zmove(_Bosl2Base):\n    def __init__(self, z=None, p=None, **kwargs):\n       super().__init__(\"zmove\", {\"z\" : z, \"p\" : p, **kwargs})\n\nclass rot(_Bosl2Base):\n    def __init__(self, a=None, v=None, cp=None, _from=None, to=None, reverse=None, **kwargs):\n       super().__init__(\"rot\", {\"a\" : a, \"v\" : v, \"cp\" : cp, \"_from\" : _from, \"to\" : to, \"reverse\" : reverse, **kwargs})\n\nclass xrot(_Bosl2Base):\n    def __init__(self, a=None, p=None, cp=None, **kwargs):\n       super().__init__(\"xrot\", {\"a\" : a, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass yrot(_Bosl2Base):\n    def __init__(self, a=None, p=None, cp=None, **kwargs):\n       super().__init__(\"yrot\", {\"a\" : a, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass zrot(_Bosl2Base):\n    def __init__(self, a=None, p=None, cp=None, **kwargs):\n       super().__init__(\"zrot\", {\"a\" : a, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass tilt(_Bosl2Base):\n    def __init__(self, to=None, cp=None, reverse=None, **kwargs):\n       super().__init__(\"tilt\", {\"to\" : to, \"cp\" : cp, \"reverse\" : reverse, **kwargs})\n\nclass xscale(_Bosl2Base):\n    def __init__(self, x=None, p=None, cp=None, **kwargs):\n       super().__init__(\"xscale\", {\"x\" : x, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass yscale(_Bosl2Base):\n    def __init__(self, y=None, p=None, cp=None, **kwargs):\n       super().__init__(\"yscale\", {\"y\" : y, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass zscale(_Bosl2Base):\n    def __init__(self, z=None, p=None, cp=None, **kwargs):\n       super().__init__(\"zscale\", {\"z\" : z, \"p\" : p, \"cp\" : cp, **kwargs})\n\nclass xflip(_Bosl2Base):\n    def __init__(self, p=None, x=None, **kwargs):\n       super().__init__(\"xflip\", {\"p\" : p, \"x\" : x, **kwargs})\n\nclass yflip(_Bosl2Base):\n    def __init__(self, p=None, y=None, **kwargs):\n       super().__init__(\"yflip\", {\"p\" : p, \"y\" : y, **kwargs})\n\nclass zflip(_Bosl2Base):\n    def __init__(self, p=None, z=None, **kwargs):\n       super().__init__(\"zflip\", {\"p\" : p, \"z\" : z, **kwargs})\n\nclass frame_map(_Bosl2Base):\n    def __init__(self, x=None, y=None, z=None, p=None, reverse=None, **kwargs):\n       super().__init__(\"frame_map\", {\"x\" : x, \"y\" : y, \"z\" : z, \"p\" : p, \"reverse\" : reverse, **kwargs})\n\nclass skew(_Bosl2Base):\n    def __init__(self, p=None, sxy=None, sxz=None, syx=None, syz=None, szx=None, szy=None, axy=None, axz=None, ayx=None, ayz=None, azx=None, azy=None, **kwargs):\n       super().__init__(\"skew\", {\"p\" : p, \"sxy\" : sxy, \"sxz\" : sxz, \"syx\" : syx, \"syz\" : syz, \"szx\" : szx, \"szy\" : szy, \"axy\" : axy, \"axz\" : axz, \"ayx\" : ayx, \"ayz\" : ayz, \"azx\" : azx, \"azy\" : azy, **kwargs})\n\nclass translate(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"translate\", {\"v\" : v, **kwargs})\n\nclass rotate(_Bosl2Base):\n    def __init__(self, a=None, v=None, **kwargs):\n       super().__init__(\"rotate\", {\"a\" : a, \"v\" : v, **kwargs})\n\nclass scale(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"scale\", {\"v\" : v, **kwargs})\n\nclass multmatrix(_Bosl2Base):\n    def __init__(self, m=None, **kwargs):\n       super().__init__(\"multmatrix\", {\"m\" : m, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/trigonometry.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/trigonometry.scad'}\", False)\n\nclass law_of_cosines(_Bosl2Base):\n    def __init__(self, a=None, b=None, c=None, C=None, **kwargs):\n       super().__init__(\"law_of_cosines\", {\"a\" : a, \"b\" : b, \"c\" : c, \"C\" : C, **kwargs})\n\nclass law_of_sines(_Bosl2Base):\n    def __init__(self, a=None, A=None, b=None, B=None, **kwargs):\n       super().__init__(\"law_of_sines\", {\"a\" : a, \"A\" : A, \"b\" : b, \"B\" : B, **kwargs})\n\nclass hyp_opp_to_adj(_Bosl2Base):\n    def __init__(self, hyp=None, opp=None, **kwargs):\n       super().__init__(\"hyp_opp_to_adj\", {\"hyp\" : hyp, \"opp\" : opp, **kwargs})\n\nclass opp_hyp_to_adj(_Bosl2Base):\n    def __init__(self, opp=None, hyp=None, **kwargs):\n       super().__init__(\"opp_hyp_to_adj\", {\"opp\" : opp, \"hyp\" : hyp, **kwargs})\n\nclass hyp_ang_to_adj(_Bosl2Base):\n    def __init__(self, hyp=None, ang=None, **kwargs):\n       super().__init__(\"hyp_ang_to_adj\", {\"hyp\" : hyp, \"ang\" : ang, **kwargs})\n\nclass ang_hyp_to_adj(_Bosl2Base):\n    def __init__(self, ang=None, hyp=None, **kwargs):\n       super().__init__(\"ang_hyp_to_adj\", {\"ang\" : ang, \"hyp\" : hyp, **kwargs})\n\nclass opp_ang_to_adj(_Bosl2Base):\n    def __init__(self, opp=None, ang=None, **kwargs):\n       super().__init__(\"opp_ang_to_adj\", {\"opp\" : opp, \"ang\" : ang, **kwargs})\n\nclass ang_opp_to_adj(_Bosl2Base):\n    def __init__(self, ang=None, opp=None, **kwargs):\n       super().__init__(\"ang_opp_to_adj\", {\"ang\" : ang, \"opp\" : opp, **kwargs})\n\nclass hyp_adj_to_opp(_Bosl2Base):\n    def __init__(self, hyp=None, adj=None, **kwargs):\n       super().__init__(\"hyp_adj_to_opp\", {\"hyp\" : hyp, \"adj\" : adj, **kwargs})\n\nclass adj_hyp_to_opp(_Bosl2Base):\n    def __init__(self, adj=None, hyp=None, **kwargs):\n       super().__init__(\"adj_hyp_to_opp\", {\"adj\" : adj, \"hyp\" : hyp, **kwargs})\n\nclass hyp_ang_to_opp(_Bosl2Base):\n    def __init__(self, hyp=None, ang=None, **kwargs):\n       super().__init__(\"hyp_ang_to_opp\", {\"hyp\" : hyp, \"ang\" : ang, **kwargs})\n\nclass ang_hyp_to_opp(_Bosl2Base):\n    def __init__(self, ang=None, hyp=None, **kwargs):\n       super().__init__(\"ang_hyp_to_opp\", {\"ang\" : ang, \"hyp\" : hyp, **kwargs})\n\nclass adj_ang_to_opp(_Bosl2Base):\n    def __init__(self, adj=None, ang=None, **kwargs):\n       super().__init__(\"adj_ang_to_opp\", {\"adj\" : adj, \"ang\" : ang, **kwargs})\n\nclass ang_adj_to_opp(_Bosl2Base):\n    def __init__(self, ang=None, adj=None, **kwargs):\n       super().__init__(\"ang_adj_to_opp\", {\"ang\" : ang, \"adj\" : adj, **kwargs})\n\nclass adj_opp_to_hyp(_Bosl2Base):\n    def __init__(self, adj=None, opp=None, **kwargs):\n       super().__init__(\"adj_opp_to_hyp\", {\"adj\" : adj, \"opp\" : opp, **kwargs})\n\nclass opp_adj_to_hyp(_Bosl2Base):\n    def __init__(self, opp=None, adj=None, **kwargs):\n       super().__init__(\"opp_adj_to_hyp\", {\"opp\" : opp, \"adj\" : adj, **kwargs})\n\nclass adj_ang_to_hyp(_Bosl2Base):\n    def __init__(self, adj=None, ang=None, **kwargs):\n       super().__init__(\"adj_ang_to_hyp\", {\"adj\" : adj, \"ang\" : ang, **kwargs})\n\nclass ang_adj_to_hyp(_Bosl2Base):\n    def __init__(self, ang=None, adj=None, **kwargs):\n       super().__init__(\"ang_adj_to_hyp\", {\"ang\" : ang, \"adj\" : adj, **kwargs})\n\nclass opp_ang_to_hyp(_Bosl2Base):\n    def __init__(self, opp=None, ang=None, **kwargs):\n       super().__init__(\"opp_ang_to_hyp\", {\"opp\" : opp, \"ang\" : ang, **kwargs})\n\nclass ang_opp_to_hyp(_Bosl2Base):\n    def __init__(self, ang=None, opp=None, **kwargs):\n       super().__init__(\"ang_opp_to_hyp\", {\"ang\" : ang, \"opp\" : opp, **kwargs})\n\nclass hyp_adj_to_ang(_Bosl2Base):\n    def __init__(self, hyp=None, adj=None, **kwargs):\n       super().__init__(\"hyp_adj_to_ang\", {\"hyp\" : hyp, \"adj\" : adj, **kwargs})\n\nclass adj_hyp_to_ang(_Bosl2Base):\n    def __init__(self, adj=None, hyp=None, **kwargs):\n       super().__init__(\"adj_hyp_to_ang\", {\"adj\" : adj, \"hyp\" : hyp, **kwargs})\n\nclass hyp_opp_to_ang(_Bosl2Base):\n    def __init__(self, hyp=None, opp=None, **kwargs):\n       super().__init__(\"hyp_opp_to_ang\", {\"hyp\" : hyp, \"opp\" : opp, **kwargs})\n\nclass opp_hyp_to_ang(_Bosl2Base):\n    def __init__(self, opp=None, hyp=None, **kwargs):\n       super().__init__(\"opp_hyp_to_ang\", {\"opp\" : opp, \"hyp\" : hyp, **kwargs})\n\nclass adj_opp_to_ang(_Bosl2Base):\n    def __init__(self, adj=None, opp=None, **kwargs):\n       super().__init__(\"adj_opp_to_ang\", {\"adj\" : adj, \"opp\" : opp, **kwargs})\n\nclass opp_adj_to_ang(_Bosl2Base):\n    def __init__(self, opp=None, adj=None, **kwargs):\n       super().__init__(\"opp_adj_to_ang\", {\"opp\" : opp, \"adj\" : adj, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/tripod_mounts.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/tripod_mounts.scad'}\", False)\n\nclass manfrotto_rc2_plate(_Bosl2Base):\n    def __init__(self, chamfer=None, anchor=None, orient=None, spin=None, **kwargs):\n       super().__init__(\"manfrotto_rc2_plate\", {\"chamfer\" : chamfer, \"anchor\" : anchor, \"orient\" : orient, \"spin\" : spin, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/turtle3d.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/turtle3d.scad'}\", False)\n\nclass _transpart(_Bosl2Base):\n    def __init__(self, T=None, **kwargs):\n       super().__init__(\"_transpart\", {\"T\" : T, **kwargs})\n\nclass _rotpart(_Bosl2Base):\n    def __init__(self, T=None, **kwargs):\n       super().__init__(\"_rotpart\", {\"T\" : T, **kwargs})\n\nclass _turtle3d_state_valid(_Bosl2Base):\n    def __init__(self, state=None, **kwargs):\n       super().__init__(\"_turtle3d_state_valid\", {\"state\" : state, **kwargs})\n\nclass turtle3d(_Bosl2Base):\n    def __init__(self, commands=None, state=None, transforms=None, full_state=None, repeat=None, **kwargs):\n       super().__init__(\"turtle3d\", {\"commands\" : commands, \"state\" : state, \"transforms\" : transforms, \"full_state\" : full_state, \"repeat\" : repeat, **kwargs})\n\nclass _turtle3d_repeat(_Bosl2Base):\n    def __init__(self, commands=None, state=None, repeat=None, **kwargs):\n       super().__init__(\"_turtle3d_repeat\", {\"commands\" : commands, \"state\" : state, \"repeat\" : repeat, **kwargs})\n\nclass _turtle3d_command_len(_Bosl2Base):\n    def __init__(self, commands=None, index=None, **kwargs):\n       super().__init__(\"_turtle3d_command_len\", {\"commands\" : commands, \"index\" : index, **kwargs})\n\nclass _turtle3d(_Bosl2Base):\n    def __init__(self, commands=None, state=None, index=None, **kwargs):\n       super().__init__(\"_turtle3d\", {\"commands\" : commands, \"state\" : state, \"index\" : index, **kwargs})\n\nclass _turtle3d_rotation(_Bosl2Base):\n    def __init__(self, command=None, angle=None, center=None, **kwargs):\n       super().__init__(\"_turtle3d_rotation\", {\"command\" : command, \"angle\" : angle, \"center\" : center, **kwargs})\n\nclass _tupdate(_Bosl2Base):\n    def __init__(self, state=None, tran=None, pretran=None, **kwargs):\n       super().__init__(\"_tupdate\", {\"state\" : state, \"tran\" : tran, \"pretran\" : pretran, **kwargs})\n\nclass _turtle3d_command(_Bosl2Base):\n    def __init__(self, command=None, parm=None, parm2=None, state=None, index=None, **kwargs):\n       super().__init__(\"_turtle3d_command\", {\"command\" : command, \"parm\" : parm, \"parm2\" : parm2, \"state\" : state, \"index\" : index, **kwargs})\n\nclass _turtle3d_list_command(_Bosl2Base):\n    def __init__(self, command=None, arcsteps=None, movescale=None, lastT=None, lastPre=None, index=None, **kwargs):\n       super().__init__(\"_turtle3d_list_command\", {\"command\" : command, \"arcsteps\" : arcsteps, \"movescale\" : movescale, \"lastT\" : lastT, \"lastPre\" : lastPre, \"index\" : index, **kwargs})\n\nclass turtle3d(_Bosl2Base):\n    def __init__(self, commands=None, state=None, transforms=None, full_state=None, repeat=None, **kwargs):\n       super().__init__(\"turtle3d\", {\"commands\" : commands, \"state\" : state, \"transforms\" : transforms, \"full_state\" : full_state, \"repeat\" : repeat, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/utility.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/utility.scad'}\", False)\n\nclass typeof(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"typeof\", {\"x\" : x, **kwargs})\n\nclass is_type(_Bosl2Base):\n    def __init__(self, x=None, types=None, **kwargs):\n       super().__init__(\"is_type\", {\"x\" : x, \"types\" : types, **kwargs})\n\nclass is_def(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_def\", {\"x\" : x, **kwargs})\n\nclass is_str(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_str\", {\"x\" : x, **kwargs})\n\nclass is_int(_Bosl2Base):\n    def __init__(self, n=None, **kwargs):\n       super().__init__(\"is_int\", {\"n\" : n, **kwargs})\n\nclass is_integer(_Bosl2Base):\n    def __init__(self, n=None, **kwargs):\n       super().__init__(\"is_integer\", {\"n\" : n, **kwargs})\n\nclass all_integer(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"all_integer\", {\"x\" : x, **kwargs})\n\nclass is_nan(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_nan\", {\"x\" : x, **kwargs})\n\nclass is_finite(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_finite\", {\"x\" : x, **kwargs})\n\nclass is_range(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_range\", {\"x\" : x, **kwargs})\n\nclass valid_range(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"valid_range\", {\"x\" : x, **kwargs})\n\nclass is_func(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_func\", {\"x\" : x, **kwargs})\n\nclass is_consistent(_Bosl2Base):\n    def __init__(self, list=None, pattern=None, **kwargs):\n       super().__init__(\"is_consistent\", {\"list\" : list, \"pattern\" : pattern, **kwargs})\n\nclass _list_pattern(_Bosl2Base):\n    def __init__(self, list=None, **kwargs):\n       super().__init__(\"_list_pattern\", {\"list\" : list, **kwargs})\n\nclass same_shape(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"same_shape\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass is_bool_list(_Bosl2Base):\n    def __init__(self, list=None, length=None, **kwargs):\n       super().__init__(\"is_bool_list\", {\"list\" : list, \"length\" : length, **kwargs})\n\nclass any(_Bosl2Base):\n    def __init__(self, l=None, func=None, **kwargs):\n       super().__init__(\"any\", {\"l\" : l, \"func\" : func, **kwargs})\n\nclass _any_func(_Bosl2Base):\n    def __init__(self, l=None, func=None, i=None, out=None, **kwargs):\n       super().__init__(\"_any_func\", {\"l\" : l, \"func\" : func, \"i\" : i, \"out\" : out, **kwargs})\n\nclass _any_bool(_Bosl2Base):\n    def __init__(self, l=None, i=None, out=None, **kwargs):\n       super().__init__(\"_any_bool\", {\"l\" : l, \"i\" : i, \"out\" : out, **kwargs})\n\nclass all(_Bosl2Base):\n    def __init__(self, l=None, func=None, **kwargs):\n       super().__init__(\"all\", {\"l\" : l, \"func\" : func, **kwargs})\n\nclass _all_func(_Bosl2Base):\n    def __init__(self, l=None, func=None, i=None, out=None, **kwargs):\n       super().__init__(\"_all_func\", {\"l\" : l, \"func\" : func, \"i\" : i, \"out\" : out, **kwargs})\n\nclass _all_bool(_Bosl2Base):\n    def __init__(self, l=None, i=None, out=None, **kwargs):\n       super().__init__(\"_all_bool\", {\"l\" : l, \"i\" : i, \"out\" : out, **kwargs})\n\nclass num_true(_Bosl2Base):\n    def __init__(self, l=None, func=None, **kwargs):\n       super().__init__(\"num_true\", {\"l\" : l, \"func\" : func, **kwargs})\n\nclass default(_Bosl2Base):\n    def __init__(self, v=None, dflt=None, **kwargs):\n       super().__init__(\"default\", {\"v\" : v, \"dflt\" : dflt, **kwargs})\n\nclass first_defined(_Bosl2Base):\n    def __init__(self, v=None, recursive=None, _i=None, **kwargs):\n       super().__init__(\"first_defined\", {\"v\" : v, \"recursive\" : recursive, \"_i\" : _i, **kwargs})\n\nclass one_defined(_Bosl2Base):\n    def __init__(self, vals=None, names=None, dflt=None, **kwargs):\n       super().__init__(\"one_defined\", {\"vals\" : vals, \"names\" : names, \"dflt\" : dflt, **kwargs})\n\nclass num_defined(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"num_defined\", {\"v\" : v, **kwargs})\n\nclass any_defined(_Bosl2Base):\n    def __init__(self, v=None, recursive=None, **kwargs):\n       super().__init__(\"any_defined\", {\"v\" : v, \"recursive\" : recursive, **kwargs})\n\nclass all_defined(_Bosl2Base):\n    def __init__(self, v=None, recursive=None, **kwargs):\n       super().__init__(\"all_defined\", {\"v\" : v, \"recursive\" : recursive, **kwargs})\n\nclass u_add(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"u_add\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass u_sub(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"u_sub\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass u_mul(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"u_mul\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass u_div(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"u_div\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass get_anchor(_Bosl2Base):\n    def __init__(self, anchor=None, center=None, uncentered=None, dflt=None, **kwargs):\n       super().__init__(\"get_anchor\", {\"anchor\" : anchor, \"center\" : center, \"uncentered\" : uncentered, \"dflt\" : dflt, **kwargs})\n\nclass get_radius(_Bosl2Base):\n    def __init__(self, r1=None, r2=None, r=None, d1=None, d2=None, d=None, dflt=None, **kwargs):\n       super().__init__(\"get_radius\", {\"r1\" : r1, \"r2\" : r2, \"r\" : r, \"d1\" : d1, \"d2\" : d2, \"d\" : d, \"dflt\" : dflt, **kwargs})\n\nclass scalar_vec3(_Bosl2Base):\n    def __init__(self, v=None, dflt=None, **kwargs):\n       super().__init__(\"scalar_vec3\", {\"v\" : v, \"dflt\" : dflt, **kwargs})\n\nclass segs(_Bosl2Base):\n    def __init__(self, r=None, **kwargs):\n       super().__init__(\"segs\", {\"r\" : r, **kwargs})\n\nclass no_function(_Bosl2Base):\n    def __init__(self, name=None, **kwargs):\n       super().__init__(\"no_function\", {\"name\" : name, **kwargs})\n\nclass _valstr(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"_valstr\", {\"x\" : x, **kwargs})\n\nclass looping(_Bosl2Base):\n    def __init__(self, state=None, **kwargs):\n       super().__init__(\"looping\", {\"state\" : state, **kwargs})\n\nclass loop_while(_Bosl2Base):\n    def __init__(self, state=None, _continue=None, **kwargs):\n       super().__init__(\"loop_while\", {\"state\" : state, \"_continue\" : _continue, **kwargs})\n\nclass loop_done(_Bosl2Base):\n    def __init__(self, state=None, **kwargs):\n       super().__init__(\"loop_done\", {\"state\" : state, **kwargs})\n\nclass no_children(_Bosl2Base):\n    def __init__(self, count=None, **kwargs):\n       super().__init__(\"no_children\", {\"count\" : count, **kwargs})\n\nclass req_children(_Bosl2Base):\n    def __init__(self, count=None, **kwargs):\n       super().__init__(\"req_children\", {\"count\" : count, **kwargs})\n\nclass no_module(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"no_module\", {**kwargs})\n\nclass deprecate(_Bosl2Base):\n    def __init__(self, new_name=None, **kwargs):\n       super().__init__(\"deprecate\", {\"new_name\" : new_name, **kwargs})\n\nclass echo_viewport(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"echo_viewport\", {**kwargs})\n\nclass assert_approx(_Bosl2Base):\n    def __init__(self, got=None, expected=None, info=None, **kwargs):\n       super().__init__(\"assert_approx\", {\"got\" : got, \"expected\" : expected, \"info\" : info, **kwargs})\n\nclass assert_equal(_Bosl2Base):\n    def __init__(self, got=None, expected=None, info=None, **kwargs):\n       super().__init__(\"assert_equal\", {\"got\" : got, \"expected\" : expected, \"info\" : info, **kwargs})\n\nclass shape_compare(_Bosl2Base):\n    def __init__(self, eps=None, **kwargs):\n       super().__init__(\"shape_compare\", {\"eps\" : eps, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/vectors.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/vectors.scad'}\", False)\n\nclass is_vector(_Bosl2Base):\n    def __init__(self, v=None, length=None, zero=None, all_nonzero=None, eps=None, **kwargs):\n       super().__init__(\"is_vector\", {\"v\" : v, \"length\" : length, \"zero\" : zero, \"all_nonzero\" : all_nonzero, \"eps\" : eps, **kwargs})\n\nclass add_scalar(_Bosl2Base):\n    def __init__(self, v=None, s=None, **kwargs):\n       super().__init__(\"add_scalar\", {\"v\" : v, \"s\" : s, **kwargs})\n\nclass v_mul(_Bosl2Base):\n    def __init__(self, v1=None, v2=None, **kwargs):\n       super().__init__(\"v_mul\", {\"v1\" : v1, \"v2\" : v2, **kwargs})\n\nclass v_div(_Bosl2Base):\n    def __init__(self, v1=None, v2=None, **kwargs):\n       super().__init__(\"v_div\", {\"v1\" : v1, \"v2\" : v2, **kwargs})\n\nclass v_abs(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"v_abs\", {\"v\" : v, **kwargs})\n\nclass v_ceil(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"v_ceil\", {\"v\" : v, **kwargs})\n\nclass v_floor(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"v_floor\", {\"v\" : v, **kwargs})\n\nclass v_round(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"v_round\", {\"v\" : v, **kwargs})\n\nclass v_lookup(_Bosl2Base):\n    def __init__(self, x=None, v=None, **kwargs):\n       super().__init__(\"v_lookup\", {\"x\" : x, \"v\" : v, **kwargs})\n\nclass unit(_Bosl2Base):\n    def __init__(self, v=None, error=None, **kwargs):\n       super().__init__(\"unit\", {\"v\" : v, \"error\" : error, **kwargs})\n\nclass v_theta(_Bosl2Base):\n    def __init__(self, v=None, **kwargs):\n       super().__init__(\"v_theta\", {\"v\" : v, **kwargs})\n\nclass vector_angle(_Bosl2Base):\n    def __init__(self, v1=None, v2=None, v3=None, **kwargs):\n       super().__init__(\"vector_angle\", {\"v1\" : v1, \"v2\" : v2, \"v3\" : v3, **kwargs})\n\nclass vector_axis(_Bosl2Base):\n    def __init__(self, v1=None, v2=None, v3=None, **kwargs):\n       super().__init__(\"vector_axis\", {\"v1\" : v1, \"v2\" : v2, \"v3\" : v3, **kwargs})\n\nclass vector_bisect(_Bosl2Base):\n    def __init__(self, v1=None, v2=None, **kwargs):\n       super().__init__(\"vector_bisect\", {\"v1\" : v1, \"v2\" : v2, **kwargs})\n\nclass vector_perp(_Bosl2Base):\n    def __init__(self, v=None, w=None, **kwargs):\n       super().__init__(\"vector_perp\", {\"v\" : v, \"w\" : w, **kwargs})\n\nclass closest_point(_Bosl2Base):\n    def __init__(self, pt=None, points=None, **kwargs):\n       super().__init__(\"closest_point\", {\"pt\" : pt, \"points\" : points, **kwargs})\n\nclass furthest_point(_Bosl2Base):\n    def __init__(self, pt=None, points=None, **kwargs):\n       super().__init__(\"furthest_point\", {\"pt\" : pt, \"points\" : points, **kwargs})\n\nclass vector_search(_Bosl2Base):\n    def __init__(self, query=None, r=None, target=None, **kwargs):\n       super().__init__(\"vector_search\", {\"query\" : query, \"r\" : r, \"target\" : target, **kwargs})\n\nclass _bt_search(_Bosl2Base):\n    def __init__(self, query=None, r=None, points=None, tree=None, **kwargs):\n       super().__init__(\"_bt_search\", {\"query\" : query, \"r\" : r, \"points\" : points, \"tree\" : tree, **kwargs})\n\nclass vector_search_tree(_Bosl2Base):\n    def __init__(self, points=None, leafsize=None, treemin=None, **kwargs):\n       super().__init__(\"vector_search_tree\", {\"points\" : points, \"leafsize\" : leafsize, \"treemin\" : treemin, **kwargs})\n\nclass _bt_tree(_Bosl2Base):\n    def __init__(self, points=None, ind=None, leafsize=None, **kwargs):\n       super().__init__(\"_bt_tree\", {\"points\" : points, \"ind\" : ind, \"leafsize\" : leafsize, **kwargs})\n\nclass vector_nearest(_Bosl2Base):\n    def __init__(self, query=None, k=None, target=None, **kwargs):\n       super().__init__(\"vector_nearest\", {\"query\" : query, \"k\" : k, \"target\" : target, **kwargs})\n\nclass _bt_nearest(_Bosl2Base):\n    def __init__(self, p=None, k=None, points=None, tree=None, answers=None, **kwargs):\n       super().__init__(\"_bt_nearest\", {\"p\" : p, \"k\" : k, \"points\" : points, \"tree\" : tree, \"answers\" : answers, **kwargs})\n\nclass _insert_sorted(_Bosl2Base):\n    def __init__(self, list=None, k=None, new=None, **kwargs):\n       super().__init__(\"_insert_sorted\", {\"list\" : list, \"k\" : k, \"new\" : new, **kwargs})\n\nclass _insert_many(_Bosl2Base):\n    def __init__(self, list=None, k=None, newlist=None, i=None, **kwargs):\n       super().__init__(\"_insert_many\", {\"list\" : list, \"k\" : k, \"newlist\" : newlist, \"i\" : i, **kwargs})\n\nclass pointlist_bounds(_Bosl2Base):\n    def __init__(self, pts=None, **kwargs):\n       super().__init__(\"pointlist_bounds\", {\"pts\" : pts, **kwargs})\n\nclass fit_to_box(_Bosl2Base):\n    def __init__(self, pts=None, x=None, y=None, z=None, **kwargs):\n       super().__init__(\"fit_to_box\", {\"pts\" : pts, \"x\" : x, \"y\" : y, \"z\" : z, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/version.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/version.scad'}\", False)\n\nBOSL_VERSION = _OpenSCADConstant('BOSL_VERSION')\nclass bosl_version(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"bosl_version\", {**kwargs})\n\nclass bosl_version_num(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"bosl_version_num\", {**kwargs})\n\nclass bosl_version_str(_Bosl2Base):\n    def __init__(self, **kwargs):\n       super().__init__(\"bosl_version_str\", {**kwargs})\n\nclass _version_split_str(_Bosl2Base):\n    def __init__(self, x=None, _i=None, _out=None, _num=None, **kwargs):\n       super().__init__(\"_version_split_str\", {\"x\" : x, \"_i\" : _i, \"_out\" : _out, \"_num\" : _num, **kwargs})\n\nclass version_to_list(_Bosl2Base):\n    def __init__(self, version=None, **kwargs):\n       super().__init__(\"version_to_list\", {\"version\" : version, **kwargs})\n\nclass version_to_str(_Bosl2Base):\n    def __init__(self, version=None, **kwargs):\n       super().__init__(\"version_to_str\", {\"version\" : version, **kwargs})\n\nclass version_to_num(_Bosl2Base):\n    def __init__(self, version=None, **kwargs):\n       super().__init__(\"version_to_num\", {\"version\" : version, **kwargs})\n\nclass version_cmp(_Bosl2Base):\n    def __init__(self, a=None, b=None, **kwargs):\n       super().__init__(\"version_cmp\", {\"a\" : a, \"b\" : b, **kwargs})\n\nclass bosl_required(_Bosl2Base):\n    def __init__(self, version=None, **kwargs):\n       super().__init__(\"bosl_required\", {\"version\" : version, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/vnf.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/vnf.scad'}\", False)\n\nEMPTY_VNF = _OpenSCADConstant('EMPTY_VNF')\n_vnf_validate_errs = _OpenSCADConstant('_vnf_validate_errs')\nclass vnf_vertex_array(_Bosl2Base):\n    def __init__(self, points=None, caps=None, cap1=None, cap2=None, col_wrap=None, row_wrap=None, reverse=None, style=None, triangulate=None, return_edges=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, tex_scaling=None, tex_depth=None, tex_extra=None, tex_skip=None, sidecaps=None, sidecap1=None, sidecap2=None, normals=None, **kwargs):\n       super().__init__(\"vnf_vertex_array\", {\"points\" : points, \"caps\" : caps, \"cap1\" : cap1, \"cap2\" : cap2, \"col_wrap\" : col_wrap, \"row_wrap\" : row_wrap, \"reverse\" : reverse, \"style\" : style, \"triangulate\" : triangulate, \"return_edges\" : return_edges, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_scaling\" : tex_scaling, \"tex_depth\" : tex_depth, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"sidecaps\" : sidecaps, \"sidecap1\" : sidecap1, \"sidecap2\" : sidecap2, \"normals\" : normals, **kwargs})\n\nclass vnf_tri_array(_Bosl2Base):\n    def __init__(self, points=None, caps=None, cap1=None, cap2=None, col_wrap=None, row_wrap=None, reverse=None, limit_bunching=None, **kwargs):\n       super().__init__(\"vnf_tri_array\", {\"points\" : points, \"caps\" : caps, \"cap1\" : cap1, \"cap2\" : cap2, \"col_wrap\" : col_wrap, \"row_wrap\" : row_wrap, \"reverse\" : reverse, \"limit_bunching\" : limit_bunching, **kwargs})\n\nclass _lofttri(_Bosl2Base):\n    def __init__(self, p1=None, p2=None, i1offset=None, i2offset=None, n1=None, n2=None, reverse=None, trilist=None, i1=None, i2=None, tricount1=None, tricount2=None, trimax=None, **kwargs):\n       super().__init__(\"_lofttri\", {\"p1\" : p1, \"p2\" : p2, \"i1offset\" : i1offset, \"i2offset\" : i2offset, \"n1\" : n1, \"n2\" : n2, \"reverse\" : reverse, \"trilist\" : trilist, \"i1\" : i1, \"i2\" : i2, \"tricount1\" : tricount1, \"tricount2\" : tricount2, \"trimax\" : trimax, **kwargs})\n\nclass vnf_join(_Bosl2Base):\n    def __init__(self, vnfs=None, **kwargs):\n       super().__init__(\"vnf_join\", {\"vnfs\" : vnfs, **kwargs})\n\nclass vnf_from_polygons(_Bosl2Base):\n    def __init__(self, polygons=None, fast=None, eps=None, **kwargs):\n       super().__init__(\"vnf_from_polygons\", {\"polygons\" : polygons, \"fast\" : fast, \"eps\" : eps, **kwargs})\n\nclass _path_path_closest_vertices(_Bosl2Base):\n    def __init__(self, path1=None, path2=None, **kwargs):\n       super().__init__(\"_path_path_closest_vertices\", {\"path1\" : path1, \"path2\" : path2, **kwargs})\n\nclass _join_paths_at_vertices(_Bosl2Base):\n    def __init__(self, path1=None, path2=None, v1=None, v2=None, **kwargs):\n       super().__init__(\"_join_paths_at_vertices\", {\"path1\" : path1, \"path2\" : path2, \"v1\" : v1, \"v2\" : v2, **kwargs})\n\nclass _cleave_connected_region(_Bosl2Base):\n    def __init__(self, region=None, eps=None, **kwargs):\n       super().__init__(\"_cleave_connected_region\", {\"region\" : region, \"eps\" : eps, **kwargs})\n\nclass _polyHoles(_Bosl2Base):\n    def __init__(self, outer=None, holes=None, extremes=None, eps=None, n=None, **kwargs):\n       super().__init__(\"_polyHoles\", {\"outer\" : outer, \"holes\" : holes, \"extremes\" : extremes, \"eps\" : eps, \"n\" : n, **kwargs})\n\nclass _bridge(_Bosl2Base):\n    def __init__(self, pt=None, outer=None, eps=None, **kwargs):\n       super().__init__(\"_bridge\", {\"pt\" : pt, \"outer\" : outer, \"eps\" : eps, **kwargs})\n\nclass vnf_from_region(_Bosl2Base):\n    def __init__(self, region=None, transform=None, reverse=None, triangulate=None, **kwargs):\n       super().__init__(\"vnf_from_region\", {\"region\" : region, \"transform\" : transform, \"reverse\" : reverse, \"triangulate\" : triangulate, **kwargs})\n\nclass is_vnf(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_vnf\", {\"x\" : x, **kwargs})\n\nclass is_vnf_list(_Bosl2Base):\n    def __init__(self, x=None, **kwargs):\n       super().__init__(\"is_vnf_list\", {\"x\" : x, **kwargs})\n\nclass vnf_vertices(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_vertices\", {\"vnf\" : vnf, **kwargs})\n\nclass vnf_faces(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_faces\", {\"vnf\" : vnf, **kwargs})\n\nclass vnf_reverse_faces(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_reverse_faces\", {\"vnf\" : vnf, **kwargs})\n\nclass vnf_quantize(_Bosl2Base):\n    def __init__(self, vnf=None, q=None, **kwargs):\n       super().__init__(\"vnf_quantize\", {\"vnf\" : vnf, \"q\" : q, **kwargs})\n\nclass vnf_merge_points(_Bosl2Base):\n    def __init__(self, vnf=None, eps=None, **kwargs):\n       super().__init__(\"vnf_merge_points\", {\"vnf\" : vnf, \"eps\" : eps, **kwargs})\n\nclass vnf_drop_unused_points(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_drop_unused_points\", {\"vnf\" : vnf, **kwargs})\n\nclass _link_indicator(_Bosl2Base):\n    def __init__(self, l=None, imin=None, imax=None, **kwargs):\n       super().__init__(\"_link_indicator\", {\"l\" : l, \"imin\" : imin, \"imax\" : imax, **kwargs})\n\nclass vnf_triangulate(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_triangulate\", {\"vnf\" : vnf, **kwargs})\n\nclass vnf_unify_faces(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_unify_faces\", {\"vnf\" : vnf, **kwargs})\n\nclass _detri_combine_faces(_Bosl2Base):\n    def __init__(self, edgelist=None, faces=None, normals=None, facelist=None, curface=None, **kwargs):\n       super().__init__(\"_detri_combine_faces\", {\"edgelist\" : edgelist, \"faces\" : faces, \"normals\" : normals, \"facelist\" : facelist, \"curface\" : curface, **kwargs})\n\nclass vnf_slice(_Bosl2Base):\n    def __init__(self, vnf=None, dir=None, cuts=None, **kwargs):\n       super().__init__(\"vnf_slice\", {\"vnf\" : vnf, \"dir\" : dir, \"cuts\" : cuts, **kwargs})\n\nclass _shift_cut_plane(_Bosl2Base):\n    def __init__(self, vnf=None, dir=None, cut=None, off=None, **kwargs):\n       super().__init__(\"_shift_cut_plane\", {\"vnf\" : vnf, \"dir\" : dir, \"cut\" : cut, \"off\" : off, **kwargs})\n\nclass _split_polygon_at_x(_Bosl2Base):\n    def __init__(self, poly=None, x=None, **kwargs):\n       super().__init__(\"_split_polygon_at_x\", {\"poly\" : poly, \"x\" : x, **kwargs})\n\nclass _split_2dpolygons_at_each_x(_Bosl2Base):\n    def __init__(self, polys=None, xs=None, _i=None, **kwargs):\n       super().__init__(\"_split_2dpolygons_at_each_x\", {\"polys\" : polys, \"xs\" : xs, \"_i\" : _i, **kwargs})\n\nclass _slice_3dpolygons(_Bosl2Base):\n    def __init__(self, polys=None, dir=None, cuts=None, **kwargs):\n       super().__init__(\"_slice_3dpolygons\", {\"polys\" : polys, \"dir\" : dir, \"cuts\" : cuts, **kwargs})\n\nclass vnf_volume(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_volume\", {\"vnf\" : vnf, **kwargs})\n\nclass vnf_area(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_area\", {\"vnf\" : vnf, **kwargs})\n\nclass _vnf_centroid(_Bosl2Base):\n    def __init__(self, vnf=None, eps=None, **kwargs):\n       super().__init__(\"_vnf_centroid\", {\"vnf\" : vnf, \"eps\" : eps, **kwargs})\n\nclass vnf_bounds(_Bosl2Base):\n    def __init__(self, vnf=None, fast=None, **kwargs):\n       super().__init__(\"vnf_bounds\", {\"vnf\" : vnf, \"fast\" : fast, **kwargs})\n\nclass projection(_Bosl2Base):\n    def __init__(self, vnf=None, cut=None, z=None, eps=None, **kwargs):\n       super().__init__(\"projection\", {\"vnf\" : vnf, \"cut\" : cut, \"z\" : z, \"eps\" : eps, **kwargs})\n\nclass vnf_halfspace(_Bosl2Base):\n    def __init__(self, plane=None, vnf=None, closed=None, boundary=None, **kwargs):\n       super().__init__(\"vnf_halfspace\", {\"plane\" : plane, \"vnf\" : vnf, \"closed\" : closed, \"boundary\" : boundary, **kwargs})\n\nclass _assemble_paths(_Bosl2Base):\n    def __init__(self, vertices=None, edges=None, paths=None, i=None, **kwargs):\n       super().__init__(\"_assemble_paths\", {\"vertices\" : vertices, \"edges\" : edges, \"paths\" : paths, \"i\" : i, **kwargs})\n\nclass _vnfcut(_Bosl2Base):\n    def __init__(self, plane=None, vertices=None, vertexmap=None, inside=None, faces=None, vertcount=None, newfaces=None, newedges=None, newvertices=None, i=None, **kwargs):\n       super().__init__(\"_vnfcut\", {\"plane\" : plane, \"vertices\" : vertices, \"vertexmap\" : vertexmap, \"inside\" : inside, \"faces\" : faces, \"vertcount\" : vertcount, \"newfaces\" : newfaces, \"newedges\" : newedges, \"newvertices\" : newvertices, \"i\" : i, **kwargs})\n\nclass _triangulate_planar_convex_polygons(_Bosl2Base):\n    def __init__(self, polys=None, **kwargs):\n       super().__init__(\"_triangulate_planar_convex_polygons\", {\"polys\" : polys, **kwargs})\n\nclass vnf_bend(_Bosl2Base):\n    def __init__(self, vnf=None, r=None, d=None, axis=None, **kwargs):\n       super().__init__(\"vnf_bend\", {\"vnf\" : vnf, \"r\" : r, \"d\" : d, \"axis\" : axis, **kwargs})\n\nclass vnf_hull(_Bosl2Base):\n    def __init__(self, vnf=None, **kwargs):\n       super().__init__(\"vnf_hull\", {\"vnf\" : vnf, **kwargs})\n\nclass _sort_pairs0(_Bosl2Base):\n    def __init__(self, arr=None, **kwargs):\n       super().__init__(\"_sort_pairs0\", {\"arr\" : arr, **kwargs})\n\nclass vnf_boundary(_Bosl2Base):\n    def __init__(self, vnf=None, merge=None, idx=None, **kwargs):\n       super().__init__(\"vnf_boundary\", {\"vnf\" : vnf, \"merge\" : merge, \"idx\" : idx, **kwargs})\n\nclass vnf_small_offset(_Bosl2Base):\n    def __init__(self, vnf=None, delta=None, merge=None, **kwargs):\n       super().__init__(\"vnf_small_offset\", {\"vnf\" : vnf, \"delta\" : delta, \"merge\" : merge, **kwargs})\n\nclass vnf_sheet(_Bosl2Base):\n    def __init__(self, vnf=None, delta=None, style=None, merge=None, thickness=None, **kwargs):\n       super().__init__(\"vnf_sheet\", {\"vnf\" : vnf, \"delta\" : delta, \"style\" : style, \"merge\" : merge, \"thickness\" : thickness, **kwargs})\n\nclass _vnf_validate(_Bosl2Base):\n    def __init__(self, vnf=None, show_warns=None, check_isects=None, **kwargs):\n       super().__init__(\"_vnf_validate\", {\"vnf\" : vnf, \"show_warns\" : show_warns, \"check_isects\" : check_isects, **kwargs})\n\nclass _vnf_validate_err(_Bosl2Base):\n    def __init__(self, name=None, extra=None, **kwargs):\n       super().__init__(\"_vnf_validate_err\", {\"name\" : name, \"extra\" : extra, **kwargs})\n\nclass _pts_not_reported(_Bosl2Base):\n    def __init__(self, pts=None, varr=None, reports=None, **kwargs):\n       super().__init__(\"_pts_not_reported\", {\"pts\" : pts, \"varr\" : varr, \"reports\" : reports, **kwargs})\n\nclass _edge_not_reported(_Bosl2Base):\n    def __init__(self, edge=None, varr=None, reports=None, **kwargs):\n       super().__init__(\"_edge_not_reported\", {\"edge\" : edge, \"varr\" : varr, \"reports\" : reports, **kwargs})\n\nclass _vnf_find_edge_faces(_Bosl2Base):\n    def __init__(self, vnf=None, edge=None, **kwargs):\n       super().__init__(\"_vnf_find_edge_faces\", {\"vnf\" : vnf, \"edge\" : edge, **kwargs})\n\nclass _vnf_find_corner_faces(_Bosl2Base):\n    def __init__(self, vnf=None, corner=None, **kwargs):\n       super().__init__(\"_vnf_find_corner_faces\", {\"vnf\" : vnf, \"corner\" : corner, **kwargs})\n\nclass vnf_vertex_array(_Bosl2Base):\n    def __init__(self, points=None, caps=None, cap1=None, cap2=None, col_wrap=None, row_wrap=None, reverse=None, style=None, triangulate=None, texture=None, tex_reps=None, tex_size=None, tex_samples=None, tex_inset=None, tex_rot=None, tex_depth=None, tex_extra=None, tex_skip=None, sidecaps=None, sidecap1=None, sidecap2=None, tex_scaling=None, convexity=None, cp=None, anchor=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"vnf_vertex_array\", {\"points\" : points, \"caps\" : caps, \"cap1\" : cap1, \"cap2\" : cap2, \"col_wrap\" : col_wrap, \"row_wrap\" : row_wrap, \"reverse\" : reverse, \"style\" : style, \"triangulate\" : triangulate, \"texture\" : texture, \"tex_reps\" : tex_reps, \"tex_size\" : tex_size, \"tex_samples\" : tex_samples, \"tex_inset\" : tex_inset, \"tex_rot\" : tex_rot, \"tex_depth\" : tex_depth, \"tex_extra\" : tex_extra, \"tex_skip\" : tex_skip, \"sidecaps\" : sidecaps, \"sidecap1\" : sidecap1, \"sidecap2\" : sidecap2, \"tex_scaling\" : tex_scaling, \"convexity\" : convexity, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass vnf_tri_array(_Bosl2Base):\n    def __init__(self, points=None, caps=None, cap1=None, cap2=None, col_wrap=None, row_wrap=None, reverse=None, limit_bunching=None, convexity=None, cp=None, anchor=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"vnf_tri_array\", {\"points\" : points, \"caps\" : caps, \"cap1\" : cap1, \"cap2\" : cap2, \"col_wrap\" : col_wrap, \"row_wrap\" : row_wrap, \"reverse\" : reverse, \"limit_bunching\" : limit_bunching, \"convexity\" : convexity, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass vnf_polyhedron(_Bosl2Base):\n    def __init__(self, vnf=None, convexity=None, cp=None, anchor=None, spin=None, orient=None, atype=None, **kwargs):\n       super().__init__(\"vnf_polyhedron\", {\"vnf\" : vnf, \"convexity\" : convexity, \"cp\" : cp, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, \"atype\" : atype, **kwargs})\n\nclass vnf_wireframe(_Bosl2Base):\n    def __init__(self, vnf=None, width=None, **kwargs):\n       super().__init__(\"vnf_wireframe\", {\"vnf\" : vnf, \"width\" : width, **kwargs})\n\nclass vnf_hull(_Bosl2Base):\n    def __init__(self, vnf=None, fast=None, **kwargs):\n       super().__init__(\"vnf_hull\", {\"vnf\" : vnf, \"fast\" : fast, **kwargs})\n\nclass _show_vertices(_Bosl2Base):\n    def __init__(self, vertices=None, size=None, filter=None, **kwargs):\n       super().__init__(\"_show_vertices\", {\"vertices\" : vertices, \"size\" : size, \"filter\" : filter, **kwargs})\n\nclass _show_faces(_Bosl2Base):\n    def __init__(self, vertices=None, faces=None, size=None, filter=None, **kwargs):\n       super().__init__(\"_show_faces\", {\"vertices\" : vertices, \"faces\" : faces, \"size\" : size, \"filter\" : filter, **kwargs})\n\nclass debug_vnf(_Bosl2Base):\n    def __init__(self, vnf=None, faces=None, vertices=None, opacity=None, size=None, convexity=None, filter=None, **kwargs):\n       super().__init__(\"debug_vnf\", {\"vnf\" : vnf, \"faces\" : faces, \"vertices\" : vertices, \"opacity\" : opacity, \"size\" : size, \"convexity\" : convexity, \"filter\" : filter, **kwargs})\n\nclass vnf_validate(_Bosl2Base):\n    def __init__(self, vnf=None, size=None, show_warns=None, check_isects=None, opacity=None, adjacent=None, label_verts=None, label_faces=None, wireframe=None, **kwargs):\n       super().__init__(\"vnf_validate\", {\"vnf\" : vnf, \"size\" : size, \"show_warns\" : show_warns, \"check_isects\" : check_isects, \"opacity\" : opacity, \"adjacent\" : adjacent, \"label_verts\" : label_verts, \"label_faces\" : label_faces, \"wireframe\" : wireframe, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/walls.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/walls.scad'}\", False)\n\nclass _bevelSolid(_Bosl2Base):\n    def __init__(self, shape=None, bevel=None, **kwargs):\n       super().__init__(\"_bevelSolid\", {\"shape\" : shape, \"bevel\" : bevel, **kwargs})\n\nclass sparse_wall(_Bosl2Base):\n    def __init__(self, h=None, l=None, thick=None, maxang=None, strut=None, max_bridge=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sparse_wall\", {\"h\" : h, \"l\" : l, \"thick\" : thick, \"maxang\" : maxang, \"strut\" : strut, \"max_bridge\" : max_bridge, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass sparse_wall2d(_Bosl2Base):\n    def __init__(self, size=None, maxang=None, strut=None, max_bridge=None, anchor=None, spin=None, **kwargs):\n       super().__init__(\"sparse_wall2d\", {\"size\" : size, \"maxang\" : maxang, \"strut\" : strut, \"max_bridge\" : max_bridge, \"anchor\" : anchor, \"spin\" : spin, **kwargs})\n\nclass sparse_cuboid(_Bosl2Base):\n    def __init__(self, size=None, dir=None, strut=None, maxang=None, max_bridge=None, chamfer=None, rounding=None, edges=None, _except=None, except_edges=None, trimcorners=None, teardrop=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"sparse_cuboid\", {\"size\" : size, \"dir\" : dir, \"strut\" : strut, \"maxang\" : maxang, \"max_bridge\" : max_bridge, \"chamfer\" : chamfer, \"rounding\" : rounding, \"edges\" : edges, \"_except\" : _except, \"except_edges\" : except_edges, \"trimcorners\" : trimcorners, \"teardrop\" : teardrop, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass hex_panel(_Bosl2Base):\n    def __init__(self, shape=None, strut=None, spacing=None, frame=None, bevel_frame=None, h=None, height=None, l=None, length=None, bevel=None, anchor=None, orient=None, cp=None, atype=None, spin=None, **kwargs):\n       super().__init__(\"hex_panel\", {\"shape\" : shape, \"strut\" : strut, \"spacing\" : spacing, \"frame\" : frame, \"bevel_frame\" : bevel_frame, \"h\" : h, \"height\" : height, \"l\" : l, \"length\" : length, \"bevel\" : bevel, \"anchor\" : anchor, \"orient\" : orient, \"cp\" : cp, \"atype\" : atype, \"spin\" : spin, **kwargs})\n\nclass _honeycomb(_Bosl2Base):\n    def __init__(self, shape=None, spacing=None, hex_wall=None, **kwargs):\n       super().__init__(\"_honeycomb\", {\"shape\" : shape, \"spacing\" : spacing, \"hex_wall\" : hex_wall, **kwargs})\n\nclass _bevelWall(_Bosl2Base):\n    def __init__(self, shape=None, bevel=None, thickness=None, **kwargs):\n       super().__init__(\"_bevelWall\", {\"shape\" : shape, \"bevel\" : bevel, \"thickness\" : thickness, **kwargs})\n\nclass corrugated_wall(_Bosl2Base):\n    def __init__(self, h=None, l=None, thick=None, strut=None, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"corrugated_wall\", {\"h\" : h, \"l\" : l, \"thick\" : thick, \"strut\" : strut, \"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass thinning_wall(_Bosl2Base):\n    def __init__(self, h=None, l=None, thick=None, ang=None, braces=None, strut=None, wall=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"thinning_wall\", {\"h\" : h, \"l\" : l, \"thick\" : thick, \"ang\" : ang, \"braces\" : braces, \"strut\" : strut, \"wall\" : wall, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass thinning_triangle(_Bosl2Base):\n    def __init__(self, h=None, l=None, thick=None, ang=None, strut=None, wall=None, diagonly=None, center=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"thinning_triangle\", {\"h\" : h, \"l\" : l, \"thick\" : thick, \"ang\" : ang, \"strut\" : strut, \"wall\" : wall, \"diagonly\" : diagonly, \"center\" : center, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\nclass narrowing_strut(_Bosl2Base):\n    def __init__(self, w=None, l=None, wall=None, ang=None, anchor=None, spin=None, orient=None, **kwargs):\n       super().__init__(\"narrowing_strut\", {\"w\" : w, \"l\" : l, \"wall\" : wall, \"ang\" : ang, \"anchor\" : anchor, \"spin\" : spin, \"orient\" : orient, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2/wiring.py",
    "content": "from solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{_Path(__file__).parent.parent / 'bosl2/BOSL2/wiring.scad'}\", False)\n\nclass _hex_offset_ring(_Bosl2Base):\n    def __init__(self, d=None, lev=None, **kwargs):\n       super().__init__(\"_hex_offset_ring\", {\"d\" : d, \"lev\" : lev, **kwargs})\n\nclass _hex_offsets(_Bosl2Base):\n    def __init__(self, n=None, d=None, lev=None, arr=None, **kwargs):\n       super().__init__(\"_hex_offsets\", {\"n\" : n, \"d\" : d, \"lev\" : lev, \"arr\" : arr, **kwargs})\n\nclass wire_bundle(_Bosl2Base):\n    def __init__(self, path=None, wires=None, wirediam=None, rounding=None, wirenum=None, corner_steps=None, **kwargs):\n       super().__init__(\"wire_bundle\", {\"path\" : path, \"wires\" : wires, \"wirediam\" : wirediam, \"rounding\" : rounding, \"wirenum\" : wirenum, \"corner_steps\" : corner_steps, **kwargs})\n\n"
  },
  {
    "path": "solid2/extensions/bosl2_generator.py",
    "content": "#! /usr/bin/env python\n\nfrom pathlib import Path\n\nfrom solid2.core.utils import escape_openscad_identifier as escape\nfrom solid2.libs.py_scadparser import scad_parser\n\nfrom openscad_extension_generator import generateStub, makePackage\n\nheaderTemplate = \"\"\"\\\nfrom solid2.core.object_base import OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\nfrom .bosl2_base import Bosl2Base as _Bosl2Base\n\n_extra_scad_include(f\"{{_Path(__file__).parent.parent / '{scadFile}'}}\", {use_not_include})\n\n\"\"\"\n\ncallableTemplate = \"\"\"\\\nclass {name}(_Bosl2Base):\n    def __init__({paramStr}):\n       super().__init__({initStr})\n\n\"\"\"\n\nmixinHeader = \"\"\"\nfrom solid2.core.object_base import AccessSyntaxMixin as _AccessSyntaxMixin\n\nclass Bosl2AccessSyntaxMixin(_AccessSyntaxMixin):\n\n    def _get_std(self):\n        from . import std\n        return std\n\"\"\"\nmixinTemplate = \"\"\"\n    def {name}(self, {paramListWithDefaults}**kwargs):\n        return self._get_std().{name}({paramList}**kwargs)(self)\n\"\"\"\n\nscad_builtins_primitives = \\\n    Path(__file__).parent.parent / \"core\" / \"builtins\" / \"openscad.primitives\"\n\ndef generateBosl2Std(bosl2_dir):\n    stubFile = Path(__file__).absolute().parent / \"bosl2\" / \"std.py\"\n\n    with open(stubFile, \"w\") as std_f:\n        std_f.write(\"from .openscad import *\\n\")\n        with open(bosl2_dir / \"std.scad\") as f:\n            for l in f.readlines():\n                l = l.strip()\n                if not l.startswith(\"include <\"):\n                    continue\n                l = l.replace(\"include <\", \"\").replace(\">\", \"\")\n                if Path(l).stem not in [\"math\", \"lists\", \"strings\", \"utility\"]:\n                    std_f.write(f\"from .{Path(l).stem} import *\\n\")\n                else:\n                    std_f.write(f\"from . import {Path(l).stem} as bosl2_{Path(l).stem}\\n\")\n\ndef generateBosl2AccessSyntaxMixin(bosl2_dir, outputDir):\n    def generateCallable(c):\n        name = escape(c.name)\n        paramNames = [escape(p.name) for p in c.parameters]\n        paramNames = list(dict.fromkeys(paramNames))\n\n        paramListWithDefaults = \", \".join([f\"{p}=None\" for p in paramNames])\n        paramList = \", \".join([f'{p}' for p in paramNames])\n\n        if paramListWithDefaults: paramListWithDefaults += \", \"\n        if paramList: paramList += \", \"\n\n        return mixinTemplate.format(name=name,\n                                    paramListWithDefaults=paramListWithDefaults,\n                                    paramList=paramList)\n\n    mods = [\"transforms\", \"attachments\", \"miscellaneous\",\n            \"distributors\", \"partitions\", \"color\"]\n\n    mixinFiles = [(bosl2_dir / m).with_suffix(\".scad\") for m in mods]\n\n    modules = []\n    for f in mixinFiles:\n        m, _, _ = scad_parser.parseFile(f)\n        modules += m\n\n\n    with open(outputDir / \"bosl2_access_syntax_mixin.py\", \"w\") as f:\n        f.write(mixinHeader)\n\n        for c in modules:\n            if c.name.startswith(\"_\"):\n                continue\n            f.write(generateCallable(c))\n\nbosl2_dir = Path(\"./bosl2/BOSL2\")\noutput_dir = Path(__file__).parent / \"bosl2\"\n\nmakePackage(output_dir)\ngenerateBosl2Std(bosl2_dir)\ngenerateBosl2AccessSyntaxMixin(bosl2_dir, output_dir)\n\nfor f in bosl2_dir.iterdir():\n    if not f.suffix == \".scad\":\n        continue\n    if f.name in [\"std.scad\", \"builtins.scad\", \"bosl1compat.scad\"]:\n        continue\n\n    generateStub(f, output_dir, False,\n                 headerTemplate=headerTemplate,\n                 callableTemplate=callableTemplate)\n\ngenerateStub(scad_builtins_primitives, output_dir, False,\n             headerTemplate=\\\n                 \"from .bosl2_base import Bosl2Base as _Bosl2Base\\n\\n\",\n             callableTemplate=callableTemplate)\n\n"
  },
  {
    "path": "solid2/extensions/greedy_scad_interface/__init__.py",
    "content": "from .customizer_widgets import CustomizerCheckboxVariable,\\\n                                CustomizerDropdownVariable,\\\n                                CustomizerSliderVariable,\\\n                                CustomizerSpinnerVariable,\\\n                                CustomizerTextboxVariable\nfrom .scad_variable import ScadValue, ScadVariable\nfrom .scad_interface import *\n\n"
  },
  {
    "path": "solid2/extensions/greedy_scad_interface/customizer_widgets.py",
    "content": "from .scad_variable import ScadVariable\n\nclass CustomizerDropdownVariable(ScadVariable):\n    def __init__(self, name, default_value, options=None, label='', tab=''):\n\n        options_str = options if options else \"\"\n        if isinstance(options, list):\n            options_str = '[' + \", \".join(map(str, options)) + ']'\n\n        if isinstance(options, dict):\n            reverse_options = [ f'{options[k]} : \"{k}\"' for k in options.keys()]\n            options_str = f'[{\", \".join(reverse_options)}]'\n\n        super().__init__(name, default_value, options_str, label=label, tab=tab)\n\nclass CustomizerSliderVariable(ScadVariable):\n    def __init__(self, name, default_value, min_='', max_='', step='', label='', tab=''):\n        options_str = '['\n        options_str += min_ and str(min_) + ':'\n        options_str += step and str(step) + ':'\n        options_str += str(max_) + ']'\n\n        super().__init__(name, default_value, options_str, label=label, tab=tab)\n\nclass CustomizerSpinnerVariable(ScadVariable):\n    def __init__(self, name, default_value, step='', label='', tab=''):\n        options_str = step and str(step)\n\n        super().__init__(name, default_value, options_str, label=label, tab=tab)\n\nclass CustomizerCheckboxVariable(ScadVariable):\n    def __init__(self, name, default_value, label='', tab=''):\n        super().__init__(name, default_value, label=label, tab=tab)\n\nclass CustomizerTextboxVariable(ScadVariable):\n    def __init__(self, name, default_value, max_length='', label='', tab=''):\n        options_str = max_length and str(max_length)\n        super().__init__(name, default_value, options_str, label=label, tab=tab)\n\n"
  },
  {
    "path": "solid2/extensions/greedy_scad_interface/scad_interface.py",
    "content": "from solid2 import register_pre_render as _register_pre_render\nfrom .scad_variable import ScadVariable as _ScadVariable,\\\n                           ScadValue as _ScadValue\n\n_fonts = []\n\ndef register_font(filename):\n    _fonts.append(filename)\n\ndef get_animation_time():\n    return _ScadValue(\"$t\")\n\ndef set_global_fn(_fn):\n    _ScadVariable(\"$fn\", _fn)\n\ndef set_global_fa(_fa):\n    _ScadVariable(\"$fa\", _fa)\n\ndef set_global_fs(_fs):\n    _ScadVariable(\"$fs\", _fs)\n\ndef set_global_viewport_translation(trans):\n    _ScadVariable(\"$vpt\", trans)\n\ndef set_global_viewport_rotation(rot):\n    _ScadVariable(\"$vpr\", rot)\n\ndef set_global_viewport_fov(fov):\n    _ScadVariable(\"$vpf\", fov)\n\ndef set_global_viewport_distance(d):\n    _ScadVariable(\"$vpd\", d)\n\ndef set_global_variable(var_name, value):\n    _ScadVariable(var_name, value)\n\n@_register_pre_render\ndef _get_scad_header(_):\n    base_str = \"\\n\".join([f\"use <{f}>\" for f in _fonts])\n    base_str += \"\\n\\n\" if base_str else \"\"\n    base_str += \"\\n\".join(_ScadVariable.registered_variables.values())\n\n    if base_str:\n        base_str += \"\\n\"\n    return base_str\n\n"
  },
  {
    "path": "solid2/extensions/greedy_scad_interface/scad_variable.py",
    "content": "from solid2.core.object_base import OpenSCADConstant\nfrom ...core.utils import py2openscad\n\nclass ScadValue(OpenSCADConstant) : pass\n\nclass ScadVariable(ScadValue):\n    registered_variables = {}\n\n    def __init__(self, name, default_value, options_str='', label='', tab=''):\n        super().__init__(name)\n\n        builtinVars = [\"$fn\", \"$fa\", \"$fs\", \"$vpt\", \"$vpr\", \"$vpf\", \"$vpd\"]\n        if name not in builtinVars and name in self.registered_variables.keys():\n            raise ValueError(\"Multiple instances of ScadVariable with the same name.\")\n\n        def_str = self.get_definition(name, default_value, options_str, label, tab)\n        self.registered_variables.update({name : def_str})\n\n    def get_definition(self, name, default_value, options_str, label, tab):\n        tab = tab and f'/* [{tab}] */\\n'\n        label = label and f'//{label}\\n'\n        options_str = options_str and f' //{options_str}'\n        default_value = py2openscad(default_value)\n\n        return f'{tab}{label}{name} = {default_value};{options_str}'\n\n"
  },
  {
    "path": "solid2/extensions/openscad_extension_generator.py",
    "content": "#! /usr/bin/env python\n\nfrom pathlib import Path\n\nfrom solid2.core.utils import escape_openscad_identifier as escape\nfrom solid2.libs.py_scadparser import scad_parser\n\nheaderTemplate = \"\"\"\\\nfrom solid2.core.object_base import OpenSCADObject as _OpenSCADObject,\\\n                                    OpenSCADConstant as _OpenSCADConstant\nfrom solid2.core.scad_import import extra_scad_include as _extra_scad_include\nfrom pathlib import Path as _Path\n\n_extra_scad_include(f\"{{_Path(__file__).parent / _Path('../'*{parentCount}) / '{scadFile}'}}\", use_not_include={use_not_include})\n\n\"\"\"\n\nconstantTemplate = \"{name} = _OpenSCADConstant('{name}')\"\n\ncallableTemplate = \"\"\"\\\nclass {name}(_OpenSCADObject):\n    def __init__({paramStr}):\n       super().__init__({initStr})\n\n\"\"\"\n\ndef generateStub(scadFile, outputDir, use_not_include,\n                 headerTemplate=headerTemplate,\n                 callableTemplate=callableTemplate,\n                 parentCount=1):\n\n    def generateHeader():\n        return headerTemplate.format(__file__=__file__,\n                                     scadFile=scadFile,\n                                     use_not_include=use_not_include,\n                                     parentCount=parentCount)\n\n    def generateConstant(c):\n        return constantTemplate.format(name=escape(c.name)) + \"\\n\"\n\n    def generateCallable(c):\n        name = escape(c.name)\n        paramNames = [escape(p.name) for p in c.parameters]\n        paramNames = list(dict.fromkeys(paramNames))\n\n        paramStr = \", \".join([\"self\"] +\n                             [f\"{p}=None\" for p in paramNames] +\n                             [\"**kwargs\"])\n        initList = [f'\"{p}\" : {p}' for p in paramNames]\n        initList.append(\"**kwargs\")\n        initStr = f'\"{name}\", {{{\", \".join(initList)}}}'\n        return callableTemplate.format(name=name, paramStr=paramStr, initStr=initStr)\n\n    modules, functions, global_vars = scad_parser.parseFile(scadFile)\n\n    escaped_filename = escape(scadFile.stem) + \".py\"\n    with open(outputDir / escaped_filename, \"w\") as f:\n        f.write(generateHeader())\n\n        for c in global_vars:\n            f.write(generateConstant(c))\n\n        for c in functions + modules:\n            f.write(generateCallable(c))\n\ndef makePackage(directory):\n    import os\n    if not os.path.exists(directory):\n        os.mkdir(directory)\n    if not os.path.exists(directory / \"__init__.py\"):\n        with open(directory / \"__init__.py\", \"w\") : pass\n\n\nif __name__ == \"__main__\":\n    from argparse import ArgumentParser\n    parser = ArgumentParser(description=\"generates a solidpython2 extensions \"\n                                        \"from a OpenSCAD library\")\n    parser.add_argument(\"scadInDir\",\n                        help=\"directory containing the scad (library) files\")\n    parser.add_argument(\"packageName\",\n                        help=\"name of the generated python package\")\n    parser.add_argument(\"-i\", \"--include\", action='store_false', default=True,\n                        help=\"use OpenSCADs 'include' to import the library. \"\n                             \"Otherwiese OpenSCADs 'use' is used\")\n\n    args = parser.parse_args()\n\n    def generatePackage(inDir, outDir, parentCount=1):\n        for f in inDir.iterdir():\n            if f.is_dir():\n                makePackage(outDir)\n                generatePackage(inDir / f.name, outDir / f.name, parentCount+1)\n            elif f.suffix == \".scad\":\n                makePackage(outDir)\n                generateStub(f, outDir, args.include, parentCount=parentCount)\n\n    generatePackage(Path(args.scadInDir), Path(\".\") / args.packageName)\n"
  },
  {
    "path": "solid2/extensions/scad_control_structures.py",
    "content": "from solid2 import ScadValue as _ScadValue, \\\n                   scad_inline as _scad_inline, \\\n                   union as _union\n\nfrom solid2.core.utils import indent as _indent\n\ndef scad_range(start, stop, step=1):\n    return f\"[{start}:{step}:{stop}]\"\n\ndef scad_for(scadrange, loop_lambda):\n    index = _ScadValue(\"scad_for_index\")\n    body = loop_lambda(index)._render()\n    c = (f\"for({index} = {scadrange}) {{\\n\"\n         f\"{_indent(body)}\\n\"\n          \"}\\n\")\n    return _union()(_scad_inline(c))\n\ndef scad_if(condition, if_body, else_body):\n    c = (f\"if({condition}) {{\\n\"\n         f\"{_indent(if_body._render())}\\n\"\n          \"} else {\\n\"\n         f\"{_indent(else_body._render())}\\n\"\n          \"}\\n\")\n    return _union()(_scad_inline(c))\n\n"
  },
  {
    "path": "solid2/libs/__init__.py",
    "content": ""
  },
  {
    "path": "tests/examples_scad/.gitignore",
    "content": "*.png\n!*.scad\n"
  },
  {
    "path": "tests/examples_scad/01-basics.scad",
    "content": "$fn = 72;\n\ndifference() {\n\tcube(size = [10, 20, 30]);\n\tsphere(r = 10);\n}\n"
  },
  {
    "path": "tests/examples_scad/02-vars-and-operators.scad",
    "content": "difference() {\n\tcube(size = [10, 20, 30]);\n\tsphere(r = 10);\n}\n"
  },
  {
    "path": "tests/examples_scad/03-debug-background.scad",
    "content": "union() {\n\tdifference() {\n\t\tcube(size = [10, 20, 30]);\n\t\t#sphere(r = 10);\n\t}\n\t%cylinder(h = 30, r = 4);\n}\n"
  },
  {
    "path": "tests/examples_scad/04-convenience.scad",
    "content": "difference() {\n\trotate(a = [45, 45, 45]) {\n\t\ttranslate(v = [0, 0, -5]) {\n\t\t\tcube(size = [10, 20, 30]);\n\t\t}\n\t}\n\t#translate(v = [0, 5, 0]) {\n\t\tsphere(r = 10);\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/05-access-style-syntax.scad",
    "content": "difference() {\n\trotate(a = [45, 45, 45]) {\n\t\ttranslate(v = [0, 0, -5]) {\n\t\t\tcube(size = [10, 20, 30]);\n\t\t}\n\t}\n\t#translate(v = [0, 5, 0]) {\n\t\tsphere(r = 10);\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/06-functions.scad",
    "content": "union() {\n\tcube(center = true, size = [100, 250, 50]);\n\ttranslate(v = [0, 0, 50]) {\n\t\tdifference() {\n\t\t\tcube(center = true, size = [80, 100, 60]);\n\t\t\tunion() {\n\t\t\t\ttranslate(v = [0, 0, -10]) {\n\t\t\t\t\tcube(center = true, size = [200, 55, 50]);\n\t\t\t\t}\n\t\t\t\trotate(a = [0, 0, 90]) {\n\t\t\t\t\ttranslate(v = [0, 0, -10]) {\n\t\t\t\t\t\tcube(center = true, size = [200, 55, 50]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttranslate(v = [0, -80, 0]) {\n\t\ttranslate(v = [0, 0, -20]) {\n\t\t\tunion() {\n\t\t\t\ttranslate(v = [-70, 0, 0]) {\n\t\t\t\t\trotate(a = [0, 90, 0]) {\n\t\t\t\t\t\tcylinder(center = true, h = 15, r = 35);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttranslate(v = [70, 0, 0]) {\n\t\t\t\t\trotate(a = [0, 90, 0]) {\n\t\t\t\t\t\tcylinder(center = true, h = 15, r = 35);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trotate(a = [0, 90, 0]) {\n\t\t\t\t\tcylinder(center = true, h = 120, r = 10);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttranslate(v = [0, 80, 0]) {\n\t\ttranslate(v = [0, 0, -20]) {\n\t\t\tunion() {\n\t\t\t\ttranslate(v = [-70, 0, 0]) {\n\t\t\t\t\trotate(a = [0, 90, 0]) {\n\t\t\t\t\t\tcylinder(center = true, h = 15, r = 35);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttranslate(v = [70, 0, 0]) {\n\t\t\t\t\trotate(a = [0, 90, 0]) {\n\t\t\t\t\t\tcylinder(center = true, h = 15, r = 35);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trotate(a = [0, 90, 0]) {\n\t\t\t\t\tcylinder(center = true, h = 120, r = 10);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/07-libs-bosl2-attachable.scad",
    "content": "include <../../solid2/extensions/bosl2/BOSL2/version.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/constants.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/transforms.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/distributors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/miscellaneous.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/color.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/attachments.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/beziers.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/drawing.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/math.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/paths.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/lists.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/comparisons.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/linalg.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/trigonometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vectors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/affine.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/coords.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/geometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/regions.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/strings.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vnf.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/structs.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/rounding.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/skin.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/utility.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/partitions.scad>;\n\nattachable(anchor = CENTER, orient = UP, size = [300, 100, 100], spin = 0) {\n\tunion() {\n\t\txcopies(spacing = 200) {\n\t\t\tcube(center = true, size = 100);\n\t\t}\n\t\txcyl(d = 25.0, h = 200);\n\t}\n\tunion() {\n\t\tattach(parent = TOP) {\n\t\t\tcube(center = true, size = 50);\n\t\t}\n\t\tattach(parent = LEFT) {\n\t\t\tsphere(r = 50);\n\t\t}\n\t\tshow_anchors(s = 30);\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/07-libs-bosl2-logo.scad",
    "content": "include <../../solid2/extensions/bosl2/BOSL2/version.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/constants.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/transforms.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/distributors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/miscellaneous.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/color.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/attachments.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/beziers.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/drawing.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/math.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/paths.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/lists.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/comparisons.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/linalg.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/trigonometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vectors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/affine.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/coords.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/geometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/regions.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/strings.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vnf.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/structs.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/rounding.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/skin.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/utility.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/partitions.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/gears.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/screws.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/cubetruss.scad>;\n\n$fa = 1;\n$fs = 1;\n\nxdistribute(spacing = 50) {\n\trecolor(c = \"#f77\") {\n\t\tdiff(remove = \"hole\") {\n\t\t\tcuboid(anchor = FRONT, chamfer = 10, edges = [(RIGHT + BACK), (RIGHT + FRONT)], size = [45, 45, 10]) {\n\t\t\t\ttag(tag = \"hole\") {\n\t\t\t\t\tcuboid(chamfer = 5, edges = [(RIGHT + BACK), (RIGHT + FRONT)], size = [30, 30, 11]);\n\t\t\t\t}\n\t\t\t\tattach(child = BACK, overlap = 5, parent = FRONT) {\n\t\t\t\t\tcuboid(edges = [(RIGHT + BACK), (RIGHT + FRONT)], rounding = 15, size = [45, 45, 10]) {\n\t\t\t\t\t\ttag(tag = \"hole\") {\n\t\t\t\t\t\t\tcuboid(edges = [(RIGHT + BACK), (RIGHT + FRONT)], rounding = 10, size = [30, 30, 11]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\trecolor(c = \"#7f7\") {\n\t\tbevel_gear(face_width = 12, pitch = 8, pitch_angle = 45, shaft_diam = 25, slices = 12, spiral_angle = 30, teeth = 20);\n\t}\n\trecolor(c = \"#99f\") {\n\t\tpath_sweep(path = bezpath_curve(bezpath = [[-18, -20], [-18, -45], [18, -45], [18, -20], [18, 0], [-18, 0], [-18, 20], [-18, 45], [18, 45], [18, 20]]), shape = regular_ngon(d = 10, n = 3, spin = 90));\n\t}\n\trecolor(c = \"#0bf\") {\n\t\tmove(v = [-15, -35, 0]) {\n\t\t\tcubetruss_corner(bracing = false, clipthick = 0, extents = [3, 8, 0, 0, 0], h = 1, size = 10, strut = 1);\n\t\t}\n\t}\n\trecolor(c = \"#777\") {\n\t\txdistribute(spacing = 24) {\n\t\t\tscrew(anchor = \"origin\", head = \"hex\", orient = BACK, spec = \"M12,70\") {\n\t\t\t\tattach(child = CENTER, parent = BOT) {\n\t\t\t\t\tnut(spec = \"M12\", thickness = 10);\n\t\t\t\t}\n\t\t\t}\n\t\t\tscrew(anchor = \"origin\", head = \"hex\", orient = BACK, spec = \"M12,70\") {\n\t\t\t\tattach(child = CENTER, parent = BOT) {\n\t\t\t\t\tnut(spec = \"M12\", thickness = 10);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/07-libs-bosl2.scad",
    "content": "include <../../solid2/extensions/bosl2/BOSL2/version.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/constants.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/transforms.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/distributors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/miscellaneous.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/color.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/attachments.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/beziers.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/drawing.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/math.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/paths.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/lists.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/comparisons.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/linalg.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/trigonometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vectors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/affine.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/coords.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/geometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/regions.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/strings.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vnf.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/structs.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/rounding.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/skin.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/utility.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/partitions.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/metric_screws.scad>;\n\nunion() {\n\t#bounding_box() {\n\t\tpath_extrude(path = [[0, 0, 0], [33, 33, 33], [66, 33, 40], [100, 0, 0], [150, 0, 0]]) {\n\t\t\tcircle($fn = 6, r = 10);\n\t\t}\n\t}\n\trecolor(c = \"purple\") {\n\t\tpath_extrude(path = [[0, 0, 0], [33, 33, 33], [66, 33, 40], [100, 0, 0], [150, 0, 0]]) {\n\t\t\tcircle($fn = 6, r = 10);\n\t\t}\n\t}\n\tfwd(y = 100) {\n\t\tdiff() {\n\t\t\tcuboid(size = 50) {\n\t\t\t\ttag(tag = \"remove\") {\n\t\t\t\t\tattach(parent = TOP) {\n\t\t\t\t\t\tsphere(d = 40);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttag(tag = \"keep\") {\n\t\t\t\t\tattach(parent = CTR) {\n\t\t\t\t\t\tcylinder(d = 10, h = 40);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tleft(x = 100) {\n\t\tmetric_bolt(headtype = \"hex\", l = 40, size = 20);\n\t}\n\tback(y = 100) {\n\t\theightfield(bottom = -1, data = [[-0.7158354760083571, -0.09777126940501375, 0.553818813206015, 0.9508184515435334, 0.9437285851822178, 0.5643904318910452, -0.01528900397670874, -0.5729354351462002, -0.9259311737964365, -0.9866658946445946, -0.7710099754671497, -0.36977206094538123, 0.0961793703293298, 0.5171216654477707, 0.8199555226173607, 0.9753959210713569, 0.9911848272864543, 0.8983805029159327, 0.7370998663151956, 0.5456621280611279, 0.3544785436780216, 0.1841790651713167, 0.04659851464007364, -0.052844195143546255, -0.11251048882501428, -0.13235175009777303, -0.11251048882501428, -0.052844195143546255, 0.04659851464007364, 0.1841790651713167, 0.3544785436780216, 0.5456621280611279, 0.7370998663151956, 0.8983805029159327, 0.9911848272864543, 0.9753959210713569, 0.8199555226173607, 0.5171216654477707, 0.0961793703293298, -0.36977206094538123, -0.7710099754671497, -0.9866658946445946, -0.9259311737964365, -0.5729354351462002, -0.01528900397670874, 0.5643904318910452, 0.9437285851822178, 0.9508184515435334, 0.553818813206015, -0.09777126940501375], [-0.09777126940501375, 0.5780962926354162, 0.9677093359135412, 0.909348191100782, 0.45690344147541284, -0.17403707166257712, -0.7211568839360558, -0.9880316240928618, -0.9071867414201306, -0.5396963022265032, -0.02760600627447501, 0.4701369183201865, 0.8302999955979169, 0.9916552086207551, 0.9545112551957777, 0.7625584504796027, 0.4787847819991722, 0.16472584477074798, -0.13235175009777303, -0.3839842381511847, -0.5789496358185631, -0.7185332705339138, -0.8110635436155982, -0.8672002621460978, -0.8965494243902328, -0.9055783620066239, -0.8965494243902328, -0.8672002621460978, -0.8110635436155982, -0.7185332705339138, -0.5789496358185631, -0.3839842381511847, -0.13235175009777303, 0.16472584477074798, 0.4787847819991722, 0.7625584504796027, 0.9545112551957777, 0.9916552086207551, 0.8302999955979169, 0.4701369183201865, -0.02760600627447501, -0.5396963022265032, -0.9071867414201306, -0.9880316240928618, -0.7211568839360558, -0.17403707166257712, 0.45690344147541284, 0.909348191100782, 0.9677093359135412, 0.5780962926354162], [0.553818813206015, 0.9677093359135412, 0.8961364196158191, 0.4001993726403515, -0.2677948252231252, -0.8054445870804156, -0.9999248173626606, -0.8027125451584881, -0.320602419432942, 0.2536796241035926, 0.727913119918548, 0.9753959210713569, 0.9599849292731429, 0.7239439305723232, 0.3544785436780216, -0.052844195143546255, -0.42101420248427274, -0.7040964370475585, -0.887140035350667, -0.9784905124788417, -0.9996939741393799, -0.9766101758528882, -0.9333656865281341, -0.8892231315429847, -0.8575975897333462, -0.8462204041751706, -0.8575975897333462, -0.8892231315429847, -0.9333656865281341, -0.9766101758528882, -0.9996939741393799, -0.9784905124788417, -0.887140035350667, -0.7040964370475585, -0.42101420248427274, -0.052844195143546255, 0.3544785436780216, 0.7239439305723232, 0.9599849292731429, 0.9753959210713569, 0.727913119918548, 0.2536796241035926, -0.320602419432942, -0.8027125451584881, -0.9999248173626606, -0.8054445870804156, -0.2677948252231252, 0.4001993726403515, 0.8961364196158191, 0.9677093359135412], [0.9508184515435334, 0.909348191100782, 0.4001993726403515, -0.2986026440580049, -0.8426112405177267, -0.9936231122371427, -0.7135482820487202, -0.15043367466348193, 0.45418422532509545, 0.8778684012984409, 0.9970765516272863, 0.8099508994563396, 0.40878600496256273, -0.07274873415833447, -0.5106954441094101, -0.8229869266810047, -0.9784905124788417, -0.9883875439237823, -0.8892231315429847, -0.7259123218586886, -0.5395308232720181, -0.36117831706278347, -0.2108600771143173, -0.09940899775107966, -0.031561728068998866, -0.008851309290403876, -0.031561728068998866, -0.09940899775107966, -0.2108600771143173, -0.36117831706278347, -0.5395308232720181, -0.7259123218586886, -0.8892231315429847, -0.9883875439237823, -0.9784905124788417, -0.8229869266810047, -0.5106954441094101, -0.07274873415833447, 0.40878600496256273, 0.8099508994563396, 0.9970765516272863, 0.8778684012984409, 0.45418422532509545, -0.15043367466348193, -0.7135482820487202, -0.9936231122371427, -0.8426112405177267, -0.2986026440580049, 0.4001993726403515, 0.909348191100782], [0.9437285851822178, 0.45690344147541284, -0.2677948252231252, -0.8426112405177267, -0.9892668187780492, -0.6636338842129675, -0.045255173119998, 0.577530538995622, 0.9508042427723833, 0.9545112551957777, 0.6242995590883633, 0.10591864700171519, -0.42101420248427274, -0.8110635436155982, -0.9895644478503135, -0.9545833223822333, -0.7553386617118615, -0.46271600927183404, -0.1442896235333068, 0.15024779411670722, 0.393205596105676, 0.5758065019122222, 0.7018171073220065, 0.7809125866717632, 0.8233862126726764, 0.8366556385360561, 0.8233862126726764, 0.7809125866717632, 0.7018171073220065, 0.5758065019122222, 0.393205596105676, 0.15024779411670722, -0.1442896235333068, -0.46271600927183404, -0.7553386617118615, -0.9545833223822333, -0.9895644478503135, -0.8110635436155982, -0.42101420248427274, 0.10591864700171519, 0.6242995590883633, 0.9545112551957777, 0.9508042427723833, 0.577530538995622, -0.045255173119998, -0.6636338842129675, -0.9892668187780492, -0.8426112405177267, -0.2677948252231252, 0.45690344147541284], [0.5643904318910452, -0.17403707166257712, -0.8054445870804156, -0.9936231122371427, -0.6636338842129675, -0.009937201600071412, 0.6350748642631946, 0.9793226624873786, 0.8983805029159327, 0.4615624875447749, -0.13235175009777303, -0.6591064566557293, -0.9577345186201252, -0.9717790528591356, -0.7408102813303544, -0.36117831706278347, 0.0594013868715, 0.4354061127346995, 0.7184201511154031, 0.8959366989404217, 0.9810135747654135, 0.9997053962201027, 0.9807356389159875, 0.9490461902387302, 0.9228549487508323, 0.9129452507276277, 0.9228549487508323, 0.9490461902387302, 0.9807356389159875, 0.9997053962201027, 0.9810135747654135, 0.8959366989404217, 0.7184201511154031, 0.4354061127346995, 0.0594013868715, -0.36117831706278347, -0.7408102813303544, -0.9717790528591356, -0.9577345186201252, -0.6591064566557293, -0.13235175009777303, 0.4615624875447749, 0.8983805029159327, 0.9793226624873786, 0.6350748642631946, -0.009937201600071412, -0.6636338842129675, -0.9936231122371427, -0.8054445870804156, -0.17403707166257712], [-0.01528900397670874, -0.7211568839360558, -0.9999248173626606, -0.7135482820487202, -0.045255173119998, 0.6350748642631946, 0.9861675309117627, 0.8622844455154678, 0.3544785436780216, -0.28907125514443305, -0.7988038975130448, -0.9992433916004055, -0.8575975897333462, -0.46271600927183404, 0.036641970611123245, 0.49708668342823564, 0.8233862126726764, 0.9810135747654135, 0.9852623084849599, 0.8797342206140177, 0.7154910816495544, 0.5370464912494449, 0.37632652685444434, 0.252649147081716, 0.17582294024532347, 0.14987720966295234, 0.17582294024532347, 0.252649147081716, 0.37632652685444434, 0.5370464912494449, 0.7154910816495544, 0.8797342206140177, 0.9852623084849599, 0.9810135747654135, 0.8233862126726764, 0.49708668342823564, 0.036641970611123245, -0.46271600927183404, -0.8575975897333462, -0.9992433916004055, -0.7988038975130448, -0.28907125514443305, 0.3544785436780216, 0.8622844455154678, 0.9861675309117627, 0.6350748642631946, -0.045255173119998, -0.7135482820487202, -0.9999248173626606, -0.7211568839360558], [-0.5729354351462002, -0.9880316240928618, -0.8027125451584881, -0.15043367466348193, 0.577530538995622, 0.9793226624873786, 0.8622844455154678, 0.31751041845612377, -0.36525286620192765, -0.8672002621460978, -0.9914061586009497, -0.7259123218586886, -0.2108600771143173, 0.3502527398419366, 0.7809125866717632, 0.9854307373467088, 0.956586601484016, 0.7500645547914181, 0.44721751781684405, 0.12379166736845787, -0.16722487140352646, -0.399037586302389, -0.565688817406875, -0.6733906518850356, -0.7323723324376428, -0.750987246771676, -0.7323723324376428, -0.6733906518850356, -0.565688817406875, -0.399037586302389, -0.16722487140352646, 0.12379166736845787, 0.44721751781684405, 0.7500645547914181, 0.956586601484016, 0.9854307373467088, 0.7809125866717632, 0.3502527398419366, -0.2108600771143173, -0.7259123218586886, -0.9914061586009497, -0.8672002621460978, -0.36525286620192765, 0.31751041845612377, 0.8622844455154678, 0.9793226624873786, 0.577530538995622, -0.15043367466348193, -0.8027125451584881, -0.9880316240928618], [-0.9259311737964365, -0.9071867414201306, -0.320602419432942, 0.45418422532509545, 0.9508042427723833, 0.8983805029159327, 0.3544785436780216, -0.36525286620192765, -0.887140035350667, -0.9766101758528882, -0.6291191778335704, -0.031561728068998866, 0.5565388448499853, 0.9255541197058049, 0.9852623084849599, 0.7665984826660711, 0.37632652685444434, -0.06122338153363395, -0.44822580183753064, -0.7323723324376428, -0.9042033484553401, -0.9828460722647567, -0.9998706698457897, -0.9869844897640472, -0.9690672970578027, -0.9613974918795568, -0.9690672970578027, -0.9869844897640472, -0.9998706698457897, -0.9828460722647567, -0.9042033484553401, -0.7323723324376428, -0.44822580183753064, -0.06122338153363395, 0.37632652685444434, 0.7665984826660711, 0.9852623084849599, 0.9255541197058049, 0.5565388448499853, -0.031561728068998866, -0.6291191778335704, -0.9766101758528882, -0.887140035350667, -0.36525286620192765, 0.3544785436780216, 0.8983805029159327, 0.9508042427723833, 0.45418422532509545, -0.320602419432942, -0.9071867414201306], [-0.9866658946445946, -0.5396963022265032, 0.2536796241035926, 0.8778684012984409, 0.9545112551957777, 0.4615624875447749, -0.28907125514443305, -0.8672002621460978, -0.9766101758528882, -0.5941982082298611, 0.0594013868715, 0.6675079670136292, 0.9810135747654135, 0.9129452507276277, 0.5370464912494449, 0.018405303267344752, -0.4723862364856837, -0.8197716090940644, -0.9828460722647567, -0.9818619158392312, -0.8699452785942385, -0.7064425466207848, -0.5403536357338068, -0.4046099138586663, -0.31765585797787305, -0.2879033166650653, -0.31765585797787305, -0.4046099138586663, -0.5403536357338068, -0.7064425466207848, -0.8699452785942385, -0.9818619158392312, -0.9828460722647567, -0.8197716090940644, -0.4723862364856837, 0.018405303267344752, 0.5370464912494449, 0.9129452507276277, 0.9810135747654135, 0.6675079670136292, 0.0594013868715, -0.5941982082298611, -0.9766101758528882, -0.8672002621460978, -0.28907125514443305, 0.4615624875447749, 0.9545112551957777, 0.8778684012984409, 0.2536796241035926, -0.5396963022265032], [-0.7710099754671497, -0.02760600627447501, 0.727913119918548, 0.9970765516272863, 0.6242995590883633, -0.13235175009777303, -0.7988038975130448, -0.9914061586009497, -0.6291191778335704, 0.0594013868715, 0.7018171073220065, 0.9952084655965423, 0.8414046940486856, 0.3521027624179121, -0.2459315899387359, -0.7323723324376428, -0.9771688419778408, -0.9613974918795568, -0.7479592241617414, -0.43274114505056144, -0.10324074641368002, 0.18275564204117561, 0.39943890886127764, 0.5440171490365727, 0.6246372204389422, 0.6502878401571168, 0.6246372204389422, 0.5440171490365727, 0.39943890886127764, 0.18275564204117561, -0.10324074641368002, -0.43274114505056144, -0.7479592241617414, -0.9613974918795568, -0.9771688419778408, -0.7323723324376428, -0.2459315899387359, 0.3521027624179121, 0.8414046940486856, 0.9952084655965423, 0.7018171073220065, 0.0594013868715, -0.6291191778335704, -0.9914061586009497, -0.7988038975130448, -0.13235175009777303, 0.6242995590883633, 0.9970765516272863, 0.727913119918548, -0.02760600627447501], [-0.36977206094538123, 0.4701369183201865, 0.9753959210713569, 0.8099508994563396, 0.10591864700171519, -0.6591064566557293, -0.9992433916004055, -0.7259123218586886, -0.031561728068998866, 0.6675079670136292, 0.9952084655965423, 0.8130861137605422, 0.252649147081716, -0.399037586302389, -0.8649557077942015, -0.997255180156715, -0.8048090667832768, -0.4046099138586663, 0.05545895688281034, 0.4585981653620278, 0.7459063049687641, 0.911839860974458, 0.9837263751105298, 0.9999876561221204, 0.99485348900195, 0.9906073556948704, 0.99485348900195, 0.9999876561221204, 0.9837263751105298, 0.911839860974458, 0.7459063049687641, 0.4585981653620278, 0.05545895688281034, -0.4046099138586663, -0.8048090667832768, -0.997255180156715, -0.8649557077942015, -0.399037586302389, 0.252649147081716, 0.8130861137605422, 0.9952084655965423, 0.6675079670136292, -0.031561728068998866, -0.7259123218586886, -0.9992433916004055, -0.6591064566557293, 0.10591864700171519, 0.8099508994563396, 0.9753959210713569, 0.4701369183201865], [0.0961793703293298, 0.8302999955979169, 0.9599849292731429, 0.40878600496256273, -0.42101420248427274, -0.9577345186201252, -0.8575975897333462, -0.2108600771143173, 0.5565388448499853, 0.9810135747654135, 0.8414046940486856, 0.252649147081716, -0.44822580183753064, -0.9159022382375784, -0.9690672970578027, -0.6390451336705433, -0.10324074641368002, 0.4292170574242703, 0.8094061726446607, 0.9837263751105298, 0.9782847848018178, 0.8599133508523288, 0.6999256919024505, 0.5535124793565069, 0.4546989718040998, 0.4201670368266409, 0.4546989718040998, 0.5535124793565069, 0.6999256919024505, 0.8599133508523288, 0.9782847848018178, 0.9837263751105298, 0.8094061726446607, 0.4292170574242703, -0.10324074641368002, -0.6390451336705433, -0.9690672970578027, -0.9159022382375784, -0.44822580183753064, 0.252649147081716, 0.8414046940486856, 0.9810135747654135, 0.5565388448499853, -0.2108600771143173, -0.8575975897333462, -0.9577345186201252, -0.42101420248427274, 0.40878600496256273, 0.9599849292731429, 0.8302999955979169], [0.5171216654477707, 0.9916552086207551, 0.7239439305723232, -0.07274873415833447, -0.8110635436155982, -0.9717790528591356, -0.46271600927183404, 0.3502527398419366, 0.9255541197058049, 0.9129452507276277, 0.3521027624179121, -0.399037586302389, -0.9159022382375784, -0.9528820890159757, -0.5403536357338068, 0.08735244321299503, 0.6502878401571168, 0.9596509227929731, 0.9702044875563652, 0.7513049894133318, 0.4201670368266409, 0.08264565346767089, -0.19578093930261975, -0.390197009595547, -0.5010191903189258, -0.5365729180004349, -0.5010191903189258, -0.390197009595547, -0.19578093930261975, 0.08264565346767089, 0.4201670368266409, 0.7513049894133318, 0.9702044875563652, 0.9596509227929731, 0.6502878401571168, 0.08735244321299503, -0.5403536357338068, -0.9528820890159757, -0.9159022382375784, -0.399037586302389, 0.3521027624179121, 0.9129452507276277, 0.9255541197058049, 0.3502527398419366, -0.46271600927183404, -0.9717790528591356, -0.8110635436155982, -0.07274873415833447, 0.7239439305723232, 0.9916552086207551], [0.8199555226173607, 0.9545112551957777, 0.3544785436780216, -0.5106954441094101, -0.9895644478503135, -0.7408102813303544, 0.036641970611123245, 0.7809125866717632, 0.9852623084849599, 0.5370464912494449, -0.2459315899387359, -0.8649557077942015, -0.9690672970578027, -0.5403536357338068, 0.1510338945637309, 0.7459063049687641, 0.9971509674428002, 0.8599133508523288, 0.4546989718040998, -0.03639848633421769, -0.4647255575123954, -0.7589315343767972, -0.9186368297074818, -0.9829793407063873, -0.9987608967574537, -0.9999902065507035, -0.9987608967574537, -0.9829793407063873, -0.9186368297074818, -0.7589315343767972, -0.4647255575123954, -0.03639848633421769, 0.4546989718040998, 0.8599133508523288, 0.9971509674428002, 0.7459063049687641, 0.1510338945637309, -0.5403536357338068, -0.9690672970578027, -0.8649557077942015, -0.2459315899387359, 0.5370464912494449, 0.9852623084849599, 0.7809125866717632, 0.036641970611123245, -0.7408102813303544, -0.9895644478503135, -0.5106954441094101, 0.3544785436780216, 0.9545112551957777], [0.9753959210713569, 0.7625584504796027, -0.052844195143546255, -0.8229869266810047, -0.9545833223822333, -0.36117831706278347, 0.49708668342823564, 0.9854307373467088, 0.7665984826660711, 0.018405303267344752, -0.7323723324376428, -0.997255180156715, -0.6390451336705433, 0.08735244321299503, 0.7459063049687641, 0.9999876561221204, 0.7753400962492819, 0.2375839859261567, -0.35210108504889737, -0.786095708473608, -0.9829793407063873, -0.9747394897226348, -0.8497593056327711, -0.6984726873116567, -0.5851764690934534, -0.5440211108893698, -0.5851764690934534, -0.6984726873116567, -0.8497593056327711, -0.9747394897226348, -0.9829793407063873, -0.786095708473608, -0.35210108504889737, 0.2375839859261567, 0.7753400962492819, 0.9999876561221204, 0.7459063049687641, 0.08735244321299503, -0.6390451336705433, -0.997255180156715, -0.7323723324376428, 0.018405303267344752, 0.7665984826660711, 0.9854307373467088, 0.49708668342823564, -0.36117831706278347, -0.9545833223822333, -0.8229869266810047, -0.052844195143546255, 0.7625584504796027], [0.9911848272864543, 0.4787847819991722, -0.42101420248427274, -0.9784905124788417, -0.7553386617118615, 0.0594013868715, 0.8233862126726764, 0.956586601484016, 0.37632652685444434, -0.4723862364856837, -0.9771688419778408, -0.8048090667832768, -0.10324074641368002, 0.6502878401571168, 0.9971509674428002, 0.7753400962492819, 0.16084964506716973, -0.5010191903189258, -0.9186368297074818, -0.9840363888387289, -0.7648781678542789, -0.41148230684214054, -0.06201520022829486, 0.2037957684966491, 0.36104927727853203, 0.4121184852417566, 0.36104927727853203, 0.2037957684966491, -0.06201520022829486, -0.41148230684214054, -0.7648781678542789, -0.9840363888387289, -0.9186368297074818, -0.5010191903189258, 0.16084964506716973, 0.7753400962492819, 0.9971509674428002, 0.6502878401571168, -0.10324074641368002, -0.8048090667832768, -0.9771688419778408, -0.4723862364856837, 0.37632652685444434, 0.956586601484016, 0.8233862126726764, 0.0594013868715, -0.7553386617118615, -0.9784905124788417, -0.42101420248427274, 0.4787847819991722], [0.8983805029159327, 0.16472584477074798, -0.7040964370475585, -0.9883875439237823, -0.46271600927183404, 0.4354061127346995, 0.9810135747654135, 0.7500645547914181, -0.06122338153363395, -0.8197716090940644, -0.9613974918795568, -0.4046099138586663, 0.4292170574242703, 0.9596509227929731, 0.8599133508523288, 0.2375839859261567, -0.5010191903189258, -0.949820680215173, -0.9339707316330099, -0.5440211108893698, -0.009203041372185148, 0.4622279808582701, 0.7712319401165738, 0.9240590869570797, 0.9783888223346213, 0.9893582466233818, 0.9783888223346213, 0.9240590869570797, 0.7712319401165738, 0.4622279808582701, -0.009203041372185148, -0.5440211108893698, -0.9339707316330099, -0.949820680215173, -0.5010191903189258, 0.2375839859261567, 0.8599133508523288, 0.9596509227929731, 0.4292170574242703, -0.4046099138586663, -0.9613974918795568, -0.8197716090940644, -0.06122338153363395, 0.7500645547914181, 0.9810135747654135, 0.4354061127346995, -0.46271600927183404, -0.9883875439237823, -0.7040964370475585, 0.16472584477074798], [0.7370998663151956, -0.13235175009777303, -0.887140035350667, -0.8892231315429847, -0.1442896235333068, 0.7184201511154031, 0.9852623084849599, 0.44721751781684405, -0.44822580183753064, -0.9828460722647567, -0.7479592241617414, 0.05545895688281034, 0.8094061726446607, 0.9702044875563652, 0.4546989718040998, -0.35210108504889737, -0.9186368297074818, -0.9339707316330099, -0.4570867375418006, 0.2037957684966491, 0.7328169085463447, 0.9783888223346213, 0.9717622535057333, 0.8398053526495963, 0.7088612918380416, 0.6569865987187891, 0.7088612918380416, 0.8398053526495963, 0.9717622535057333, 0.9783888223346213, 0.7328169085463447, 0.2037957684966491, -0.4570867375418006, -0.9339707316330099, -0.9186368297074818, -0.35210108504889737, 0.4546989718040998, 0.9702044875563652, 0.8094061726446607, 0.05545895688281034, -0.7479592241617414, -0.9828460722647567, -0.44822580183753064, 0.44721751781684405, 0.9852623084849599, 0.7184201511154031, -0.1442896235333068, -0.8892231315429847, -0.887140035350667, -0.13235175009777303], [0.5456621280611279, -0.3839842381511847, -0.9784905124788417, -0.7259123218586886, 0.15024779411670722, 0.8959366989404217, 0.8797342206140177, 0.12379166736845787, -0.7323723324376428, -0.9818619158392312, -0.43274114505056144, 0.4585981653620278, 0.9837263751105298, 0.7513049894133318, -0.03639848633421769, -0.786095708473608, -0.9840363888387289, -0.5440211108893698, 0.2037957684966491, 0.8072610908541349, 0.9990439103118804, 0.8003730606575937, 0.4123377500596421, 0.04135821352247398, -0.19908366251892284, -0.27941549819892586, -0.19908366251892284, 0.04135821352247398, 0.4123377500596421, 0.8003730606575937, 0.9990439103118804, 0.8072610908541349, 0.2037957684966491, -0.5440211108893698, -0.9840363888387289, -0.786095708473608, -0.03639848633421769, 0.7513049894133318, 0.9837263751105298, 0.4585981653620278, -0.43274114505056144, -0.9818619158392312, -0.7323723324376428, 0.12379166736845787, 0.8797342206140177, 0.8959366989404217, 0.15024779411670722, -0.7259123218586886, -0.9784905124788417, -0.3839842381511847], [0.3544785436780216, -0.5789496358185631, -0.9996939741393799, -0.5395308232720181, 0.393205596105676, 0.9810135747654135, 0.7154910816495544, -0.16722487140352646, -0.9042033484553401, -0.8699452785942385, -0.10324074641368002, 0.7459063049687641, 0.9782847848018178, 0.4201670368266409, -0.4647255575123954, -0.9829793407063873, -0.7648781678542789, -0.009203041372185148, 0.7328169085463447, 0.9990439103118804, 0.7088612918380416, 0.11965157649377203, -0.43697551727207756, -0.7820948988254615, -0.9261848392897116, -0.9589242746631385, -0.9261848392897116, -0.7820948988254615, -0.43697551727207756, 0.11965157649377203, 0.7088612918380416, 0.9990439103118804, 0.7328169085463447, -0.009203041372185148, -0.7648781678542789, -0.9829793407063873, -0.4647255575123954, 0.4201670368266409, 0.9782847848018178, 0.7459063049687641, -0.10324074641368002, -0.8699452785942385, -0.9042033484553401, -0.16722487140352646, 0.7154910816495544, 0.9810135747654135, 0.393205596105676, -0.5395308232720181, -0.9996939741393799, -0.5789496358185631], [0.1841790651713167, -0.7185332705339138, -0.9766101758528882, -0.36117831706278347, 0.5758065019122222, 0.9997053962201027, 0.5370464912494449, -0.399037586302389, -0.9828460722647567, -0.7064425466207848, 0.18275564204117561, 0.911839860974458, 0.8599133508523288, 0.08264565346767089, -0.7589315343767972, -0.9747394897226348, -0.41148230684214054, 0.4622279808582701, 0.9783888223346213, 0.8003730606575937, 0.11965157649377203, -0.586176193003373, -0.9589242746631385, -0.9712777989606532, -0.8313391791635062, -0.7568024953079282, -0.8313391791635062, -0.9712777989606532, -0.9589242746631385, -0.586176193003373, 0.11965157649377203, 0.8003730606575937, 0.9783888223346213, 0.4622279808582701, -0.41148230684214054, -0.9747394897226348, -0.7589315343767972, 0.08264565346767089, 0.8599133508523288, 0.911839860974458, 0.18275564204117561, -0.7064425466207848, -0.9828460722647567, -0.399037586302389, 0.5370464912494449, 0.9997053962201027, 0.5758065019122222, -0.36117831706278347, -0.9766101758528882, -0.7185332705339138], [0.04659851464007364, -0.8110635436155982, -0.9333656865281341, -0.2108600771143173, 0.7018171073220065, 0.9807356389159875, 0.37632652685444434, -0.565688817406875, -0.9998706698457897, -0.5403536357338068, 0.39943890886127764, 0.9837263751105298, 0.6999256919024505, -0.19578093930261975, -0.9186368297074818, -0.8497593056327711, -0.06201520022829486, 0.7712319401165738, 0.9717622535057333, 0.4123377500596421, -0.43697551727207756, -0.9589242746631385, -0.8916822544789358, -0.44749175223692067, -0.020683531529582487, 0.1411200080598672, -0.020683531529582487, -0.44749175223692067, -0.8916822544789358, -0.9589242746631385, -0.43697551727207756, 0.4123377500596421, 0.9717622535057333, 0.7712319401165738, -0.06201520022829486, -0.8497593056327711, -0.9186368297074818, -0.19578093930261975, 0.6999256919024505, 0.9837263751105298, 0.39943890886127764, -0.5403536357338068, -0.9998706698457897, -0.565688817406875, 0.37632652685444434, 0.9807356389159875, 0.7018171073220065, -0.2108600771143173, -0.9333656865281341, -0.8110635436155982], [-0.052844195143546255, -0.8672002621460978, -0.8892231315429847, -0.09940899775107966, 0.7809125866717632, 0.9490461902387302, 0.252649147081716, -0.6733906518850356, -0.9869844897640472, -0.4046099138586663, 0.5440171490365727, 0.9999876561221204, 0.5535124793565069, -0.390197009595547, -0.9829793407063873, -0.6984726873116567, 0.2037957684966491, 0.9240590869570797, 0.8398053526495963, 0.04135821352247398, -0.7820948988254615, -0.9712777989606532, -0.44749175223692067, 0.30807174236304485, 0.786749131547214, 0.9092974268256817, 0.786749131547214, 0.30807174236304485, -0.44749175223692067, -0.9712777989606532, -0.7820948988254615, 0.04135821352247398, 0.8398053526495963, 0.9240590869570797, 0.2037957684966491, -0.6984726873116567, -0.9829793407063873, -0.390197009595547, 0.5535124793565069, 0.9999876561221204, 0.5440171490365727, -0.4046099138586663, -0.9869844897640472, -0.6733906518850356, 0.252649147081716, 0.9490461902387302, 0.7809125866717632, -0.09940899775107966, -0.8892231315429847, -0.8672002621460978], [-0.11251048882501428, -0.8965494243902328, -0.8575975897333462, -0.031561728068998866, 0.8233862126726764, 0.9228549487508323, 0.17582294024532347, -0.7323723324376428, -0.9690672970578027, -0.31765585797787305, 0.6246372204389422, 0.99485348900195, 0.4546989718040998, -0.5010191903189258, -0.9987608967574537, -0.5851764690934534, 0.36104927727853203, 0.9783888223346213, 0.7088612918380416, -0.19908366251892284, -0.9261848392897116, -0.8313391791635062, -0.020683531529582487, 0.786749131547214, 0.9877659459927356, 0.8414709848078965, 0.9877659459927356, 0.786749131547214, -0.020683531529582487, -0.8313391791635062, -0.9261848392897116, -0.19908366251892284, 0.7088612918380416, 0.9783888223346213, 0.36104927727853203, -0.5851764690934534, -0.9987608967574537, -0.5010191903189258, 0.4546989718040998, 0.99485348900195, 0.6246372204389422, -0.31765585797787305, -0.9690672970578027, -0.7323723324376428, 0.17582294024532347, 0.9228549487508323, 0.8233862126726764, -0.031561728068998866, -0.8575975897333462, -0.8965494243902328], [-0.13235175009777303, -0.9055783620066239, -0.8462204041751706, -0.008851309290403876, 0.8366556385360561, 0.9129452507276277, 0.14987720966295234, -0.750987246771676, -0.9613974918795568, -0.2879033166650653, 0.6502878401571168, 0.9906073556948704, 0.4201670368266409, -0.5365729180004349, -0.9999902065507035, -0.5440211108893698, 0.4121184852417566, 0.9893582466233818, 0.6569865987187891, -0.27941549819892586, -0.9589242746631385, -0.7568024953079282, 0.1411200080598672, 0.9092974268256817, 0.8414709848078965, 0.0, 0.8414709848078965, 0.9092974268256817, 0.1411200080598672, -0.7568024953079282, -0.9589242746631385, -0.27941549819892586, 0.6569865987187891, 0.9893582466233818, 0.4121184852417566, -0.5440211108893698, -0.9999902065507035, -0.5365729180004349, 0.4201670368266409, 0.9906073556948704, 0.6502878401571168, -0.2879033166650653, -0.9613974918795568, -0.750987246771676, 0.14987720966295234, 0.9129452507276277, 0.8366556385360561, -0.008851309290403876, -0.8462204041751706, -0.9055783620066239], [-0.11251048882501428, -0.8965494243902328, -0.8575975897333462, -0.031561728068998866, 0.8233862126726764, 0.9228549487508323, 0.17582294024532347, -0.7323723324376428, -0.9690672970578027, -0.31765585797787305, 0.6246372204389422, 0.99485348900195, 0.4546989718040998, -0.5010191903189258, -0.9987608967574537, -0.5851764690934534, 0.36104927727853203, 0.9783888223346213, 0.7088612918380416, -0.19908366251892284, -0.9261848392897116, -0.8313391791635062, -0.020683531529582487, 0.786749131547214, 0.9877659459927356, 0.8414709848078965, 0.9877659459927356, 0.786749131547214, -0.020683531529582487, -0.8313391791635062, -0.9261848392897116, -0.19908366251892284, 0.7088612918380416, 0.9783888223346213, 0.36104927727853203, -0.5851764690934534, -0.9987608967574537, -0.5010191903189258, 0.4546989718040998, 0.99485348900195, 0.6246372204389422, -0.31765585797787305, -0.9690672970578027, -0.7323723324376428, 0.17582294024532347, 0.9228549487508323, 0.8233862126726764, -0.031561728068998866, -0.8575975897333462, -0.8965494243902328], [-0.052844195143546255, -0.8672002621460978, -0.8892231315429847, -0.09940899775107966, 0.7809125866717632, 0.9490461902387302, 0.252649147081716, -0.6733906518850356, -0.9869844897640472, -0.4046099138586663, 0.5440171490365727, 0.9999876561221204, 0.5535124793565069, -0.390197009595547, -0.9829793407063873, -0.6984726873116567, 0.2037957684966491, 0.9240590869570797, 0.8398053526495963, 0.04135821352247398, -0.7820948988254615, -0.9712777989606532, -0.44749175223692067, 0.30807174236304485, 0.786749131547214, 0.9092974268256817, 0.786749131547214, 0.30807174236304485, -0.44749175223692067, -0.9712777989606532, -0.7820948988254615, 0.04135821352247398, 0.8398053526495963, 0.9240590869570797, 0.2037957684966491, -0.6984726873116567, -0.9829793407063873, -0.390197009595547, 0.5535124793565069, 0.9999876561221204, 0.5440171490365727, -0.4046099138586663, -0.9869844897640472, -0.6733906518850356, 0.252649147081716, 0.9490461902387302, 0.7809125866717632, -0.09940899775107966, -0.8892231315429847, -0.8672002621460978], [0.04659851464007364, -0.8110635436155982, -0.9333656865281341, -0.2108600771143173, 0.7018171073220065, 0.9807356389159875, 0.37632652685444434, -0.565688817406875, -0.9998706698457897, -0.5403536357338068, 0.39943890886127764, 0.9837263751105298, 0.6999256919024505, -0.19578093930261975, -0.9186368297074818, -0.8497593056327711, -0.06201520022829486, 0.7712319401165738, 0.9717622535057333, 0.4123377500596421, -0.43697551727207756, -0.9589242746631385, -0.8916822544789358, -0.44749175223692067, -0.020683531529582487, 0.1411200080598672, -0.020683531529582487, -0.44749175223692067, -0.8916822544789358, -0.9589242746631385, -0.43697551727207756, 0.4123377500596421, 0.9717622535057333, 0.7712319401165738, -0.06201520022829486, -0.8497593056327711, -0.9186368297074818, -0.19578093930261975, 0.6999256919024505, 0.9837263751105298, 0.39943890886127764, -0.5403536357338068, -0.9998706698457897, -0.565688817406875, 0.37632652685444434, 0.9807356389159875, 0.7018171073220065, -0.2108600771143173, -0.9333656865281341, -0.8110635436155982], [0.1841790651713167, -0.7185332705339138, -0.9766101758528882, -0.36117831706278347, 0.5758065019122222, 0.9997053962201027, 0.5370464912494449, -0.399037586302389, -0.9828460722647567, -0.7064425466207848, 0.18275564204117561, 0.911839860974458, 0.8599133508523288, 0.08264565346767089, -0.7589315343767972, -0.9747394897226348, -0.41148230684214054, 0.4622279808582701, 0.9783888223346213, 0.8003730606575937, 0.11965157649377203, -0.586176193003373, -0.9589242746631385, -0.9712777989606532, -0.8313391791635062, -0.7568024953079282, -0.8313391791635062, -0.9712777989606532, -0.9589242746631385, -0.586176193003373, 0.11965157649377203, 0.8003730606575937, 0.9783888223346213, 0.4622279808582701, -0.41148230684214054, -0.9747394897226348, -0.7589315343767972, 0.08264565346767089, 0.8599133508523288, 0.911839860974458, 0.18275564204117561, -0.7064425466207848, -0.9828460722647567, -0.399037586302389, 0.5370464912494449, 0.9997053962201027, 0.5758065019122222, -0.36117831706278347, -0.9766101758528882, -0.7185332705339138], [0.3544785436780216, -0.5789496358185631, -0.9996939741393799, -0.5395308232720181, 0.393205596105676, 0.9810135747654135, 0.7154910816495544, -0.16722487140352646, -0.9042033484553401, -0.8699452785942385, -0.10324074641368002, 0.7459063049687641, 0.9782847848018178, 0.4201670368266409, -0.4647255575123954, -0.9829793407063873, -0.7648781678542789, -0.009203041372185148, 0.7328169085463447, 0.9990439103118804, 0.7088612918380416, 0.11965157649377203, -0.43697551727207756, -0.7820948988254615, -0.9261848392897116, -0.9589242746631385, -0.9261848392897116, -0.7820948988254615, -0.43697551727207756, 0.11965157649377203, 0.7088612918380416, 0.9990439103118804, 0.7328169085463447, -0.009203041372185148, -0.7648781678542789, -0.9829793407063873, -0.4647255575123954, 0.4201670368266409, 0.9782847848018178, 0.7459063049687641, -0.10324074641368002, -0.8699452785942385, -0.9042033484553401, -0.16722487140352646, 0.7154910816495544, 0.9810135747654135, 0.393205596105676, -0.5395308232720181, -0.9996939741393799, -0.5789496358185631], [0.5456621280611279, -0.3839842381511847, -0.9784905124788417, -0.7259123218586886, 0.15024779411670722, 0.8959366989404217, 0.8797342206140177, 0.12379166736845787, -0.7323723324376428, -0.9818619158392312, -0.43274114505056144, 0.4585981653620278, 0.9837263751105298, 0.7513049894133318, -0.03639848633421769, -0.786095708473608, -0.9840363888387289, -0.5440211108893698, 0.2037957684966491, 0.8072610908541349, 0.9990439103118804, 0.8003730606575937, 0.4123377500596421, 0.04135821352247398, -0.19908366251892284, -0.27941549819892586, -0.19908366251892284, 0.04135821352247398, 0.4123377500596421, 0.8003730606575937, 0.9990439103118804, 0.8072610908541349, 0.2037957684966491, -0.5440211108893698, -0.9840363888387289, -0.786095708473608, -0.03639848633421769, 0.7513049894133318, 0.9837263751105298, 0.4585981653620278, -0.43274114505056144, -0.9818619158392312, -0.7323723324376428, 0.12379166736845787, 0.8797342206140177, 0.8959366989404217, 0.15024779411670722, -0.7259123218586886, -0.9784905124788417, -0.3839842381511847], [0.7370998663151956, -0.13235175009777303, -0.887140035350667, -0.8892231315429847, -0.1442896235333068, 0.7184201511154031, 0.9852623084849599, 0.44721751781684405, -0.44822580183753064, -0.9828460722647567, -0.7479592241617414, 0.05545895688281034, 0.8094061726446607, 0.9702044875563652, 0.4546989718040998, -0.35210108504889737, -0.9186368297074818, -0.9339707316330099, -0.4570867375418006, 0.2037957684966491, 0.7328169085463447, 0.9783888223346213, 0.9717622535057333, 0.8398053526495963, 0.7088612918380416, 0.6569865987187891, 0.7088612918380416, 0.8398053526495963, 0.9717622535057333, 0.9783888223346213, 0.7328169085463447, 0.2037957684966491, -0.4570867375418006, -0.9339707316330099, -0.9186368297074818, -0.35210108504889737, 0.4546989718040998, 0.9702044875563652, 0.8094061726446607, 0.05545895688281034, -0.7479592241617414, -0.9828460722647567, -0.44822580183753064, 0.44721751781684405, 0.9852623084849599, 0.7184201511154031, -0.1442896235333068, -0.8892231315429847, -0.887140035350667, -0.13235175009777303], [0.8983805029159327, 0.16472584477074798, -0.7040964370475585, -0.9883875439237823, -0.46271600927183404, 0.4354061127346995, 0.9810135747654135, 0.7500645547914181, -0.06122338153363395, -0.8197716090940644, -0.9613974918795568, -0.4046099138586663, 0.4292170574242703, 0.9596509227929731, 0.8599133508523288, 0.2375839859261567, -0.5010191903189258, -0.949820680215173, -0.9339707316330099, -0.5440211108893698, -0.009203041372185148, 0.4622279808582701, 0.7712319401165738, 0.9240590869570797, 0.9783888223346213, 0.9893582466233818, 0.9783888223346213, 0.9240590869570797, 0.7712319401165738, 0.4622279808582701, -0.009203041372185148, -0.5440211108893698, -0.9339707316330099, -0.949820680215173, -0.5010191903189258, 0.2375839859261567, 0.8599133508523288, 0.9596509227929731, 0.4292170574242703, -0.4046099138586663, -0.9613974918795568, -0.8197716090940644, -0.06122338153363395, 0.7500645547914181, 0.9810135747654135, 0.4354061127346995, -0.46271600927183404, -0.9883875439237823, -0.7040964370475585, 0.16472584477074798], [0.9911848272864543, 0.4787847819991722, -0.42101420248427274, -0.9784905124788417, -0.7553386617118615, 0.0594013868715, 0.8233862126726764, 0.956586601484016, 0.37632652685444434, -0.4723862364856837, -0.9771688419778408, -0.8048090667832768, -0.10324074641368002, 0.6502878401571168, 0.9971509674428002, 0.7753400962492819, 0.16084964506716973, -0.5010191903189258, -0.9186368297074818, -0.9840363888387289, -0.7648781678542789, -0.41148230684214054, -0.06201520022829486, 0.2037957684966491, 0.36104927727853203, 0.4121184852417566, 0.36104927727853203, 0.2037957684966491, -0.06201520022829486, -0.41148230684214054, -0.7648781678542789, -0.9840363888387289, -0.9186368297074818, -0.5010191903189258, 0.16084964506716973, 0.7753400962492819, 0.9971509674428002, 0.6502878401571168, -0.10324074641368002, -0.8048090667832768, -0.9771688419778408, -0.4723862364856837, 0.37632652685444434, 0.956586601484016, 0.8233862126726764, 0.0594013868715, -0.7553386617118615, -0.9784905124788417, -0.42101420248427274, 0.4787847819991722], [0.9753959210713569, 0.7625584504796027, -0.052844195143546255, -0.8229869266810047, -0.9545833223822333, -0.36117831706278347, 0.49708668342823564, 0.9854307373467088, 0.7665984826660711, 0.018405303267344752, -0.7323723324376428, -0.997255180156715, -0.6390451336705433, 0.08735244321299503, 0.7459063049687641, 0.9999876561221204, 0.7753400962492819, 0.2375839859261567, -0.35210108504889737, -0.786095708473608, -0.9829793407063873, -0.9747394897226348, -0.8497593056327711, -0.6984726873116567, -0.5851764690934534, -0.5440211108893698, -0.5851764690934534, -0.6984726873116567, -0.8497593056327711, -0.9747394897226348, -0.9829793407063873, -0.786095708473608, -0.35210108504889737, 0.2375839859261567, 0.7753400962492819, 0.9999876561221204, 0.7459063049687641, 0.08735244321299503, -0.6390451336705433, -0.997255180156715, -0.7323723324376428, 0.018405303267344752, 0.7665984826660711, 0.9854307373467088, 0.49708668342823564, -0.36117831706278347, -0.9545833223822333, -0.8229869266810047, -0.052844195143546255, 0.7625584504796027], [0.8199555226173607, 0.9545112551957777, 0.3544785436780216, -0.5106954441094101, -0.9895644478503135, -0.7408102813303544, 0.036641970611123245, 0.7809125866717632, 0.9852623084849599, 0.5370464912494449, -0.2459315899387359, -0.8649557077942015, -0.9690672970578027, -0.5403536357338068, 0.1510338945637309, 0.7459063049687641, 0.9971509674428002, 0.8599133508523288, 0.4546989718040998, -0.03639848633421769, -0.4647255575123954, -0.7589315343767972, -0.9186368297074818, -0.9829793407063873, -0.9987608967574537, -0.9999902065507035, -0.9987608967574537, -0.9829793407063873, -0.9186368297074818, -0.7589315343767972, -0.4647255575123954, -0.03639848633421769, 0.4546989718040998, 0.8599133508523288, 0.9971509674428002, 0.7459063049687641, 0.1510338945637309, -0.5403536357338068, -0.9690672970578027, -0.8649557077942015, -0.2459315899387359, 0.5370464912494449, 0.9852623084849599, 0.7809125866717632, 0.036641970611123245, -0.7408102813303544, -0.9895644478503135, -0.5106954441094101, 0.3544785436780216, 0.9545112551957777], [0.5171216654477707, 0.9916552086207551, 0.7239439305723232, -0.07274873415833447, -0.8110635436155982, -0.9717790528591356, -0.46271600927183404, 0.3502527398419366, 0.9255541197058049, 0.9129452507276277, 0.3521027624179121, -0.399037586302389, -0.9159022382375784, -0.9528820890159757, -0.5403536357338068, 0.08735244321299503, 0.6502878401571168, 0.9596509227929731, 0.9702044875563652, 0.7513049894133318, 0.4201670368266409, 0.08264565346767089, -0.19578093930261975, -0.390197009595547, -0.5010191903189258, -0.5365729180004349, -0.5010191903189258, -0.390197009595547, -0.19578093930261975, 0.08264565346767089, 0.4201670368266409, 0.7513049894133318, 0.9702044875563652, 0.9596509227929731, 0.6502878401571168, 0.08735244321299503, -0.5403536357338068, -0.9528820890159757, -0.9159022382375784, -0.399037586302389, 0.3521027624179121, 0.9129452507276277, 0.9255541197058049, 0.3502527398419366, -0.46271600927183404, -0.9717790528591356, -0.8110635436155982, -0.07274873415833447, 0.7239439305723232, 0.9916552086207551], [0.0961793703293298, 0.8302999955979169, 0.9599849292731429, 0.40878600496256273, -0.42101420248427274, -0.9577345186201252, -0.8575975897333462, -0.2108600771143173, 0.5565388448499853, 0.9810135747654135, 0.8414046940486856, 0.252649147081716, -0.44822580183753064, -0.9159022382375784, -0.9690672970578027, -0.6390451336705433, -0.10324074641368002, 0.4292170574242703, 0.8094061726446607, 0.9837263751105298, 0.9782847848018178, 0.8599133508523288, 0.6999256919024505, 0.5535124793565069, 0.4546989718040998, 0.4201670368266409, 0.4546989718040998, 0.5535124793565069, 0.6999256919024505, 0.8599133508523288, 0.9782847848018178, 0.9837263751105298, 0.8094061726446607, 0.4292170574242703, -0.10324074641368002, -0.6390451336705433, -0.9690672970578027, -0.9159022382375784, -0.44822580183753064, 0.252649147081716, 0.8414046940486856, 0.9810135747654135, 0.5565388448499853, -0.2108600771143173, -0.8575975897333462, -0.9577345186201252, -0.42101420248427274, 0.40878600496256273, 0.9599849292731429, 0.8302999955979169], [-0.36977206094538123, 0.4701369183201865, 0.9753959210713569, 0.8099508994563396, 0.10591864700171519, -0.6591064566557293, -0.9992433916004055, -0.7259123218586886, -0.031561728068998866, 0.6675079670136292, 0.9952084655965423, 0.8130861137605422, 0.252649147081716, -0.399037586302389, -0.8649557077942015, -0.997255180156715, -0.8048090667832768, -0.4046099138586663, 0.05545895688281034, 0.4585981653620278, 0.7459063049687641, 0.911839860974458, 0.9837263751105298, 0.9999876561221204, 0.99485348900195, 0.9906073556948704, 0.99485348900195, 0.9999876561221204, 0.9837263751105298, 0.911839860974458, 0.7459063049687641, 0.4585981653620278, 0.05545895688281034, -0.4046099138586663, -0.8048090667832768, -0.997255180156715, -0.8649557077942015, -0.399037586302389, 0.252649147081716, 0.8130861137605422, 0.9952084655965423, 0.6675079670136292, -0.031561728068998866, -0.7259123218586886, -0.9992433916004055, -0.6591064566557293, 0.10591864700171519, 0.8099508994563396, 0.9753959210713569, 0.4701369183201865], [-0.7710099754671497, -0.02760600627447501, 0.727913119918548, 0.9970765516272863, 0.6242995590883633, -0.13235175009777303, -0.7988038975130448, -0.9914061586009497, -0.6291191778335704, 0.0594013868715, 0.7018171073220065, 0.9952084655965423, 0.8414046940486856, 0.3521027624179121, -0.2459315899387359, -0.7323723324376428, -0.9771688419778408, -0.9613974918795568, -0.7479592241617414, -0.43274114505056144, -0.10324074641368002, 0.18275564204117561, 0.39943890886127764, 0.5440171490365727, 0.6246372204389422, 0.6502878401571168, 0.6246372204389422, 0.5440171490365727, 0.39943890886127764, 0.18275564204117561, -0.10324074641368002, -0.43274114505056144, -0.7479592241617414, -0.9613974918795568, -0.9771688419778408, -0.7323723324376428, -0.2459315899387359, 0.3521027624179121, 0.8414046940486856, 0.9952084655965423, 0.7018171073220065, 0.0594013868715, -0.6291191778335704, -0.9914061586009497, -0.7988038975130448, -0.13235175009777303, 0.6242995590883633, 0.9970765516272863, 0.727913119918548, -0.02760600627447501], [-0.9866658946445946, -0.5396963022265032, 0.2536796241035926, 0.8778684012984409, 0.9545112551957777, 0.4615624875447749, -0.28907125514443305, -0.8672002621460978, -0.9766101758528882, -0.5941982082298611, 0.0594013868715, 0.6675079670136292, 0.9810135747654135, 0.9129452507276277, 0.5370464912494449, 0.018405303267344752, -0.4723862364856837, -0.8197716090940644, -0.9828460722647567, -0.9818619158392312, -0.8699452785942385, -0.7064425466207848, -0.5403536357338068, -0.4046099138586663, -0.31765585797787305, -0.2879033166650653, -0.31765585797787305, -0.4046099138586663, -0.5403536357338068, -0.7064425466207848, -0.8699452785942385, -0.9818619158392312, -0.9828460722647567, -0.8197716090940644, -0.4723862364856837, 0.018405303267344752, 0.5370464912494449, 0.9129452507276277, 0.9810135747654135, 0.6675079670136292, 0.0594013868715, -0.5941982082298611, -0.9766101758528882, -0.8672002621460978, -0.28907125514443305, 0.4615624875447749, 0.9545112551957777, 0.8778684012984409, 0.2536796241035926, -0.5396963022265032], [-0.9259311737964365, -0.9071867414201306, -0.320602419432942, 0.45418422532509545, 0.9508042427723833, 0.8983805029159327, 0.3544785436780216, -0.36525286620192765, -0.887140035350667, -0.9766101758528882, -0.6291191778335704, -0.031561728068998866, 0.5565388448499853, 0.9255541197058049, 0.9852623084849599, 0.7665984826660711, 0.37632652685444434, -0.06122338153363395, -0.44822580183753064, -0.7323723324376428, -0.9042033484553401, -0.9828460722647567, -0.9998706698457897, -0.9869844897640472, -0.9690672970578027, -0.9613974918795568, -0.9690672970578027, -0.9869844897640472, -0.9998706698457897, -0.9828460722647567, -0.9042033484553401, -0.7323723324376428, -0.44822580183753064, -0.06122338153363395, 0.37632652685444434, 0.7665984826660711, 0.9852623084849599, 0.9255541197058049, 0.5565388448499853, -0.031561728068998866, -0.6291191778335704, -0.9766101758528882, -0.887140035350667, -0.36525286620192765, 0.3544785436780216, 0.8983805029159327, 0.9508042427723833, 0.45418422532509545, -0.320602419432942, -0.9071867414201306], [-0.5729354351462002, -0.9880316240928618, -0.8027125451584881, -0.15043367466348193, 0.577530538995622, 0.9793226624873786, 0.8622844455154678, 0.31751041845612377, -0.36525286620192765, -0.8672002621460978, -0.9914061586009497, -0.7259123218586886, -0.2108600771143173, 0.3502527398419366, 0.7809125866717632, 0.9854307373467088, 0.956586601484016, 0.7500645547914181, 0.44721751781684405, 0.12379166736845787, -0.16722487140352646, -0.399037586302389, -0.565688817406875, -0.6733906518850356, -0.7323723324376428, -0.750987246771676, -0.7323723324376428, -0.6733906518850356, -0.565688817406875, -0.399037586302389, -0.16722487140352646, 0.12379166736845787, 0.44721751781684405, 0.7500645547914181, 0.956586601484016, 0.9854307373467088, 0.7809125866717632, 0.3502527398419366, -0.2108600771143173, -0.7259123218586886, -0.9914061586009497, -0.8672002621460978, -0.36525286620192765, 0.31751041845612377, 0.8622844455154678, 0.9793226624873786, 0.577530538995622, -0.15043367466348193, -0.8027125451584881, -0.9880316240928618], [-0.01528900397670874, -0.7211568839360558, -0.9999248173626606, -0.7135482820487202, -0.045255173119998, 0.6350748642631946, 0.9861675309117627, 0.8622844455154678, 0.3544785436780216, -0.28907125514443305, -0.7988038975130448, -0.9992433916004055, -0.8575975897333462, -0.46271600927183404, 0.036641970611123245, 0.49708668342823564, 0.8233862126726764, 0.9810135747654135, 0.9852623084849599, 0.8797342206140177, 0.7154910816495544, 0.5370464912494449, 0.37632652685444434, 0.252649147081716, 0.17582294024532347, 0.14987720966295234, 0.17582294024532347, 0.252649147081716, 0.37632652685444434, 0.5370464912494449, 0.7154910816495544, 0.8797342206140177, 0.9852623084849599, 0.9810135747654135, 0.8233862126726764, 0.49708668342823564, 0.036641970611123245, -0.46271600927183404, -0.8575975897333462, -0.9992433916004055, -0.7988038975130448, -0.28907125514443305, 0.3544785436780216, 0.8622844455154678, 0.9861675309117627, 0.6350748642631946, -0.045255173119998, -0.7135482820487202, -0.9999248173626606, -0.7211568839360558], [0.5643904318910452, -0.17403707166257712, -0.8054445870804156, -0.9936231122371427, -0.6636338842129675, -0.009937201600071412, 0.6350748642631946, 0.9793226624873786, 0.8983805029159327, 0.4615624875447749, -0.13235175009777303, -0.6591064566557293, -0.9577345186201252, -0.9717790528591356, -0.7408102813303544, -0.36117831706278347, 0.0594013868715, 0.4354061127346995, 0.7184201511154031, 0.8959366989404217, 0.9810135747654135, 0.9997053962201027, 0.9807356389159875, 0.9490461902387302, 0.9228549487508323, 0.9129452507276277, 0.9228549487508323, 0.9490461902387302, 0.9807356389159875, 0.9997053962201027, 0.9810135747654135, 0.8959366989404217, 0.7184201511154031, 0.4354061127346995, 0.0594013868715, -0.36117831706278347, -0.7408102813303544, -0.9717790528591356, -0.9577345186201252, -0.6591064566557293, -0.13235175009777303, 0.4615624875447749, 0.8983805029159327, 0.9793226624873786, 0.6350748642631946, -0.009937201600071412, -0.6636338842129675, -0.9936231122371427, -0.8054445870804156, -0.17403707166257712], [0.9437285851822178, 0.45690344147541284, -0.2677948252231252, -0.8426112405177267, -0.9892668187780492, -0.6636338842129675, -0.045255173119998, 0.577530538995622, 0.9508042427723833, 0.9545112551957777, 0.6242995590883633, 0.10591864700171519, -0.42101420248427274, -0.8110635436155982, -0.9895644478503135, -0.9545833223822333, -0.7553386617118615, -0.46271600927183404, -0.1442896235333068, 0.15024779411670722, 0.393205596105676, 0.5758065019122222, 0.7018171073220065, 0.7809125866717632, 0.8233862126726764, 0.8366556385360561, 0.8233862126726764, 0.7809125866717632, 0.7018171073220065, 0.5758065019122222, 0.393205596105676, 0.15024779411670722, -0.1442896235333068, -0.46271600927183404, -0.7553386617118615, -0.9545833223822333, -0.9895644478503135, -0.8110635436155982, -0.42101420248427274, 0.10591864700171519, 0.6242995590883633, 0.9545112551957777, 0.9508042427723833, 0.577530538995622, -0.045255173119998, -0.6636338842129675, -0.9892668187780492, -0.8426112405177267, -0.2677948252231252, 0.45690344147541284], [0.9508184515435334, 0.909348191100782, 0.4001993726403515, -0.2986026440580049, -0.8426112405177267, -0.9936231122371427, -0.7135482820487202, -0.15043367466348193, 0.45418422532509545, 0.8778684012984409, 0.9970765516272863, 0.8099508994563396, 0.40878600496256273, -0.07274873415833447, -0.5106954441094101, -0.8229869266810047, -0.9784905124788417, -0.9883875439237823, -0.8892231315429847, -0.7259123218586886, -0.5395308232720181, -0.36117831706278347, -0.2108600771143173, -0.09940899775107966, -0.031561728068998866, -0.008851309290403876, -0.031561728068998866, -0.09940899775107966, -0.2108600771143173, -0.36117831706278347, -0.5395308232720181, -0.7259123218586886, -0.8892231315429847, -0.9883875439237823, -0.9784905124788417, -0.8229869266810047, -0.5106954441094101, -0.07274873415833447, 0.40878600496256273, 0.8099508994563396, 0.9970765516272863, 0.8778684012984409, 0.45418422532509545, -0.15043367466348193, -0.7135482820487202, -0.9936231122371427, -0.8426112405177267, -0.2986026440580049, 0.4001993726403515, 0.909348191100782], [0.553818813206015, 0.9677093359135412, 0.8961364196158191, 0.4001993726403515, -0.2677948252231252, -0.8054445870804156, -0.9999248173626606, -0.8027125451584881, -0.320602419432942, 0.2536796241035926, 0.727913119918548, 0.9753959210713569, 0.9599849292731429, 0.7239439305723232, 0.3544785436780216, -0.052844195143546255, -0.42101420248427274, -0.7040964370475585, -0.887140035350667, -0.9784905124788417, -0.9996939741393799, -0.9766101758528882, -0.9333656865281341, -0.8892231315429847, -0.8575975897333462, -0.8462204041751706, -0.8575975897333462, -0.8892231315429847, -0.9333656865281341, -0.9766101758528882, -0.9996939741393799, -0.9784905124788417, -0.887140035350667, -0.7040964370475585, -0.42101420248427274, -0.052844195143546255, 0.3544785436780216, 0.7239439305723232, 0.9599849292731429, 0.9753959210713569, 0.727913119918548, 0.2536796241035926, -0.320602419432942, -0.8027125451584881, -0.9999248173626606, -0.8054445870804156, -0.2677948252231252, 0.4001993726403515, 0.8961364196158191, 0.9677093359135412], [-0.09777126940501375, 0.5780962926354162, 0.9677093359135412, 0.909348191100782, 0.45690344147541284, -0.17403707166257712, -0.7211568839360558, -0.9880316240928618, -0.9071867414201306, -0.5396963022265032, -0.02760600627447501, 0.4701369183201865, 0.8302999955979169, 0.9916552086207551, 0.9545112551957777, 0.7625584504796027, 0.4787847819991722, 0.16472584477074798, -0.13235175009777303, -0.3839842381511847, -0.5789496358185631, -0.7185332705339138, -0.8110635436155982, -0.8672002621460978, -0.8965494243902328, -0.9055783620066239, -0.8965494243902328, -0.8672002621460978, -0.8110635436155982, -0.7185332705339138, -0.5789496358185631, -0.3839842381511847, -0.13235175009777303, 0.16472584477074798, 0.4787847819991722, 0.7625584504796027, 0.9545112551957777, 0.9916552086207551, 0.8302999955979169, 0.4701369183201865, -0.02760600627447501, -0.5396963022265032, -0.9071867414201306, -0.9880316240928618, -0.7211568839360558, -0.17403707166257712, 0.45690344147541284, 0.909348191100782, 0.9677093359135412, 0.5780962926354162]], size = [100, 100]);\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/07-libs.scad",
    "content": "use <../../../../../.local/share/OpenSCAD/libraries/BOSL/metric_screws.scad>;\n\n\n\n\n\nmetric_bolt(headtype = \"hex\", l = 20, size = 6);\n"
  },
  {
    "path": "tests/examples_scad/08-extensions.scad",
    "content": "//the root tree contains 2 non sense comment(s)\n\nunion() {\n\t//non sense comment\n\tcolor(c = \"red\") {\n\t\ttranslate(v = [0, 0, 1]) {\n\t\t\ttranslate(v = [-1, 0, 0]) {\n\t\t\t\tcube(size = 10);\n\t\t\t}\n\t\t}\n\t}\n\t//non sense comment\n\tcolor(c = \"red\") {\n\t\ttranslate(v = [0, 0, 3]) {\n\t\t\ttranslate(v = [-3, 0, 0]) {\n\t\t\t\tcube(size = 5);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/09-code-attach-extension.scad",
    "content": "cube(size = 10);\n/* Generated from the following ExpSolid code:\n\n#! /usr/bin/env python\n\nfrom pathlib import Path\n\nfrom solid2 import cube, register_post_render\n\n# =============\n# = Extension =\n# =============\n# This is more or less the same as -- regular -- SolidPython does when it\n# writes a scad file. It appends the python source to the end of the *.scad\n# file.\n#\n# If you like this, you can simply import this extension that should do it.\n#\n# register the post_render extension using the decorator. This hooks it into\n# the \"_render\" routine. It will be called after the root gets rendered. It's\n# return string will be appended to the rendered string.\n@register_post_render\ndef attach_code_post_render(_):\n    #find the \"root\" file\n    calling_file = None\n\n    import __main__\n    # not called from a terminal?\n    if hasattr(__main__, \"__file__\"):\n        # extract filename and replace suffix\n        calling_file = Path(__main__.__file__).absolute()\n    else:\n        return '' # no code available. Called from withing a python shell\n\n    assert(calling_file.exists())\n\n    # read source file\n    with calling_file.open(\"r\") as f:\n        code_str = f.read()\n\n        # escape /_* and *_/ because otherwise it would end this comment block which\n        # we use to inject the solid code\n        code_str = code_str.replace(\"/_*\", \"/_*\")\n        code_str = code_str.replace(\"*_/\", \"*_/\")\n\n        # return the string to be appended to the *.scad file\n        return f'/_* Generated from the following ExpSolid code:\\n\\n' +\\\n               f'{code_str}*_/'\n\n# =============\n\nif __name__ == \"__main__\":\n    c = cube(10)\n    c.save_as_scad()\n\n*/\n"
  },
  {
    "path": "tests/examples_scad/10-customizer.scad",
    "content": "objects = 4; //[2, 4, 6]\nside = 4; //[]\ncube_pos = [5, 5, 5]; //[]\ncube_size = 5; //[]\ntext = \"customize me!\"; //[customize me!, Thank you!]\n\nunion() {\n\n\tfor (i = [1:objects]){\n\t    translate([2*i*side,0,0]){\n\t        cube(side);\n\t    }\n\t}\n\ttranslate(v = cube_pos) {\n\t\tcube(size = (cube_size * 2));\n\t}\n\ttranslate(v = [0, -20, 0]) {\n\t\ttext(text = \"text\");\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/11-fonts.scad",
    "content": "use <../../11-font/RichEatin.otf>\n>;\n\n$vpt = [700, 900, 200];\n\ntext(font = \"Rich Eatin'\", text = \"blablub\");\n"
  },
  {
    "path": "tests/examples_scad/12-animation.scad",
    "content": "rotation_speed = 1.0; //[]\n$vpt = [4, 3, 15];\n$vpr = [60, 0, ((rotation_speed * $t) * 360)];\n$vpd = 100;\n\ncube(size = ($t * 10));\n"
  },
  {
    "path": "tests/examples_scad/13-animated-bouncing-ball.scad",
    "content": "$vpt = [700, 900, 200];\n$vpr = [80, 0, 20];\n$vpd = 6000;\nbouncing_ball_data = [[4.975, 4.975, 191.04], [9.925125, 9.925125, 373.1648], [14.850499374999998, 14.850499374999998, 546.418976], [19.751246878125, 19.751246878125, 710.84688112], [24.627490643734372, 24.627490643734372, 866.4926467144], [29.4793531905157, 29.4793531905157, 1013.400183480828], [34.30695642456312, 34.30695642456312, 1151.6131825634238], [39.1104216424403, 39.1104216424403, 1281.1751166506067], [43.8898695342281, 43.8898695342281, 1402.1292410673536], [48.645420186556954, 48.645420186556954, 1514.518594862017], [53.37719308562417, 53.37719308562417, 1618.3860018877067], [58.08530712019605, 58.08530712019605, 1713.7740718782682], [62.769880584595064, 62.769880584595064, 1800.7252015188767], [67.43103118167208, 67.43103118167208, 1879.2815755112822], [72.06887602576373, 72.06887602576373, 1949.4851676337257], [76.68353164563491, 76.68353164563491, 2011.377741795557], [81.27511398740674, 81.27511398740674, 2065.0008530865794], [85.84373841746971, 85.84373841746971, 2110.3958488211465], [90.38951972538236, 90.38951972538236, 2147.6038695770408], [94.91257212675545, 94.91257212675545, 2176.6658502291557], [99.41300926612168, 99.41300926612168, 2197.62252097801], [103.89094421979107, 103.89094421979107, 2210.5144083731197], [108.34648949869211, 108.34648949869211, 2215.381836331254], [112.77975705119864, 112.77975705119864, 2212.2649271495975], [117.19085826594265, 117.19085826594265, 2201.2036025138495], [121.57990397461293, 121.57990397461293, 2182.2375845012803], [125.94700445473987, 125.94700445473987, 2155.4063965787736], [130.29226943246616, 130.29226943246616, 2120.74936459588], [134.61580808530383, 134.61580808530383, 2078.3056177729004], [138.91772904487732, 138.91772904487732, 2028.114089684036], [143.19814039965294, 143.19814039965294, 1970.2135192356156], [147.45714969765467, 147.45714969765467, 1904.6424516394375], [151.6948639491664, 151.6948639491664, 1831.4392393812402], [155.91138962942057, 155.91138962942057, 1750.642043184334], [160.10683268127346, 160.10683268127346, 1662.2888329684122], [164.2812985178671, 164.2812985178671, 1566.41738880357], [168.43489202527775, 168.43489202527775, 1463.0653018595522], [172.56771756515136, 172.56771756515136, 1352.2699753502543], [176.6798789773256, 176.6798789773256, 1234.068625473503], [180.77147958243896, 180.77147958243896, 1108.4982823461355], [184.84262218452676, 184.84262218452676, 975.5957909344048], [188.89340907360412, 188.89340907360412, 835.3978119797328], [192.9239420282361, 192.9239420282361, 687.9408229198341], [196.93432231809493, 196.93432231809493, 533.2611188052349], [200.92465070650445, 200.92465070650445, 371.39481321120866], [204.89502745297193, 204.89502745297193, 202.37783914515256], [208.84555231570707, 208.84555231570707, 100], [212.77632455412854, 212.77632455412854, 267.29122974974723], [216.68744293135788, 216.68744293135788, 425.78600335074566], [220.5790057167011, 220.5790057167011, 575.5283030837392], [224.45111068811758, 224.45111068811758, 716.5618913180676], [228.30385513467698, 228.30385513467698, 848.9303116112245], [232.1373358590036, 232.1373358590036, 972.6768898029156], [235.95164917970857, 235.95164917970857, 1087.8447351036482], [239.74689093381002, 239.74689093381002, 1194.476741177877], [243.52315647914097, 243.52315647914097, 1292.6155872217348], [247.28054069674525, 247.28054069674525, 1382.3037390353734], [251.01913799326152, 251.01913799326152, 1463.5834500899437], [254.7390423032952, 254.7390423032952, 1536.4967625892411], [258.44034709177873, 258.44034709177873, 1601.085508526042], [262.1231453563198, 262.1231453563198, 1657.3913107331591], [265.7875296295382, 265.7875296295382, 1705.4555839292404], [269.4335919813905, 269.4335919813905, 1745.3195357593415], [273.06142402148356, 273.06142402148356, 1777.024167830292], [276.67111690137614, 276.67111690137614, 1800.610276740888], [280.2627613168693, 280.2627613168693, 1816.1184551069307], [283.8364475102849, 283.8364475102849, 1823.5890925811432], [287.3922652727335, 287.3922652727335, 1823.0623768679845], [290.9303039463698, 290.9303039463698, 1814.5782947333919], [294.45065242663793, 294.45065242663793, 1798.1766330094722], [297.95339916450473, 297.95339916450473, 1773.896979594172], [301.4386321686822, 301.4386321686822, 1741.7787244459485], [304.9064390078388, 304.9064390078388, 1701.861060573466], [308.3569068127996, 308.3569068127996, 1654.1829850203458], [311.79012227873557, 311.79012227873557, 1598.7832998449912], [315.2061716673419, 315.2061716673419, 1535.7006130955135], [318.6051408090052, 318.6051408090052, 1464.9733397797831], [321.9871151049602, 321.9871151049602, 1386.6397028306314], [325.3521795294354, 325.3521795294354, 1300.7377340662256], [328.7004186317882, 328.7004186317882, 1207.3052751456416], [332.0319165386292, 332.0319165386292, 1106.3799785196607], [335.3467569559361, 335.3467569559361, 997.9993083768095], [338.6450231711564, 338.6450231711564, 882.2005415846726], [341.92679805530065, 341.92679805530065, 759.0207686264964], [345.19216406502414, 345.19216406502414, 628.4968945331111], [348.441203244699, 348.441203244699, 490.6656398101927], [351.6739972284755, 351.6739972284755, 345.56354136088896], [354.89062724233315, 354.89062724233315, 193.2269534038317], [358.09117410612146, 358.09117410612146, 100], [361.27571823559083, 361.27571823559083, 250.77723049218562], [364.4443396444129, 364.4443396444129, 392.8405748319103], [367.5971179461908, 367.5971179461908, 526.2336024499364], [370.73413235645984, 370.73413235645984, 650.9996649298723], [373.85546169467756, 373.85546169467756, 767.1818970974086], [376.96118438620414, 376.96118438620414, 874.8232181041072], [380.0513784642731, 380.0513784642731, 973.9663325057724], [383.1261215719517, 383.1261215719517, 1064.653731335429], [386.18549096409197, 386.18549096409197, 1146.9276931709376], [389.2295635092715, 389.2295635092715, 1220.8302851972685], [392.25841569172513, 392.25841569172513, 1286.403364263468], [395.2721236132665, 395.2721236132665, 1343.688577934336], [398.2707629952002, 398.2707629952002, 1392.7273655368501], [401.2544091802242, 401.2544091802242, 1433.5609592013516], [404.22313713432305, 404.22313713432305, 1466.2303848975305], [407.17702144865143, 407.17702144865143, 1490.7764634652285], [410.11613634140815, 410.11613634140815, 1507.239811640088], [413.0405556597011, 413.0405556597011, 1515.6608430740732], [415.9503528814026, 415.9503528814026, 1516.0797693508885], [418.84560111699557, 418.84560111699557, 1508.5366009963197], [421.72637311141057, 421.72637311141057, 1493.0711484835238], [424.5927412458535, 424.5927412458535, 1469.7230232332918], [427.4447775396242, 427.4447775396242, 1438.531638609311], [430.2825536519261, 430.2825536519261, 1399.53621090845], [433.10614088366646, 433.10614088366646, 1352.7757603460932], [435.9156101792481, 435.9156101792481, 1298.2891120365484], [438.71103212835186, 438.71103212835186, 1236.1148969685514], [441.4924769677101, 441.4924769677101, 1166.2915529758943], [444.2600145828716, 444.2600145828716, 1088.8573257032006], [447.0137145099572, 447.0137145099572, 1003.8502695668702], [449.7536459374074, 449.7536459374074, 911.3082487112215], [452.47987770772033, 452.47987770772033, 811.268937959851], [455.1924783191817, 455.1924783191817, 703.7698237622374], [457.8915159275858, 457.8915159275858, 588.8482051356118], [460.57705834794785, 460.57705834794785, 466.5411946021194], [463.2491730562081, 463.2491730562081, 336.8857191212944], [465.90792719092707, 465.90792719092707, 199.9185210178736], [468.5533875549724, 468.5533875549724, 100], [471.1856206171975, 471.1856206171975, 235.5611503023392], [473.80469251411154, 473.80469251411154, 362.4844948531667], [476.410669051541, 476.410669051541, 480.81322268124006], [479.00361570628326, 479.00361570628326, 590.5903068701731], [481.58359762775183, 481.58359762775183, 691.8585056381614], [484.1506796396131, 484.1506796396131, 784.6603634123098], [486.704926241415, 486.704926241415, 869.0382118975875], [489.24640161020795, 489.24640161020795, 945.0341711404388], [491.7751696021569, 491.7751696021569, 1012.6901505870759], [494.2912937541461, 494.2912937541461, 1072.0478501364796], [496.79483728537537, 496.79483728537537, 1123.1487611881364], [499.2858630989485, 499.2858630989485, 1166.0341676845349], [501.76443378345374, 501.76443378345374, 1200.7451471484515], [504.2306116145365, 504.2306116145365, 1227.3225717150483], [506.6844585564638, 506.6844585564638, 1245.8071091588122], [509.1260362636815, 509.1260362636815, 1256.2392239153573], [511.5554060823631, 511.5554060823631, 1258.6591780981198], [513.9726290519512, 513.9726290519512, 1253.1070325099683], [516.3777659066915, 516.3777659066915, 1239.6226476497577], [518.770877077158, 518.770877077158, 1218.245684713848], [521.1520226917722, 521.1520226917722, 1189.015606592618], [523.5212625783133, 523.5212625783133, 1151.9716788619942], [525.8786562654218, 525.8786562654218, 1107.1529707700233], [528.2242629840947, 528.2242629840947, 1054.5983562185124], [530.5581416691742, 530.5581416691742, 994.3465147397591], [532.8803509608283, 532.8803509608283, 926.4359324683995], [535.1909492060241, 535.1909492060241, 850.9049031083968], [537.489994459994, 537.489994459994, 767.791528895194], [539.7775444876941, 539.7775444876941, 677.1337215530573], [542.0536567652556, 542.0536567652556, 578.9692032476312], [544.3183884814293, 544.3183884814293, 473.3355075337322], [546.5717965390222, 546.5717965390222, 360.26998029840274], [548.8139375563271, 548.8139375563271, 239.80978069924993], [551.0448678685455, 551.0448678685455, 111.99188209809287], [553.2646435292028, 553.2646435292028, 100], [555.4733203115568, 555.4733203115568, 226.5031150626105], [557.670953709999, 557.670953709999, 344.4137145499079], [559.857598941449, 559.857598941449, 453.77476103976886], [562.0333109467418, 562.0333109467418, 554.6290022971805], [564.1981443920081, 564.1981443920081, 647.018972348305], [566.3521536700481, 566.3521536700481, 730.986992549174], [568.4953929016979, 568.4953929016979, 806.5751726490387], [570.6279159371894, 570.6279159371894, 873.825411848404], [572.7497763575035, 572.7497763575035, 932.7793998517725], [574.861027475716, 574.861027475716, 983.4786179151241], [576.9617223383374, 576.9617223383374, 1025.964339888159], [579.0519137266457, 579.0519137266457, 1060.2776332513288], [581.1316541580125, 581.1316541580125, 1086.4593601476827], [583.2009958872223, 583.2009958872223, 1104.5501784095547], [585.2599909077862, 585.2599909077862, 1114.5905425801175], [587.3086909532473, 587.3086909532473, 1116.6207049298273], [589.347147498481, 589.347147498481, 1110.6807164677887], [591.3754117609886, 591.3754117609886, 1096.8104279480601], [593.3935347021837, 593.3935347021837, 1075.0494908709304], [595.4015670286728, 595.4015670286728, 1045.4373584791863], [597.3995591935295, 597.3995591935295, 1008.0132867494009], [599.3875613975619, 599.3875613975619, 962.8163353782644], [601.365623590574, 601.365623590574, 909.8853687639836], [603.3337954726212, 603.3337954726212, 849.2590569827742], [605.2921264952581, 605.2921264952581, 780.9758767604708], [607.2406658627818, 607.2406658627818, 705.0741124392789], [609.1794625334679, 609.1794625334679, 621.591856939693], [611.1085652208006, 611.1085652208006, 530.567012717605], [613.0280223946967, 613.0280223946967, 432.0372927166275], [614.9378822827232, 614.9378822827232, 326.0402213156549], [616.8381928713096, 616.8381928713096, 212.6131352716871], [618.729001906953, 618.729001906953, 100], [620.6103568974182, 620.6103568974182, 212.25585086067917], [622.4823051129312, 622.4823051129312, 315.99042246705494], [624.3448935873665, 624.3448935873665, 411.24632121539884], [626.1981691194297, 626.1981691194297, 498.065940470001], [628.0421782738326, 628.0421782738326, 576.4914616283302], [629.8769673824635, 629.8769673824635, 646.5648551808677], [631.7025825455512, 631.7025825455512, 708.3278817656425], [633.5190696328234, 633.5190696328234, 761.8220932174934], [635.3264742846593, 635.3264742846593, 807.0888336120851], [637.124841913236, 637.124841913236, 844.1692403047039], [638.9142177036698, 638.9142177036698, 873.1042449638595], [640.6946466151514, 640.6946466151514, 893.9345745997194], [642.4661733820757, 642.4661733820757, 906.7007525874], [644.2288425151653, 644.2288425151653, 911.4430996851421], [645.9826983025895, 645.9826983025895, 908.2017350473956], [647.7277848110765, 647.7277848110765, 897.0165772328378], [649.4641458870211, 649.4641458870211, 877.9273452073528], [651.191825157586, 651.191825157586, 850.9735593419952], [652.910866031798, 652.910866031798, 816.1945424059644], [654.621311701639, 654.621311701639, 773.6294205546137], [656.3232051431308, 656.3232051431308, 723.3171243125198], [658.0165891174152, 658.0165891174152, 665.2963895516364], [659.7015061718281, 659.7015061718281, 599.6057584645573], [661.3779986409689, 661.3779986409689, 526.2835805329137], [663.0461086477641, 663.0461086477641, 445.3680134909283], [664.7058781045253, 664.7058781045253, 356.89702428415285], [666.3573487140027, 666.3573487140027, 260.90839002341124], [668.0005619704326, 668.0005619704326, 157.43969893397338], [669.6355591605804, 669.6355591605804, 100], [671.2623813647775, 671.2623813647775, 202.39679089582071], [672.8810694579537, 672.8810694579537, 296.32159783716236], [674.4916641106639, 674.4916641106639, 381.81678074379727], [676.0942057901105, 676.0942057901105, 458.924487735899], [677.68873476116, 677.68873476116, 527.6866561930402], [679.2752910873543, 679.2752910873543, 588.1450138078958], [680.8539146319175, 680.8539146319175, 640.341079634677], [682.424645058758, 682.424645058758, 684.3161651323244], [683.9875218334641, 683.9875218334641, 720.1113752024835], [685.5425842242968, 685.5425842242968, 747.7676092222918], [687.0898713031753, 687.0898713031753, 767.325562072001], [688.6294219466595, 688.6294219466595, 778.8257251574618], [690.1612748369262, 690.1612748369262, 782.3083874274952], [691.6854684627415, 691.6854684627415, 777.8136363861785], [693.2020411204278, 693.2020411204278, 765.3813591000683], [694.7110309148256, 694.7110309148256, 745.0512432003886], [696.2124757602516, 696.2124757602516, 716.8627778802074], [697.7064133814503, 697.7064133814503, 680.8552548866271], [699.192881314543, 699.192881314543, 637.0677695080146], [700.6719169079703, 700.6719169079703, 585.5392215562953], [702.1435573234304, 702.1435573234304, 526.3083163443346], [703.6078395368132, 703.6078395368132, 459.41356565843364], [705.0648003391292, 705.0648003391292, 384.8932887259622], [706.5144763374335, 706.5144763374335, 302.7856131781531], [707.9569039557464, 707.9569039557464, 213.12847600808303], [709.3921194359676, 709.3921194359676, 115.95962452386333], [710.8201588387877, 710.8201588387877, 100], [712.2410580445938, 712.2410580445938, 196.1597921906646], [713.6548527543708, 713.6548527543708, 283.8787854203759], [715.061578490599, 715.061578490599, 363.1991836839386], [716.461270598146, 716.461270598146, 434.1629799561835], [717.8539642451553, 717.8539642451553, 496.8119572470672], [719.2396944239296, 719.2396944239296, 551.1876896514965], [720.6184959518099, 720.6184959518099, 597.3315433939036], [721.9904034720508, 721.9904034720508, 635.2846778675987], [723.3554514546906, 723.3554514546906, 665.0880466689252], [724.7136741974172, 724.7136741974172, 686.7823986262453], [726.0651058264301, 726.0651058264301, 700.4082788237786], [727.409780297298, 727.409780297298, 706.0060296203243], [728.7477313958115, 728.7477313958115, 703.6157916628872], [730.0789927388324, 730.0789927388324, 693.2775048952374], [731.4035977751382, 731.4035977751382, 675.0309095614258], [732.7215797862625, 732.7215797862625, 648.9155472042833], [734.0329718873312, 734.0329718873312, 614.9707616589264], [735.3378070278945, 735.3378070278945, 573.2357000412965], [736.6361179927551, 736.6361179927551, 523.7493137317546], [737.9279374027913, 737.9279374027913, 466.55035935376037], [739.2132977157773, 739.2132977157773, 401.6773997476562], [740.4922312271984, 740.4922312271984, 329.1688049395825], [741.7647700710625, 741.7647700710625, 249.0627531055492], [743.0309462207072, 743.0309462207072, 161.39723153068604], [744.2907914896036, 744.2907914896036, 100], [745.5443375321556, 745.5443375321556, 186.75125799715389], [746.7916158444948, 746.7916158444948, 265.108759704322], [748.0326577652723, 748.0326577652723, 335.1144739029543], [749.267494476446, 749.267494476446, 396.8101595305934], [750.4961570040638, 750.4961570040638, 450.2373667300943], [751.7186762190435, 751.7186762190435, 495.43743789359775], [752.9350828379482, 752.9350828379482, 532.4515087012836], [754.1454074237585, 754.1454074237585, 561.3205091549311], [755.3496803866396, 755.3496803866396, 582.0851646063103], [756.5479319847065, 756.5479319847065, 594.7859967804326], [757.7401923247829, 757.7401923247829, 599.4633247936843], [758.926491363159, 758.926491363159, 596.1572661668697], [760.1068589063432, 760.1068589063432, 584.9077378331892], [761.2813246118114, 761.2813246118114, 565.7544571411771], [762.4499179887524, 762.4499179887524, 538.7369428526251], [763.6126683988086, 763.6126683988086, 503.8945161355159], [764.7696050568146, 764.7696050568146, 461.2663015519922], [765.9207570315306, 765.9207570315306, 410.89122804138617], [767.0661532463729, 767.0661532463729, 352.80802989833313], [768.205822480141, 768.205822480141, 287.05524774599536], [769.3397933677403, 769.3397933677403, 213.67122950441927], [770.4680944009016, 770.4680944009016, 132.69413135405108], [771.590753928897, 771.590753928897, 100], [772.7078001592525, 772.7078001592525, 180.12955159631827], [773.8192611584562, 773.8192611584562, 251.89845543465495], [774.925164852664, 774.925164852664, 315.3485147537999], [776.0255390284007, 776.0255390284007, 370.52132377634916], [777.1204113332586, 777.1204113332586, 417.45826875378566], [778.2098092765923, 778.2098092765923, 456.200529006335], [779.2937602302094, 779.2937602302094, 486.7890779576216], [780.3722914290584, 780.3722914290584, 509.2646841641518], [781.4454299719131, 781.4454299719131, 523.6679123396493], [782.5132028220535, 782.5132028220535, 530.0391243742694], [783.5756368079432, 783.5756368079432, 528.4184803487163], [784.6327586239034, 784.6327586239034, 518.845939543291], [785.6845948307839, 785.6845948307839, 501.36126144189285], [786.73117185663, 786.73117185663, 476.00400673100165], [787.7725159973469, 787.7725159973469, 442.8135382936649], [788.8086534173601, 788.8086534173601, 401.82902219851485], [789.8396101502733, 789.8396101502733, 353.08942868384054], [790.8654120995219, 790.8654120995219, 296.63353313673963], [791.8860850390242, 791.8860850390242, 232.4999170673742], [792.9016546138291, 792.9016546138291, 160.7269690783556], [793.9121463407599, 793.9121463407599, 100], [794.9175856090561, 794.9175856090561, 171.01721283282814], [795.9179976810109, 795.9179976810109, 233.71933960149212], [796.9134076926058, 796.9134076926058, 288.1479557363128], [797.9038406541428, 797.9038406541428, 334.34442879045935], [798.889321450872, 798.889321450872, 372.3499194793352], [799.8698748436176, 799.8698748436176, 402.20538271476664], [800.8455254693995, 800.8455254693995, 423.95156863402093], [801.8162978420524, 801.8162978420524, 437.62902362367896], [802.7822163528422, 802.7822163528422, 443.2780913383887], [803.7433052710779, 803.7433052710779, 440.9389137145249], [804.6995887447225, 804.6995887447225, 430.6514319787804], [805.6510908009989, 805.6510908009989, 412.45538765171466], [806.5978353469939, 806.5978353469939, 386.3903235462842], [807.5398461702589, 807.5398461702589, 352.4955847613809], [808.4771469394076, 808.4771469394076, 310.8103196704021], [809.4097612047105, 809.4097612047105, 261.37348090487825], [810.337712398687, 810.337712398687, 204.223826333182], [811.2610238366935, 811.2610238366935, 139.3999200343442], [812.17971871751, 812.17971871751, 100], [813.0938201239225, 813.0938201239225, 164.1374878335069], [814.0033510233028, 814.0033510233028, 219.99428822784625], [814.9083342681863, 814.9083342681863, 267.6118046202139], [815.8087925968454, 815.8087925968454, 307.0312334306197], [816.7047486338612, 816.7047486338612, 338.29356509697345], [817.5962248906919, 817.5962248906919, 361.43958510499544], [818.4832437662385, 818.4832437662385, 376.5098750129774], [819.3658275474073, 819.3658275474073, 383.5448134714194], [820.2439984096703, 820.2439984096703, 382.5845772375692], [821.1177784176219, 821.1177784176219, 373.66914218488824], [821.9871895255338, 821.9871895255338, 356.8382843074707], [822.8522535779061, 822.8522535779061, 332.13158071944025], [823.7129923100166, 823.7129923100166, 299.58841064934995], [824.5694273484665, 824.5694273484665, 259.2479564296101], [825.4215802117242, 825.4215802117242, 211.14920448096893], [826.2694723106656, 826.2694723106656, 155.330946292071], [827.1131249491123, 827.1131249491123, 100], [827.9525593243667, 827.9525593243667, 155.2216710634637], [828.7877965277448, 828.7877965277448, 202.20723377161008], [829.6188575451062, 829.6188575451062, 240.9978686662157], [830.4457632573806, 830.4457632573806, 271.63455038634834], [831.2685344410937, 831.2685344410937, 294.1580486978803], [832.0871917688883, 832.0871917688883, 308.6089295178546], [832.9017558100438, 832.9017558100438, 315.02755593372905], [833.7122470309936, 833.7122470309936, 313.4540892175241], [834.5186857958386, 834.5186857958386, 303.9284898349002], [835.3210923668594, 835.3210923668594, 286.4905184491894], [836.119486905025, 836.119486905025, 261.1797369204071], [836.9138894705, 836.9138894705, 228.03550929926874], [837.7043200231475, 837.7043200231475, 187.09700281623608], [838.4907984230317, 838.4907984230317, 138.4031888656186], [839.2733444309166, 839.2733444309166, 100], [840.051977708762, 840.051977708762, 148.1682931564601], [840.8267178202182, 840.8267178202182, 188.13574484713786], [841.597584231117, 841.597584231117, 219.94335927936226], [842.3645963099615, 842.3645963099615, 243.63193563942554], [843.1277733284116, 843.1277733284116, 259.24206911768846], [843.8871344617696, 843.8871344617696, 266.8141519285601], [844.6426987894607, 844.6426987894607, 266.38837432537736], [845.3944852955134, 845.3944852955134, 258.0047256102105], [846.1425128690358, 846.1425128690358, 241.70299513861954], [846.8868003046906, 846.8868003046906, 217.52277331938652], [847.6273663031672, 847.6273663031672, 185.50345260924965], [848.3642294716514, 848.3642294716514, 145.68422850266347], [849.097408324293, 849.097408324293, 100], [849.8269212826716, 849.8269212826716, 139.382227346123], [850.5527866762583, 850.5527866762583, 170.60754355551535], [851.275022742877, 851.275022742877, 193.71673318386075], [851.9936476291626, 851.9936476291626, 208.75037686406444], [852.7086793910169, 852.7086793910169, 215.7488523258671], [853.4201359940618, 853.4201359940618, 214.75233541036073], [854.1280353140914, 854.1280353140914, 205.8008010794319], [854.832395137521, 854.832395137521, 188.9340244201577], [855.5332331618333, 855.5332331618333, 164.19158164417988], [856.2305669960242, 856.2305669960242, 131.61285108208196], [856.9244141610441, 856.9244141610441, 100], [857.6147920902389, 857.6147920902389, 132.213957724741], [858.3017181297877, 858.3017181297877, 156.30684566085827], [858.9852095391387, 858.9852095391387, 172.31926915729497], [859.665283491443, 859.665283491443, 180.2916305362495], [860.3419570739858, 860.3419570739858, 180.26413010830925], [861.0152472886158, 861.0152472886158, 172.2767671825087], [861.6851710521727, 861.6851710521727, 156.36934107133715], [862.3517451969118, 862.3517451969118, 132.58145209072146], [863.0149864709273, 863.0149864709273, 100.95250255500883], [863.6749115385726, 863.6749115385726, 100], [864.3315369808797, 864.3315369808797, 131.27365076409387], [864.9848792959754, 864.9848792959754, 154.43093327436728], [865.6349548994955, 865.6349548994955, 169.51242937208931], [866.281780124998, 866.281780124998, 176.55851798932275], [866.9253712243731, 866.9253712243731, 175.60937616347002], [867.5657443682512, 867.5657443682512, 166.70498004674656], [868.2029156464099, 868.2029156464099, 149.8851059106067], [868.8369010681779, 868.8369010681779, 125.18933114514756], [869.467716562837, 869.467716562837, 100], [870.0953779800228, 870.0953779800228, 124.40963441217369], [870.7199010901227, 870.7199010901227, 140.7372206522865], [871.341301584672, 871.341301584672, 149.02316896119876], [871.9595950767487, 871.9595950767487, 149.30768752856648], [872.5747971013649, 872.5747971013649, 141.63078350309735], [873.186923115858, 873.186923115858, 126.03226399775555], [873.7959885002787, 873.7959885002787, 102.55173708994047], [874.4020085577773, 874.4020085577773, 100], [875.0049985149884, 875.0049985149884, 123.20650865190963], [875.6049735224135, 875.6049735224135, 138.33698476055972], [876.2019486548014, 876.2019486548014, 145.43180848866655], [876.7959389115274, 876.7959389115274, 144.53115809813283], [877.3869592169698, 877.3869592169698, 135.6750109595518], [877.9750244208849, 877.9750244208849, 118.90314455666366], [878.5601492987805, 878.5601492987805, 100], [879.1423485522866, 879.1423485522866, 116.56476703551932], [879.7216368095252, 879.7216368095252, 125.08671023586105], [880.2980286254775, 880.2980286254775, 125.60604372020107], [880.8715384823502, 880.8715384823502, 118.16278053711939], [881.4421807899384, 881.4421807899384, 102.79673366995311], [882.0099698859888, 882.0099698859888, 100], [882.5749200365589, 882.5749200365589, 115.17297054966629], [883.1370454363761, 883.1370454363761, 122.31007624658425], [883.6963602091942, 883.6963602091942, 121.45149641501762], [884.2528784081481, 884.2528784081481, 112.63720948260881], [884.8066140161075, 884.8066140161075, 100], [885.3575809460269, 885.3575809460269, 108.68656442025802], [885.9057930412968, 885.9057930412968, 109.36969601841476], [886.4512640760903, 886.4512640760903, 102.08941195858071], [886.9940077557098, 886.9940077557098, 100], [887.5340377169313, 887.5340377169313, 107.1678632263372], [888.0713675283466, 888.0713675283466, 106.33988713654273], [888.6060106907049, 888.6060106907049, 100], [889.1379806372514, 889.1379806372514, 100.77991702829878], [889.6672907340652, 889.6672907340652, 100], [890.1939542803949, 890.1939542803949, 100], [890.7179845089929, 890.7179845089929, 100], [891.2393945864479, 891.2393945864479, 100], [891.7581976135157, 891.7581976135157, 100], [892.2744066254481, 892.2744066254481, 100], [892.7880345923209, 892.7880345923209, 100], [893.2990944193592, 893.2990944193592, 100], [893.8075989472625, 893.8075989472625, 100], [894.3135609525261, 894.3135609525261, 100], [894.8169931477635, 894.8169931477635, 100], [895.3179081820247, 895.3179081820247, 100], [895.8163186411145, 895.8163186411145, 100], [896.312237047909, 896.312237047909, 100], [896.8056758626694, 896.8056758626694, 100], [897.2966474833561, 897.2966474833561, 100], [897.7851642459393, 897.7851642459393, 100], [898.2712384247096, 898.2712384247096, 100], [898.754882232586, 898.754882232586, 100], [899.2361078214232, 899.2361078214232, 100], [899.714927282316, 899.714927282316, 100], [900.1913526459044, 900.1913526459044, 100], [900.6653958826749, 900.6653958826749, 100], [901.1370689032616, 901.1370689032616, 100], [901.6063835587453, 901.6063835587453, 100], [902.0733516409515, 902.0733516409515, 100], [902.5379848827467, 902.5379848827467, 100], [903.000294958333, 903.000294958333, 100], [903.4602934835414, 903.4602934835414, 100], [903.9179920161237, 903.9179920161237, 100], [904.373402056043, 904.373402056043, 100], [904.8265350457627, 904.8265350457627, 100], [905.2774023705339, 905.2774023705339, 100], [905.7260153586813, 905.7260153586813, 100], [906.1723852818878, 906.1723852818878, 100], [906.6165233554784, 906.6165233554784, 100], [907.058440738701, 907.058440738701, 100], [907.4981485350075, 907.4981485350075, 100], [907.9356577923324, 907.9356577923324, 100], [908.3709795033708, 908.3709795033708, 100], [908.804124605854, 908.804124605854, 100], [909.2351039828247, 909.2351039828247, 100], [909.6639284629106, 909.6639284629106, 100], [910.090608820596, 910.090608820596, 100], [910.515155776493, 910.515155776493, 100], [910.9375799976106, 910.9375799976106, 100], [911.3578920976225, 911.3578920976225, 100], [911.7761026371344, 911.7761026371344, 100], [912.1922221239487, 912.1922221239487, 100], [912.6062610133289, 912.6062610133289, 100], [913.0182297082622, 913.0182297082622, 100], [913.4281385597209, 913.4281385597209, 100], [913.8359978669223, 913.8359978669223, 100], [914.2418178775877, 914.2418178775877, 100], [914.6456087881998, 914.6456087881998, 100], [915.0473807442587, 915.0473807442587, 100], [915.4471438405374, 915.4471438405374, 100], [915.8449081213347, 915.8449081213347, 100], [916.240683580728, 916.240683580728, 100], [916.6344801628244, 916.6344801628244, 100], [917.0263077620102, 917.0263077620102, 100], [917.4161762232002, 917.4161762232002, 100], [917.8040953420842, 917.8040953420842, 100], [918.1900748653738, 918.1900748653738, 100], [918.574124491047, 918.574124491047, 100], [918.9562538685917, 918.9562538685917, 100], [919.3364725992487, 919.3364725992487, 100], [919.7147902362525, 919.7147902362525, 100], [920.0912162850713, 920.0912162850713, 100], [920.4657602036459, 920.4657602036459, 100], [920.8384314026276, 920.8384314026276, 100], [921.2092392456145, 921.2092392456145, 100], [921.5781930493864, 921.5781930493864, 100], [921.9453020841395, 921.9453020841395, 100], [922.3105755737188, 922.3105755737188, 100], [922.6740226958502, 922.6740226958502, 100], [923.035652582371, 923.035652582371, 100], [923.3954743194591, 923.3954743194591, 100], [923.7534969478619, 923.7534969478619, 100], [924.1097294631226, 924.1097294631226, 100], [924.4641808158069, 924.4641808158069, 100], [924.8168599117279, 924.8168599117279, 100], [925.1677756121692, 925.1677756121692, 100], [925.5169367341083, 925.5169367341083, 100], [925.8643520504378, 925.8643520504378, 100], [926.2100302901856, 926.2100302901856, 100], [926.5539801387347, 926.5539801387347, 100], [926.896210238041, 926.896210238041, 100], [927.2367291868508, 927.2367291868508, 100], [927.5755455409166, 927.5755455409166, 100], [927.912667813212, 927.912667813212, 100], [928.248104474146, 928.248104474146, 100], [928.5818639517753, 928.5818639517753, 100], [928.9139546320164, 928.9139546320164, 100], [929.2443848588563, 929.2443848588563, 100], [929.573162934562, 929.573162934562, 100], [929.9002971198892, 929.9002971198892, 100], [930.2257956342897, 930.2257956342897, 100], [930.5496666561182, 930.5496666561182, 100], [930.8719183228376, 930.8719183228376, 100], [931.1925587312234, 931.1925587312234, 100], [931.5115959375672, 931.5115959375672, 100], [931.8290379578793, 931.8290379578793, 100], [932.1448927680899, 932.1448927680899, 100], [932.4591683042495, 932.4591683042495, 100], [932.7718724627282, 932.7718724627282, 100], [933.0830131004145, 933.0830131004145, 100], [933.3925980349125, 933.3925980349125, 100], [933.7006350447379, 933.7006350447379, 100], [934.0071318695142, 934.0071318695142, 100], [934.3120962101666, 934.3120962101666, 100], [934.6155357291158, 934.6155357291158, 100], [934.9174580504701, 934.9174580504701, 100], [935.2178707602178, 935.2178707602178, 100], [935.5167814064167, 935.5167814064167, 100], [935.8141974993846, 935.8141974993846, 100], [936.1101265118876, 936.1101265118876, 100], [936.4045758793281, 936.4045758793281, 100], [936.6975529999315, 936.6975529999315, 100], [936.9890652349319, 936.9890652349319, 100], [937.2791199087573, 937.2791199087573, 100], [937.5677243092134, 937.5677243092134, 100], [937.8548856876673, 937.8548856876673, 100], [938.140611259229, 938.140611259229, 100], [938.4249082029328, 938.4249082029328, 100], [938.7077836619181, 938.7077836619181, 100], [938.9892447436085, 938.9892447436085, 100], [939.2692985198905, 939.2692985198905, 100], [939.5479520272911, 939.5479520272911, 100], [939.8252122671546, 939.8252122671546, 100], [940.1010862058188, 940.1010862058188, 100], [940.3755807747897, 940.3755807747897, 100], [940.6487028709157, 940.6487028709157, 100], [940.9204593565611, 940.9204593565611, 100], [941.1908570597783, 941.1908570597783, 100], [941.4599027744794, 941.4599027744794, 100], [941.727603260607, 941.727603260607, 100], [941.9939652443039, 941.9939652443039, 100], [942.2589954180823, 942.2589954180823, 100], [942.5227004409919, 942.5227004409919, 100], [942.7850869387869, 942.7850869387869, 100], [943.046161504093, 943.046161504093, 100], [943.3059306965725, 943.3059306965725, 100], [943.5644010430897, 943.5644010430897, 100], [943.8215790378742, 943.8215790378742, 100], [944.0774711426849, 944.0774711426849, 100], [944.3320837869715, 944.3320837869715, 100], [944.5854233680366, 944.5854233680366, 100], [944.8374962511964, 944.8374962511964, 100], [945.0883087699405, 945.0883087699405, 100], [945.3378672260908, 945.3378672260908, 100], [945.5861778899604, 945.5861778899604, 100], [945.8332470005106, 945.8332470005106, 100], [946.079080765508, 946.079080765508, 100], [946.3236853616805, 946.3236853616805, 100], [946.5670669348722, 946.5670669348722, 100], [946.8092316001978, 946.8092316001978, 100], [947.0501854421968, 947.0501854421968, 100], [947.2899345149858, 947.2899345149858, 100], [947.5284848424109, 947.5284848424109, 100], [947.7658424181989, 947.7658424181989, 100], [948.0020132061079, 948.0020132061079, 100], [948.2370031400774, 948.2370031400774, 100], [948.4708181243769, 948.4708181243769, 100], [948.703464033755, 948.703464033755, 100], [948.9349467135862, 948.9349467135862, 100], [949.1652719800182, 949.1652719800182, 100], [949.3944456201182, 949.3944456201182, 100], [949.6224733920176, 949.6224733920176, 100], [949.8493610250575, 949.8493610250575, 100], [950.0751142199323, 950.0751142199323, 100], [950.2997386488327, 950.2997386488327, 100], [950.5232399555885, 950.5232399555885, 100], [950.7456237558105, 950.7456237558105, 100], [950.9668956370314, 950.9668956370314, 100], [951.1870611588462, 951.1870611588462, 100], [951.4061258530519, 951.4061258530519, 100], [951.6240952237866, 951.6240952237866, 100], [951.8409747476677, 951.8409747476677, 100], [952.0567698739294, 952.0567698739294, 100], [952.2714860245597, 952.2714860245597, 100], [952.4851285944369, 952.4851285944369, 100], [952.6977029514647, 952.6977029514647, 100], [952.9092144367074, 952.9092144367074, 100], [953.1196683645239, 953.1196683645239, 100], [953.3290700227013, 953.3290700227013, 100], [953.5374246725878, 953.5374246725878, 100], [953.7447375492249, 953.7447375492249, 100], [953.9510138614787, 953.9510138614787, 100], [954.1562587921713, 954.1562587921713, 100], [954.3604774982105, 954.3604774982105, 100], [954.5636751107194, 954.5636751107194, 100], [954.7658567351658, 954.7658567351658, 100], [954.96702745149, 954.96702745149, 100], [955.1671923142326, 955.1671923142326, 100], [955.3663563526615, 955.3663563526615, 100], [955.5645245708981, 955.5645245708981, 100], [955.7617019480437, 955.7617019480437, 100], [955.9578934383035, 955.9578934383035, 100], [956.1531039711119, 956.1531039711119, 100], [956.3473384512564, 956.3473384512564, 100], [956.5406017590001, 956.5406017590001, 100], [956.7328987502051, 956.7328987502051, 100], [956.924234256454, 956.924234256454, 100], [957.1146130851718, 957.1146130851718, 100], [957.3040400197459, 957.3040400197459, 100], [957.4925198196472, 957.4925198196472, 100], [957.680057220549, 957.680057220549, 100], [957.8666569344463, 957.8666569344463, 100], [958.052323649774, 958.052323649774, 100], [958.2370620315252, 958.2370620315252, 100], [958.4208767213676, 958.4208767213676, 100], [958.6037723377607, 958.6037723377607, 100], [958.7857534760719, 958.7857534760719, 100], [958.9668247086915, 958.9668247086915, 100], [959.146990585148, 959.146990585148, 100], [959.3262556322223, 959.3262556322223, 100], [959.5046243540612, 959.5046243540612, 100], [959.6821012322908, 959.6821012322908, 100], [959.8586907261293, 959.8586907261293, 100], [960.0343972724987, 960.0343972724987, 100], [960.2092252861362, 960.2092252861362, 100], [960.3831791597055, 960.3831791597055, 100], [960.556263263907, 960.556263263907, 100], [960.7284819475875, 960.7284819475875, 100], [960.8998395378495, 960.8998395378495, 100], [961.0703403401602, 961.0703403401602, 100], [961.2399886384594, 961.2399886384594, 100], [961.4087886952672, 961.4087886952672, 100], [961.5767447517908, 961.5767447517908, 100], [961.7438610280318, 961.7438610280318, 100], [961.9101417228917, 961.9101417228917, 100], [962.0755910142773, 962.0755910142773, 100], [962.2402130592059, 962.2402130592059, 100], [962.4040119939099, 962.4040119939099, 100], [962.5669919339404, 962.5669919339404, 100], [962.7291569742706, 962.7291569742706, 100], [962.8905111893993, 962.8905111893993, 100], [963.0510586334523, 963.0510586334523, 100], [963.210803340285, 963.210803340285, 100], [963.3697493235836, 963.3697493235836, 100], [963.5279005769657, 963.5279005769657, 100], [963.6852610740809, 963.6852610740809, 100], [963.8418347687106, 963.8418347687106, 100], [963.997625594867, 963.997625594867, 100], [964.1526374668927, 964.1526374668927, 100], [964.3068742795582, 964.3068742795582, 100], [964.4603399081604, 964.4603399081604, 100], [964.6130382086196, 964.6130382086196, 100], [964.7649730175765, 964.7649730175765, 100], [964.9161481524886, 964.9161481524886, 100], [965.0665674117262, 965.0665674117262, 100], [965.2162345746675, 965.2162345746675, 100], [965.3651534017941, 965.3651534017941, 100], [965.5133276347851, 965.5133276347851, 100], [965.6607609966112, 965.6607609966112, 100], [965.8074571916281, 965.8074571916281, 100], [965.95341990567, 965.95341990567, 100], [966.0986528061417, 966.0986528061417, 100], [966.243159542111, 966.243159542111, 100], [966.3869437444005, 966.3869437444005, 100], [966.5300090256785, 966.5300090256785, 100], [966.6723589805501, 966.6723589805501, 100], [966.8139971856474, 966.8139971856474, 100], [966.9549271997191, 966.9549271997191, 100], [967.0951525637205, 967.0951525637205, 100], [967.2346768009019, 967.2346768009019, 100], [967.3735034168974, 967.3735034168974, 100], [967.5116358998129, 967.5116358998129, 100], [967.6490777203138, 967.6490777203138, 100], [967.7858323317122, 967.7858323317122, 100], [967.9219031700536, 967.9219031700536, 100], [968.0572936542034, 968.0572936542034, 100], [968.1920071859323, 968.1920071859323, 100], [968.3260471500026, 968.3260471500026, 100], [968.4594169142526, 968.4594169142526, 100], [968.5921198296813, 968.5921198296813, 100], [968.7241592305329, 968.7241592305329, 100], [968.8555384343803, 968.8555384343803, 100], [968.9862607422084, 968.9862607422084, 100], [969.1163294384974, 969.1163294384974, 100], [969.2457477913049, 969.2457477913049, 100], [969.3745190523483, 969.3745190523483, 100], [969.5026464570866, 969.5026464570866, 100], [969.6301332248012, 969.6301332248012, 100], [969.7569825586771, 969.7569825586771, 100], [969.8831976458837, 969.8831976458837, 100], [970.0087816576543, 970.0087816576543, 100], [970.133737749366, 970.133737749366, 100], [970.2580690606192, 970.2580690606192, 100], [970.381778715316, 970.381778715316, 100], [970.5048698217395, 970.5048698217395, 100], [970.6273454726307, 970.6273454726307, 100], [970.7492087452675, 970.7492087452675, 100], [970.8704627015412, 970.8704627015412, 100], [970.9911103880335, 970.9911103880335, 100], [971.1111548360933, 971.1111548360933, 100], [971.2305990619128, 971.2305990619128, 100], [971.3494460666033, 971.3494460666033, 100], [971.4676988362702, 971.4676988362702, 100], [971.5853603420888, 971.5853603420888, 100], [971.7024335403784, 971.7024335403784, 100], [971.8189213726764, 971.8189213726764, 100], [971.934826765813, 971.934826765813, 100], [972.0501526319839, 972.0501526319839, 100], [972.164901868824, 972.164901868824, 100], [972.2790773594799, 972.2790773594799, 100], [972.3926819726825, 972.3926819726825, 100], [972.5057185628191, 972.5057185628191, 100], [972.618189970005, 972.618189970005, 100], [972.730099020155, 972.730099020155, 100], [972.8414485250541, 972.8414485250541, 100], [972.9522412824289, 972.9522412824289, 100], [973.0624800760168, 973.0624800760168, 100], [973.1721676756366, 973.1721676756366, 100], [973.2813068372584, 973.2813068372584, 100], [973.3899003030721, 973.3899003030721, 100], [973.4979508015567, 973.4979508015567, 100], [973.6054610475489, 973.6054610475489, 100], [973.7124337423112, 973.7124337423112, 100], [973.8188715735996, 973.8188715735996, 100], [973.9247772157316, 973.9247772157316, 100], [974.030153329653, 974.030153329653, 100], [974.1350025630047, 974.1350025630047, 100], [974.2393275501897, 974.2393275501897, 100], [974.3431309124388, 974.3431309124388, 100], [974.4464152578767, 974.4464152578767, 100], [974.5491831815873, 974.5491831815873, 100], [974.6514372656793, 974.6514372656793, 100], [974.753180079351, 974.753180079351, 100], [974.8544141789542, 974.8544141789542, 100], [974.9551421080595, 974.9551421080595, 100], [975.0553663975192, 975.0553663975192, 100], [975.1550895655315, 975.1550895655315, 100], [975.2543141177039, 975.2543141177039, 100], [975.3530425471154, 975.3530425471154, 100], [975.4512773343798, 975.4512773343798, 100], [975.549020947708, 975.549020947708, 100], [975.6462758429694, 975.6462758429694, 100], [975.7430444637546, 975.7430444637546, 100], [975.8393292414358, 975.8393292414358, 100], [975.9351325952287, 975.9351325952287, 100], [976.0304569322525, 976.0304569322525, 100], [976.1253046475912, 976.1253046475912, 100], [976.2196781243532, 976.2196781243532, 100], [976.3135797337314, 976.3135797337314, 100], [976.4070118350628, 976.4070118350628, 100], [976.4999767758875, 976.4999767758875, 100], [976.592476892008, 976.592476892008, 100], [976.684514507548, 976.684514507548, 100], [976.7760919350103, 976.7760919350103, 100], [976.8672114753352, 976.8672114753352, 100], [976.9578754179586, 976.9578754179586, 100], [977.0480860408687, 977.0480860408687, 100], [977.1378456106644, 977.1378456106644, 100], [977.227156382611, 977.227156382611, 100], [977.316020600698, 977.316020600698, 100], [977.4044404976945, 977.4044404976945, 100], [977.492418295206, 977.492418295206, 100], [977.5799562037299, 977.5799562037299, 100], [977.6670564227113, 977.6670564227113, 100], [977.7537211405978, 977.7537211405978, 100], [977.8399525348948, 977.8399525348948, 100], [977.9257527722203, 977.9257527722203, 100], [978.0111240083593, 978.0111240083593, 100], [978.0960683883175, 978.0960683883175, 100], [978.1805880463759, 978.1805880463759, 100], [978.264685106144, 978.264685106144, 100], [978.3483616806133, 978.3483616806133, 100], [978.4316198722101, 978.4316198722101, 100], [978.5144617728491, 978.5144617728491, 100], [978.5968894639849, 978.5968894639849, 100], [978.678905016665, 978.678905016665, 100], [978.7605104915817, 978.7605104915817, 100], [978.8417079391238, 978.8417079391238, 100], [978.9224993994281, 978.9224993994281, 100], [979.002886902431, 979.002886902431, 100], [979.0828724679188, 979.0828724679188, 100], [979.1624581055793, 979.1624581055793, 100], [979.2416458150514, 979.2416458150514, 100], [979.3204375859762, 979.3204375859762, 100], [979.3988353980462, 979.3988353980462, 100], [979.476841221056, 979.476841221056, 100], [979.5544570149507, 979.5544570149507, 100], [979.6316847298759, 979.6316847298759, 100], [979.7085263062265, 979.7085263062265, 100], [979.7849836746954, 979.7849836746954, 100], [979.8610587563219, 979.8610587563219, 100], [979.9367534625403, 979.9367534625403, 100], [980.0120696952276, 980.0120696952276, 100], [980.0870093467515, 980.0870093467515, 100], [980.1615743000177, 980.1615743000177, 100], [980.2357664285176, 980.2357664285176, 100], [980.3095875963751, 980.3095875963751, 100], [980.3830396583932, 980.3830396583932, 100], [980.4561244601011, 980.4561244601011, 100], [980.5288438378007, 980.5288438378007, 100], [980.6011996186116, 980.6011996186116, 100], [980.6731936205185, 980.6731936205185, 100], [980.7448276524159, 980.7448276524159, 100], [980.8161035141538, 980.8161035141538, 100], [980.887022996583, 980.887022996583, 100], [980.9575878816001, 980.9575878816001, 100], [981.0277999421921, 981.0277999421921, 100], [981.0976609424812, 981.0976609424812, 100], [981.1671726377688, 981.1671726377688, 100], [981.23633677458, 981.23633677458, 100], [981.3051550907071, 981.3051550907071, 100], [981.3736293152535, 981.3736293152535, 100], [981.4417611686773, 981.4417611686773, 100], [981.5095523628339, 981.5095523628339, 100], [981.5770046010198, 981.5770046010198, 100], [981.6441195780146, 981.6441195780146, 100], [981.7108989801245, 981.7108989801245, 100], [981.7773444852239, 981.7773444852239, 100], [981.8434577627978, 981.8434577627978, 100], [981.9092404739838, 981.9092404739838, 100], [981.9746942716139, 981.9746942716139, 100], [982.0398208002558, 982.0398208002558, 100], [982.1046216962545, 982.1046216962545, 100], [982.1690985877733, 982.1690985877733, 100], [982.2332530948345, 982.2332530948345, 100], [982.2970868293603, 982.2970868293603, 100], [982.3606013952135, 982.3606013952135, 100], [982.4237983882374, 982.4237983882374, 100], [982.4866793962963, 982.4866793962963, 100], [982.5492459993147, 982.5492459993147, 100], [982.6114997693181, 982.6114997693181, 100], [982.6734422704716, 982.6734422704716, 100], [982.7350750591193, 982.7350750591193, 100], [982.7963996838237, 982.7963996838237, 100], [982.8574176854046, 982.8574176854046, 100], [982.9181305969776, 982.9181305969776, 100], [982.9785399439927, 982.9785399439927, 100], [983.0386472442727, 983.0386472442727, 100], [983.0984540080514, 983.0984540080514, 100], [983.1579617380111, 983.1579617380111, 100], [983.217171929321, 983.217171929321, 100], [983.2760860696744, 983.2760860696744, 100], [983.3347056393261, 983.3347056393261, 100], [983.3930321111295, 983.3930321111295, 100], [983.4510669505738, 983.4510669505738, 100], [983.508811615821, 983.508811615821, 100], [983.5662675577419, 983.5662675577419, 100], [983.6234362199532, 983.6234362199532, 100], [983.6803190388534, 983.6803190388534, 100], [983.7369174436592, 983.7369174436592, 100], [983.7932328564409, 983.7932328564409, 100], [983.8492666921587, 983.8492666921587, 100], [983.9050203586979, 983.9050203586979, 100], [983.9604952569044, 983.9604952569044, 100], [984.0156927806199, 984.0156927806199, 100], [984.0706143167168, 984.0706143167168, 100], [984.1252612451333, 984.1252612451333, 100], [984.1796349389076, 984.1796349389076, 100], [984.2337367642131, 984.2337367642131, 100], [984.287568080392, 984.287568080392, 100], [984.3411302399901, 984.3411302399901, 100], [984.3944245887901, 984.3944245887901, 100], [984.4474524658461, 984.4474524658461, 100], [984.5002152035169, 984.5002152035169, 100], [984.5527141274993, 984.5527141274993, 100], [984.6049505568618, 984.6049505568618, 100], [984.6569258040774, 984.6569258040774, 100], [984.7086411750571, 984.7086411750571, 100], [984.7600979691819, 984.7600979691819, 100], [984.811297479336, 984.811297479336, 100], [984.8622409919393, 984.8622409919393, 100], [984.9129297869796, 984.9129297869796, 100], [984.9633651380447, 984.9633651380447, 100], [985.0135483123544, 985.0135483123544, 100], [985.0634805707926, 985.0634805707926, 100], [985.1131631679386, 985.1131631679386, 100], [985.1625973520989, 985.1625973520989, 100], [985.2117843653384, 985.2117843653384, 100], [985.2607254435118, 985.2607254435118, 100], [985.3094218162942, 985.3094218162942, 100], [985.3578747072127, 985.3578747072127, 100], [985.4060853336766, 985.4060853336766, 100], [985.4540549070083, 985.4540549070083, 100], [985.5017846324732, 985.5017846324732, 100], [985.5492757093109, 985.5492757093109, 100], [985.5965293307644, 985.5965293307644, 100], [985.6435466841106, 985.6435466841106, 100], [985.6903289506901, 985.6903289506901, 100], [985.7368773059366, 985.7368773059366, 100], [985.7831929194069, 985.7831929194069, 100], [985.8292769548099, 985.8292769548099, 100], [985.8751305700358, 985.8751305700358, 100], [985.9207549171856, 985.9207549171856, 100], [985.9661511425996, 985.9661511425996, 100], [986.0113203868866, 986.0113203868866, 100], [986.0562637849522, 986.0562637849522, 100], [986.1009824660274, 986.1009824660274, 100], [986.1454775536972, 986.1454775536972, 100], [986.1897501659288, 986.1897501659288, 100], [986.2338014150992, 986.2338014150992, 100], [986.2776324080237, 986.2776324080237, 100], [986.3212442459836, 986.3212442459836, 100], [986.3646380247537, 986.3646380247537, 100], [986.40781483463, 986.40781483463, 100], [986.4507757604568, 986.4507757604568, 100], [986.4935218816546, 986.4935218816546, 100], [986.5360542722464, 986.5360542722464, 100], [986.5783740008851, 986.5783740008851, 100], [986.6204821308806, 986.6204821308806, 100], [986.6623797202262, 986.6623797202262, 100], [986.7040678216251, 986.7040678216251, 100], [986.745547482517, 986.745547482517, 100], [986.7868197451045, 986.7868197451045, 100], [986.827885646379, 986.827885646379, 100], [986.8687462181471, 986.8687462181471, 100], [986.9094024870564, 986.9094024870564, 100], [986.949855474621, 986.949855474621, 100], [986.9901061972479, 986.9901061972479, 100], [987.0301556662616, 987.0301556662616, 100], [987.0700048879303, 987.0700048879303, 100], [987.1096548634906, 987.1096548634906, 100], [987.1491065891731, 987.1491065891731, 100], [987.1883610562272, 987.1883610562272, 100], [987.2274192509461, 987.2274192509461, 100], [987.2662821546913, 987.2662821546913, 100], [987.3049507439179, 987.3049507439179, 100], [987.3434259901983, 987.3434259901983, 100], [987.3817088602473, 987.3817088602473, 100], [987.4198003159461, 987.4198003159461, 100], [987.4577013143663, 987.4577013143663, 100], [987.4954128077945, 987.4954128077945, 100], [987.5329357437556, 987.5329357437556, 100], [987.5702710650369, 987.5702710650369, 100], [987.6074197097117, 987.6074197097117, 100], [987.6443826111632, 987.6443826111632, 100], [987.6811606981074, 987.6811606981074, 100], [987.7177548946169, 987.7177548946169, 100], [987.7541661201437, 987.7541661201437, 100], [987.790395289543, 987.790395289543, 100], [987.8264433130953, 987.8264433130953, 100], [987.8623110965298, 987.8623110965298, 100], [987.8979995410472, 987.8979995410472, 100], [987.933509543342, 987.933509543342, 100], [987.9688419956253, 987.9688419956253, 100], [988.0039977856472, 988.0039977856472, 100], [988.038977796719, 988.038977796719, 100], [988.0737829077354, 988.0737829077354, 100], [988.1084139931968, 988.1084139931968, 100], [988.1428719232308, 988.1428719232308, 100], [988.1771575636146, 988.1771575636146, 100], [988.2112717757966, 988.2112717757966, 100], [988.2452154169176, 988.2452154169176, 100], [988.2789893398331, 988.2789893398331, 100], [988.3125943931338, 988.3125943931338, 100], [988.3460314211682, 988.3460314211682, 100], [988.3793012640623, 988.3793012640623, 100]];\n\nunion() {\n\ttranslate(v = bouncing_ball_data[$t * 1000]) {\n\t\tsphere(r = 100);\n\t}\n\t%cube(size = [2000, 2000, 0.01]);\n}\n"
  },
  {
    "path": "tests/examples_scad/16-mazebox-bosl2.scad",
    "content": "include <../../solid2/extensions/bosl2/BOSL2/version.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/constants.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/transforms.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/distributors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/miscellaneous.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/color.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/attachments.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/beziers.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/shapes2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/drawing.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks3d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/masks2d.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/math.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/paths.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/lists.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/comparisons.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/linalg.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/trigonometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vectors.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/affine.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/coords.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/geometry.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/regions.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/strings.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/vnf.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/structs.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/rounding.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/skin.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/utility.scad>;\ninclude <../../solid2/extensions/bosl2/BOSL2/partitions.scad>;\n\ndifference() {\n\tunion() {\n\t\ttube(or = 30.357749073643905, center = true, h = 88, ir = 28.357749073643905);\n\t\tdown(z = 40) {\n\t\t\tzcyl(h = 10, r = 35.557749073643905);\n\t\t}\n\t}\n\tunion() {\n\t\tcylindrical_extrude(or = 30.557749073643905, ir = 30.357749073643905) {\n\t\t\toffset(r = 0.0) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 30.357749073643905, ir = 30.157749073643906) {\n\t\t\toffset(r = -0.01231165940486223) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 30.157749073643906, ir = 29.957749073643903) {\n\t\t\toffset(r = -0.04894348370484647) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 29.957749073643903, ir = 29.757749073643904) {\n\t\t\toffset(r = -0.1089934758116321) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 29.757749073643904, ir = 29.557749073643905) {\n\t\t\toffset(r = -0.19098300562505255) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 29.557749073643905, ir = 29.357749073643905) {\n\t\t\toffset(r = -0.2928932188134524) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 29.357749073643905, ir = 29.157749073643906) {\n\t\t\toffset(r = -0.41221474770752686) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 29.157749073643906, ir = 28.957749073643903) {\n\t\t\toffset(r = -0.5460095002604533) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 28.957749073643903, ir = 28.757749073643904) {\n\t\t\toffset(r = -0.6909830056250525) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcylindrical_extrude(or = 28.757749073643904, ir = 28.557749073643905) {\n\t\t\toffset(r = -0.843565534959769) {\n\t\t\t\tprojection(cut = true) {\n\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tzrot(a = 120.0) {\n\t\t\tunion() {\n\t\t\t\tcylindrical_extrude(or = 30.557749073643905, ir = 30.357749073643905) {\n\t\t\t\t\toffset(r = 0.0) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 30.357749073643905, ir = 30.157749073643906) {\n\t\t\t\t\toffset(r = -0.01231165940486223) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 30.157749073643906, ir = 29.957749073643903) {\n\t\t\t\t\toffset(r = -0.04894348370484647) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.957749073643903, ir = 29.757749073643904) {\n\t\t\t\t\toffset(r = -0.1089934758116321) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.757749073643904, ir = 29.557749073643905) {\n\t\t\t\t\toffset(r = -0.19098300562505255) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.557749073643905, ir = 29.357749073643905) {\n\t\t\t\t\toffset(r = -0.2928932188134524) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.357749073643905, ir = 29.157749073643906) {\n\t\t\t\t\toffset(r = -0.41221474770752686) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.157749073643906, ir = 28.957749073643903) {\n\t\t\t\t\toffset(r = -0.5460095002604533) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 28.957749073643903, ir = 28.757749073643904) {\n\t\t\t\t\toffset(r = -0.6909830056250525) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 28.757749073643904, ir = 28.557749073643905) {\n\t\t\t\t\toffset(r = -0.843565534959769) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tzrot(a = 240.0) {\n\t\t\tunion() {\n\t\t\t\tcylindrical_extrude(or = 30.557749073643905, ir = 30.357749073643905) {\n\t\t\t\t\toffset(r = 0.0) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 30.357749073643905, ir = 30.157749073643906) {\n\t\t\t\t\toffset(r = -0.01231165940486223) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 30.157749073643906, ir = 29.957749073643903) {\n\t\t\t\t\toffset(r = -0.04894348370484647) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.957749073643903, ir = 29.757749073643904) {\n\t\t\t\t\toffset(r = -0.1089934758116321) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.757749073643904, ir = 29.557749073643905) {\n\t\t\t\t\toffset(r = -0.19098300562505255) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.557749073643905, ir = 29.357749073643905) {\n\t\t\t\t\toffset(r = -0.2928932188134524) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.357749073643905, ir = 29.157749073643906) {\n\t\t\t\t\toffset(r = -0.41221474770752686) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 29.157749073643906, ir = 28.957749073643903) {\n\t\t\t\t\toffset(r = -0.5460095002604533) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 28.957749073643903, ir = 28.757749073643904) {\n\t\t\t\t\toffset(r = -0.6909830056250525) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcylindrical_extrude(or = 28.757749073643904, ir = 28.557749073643905) {\n\t\t\t\t\toffset(r = -0.843565534959769) {\n\t\t\t\t\t\tprojection(cut = true) {\n\t\t\t\t\t\t\tup(z = 10) {\n\t\t\t\t\t\t\t\tsurface(center = true, file = \"maze7.png\", invert = true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tests/examples_scad/17-greedy-scad-interface.scad",
    "content": "$fn = 32;\n$vpd = ((abs(sin(($t * 360))) * 10) + 5);\n$vpt = [0, -1, 0];\n$vpr = [63, 0, ($t * 360)];\n$vpf = 25;\n/* [Colors] */\n//The color of the cube\ncube_color = \"blue\"; //[red, green, blue]\n/* [Animation] */\n//Animation speed factor\nanim_factor = 1; //[1:0.5:10]\n\nunion() {\n\tcolor(alpha = 1.0, c = cube_color) {\n\t\tcube(center = true, size = abs(sin((($t * 360) * anim_factor))));\n\t}\n\ttranslate(v = [0, -2, 0]) {\n\t\tcolor(alpha = 1.0, c = cube_color) {\n\t\t\tsphere(r = abs(sin(((($t * 360) * anim_factor) - 90))));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tests/examples_test.py",
    "content": "import os\nimport platform\nimport unittest\nimport shutil\nimport subprocess\nimport re\nfrom pathlib import Path\n\n\nclass ExamplesTest(unittest.TestCase):\n    def test_examples(self):\n        def get_openscad_executable():\n            OPENSCAD_EXECUTABLES = {\n                'Darwin': \"/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD\",\n                'Linux': \"openscad\"\n            }\n            return OPENSCAD_EXECUTABLES[platform.system()]\n\n        root = Path(__file__).parent.parent\n\n        def copyWithRelativeIncludes(src, dest):\n            with open(src, 'r') as srcFile:\n                with open(dest, 'w') as destFile:\n                    for l in srcFile:\n                        if l.startswith(\"include <\"):\n                            incPath = l.replace(\"include <\", \"\").replace(\">;\", \"\").replace(\"\\n\",\"\")\n                            relIncPath = os.path.relpath(incPath, Path(dest).parent)\n                            l = f\"include <{relIncPath}>;\\n\"\n                        elif l.startswith(\"use <\"):\n                            incPath = l.replace(\"use <\", \"\").replace(\">;\", \"\").replace(\"\\n\",\"\")\n                            relIncPath = os.path.relpath(incPath, Path(dest).parent)\n                            l = f\"use <{relIncPath}>;\\n\"\n\n                        destFile.write(l)\n\n        for f in sorted(Path(root / \"solid2\" / \"examples/\").iterdir()):\n            if not re.match(\"[0-9][0-9]-.*\\.py\", f.name):\n                continue\n            if f.stem.endswith(\".x\"):\n                continue\n\n            test_scad_file = root / \"tests\" / \"examples_scad\" \\\n                             / f.with_suffix('.scad').name\n\n            print(f)\n\n            # call example (generate *.scad file)\n            subprocess.check_call([\"python3\", f.as_posix()])\n            # copy generated scad file to examples_scad/\n            copyWithRelativeIncludes(f.with_suffix(\".scad\"), test_scad_file)\n            # call git diff test/examples_scad/{f}.scad\n            diff = subprocess.check_output([\"git\", \"diff\",\n                                            test_scad_file.as_posix()])\n            # make sure there's no diff\n            self.assertEqual(diff.decode(), \"\")\n            # render with openscad\n            subprocess.check_call([get_openscad_executable(), \"-o\",\n                                   test_scad_file.with_suffix(\".png\"),\n                                   \"--preview\", \"-\",\n                                   test_scad_file],\n                                   stderr=subprocess.DEVNULL)\n"
  },
  {
    "path": "tests/run_tests.py",
    "content": "#! /usr/bin/env python\nfrom examples_test import ExamplesTest\n\nif __name__ == \"__main__\":\n    import unittest\n    unittest.main()\n"
  }
]