From 660eba5284595c9b8c36a570724a7602f5e096f6 Mon Sep 17 00:00:00 2001 From: Kjartan Thor Wikfeldt Date: Thu, 14 Dec 2023 14:04:41 +0100 Subject: [PATCH] Initial commit --- .github/workflows/sphinx.yml | 169 +++++++++++++++ .gitignore | 5 + LICENSE | 395 ++++++++++++++++++++++++++++++++++ LICENSE.code | 21 ++ Makefile | 24 +++ content/_static/overrides.css | 98 +++++++++ content/conf.py | 128 +++++++++++ content/guide.rst | 37 ++++ content/img/ENCCS.jpg | Bin 0 -> 18730 bytes content/img/favicon.ico | Bin 0 -> 1268 bytes content/index.rst | 109 ++++++++++ content/quick-reference.rst | 2 + make.bat | 35 +++ requirements.txt | 5 + 14 files changed, 1028 insertions(+) create mode 100644 .github/workflows/sphinx.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 LICENSE.code create mode 100644 Makefile create mode 100644 content/_static/overrides.css create mode 100644 content/conf.py create mode 100644 content/guide.rst create mode 100644 content/img/ENCCS.jpg create mode 100644 content/img/favicon.ico create mode 100644 content/index.rst create mode 100644 content/quick-reference.rst create mode 100644 make.bat create mode 100644 requirements.txt diff --git a/.github/workflows/sphinx.yml b/.github/workflows/sphinx.yml new file mode 100644 index 0000000..ef56675 --- /dev/null +++ b/.github/workflows/sphinx.yml @@ -0,0 +1,169 @@ +# Deploy Sphinx. This could be shorter, but we also do some extra +# stuff. +# +# License: CC-0. This is the canonical location of this file, which +# you may want to link to anyway: +# https://github.com/coderefinery/sphinx-lesson-template/blob/main/.github/workflows/sphinx.yml + + +name: sphinx +on: [push, pull_request] + +env: + DEFAULT_BRANCH: "main" + # If these SPHINXOPTS are enabled, then be strict about the + # builds and fail on any warnings. + #SPHINXOPTS: "-W --keep-going -T" + GENERATE_PDF: true # to enable, must be 'true' lowercase + GENERATE_SINGLEHTML: true # to enable, must be 'true' lowercase + PDF_FILENAME: lesson.pdf + MULTIBRANCH: true # to enable, must be 'true' lowercase + + +jobs: + build: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + # https://github.com/marketplace/actions/checkout + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + lfs: true + + # https://github.com/marketplace/actions/setup-python + # ^-- This gives info on matrix testing. + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + cache: 'pip' + + # https://docs.github.com/en/actions/guides/building-and-testing-python#installing-dependencies + # ^-- This gives info on installing dependencies with pip + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + # Debug + - name: Debugging information + env: + ref: ${{github.ref}} + event_name: ${{github.event_name}} + head_ref: ${{github.head_ref}} + base_ref: ${{github.base_ref}} + run: | + echo "github.ref: ${ref}" + echo "github.event_name: ${event_name}" + echo "github.head_ref: ${head_ref}" + echo "github.base_ref: ${base_ref}" + echo "GENERATE_PDF: ${GENERATE_PDF}" + echo "GENERATE_SINGLEHTML: ${GENERATE_SINGLEHTML}" + set -x + git rev-parse --abbrev-ref HEAD + git branch + git branch -a + git remote -v + python -V + pip list --not-required + pip list + + + # Build + - uses: ammaraskar/sphinx-problem-matcher@master + - name: Build Sphinx docs (dirhtml) + # SPHINXOPTS used via environment variables + run: | + make dirhtml + # This fixes broken copy button icons, as explained in + # https://github.com/coderefinery/sphinx-lesson/issues/50 + # https://github.com/executablebooks/sphinx-copybutton/issues/110 + # This can be removed once these PRs are accepted (but the + # fixes also need to propagate to other themes): + # https://github.com/sphinx-doc/sphinx/pull/8524 + # https://github.com/readthedocs/sphinx_rtd_theme/pull/1025 + sed -i 's/url_root="#"/url_root=""/' _build/dirhtml/index.html || true + + # singlehtml + - name: Generate singlehtml + if: ${{ env.GENERATE_SINGLEHTML == 'true' }} + run: | + make singlehtml + mv _build/singlehtml/ _build/dirhtml/singlehtml/ + + # PDF if requested + - name: Generate PDF + if: ${{ env.GENERATE_PDF == 'true' }} + run: | + pip install https://github.com/rkdarst/sphinx_pyppeteer_builder/archive/refs/heads/main.zip + make pyppeteer + mv _build/pyppeteer/*.pdf _build/dirhtml/${PDF_FILENAME} + + # Stage all deployed assets in _gh-pages/ for simplicity, and to + # prepare to do a multi-branch deployment. + - name: Copy deployment data to _gh-pages/ + if: ${{ github.event_name == 'push' }} + run: + rsync -a _build/dirhtml/ _gh-pages/ + + # Use gh-pages-multibranch to multiplex different branches into + # one deployment. See + # https://github.com/coderefinery/gh-pages-multibranch + - name: gh-pages multibranch + uses: coderefinery/gh-pages-multibranch@main + if: ${{ github.event_name == 'push' && env.MULTIBRANCH == 'true' }} + with: + directory: _gh-pages/ + default_branch: ${{ env.DEFAULT_BRANCH }} + publish_branch: gh-pages + + # Add the .nojekyll file + - name: nojekyll + if: ${{ github.event_name == 'push' }} + run: | + touch _gh-pages/.nojekyll + + # Save artifact for the next step. + - uses: actions/upload-artifact@master + if: ${{ github.event_name == 'push' }} + with: + name: gh-pages-build + path: _gh-pages/ + + # Deploy in a separate job so that write permissions are restricted + # to the minimum steps. + deploy: + name: Deploy + runs-on: ubuntu-latest + needs: build + # This if can't use the env context - find better way later. + if: ${{ github.event_name == 'push' }} + permissions: + contents: write + + steps: + - uses: actions/download-artifact@v3 + if: ${{ github.event_name == 'push' && ( env.MULTIBRANCH == 'true' || github.ref == format('refs/heads/{0}', env.DEFAULT_BRANCH )) }} + with: + name: gh-pages-build + path: _gh-pages/ + + # As of 2023, we could publish to pages via a Deployment. This + # isn't done yet to give it time to stabilize (out of beta), and + # also having a gh-pages branch to check out is rather + # convenient. + + # Deploy + # https://github.com/peaceiris/actions-gh-pages + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.event_name == 'push' && ( env.MULTIBRANCH == 'true' || github.ref == format('refs/heads/{0}', env.DEFAULT_BRANCH )) }} + with: + publish_branch: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: _gh-pages/ + force_orphan: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c0d3369 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/_build +.ipynb_checkpoints +/venv* +.jupyter_cache +jupyter_execute diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..10fabd9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,395 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public +licenses to material it publishes and in those instances will be +considered the “Licensor.” The text of the Creative Commons public +licenses is dedicated to the public domain under the CC0 Public Domain +Dedication. Except for the limited purpose of indicating that material +is shared under a Creative Commons public license or as otherwise +permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the public +licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSE.code b/LICENSE.code new file mode 100644 index 0000000..1b2e266 --- /dev/null +++ b/LICENSE.code @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) {% now 'local', '%Y' %}, {{ cookiecutter.full_name }} and individual contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..46f35b9 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +# 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 = content +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) + +# Live reload site documents for local development +livehtml: + sphinx-autobuild "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/content/_static/overrides.css b/content/_static/overrides.css new file mode 100644 index 0000000..26a0f16 --- /dev/null +++ b/content/_static/overrides.css @@ -0,0 +1,98 @@ +/* + * colors = ['#0271AE', '#DC2830', '#FFC438', # blue, red, light orange + * '#6E3B87', '#008D5D', '#FA902D', # purple, green, orange + * '#0095B7', '#CB0C7B', '#F7E43C', # cyan, magenta, yellow + * '#88B93B', '#444F95', '#F16232'] # pea green, dark blue, dark orange + * + * To use them in rST, you need to define a command in the epilog, see conf.py + */ +.blue {color: #0271AE;} +.red {color: #DC2830;} +.orange {color: #FFC438;} +.purple {color: #633B87;} +.green {color: #008D5D;} +.dkorange {color: #FA902D;} +.cyan {color: #0095B7;} +.magenta {color: #CB0C8B;} +.yellow {color: #F7E43C;} +.peagreen {color: #88B93B;} +.darkblue {color: #444F95;} +.darkorange {color: #F16232;} + +/* override colors in sphinx_lesson.css with the schemes here: https://personal.sron.nl/~pault/#sec:qualitative */ + +/* instructor-note */ +.rst-content .instructor-note { + background: #DDDDDD; +} +.rst-content .instructor-note > .admonition-title { + background: #BBBBBB; +} +.rst-content .instructor-note > .admonition-title::before { + content: ""; +} + +/* callout */ +.rst-content .callout { + background: #EEEEBB; +} +.rst-content .callout > .admonition-title { + background: #BBCC33; +} + +/* questions */ +.rst-content .questions { + background: rgba(253, 219, 199, 0.3); +} +.rst-content .questions > .admonition-title { + background: rgba(204, 51, 17, 0.5); +} + +/* discussion */ +.rst-content .discussion { + background: rgba(231, 212, 232 0.3); +} +.rst-content .discussion > .admonition-title { + background: rgba(194, 165, 207, 0.5); +} + +/* signature */ +.rst-content .signature { + background: rgba(217, 240, 211, 0.3); +} +.rst-content .signature > .admonition-title { + background: rgba(172, 211, 158, 0.5); +} +.rst-content .signature > .admonition-title::before { + content: "\01F527"; +} + +/* parameters */ +.rst-content .parameters { + background: rgba(217, 240, 211, 0.0); +} +.rst-content .parameters > .admonition-title { + background: rgba(172, 211, 158, 0.5); +} +.rst-content .parameters > .admonition-title::before { + content: "\01F4BB"; +} + +/* typealong */ +.rst-content .typealong { + background: rgba(221, 221, 221, 0.3); +} +.rst-content .typealong > .admonition-title { + background: rgba(187, 187, 187, 1.0); +} +.rst-content .typealong > .admonition-title::before { + content: "\02328"; +} + +/* Equation numbers to the right */ +.math { + text-align: left; +} +.eqno { + float: right; +} diff --git a/content/conf.py b/content/conf.py new file mode 100644 index 0000000..d2946c1 --- /dev/null +++ b/content/conf.py @@ -0,0 +1,128 @@ +# 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 +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = "LESSON NAME" +copyright = "2021, The contributors" +author = "The contributors" +github_user = "ENCCS" +github_repo_name = "" # auto-detected from dirname if blank +github_version = "main" +conf_py_path = "/content/" # with leading and trailing slash + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + # githubpages just adds a .nojekyll file + "sphinx.ext.githubpages", + "sphinx_lesson", + # remove once sphinx_rtd_theme updated for contrast and accessibility: + "sphinx_rtd_theme_ext_color_contrast", + "sphinx.ext.todo", +] + +# Settings for myst_nb: +# https://myst-nb.readthedocs.io/en/latest/use/execute.html#triggering-notebook-execution +# jupyter_execute_notebooks = "off" +# jupyter_execute_notebooks = "auto" # *only* execute if at least one output is missing. +# jupyter_execute_notebooks = "force" +jupyter_execute_notebooks = "cache" + +# 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 = [ + "README*", + "_build", + "Thumbs.db", + ".DS_Store", + "jupyter_execute", + "*venv*", +] + +# -- 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_logo = "img/ENCCS.jpg" +html_favicon = "img/favicon.ico" + +# 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'] +html_css_files = ["overrides.css"] + +# HTML context: +from os.path import basename, dirname, realpath + +html_context = { + "display_github": True, + "github_user": github_user, + # Auto-detect directory name. This can break, but + # useful as a default. + "github_repo": github_repo_name or basename(dirname(realpath(__file__))), + "github_version": github_version, + "conf_py_path": conf_py_path, +} + +# Intersphinx mapping. For example, with this you can use +# :py:mod:`multiprocessing` to link straight to the Python docs of that module. +# List all available references: +# python -msphinx.ext.intersphinx https://docs.python.org/3/objects.inv +# extensions.append('sphinx.ext.intersphinx') +# intersphinx_mapping = { +# #'python': ('https://docs.python.org/3', None), +# #'sphinx': ('https://www.sphinx-doc.org/', None), +# #'numpy': ('https://numpy.org/doc/stable/', None), +# #'scipy': ('https://docs.scipy.org/doc/scipy/reference/', None), +# #'pandas': ('https://pandas.pydata.org/docs/', None), +# #'matplotlib': ('https://matplotlib.org/', None), +# 'seaborn': ('https://seaborn.pydata.org/', None), +# } + +# add few new directives +from sphinx_lesson.directives import _BaseCRDirective + + +class SignatureDirective(_BaseCRDirective): + extra_classes = ["toggle-shown", "dropdown"] + + +class ParametersDirective(_BaseCRDirective): + extra_classes = ["dropdown"] + + +class TypealongDirective(_BaseCRDirective): + extra_classes = ["toggle-shown", "dropdown"] + + +DIRECTIVES = [SignatureDirective, ParametersDirective, TypealongDirective] + + +def setup(app): + for obj in DIRECTIVES: + app.add_directive(obj.cssname(), obj) diff --git a/content/guide.rst b/content/guide.rst new file mode 100644 index 0000000..89553fb --- /dev/null +++ b/content/guide.rst @@ -0,0 +1,37 @@ +Instructor's guide +================== + +Why we teach this lesson +------------------------ + + + +Intended learning outcomes +-------------------------- + + + +Timing +------ + + + +Preparing exercises +------------------- + +e.g. what to do the day before to set up common repositories. + + + +Other practical aspects +----------------------- + + + +Interesting questions you might get +----------------------------------- + + + +Typical pitfalls +---------------- diff --git a/content/img/ENCCS.jpg b/content/img/ENCCS.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da2355c77a45b80bd2f35a71b8b8a5acc91bbe6b GIT binary patch literal 18730 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 by `CodeRefinery +`__ licensed under the `MIT license +`__. We have copied and adapted +most of their license text. + +Instructional Material +^^^^^^^^^^^^^^^^^^^^^^ + +This instructional material is made available under the +`Creative Commons Attribution license (CC-BY-4.0) `__. +The following is a human-readable summary of (and not a substitute for) the +`full legal text of the CC-BY-4.0 license +`__. +You are free to: + +- **share** - copy and redistribute the material in any medium or format +- **adapt** - remix, transform, and build upon the material for any purpose, + even commercially. + +The licensor cannot revoke these freedoms as long as you follow these license terms: + +- **Attribution** - You must give appropriate credit (mentioning that your work + is derived from work that is Copyright (c) ENCCS and individual contributors and, where practical, linking + to ``_), provide a `link to the license + `__, and indicate if changes were + made. You may do so in any reasonable manner, but not in any way that suggests + the licensor endorses you or your use. +- **No additional restrictions** - You may not apply legal terms or + technological measures that legally restrict others from doing anything the + license permits. + +With the understanding that: + +- You do not have to comply with the license for elements of the material in + the public domain or where your use is permitted by an applicable exception + or limitation. +- No warranties are given. The license may not give you all of the permissions + necessary for your intended use. For example, other rights such as + publicity, privacy, or moral rights may limit how you use the material. + + +Software +^^^^^^^^ + +Except where otherwise noted, the example programs and other software provided +with this repository are made available under the `OSI `__-approved +`MIT license `__. diff --git a/content/quick-reference.rst b/content/quick-reference.rst new file mode 100644 index 0000000..492da1e --- /dev/null +++ b/content/quick-reference.rst @@ -0,0 +1,2 @@ +Quick Reference +=============== diff --git a/make.bat b/make.bat new file mode 100644 index 0000000..6bd7cd2 --- /dev/null +++ b/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=content +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/requirements.txt b/requirements.txt new file mode 100644 index 0000000..135f7aa --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +Sphinx +sphinx_rtd_theme +sphinx_rtd_theme_ext_color_contrast +myst_nb +sphinx-lesson