diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..a048195 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + # - package-ecosystem: pip + # directory: "/" + # schedule: + # interval: daily + - package-ecosystem: "github-actions" + directory: "/" + schedule: + # Check for updates once a week + interval: "weekly" diff --git a/.github/workflows/nightly-build.yaml b/.github/workflows/nightly-build.yaml new file mode 100644 index 0000000..7af7877 --- /dev/null +++ b/.github/workflows/nightly-build.yaml @@ -0,0 +1,17 @@ +name: nightly-build + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # Daily “At 00:00” + +jobs: + build: + if: ${{ github.repository_owner == 'ProjectPythia' }} + uses: ProjectPythia/cookbook-actions/.github/workflows/build-book.yaml@main + with: + environment_name: cookbook-dev + + link-check: + if: ${{ github.repository_owner == 'ProjectPythia' }} + uses: ProjectPythia/cookbook-actions/.github/workflows/link-checker.yaml@main diff --git a/.github/workflows/publish-book.yaml b/.github/workflows/publish-book.yaml new file mode 100644 index 0000000..cc1d1a4 --- /dev/null +++ b/.github/workflows/publish-book.yaml @@ -0,0 +1,18 @@ +name: publish-book + +on: + # Trigger the workflow on push to main branch + push: + branches: + - main + workflow_dispatch: + +jobs: + build: + uses: ProjectPythia/cookbook-actions/.github/workflows/build-book.yaml@main + with: + environment_name: cookbook-dev + + deploy: + needs: build + uses: ProjectPythia/cookbook-actions/.github/workflows/deploy-book.yaml@main diff --git a/.github/workflows/trigger-book-build.yaml b/.github/workflows/trigger-book-build.yaml new file mode 100644 index 0000000..bd014bf --- /dev/null +++ b/.github/workflows/trigger-book-build.yaml @@ -0,0 +1,11 @@ +name: trigger-book-build +on: + pull_request: + +jobs: + build: + uses: ProjectPythia/cookbook-actions/.github/workflows/build-book.yaml@main + with: + environment_name: cookbook-dev + artifact_name: book-zip-${{ github.event.number }} + # Other input options are possible, see ProjectPythia/cookbook-actions/.github/workflows/build-book.yaml diff --git a/.github/workflows/trigger-delete-preview.yaml b/.github/workflows/trigger-delete-preview.yaml new file mode 100644 index 0000000..06e13e5 --- /dev/null +++ b/.github/workflows/trigger-delete-preview.yaml @@ -0,0 +1,9 @@ +name: trigger-delete-preview + +on: + pull_request_target: + types: closed + +jobs: + delete: + uses: ProjectPythia/cookbook-actions/.github/workflows/delete-preview.yaml@main diff --git a/.github/workflows/trigger-link-check.yaml b/.github/workflows/trigger-link-check.yaml new file mode 100644 index 0000000..e2402dd --- /dev/null +++ b/.github/workflows/trigger-link-check.yaml @@ -0,0 +1,7 @@ +name: trigger-link-check +on: + pull_request: + +jobs: + link-check: + uses: ProjectPythia/cookbook-actions/.github/workflows/link-checker.yaml@main diff --git a/.github/workflows/trigger-preview.yaml b/.github/workflows/trigger-preview.yaml new file mode 100644 index 0000000..049b5d0 --- /dev/null +++ b/.github/workflows/trigger-preview.yaml @@ -0,0 +1,27 @@ +name: trigger-preview +on: + workflow_run: + workflows: + - trigger-book-build + types: + - requested + - completed + +jobs: + find-pull-request: + uses: ProjectPythia/cookbook-actions/.github/workflows/find-pull-request.yaml@main + deploy-preview: + needs: find-pull-request + if: github.event.workflow_run.conclusion == 'success' + uses: ProjectPythia/cookbook-actions/.github/workflows/deploy-book.yaml@main + with: + artifact_name: book-zip-${{ needs.find-pull-request.outputs.number }} + destination_dir: _preview/${{ needs.find-pull-request.outputs.number }} # deploy to subdirectory labeled with PR number + is_preview: "true" + + preview-comment: + needs: find-pull-request + uses: ProjectPythia/cookbook-actions/.github/workflows/preview-comment.yaml@main + with: + pull_request_number: ${{ needs.find-pull-request.outputs.number }} + sha: ${{ needs.find-pull-request.outputs.sha }} diff --git a/.github/workflows/trigger-replace-links.yaml b/.github/workflows/trigger-replace-links.yaml new file mode 100644 index 0000000..6fff5e2 --- /dev/null +++ b/.github/workflows/trigger-replace-links.yaml @@ -0,0 +1,31 @@ +name: trigger-replace-links + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + - name: Find and Replace Repository Name + uses: jacobtomlinson/gha-find-replace@v3 + with: + find: "ProjectPythia/cookbook-template" + replace: "${{ github.repository_owner }}/${{ github.event.repository.name }}" + regex: false + exclude: ".github/workflows/trigger-replace-links.yaml" + + - name: Find and Replace Repository ID + uses: jacobtomlinson/gha-find-replace@v3 + with: + find: "475509405" + replace: "${{ github.repository_id}}" + regex: false + exclude: ".github/workflows/trigger-replace-links.yaml" + + - name: Push changes + uses: stefanzweifel/git-auto-commit-action@v5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a98549 --- /dev/null +++ b/.gitignore @@ -0,0 +1,136 @@ +# Default JupyterBook build output dir +_build/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +notebooks/_build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.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/ + +# 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 +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.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/ + +# Ephemeral .nfs files +.nfs* diff --git a/.isort.cfg b/.isort.cfg new file mode 100644 index 0000000..0fc010f --- /dev/null +++ b/.isort.cfg @@ -0,0 +1,2 @@ +[settings] +known_third_party = diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..3993e70 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,52 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-docstring-first + - id: check-json + - id: check-yaml + - id: double-quote-string-fixer + + - repo: https://github.com/psf/black + rev: 23.12.1 + hooks: + - id: black + + - repo: https://github.com/keewis/blackdoc + rev: v0.3.9 + hooks: + - id: blackdoc + + - repo: https://github.com/PyCQA/flake8 + rev: 7.0.0 + hooks: + - id: flake8 + + - repo: https://github.com/asottile/seed-isort-config + rev: v2.2.0 + hooks: + - id: seed-isort-config + + - repo: https://github.com/PyCQA/isort + rev: 5.13.2 + hooks: + - id: isort + + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v3.1.0 + hooks: + - id: prettier + additional_dependencies: [prettier@v2.7.1] + + - repo: https://github.com/nbQA-dev/nbQA + rev: 1.7.1 + hooks: + - id: nbqa-black + additional_dependencies: [black] + - id: nbqa-pyupgrade + additional_dependencies: [pyupgrade] + exclude: foundations/quickstart.ipynb + - id: nbqa-isort + additional_dependencies: [isort] diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..fe89c55 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,48 @@ +cff-version: 1.2.0 +message: "If you use this cookbook, please cite it as below." +authors: + # add additional entries for each author -- see https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md + - family-names: Rose + given-names: Brian E. J. + orcid: https://orcid.org/0000-0002-9961-3821 # optional + website: https://github.com/brian-rose # optional + affiliation: University at Albany (State University of New York) # optional + - family-names: Kent + given-names: Julia + orcid: https://orcid.org/0000-0002-5611-8986 + website: https://github.com/jukent + affiliation: UCAR/NCAR + - family-names: Tyle + given-names: Kevin + orcid: https://orcid.org/0000-0001-5249-9665 + website: https://github.com/ktyle + affiliation: University at Albany (State University of New York) + - family-names: Clyne + given-names: John + orcid: https://orcid.org/0000-0003-2788-9017 + website: https://github.com/clyne + affiliation: UCAR/NCAR + - family-names: Camron + given-names: Drew + orcid: https://orcid.org/0000-0001-7246-6502 + website: https://github.com/dcamron + affiliation: UCAR/Unidata + - family-names: Grover + given-names: Maxwell + orcid: https://orcid.org/0000-0002-0370-8974 + website: https://github.com/mgrover1 + affiliation: Argonne National Laboratory + - family-names: Ford + given-names: Robert R. + orcid: https://orcid.org/0000-0001-5483-4965 + website: https://github.com/r-ford + affiliation: University at Albany (State University of New York) + - family-names: Paul + given-names: Kevin + orcid: https://orcid.org/0000-0001-8155-8038 + website: https://github.com/kmpaul + affiliation: NVIDIA + - name: "Cookbook Template contributors" # use the 'name' field to acknowledge organizations + website: "https://github.com/ProjectPythia/cookbook-template/graphs/contributors" +title: "Cookbook Template" +abstract: "A sample cookbook description." diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..25029ec --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ + + +# (Replace_with_your_title) Cookbook + +[![nightly-build](https://github.com/ProjectPythia/cookbook-template/actions/workflows/nightly-build.yaml/badge.svg)](https://github.com/ProjectPythia/cookbook-template/actions/workflows/nightly-build.yaml) +[![Binder](https://binder.projectpythia.org/badge_logo.svg)](https://binder.projectpythia.org/v2/gh/ProjectPythia/cookbook-template/main?labpath=notebooks) +[![DOI](https://zenodo.org/badge/475509405.svg)](https://zenodo.org/badge/latestdoi/475509405) + +This Project Pythia Cookbook covers ... (replace `...` with the main subject of your cookbook ... e.g., _working with radar data in Python_) + +## Motivation + +(Add a few sentences stating why this cookbook will be useful. What skills will you, "the chef", gain once you have reached the end of the cookbook?) + +## Authors + +[First Author](@first-author), [Second Author](@second-author), etc. _Acknowledge primary content authors here_ + +### Contributors + + + + + +## Structure + +(State one or more sections that will comprise the notebook. E.g., _This cookbook is broken up into two main sections - "Foundations" and "Example Workflows."_ Then, describe each section below.) + +### Section 1 ( Replace with the title of this section, e.g. "Foundations" ) + +(Add content for this section, e.g., "The foundational content includes ... ") + +### Section 2 ( Replace with the title of this section, e.g. "Example workflows" ) + +(Add content for this section, e.g., "Example workflows include ... ") + +## Running the Notebooks + +You can either run the notebook using [Binder](https://binder.projectpythia.org/) or on your local machine. + +### Running on Binder + +The simplest way to interact with a Jupyter Notebook is through +[Binder](https://binder.projectpythia.org/), which enables the execution of a +[Jupyter Book](https://jupyterbook.org) in the cloud. The details of how this works are not +important for now. All you need to know is how to launch a Pythia +Cookbooks chapter via Binder. Simply navigate your mouse to +the top right corner of the book chapter you are viewing and click +on the rocket ship icon, (see figure below), and be sure to select +“launch Binder”. After a moment you should be presented with a +notebook that you can interact with. I.e. you’ll be able to execute +and even change the example programs. You’ll see that the code cells +have no output at first, until you execute them by pressing +{kbd}`Shift`\+{kbd}`Enter`. Complete details on how to interact with +a live Jupyter notebook are described in [Getting Started with +Jupyter](https://foundations.projectpythia.org/foundations/getting-started-jupyter.html). + +### Running on Your Own Machine + +If you are interested in running this material locally on your computer, you will need to follow this workflow: + +(Replace "cookbook-example" with the title of your cookbooks) + +1. Clone the `https://github.com/ProjectPythia/cookbook-example` repository: + + ```bash + git clone https://github.com/ProjectPythia/cookbook-example.git + ``` + +1. Move into the `cookbook-example` directory + ```bash + cd cookbook-example + ``` +1. Create and activate your conda environment from the `environment.yml` file + ```bash + conda env create -f environment.yml + conda activate cookbook-example + ``` +1. Move into the `notebooks` directory and start up Jupyterlab + ```bash + cd notebooks/ + jupyter lab + ``` diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..f2f6049 --- /dev/null +++ b/_config.yml @@ -0,0 +1,80 @@ +# Book settings +# Learn more at https://jupyterbook.org/customize/config.html + +title: Project Pythia Cookbook Template +author: the Project Pythia Community +logo: notebooks/images/logos/pythia_logo-white-rtext.svg +copyright: "2024" + +execute: + # To execute notebooks via a Binder instead, replace 'cache' with 'binder' + execute_notebooks: cache + timeout: 600 + allow_errors: False # cells with expected failures must set the `raises-exception` cell tag + +# Add a few extensions to help with parsing content +parse: + myst_enable_extensions: # default extensions to enable in the myst parser. See https://myst-parser.readthedocs.io/en/latest/using/syntax-optional.html + - amsmath + - colon_fence + - deflist + - dollarmath + - html_admonition + - html_image + - replacements + - smartquotes + - substitution + +sphinx: + config: + linkcheck_ignore: ["https://doi.org/*", "https://zenodo.org/badge/*"] # don't run link checker on DOI links since they are immutable + nb_execution_raise_on_error: true # raise exception in build if there are notebook errors (this flag is ignored if building on binder) + html_favicon: notebooks/images/icons/favicon.ico + html_last_updated_fmt: "%-d %B %Y" + html_theme: sphinx_pythia_theme + html_permalinks_icon: '' + html_theme_options: + home_page_in_toc: true + repository_url: https://github.com/ProjectPythia/cookbook-template/ # Online location of your book + repository_branch: main # Which branch of the repository should be used when creating links (optional) + use_issues_button: true + use_repository_button: true + use_edit_page_button: true + use_fullscreen_button: true + analytics: + google_analytics_id: G-T52X8HNYE8 + github_url: https://github.com/ProjectPythia + twitter_url: https://twitter.com/project_pythia + icon_links: + - name: YouTube + url: https://www.youtube.com/channel/UCoZPBqJal5uKpO8ZiwzavCw + icon: fab fa-youtube-square + type: fontawesome + launch_buttons: + binderhub_url: https://binder.projectpythia.org + notebook_interface: jupyterlab + logo: + link: https://projectpythia.org + navbar_start: + - navbar-logo + navbar_end: + - navbar-icon-links + navbar_links: + - name: Home + url: https://projectpythia.org + - name: Foundations + url: https://foundations.projectpythia.org + - name: Cookbooks + url: https://cookbooks.projectpythia.org + - name: Resources + url: https://projectpythia.org/resource-gallery.html + - name: Community + url: https://projectpythia.org/index.html#join-us + footer_logos: + NCAR: notebooks/images/logos/NSF-NCAR_Lockup-UCAR-Dark_102523.svg + Unidata: notebooks/images/logos/Unidata_logo_horizontal_1200x300.svg + UAlbany: notebooks/images/logos/UAlbany-A2-logo-purple-gold.svg + footer_start: + - footer-logos + - footer-info + - footer-extra diff --git a/_gallery_info.yml b/_gallery_info.yml new file mode 100644 index 0000000..8764ee4 --- /dev/null +++ b/_gallery_info.yml @@ -0,0 +1,6 @@ +thumbnail: thumbnail.png +tags: + domains: + - sampledomain + packages: + - samplepackage diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 0000000..59f4313 --- /dev/null +++ b/_static/custom.css @@ -0,0 +1,6 @@ +.bd-main .bd-content .bd-article-container { + max-width: 100%; /* default is 60em */ +} +.bd-page-width { + max-width: 100%; /* default is 88rem */ +} diff --git a/_static/footer-logo-nsf.png b/_static/footer-logo-nsf.png new file mode 100644 index 0000000..11c788f Binary files /dev/null and b/_static/footer-logo-nsf.png differ diff --git a/_templates/footer-extra.html b/_templates/footer-extra.html new file mode 100644 index 0000000..2b794d8 --- /dev/null +++ b/_templates/footer-extra.html @@ -0,0 +1,27 @@ +
diff --git a/_toc.yml b/_toc.yml new file mode 100644 index 0000000..995f86b --- /dev/null +++ b/_toc.yml @@ -0,0 +1,9 @@ +format: jb-book +root: README +parts: + - caption: Preamble + chapters: + - file: notebooks/how-to-cite + - caption: Introduction + chapters: + - file: notebooks/notebook-template diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..c631642 --- /dev/null +++ b/environment.yml @@ -0,0 +1,7 @@ +name: cookbook-dev +channels: + - conda-forge +dependencies: + - jupyter-book + - jupyterlab + - sphinx-pythia-theme diff --git a/notebooks/how-to-cite.md b/notebooks/how-to-cite.md new file mode 100644 index 0000000..01390db --- /dev/null +++ b/notebooks/how-to-cite.md @@ -0,0 +1,7 @@ +# How to Cite This Cookbook + +The material in this Project Pythia Cookbook is licensed for free and open consumption and reuse. All code is served under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0), while all non-code content is licensed under [Creative Commons BY 4.0 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/). Effectively, this means you are free to share and adapt this material so long as you give appropriate credit to the Cookbook authors and the Project Pythia community. + +The source code for the book is [released on GitHub](https://github.com/ProjectPythia/cookbook-template) and archived on Zenodo. This DOI will always resolve to the latest release of the book source: + +[![DOI](https://zenodo.org/badge/475509405.svg)](https://zenodo.org/badge/latestdoi/475509405) diff --git a/notebooks/images/ProjectPythia_Logo_Final-01-Blue.svg b/notebooks/images/ProjectPythia_Logo_Final-01-Blue.svg new file mode 100644 index 0000000..961efc2 --- /dev/null +++ b/notebooks/images/ProjectPythia_Logo_Final-01-Blue.svg @@ -0,0 +1 @@ + diff --git a/notebooks/images/icons/favicon.ico b/notebooks/images/icons/favicon.ico new file mode 100644 index 0000000..da6ac73 Binary files /dev/null and b/notebooks/images/icons/favicon.ico differ diff --git a/notebooks/images/logos/NSF-NCAR_Lockup-UCAR-Dark_102523.svg b/notebooks/images/logos/NSF-NCAR_Lockup-UCAR-Dark_102523.svg new file mode 100644 index 0000000..538f8ec --- /dev/null +++ b/notebooks/images/logos/NSF-NCAR_Lockup-UCAR-Dark_102523.svg @@ -0,0 +1 @@ + diff --git a/notebooks/images/logos/UAlbany-A2-logo-purple-gold.svg b/notebooks/images/logos/UAlbany-A2-logo-purple-gold.svg new file mode 100644 index 0000000..4fdfe3a --- /dev/null +++ b/notebooks/images/logos/UAlbany-A2-logo-purple-gold.svg @@ -0,0 +1,1125 @@ + + diff --git a/notebooks/images/logos/Unidata_logo_horizontal_1200x300.svg b/notebooks/images/logos/Unidata_logo_horizontal_1200x300.svg new file mode 100644 index 0000000..0d9fd70 --- /dev/null +++ b/notebooks/images/logos/Unidata_logo_horizontal_1200x300.svg @@ -0,0 +1,891 @@ + + diff --git a/notebooks/images/logos/pythia_logo-white-notext.svg b/notebooks/images/logos/pythia_logo-white-notext.svg new file mode 100644 index 0000000..73e2dfe --- /dev/null +++ b/notebooks/images/logos/pythia_logo-white-notext.svg @@ -0,0 +1,128 @@ + + diff --git a/notebooks/images/logos/pythia_logo-white-rtext.svg b/notebooks/images/logos/pythia_logo-white-rtext.svg new file mode 100644 index 0000000..fa2a5c6 --- /dev/null +++ b/notebooks/images/logos/pythia_logo-white-rtext.svg @@ -0,0 +1,225 @@ + + diff --git a/notebooks/notebook-template.ipynb b/notebooks/notebook-template.ipynb new file mode 100644 index 0000000..dad9f26 --- /dev/null +++ b/notebooks/notebook-template.ipynb @@ -0,0 +1,358 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start here! If you can directly link to an image relevant to your notebook, such as [canonical logos](https://github.com/numpy/numpy/blob/main/doc/source/_static/numpylogo.svg), do so here at the top of your notebook. You can do this with Markdown syntax,\n", + "\n", + "> `![Info
\n", + " Your relevant information here!\n", + "Success
\n", + " We got this done after all!\n", + "Warning
\n", + " Be careful!\n", + "Danger
\n", + " Scary stuff be here.\n", + "