From 091110b49aab1bcefbd6184515e0289aae3d6fc3 Mon Sep 17 00:00:00 2001 From: philipstarkey Date: Fri, 19 Jun 2020 17:42:46 +1000 Subject: [PATCH] Empty sphinx project following our template --- .gitignore | 163 ++++++++++++++- docs/Makefile | 20 ++ docs/make.bat | 35 ++++ docs/source/_static/custom.css | 63 ++++++ docs/source/_templates/components.rst | 47 +++++ docs/source/conf.py | 223 +++++++++++++++++++++ docs/source/img/blacs_32nx32n.svg | 178 +++++++++++++++++ docs/source/img/labscript.ico | Bin 0 -> 98716 bytes docs/source/img/labscript_32nx32n.svg | 186 +++++++++++++++++ docs/source/img/labscript_64x64.svg | 42 ++++ docs/source/img/lyse_32nx32n.svg | 256 ++++++++++++++++++++++++ docs/source/img/runmanager_32nx32n.svg | 267 +++++++++++++++++++++++++ docs/source/img/runviewer_32nx32n.svg | 223 +++++++++++++++++++++ docs/source/index.rst | 34 ++++ readthedocs.yaml | 27 +++ setup.cfg | 14 +- 16 files changed, 1772 insertions(+), 6 deletions(-) create mode 100644 docs/Makefile create mode 100644 docs/make.bat create mode 100644 docs/source/_static/custom.css create mode 100644 docs/source/_templates/components.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/img/blacs_32nx32n.svg create mode 100644 docs/source/img/labscript.ico create mode 100644 docs/source/img/labscript_32nx32n.svg create mode 100644 docs/source/img/labscript_64x64.svg create mode 100644 docs/source/img/lyse_32nx32n.svg create mode 100644 docs/source/img/runmanager_32nx32n.svg create mode 100644 docs/source/img/runviewer_32nx32n.svg create mode 100644 docs/source/index.rst create mode 100644 readthedocs.yaml diff --git a/.gitignore b/.gitignore index acb10853..85a021d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,161 @@ -*.pyc -.eggs/* +# This gitignore file consists of 2 parts: +# * The standard Python .gitignore rules from GitHub +# * custom ignore rules for the labscript suite. +# +# These should be kept separate so that the generic rules can be updated with a +# copy/paste without having to worry about whether we are removing custom rules + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ *.egg-info/ -dist \ No newline at end of file +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# +# Custom labscript suite .gitignore rules start below +# + +# Editors +.vscode/ + +# conda build results +conda_build/ +conda_packages/ + +# Sphinx documentation +docs/html/ +docs/source/_build/ +docs/source/components.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..9534b018 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css new file mode 100644 index 00000000..d766bfa0 --- /dev/null +++ b/docs/source/_static/custom.css @@ -0,0 +1,63 @@ +/* Add space between collapsible details HTML tags */ +details { + margin-bottom: 1em; +} + +/* Darker pygment highlighing of console input/output */ +.highlight .go { + color: #404040; +} + +/* White captions in sidebar */ +.wy-nav-side p.caption { + color: #f5f5f5; +} + +/* labscript blue, alpha = 83% */ +.wy-side-nav-search { + background: #2946bbd3; +} + +.wy-nav-top { + background: #2946bbd3; +} + +/* labscript green, alpha = 75% */ +.rst-content .note .admonition-title { + background: #00804fbf; +} + +/* labscript green, alpha = 25% */ +.rst-content .note { + background: #00804f3f; +} + +/* labscript red, alpha = 75% */ +.rst-content .warning .admonition-title { + background: #bc294cbf +} + +/* labscript red, alpha = 25% */ +.rst-content .warning { + background: #bc294c3b; +} + +/* Elevation +* +* Style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: +* +* https://github.com/material-components/material-components-web +* https://material-components-web.appspot.com/elevation.html +*/ + +.rst-content img.screenshot { + border: none; + /* MD Elevation 8 */ + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), + 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12); + margin-bottom: 24px; +} + +img.labscript-suite-icon { + min-width: 32px; +} \ No newline at end of file diff --git a/docs/source/_templates/components.rst b/docs/source/_templates/components.rst new file mode 100644 index 00000000..f9669391 --- /dev/null +++ b/docs/source/_templates/components.rst @@ -0,0 +1,47 @@ +{% if current_project != 'the labscript suite' %} +.. toctree:: + :maxdepth: 2 + :hidden: + + the labscript suite <{{intersphinx_mapping['labscript-suite'][0]}}> + +{% endif %} +*labscript suite* components +============================ + +The *labscript suite* is modular by design, and is comprised of: + +.. list-table:: Python libraries + :widths: 10 90 + :header-rows: 0 + + {% for prog, item in programs.items() if item.type == 'lib' %} + * - .. image:: {{img_path}}/{{item.icon}} + :target: {{intersphinx_mapping['%s' | format(prog)][0]}} + :class: labscript-suite-icon + - |{{prog}}|_ --- {{item.desc}} + {% endfor %} + +.. list-table:: Graphical applications + :widths: 10 90 + :header-rows: 0 + + {% for prog, item in programs.items() if item.type == 'gui' %} + * - .. image:: {{img_path}}/{{item.icon}} + :target: {{intersphinx_mapping['%s' | format(prog)][0]}} + :class: labscript-suite-icon + - |{{prog}}|_ --- {{item.desc}} + {% endfor %} + +.. toctree:: + :maxdepth: 2 + :hidden: + + {% for prog in programs|sort if prog != current_project %} + {{prog}} <{{intersphinx_mapping['%s' | format(prog)][0]}}> + {% endfor %} + +{% for prog in programs %} +.. |{{prog}}| replace:: **{{prog}}** +.. _{{prog}}: {{intersphinx_mapping['%s' | format(prog)][0]}} +{% endfor %} \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..50a52e5f --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,223 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +from pathlib import Path +from m2r import MdInclude +from recommonmark.transform import AutoStructify +from jinja2 import FileSystemLoader, Environment + +# -- Project information (unique to each project) ------------------------------------- + +project = "labscript-devices" +copyright = "2020, labscript suite" +author = "labscript suite contributors" + +# The full version, including alpha/beta/rc tags +from labscript_devices import __version__ as version # noqa: E402 + +release = version + +# HTML icons +img_path = 'img' +html_logo = img_path + "/labscript_64x64.svg" +html_favicon = img_path + "/labscript.ico" + +# -- General configuration (should be identical across all projects) ------------------ + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosectionlabel", + "sphinx.ext.intersphinx", + "sphinx.ext.napoleon", + "sphinx.ext.todo", + "sphinx.ext.viewcode", + "sphinx_rtd_theme", + "recommonmark", +] + +autodoc_typehints = 'description' + +# Prefix each autosectionlabel with the name of the document it is in and a colon +autosectionlabel_prefix_document = True + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + +# The suffix(es) of source filenames. +source_suffix = ['.rst', '.md'] + +# The master toctree document. +master_doc = 'index' + +# intersphinx allows us to link directly to other repos sphinxdocs. +# https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html +intersphinx_mapping = { + 'python': ('https://docs.python.org/3/', None), + 'numpy': ('https://numpy.org/doc/stable/', None), + 'scipy': ('https://docs.scipy.org/doc/scipy/reference/', None), + 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None), + 'qtutils': ('https://qtutils.readthedocs.io/en/stable/', None), + 'pyqtgraph': ( + 'https://pyqtgraph.readthedocs.io/en/latest/', + None, + ), # change to stable once v0.11 is published + 'matplotlib': ('https://matplotlib.org/', None), + 'h5py': ('http://docs.h5py.org/en/stable/', None), + 'pydaqmx': ('https://pythonhosted.org/PyDAQmx/', None), + 'qt': ( + '', + 'pyqt5-modified-objects.inv', + ) # from https://github.com/MSLNZ/msl-qt/blob/master/docs/create_pyqt_objects.py + # under MIT License + # TODO + # desktop-app + # spinapi/pynivision/etc +} + +# list of all labscript suite components that have docs +labscript_suite_programs = { + 'labscript': { + 'desc': 'Expressive composition of hardware-timed experiments', + 'icon': 'labscript_32nx32n.svg', + 'type': 'lib', + }, + 'labscript-devices': { + 'desc': 'Plugin architecture for controlling experiment hardware', + 'icon': 'labscript_32nx32n.svg', + 'type': 'lib', + }, + 'labscript-utils': { + 'desc': 'Shared modules used by the *labscript suite*', + 'icon': 'labscript_32nx32n.svg', + 'type': 'lib', + }, + 'runmanager': { + 'desc': 'Graphical and remote interface to parameterized experiments', + 'icon': 'runmanager_32nx32n.svg', + 'type': 'gui', + }, + 'blacs': { + 'desc': 'Graphical interface to scientific instruments and experiment supervision', + 'icon': 'blacs_32nx32n.svg', + 'type': 'gui', + }, + 'lyse': { + 'desc': 'Online analysis of live experiment data', + 'icon': 'lyse_32nx32n.svg', + 'type': 'gui', + }, + 'runviewer': { + 'desc': 'Visualize hardware-timed experiment instructions', + 'icon': 'runviewer_32nx32n.svg', + 'type': 'gui', + }, +} + +# whether to use stable or latest version +labscript_suite_doc_version = os.environ.get('READTHEDOCS_VERSION', 'latest') +if labscript_suite_doc_version not in ['stable', 'latest']: + labscript_suite_doc_version = 'stable' + +# add intersphinx references for each component +for ls_prog in labscript_suite_programs: + intersphinx_mapping[ls_prog] = ( + 'https://docs.labscriptsuite.org/projects/{}/en/{}/'.format( + ls_prog, labscript_suite_doc_version + ), + None, + ) + +# add intersphinx reference for the metapackage +if project != "the labscript suite": + intersphinx_mapping['labscript-suite'] = ( + 'https://docs.labscriptsuite.org/en/{}/'.format(labscript_suite_doc_version), + None, + ) + +# Make `some code` equivalent to :code:`some code` +default_role = 'code' + +# hide todo notes if on readthedocs and not building the latest +if os.environ.get('READTHEDOCS') and ( + os.environ.get('READTHEDOCS_VERSION') != 'latest' + or ( + os.environ.get('READTHEDOCS_PROJECT') == project + or os.environ.get('READTHEDOCS_PROJECT') == 'labscriptsuite' + ) +): + todo_include_todos = False +else: + todo_include_todos = True + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_rtd_theme" +html_title = "labscript suite | {project}".format( + project=project + if project != "labscript-suite" + else "experiment control and automation" +) +html_short_title = "labscript suite" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Customize the html_theme +html_theme_options = {'navigation_depth': 3} + +# Use m2r only for mdinclude and recommonmark for everything else +# https://github.com/readthedocs/recommonmark/issues/191#issuecomment-622369992 +def setup(app): + config = { + # 'url_resolver': lambda url: github_doc_root + url, + 'auto_toc_tree_section': 'Contents', + 'enable_eval_rst': True, + } + app.add_config_value('recommonmark_config', config, True) + app.add_transform(AutoStructify) + + # from m2r to make `mdinclude` work + app.add_config_value('no_underscore_emphasis', False, 'env') + app.add_config_value('m2r_parse_relative_links', False, 'env') + app.add_config_value('m2r_anonymous_references', False, 'env') + app.add_config_value('m2r_disable_inline_math', False, 'env') + app.add_directive('mdinclude', MdInclude) + app.add_stylesheet('custom.css') + + # generate the components.rst file dynamically so it points to stable/latest + # of subprojects correctly + loader = FileSystemLoader(Path(__file__).resolve().parent / templates_path[0]) + env = Environment(loader=loader) + template = env.get_template('components.rst') + with open(Path(__file__).resolve().parent / 'components.rst', 'w') as f: + f.write( + template.render( + intersphinx_mapping=intersphinx_mapping, + programs=labscript_suite_programs, + current_project=project, + img_path=img_path + ) + ) diff --git a/docs/source/img/blacs_32nx32n.svg b/docs/source/img/blacs_32nx32n.svg new file mode 100644 index 00000000..d6a2b0e3 --- /dev/null +++ b/docs/source/img/blacs_32nx32n.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/docs/source/img/labscript.ico b/docs/source/img/labscript.ico new file mode 100644 index 0000000000000000000000000000000000000000..28288fc88c1d3c2808ff74beee2b3e5fed11249d GIT binary patch literal 98716 zcmeHQ2V73y8^68nv@$NCbC0>ib7>&B_vTvBvDdn zYux`i<@CQDZ*JH7_VbhXem{a z7YY%CALwh{x|Ws|BZv}70U%LJ-)&0}BCUX?N-cc~=soHyKDkEGoqE7ZVf+6BA;+6cc292BjPnl3%#W0nFj& z+MEi6!yLn0OA-W_A-`{vB8ZlvES8;^px}KlzG^TKwlxiZUQ%R0Ic`6z)lrzzg_EAf{*)e#vPvr@E9@0a^eqo!8yTn4uEyT63!j! ze3B9qCAawb@p1o;;f~J(|IM38h!qt(h$X;uVq?|;c&-QJ>mBbEq@~Eyr%v&)|Bqvj z=EA9yCrOAIHU|m;w(z##&o&YKJRi;_KK6g!H4K~s_&NZu3jp|F8gSmkSgbYJoZ+we zf5<+M_I+yY=j)5F0VJ3Mt2m(#@9P2V>)q3X=Xz9o{Pv%>4sbXpEaG&ZP+X9;jk@nE zwp1V!pFij0{|E2?aDRo@YWTGwe1=3_1HiMSR`|XTukZQ$`=7VJbHdEm#|J+S6jPrW zf$KwfU%yU9RjC92-t8a0-&5xSyieCzxnmu^5Nql^0q`905fy)UPnW9CZ~yu00K8XB z#TY(2hQ|O2f@ll+>z?1k=L(PG;`sPCqx~Q5zwj9id`?H11J&Q(+p(hbks3pW@Ud@Z z*rW9uJ~yOd4ekj}{{AjUT|az=i{$zBpTF)?F@(>KsrY|?U+)UFFW}%oKK{*g|A+4n zP_YK@YK8(jmD(2-b%T$8GsPdiLqf$GyepIp=v-$*f49~Yo@0;Z16&6<#muDdXXE=7`#9b>&17s)_D{z@)PVan zAK{JHH^vR-8vmb-?^o>Oc;ocnhChxOuW6?F#O3M6gUi#=INmr-r;qdh^!=YMzufZi zd@-fz{4=$OHIUbhwtw=&D7qb z#2AuVnCi#HrjgY0Z|ifLUvBm3;^nn{9B-Va8&7lNbDLjo_384-Yx_9fI88U6=EmnX zzufB6<&)R;alCPwZamG6&uxCW)u+oRukGV_<22oPa6a|kKWyWCI+_>v@2NKE{Na3V z^UJM1J|3LrwS63KoW}jr(art(k1l>***ZT{c4ZuRke;54u8<9OpV?w^k4 z-bae z{lhk0JUE|v?;o~tJ{`@iKDYVhR-Z0DUfaj_cbujhPjlmQn_q7A>GH{I`#9b>O*fwA z#^*M_-0IWilh^ifym6XtJk5>IZGO4cr^_d=?c;dkG~IY`{(s^AznyUixzBhG8Dcb? zgzrT&Dct6lTYWsAIL&MOINmso`=_IS_xb zr=x#2{yQ~iG#U0V_jK{|8Xw#rukGV_<23G{j{e>FUp5@b$DhIPm2tdrnhtNA|GV+0 z+dsJBUmrV=zyH(Bt>%n>>~d>9{(mX{aNke6f18j0UxxoRliuWAdn@ww-NxO^raQji z$4jO(ukGWKgSy@@+pH%4b)6}svwSQjQ$MMGLj~_phe^Q~#PgBRz)c$#GAIBS~ zKYjW{{z-){KTRD=Q~T$&eH?F`&d$yznUtAZx{%buL>J1=9eJx>VX9A;A3A%#+dtj- zxQ!3DkK>KgIXO8blY(FWGtq^z`1@N-_383MXYY6WryC!)@!|Gyym9*T=g%aQg5%Fb z7s}%KXR1$^A3A%#+dtj-xQ!3DkK>Kgxw*L{lY-;VL>J29`Ddz6mmfNNzuQ0E__&P^ zw~ynE(_g-PA(<2$eBh%xe7JoaZ=BA{%OjZ-9DgRdP!`WW zQ+>Mp(AoRl{^`cYZG5Z`ZxP2UNoc{XtE6JoJr9UF6g^4bdefjKD zy~0$VE&k<)^7*X=?wxwvXeD(?vx^5`HX@=q#s`DyA{n%Y0F?c;dkbZKcR$)wEQ){UeVCc02|{-`_T(ovVl z{Uhg+7s31cQReE53SEBa#smFR3!Oa9=hi=N52tx;AIBS~%gV|~CIvtLXQB&boBI8I zy7A!W|8(*=pAH{fo+-_1`#9b>U0z;JGATIzOmv}aQ@_7YHy#{+I(eK=hYv2#l;*X4 z9B-Wd_U#+Vq~Q27(S@>2{r*1PcyRpb(#7|ye7Nryq$bhEg5%HY@iVoD%hSb=%hS;~ z-Z))dT}?76IQ~p@p)6f|O!@Hr{Wz!DWI=LbqvF8v=k@rR+Qa4P;>YFbXdG{xCK+z; za*{}DVW>`v|F^;d@@FMIA&aDzs`4^ML&$htL{bYQWgtw44^w-%Jg@EJc;htgzo}_n z$Jf;3#qBrs_<3y~#~Y{d_?nvLb$m@dUfh0DkDu4}alCOFkFTj|UdPwe+Ri1YN3 z^XX`AHOh*ZuPkxKRzCu=CyqsZ=A;c)6snVfBfbv6*Id0(ebIaIJN2YaXyYW zPUG@)G#`IH{?s`@H(zi*r#VgS!{u?B+x44Ued<_$M;p%v9gXkrI8CRI^QqXwHq(tR zXLRA~KSS3uJH|^SF$3Qy&+@8PxZvCc?54X<= zb7~(hPe*T?+P=xKhid}e_Pg=p)_+sShuf!O&8dyc)6thkb>rjT<67N)2)cYR<@0)e zal)M1$8>z5Cf%D1fA|hB-NtQxez$&8$A{aeV$G?I%hS=jCn+@<{_!q0bnff+JA@;x z0w#d;P>r!^Nu-BrS_Osz$S$fGs{bI)33F=S4+=CLR!*X1Q>+1S-!DviMdSVV-~UCp zpqh5T3xy=5xapq&FsDz)!L zVq)_Qo*xzY{CPrs{DoM_VuAu!srX;KaDktxW}1QEvuEq$FDMWuF2veO#oyi4rI|+0 z56jhgO+EZYg;@ULf`U`2`0HtD@e|cdGoUkkcs=|9_ERJXqAeAF31J~J^Zol~nt{JJ ztPkM-__Yubrs7}Sf*=$Lu!*u*anw2B@9X>bCaRf6zS+lzialrxK7iQ6O`OGAO2xm6 zigL|2z?x|){<^T>H>bLFQmuzS*yrtP(I*H=f@lTsFQLwXfP)ABx;!=4fDi89Uk`hL zbFmabv_$yVtO0_o?Nt1g+A5NH;Qw>*w?8`r5JQM16vmW+v-xnu{4mkdh7GtrTsq+N30}mhOXYmisz>$Ce9D5RAyoM9@-}^)X zKY=<2q{YR^>({RRp&9slhkY$Fl7!e%u>|M&&j8LMKfxa|djg#zs$NSOY5pAegQgP1 z9%4qt5Mm0j?eR105f9uKnhfNtsQPd&@s9=n{Ye1Ve0;x$SOQEf5x$M7;q@UEf7G5c zdlvt?;6FGG;CViWbG@210AOj`7|d~*?{lEuIsoSZyq%)iNn}om6JG`Iow`mjERaJ!(?y#?r>6(u) z$LpGNLhQPLIuGD;g%R4?B-_oEybv5r!gomEdcL4HV|jM zdxgI_?t1h8FC0q=#H6A7dJTff1p_`as$CBRAN_^-{*TNz!G{n7hy@o=a;*yAApz$a zQ)}NP6SxA_pjTi{d;z82yXE|O@=M1Gn8Po%ITg49a}08Ah2GuZ7Ce$<|KEfFIA5v! zKS>a}B$-d8Wk@obN(+=QZ==$P(ik|^~2KX7^XP~)cfL%Wj+T%fVefb}bFX{F9qBxBo&+y|NemumFm-z9N zdbqAR-bPag0FKA?9D?I@JqO@;PBj1y*YGBREGR0V2-N%q4IzTKC0$zpg*H)nX~`{e zQj&R%J&%L3^3qa%z<>zU9igpN68Gp4nF;P)HKsgz_>df-rCAJZ09*M?bdh~%1C1H= zajLJI)qcAP)`%ZtHKL}C;)VT&;P>;kVZANP1T3}oC?xIbwm2N|H}r0 zYJ6Tc7)a~?^XJbbUZ6i}AC*RJG=BKoQ0O1lFn(A=8BR2nhxEbZtJ}~w)8PMmrf$$4 z+EAOS5Bl?q zrt+XZn8W$+Gcsy)nEc6j_YUgjDacB1Gc`6UVe)Q1^k-sdPz-dp5a6B=v;oI~;-Rad zEYbz~Ty1cjX$?wmP|!NF1>B|Lu+9+h9#bnh*^6kur5h(FKGcOape;CXSj$Sb$ah)2 zx+4DZV~+bEr~MM|gSyZLv;}RpQINX?X3JBuyr<}94IkVgJt z8+9`Z!Oghg^IteVXp4G`gX3m$j7Qj@8tOtD$R-+;$3rEnLI z^b1o&jf|~~gj=5T@nQSiky1LT6q@+>Wk^8Cix)PV{^|A3Vx^&++|m&{E(nKA5+2iK zguE4NkC47e+R!DtoZ~B1JLxZbqn&j_BPvg~&(*9$g$LT_ZFdZJ6iPj#y=}s!G1KOo zdf1xG6+axl!^D%_Mo*NmAuJ|}j-Gl(G+oeKyoZavNq|s^{$Uf7mQy#X85-EBvU?_a zs2iP*wFKraAL#q- z%m&#(U6-n_y1Biht$^)TiyO8nJvLc(6Ko|OJ$P(hSM{?w!nfxx6*F6NX7`pn#r^@| zy-5jTlBs&yHgT0#gSC@JdsL_lIMr2i)DD%=Dw!@R!Orq}GfW4+lowaI(?2g!jLD>6TUhC^CIelr2kZ*fU zkvXw`BgQ>WpHi~Z#Jh4W>wWMH&(Nzm`7xr(fhSIM+n3$?)ui;kL}-XtA7gQqc^9k| zO;wf}Uvb`d!n+_N*80VxwpS{@+T^df9wP32Z-a}D@~%G9{MyV~BfL22!_AAGR%Lg; zqn;8LERwy_u)SH4xXS%Ocenhbp^~!U(*C5JJE>P4^9#u0_D_f?8f?q#YvXSz#FShj3n-@U_yt160bi7wVLG%zr@Fhi2qy?6ez z*s#}AIxNz(p3XWZsXoThQEg>KHlFEFamy|acpnhw6fSU0}nf5-L+b;uCuK)UH7Y|x1o);AR zv|-;CdA9YMj-Fd?>5DH=P?7cD+fj z*MkN<)gGj<?^nM_;-q@-D&M)_CgFec2g$ z$Ik8B*X}^^`J-#2)O%+th0Q3veP7o;yQALM5OFOfZ7|);+&bNPmXH9aQcMep0@J|- zB6&T)a-@BUC~^wQ*|+#a;jNCHcJJwLtrZ-R?KAt%n*ArTBDTA)`r4Ik(`EIIwT73@ zcbGSK?qL=8UTcaz21mRxTt3F;lbfW*oGXPcESAxVIVz&vQ(Kfh6^kA`p`X+6a)I>6 znoF|oo4p^X?OYOlZFTtYHrwtEjN5U#d-cbWoeAp`H@d2v91!no1J=hUO%jQaQYP1!j$o>&IecQ)6N+#yR{;2pT;eR zNFif^g)$u?g@&nLFWn!PyJgp|jaA3rsAy}?aC+mVCKeFy*-_ifak__z-poZ-PQ4_F zEvz{Qdmb2U)5**&P-rU<7gsni>-lz8hDTmM0b7l<)A?l%b1X}}y>9lm|E!qB3L79@ z)>q*2x@g&x7w4?AG&T$#XkR%ci=|)Pf*mFTj$3c@xF@`YoR$H9@>9KH^i&BDtC+Bok?PIKGXs=)^q{5yFgf3OD z$j~AU#ZNB|5B5tr-m%t)EL$JnLghF$JuAsHoo z6&`ypCY_c<4T%ldD!07okg8-t=YylCYz}phvd}8aFfw{3BctcJ?$%rFWYLW~<*m^>Dr-f?jBG|5g)Jf=<02UiuG$-IppsDk{e!97I$o7Z0@MhM>PjLF_u}= za>m-C2h~9a8XKZs=zrNI@!tM)ba`jZjIFbzM@0J0O|+IX>T@hJCL_+a=x|<1&h*t^ z18l3hx7t$`KpHxYJ(_Lq75KqNXiItVhJ_hs2d;{&beph_takLs?(Y?NLQCLS$6W6) zPx-t#M-$sW$hWGNOSG0XGFr`AI7_|vx6v)FzNJ-v?4@d9vYM4Ysd$o-{%xJtGfxi} z3OuD|M%*vHcITk*zDHgI@&B zCZjFYH0_jZ*X6xb2yK};OK{vnol;MCN!Houlfxn|wXYOSJ`$5PVyM~4d%a|0(gX{t zQZ@GU&4{00A>R9G#$+93_9Bh#FAPK7W3s)2BA*1c-1$7cc;)Dj^1@p$Njt(L; z%+-mxc`13D7FXF%T4P?-c}1pp`q!lDSck~UIME;j-!pbAb>3gmPAhzH#y%=oH8?SH z>fv!!BbQziQhBDRKy1CchwvJFS4i*JfNn&m%>x8vZG6SqCUYLV5mfQnm|dRJG!&OgIAk7iH(+;kw0r{xY?otd0-BT&SBvm zi~R)@TxPJZiw5pbsal$r<(J}YHmpT%a<^N94X3}Ge7!Gmy47HTd&Byrw6vW;RCpxz zS)+H;>22};!1K57-z?5Qu}@Lsvfv4`Pu>F-tn{-fj(H)h7(lLYsc3V26eyseeZB*1y(cFRCEIp0RvA@c(Q&Lv$FAkWP{w-4XRtx__-o8a; zSxdr|-NR$EO3GF%^cTpjJRu@enb|AR+Pqh^oZi}Rv*&2&Jk(t)r;+n?$??s(k8?%G& zowxJ!xvMU#q^{A~f%Q*A2NRWHx$q1*n| z+FWw()B{-xUWdtJGMSwTAHOeA0fu=|*=4I`z#IU18TQ&;*E`KUvA_{dI6p%E0FuxE zlVi_Ux#$Py!-v_+lpNB#+%w5F`^t5LEm`k_j4CRgUMGW2`^_qMCI+Rsfo1dQtZQwP zN>-*-bdSyL9DeQDyVzr0Kc%_9?x8Gj!F6TqNoR7JbLBPB8ZXn+Ze*7&&vRewAJ7@h zaR;IFuO*h>MaB?)m&|fxwtY8ChaAfn2%fnpp5D zjeOBjcO;nE834rGGk#{J)nFCh=`QW^)JAuFvRlg2Tb9bKl7Jl`&8w>4%~G?A$}?Em z(@uBl)4O1RmJ^h8^MHdfqZN7GpH`e7?pCv_fq9ltRl5CS)nujb4pd@3RacBE zsyAuTeJ-7e36eQD5xc55rUU$`QBx})H&i`TErbs2d; zyY~#I-R_3Pvz{3G&jO=MJ+D4HBjenVvQ>+vjHSoMx`r1S8t*$jytj`)n$WQeE*H;< zM6Fsi)WvO@lUhr`F+|I-ZLR`Z-)v83_g53yL#TCXuXFD1Zq2HoTZh#K2$ zIy*dD7A`10n@e29Cwx8L&SIUoUdZFkmU|{vd1v=GnE)VN>QLPJK<1kx!zG`|DzICK zi9gc0)-EAPUDfLA({`a9zyW3E%hEB&a~B-Yd^99?mY>L&%VD#(_frt|C^>aOOV3l< z!A>{1Tu3dXhZzw+F2dBN;<}r2WKObj>e^hhYe)2K$WeV}vc4~sKdfyhDhC|?lEXS> zA5a7iw5dfgbNo^=uJ?_;@uo7)!TDN}u=#79Pn&mhToUUo!arE9Tc>-F9rgeZb~PTB z&LBc_x2LTV#}{#=zvpW#dwLr^yNY8&GsW3CtS%)Hgu)Uvb0wCM2i-9A9PeKo?<6Ky zczHY-uw-y-yi~y%fA)^-xk{Gcq#(j+95^?a2zv(!EbQCsf*BBPucJ2BNo>55?$F!u zLWi$Dy^$+x;nec&p!Lzu9h4?|$`uqinpTb>_T@Y^_i!(?o1kR;@`T@Ff4A$&r=&Z- z%gEYQwwDmoJvY_=Z1l`T>-Dx}D*f#DZ#_NSH{+(Zo4rqfID1Q%KB+4fYE;LC$0hC- z+$alXt*DmE%2{2yizmMA&?dXUaZcp}UC|E_#1|WK!7$%V?W#Re_jSA{vpo8Uu}t>y z!rnH<|sGGT(K%JHkLJCQ3?G_0yJBsxi$ zxw>kL9ME}r+T@_X;k&2T$7fA`Ez`+IZ|vrNQ?@P=)C+a&IwS_1PqqQ)ljqb`*7*{Z zBQA-_T{VB=IN4{Bf!MGc52uWuc_c#Fu%*ZBtYF!T$rn^j4@$IZv-{K+Q8}a8Nx}cb z=E}cZAf_q-dUy91knI}yZrhRrEyP;3)4w@D;B)dFA-x@5Yc~_?TW;7mZ@`If+%Of&Fch_he1idtf)Lq?7DyFaHA%K7dnzt~=tCmpJsDtx_6E z3aA{Lk~2|#=t^xDog1=-JH#s8bk#-L3W$08v*(CMU#z@J^gb!^#+?*Qtm+gfd#&)X zb4>N@X}c`L1-zz_trtEu}ZZQPXPI1|u`wqY>_g@6%5k#YczP zo$OQ`cJS-nQgWDe#O|Y>UEfEJbG}je_1*0F*4`#tZ+Z3#Sydn(J5YXES990OF4a$6 z%tRh#9b6H7?%bVA@l`XNbiGfBZ#v{A;ucjXq$BdaMfd88_j|?1cD_G>@IL#Yr-_+a zY_k8P&Vw%P&#sn#IzUv$ZBs}_-=#My`k5~rDzY(seRsDHql}KJZmT3t44FI<%ns>} zT3$US^qus2L8sv#zBs#WsC3C%NeVCZ-?2F$pzP9w6E30PGM>2M5VY`)kLA6%87Cv+ z4TWZB+#Ne5H2d}JJ0(*lrSIJCzEFMqlh!wF*UN4{xF{vUsr`vrPQn%z7J7z@%3Qz& z!>9QjG?v}IdU!{vsm;N!)FeHc6{3PJp=ddW*G*hRy?fO zy1UK$X-XcQQi3Aej=h$Xw9_yBncSUEb^_rOiOV3T%`~3OD-qT8kZ+t(jub!UafXh`6U8XzS zNj!D#oYbVERw)wGlTz=hwAisavi*tcf_l?VTFi)C5wqWP_u(aPbb|a_j6W0ZT-vd+ z$mf$kM_o=^9QY0?09x|fX?-TXPewdM!B8rp*_X$+AgZn`kvbPvU;9Q-^j`bPsX|3>l|h`%UgDw z+hK6$WbB2Wb1fbWR~;b8&RFwSCqVgp)Qy%lHZu>b{vhTw(oZd>&x{Dk@YLZlmX?-B zTFSiCAG2{r>1wqN9v9>ZBGMtidQXagL#wsE9eY32{}NIB^3sBS;P%7dH;P>(3{+&J ztD@Wpf1Pg&1`i&*{^F*tD)UWx<SCs0kHM-Bud?z}9s8}p_1%*Y1*PiJ?B5VBI4+-?%A33%mUnx(F*<8_S(1X#Ye6^bCzFyyY)MZ z!6NF03I;_$^GUaq{=Qvhmo2>F+-{?XW4zLaUgxiLXftE5xQ&esx`&$Pyktn)lnBYy ztM{)PoBnEWkFex0*CFPU6{{cXwmu4;8^AlcF2smgO7?!>F6!#6&3CUJeH?T3=txz~ zUM=)*4>Szi)%Ccc^?13j>UPFyAN*nB4i}aPhdc>m>5lY@FJI?f{%YR7(@CT6b(ecD z7-+uyORBhrhK6GQ!@43xd7c7--;T~X>1R@S;s}`aCZ>g*05f^MSEmM2db~F0Xt8X7<+HQ;&mo6 z^8Xyayj0UXa_9@E*wXi7zWNTZ)e`Vfb+Ge1HAMcUjb7T*ms7%ryN$g)%g6fi-WIA~ z1fGNoCwCsbJW@4N**4N%j=g23pzlOe>G%!S@t%y#m`YLMN8Tv7K#bDov zPx@XtUHVJNx$M{5!R{^aepHWHVRrHIhl4CERqP`S0uJqXuMsQKO~Tt-UeV)8Rxg!h zk^c~jg>JWdINIvy*JHX{_sd7$Pww<;|GeaZrV<)r@~>DQyB;_3-13P?7Bmr!&hs60 zd<`*#@YC~Yr#g4DP|1kH<|ZMx1{%t>t283~f}}6^AZ4`kduBTayRgCY8Df;tIKyE5 z*=ylj9V(#cfr8%ZfUlErdaDD7z)hrusOXY5^71dF#6;oO$LpRt@}doGDk>->N{Wiw zLtix>zyE60xL0UQ)`0ViAy(sXV z>bz=ICAU5rtG{OD$_h9Jm;1~?IMUpYkB#X!ROBMJl}NVgjk@t z2C<=&=QaQ3%a`zL45e^xQ*Do4CsvOh-~akg=|DZxdQaowlYaE(2-Pl>!~4;GMU^w8 zy!`|F;oECeK2D=I3-Fq%1KWsC?dRnG&D+#^{@$cz{FKJ+;xzKdsh^X7ruoP1;xtqL zzncG_`GGu6rDcD+_aU9Oe%Qmvi`!-gyZnuxUmxWOaZ=Y zu0!GVC!k-C9c5Ak^Fo~uyc!0y32l!t8CeA5rCfi4VbpA5QsUyv;Cuk{g6F@^hcz<&KFdu&4!wdYHU65GqZ7VF&A4%|~ zh4DbX24^t0Nei=aRJcx zi$AO2d)*-R=ALpSEDiabJT!`gp$Ii>G)`zsBWx0iW}8PAFu!I{U7(=*m#g$W93oY zs7CsD&5yrnkNTE-(fswF^ViEzez>ja@S@}6{u?Wga7Q(62hrTF z|BjkF$#VuejXuXkeo@`nc$mtgxKWMt@tWK9k9t0i$HIxm{o^t?AEz5DkK#r(ZU@oa z#*dHZXLOXM<`3tQxI7wHLv>^2QQW9*$lkvd{|$>_WKzhf-xmJ|@E>hBl~-xcNmw}X zU|(`lMonpmkK=*MajTEpqw|O45$>qQzaqvf8Xpf+yG->PE05wvbxuwW$*GL@k|$x| z#DjfPhDFzuhWPk+a5--EaeH+BkUWYT)w#L3B&UM*e@;Buhwkq*#K*^j%Wc?voH>#_usz^=+#m|Wc`*42^(a{r!lOJzh{lN!{zp?fkl0*Htf7FlH zC~j0Y^gd>OaSjPfLmTc7mn-=4jfAD4jgC)eAGh0Bc@#IQaXXEr8|$yJ_Ha3-_8TjY z;zl*@7tt2p3M4EIZFK&uG-60t8rtaiboOz(jg?1nqZ+q^Xte($8n5a6q5T`zLo^+q z&OWk(>c+~WxKWMt@%q0OKOP?)jmLv%6gR3-KVJXs@&E4iKW4ISqmQxpT)1hahr?M% zBivD4$6(mNeKJ(170Nd2YxKZ7Z+>#Y-$#dhnH5vol4&D0BEuX1B zB#+`oHR{Lf;P3za1jo4{8rP>=-?`;8^@rq9+^9zVczxcqYooD;=lA%=ZG3e4O#LBw z6gR3-KVC1glOjV#)6ai+e*fuK1g>6pf9MCs_YS)F==iwZ#>%6(L0$9SJG?K#X`@^J z>CWGqnvai}&L5PAv3`#q#-0M(so>ivf6Mj?z5gl1dI{ctz5?S9I(6!A37Q~&>4*yf&yX;UWG#1CS(MZbTLkq{@}q@^|Y&}(7@zfFem*Zls002^o@ zg8RVK$&;FW{4hosD<}tH>~Mp>0|9gq?BC|^-)wULWBVR^A&41$r>Zswf`S%+SKUHH zxLM|4tDheUV*@c(!QcAT1daWn{{9iJ5zS#efH7E2vP8JU-#$6zkh}61UxRl zV;g`TnP%&|5Iy5zkfzK zfHgce)}9}LbEKMcrP?*}Kc17K+OY~;fn$d;P-DW|-~aor`}hCSi~bwEOnR-LXmo82 pzhwY7^xuQwzpmnM|Dg=9YsXTDPjoFUm|k0p=GWFT2xo-*{{UOUNag?l literal 0 HcmV?d00001 diff --git a/docs/source/img/labscript_32nx32n.svg b/docs/source/img/labscript_32nx32n.svg new file mode 100644 index 00000000..97272afa --- /dev/null +++ b/docs/source/img/labscript_32nx32n.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/docs/source/img/labscript_64x64.svg b/docs/source/img/labscript_64x64.svg new file mode 100644 index 00000000..987cfe6d --- /dev/null +++ b/docs/source/img/labscript_64x64.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/docs/source/img/lyse_32nx32n.svg b/docs/source/img/lyse_32nx32n.svg new file mode 100644 index 00000000..1ddcdccd --- /dev/null +++ b/docs/source/img/lyse_32nx32n.svg @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/img/runmanager_32nx32n.svg b/docs/source/img/runmanager_32nx32n.svg new file mode 100644 index 00000000..d9df689a --- /dev/null +++ b/docs/source/img/runmanager_32nx32n.svg @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/img/runviewer_32nx32n.svg b/docs/source/img/runviewer_32nx32n.svg new file mode 100644 index 00000000..ee5aa68f --- /dev/null +++ b/docs/source/img/runviewer_32nx32n.svg @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..aba2a7a4 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,34 @@ +.. labscript-devices documentation master file, created by + sphinx-quickstart on Thu Jun 18 17:05:42 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +labscript-devices +================= + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: DOCUMENTATION + + + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: FURTHER DOCUMENTATION + + components + +.. toctree:: + :maxdepth: 2 + :hidden: + :caption: LINKS + + Home Page + Source Code + PyPI + Anaconda Cloud + BitBucket Archive + +.. todolist:: diff --git a/readthedocs.yaml b/readthedocs.yaml new file mode 100644 index 00000000..35084d6e --- /dev/null +++ b/readthedocs.yaml @@ -0,0 +1,27 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Build documentation in the docs/ directory with Sphinx +sphinx: + builder: dirhtml + configuration: docs/source/conf.py + fail_on_warning: false + +# Optionally build your docs in additional formats such as PDF +formats: + - pdf + - epub + +# Optionally set the version of Python and requirements required to build your docs +python: + version: 3.7 + install: + - method: pip + path: . + extra_requirements: + - docs + system_packages: true + \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index ffe2dad5..a8d10137 100644 --- a/setup.cfg +++ b/setup.cfg @@ -25,10 +25,10 @@ include_package_data = True packages = find: python_requires = >=3.6 install_requires = - blacs>=2.7.0 + blacs>=3.0.0rc1 importlib_metadata - labscript>=2.6.0 - labscript_utils>=2.13.2 + labscript>=3.0.0rc1 + labscript_utils>=3.0.0rc1 numpy>=1.15.1 pillow PyDAQmx @@ -37,3 +37,11 @@ install_requires = qtutils>=2.2.3 spinapi zprocess>=2.18.0 + +[options.extras_require] +docs = + PyQt5 + Sphinx==3.0.1 + sphinx-rtd-theme==0.4.3 + recommonmark==0.6.0 + m2r==0.2.1 \ No newline at end of file