diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 6b0c2359..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,15 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "github-actions" # See documentation for possible values - directory: ".github/workflows" # Location of package manifests - schedule: - interval: "weekly" - groups: - actions: - patterns: - - "*" diff --git a/.github/workflows/build_pages.yml b/.github/workflows/build_pages.yml deleted file mode 100644 index d0f713e2..00000000 --- a/.github/workflows/build_pages.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: CI - -on: - push: - branches: - - "main" - pull_request: - # Allow manual runs through the web UI - workflow_dispatch: - -permissions: {} - -jobs: - # Build job - build-sphinx: - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - persist-credentials: false - - - name: Set up Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 - with: - python-version: "3.x" - - - name: Install build dependencies - run: | - python -m pip install --upgrade pip - python -m pip install -r requirements.txt - - - name: Run sphinx - run: python -m sphinx -T -b html -d _build/doctrees -D language=en . _build/html - - - name: Upload distribution artifacts - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 - with: - path: _build/html/ - - deploy-pages: - needs: build-sphinx - if: ${{ github.ref == 'refs/heads/main' }} - - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # to verify the deployment originates from an appropriate source - - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - # Specify runner + deployment step - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 5b7493e6..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: CI - -on: - push: - branches: - - "main" - pull_request: - # Allow manual runs through the web UI - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: {} - -jobs: - core: - uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@22ddf09dfabb443adddfb9f861b7d41a787d6b1a # v3.0.3 - with: - submodules: true - libraries: | - apt: - - pandoc - envs: | - - linux: build_site - - linux: linkcheck diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1b72099e..00000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.py[co] -*.DS_STORE -_build/ -credits.rst - diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index 99757501..00000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -version: 2 - -build: - os: ubuntu-24.04 - tools: - python: "3.13" - -sphinx: - configuration: conf.py - -python: - install: - - requirements: requirements.txt diff --git a/CNAME b/CNAME index 2350a56c..e70ba9e6 100644 --- a/CNAME +++ b/CNAME @@ -1 +1,2 @@ -www.astropy.org \ No newline at end of file +www.astropy.org + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index f1f11648..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -For general information on the contribution process, see the [Astropy core package contributing guidelines](https://github.com/astropy/astropy/blob/main/CONTRIBUTING.md). This document only contains specific details for the astropy web page repository. - -# Affiliated Packages - -To propose inclusion of a package as an affiliated package, we work with pyOpenSci to support -the review process, which when complete will lead to your package being listed here. -The details of the review process are outlined at https://affiliated.astropy.org. - -# Modifying Roles in the Team section - -* Modify the `roles.json` file -* Preview locally by opening `team.html` in your browser. Note that most browsers restrict local file access (needed to access your local copy of `roles.json`), so you'll need to configure your browser to allow this - details depend on the browser, but usually you find it in some sort of "developer" menu. diff --git a/LICENSE.rst b/LICENSE.rst deleted file mode 100644 index a041b66f..00000000 --- a/LICENSE.rst +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2012-2018, Astropy Developers - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. -* Neither the name of the Astropy Team nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README b/README new file mode 100644 index 00000000..f5325ea9 --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +This repository contains the Sphinx build for the Astropy website. The latest +source can be found at: + + https://github.com/astropy/astropy-website + +Pull requests should be opened in that repository instead of this one. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 939b2611..00000000 --- a/README.md +++ /dev/null @@ -1,6 +0,0 @@ -[![docs](https://app.readthedocs.org/projects/astropy-org/badge/?version=latest)](https://astropy-org.readthedocs.io/en/latest/) - -This repository contains the Astropy web site (primary URL https://astropy.org). - -> [!NOTE] -> In a previous version of this web site (on the [old_site branch](https://github.com/astropy/astropy.org/tree/old_site)), this repository held the build for the site, but the content was generated from the [astropy-website repository](https://github.com/astropy/astropy-website). That repo is no longer active, and issues with the Astropy web site should now be reported in *this* repository. diff --git a/_downloads/astropy_powered.png b/_downloads/astropy_powered.png new file mode 100644 index 00000000..b3b0db6f Binary files /dev/null and b/_downloads/astropy_powered.png differ diff --git a/_static/img/astropy_powered_white.png b/_downloads/astropy_powered_white.png similarity index 100% rename from _static/img/astropy_powered_white.png rename to _downloads/astropy_powered_white.png diff --git a/_images/aplpy.png b/_images/aplpy.png new file mode 100644 index 00000000..7d0ca754 Binary files /dev/null and b/_images/aplpy.png differ diff --git a/_static/img/astropy_banner_96.png b/_images/astropy_banner_96.png similarity index 100% rename from _static/img/astropy_banner_96.png rename to _images/astropy_banner_96.png diff --git a/_images/astropy_powered.png b/_images/astropy_powered.png new file mode 100644 index 00000000..b3b0db6f Binary files /dev/null and b/_images/astropy_powered.png differ diff --git a/_images/ginga.png b/_images/ginga.png new file mode 100644 index 00000000..809c61d2 Binary files /dev/null and b/_images/ginga.png differ diff --git a/_images/montage.png b/_images/montage.png new file mode 100644 index 00000000..df3f16f6 Binary files /dev/null and b/_images/montage.png differ diff --git a/_sources/affiliated/index.txt b/_sources/affiliated/index.txt new file mode 100644 index 00000000..4f70e2b4 --- /dev/null +++ b/_sources/affiliated/index.txt @@ -0,0 +1,293 @@ +:orphan: + +About affiliated packages +========================= + +A major part of the Astropy project is the concept of "Affiliated +Packages". An affiliated package is an astronomy-related Python package +that is not part of the astropy core package, but has requested to +be included as part of the Astropy project's community. These packages +are expressing an interest in Astropy's goals of improving reuse, +interoperability, and interface standards for python astronomy and +astrophysics packages. + +If you are developer interested in signing up as an affiliated package, +details are at the end of this page. + + +Featured packages +================= + +Montage-wrapper +--------------- + +.. |mont| image:: montage.png + +.. |monthome| replace:: Home +.. _monthome: http://www.astropy.org/montage-wrapper + +.. |montdocs| replace:: Documentation +.. _montdocs: http://montage-wrapper.readthedocs.org/ + +.. |montinst| replace:: Installation +.. _montinst: http://montage-wrapper.readthedocs.org/en/latest/#installation + ++--------+-------------------------------------------------------------------+ +| |mont| | **About:** Montage-wrapper is a pure Python module that provides a| +| | Python API to the Montage Astronomical Image Mosaic Engine, | +| | including both functions to access individual Montage commands, | +| | and high-level functions to facilitate mosaicking and | +| | re-projecting. Python-montage uses the Astropy core package for | +| | reading and writing FITS files. | +| | | +| | **Developer:** Thomas Robitaille | +| | | +| | |monthome|_ - |montdocs|_ - |montinst|_ | +| | | ++--------+-------------------------------------------------------------------+ + +Ginga +----- + +.. |ginga| image:: ginga.png + +.. |gingahome| replace:: Home and Installation +.. _gingahome: http://ejeschke.github.io/ginga/ + ++--------+-------------------------------------------------------------------+ +||ginga| | **About:** Ginga is a viewer for astronomical data FITS (Flexible | +| | Image Transport System) files. The Ginga viewer centers around a | +| | new FITS display widget which supports zooming and panning, color | +| | and intensity mapping, a choice of several automatic cut levels | +| | algorithms and canvases for plotting scalable geometric forms. | +| | | +| | **Developer:** Eric Jeschkee | +| | | +| | |gingahome|_ | +| | | ++--------+-------------------------------------------------------------------+ + + +APLpy +----- + +.. |aplpy| image:: aplpy.png + +.. |aplpyhome| replace:: Home +.. _aplpyhome: http://aplpy.github.io + +.. |aplpydocs| replace:: Documentation +.. _aplpydocs: http://aplpy.readthedocs.org + +.. |aplpyinst| replace:: Installation +.. _aplpyinst: http://aplpy.github.io/install.html + ++--------+-------------------------------------------------------------------+ +||aplpy| | **About:** APLpy (the Astronomical Plotting Library in Python) is | +| | a Python module aimed at producing publication-quality plots of | +| | astronomical imaging data in FITS format. The module uses | +| | Matplotlib, a powerful and interactive plotting package. It is | +| | capable of creating output files in several graphical formats, | +| | including EPS, PDF, PS, PNG, and SVG. | +| | | +| | **Developers:** Thomas Robitaille, Eli Bressert, Adam Ginsburg | +| | | +| | |aplpyhome|_ - |aplpydocs|_ - |aplpyinst|_ | +| | | ++--------+-------------------------------------------------------------------+ + +Other packages +============== + +Stable packages +--------------- + +* `astroML `_: tools for machine learning and data mining in Astronomy +* `Astropysics `_: library of IDL astronomy routines converted to Python. + +In development +-------------- + +A few additional affiliated packages are currently in development, including: + +* `photutils `_: photometry tools +* `astroquery `_: online database querying +* `specutils `_: spectroscopic analysis utilities +* `kcorrect `_: Python bindings to kcorrect code of Blanton et al. 2007 + +These packages are still very much in development, and the user interface (API) may not be stable. If you do try these packages, please do report any issues to the developers, so + +Affiliated Package Registry +=========================== + +The following table lists all currently registered affiliated packages. +This table is determined from the http://affiliated.astropy.org/registry.json +file, which is the actual authoritative registry. The *Stable* column indicates +whether the package maintainer consider the package to be ready for use. +Packages that are under heavy development and for which the user interface +is likely to change significantly in the near future are marked as *No*. + +.. The javascript at the bottom does the actual table populating + ++--------------+---------+-----------+----------+-----------------+------------+ +| Package Name | Stable | PyPI Name | Web Page | Code Repository | Maintainer | ++==============+=========+===========+==========+=================+============+ +| Loading... | + + + | | ++--------------+---------+-----------+----------+-----------------+------------+ + + + +Becoming an affiliated package +============================== + +If you are the developer of an astronomy package and would like to become +affiliated with the Astropy project, contact the Astropy coordination commitee +by leaving a message on the `astropy-dev `_ +group, or by contacting one of the coordination committee members directly. + +A candiate affilated package will be judged by the coordination committee on the following +standards: + +* It should use `classes and functions from the astropy package `_ + wherever possible and appropriate. This facilitates re-use of code and + sharing of resources. +* The package should have documentation that adequately explains the use of the + package, at standards comparable to `astropy`. Additionally, user-facing + classes and functions should all have docstrings. We suggest using `sphinx`, + with the `numpydoc`-like `docstring standards used by astropy `_, + but this is not a strict requirement as long as the documentation is of + comparable quality. +* The package should make a best-effort to include an easy-to-run test suite + that covers its intended functionality. We realize this is not possible + always possible, but when possible, a test suite is a crucial element of + stable software and reproducible science. +* The package developer(s) should make an effort to connect with the Astropy + developer community, including both relevant parts of the core `astropy` + package and any related affiliated packages. + + +If you are considering creating a new astronomy package and would like it to be +an Astropy affiliated package, we provides a package template to make it much +easier to meet these standards. It provides the necessary structure to +generate documentation like that used in the `astropy` package, a ready-to-use +testing framework, and a variety of tools that streamline tasks like user +configuration, caching downloaded files, or linking C-compiled extensions. More +details on this template are available in the `usage instructions for the +template `_ . +We also provide +`coding guidelines `_ +that will make your code easier to read by members of the community. + + + + +.. raw:: html + + + + diff --git a/_sources/contributing.txt b/_sources/contributing.txt new file mode 100644 index 00000000..057f8480 --- /dev/null +++ b/_sources/contributing.txt @@ -0,0 +1,42 @@ +:orphan: + +Contributing to Astropy +======================= + +.. _`issue tracker`: http://github.com/astropy/astropy/issues +.. _`astropy-dev`: http://groups.google.com/group/astropy-dev +.. _`contributing`: http://astropy.readthedocs.org/en/latest/development/workflow/index.html + +There are many different ways you can contribute to the Astropy project! + +Report issues +------------- + +Even if you don't have time to contribute code or documentation, please make +sure you report any issues with the package, the documentation, or this +website, to the Astropy `issue tracker`_! + +Contribute code +--------------- + +If you are interested in contributing fixes, code or documentation to Astropy +(whether the core package or affiliated packages), you can join the +`astropy-dev`_ mailing list, and head over to the documentation pages on +`contributing`_ to Astropy. You can either send us a patch, or (preferably) +work on a fork of Astropy and submit the changes via a pull request. + +Develop an affiliated package +----------------------------- + +Whether you have an idea for a new Astronomy package, or already have a +package that you want to integrate with the Astropy project, you can develop +an affiliated package! After joining the `astropy-dev`_ list and notifying +other developers of your intent to develop an affiliated package, you can head +over `here `_ for instructions on +getting started! We can even create a repository for your affiliated package +in the `astropy` organization on GitHub! + +Community +--------- +Astropy welcomes anyone who wants to contribute to the project. We follow the +`Python Software Foundation Code of Conduct `_. diff --git a/_sources/docs.txt b/_sources/docs.txt new file mode 100644 index 00000000..6e741029 --- /dev/null +++ b/_sources/docs.txt @@ -0,0 +1,16 @@ +:orphan: + +Astropy Documentation +===================== + +Below are links to the documentation for all versions of Astropy. + +* `Latest developer version `_ +* `v0.3 (Current Stable Version) `_ +* `v0.2.5 `_ +* `v0.2.4 `_ +* `v0.2.3 `_ +* `v0.2.2 `_ +* `v0.2.1 `_ +* `v0.2 `_ +* `v0.1 `_ diff --git a/_sources/feedback/index.txt b/_sources/feedback/index.txt new file mode 100644 index 00000000..315ee72d --- /dev/null +++ b/_sources/feedback/index.txt @@ -0,0 +1,33 @@ +:orphan: + +Astropy Feedback (and getting help) +=================================== + +Astropy is a package for the community, and the developers depend on the +feedback from users to understand how we can improve Astropy. + +There are several ways in which you can give us feedback: + +* If you would like to give us feedback and participate in discussions, we + encourage you to join the astropy_ mailing list and post + there. This should be the preferred way if you are interested in having a + discussion with the developers and other users. + +* If you have feedback you would prefer to keep private, you can e-mail + `astropy-feedback@googlegroups.com`_. This address points to a private mailing list that + includes the astropy core developers. If you would like a reply (e.g., an + acknowledgement of your comment), please request it. + +* For the extremely impatient, astropy developers often hang out in the + #astropy freenode.net IRC_ channel, which can be accessed for free without + registration from any IRC client (e.g., http://webchat.freenode.net?channels=astropy). + +* We also welcome code posts as `issues`_ (or `pull requests`_) on github and + as posts to the `astropy-dev`_ google group. + +.. _IRC: http://en.wikipedia.org/wiki/Irc +.. _astropy-feedback@googlegroups.com: mailto:astropy-feedback@googlegroups.com +.. _astropy: http://mail.scipy.org/mailman/listinfo/astropy +.. _issues: http://github.com/astropy/astropy/issues +.. _pull requests: https://github.com/astropy/astropy/pulls +.. _astropy-dev: https://groups.google.com/forum/#!forum/astropy-dev diff --git a/_sources/index.txt b/_sources/index.txt new file mode 100644 index 00000000..31bf85bd --- /dev/null +++ b/_sources/index.txt @@ -0,0 +1,142 @@ +.. _`PyFITS`: http://www.stsci.edu/institute/software_hardware/pyfits +.. _`PyWCS`: https://trac.assembla.com/astrolib +.. _`vo`: https://trac.assembla.com/astrolib +.. _`asciitable`: http://cxc.harvard.edu/contrib/asciitable/ +.. _`astropy`: http://mail.scipy.org/mailman/listinfo/astropy +.. _`astropy-dev`: http://groups.google.com/group/astropy-dev +.. _`issue tracker`: http://github.com/astropy/astropy/issues +.. _`latest documentation`: http://astropy.readthedocs.org/en/latest/install.html +.. _`Numpy`: http://numpy.scipy.org +.. _`Python`: http://www.python.org +.. _`pip`: http://pypi.python.org/pypi/pip +.. _`Cython`: http://cython.org/ +.. |currentstable| replace:: Astropy 0.3 +.. _currentstable: http://pypi.python.org/packages/source/a/astropy/astropy-0.3.tar.gz + +.. raw:: html + +
+ +.. image:: logos/astropy_banner_96.png + +.. raw:: html + +
+ +The Astropy Project is a community effort to develop a single core package for +Astronomy in `Python`_ and foster interoperability between `Python`_ astronomy packages. +Development is actively ongoing, with major packages such as `PyFITS`_, +`PyWCS`_, `vo`_, and `asciitable`_ already merged in, and many other components +are under development. For more details, on the plan for the Astropy +project, you can read the :doc:`original vision `, or the +`documentation overview `_. + +The current stable version is |currentstable|_. (`Changelog `_) + +Stay updated by following `@astropy `_ on Twitter, and sign up for the `astropy`_ mailing list, where you can ask python astronomy +questions of all sorts! If you want to get involved in Astropy development +efforts, or other more technical discussions of Astropy, join the +`astropy-dev`_ list. + +**Please note:** If you use Astropy for work/research presented in a +publication, please read `Acknowledging the use of Astropy`_. + +How to start working with Astropy +--------------------------------- + +Take a look at the `Getting Started `_ +guide in the documentation for an initial look at how to work with Astropy. + + +Documentation +------------- + +The documentation for the `astropy` core package is available at the +websites listed below. The first is for the most recent released +version. The second is for a version of the documentation that is +automatically updated any time a change is made to the +`astropy source code repository `_. + +* `Stable version (docs.astropy.org) `_ +* `Latest developer version (devdocs.astropy.org) `_ +* :doc:`All versions ` + + + +Installing +---------- + +Detailed up-to-date installation instructions are provided in the `latest documentation`_, but +we have included a simplified version here. + +Astropy requires `Python`_ 2.6, 2.7, 3.1, 3.2, or 3.3, and `Numpy`_ 1.5 or later. The +best way to install astropy is to use `pip`_:: + + pip install astropy + +Or alternatively, you can download the source from the current version (|currentstable|_), +and install the source code in that archive using:: + + python setup.py install + +You can check that astropy is correctly installed by starting up ``python`` or ``ipython``, and importing ``astropy``:: + + >>> import astropy + +If you do not get any errors, the installation was successful! + +.. note:: + + If you want to install the latest *developer* version of Astropy, use:: + + git clone https://github.com/astropy/astropy.git + cd astropy + python setup.py install + + Be aware that the developer build requires `Cython`_ (in addition to `Numpy`_). + + +Getting help +------------ + +If you want to discuss issues with other Astropy users, you can sign up +to the `astropy`_ mailing list. Alternatively, the `astropy-dev`_ list +is where you should go to discuss more technical aspects of Astropy. + +Reporting issues +---------------- + +If you have come across something that you believe is a bug, please open a +ticket in the Astropy `issue tracker`_, and we will look into it promptly! + +Acknowledging the use of Astropy +-------------------------------- + +Publications +============ + +If you use Astropy for work/research presented in a publication (whether +directly, or as a dependency to another package), we would be grateful if you +could include the following acknowledgment: + +*This research made use of Astropy, a community-developed core Python package +for Astronomy (Astropy Collaboration, 2013).* + +where *(Astropy Collaboration, 2013)* is a citation to `this paper +`_ (`ADS `_ - `BibTeX `_). + +If you wish, you can also include a link to ``_ (if +the journal allows this) in addition to the above text. + +Presentations +============= + +If you are giving a presentation or talk featuring work/research that makes use of +Astropy and would like to acknowledge Astropy, we suggest using :download:`this logo ` on your title slide: + +.. image :: logos/astropy_powered.png + :width: 180px + :height: 33px + +The logo is :download:`also available with white text `, +or the SVG originals can be obtained at the `astropy-logo github repository `_. diff --git a/_sources/team.txt b/_sources/team.txt new file mode 100644 index 00000000..035f3675 --- /dev/null +++ b/_sources/team.txt @@ -0,0 +1,16 @@ +:orphan: + +The Astropy Team +================ + +.. warning:: + If the web site builds correctly, this page should get replaced and the + text below should never appear. + +This is a placeholder for the Astropy author list. In the build process +for the site, this will be replaced by a copy taken from the Astropy +core package repository. If you're seeing this page, it means that +download process failed somehow. If you're not connected to the +internet but have a local copy of astropy, you can try setting the +``ASTROPY_REPO_PATH`` environment variable to point to the +repository. diff --git a/_sources/vision.txt b/_sources/vision.txt new file mode 100644 index 00000000..817f39c3 --- /dev/null +++ b/_sources/vision.txt @@ -0,0 +1,110 @@ +:orphan: + +Vision for a Common Astronomy Python Package +============================================ + +The following document summarizes the original 'manifesto' for the Astropy +project which was adopted in July 2011. + +Long-term Vision +---------------- + +The ultimate goal that we seek is a package that would contain much of the +core functionality and some common tools required across Astronomy, but not +*everything* Astronomers will ever need. The aim is primarily to avoid +duplication for common core tasks, and to provide a robust framework upon +which to build more complex tools. + +Such a common package should not preclude any other Astronomy package from +existing, because there will always be more complex and/or specialized tools +required. These tools will be able to rely on a single core library for many +tasks, and thus reduce the number of dependencies, reduce duplication of +functionality, and increase consistency of their interfaces. + +Procedure +--------- + +With the help of the community, the coordination committee will start by +identifying a few of key areas where initial development/consolidation will be +needed (such as FITS, WCS, coordinates, tables, photometry, spectra, etc.) and +will encourage teams to be formed to build standalone packages implementing +this functionality. These packages will be referred to as affiliated packages +(meaning that they are intended for future integration in the core package). + +A set of requirements will be set out concerning the interfaces and +classes/methods that affiliated packages will need to make available in order +to ensure consistency between the different components. As the core package +grows, new potential areas/components for the core package will be identified. +Competition cannot be avoided, and will not be actively discouraged, but +whenever possible, developers should strive to work as a team to provide a +single and robust affiliated package, for the benefit of the community. + +The affiliated packages will be developed outside the core package in +independent repositories, which will allow the teams the choice of tool and +organization. Once an affiliated package has implemented the desired +functionality, and satisfies quality criteria for coding style, documentation, +and testing, it will be considered for inclusion in the core package, and +further development will be done directly in the core package either via +direct access to the repository, or via patches/pull requests (exactly how +this will be done will be decided later). + +To ensure uniformity across affiliated packages, and to facilitate integration +with the core package, developers who wish to submit their affiliated packages +for inclusion in the core will need to follow the layout of a *template* +package that will be provided before development starts. + +Dependencies +------------ + +Affiliated packages should be able to be imported with only the following +dependencies: + +* The Python Standard Library +* NumPy, SciPy, and Matplotlib +* Components already in the core Astronomy package + +Other packages may be used, but must be imported as needed rather than during +the initial import of the package. + +If a dependency is needed, but is an affiliated package, the dependent package +will need to wait until the dependency is integrated into the core package +before being itself considered for inclusion. In the mean time, it can make +use of the other affiliated package in its current form, or other packages, so +as not to stall development. Thus, the first packages to be included in the +core will be those only requiring the standard library, NumPy, SciPy, and +Matplotlib. + +If the required dependency will never be part of a main package, then by +default the dependency can be included but should be imported as needed +(meaning that it only prevents the importing of that component, not the entire +core package), unless a strong case is made and a general consensus is reached +by the community that this dependency is important enough to be required at a +higher level. + +This system means that packages will be integrated into the core package in an +order depending on the dependency tree, and also ensures that the interfaces +of packages being integrated into the core package are consistent with those +already in the core package. + +Initially, no dependency on GUI toolkits will be allowed in the core package. +If the community reaches agrees on a single toolkit that could be used, then +this toolkit will be allowed (but will only be imported as needed). + +Keeping track of affiliated packages +------------------------------------ + +Affiliated packages will be listed in a central location (in addition to PyPI) +that will allow an easy installation of all the affiliated packages, for +example with a script that will seamlessly download and install all the +affiliated packages. The core package will also include mechanisms to +facilitate this installation process. + +Existing Packages +----------------- + +Developers who already have existing packages will be encouraged to continue +supporting them for the benefit of users until the core library is considered +stable, contains this functionality, and is released to the community. +Thereafter, developers should encourage users to transition to using the +functionality in the core package, and eventually phase out their own +packages, unless they provide added value over the core package. diff --git a/_static/ajax-loader.gif b/_static/ajax-loader.gif new file mode 100644 index 00000000..61faf8ca Binary files /dev/null and b/_static/ajax-loader.gif differ diff --git a/_static/astropy_logo.ico b/_static/astropy_logo.ico new file mode 100644 index 00000000..c2bca3af Binary files /dev/null and b/_static/astropy_logo.ico differ diff --git a/_static/astropy_word_32.png b/_static/astropy_word_32.png new file mode 100644 index 00000000..7fd42f9f Binary files /dev/null and b/_static/astropy_word_32.png differ diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..43e8bafa --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,540 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + +img { + border: 0; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/bootstrap-dropdown.js b/_static/bootstrap-dropdown.js new file mode 100644 index 00000000..fda6da59 --- /dev/null +++ b/_static/bootstrap-dropdown.js @@ -0,0 +1,55 @@ +/* ============================================================ + * bootstrap-dropdown.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#dropdown + * ============================================================ + * Copyright 2011 Twitter, Inc. + * + * 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. + * ============================================================ */ + + +!function( $ ){ + + "use strict" + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + $.fn.dropdown = function ( selector ) { + return this.each(function () { + $(this).delegate(selector || d, 'click', function (e) { + var li = $(this).parent('li') + , isActive = li.hasClass('open') + + clearMenus() + !isActive && li.toggleClass('open') + return false + }) + }) + } + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + var d = 'a.menu, .dropdown-toggle' + + function clearMenus() { + $(d).parent('li').removeClass('open') + } + + $(function () { + $('html').bind("click", clearMenus) + $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' ) + }) + +}( window.jQuery || window.ender ); diff --git a/_static/bootstrap-scrollspy.js b/_static/bootstrap-scrollspy.js new file mode 100644 index 00000000..efbc4329 --- /dev/null +++ b/_static/bootstrap-scrollspy.js @@ -0,0 +1,107 @@ +/* ============================================================= + * bootstrap-scrollspy.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * Copyright 2011 Twitter, Inc. + * + * 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. + * ============================================================== */ + + +!function ( $ ) { + + "use strict" + + var $window = $(window) + + function ScrollSpy( topbar, selector ) { + var processScroll = $.proxy(this.processScroll, this) + this.$topbar = $(topbar) + this.selector = selector || 'li > a' + this.refresh() + this.$topbar.delegate(this.selector, 'click', processScroll) + $window.scroll(processScroll) + this.processScroll() + } + + ScrollSpy.prototype = { + + refresh: function () { + this.targets = this.$topbar.find(this.selector).map(function () { + var href = $(this).attr('href') + return /^#\w/.test(href) && $(href).length ? href : null + }) + + this.offsets = $.map(this.targets, function (id) { + return $(id).offset().top + }) + } + + , processScroll: function () { + var scrollTop = $window.scrollTop() + 10 + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activateButton( targets[i] ) + } + } + + , activateButton: function (target) { + this.activeTarget = target + + this.$topbar + .find(this.selector).parent('.active') + .removeClass('active') + + this.$topbar + .find(this.selector + '[href="' + target + '"]') + .parent('li') + .addClass('active') + } + + } + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + $.fn.scrollSpy = function( options ) { + var scrollspy = this.data('scrollspy') + + if (!scrollspy) { + return this.each(function () { + $(this).data('scrollspy', new ScrollSpy( this, options )) + }) + } + + if ( options === true ) { + return scrollspy + } + + if ( typeof options == 'string' ) { + scrollspy[options]() + } + + return this + } + + $(document).ready(function () { + $('body').scrollSpy('[data-scrollspy] li > a') + }) + +}( window.jQuery || window.ender ); \ No newline at end of file diff --git a/_static/bootstrap-sphinx.css b/_static/bootstrap-sphinx.css new file mode 100644 index 00000000..f082e0fd --- /dev/null +++ b/_static/bootstrap-sphinx.css @@ -0,0 +1,19 @@ +/* +* bootstrap-sphinx.css +* ~~~~~~~~~~~~~~~~~~~~ +* +* Sphinx stylesheet -- Twitter Bootstrap theme. +*/ + +body { + padding-top: 42px; +} + +div.documentwrapper { + float: left; + width: 100%; +} +.topbar h3 a, .topbar .brand { + background: transparent url("astropy_word_32.png") no-repeat 22px 4px; + padding-left: 62px; +} \ No newline at end of file diff --git a/_static/bootstrap.css b/_static/bootstrap.css new file mode 100644 index 00000000..dd20b54e --- /dev/null +++ b/_static/bootstrap.css @@ -0,0 +1,2496 @@ +/* The following few lines were added by T. Robitaille for Astropy website */ + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: hidden; +} + +.logo_banner { + padding-top: 20px; + padding-bottom: 10px; +} + +.brand { + width: 72px; + height: 32px; +} + +/*! + * Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + * Date: Sun Nov 20 21:42:29 PST 2011 + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html, body { + margin: 0; + padding: 0; + text-align: justify; +} +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +cite, +code, +del, +dfn, +em, +img, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +dd, +dl, +dt, +li, +ol, +ul, +fieldset, +form, +label, +legend, +button, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +ol, ul { + list-style: none; +} +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted; +} +a:hover, a:active { + outline: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; + -ms-interpolation-mode: bicubic; +} +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +button, input { + line-height: normal; + *overflow: visible; +} +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +/* Variables.less + * Variables to customize the look and feel of Bootstrap + * ----------------------------------------------------- */ +/* Mixins.less + * Snippets of reusable CSS to develop faster and keep code readable + * ----------------------------------------------------------------- */ +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; +} +.container { + width: 740px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} +.container:after { + clear: both; +} +.container-fluid { + position: relative; + min-width: 740px; + padding-left: 20px; + padding-right: 20px; + zoom: 1; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: ""; + zoom: 1; +} +.container-fluid:after { + clear: both; +} +.container-fluid > .sidebar { + position: absolute; + top: 0; + left: 20px; + width: 220px; +} +.container-fluid > .content { + margin-left: 240px; +} +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} +a:hover { + color: #00438a; + text-decoration: underline; +} +.pull-right { + float: right; + width: 250px; + text-align: right; +} +.pull-left { + float: left; + width: 250px; + text-align: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.row { + zoom: 1; + margin-left: -20px; +} +.row:before, .row:after { + display: table; + content: ""; + zoom: 1; +} +.row:after { + clear: both; +} +.row > [class*="span"] { + display: inline; + float: left; + margin-left: 20px; +} +.span1 { + width: 40px; +} +.span2 { + width: 100px; +} +.span3 { + width: 160px; +} +.span4 { + width: 220px; +} +.span5 { + width: 280px; +} +.span6 { + width: 340px; +} +.span7 { + width: 400px; +} +.span8 { + width: 460px; +} +.span9 { + width: 520px; +} +.span10 { + width: 580px; +} +.span11 { + width: 640px; +} +.span12 { + width: 700px; +} +.span13 { + width: 760px; +} +.span14 { + width: 820px; +} +.span15 { + width: 880px; +} +.span16 { + width: 740px; +} +.span17 { + width: 1000px; +} +.span18 { + width: 1060px; +} +.span19 { + width: 1120px; +} +.span20 { + width: 1180px; +} +.span21 { + width: 1240px; +} +.span22 { + width: 1300px; +} +.span23 { + width: 1360px; +} +.span24 { + width: 1420px; +} +.row > .offset1 { + margin-left: 80px; +} +.row > .offset2 { + margin-left: 140px; +} +.row > .offset3 { + margin-left: 200px; +} +.row > .offset4 { + margin-left: 260px; +} +.row > .offset5 { + margin-left: 320px; +} +.row > .offset6 { + margin-left: 380px; +} +.row > .offset7 { + margin-left: 440px; +} +.row > .offset8 { + margin-left: 500px; +} +.row > .offset9 { + margin-left: 560px; +} +.row > .offset10 { + margin-left: 620px; +} +.row > .offset11 { + margin-left: 680px; +} +.row > .offset12 { + margin-left: 740px; +} +.span-one-third { + width: 300px; +} +.span-two-thirds { + width: 620px; +} +.row > .offset-one-third { + margin-left: 340px; +} +.row > .offset-two-thirds { + margin-left: 660px; +} +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} +p small { + font-size: 11px; + color: #bfbfbf; +} +h1, +h2, +h3, +h4, +h5, +h6 { +/* font-weight: bold;*/ + color: #404040; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} +h1 { + margin-top: 14px; + margin-bottom: 10px; + font-size: 22px; + line-height: 33px; +} +h1 small { + font-size: 18px; +} +h2 { + font-size: 18px; + line-height: 27px; + margin-bottom: 10px; +} +h2 small { + font-size: 14px; +} +h3, +h4, +h5, +h6 { + line-height: 36px; +} +h3 { + font-size: 18px; +} +h3 small { + font-size: 14px; +} +h4 { + font-size: 16px; +} +h4 small { + font-size: 12px; +} +h5 { + font-size: 14px; +} +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} +ul, ol { + margin: 0 0 18px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: 18px; + color: #808080; +} +ul.unstyled { + list-style: none; + margin-left: 0; +} +dl { + margin-bottom: 18px; +} +dl dt, dl dd { + line-height: 18px; +} +dl dt { + font-weight: bold; +} +dl dd { + margin-left: 9px; +} +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} +strong { + font-style: inherit; + font-weight: bold; +} +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} +.muted { + color: #bfbfbf; +} +blockquote { + margin-bottom: 18px; + border-left: 5px solid #eee; + padding-left: 15px; +} +blockquote p { + font-size: 14px; + font-weight: 300; + line-height: 18px; + margin-bottom: 0; +} +blockquote small { + display: block; + font-size: 12px; + font-weight: 300; + line-height: 18px; + color: #bfbfbf; +} +blockquote small:before { + content: '\2014 \00A0'; +} +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} +fieldset { + margin-bottom: 18px; + padding-top: 18px; +} +fieldset legend { + display: block; + padding-left: 150px; + font-size: 19.5px; + line-height: 1; + color: #404040; + *padding: 0 0 5px 145px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .clearfix { + margin-bottom: 18px; + zoom: 1; +} +form .clearfix:before, form .clearfix:after { + display: table; + content: ""; + zoom: 1; +} +form .clearfix:after { + clear: both; +} +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} +label { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 130px; + text-align: right; + color: #404040; +} +form .input { + margin-left: 150px; +} +input[type=checkbox], input[type=radio] { + cursor: pointer; +} +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +select { + padding: initial; +} +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} +select, input[type=file] { + height: 27px; + *height: auto; + line-height: 27px; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + +} +select[multiple] { + height: inherit; + background-color: #ffffff; +} +textarea { + height: auto; +} +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +:-moz-placeholder { + color: #bfbfbf; +} +::-webkit-input-placeholder { + color: #bfbfbf; +} +input, textarea { + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); +} +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 1px dotted #666; +} +form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { + color: #b94a48; +} +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} +form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { + color: #c09853; +} +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} +form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { + color: #468847; +} +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} +form .clearfix.success input:focus, form .clearfix.success textarea:focus { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} +.input-mini, +input.mini, +textarea.mini, +select.mini { + width: 60px; +} +.input-small, +input.small, +textarea.small, +select.small { + width: 90px; +} +.input-medium, +input.medium, +textarea.medium, +select.medium { + width: 150px; +} +.input-large, +input.large, +textarea.large, +select.large { + width: 210px; +} +.input-xlarge, +input.xlarge, +textarea.xlarge, +select.xlarge { + width: 270px; +} +.input-xxlarge, +input.xxlarge, +textarea.xxlarge, +select.xxlarge { + width: 530px; +} +textarea.xxlarge { + overflow-y: auto; +} +input.span1, textarea.span1 { + display: inline-block; + float: none; + width: 30px; + margin-left: 0; +} +input.span2, textarea.span2 { + display: inline-block; + float: none; + width: 90px; + margin-left: 0; +} +input.span3, textarea.span3 { + display: inline-block; + float: none; + width: 150px; + margin-left: 0; +} +input.span4, textarea.span4 { + display: inline-block; + float: none; + width: 210px; + margin-left: 0; +} +input.span5, textarea.span5 { + display: inline-block; + float: none; + width: 270px; + margin-left: 0; +} +input.span6, textarea.span6 { + display: inline-block; + float: none; + width: 330px; + margin-left: 0; +} +input.span7, textarea.span7 { + display: inline-block; + float: none; + width: 390px; + margin-left: 0; +} +input.span8, textarea.span8 { + display: inline-block; + float: none; + width: 450px; + margin-left: 0; +} +input.span9, textarea.span9 { + display: inline-block; + float: none; + width: 510px; + margin-left: 0; +} +input.span10, textarea.span10 { + display: inline-block; + float: none; + width: 570px; + margin-left: 0; +} +input.span11, textarea.span11 { + display: inline-block; + float: none; + width: 630px; + margin-left: 0; +} +input.span12, textarea.span12 { + display: inline-block; + float: none; + width: 690px; + margin-left: 0; +} +input.span13, textarea.span13 { + display: inline-block; + float: none; + width: 750px; + margin-left: 0; +} +input.span14, textarea.span14 { + display: inline-block; + float: none; + width: 810px; + margin-left: 0; +} +input.span15, textarea.span15 { + display: inline-block; + float: none; + width: 870px; + margin-left: 0; +} +input.span16, textarea.span16 { + display: inline-block; + float: none; + width: 930px; + margin-left: 0; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} +.actions { + background: #f5f5f5; + margin-top: 18px; + margin-bottom: 18px; + padding: 17px 20px 18px 150px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.actions .secondary-action { + float: right; +} +.actions .secondary-action a { + line-height: 30px; +} +.actions .secondary-action a:hover { + text-decoration: underline; +} +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} +.help-block { + display: block; + max-width: 600px; +} +.inline-inputs { + color: #808080; +} +.inline-inputs span { + padding: 0 2px 0 1px; +} +.input-prepend input, .input-append input { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-prepend .add-on, .input-append .add-on { + position: relative; + background: #f5f5f5; + border: 1px solid #ccc; + z-index: 2; + float: left; + display: block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 4px 4px 5px; + margin-right: -1px; + font-weight: normal; + line-height: 18px; + color: #bfbfbf; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-prepend .active, .input-append .active { + background: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on { + *margin-top: 1px; + /* IE6-7 */ + +} +.input-append input { + float: left; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-append .add-on { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-right: 0; + margin-left: -1px; +} +.inputs-list { + margin: 0 0 5px; + width: 100%; +} +.inputs-list li { + display: block; + padding: 0; + width: 100%; +} +.inputs-list label { + display: block; + float: none; + width: auto; + padding: 0; + margin-left: 20px; + line-height: 18px; + text-align: left; + white-space: normal; +} +.inputs-list label strong { + color: #808080; +} +.inputs-list label small { + font-size: 11px; + font-weight: normal; +} +.inputs-list .inputs-list { + margin-left: 25px; + margin-bottom: 10px; + padding-top: 0; +} +.inputs-list:first-child { + padding-top: 6px; +} +.inputs-list li + li { + padding-top: 2px; +} +.inputs-list input[type=radio], .inputs-list input[type=checkbox] { + margin-bottom: 0; + margin-left: -20px; + float: left; +} +.form-stacked { + padding-left: 20px; +} +.form-stacked fieldset { + padding-top: 9px; +} +.form-stacked legend { + padding-left: 0; +} +.form-stacked label { + display: block; + float: none; + width: auto; + font-weight: bold; + text-align: left; + line-height: 20px; + padding-top: 0; +} +.form-stacked .clearfix { + margin-bottom: 9px; +} +.form-stacked .clearfix div.input { + margin-left: 0; +} +.form-stacked .inputs-list { + margin-bottom: 0; +} +.form-stacked .inputs-list li { + padding-top: 0; +} +.form-stacked .inputs-list li label { + font-weight: normal; + padding-top: 0; +} +.form-stacked div.clearfix.error { + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + margin-top: 0; + margin-left: -10px; +} +.form-stacked .actions { + margin-left: -20px; + padding-left: 20px; +} +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +table { + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} +table th, table td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} +table th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} +table td { + vertical-align: top; + border-top: 1px solid #ddd; +} +table tbody th { + border-top: 1px solid #ddd; + vertical-align: top; +} +.condensed-table th, .condensed-table td { + padding: 5px 5px 4px; +} +.bordered-table { + border: 1px solid #ddd; + border-collapse: separate; + *border-collapse: collapse; + /* IE7, collapse table to remove spacing */ + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.bordered-table th + th, .bordered-table td + td, .bordered-table th + td { + border-left: 1px solid #ddd; +} +.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child { + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; + border-radius: 4px 0 0 0; +} +.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} +.bordered-table tbody tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; +} +.bordered-table tbody tr:last-child td:last-child { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} +table .span1 { + width: 20px; +} +table .span2 { + width: 60px; +} +table .span3 { + width: 100px; +} +table .span4 { + width: 140px; +} +table .span5 { + width: 180px; +} +table .span6 { + width: 220px; +} +table .span7 { + width: 260px; +} +table .span8 { + width: 300px; +} +table .span9 { + width: 340px; +} +table .span10 { + width: 380px; +} +table .span11 { + width: 420px; +} +table .span12 { + width: 460px; +} +table .span13 { + width: 500px; +} +table .span14 { + width: 540px; +} +table .span15 { + width: 580px; +} +table .span16 { + width: 620px; +} +.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} +.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th { + background-color: #f5f5f5; +} +table .header { + cursor: pointer; +} +table .header:after { + content: ""; + float: right; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: #000 transparent; + visibility: hidden; +} +table .headerSortUp, table .headerSortDown { + background-color: rgba(141, 192, 219, 0.25); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +} +table .header:hover:after { + visibility: visible; +} +table .headerSortDown:after, table .headerSortDown:hover:after { + visibility: visible; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .headerSortUp:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #000; + visibility: visible; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .blue { + color: #049cdb; + border-bottom-color: #049cdb; +} +table .headerSortUp.blue, table .headerSortDown.blue { + background-color: #ade6fe; +} +table .green { + color: #46a546; + border-bottom-color: #46a546; +} +table .headerSortUp.green, table .headerSortDown.green { + background-color: #cdeacd; +} +table .red { + color: #9d261d; + border-bottom-color: #9d261d; +} +table .headerSortUp.red, table .headerSortDown.red { + background-color: #f4c8c5; +} +table .yellow { + color: #ffc40d; + border-bottom-color: #ffc40d; +} +table .headerSortUp.yellow, table .headerSortDown.yellow { + background-color: #fff6d9; +} +table .orange { + color: #f89406; + border-bottom-color: #f89406; +} +table .headerSortUp.orange, table .headerSortDown.orange { + background-color: #fee9cc; +} +table .purple { + color: #7a43b6; + border-bottom-color: #7a43b6; +} +table .headerSortUp.purple, table .headerSortDown.purple { + background-color: #e2d5f0; +} +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +.topbar { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; +} +.topbar a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} +.topbar h3 { + position: relative; +} +.topbar h3 a, .topbar .brand { + float: left; + display: block; + padding: 8px 0px 0px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} +.topbar p { + margin: 0; + line-height: 40px; +} +.topbar p a:hover { + background-color: transparent; + color: #ffffff; +} +.topbar form { + float: left; + margin: 5px 0 0 0; + position: relative; + filter: alpha(opacity=100); + -khtml-opacity: 1; + -moz-opacity: 1; + opacity: 1; +} +.topbar form.pull-right { + float: right; +} +.topbar input { + background-color: #444; + background-color: rgba(255, 255, 255, 0.3); + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: normal; + font-weight: 13px; + line-height: 1; + padding: 4px 9px; + color: #ffffff; + color: rgba(255, 255, 255, 0.75); + border: 1px solid #111; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} +.topbar input:-moz-placeholder { + color: #e6e6e6; +} +.topbar input::-webkit-input-placeholder { + color: #e6e6e6; +} +.topbar input:hover { + background-color: #bfbfbf; + background-color: rgba(255, 255, 255, 0.5); + color: #ffffff; +} +.topbar input:focus, .topbar input.focused { + outline: 0; + background-color: #ffffff; + color: #404040; + text-shadow: 0 1px 0 #ffffff; + border: 0; + padding: 5px 10px; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} +.topbar-inner, .topbar .fill { + background-color: #222; + background-color: #222222; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222)); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} +.topbar div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} +.topbar div > ul > li, .nav > li { + display: block; + float: left; +} +.topbar div > ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} +.topbar div > ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} +.topbar div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} +.topbar div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0px; +} +.topbar div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +.topbar div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} +.topbar div > ul a.menu:hover, +.nav a.menu:hover, +.topbar div > ul li.open .menu, +.nav li.open .menu, +.topbar div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +.topbar div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown, +.nav .menu-dropdown, +.topbar div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #333; +} +.topbar div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +.topbar div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +.topbar div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +.topbar div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #ffffff; +} +.topbar div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +.topbar div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +.topbar div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +.topbar div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +.topbar div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} +.topbar div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +.topbar div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #191919; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(top, #292929, #191919); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); + color: #ffffff; +} +.topbar div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +.topbar div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #ffffff; +} +.topbar div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +.topbar div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} +.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a { + padding: 4px 15px; +} +li.menu, .dropdown { + position: relative; +} +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + filter: alpha(opacity=50); + -khtml-opacity: 0.5; + -moz-opacity: 0.5; + opacity: 0.5; +} +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + display: none; + position: absolute; + top: 40px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: none; +} +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} +.topbar .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} +.topbar .dropdown-menu a:hover, +.dropdown-menu a:hover, +.topbar .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); + background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); + background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); + background-image: -o-linear-gradient(top, #eeeeee, #dddddd); + background-image: linear-gradient(top, #eeeeee, #dddddd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); + color: #404040; + text-decoration: none; + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + display: block; +} +.tabs, .pills { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} +.tabs:before, +.pills:before, +.tabs:after, +.pills:after { + display: table; + content: ""; + zoom: 1; +} +.tabs:after, .pills:after { + clear: both; +} +.tabs > li, .pills > li { + float: left; +} +.tabs > li > a, .pills > li > a { + display: block; +} +.tabs { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} +.tabs > li { + position: relative; + margin-bottom: -1px; +} +.tabs > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} +.tabs .active > a, .tabs .active > a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.tabs .menu-dropdown, .tabs .dropdown-menu { + top: 35px; + border-width: 1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.tabs a.menu:after, .tabs .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle { + border-color: #999; +} +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} +.pills a { + margin: 5px 3px 5px 0; + padding: 0 15px; + line-height: 30px; + text-shadow: 0 1px 1px #ffffff; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pills a:hover { + color: #ffffff; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #00438a; +} +.pills .active a { + color: #ffffff; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #0069d6; +} +.pills-vertical > li { + float: none; +} +.tab-content > .tab-pane, +.pill-content > .pill-pane, +.tab-content > div, +.pill-content > div { + display: none; +} +.tab-content > .active, .pill-content > .active { + display: block; +} +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} +.breadcrumb .active a { + color: #404040; +} +.hero-unit { + background-color: #f5f5f5; + margin-bottom: 30px; + padding: 60px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} +.page-header { + margin-bottom: 17px; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.page-header h1 { + margin-bottom: 8px; +} +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #ffffff; +} +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; +} +.btn:hover { + background-position: 0 -15px; + color: #333; + text-decoration: none; +} +.btn:focus { + outline: 1px dotted #666; +} +.btn.primary { + color: #ffffff; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(top, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.active, .btn:active { + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.btn.disabled { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn[disabled] { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} +:root .alert-message, :root .btn { + border-radius: 0 \0; +} +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + filter: alpha(opacity=25); + -khtml-opacity: 0.25; + -moz-opacity: 0.25; + opacity: 0.25; +} +.close:hover { + color: #000000; + text-decoration: none; + filter: alpha(opacity=40); + -khtml-opacity: 0.4; + -moz-opacity: 0.4; + opacity: 0.4; +} +.alert-message { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(top, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} +.alert-message a { + font-weight: bold; + color: #404040; +} +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #ffffff; +} +.alert-message h5 { + line-height: 18px; +} +.alert-message p { + margin-bottom: 0; +} +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} +.alert-message .btn { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message.block-message { + background-image: none; + background-color: #fdf5d9; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + padding: 14px; + border-color: #fceec1; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.alert-message.block-message ul, .alert-message.block-message p { + margin-right: 30px; +} +.alert-message.block-message ul { + margin-bottom: 0; +} +.alert-message.block-message li { + color: #404040; +} +.alert-message.block-message .alert-actions { + margin-top: 5px; +} +.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info { + color: #404040; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.alert-message.block-message.error { + background-color: #fddfde; + border-color: #fbc7c6; +} +.alert-message.block-message.success { + background-color: #d1eed1; + border-color: #bfe7bf; +} +.alert-message.block-message.info { + background-color: #ddf4fb; + border-color: #c6edf9; +} +.alert-message.block-message.danger p a, +.alert-message.block-message.error p a, +.alert-message.block-message.success p a, +.alert-message.block-message.info p a { + color: #404040; +} +.pagination { + height: 36px; + margin: 18px 0; +} +.pagination ul { + float: left; + margin: 0; + border: 1px solid #ddd; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination li { + display: inline; +} +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + border-right: 1px solid; + border-right-color: #ddd; + border-right-color: rgba(0, 0, 0, 0.15); + *border-right-color: #ddd; + /* IE6-7 */ + + text-decoration: none; +} +.pagination a:hover, .pagination .active a { + background-color: #c7eefe; +} +.pagination .disabled a, .pagination .disabled a:hover { + background-color: transparent; + color: #bfbfbf; +} +.pagination .next a { + border: 0; +} +.well { + background-color: #f5f5f5; + margin-bottom: 20px; + padding: 19px; + min-height: 20px; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.modal-backdrop { + background-color: #000000; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, .modal-backdrop.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 11000; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal .close { + margin-top: 7px; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -ms-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 50%; +} +.modal-header { + border-bottom: 1px solid #eee; + padding: 5px 15px; +} +.modal-body { + padding: 15px; +} +.modal-body form { + margin-bottom: 0; +} +.modal-footer { + background-color: #f5f5f5; + padding: 14px 15px 15px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + zoom: 1; + margin-bottom: 0; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: ""; + zoom: 1; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn { + float: right; + margin-left: 5px; +} +.modal .popover, .modal .twipsy { + z-index: 12000; +} +.twipsy { + display: block; + position: absolute; + visibility: visible; + padding: 5px; + font-size: 11px; + z-index: 1000; + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.above .twipsy-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.twipsy.left .twipsy-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.twipsy.below .twipsy-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.twipsy.right .twipsy-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.twipsy-inner { + padding: 3px 8px; + background-color: #000000; + color: white; + text-align: center; + max-width: 200px; + text-decoration: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.twipsy-arrow { + position: absolute; + width: 0; + height: 0; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + padding: 5px; + display: none; +} +.popover.above .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.popover.below .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} +.popover .inner { + background: #000000; + background: rgba(0, 0, 0, 0.8); + padding: 3px; + overflow: hidden; + width: 280px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} +.popover .title { + background-color: #f5f5f5; + padding: 9px 15px; + line-height: 1; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + border-bottom: 1px solid #eee; +} +.popover .content { + background-color: #ffffff; + padding: 14px; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.popover .content p, .popover .content ul, .popover .content ol { + margin-bottom: 0; +} +.fade { + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + opacity: 0; +} +.fade.in { + opacity: 1; +} +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.label.important { + background-color: #c43c35; +} +.label.warning { + background-color: #f89406; +} +.label.success { + background-color: #46a546; +} +.label.notice { + background-color: #62cffc; +} +.media-grid { + margin-left: -20px; + margin-bottom: 0; + zoom: 1; +} +.media-grid:before, .media-grid:after { + display: table; + content: ""; + zoom: 1; +} +.media-grid:after { + clear: both; +} +.media-grid li { + display: inline; +} +.media-grid a { + float: left; + padding: 4px; + margin: 0 0 18px 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} +.media-grid a img { + display: block; +} +.media-grid a:hover { + border-color: #0069d6; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} diff --git a/_static/comment-bright.png b/_static/comment-bright.png new file mode 100644 index 00000000..551517b8 Binary files /dev/null and b/_static/comment-bright.png differ diff --git a/_static/comment-close.png b/_static/comment-close.png new file mode 100644 index 00000000..09b54be4 Binary files /dev/null and b/_static/comment-close.png differ diff --git a/_static/comment.png b/_static/comment.png new file mode 100644 index 00000000..92feb52b Binary files /dev/null and b/_static/comment.png differ diff --git a/_static/css/astropy-org.css b/_static/css/astropy-org.css deleted file mode 100644 index 56c079c8..00000000 --- a/_static/css/astropy-org.css +++ /dev/null @@ -1,73 +0,0 @@ -.bd-sidebar-secondary { - background-color: transparent; -} - -a.sd-btn { - border: none; -} - -a.sd-btn { - color: var(--sst-lightest-color); - background-image: linear-gradient(var(--sst-accent-color-muted), var(--sst-accent-color-bright)); -} - -a.sd-btn:hover, -a.sd-btn:visited:hover { - color: var(--sst-dark-color); - background: rgba(255, 255, 255, 0.3); - background-blend-mode: lighten; - background-image: linear-gradient(var(--sst-accent-color-muted), var(--sst-accent-color-bright)); - text-decoration: none; -} - -table{ - margin: 20px 0px; - word-break:overflow-wrap; -} - -.package-table { - border: 0; -} - -table.package-table thead{ - text-align: left; - font-weight: bold; - border-bottom: 1px solid rgba(128,128,128,0.2); -} - -table.package-table td{ - padding:5px 5px; - font-size: 100%; - line-height: 1.3em; - border: 0; -} - -table.package-table td.first-package-row { - padding:15px 5px 5px 5px; - font-weight: bold; - min-width: 130px; -} - -.package-table td ~ td, .table td ~ th, .table th ~ td, .table th ~ th { - border-left: 0; -} - -.package-table tbody tr:nth-child(2n+1), -.package-table tbody tr { - background-color: transparent !important; -} - -/* Create a border after every 3rd row to visually separate packages */ -.forth-row-sep tbody tr:nth-child(4n+5) { - border-top: 1px var(--bs-border-color) solid; -} -.third-row-sep tbody tr:nth-child(3n+4) { - border-top: 1px var(--bs-border-color) solid; -} - -.announce-logo { - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; -} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d4619fdf --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,247 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +} + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s == 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * small function to check if an array contains + * a given item. + */ +jQuery.contains = function(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] == item) + return true; + } + return false; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_static/down-pressed.png b/_static/down-pressed.png new file mode 100644 index 00000000..6f7ad782 Binary files /dev/null and b/_static/down-pressed.png differ diff --git a/_static/down.png b/_static/down.png new file mode 100644 index 00000000..3003a887 Binary files /dev/null and b/_static/down.png differ diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 00000000..d18082e3 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/fork_me_on_github.png b/_static/fork_me_on_github.png new file mode 100644 index 00000000..7dc1afca Binary files /dev/null and b/_static/fork_me_on_github.png differ diff --git a/_static/img/Numfocus_stamp.png b/_static/img/Numfocus_stamp.png deleted file mode 100644 index 31065310..00000000 Binary files a/_static/img/Numfocus_stamp.png and /dev/null differ diff --git a/_static/img/astropy_banner.svg b/_static/img/astropy_banner.svg deleted file mode 100644 index a52c65ed..00000000 --- a/_static/img/astropy_banner.svg +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/img/astropy_brandmark.png b/_static/img/astropy_brandmark.png deleted file mode 100644 index bcff0ed6..00000000 Binary files a/_static/img/astropy_brandmark.png and /dev/null differ diff --git a/_static/img/astropy_doge.png b/_static/img/astropy_doge.png deleted file mode 100644 index 26f4877e..00000000 Binary files a/_static/img/astropy_doge.png and /dev/null differ diff --git a/_static/img/astropy_logo_notext.png b/_static/img/astropy_logo_notext.png deleted file mode 100644 index bcff0ed6..00000000 Binary files a/_static/img/astropy_logo_notext.png and /dev/null differ diff --git a/_static/img/astropy_meow.png b/_static/img/astropy_meow.png deleted file mode 100644 index 5e386187..00000000 Binary files a/_static/img/astropy_meow.png and /dev/null differ diff --git a/_static/img/astropy_powered.png b/_static/img/astropy_powered.png deleted file mode 100644 index 391d19f2..00000000 Binary files a/_static/img/astropy_powered.png and /dev/null differ diff --git a/_static/img/astropy_project_logo.png b/_static/img/astropy_project_logo.png deleted file mode 100644 index 4f80191a..00000000 Binary files a/_static/img/astropy_project_logo.png and /dev/null differ diff --git a/_static/img/astropy_project_logo.svg b/_static/img/astropy_project_logo.svg deleted file mode 100644 index 4ec8d6e5..00000000 --- a/_static/img/astropy_project_logo.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/img/astropy_word.svg b/_static/img/astropy_word.svg deleted file mode 100644 index 599fd90b..00000000 --- a/_static/img/astropy_word.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/img/astropy_word_32.png b/_static/img/astropy_word_32.png deleted file mode 100644 index 7125b632..00000000 Binary files a/_static/img/astropy_word_32.png and /dev/null differ diff --git a/_static/img/background.jpg b/_static/img/background.jpg deleted file mode 100644 index 8e1e5753..00000000 Binary files a/_static/img/background.jpg and /dev/null differ diff --git a/_static/img/favicon.ico b/_static/img/favicon.ico deleted file mode 100644 index 16d5af74..00000000 Binary files a/_static/img/favicon.ico and /dev/null differ diff --git a/_static/img/menu.png b/_static/img/menu.png deleted file mode 100644 index 9a173ddb..00000000 Binary files a/_static/img/menu.png and /dev/null differ diff --git a/_static/img/menu.svg b/_static/img/menu.svg deleted file mode 100644 index 11d8167f..00000000 --- a/_static/img/menu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/_static/img/python-mark.png b/_static/img/python-mark.png deleted file mode 100644 index a70f69b4..00000000 Binary files a/_static/img/python-mark.png and /dev/null differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 00000000..7c243080 --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/_static/js/functions.js b/_static/js/functions.js deleted file mode 100644 index f843b511..00000000 --- a/_static/js/functions.js +++ /dev/null @@ -1,329 +0,0 @@ -// Using jQuery is ok because it is needed by and bundled with sphinx - -// Quirk to note: the jQuery.getJSON function fails if you open this locally -// with Chrome, because Chrome thinks local JSON files are unsafe for some -// reason. Use basically any other modern browser, or it works fine if its -// actually on the web server even with chrome. - -function url_translator(urltext) { - if (urltext === undefined) { - return 'None'; - } else { - return '' + 'Website' + ''; - } -} - - -function repo_translator(urltext) { - if (urltext === undefined) { - return 'None'; - } else { - return '' + 'Repository' + ''; - } -} - - -function pypi_translator(pypiname) { - if (pypiname === undefined) { - return 'None'; - } else { - var urltext = 'https://pypi.python.org/pypi/' + pypiname; - return '' + 'PyPI' + ''; - } -} - - -function bool_translator(stable) { - if (stable) { - return 'Yes'; - } else { - return 'No'; - } -} - - -function ghuser_translator(fullname, ghname) { - if (fullname === undefined || ghname === undefined) { - return 'None'; - } else { - var urltext = 'https://github.com/' + ghname; - if (fullname === null) { - fullname = ghname; - } - return '' + fullname + ''; - } -} - - -var _email_regex_str = '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'; -var _email_regex = new RegExp(_email_regex_str, 'i'); -var _email_with_name_regex = new RegExp('(.+)<(' + _email_regex_str + ')>', 'i'); - - -function maintainer_translator(maint, pkgnm) { - var url, match; - if (_email_with_name_regex.test(maint)) { - match = _email_with_name_regex.exec(maint); - url = 'mailto:' + match[2] + '?subject=Astropy%20affiliated%20package%20' + pkgnm; - return '' + match[1] + ''; - } else if (_email_regex.test(maint)) { - url = 'mailto:' + maint + '?subject=Astropy%20affiliated%20package%20' + pkgnm; - return '' + maint + ''; - } else { - return maint; - } -} - - -function createRolesTable(roles) { - var tab = document.getElementById("roles-table"); - tab.deleteRow(1); - //roles is an array of objects called "role" - var rows = ''; - roles.forEach(function (role) { - //role is an object containing information about each team role - //index marks current people - var index = 0; - - // for roles where there are no sub-roles, the people are defined - // at the top-level of the JSON role dict - for convenience below we create - // a virtual sub-role with no heading - if (!('sub-roles' in role)) { - role['sub-roles'] = [{'role': '', - 'people': role['people']}]; - } - - //creating each row by iterating over each person in a role - role["sub-roles"].forEach(function (subrole) { - //rowRole is displayed once for each role - rowRole = index == 0 ? '' + role["role"] + '' : ""; - - var rowSubRole = subrole['role']; - - if (subrole['people'][0] == "Unfilled") { - rowPeople = 'Unfilled'; - } else { - rowPeople = subrole['people'].join(', '); - } - - //generating rows - if (index == 0) { - rows += ''; - } else { - rows += ''; - } - - rows += '' + rowRole + '' + - '' + rowSubRole + '' + - '' + rowPeople + '' + - ''; - index++; - }); - }); - - $("#roles-table").append(rows); -} - - -function createRolesDescription(roles) { - //roles is an array of objects called "role" - var blocks = ""; - roles.forEach(function (role) { - //role is an object containing information about each team role - var list = ""; - //checking if role["description"] array isn't empty - if (role["responsibilities"] != null) { - - // If responsibilities is a dict, wrap inside a list so that all entries have a list - // dicts - if (role['responsibilities'].constructor == Object) { - role['responsibilities'] = [role['responsibilities']]; - } - - //console.log(role['responsibilities']); - - blocks += '

' + role["role-head"] + '

'; - - index = 0; - - role['responsibilities'].forEach(function (resp) { - - //console.log(resp); - - detail_list = ''; - resp["details"].forEach(function (detail) { - detail_list += '
  • ' + detail + '
  • '; - }); - - if ('subrole-head' in resp) { - if (index > 0) { - blocks += '
    '; - } - blocks += '' + resp["subrole-head"] + ''; - } - blocks += '

    ' + resp["description"] + '

    ' + - '
      ' + detail_list + '
    '; - - index += 1; - - }) - - } - }); - $("#roles-description").append(blocks); -} - - -function populateRoles(data, tstat, xhr) { - //creating roles table from json data - createRolesTable(data); - //creating roles lists from json data - createRolesDescription(data); -} - - -function populateTables(data, tstat, xhr) { - populatePackageTable('coordinated', filter_pkg_data(data, "coordinated", true)); - populatePackageTable('affiliated', filter_pkg_data(data, "coordinated", false)); -} - - -function filter_pkg_data(data, field, value) { - if (data === null) { - return null; - } - var pkgs = data.packages; - var filtered_data = []; - - for (i=0; i nmarr[b] ? 1 : 0; }); - - var pkgi; - var namerow, descrow, shieldrow, maintrow; - var nmcell, pypicell, urlcell, repocell; - var desccell, maintcell, shieldcell; - - for (i=0; i" + " " - } - } - } - return shield_string -} - - -function guess_os() { - var OSName="source"; - if (navigator.appVersion.indexOf("Win")!=-1) OSName="windows"; - if (navigator.appVersion.indexOf("Mac")!=-1) OSName="osx"; - if (navigator.appVersion.indexOf("Linux")!=-1) OSName="linux"; - return OSName; -} diff --git a/_static/js/jquery.sidr.min.js b/_static/js/jquery.sidr.min.js deleted file mode 100644 index c0e3deb4..00000000 --- a/_static/js/jquery.sidr.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! Sidr - v1.2.1 - 2013-11-06 - * https://github.com/artberri/sidr - * Copyright (c) 2013 Alberto Varela; Licensed MIT */ -(function(e){var t=!1,i=!1,n={isUrl:function(e){var t=RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");return t.test(e)?!0:!1},loadContent:function(e,t){e.html(t)},addPrefix:function(e){var t=e.attr("id"),i=e.attr("class");"string"==typeof t&&""!==t&&e.attr("id",t.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-id-$1")),"string"==typeof i&&""!==i&&"sidr-inner"!==i&&e.attr("class",i.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-class-$1")),e.removeAttr("style")},execute:function(n,s,a){"function"==typeof s?(a=s,s="sidr"):s||(s="sidr");var r,d,l,c=e("#"+s),u=e(c.data("body")),f=e("html"),p=c.outerWidth(!0),g=c.data("speed"),h=c.data("side"),m=c.data("displace"),v=c.data("onOpen"),y=c.data("onClose"),x="sidr"===s?"sidr-open":"sidr-open "+s+"-open";if("open"===n||"toggle"===n&&!c.is(":visible")){if(c.is(":visible")||t)return;if(i!==!1)return o.close(i,function(){o.open(s)}),void 0;t=!0,"left"===h?(r={left:p+"px"},d={left:"0px"}):(r={right:p+"px"},d={right:"0px"}),u.is("body")&&(l=f.scrollTop(),f.css("overflow-x","hidden").scrollTop(l)),m?u.addClass("sidr-animating").css({width:u.width(),position:"absolute"}).animate(r,g,function(){e(this).addClass(x)}):setTimeout(function(){e(this).addClass(x)},g),c.css("display","block").animate(d,g,function(){t=!1,i=s,"function"==typeof a&&a(s),u.removeClass("sidr-animating")}),v()}else{if(!c.is(":visible")||t)return;t=!0,"left"===h?(r={left:0},d={left:"-"+p+"px"}):(r={right:0},d={right:"-"+p+"px"}),u.is("body")&&(l=f.scrollTop(),f.removeAttr("style").scrollTop(l)),u.addClass("sidr-animating").animate(r,g).removeClass(x),c.animate(d,g,function(){c.removeAttr("style").hide(),u.removeAttr("style"),e("html").removeAttr("style"),t=!1,i=!1,"function"==typeof a&&a(s),u.removeClass("sidr-animating")}),y()}}},o={open:function(e,t){n.execute("open",e,t)},close:function(e,t){n.execute("close",e,t)},toggle:function(e,t){n.execute("toggle",e,t)},toogle:function(e,t){n.execute("toggle",e,t)}};e.sidr=function(t){return o[t]?o[t].apply(this,Array.prototype.slice.call(arguments,1)):"function"!=typeof t&&"string"!=typeof t&&t?(e.error("Method "+t+" does not exist on jQuery.sidr"),void 0):o.toggle.apply(this,arguments)},e.fn.sidr=function(t){var i=e.extend({name:"sidr",speed:200,side:"left",source:null,renaming:!0,body:"body",displace:!0,onOpen:function(){},onClose:function(){}},t),s=i.name,a=e("#"+s);if(0===a.length&&(a=e("
    ").attr("id",s).appendTo(e("body"))),a.addClass("sidr").addClass(i.side).data({speed:i.speed,side:i.side,body:i.body,displace:i.displace,onOpen:i.onOpen,onClose:i.onClose}),"function"==typeof i.source){var r=i.source(s);n.loadContent(a,r)}else if("string"==typeof i.source&&n.isUrl(i.source))e.get(i.source,function(e){n.loadContent(a,e)});else if("string"==typeof i.source){var d="",l=i.source.split(",");if(e.each(l,function(t,i){d+='
    '+e(i).html()+"
    "}),i.renaming){var c=e("
    ").html(d);c.find("*").each(function(t,i){var o=e(i);n.addPrefix(o)}),d=c.html()}n.loadContent(a,d)}else null!==i.source&&e.error("Invalid Sidr Source");return this.each(function(){var t=e(this),i=t.data("sidr");i||(t.data("sidr",s),"ontouchstart"in document.documentElement?(t.bind("touchstart",function(e){e.originalEvent.touches[0],this.touched=e.timeStamp}),t.bind("touchend",function(e){var t=Math.abs(e.timeStamp-this.touched);200>t&&(e.preventDefault(),o.toggle(s))})):t.click(function(e){e.preventDefault(),o.toggle(s)}))})}})(jQuery); \ No newline at end of file diff --git a/_static/js/yaml_parse_bundle.js b/_static/js/yaml_parse_bundle.js deleted file mode 100644 index bce10c7a..00000000 --- a/_static/js/yaml_parse_bundle.js +++ /dev/null @@ -1,138 +0,0 @@ -(()=>{var an=Object.defineProperty;var as=(s,e)=>{for(var t in e)an(s,t,{get:e[t],enumerable:!0})};var ls={};as(ls,{Alias:()=>ee,CST:()=>ns,Composer:()=>be,Document:()=>se,Lexer:()=>Me,LineCounter:()=>Be,Pair:()=>C,Parser:()=>we,Scalar:()=>y,Schema:()=>Ce,YAMLError:()=>$e,YAMLMap:()=>$,YAMLParseError:()=>q,YAMLSeq:()=>M,YAMLWarning:()=>_e,isAlias:()=>F,isCollection:()=>T,isDocument:()=>X,isMap:()=>R,isNode:()=>L,isPair:()=>A,isScalar:()=>O,isSeq:()=>U,parse:()=>rn,parseAllDocuments:()=>nn,parseDocument:()=>os,stringify:()=>on,visit:()=>V,visitAsync:()=>je});var et=Symbol.for("yaml.alias"),tt=Symbol.for("yaml.document"),Q=Symbol.for("yaml.map"),Mt=Symbol.for("yaml.pair"),x=Symbol.for("yaml.scalar"),re=Symbol.for("yaml.seq"),j=Symbol.for("yaml.node.type"),F=s=>!!s&&typeof s=="object"&&s[j]===et,X=s=>!!s&&typeof s=="object"&&s[j]===tt,R=s=>!!s&&typeof s=="object"&&s[j]===Q,A=s=>!!s&&typeof s=="object"&&s[j]===Mt,O=s=>!!s&&typeof s=="object"&&s[j]===x,U=s=>!!s&&typeof s=="object"&&s[j]===re;function T(s){if(s&&typeof s=="object")switch(s[j]){case Q:case re:return!0}return!1}function L(s){if(s&&typeof s=="object")switch(s[j]){case et:case Q:case x:case re:return!0}return!1}var cs=s=>(O(s)||T(s))&&!!s.anchor;var K=Symbol("break visit"),fs=Symbol("skip children"),z=Symbol("remove node");function V(s,e){let t=us(e);X(s)?ke(null,s.contents,t,Object.freeze([s]))===z&&(s.contents=null):ke(null,s,t,Object.freeze([]))}V.BREAK=K;V.SKIP=fs;V.REMOVE=z;function ke(s,e,t,n){let i=hs(s,e,t,n);if(L(i)||A(i))return ps(s,n,i),ke(s,i,t,n);if(typeof i!="symbol"){if(T(e)){n=Object.freeze(n.concat(e));for(let r=0;rs.replace(/[!,[\]{}]/g,e=>cn[e]),Z=class s{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},s.defaultYaml,e),this.tags=Object.assign({},s.defaultTags,t)}clone(){let e=new s(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new s(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:s.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},s.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:s.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},s.defaultTags),this.atNextDocument=!1);let n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;let[r,o]=n;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[r]=n;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{let o=/^\d+\.\d+$/.test(r);return t(6,`Unsupported YAML version ${r}`,o),!1}}default:return t(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||t(`The ${e} tag has no suffix`);let r=this.tags[n];if(r)try{return r+decodeURIComponent(i)}catch(o){return t(String(o)),null}return n==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+fn(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags),i;if(e&&n.length>0&&L(e.contents)){let r={};V(e.contents,(o,l)=>{L(l)&&l.tag&&(r[l.tag]=!0)}),i=Object.keys(r)}else i=[];for(let[r,o]of n)r==="!!"&&o==="tag:yaml.org,2002:"||(!e||i.some(l=>l.startsWith(o)))&&t.push(`%TAG ${r} ${o}`);return t.join(` -`)}};Z.defaultYaml={explicit:!1,version:"1.2"};Z.defaultTags={"!!":"tag:yaml.org,2002:"};function st(s){if(/[\x00-\x19\s,[\]{}]/.test(s)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(s)}`;throw new Error(t)}return!0}function Bt(s){let e=new Set;return V(s,{Value(t,n){n.anchor&&e.add(n.anchor)}}),e}function Dt(s,e){for(let t=1;;++t){let n=`${s}${t}`;if(!e.has(n))return n}}function ms(s,e){let t=[],n=new Map,i=null;return{onAnchor:r=>{t.push(r),i||(i=Bt(s));let o=Dt(e,i);return i.add(o),o},setAnchors:()=>{for(let r of t){let o=n.get(r);if(typeof o=="object"&&o.anchor&&(O(o.node)||T(o.node)))o.node.anchor=o.anchor;else{let l=new Error("Failed to resolve repeated object (this should not happen)");throw l.source=r,l}}},sourceObjects:n}}function ce(s,e,t,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let i=0,r=n.length;i_(n,String(i),t));if(s&&typeof s.toJSON=="function"){if(!t||!cs(s))return s.toJSON(e,t);let n={aliasCount:0,count:1,res:void 0};t.anchors.set(s,n),t.onCreate=r=>{n.res=r,delete t.onCreate};let i=s.toJSON(e,t);return t.onCreate&&t.onCreate(i),i}return typeof s=="bigint"&&!t?.keep?Number(s):s}var fe=class{constructor(e){Object.defineProperty(this,j,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:i,reviver:r}={}){if(!X(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},l=_(this,"",o);if(typeof i=="function")for(let{count:a,res:c}of o.anchors.values())i(c,a);return typeof r=="function"?ce(r,{"":l},"",l):l}};var ee=class extends fe{constructor(e){super(et),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return V(e,{Node:(n,i)=>{if(i===this)return V.BREAK;i.anchor===this.source&&(t=i)}}),t}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:i,maxAliasCount:r}=t,o=this.resolve(i);if(!o){let a=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(a)}let l=n.get(o);if(l||(_(o,null,t),l=n.get(o)),!l||l.res===void 0){let a="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(a)}if(r>=0&&(l.count+=1,l.aliasCount===0&&(l.aliasCount=nt(i,o,n)),l.count*l.aliasCount>r)){let a="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(a)}return l.res}toString(e,t,n){let i=`*${this.source}`;if(e){if(st(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let r=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(r)}if(e.implicitKey)return`${i} `}return i}};function nt(s,e,t){if(F(e)){let n=e.resolve(s),i=t&&n&&t.get(n);return i?i.count*i.aliasCount:0}else if(T(e)){let n=0;for(let i of e.items){let r=nt(s,i,t);r>n&&(n=r)}return n}else if(A(e)){let n=nt(s,e.key,t),i=nt(s,e.value,t);return Math.max(n,i)}return 1}var it=s=>!s||typeof s!="function"&&typeof s!="object",y=class extends fe{constructor(e){super(x),this.value=e}toJSON(e,t){return t?.keep?this.value:_(this.value,e,t)}toString(){return String(this.value)}};y.BLOCK_FOLDED="BLOCK_FOLDED";y.BLOCK_LITERAL="BLOCK_LITERAL";y.PLAIN="PLAIN";y.QUOTE_DOUBLE="QUOTE_DOUBLE";y.QUOTE_SINGLE="QUOTE_SINGLE";var un="tag:yaml.org,2002:";function hn(s,e,t){if(e){let n=t.filter(r=>r.tag===e),i=n.find(r=>!r.format)??n[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return t.find(n=>n.identify?.(s)&&!n.format)}function oe(s,e,t){if(X(s)&&(s=s.contents),L(s))return s;if(A(s)){let f=t.schema[Q].createNode?.(t.schema,null,t);return f.items.push(s),f}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());let{aliasDuplicateObjects:n,onAnchor:i,onTagObj:r,schema:o,sourceObjects:l}=t,a;if(n&&s&&typeof s=="object"){if(a=l.get(s),a)return a.anchor||(a.anchor=i(s)),new ee(a.anchor);a={anchor:null,node:null},l.set(s,a)}e?.startsWith("!!")&&(e=un+e.slice(2));let c=hn(s,e,o.tags);if(!c){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){let f=new y(s);return a&&(a.node=f),f}c=s instanceof Map?o[Q]:Symbol.iterator in Object(s)?o[re]:o[Q]}r&&(r(c),delete t.onTagObj);let p=c?.createNode?c.createNode(t.schema,s,t):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(t.schema,s,t):new y(s);return e?p.tag=e:c.default||(p.tag=c.tag),a&&(a.node=p),p}function Ke(s,e,t){let n=t;for(let i=e.length-1;i>=0;--i){let r=e[i];if(typeof r=="number"&&Number.isInteger(r)&&r>=0){let o=[];o[r]=n,n=o}else n=new Map([[r,n]])}return oe(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:s,sourceObjects:new Map})}var Oe=s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,ge=class extends fe{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(n=>L(n)||A(n)?n.clone(e):n),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Oe(e))this.add(t);else{let[n,...i]=e,r=this.get(n,!0);if(T(r))r.addIn(i,t);else if(r===void 0&&this.schema)this.set(n,Ke(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}deleteIn(e){let[t,...n]=e;if(n.length===0)return this.delete(t);let i=this.get(t,!0);if(T(i))return i.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){let[n,...i]=e,r=this.get(n,!0);return i.length===0?!t&&O(r)?r.value:r:T(r)?r.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!A(t))return!1;let n=t.value;return n==null||e&&O(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){let[t,...n]=e;if(n.length===0)return this.has(t);let i=this.get(t,!0);return T(i)?i.hasIn(n):!1}setIn(e,t){let[n,...i]=e;if(i.length===0)this.set(n,t);else{let r=this.get(n,!0);if(T(r))r.setIn(i,t);else if(r===void 0&&this.schema)this.set(n,Ke(this.schema,i,t));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}};ge.maxFlowStringSingleLineLength=60;var ds=s=>s.replace(/^(?!$)(?: $)?/gm,"#");function Y(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}var te=(s,e,t)=>s.endsWith(` -`)?Y(t,e):t.includes(` -`)?` -`+Y(t,e):(s.endsWith(" ")?"":" ")+t;var jt="flow",rt="block",qe="quoted";function xe(s,e,t="flow",{indentAtStart:n,lineWidth:i=80,minContentWidth:r=20,onFold:o,onOverflow:l}={}){if(!i||i<0)return s;let a=Math.max(1+r,1+i-e.length);if(s.length<=a)return s;let c=[],p={},f=i-e.length;typeof n=="number"&&(n>i-Math.max(2,r)?c.push(0):f=i-n);let h,d,b=!1,u=-1,m=-1,S=-1;t===rt&&(u=gs(s,u,e.length),u!==-1&&(f=u+a));for(let k;k=s[u+=1];){if(t===qe&&k==="\\"){switch(m=u,s[u+1]){case"x":u+=3;break;case"u":u+=5;break;case"U":u+=9;break;default:u+=1}S=u}if(k===` -`)t===rt&&(u=gs(s,u,e.length)),f=u+e.length+a,h=void 0;else{if(k===" "&&d&&d!==" "&&d!==` -`&&d!==" "){let N=s[u+1];N&&N!==" "&&N!==` -`&&N!==" "&&(h=u)}if(u>=f)if(h)c.push(h),f=h+a,h=void 0;else if(t===qe){for(;d===" "||d===" ";)d=k,k=s[u+=1],b=!0;let N=u>S+1?u-2:m-1;if(p[N])return s;c.push(N),p[N]=!0,f=N+a,h=void 0}else b=!0}d=k}if(b&&l&&l(),c.length===0)return s;o&&o();let w=s.slice(0,c[0]);for(let k=0;k({indentAtStart:e?s.indent.length:s.indentAtStart,lineWidth:s.options.lineWidth,minContentWidth:s.options.minContentWidth}),at=s=>/^(%|---|\.\.\.)/m.test(s);function pn(s,e,t){if(!e||e<0)return!1;let n=e-t,i=s.length;if(i<=n)return!1;for(let r=0,o=0;rn)return!0;if(o=r+1,i-o<=n)return!1}return!0}function Fe(s,e){let t=JSON.stringify(s);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:n}=e,i=e.options.doubleQuotedMinMultiLineLength,r=e.indent||(at(s)?" ":""),o="",l=0;for(let a=0,c=t[a];c;c=t[++a])if(c===" "&&t[a+1]==="\\"&&t[a+2]==="n"&&(o+=t.slice(l,a)+"\\ ",a+=1,l=a,c="\\"),c==="\\")switch(t[a+1]){case"u":{o+=t.slice(l,a);let p=t.substr(a+2,4);switch(p){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:p.substr(0,2)==="00"?o+="\\x"+p.substr(2):o+=t.substr(a,6)}a+=5,l=a+1}break;case"n":if(n||t[a+2]==='"'||t.length -`;let f,h;for(h=t.length;h>0;--h){let g=t[h-1];if(g!==` -`&&g!==" "&&g!==" ")break}let d=t.substring(h),b=d.indexOf(` -`);b===-1?f="-":t===d||b!==d.length-1?(f="+",r&&r()):f="",d&&(t=t.slice(0,-d.length),d[d.length-1]===` -`&&(d=d.slice(0,-1)),d=d.replace(qt,`$&${c}`));let u=!1,m,S=-1;for(m=0;m")+(u?c?"2":"1":"")+f;if(s&&(N+=" "+l(s.replace(/ ?[\r\n]+/g," ")),i&&i()),p)return t=t.replace(/\n+/g,`$&${c}`),`${N} -${c}${w}${t}${d}`;t=t.replace(/\n+/g,` -$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`);let E=xe(`${w}${t}${d}`,c,rt,lt(n,!0));return`${N} -${c}${E}`}function mn(s,e,t,n){let{type:i,value:r}=s,{actualString:o,implicitKey:l,indent:a,indentStep:c,inFlow:p}=e;if(l&&r.includes(` -`)||p&&/[[\]{},]/.test(r))return Ae(r,e);if(!r||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(r))return l||p||!r.includes(` -`)?Ae(r,e):ot(s,e,t,n);if(!l&&!p&&i!==y.PLAIN&&r.includes(` -`))return ot(s,e,t,n);if(at(r)){if(a==="")return e.forceBlockIndent=!0,ot(s,e,t,n);if(l&&a===c)return Ae(r,e)}let f=r.replace(/\n+/g,`$& -${a}`);if(o){let h=u=>u.default&&u.tag!=="tag:yaml.org,2002:str"&&u.test?.test(f),{compat:d,tags:b}=e.doc.schema;if(b.some(h)||d?.some(h))return Ae(r,e)}return l?f:xe(f,a,jt,lt(e,!1))}function le(s,e,t,n){let{implicitKey:i,inFlow:r}=e,o=typeof s.value=="string"?s:Object.assign({},s,{value:String(s.value)}),{type:l}=s;l!==y.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(l=y.QUOTE_DOUBLE);let a=p=>{switch(p){case y.BLOCK_FOLDED:case y.BLOCK_LITERAL:return i||r?Ae(o.value,e):ot(o,e,t,n);case y.QUOTE_DOUBLE:return Fe(o.value,e);case y.QUOTE_SINGLE:return Kt(o.value,e);case y.PLAIN:return mn(o,e,t,n);default:return null}},c=a(l);if(c===null){let{defaultKeyType:p,defaultStringType:f}=e.options,h=i&&p||f;if(c=a(h),c===null)throw new Error(`Unsupported default string type ${h}`)}return c}function ct(s,e){let t=Object.assign({blockQuote:!0,commentString:ds,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},s.schema.toStringOptions,e),n;switch(t.collectionStyle){case"block":n=!1;break;case"flow":n=!0;break;default:n=null}return{anchors:new Set,doc:s,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:n,options:t}}function dn(s,e){if(e.tag){let i=s.filter(r=>r.tag===e.tag);if(i.length>0)return i.find(r=>r.format===e.format)??i[0]}let t,n;if(O(e)){n=e.value;let i=s.filter(r=>r.identify?.(n));t=i.find(r=>r.format===e.format)??i.find(r=>!r.format)}else n=e,t=s.find(i=>i.nodeClass&&n instanceof i.nodeClass);if(!t){let i=n?.constructor?.name??typeof n;throw new Error(`Tag not resolved for ${i} value`)}return t}function gn(s,e,{anchors:t,doc:n}){if(!n.directives)return"";let i=[],r=(O(s)||T(s))&&s.anchor;r&&st(r)&&(t.add(r),i.push(`&${r}`));let o=s.tag?s.tag:e.default?null:e.tag;return o&&i.push(n.directives.tagString(o)),i.join(" ")}function ae(s,e,t,n){if(A(s))return s.toString(e,t,n);if(F(s)){if(e.doc.directives)return s.toString(e);if(e.resolvedAliases?.has(s))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(s):e.resolvedAliases=new Set([s]),s=s.resolve(e.doc)}let i,r=L(s)?s:e.doc.createNode(s,{onTagObj:a=>i=a});i||(i=dn(e.doc.schema.tags,r));let o=gn(r,i,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);let l=typeof i.stringify=="function"?i.stringify(r,e,t,n):O(r)?le(r,e,t,n):r.toString(e,t,n);return o?O(r)||l[0]==="{"||l[0]==="["?`${o} ${l}`:`${o} -${e.indent}${l}`:l}function ys({key:s,value:e},t,n,i){let{allNullValues:r,doc:o,indent:l,indentStep:a,options:{commentString:c,indentSeq:p,simpleKeys:f}}=t,h=L(s)&&s.comment||null;if(f){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(T(s)){let I="With simple keys, collection cannot be used as a key value";throw new Error(I)}}let d=!f&&(!s||h&&e==null&&!t.inFlow||T(s)||(O(s)?s.type===y.BLOCK_FOLDED||s.type===y.BLOCK_LITERAL:typeof s=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!d&&(f||!r),indent:l+a});let b=!1,u=!1,m=ae(s,t,()=>b=!0,()=>u=!0);if(!d&&!t.inFlow&&m.length>1024){if(f)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");d=!0}if(t.inFlow){if(r||e==null)return b&&n&&n(),m===""?"?":d?`? ${m}`:m}else if(r&&!f||e==null&&d)return m=`? ${m}`,h&&!b?m+=te(m,t.indent,c(h)):u&&i&&i(),m;b&&(h=null),d?(h&&(m+=te(m,t.indent,c(h))),m=`? ${m} -${l}:`):(m=`${m}:`,h&&(m+=te(m,t.indent,c(h))));let S,w,k;L(e)?(S=!!e.spaceBefore,w=e.commentBefore,k=e.comment):(S=!1,w=null,k=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!d&&!h&&O(e)&&(t.indentAtStart=m.length+1),u=!1,!p&&a.length>=2&&!t.inFlow&&!d&&U(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let N=!1,E=ae(e,t,()=>N=!0,()=>u=!0),g=" ";if(h||S||w){if(g=S?` -`:"",w){let I=c(w);g+=` -${Y(I,t.indent)}`}E===""&&!t.inFlow?g===` -`&&(g=` - -`):g+=` -${t.indent}`}else if(!d&&T(e)){let I=E[0],v=E.indexOf(` -`),B=v!==-1,de=t.inFlow??e.flow??e.items.length===0;if(B||!de){let Se=!1;if(B&&(I==="&"||I==="!")){let P=E.indexOf(" ");I==="&"&&P!==-1&&Ps===bs||O(s)&&s.value===bs&&(!s.type||s.type===y.PLAIN);function xt(s,e,t){let n=s&&F(t)?t.resolve(s.doc):t;if(!R(n))throw new Error("Merge sources must be maps or map aliases");let i=n.toJSON(null,s,Map);for(let[r,o]of i)e instanceof Map?e.has(r)||e.set(r,o):e instanceof Set?e.add(r):Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}function bn(s,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(L(s)&&t?.doc){let n=ct(t.doc,{});n.anchors=new Set;for(let r of t.anchors.keys())n.anchors.add(r.anchor);n.inFlow=!0,n.inStringifyKey=!0;let i=s.toString(n);if(!t.mapKeyWarned){let r=JSON.stringify(i);r.length>40&&(r=r.substring(0,36)+'..."'),ft(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${r}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return i}return JSON.stringify(e)}function Ee(s,e,t){let n=oe(s,void 0,t),i=oe(e,void 0,t);return new C(n,i)}var C=class s{constructor(e,t=null){Object.defineProperty(this,j,{value:Mt}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return L(t)&&(t=t.clone(e)),L(n)&&(n=n.clone(e)),new s(t,n)}toJSON(e,t){let n=t?.mapAsMap?new Map:{};return ut(t,n,this)}toString(e,t,n){return e?.doc?ys(this,e,t,n):JSON.stringify(this)}};function pt(s,e,t){return(e.inFlow??s.flow?Sn:wn)(s,e,t)}function wn({comment:s,items:e},t,{blockItemPrefix:n,flowChars:i,itemIndent:r,onChompKeep:o,onComment:l}){let{indent:a,options:{commentString:c}}=t,p=Object.assign({},t,{indent:r,type:null}),f=!1,h=[];for(let b=0;bm=null,()=>f=!0);m&&(S+=te(S,r,c(m))),f&&m&&(f=!1),h.push(n+S)}let d;if(h.length===0)d=i.start+i.end;else{d=h[0];for(let b=1;bm=null);bp||S.includes(` -`))&&(c=!0),f.push(S),p=f.length}let{start:h,end:d}=t;if(f.length===0)return h+d;if(!c){let b=f.reduce((u,m)=>u+m.length+2,2);c=e.options.lineWidth>0&&b>e.options.lineWidth}if(c){let b=h;for(let u of f)b+=u?` -${r}${i}${u}`:` -`;return`${b} -${i}${d}`}else return`${h}${o}${f.join(" ")}${o}${d}`}function ht({indent:s,options:{commentString:e}},t,n,i){if(n&&i&&(n=n.replace(/^\n+/,"")),n){let r=Y(e(n),s);t.push(r.trimStart())}}function ue(s,e){let t=O(e)?e.value:e;for(let n of s)if(A(n)&&(n.key===e||n.key===t||O(n.key)&&n.key.value===t))return n}var $=class extends ge{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Q,e),this.items=[]}static from(e,t,n){let{keepUndefined:i,replacer:r}=n,o=new this(e),l=(a,c)=>{if(typeof r=="function")c=r.call(t,a,c);else if(Array.isArray(r)&&!r.includes(a))return;(c!==void 0||i)&&o.items.push(Ee(a,c,n))};if(t instanceof Map)for(let[a,c]of t)l(a,c);else if(t&&typeof t=="object")for(let a of Object.keys(t))l(a,t[a]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let n;A(e)?n=e:!e||typeof e!="object"||!("key"in e)?n=new C(e,e?.value):n=new C(e.key,e.value);let i=ue(this.items,n.key),r=this.schema?.sortMapEntries;if(i){if(!t)throw new Error(`Key ${n.key} already set`);O(i.value)&&it(n.value)?i.value.value=n.value:i.value=n.value}else if(r){let o=this.items.findIndex(l=>r(n,l)<0);o===-1?this.items.push(n):this.items.splice(o,0,n)}else this.items.push(n)}delete(e){let t=ue(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let i=ue(this.items,e)?.value;return(!t&&O(i)?i.value:i)??void 0}has(e){return!!ue(this.items,e)}set(e,t){this.add(new C(e,t),!0)}toJSON(e,t,n){let i=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(i);for(let r of this.items)ut(t,i,r);return i}toString(e,t,n){if(!e)return JSON.stringify(this);for(let i of this.items)if(!A(i))throw new Error(`Map items must all be pairs; found ${JSON.stringify(i)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),pt(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}};var G={collection:"map",default:!0,nodeClass:$,tag:"tag:yaml.org,2002:map",resolve(s,e){return R(s)||e("Expected a mapping for this tag"),s},createNode:(s,e,t)=>$.from(s,e,t)};var M=class extends ge{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(re,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=mt(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let n=mt(e);if(typeof n!="number")return;let i=this.items[n];return!t&&O(i)?i.value:i}has(e){let t=mt(e);return typeof t=="number"&&t=0?e:null}var W={collection:"seq",default:!0,nodeClass:M,tag:"tag:yaml.org,2002:seq",resolve(s,e){return U(s)||e("Expected a sequence for this tag"),s},createNode:(s,e,t)=>M.from(s,e,t)};var he={identify:s=>typeof s=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:s=>s,stringify(s,e,t,n){return e=Object.assign({actualString:!0},e),le(s,e,t,n)}};var ye={identify:s=>s==null,createNode:()=>new y(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new y(null),stringify:({source:s},e)=>typeof s=="string"&&ye.test.test(s)?s:e.options.nullStr};var Re={identify:s=>typeof s=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:s=>new y(s[0]==="t"||s[0]==="T"),stringify({source:s,value:e},t){if(s&&Re.test.test(s)){let n=s[0]==="t"||s[0]==="T";if(e===n)return s}return e?t.options.trueStr:t.options.falseStr}};function D({format:s,minFractionDigits:e,tag:t,value:n}){if(typeof n=="bigint")return String(n);let i=typeof n=="number"?n:Number(n);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let r=JSON.stringify(n);if(!s&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(r)){let o=r.indexOf(".");o<0&&(o=r.length,r+=".");let l=e-(r.length-o-1);for(;l-- >0;)r+="0"}return r}var dt={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/,resolve:s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:D},gt={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:s=>parseFloat(s),stringify(s){let e=Number(s.value);return isFinite(e)?e.toExponential():D(s)}},yt={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(s){let e=new y(parseFloat(s)),t=s.indexOf(".");return t!==-1&&s[s.length-1]==="0"&&(e.minFractionDigits=s.length-t-1),e},stringify:D};var bt=s=>typeof s=="bigint"||Number.isInteger(s),Ft=(s,e,t,{intAsBigInt:n})=>n?BigInt(s):parseInt(s.substring(e),t);function ws(s,e,t){let{value:n}=s;return bt(n)&&n>=0?t+n.toString(e):D(s)}var wt={identify:s=>bt(s)&&s>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(s,e,t)=>Ft(s,2,8,t),stringify:s=>ws(s,8,"0o")},St={identify:bt,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(s,e,t)=>Ft(s,0,10,t),stringify:D},kt={identify:s=>bt(s)&&s>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(s,e,t)=>Ft(s,2,16,t),stringify:s=>ws(s,16,"0x")};var Ss=[G,W,he,ye,Re,wt,St,kt,dt,gt,yt];function ks(s){return typeof s=="bigint"||Number.isInteger(s)}var Nt=({value:s})=>JSON.stringify(s),kn=[{identify:s=>typeof s=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:s=>s,stringify:Nt},{identify:s=>s==null,createNode:()=>new y(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Nt},{identify:s=>typeof s=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:s=>s==="true",stringify:Nt},{identify:ks,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(s,e,{intAsBigInt:t})=>t?BigInt(s):parseInt(s,10),stringify:({value:s})=>ks(s)?s.toString():JSON.stringify(s)},{identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:s=>parseFloat(s),stringify:Nt}],Nn={default:!0,tag:"",test:/^/,resolve(s,e){return e(`Unresolved plain scalar ${JSON.stringify(s)}`),s}},Ns=[G,W].concat(kn,Nn);var Ue={identify:s=>s instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(s,e){if(typeof Buffer=="function")return Buffer.from(s,"base64");if(typeof atob=="function"){let t=atob(s.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let i=0;i1&&e("Each pair must have its own sequence indicator");let i=n.items[0]||new C(new y(null));if(n.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${n.commentBefore} -${i.key.commentBefore}`:n.commentBefore),n.comment){let r=i.value??i.key;r.comment=r.comment?`${n.comment} -${r.comment}`:n.comment}n=i}s.items[t]=A(n)?n:new C(n)}}else e("Expected a sequence for this tag");return s}function Ut(s,e,t){let{replacer:n}=t,i=new M(s);i.tag="tag:yaml.org,2002:pairs";let r=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof n=="function"&&(o=n.call(e,String(r++),o));let l,a;if(Array.isArray(o))if(o.length===2)l=o[0],a=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let c=Object.keys(o);if(c.length===1)l=c[0],a=o[l];else throw new TypeError(`Expected tuple with one key, not ${c.length} keys`)}else l=o;i.items.push(Ee(l,a,t))}return i}var Ve={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Rt,createNode:Ut};var Le=class s extends M{constructor(){super(),this.add=$.prototype.add.bind(this),this.delete=$.prototype.delete.bind(this),this.get=$.prototype.get.bind(this),this.has=$.prototype.has.bind(this),this.set=$.prototype.set.bind(this),this.tag=s.tag}toJSON(e,t){if(!t)return super.toJSON(e);let n=new Map;t?.onCreate&&t.onCreate(n);for(let i of this.items){let r,o;if(A(i)?(r=_(i.key,"",t),o=_(i.value,r,t)):r=_(i,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,o)}return n}static from(e,t,n){let i=Ut(e,t,n),r=new this;return r.items=i.items,r}};Le.tag="tag:yaml.org,2002:omap";var Ye={collection:"seq",identify:s=>s instanceof Map,nodeClass:Le,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){let t=Rt(s,e),n=[];for(let{key:i}of t.items)O(i)&&(n.includes(i.value)?e(`Ordered maps must not include duplicate keys: ${i.value}`):n.push(i.value));return Object.assign(new Le,t)},createNode:(s,e,t)=>Le.from(s,e,t)};function Os({value:s,source:e},t){return e&&(s?Vt:Yt).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}var Vt={identify:s=>s===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new y(!0),stringify:Os},Yt={identify:s=>s===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new y(!1),stringify:Os};var As={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/,resolve:s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:D},Es={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:s=>parseFloat(s.replace(/_/g,"")),stringify(s){let e=Number(s.value);return isFinite(e)?e.toExponential():D(s)}},Ls={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(s){let e=new y(parseFloat(s.replace(/_/g,""))),t=s.indexOf(".");if(t!==-1){let n=s.substring(t+1).replace(/_/g,"");n[n.length-1]==="0"&&(e.minFractionDigits=n.length)}return e},stringify:D};var Je=s=>typeof s=="bigint"||Number.isInteger(s);function Ot(s,e,t,{intAsBigInt:n}){let i=s[0];if((i==="-"||i==="+")&&(e+=1),s=s.substring(e).replace(/_/g,""),n){switch(t){case 2:s=`0b${s}`;break;case 8:s=`0o${s}`;break;case 16:s=`0x${s}`;break}let o=BigInt(s);return i==="-"?BigInt(-1)*o:o}let r=parseInt(s,t);return i==="-"?-1*r:r}function Jt(s,e,t){let{value:n}=s;if(Je(n)){let i=n.toString(e);return n<0?"-"+t+i.substr(1):t+i}return D(s)}var Ts={identify:Je,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(s,e,t)=>Ot(s,2,2,t),stringify:s=>Jt(s,2,"0b")},Is={identify:Je,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(s,e,t)=>Ot(s,1,8,t),stringify:s=>Jt(s,8,"0")},Cs={identify:Je,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(s,e,t)=>Ot(s,0,10,t),stringify:D},vs={identify:Je,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(s,e,t)=>Ot(s,2,16,t),stringify:s=>Jt(s,16,"0x")};var Te=class s extends ${constructor(e){super(e),this.tag=s.tag}add(e){let t;A(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new C(e.key,null):t=new C(e,null),ue(this.items,t.key)||this.items.push(t)}get(e,t){let n=ue(this.items,e);return!t&&A(n)?O(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let n=ue(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new C(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){let{replacer:i}=n,r=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof i=="function"&&(o=i.call(t,o,o)),r.items.push(Ee(o,null,n));return r}};Te.tag="tag:yaml.org,2002:set";var Qe={collection:"map",identify:s=>s instanceof Set,nodeClass:Te,default:!1,tag:"tag:yaml.org,2002:set",createNode:(s,e,t)=>Te.from(s,e,t),resolve(s,e){if(R(s)){if(s.hasAllNullValues(!0))return Object.assign(new Te,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};function Qt(s,e){let t=s[0],n=t==="-"||t==="+"?s.substring(1):s,i=o=>e?BigInt(o):Number(o),r=n.replace(/_/g,"").split(":").reduce((o,l)=>o*i(60)+i(l),i(0));return t==="-"?i(-1)*r:r}function $s(s){let{value:e}=s,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return D(s);let n="";e<0&&(n="-",e*=t(-1));let i=t(60),r=[e%i];return e<60?r.unshift(0):(e=(e-r[0])/i,r.unshift(e%i),e>=60&&(e=(e-r[0])/i,r.unshift(e))),n+r.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var At={identify:s=>typeof s=="bigint"||Number.isInteger(s),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(s,e,{intAsBigInt:t})=>Qt(s,t),stringify:$s},Et={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:s=>Qt(s,!1),stringify:$s},Ie={identify:s=>s instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(s){let e=s.match(Ie.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,n,i,r,o,l]=e.map(Number),a=e[7]?Number((e[7]+"00").substr(1,3)):0,c=Date.UTC(t,n-1,i,r||0,o||0,l||0,a),p=e[8];if(p&&p!=="Z"){let f=Qt(p,!1);Math.abs(f)<30&&(f*=60),c-=6e4*f}return new Date(c)},stringify:({value:s})=>s.toISOString().replace(/((T00:00)?:00)?\.000Z$/,"")};var Gt=[G,W,he,ye,Vt,Yt,Ts,Is,Cs,vs,As,Es,Ls,Ue,Ye,Ve,Qe,At,Et,Ie];var _s=new Map([["core",Ss],["failsafe",[G,W,he]],["json",Ns],["yaml11",Gt],["yaml-1.1",Gt]]),Ps={binary:Ue,bool:Re,float:yt,floatExp:gt,floatNaN:dt,floatTime:Et,int:St,intHex:kt,intOct:wt,intTime:At,map:G,null:ye,omap:Ye,pairs:Ve,seq:W,set:Qe,timestamp:Ie},Ms={"tag:yaml.org,2002:binary":Ue,"tag:yaml.org,2002:omap":Ye,"tag:yaml.org,2002:pairs":Ve,"tag:yaml.org,2002:set":Qe,"tag:yaml.org,2002:timestamp":Ie};function Lt(s,e){let t=_s.get(e);if(!t)if(Array.isArray(s))t=[];else{let n=Array.from(_s.keys()).filter(i=>i!=="yaml11").map(i=>JSON.stringify(i)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${n} or define customTags array`)}if(Array.isArray(s))for(let n of s)t=t.concat(n);else typeof s=="function"&&(t=s(t.slice()));return t.map(n=>{if(typeof n!="string")return n;let i=Ps[n];if(i)return i;let r=Object.keys(Ps).map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown custom tag "${n}"; use one of ${r}`)})}var On=(s,e)=>s.keye.key?1:0,Ce=class s{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:i,schema:r,sortMapEntries:o,toStringDefaults:l}){this.compat=Array.isArray(e)?Lt(e,"compat"):e?Lt(null,e):null,this.merge=!!n,this.name=typeof r=="string"&&r||"core",this.knownTags=i?Ms:{},this.tags=Lt(t,this.name),this.toStringOptions=l??null,Object.defineProperty(this,Q,{value:G}),Object.defineProperty(this,x,{value:he}),Object.defineProperty(this,re,{value:W}),this.sortMapEntries=typeof o=="function"?o:o===!0?On:null}clone(){let e=Object.create(s.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};function Bs(s,e){let t=[],n=e.directives===!0;if(e.directives!==!1&&s.directives){let a=s.directives.toString(s);a?(t.push(a),n=!0):s.directives.docStart&&(n=!0)}n&&t.push("---");let i=ct(s,e),{commentString:r}=i.options;if(s.commentBefore){t.length!==1&&t.unshift("");let a=r(s.commentBefore);t.unshift(Y(a,""))}let o=!1,l=null;if(s.contents){if(L(s.contents)){if(s.contents.spaceBefore&&n&&t.push(""),s.contents.commentBefore){let p=r(s.contents.commentBefore);t.push(Y(p,""))}i.forceBlockIndent=!!s.comment,l=s.contents.comment}let a=l?void 0:()=>o=!0,c=ae(s.contents,i,()=>l=null,a);l&&(c+=te(c,"",r(l))),(c[0]==="|"||c[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${c}`:t.push(c)}else t.push(ae(s.contents,i));if(s.directives?.docEnd)if(s.comment){let a=r(s.comment);a.includes(` -`)?(t.push("..."),t.push(Y(a,""))):t.push(`... ${a}`)}else t.push("...");else{let a=s.comment;a&&o&&(a=a.replace(/^\n+/,"")),a&&((!o||l)&&t[t.length-1]!==""&&t.push(""),t.push(Y(r(a),"")))}return t.join(` -`)+` -`}var se=class s{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,j,{value:tt});let i=null;typeof t=="function"||Array.isArray(t)?i=t:n===void 0&&t&&(n=t,t=void 0);let r=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,uniqueKeys:!0,version:"1.2"},n);this.options=r;let{version:o}=r;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new Z({version:o}),this.setSchema(o,n),this.contents=e===void 0?null:this.createNode(e,i,n)}clone(){let e=Object.create(s.prototype,{[j]:{value:tt}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=L(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){ve(this.contents)&&this.contents.add(e)}addIn(e,t){ve(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let n=Bt(this);e.anchor=!t||n.has(t)?Dt(t||"a",n):t}return new ee(e.anchor)}createNode(e,t,n){let i;if(typeof t=="function")e=t.call({"":e},"",e),i=t;else if(Array.isArray(t)){let m=w=>typeof w=="number"||w instanceof String||w instanceof Number,S=t.filter(m).map(String);S.length>0&&(t=t.concat(S)),i=t}else n===void 0&&t&&(n=t,t=void 0);let{aliasDuplicateObjects:r,anchorPrefix:o,flow:l,keepUndefined:a,onTagObj:c,tag:p}=n??{},{onAnchor:f,setAnchors:h,sourceObjects:d}=ms(this,o||"a"),b={aliasDuplicateObjects:r??!0,keepUndefined:a??!1,onAnchor:f,onTagObj:c,replacer:i,schema:this.schema,sourceObjects:d},u=oe(e,p,b);return l&&T(u)&&(u.flow=!0),h(),u}createPair(e,t,n={}){let i=this.createNode(e,null,n),r=this.createNode(t,null,n);return new C(i,r)}delete(e){return ve(this.contents)?this.contents.delete(e):!1}deleteIn(e){return Oe(e)?this.contents==null?!1:(this.contents=null,!0):ve(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return T(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Oe(e)?!t&&O(this.contents)?this.contents.value:this.contents:T(this.contents)?this.contents.getIn(e,t):void 0}has(e){return T(this.contents)?this.contents.has(e):!1}hasIn(e){return Oe(e)?this.contents!==void 0:T(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=Ke(this.schema,[e],t):ve(this.contents)&&this.contents.set(e,t)}setIn(e,t){Oe(e)?this.contents=t:this.contents==null?this.contents=Ke(this.schema,Array.from(e),t):ve(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let n;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new Z({version:"1.1"}),n={merge:!0,resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new Z({version:e}),n={merge:!1,resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{let i=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${i}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(n)this.schema=new Ce(Object.assign(n,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:i,onAnchor:r,reviver:o}={}){let l={anchors:new Map,doc:this,keep:!e,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},a=_(this.contents,t??"",l);if(typeof r=="function")for(let{count:c,res:p}of l.anchors.values())r(p,c);return typeof o=="function"?ce(o,{"":a},"",a):a}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Bs(this,e)}};function ve(s){if(T(s))return!0;throw new Error("Expected a YAML collection as document contents")}var $e=class extends Error{constructor(e,t,n,i){super(),this.name=e,this.code=n,this.message=i,this.pos=t}},q=class extends $e{constructor(e,t,n){super("YAMLParseError",e,t,n)}},_e=class extends $e{constructor(e,t,n){super("YAMLWarning",e,t,n)}},Ge=(s,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(l=>e.linePos(l));let{line:n,col:i}=t.linePos[0];t.message+=` at line ${n}, column ${i}`;let r=i-1,o=s.substring(e.lineStarts[n-1],e.lineStarts[n]).replace(/[\n\r]+$/,"");if(r>=60&&o.length>80){let l=Math.min(r-39,o.length-79);o="\u2026"+o.substring(l),r-=l-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),n>1&&/^ *$/.test(o.substring(0,r))){let l=s.substring(e.lineStarts[n-2],e.lineStarts[n-1]);l.length>80&&(l=l.substring(0,79)+`\u2026 -`),o=l+o}if(/[^ ]/.test(o)){let l=1,a=t.linePos[1];a&&a.line===n&&a.col>i&&(l=Math.max(1,Math.min(a.col-i,80-r)));let c=" ".repeat(r)+"^".repeat(l);t.message+=`: - -${o} -${c} -`}};function ne(s,{flow:e,indicator:t,next:n,offset:i,onError:r,startOnNewline:o}){let l=!1,a=o,c=o,p="",f="",h=!1,d=!1,b=!1,u=null,m=null,S=null,w=null,k=null;for(let g of s)switch(b&&(g.type!=="space"&&g.type!=="newline"&&g.type!=="comma"&&r(g.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),b=!1),g.type){case"space":!e&&a&&t!=="doc-start"&&g.source[0]===" "&&r(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),c=!0;break;case"comment":{c||r(g,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let I=g.source.substring(1)||" ";p?p+=f+I:p=I,f="",a=!1;break}case"newline":a?p?p+=g.source:l=!0:f+=g.source,a=!0,h=!0,(u||m)&&(d=!0),c=!0;break;case"anchor":u&&r(g,"MULTIPLE_ANCHORS","A node can have at most one anchor"),g.source.endsWith(":")&&r(g.offset+g.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),u=g,k===null&&(k=g.offset),a=!1,c=!1,b=!0;break;case"tag":{m&&r(g,"MULTIPLE_TAGS","A node can have at most one tag"),m=g,k===null&&(k=g.offset),a=!1,c=!1,b=!0;break}case t:(u||m)&&r(g,"BAD_PROP_ORDER",`Anchors and tags must be after the ${g.source} indicator`),w&&r(g,"UNEXPECTED_TOKEN",`Unexpected ${g.source} in ${e??"collection"}`),w=g,a=!1,c=!1;break;case"comma":if(e){S&&r(g,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),S=g,a=!1,c=!1;break}default:r(g,"UNEXPECTED_TOKEN",`Unexpected ${g.type} token`),a=!1,c=!1}let N=s[s.length-1],E=N?N.offset+N.source.length:i;return b&&n&&n.type!=="space"&&n.type!=="newline"&&n.type!=="comma"&&(n.type!=="scalar"||n.source!=="")&&r(n.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),{comma:S,found:w,spaceBefore:l,comment:p,hasNewline:h,hasNewlineAfterProp:d,anchor:u,tag:m,end:E,start:k??E}}function pe(s){if(!s)return null;switch(s.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(s.source.includes(` -`))return!0;if(s.end){for(let e of s.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of s.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(pe(e.key)||pe(e.value))return!0}return!1;default:return!0}}function We(s,e,t){if(e?.type==="flow-collection"){let n=e.end[0];n.indent===s&&(n.source==="]"||n.source==="}")&&pe(e)&&t(n,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}function Tt(s,e,t){let{uniqueKeys:n}=s.options;if(n===!1)return!1;let i=typeof n=="function"?n:(r,o)=>r===o||O(r)&&O(o)&&r.value===o.value&&!(r.value==="<<"&&s.schema.merge);return e.some(r=>i(r.key,t))}var Ds="All mapping items must start at the same column";function js({composeNode:s,composeEmptyNode:e},t,n,i,r){let o=r?.nodeClass??$,l=new o(t.schema);t.atRoot&&(t.atRoot=!1);let a=n.offset,c=null;for(let p of n.items){let{start:f,key:h,sep:d,value:b}=p,u=ne(f,{indicator:"explicit-key-ind",next:h??d?.[0],offset:a,onError:i,startOnNewline:!0}),m=!u.found;if(m){if(h&&(h.type==="block-seq"?i(a,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in h&&h.indent!==n.indent&&i(a,"BAD_INDENT",Ds)),!u.anchor&&!u.tag&&!d){c=u.end,u.comment&&(l.comment?l.comment+=` -`+u.comment:l.comment=u.comment);continue}(u.hasNewlineAfterProp||pe(h))&&i(h??f[f.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else u.found?.indent!==n.indent&&i(a,"BAD_INDENT",Ds);let S=u.end,w=h?s(t,h,u,i):e(t,S,f,null,u,i);t.schema.compat&&We(n.indent,h,i),Tt(t,l.items,w)&&i(S,"DUPLICATE_KEY","Map keys must be unique");let k=ne(d??[],{indicator:"map-value-ind",next:b,offset:w.range[2],onError:i,startOnNewline:!h||h.type==="block-scalar"});if(a=k.end,k.found){m&&(b?.type==="block-map"&&!k.hasNewline&&i(a,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&u.starts&&(s.type==="block-map"||s.type==="block-seq");function qs({composeNode:s,composeEmptyNode:e},t,n,i,r){let o=n.start.source==="{",l=o?"flow map":"flow sequence",a=r?.nodeClass??(o?$:M),c=new a(t.schema);c.flow=!0;let p=t.atRoot;p&&(t.atRoot=!1);let f=n.offset+n.start.source.length;for(let m=0;m0){let m=ie(b,u,t.options.strict,i);m.comment&&(c.comment?c.comment+=` -`+m.comment:c.comment=m.comment),c.range=[n.offset,u,m.offset]}else c.range=[n.offset,u,u];return c}function Xt(s,e,t,n,i,r){let o=t.type==="block-map"?js(s,e,t,n,r):t.type==="block-seq"?Ks(s,e,t,n,r):qs(s,e,t,n,r),l=o.constructor;return i==="!"||i===l.tagName?(o.tag=l.tagName,o):(i&&(o.tag=i),o)}function xs(s,e,t,n,i){let r=n?e.directives.tagName(n.source,f=>i(n,"TAG_RESOLVE_FAILED",f)):null,o=t.type==="block-map"?"map":t.type==="block-seq"?"seq":t.start.source==="{"?"map":"seq";if(!n||!r||r==="!"||r===$.tagName&&o==="map"||r===M.tagName&&o==="seq"||!o)return Xt(s,e,t,i,r);let l=e.schema.tags.find(f=>f.tag===r&&f.collection===o);if(!l){let f=e.schema.knownTags[r];if(f&&f.collection===o)e.schema.tags.push(Object.assign({},f,{default:!1})),l=f;else return f?.collection?i(n,"BAD_COLLECTION_TYPE",`${f.tag} used for ${o} collection, but expects ${f.collection}`,!0):i(n,"TAG_RESOLVE_FAILED",`Unresolved tag: ${r}`,!0),Xt(s,e,t,i,r)}let a=Xt(s,e,t,i,r,l),c=l.resolve?.(a,f=>i(n,"TAG_RESOLVE_FAILED",f),e.options)??a,p=L(c)?c:new y(c);return p.range=a.range,p.tag=r,l?.format&&(p.format=l.format),p}function It(s,e,t){let n=s.offset,i=An(s,e,t);if(!i)return{value:"",type:null,comment:"",range:[n,n,n]};let r=i.mode===">"?y.BLOCK_FOLDED:y.BLOCK_LITERAL,o=s.source?En(s.source):[],l=o.length;for(let u=o.length-1;u>=0;--u){let m=o[u][1];if(m===""||m==="\r")l=u;else break}if(l===0){let u=i.chomp==="+"&&o.length>0?` -`.repeat(Math.max(1,o.length-1)):"",m=n+i.length;return s.source&&(m+=s.source.length),{value:u,type:r,comment:i.comment,range:[n,m,m]}}let a=s.indent+i.indent,c=s.offset+i.length,p=0;for(let u=0;ua&&(a=m.length);else{m.length=l;--u)o[u][0].length>a&&(l=u+1);let f="",h="",d=!1;for(let u=0;ua||S[0]===" "?(h===" "?h=` -`:!d&&h===` -`&&(h=` - -`),f+=h+m.slice(a)+S,h=` -`,d=!0):S===""?h===` -`?f+=` -`:h=` -`:(f+=h+S,h=" ",d=!1)}switch(i.chomp){case"-":break;case"+":for(let u=l;ut(n+h,d,b);switch(i){case"scalar":l=y.PLAIN,a=Ln(r,c);break;case"single-quoted-scalar":l=y.QUOTE_SINGLE,a=Tn(r,c);break;case"double-quoted-scalar":l=y.QUOTE_DOUBLE,a=In(r,c);break;default:return t(s,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${i}`),{value:"",type:null,comment:"",range:[n,n+r.length,n+r.length]}}let p=n+r.length,f=ie(o,p,e,t);return{value:a,type:l,comment:f.comment,range:[n,p,f.offset]}}function Ln(s,e){let t="";switch(s[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${s[0]}`;break}case"@":case"`":{t=`reserved character ${s[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),Fs(s)}function Tn(s,e){return(s[s.length-1]!=="'"||s.length===1)&&e(s.length,"MISSING_CHAR","Missing closing 'quote"),Fs(s.slice(1,-1)).replace(/''/g,"'")}function Fs(s){let e,t;try{e=new RegExp(`(.*?)(?r?s.slice(r,n+1):i)}else t+=i}return(s[s.length-1]!=='"'||s.length===1)&&e(s.length,"MISSING_CHAR",'Missing closing "quote'),t}function Cn(s,e){let t="",n=s[e+1];for(;(n===" "||n===" "||n===` -`||n==="\r")&&!(n==="\r"&&s[e+2]!==` -`);)n===` -`&&(t+=` -`),e+=1,n=s[e+1];return t||(t=" "),{fold:t,offset:e}}var vn={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:` -`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function $n(s,e,t,n){let i=s.substr(e,t),o=i.length===t&&/^[0-9a-fA-F]+$/.test(i)?parseInt(i,16):NaN;if(isNaN(o)){let l=s.substr(e-2,t+2);return n(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${l}`),l}return String.fromCodePoint(o)}function zt(s,e,t,n){let{value:i,type:r,comment:o,range:l}=e.type==="block-scalar"?It(e,s.options.strict,n):Ct(e,s.options.strict,n),a=t?s.directives.tagName(t.source,f=>n(t,"TAG_RESOLVE_FAILED",f)):null,c=t&&a?_n(s.schema,i,a,t,n):e.type==="scalar"?Pn(s,i,e,n):s.schema[x],p;try{let f=c.resolve(i,h=>n(t??e,"TAG_RESOLVE_FAILED",h),s.options);p=O(f)?f:new y(f)}catch(f){let h=f instanceof Error?f.message:String(f);n(t??e,"TAG_RESOLVE_FAILED",h),p=new y(i)}return p.range=l,p.source=i,r&&(p.type=r),a&&(p.tag=a),c.format&&(p.format=c.format),o&&(p.comment=o),p}function _n(s,e,t,n,i){if(t==="!")return s[x];let r=[];for(let l of s.tags)if(!l.collection&&l.tag===t)if(l.default&&l.test)r.push(l);else return l;for(let l of r)if(l.test?.test(e))return l;let o=s.knownTags[t];return o&&!o.collection?(s.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(i(n,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),s[x])}function Pn({directives:s,schema:e},t,n,i){let r=e.tags.find(o=>o.default&&o.test?.test(t))||e[x];if(e.compat){let o=e.compat.find(l=>l.default&&l.test?.test(t))??e[x];if(r.tag!==o.tag){let l=s.tagString(r.tag),a=s.tagString(o.tag),c=`Value may be parsed as either ${l} or ${a}`;i(n,"TAG_RESOLVE_FAILED",c,!0)}}return r}function Rs(s,e,t){if(e){t===null&&(t=e.length);for(let n=t-1;n>=0;--n){let i=e[n];switch(i.type){case"space":case"comment":case"newline":s-=i.source.length;continue}for(i=e[++n];i?.type==="space";)s+=i.source.length,i=e[++n];break}}return s}var Mn={composeNode:Zt,composeEmptyNode:vt};function Zt(s,e,t,n){let{spaceBefore:i,comment:r,anchor:o,tag:l}=t,a,c=!0;switch(e.type){case"alias":a=Bn(s,e,n),(o||l)&&n(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":a=zt(s,e,l,n),o&&(a.anchor=o.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":a=xs(Mn,s,e,l,n),o&&(a.anchor=o.source.substring(1));break;default:{let p=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;n(e,"UNEXPECTED_TOKEN",p),a=vt(s,e.offset,void 0,null,t,n),c=!1}}return o&&a.anchor===""&&n(o,"BAD_ALIAS","Anchor cannot be an empty string"),i&&(a.spaceBefore=!0),r&&(e.type==="scalar"&&e.source===""?a.comment=r:a.commentBefore=r),s.options.keepSourceTokens&&c&&(a.srcToken=e),a}function vt(s,e,t,n,{spaceBefore:i,comment:r,anchor:o,tag:l,end:a},c){let p={type:"scalar",offset:Rs(e,t,n),indent:-1,source:""},f=zt(s,p,l,c);return o&&(f.anchor=o.source.substring(1),f.anchor===""&&c(o,"BAD_ALIAS","Anchor cannot be an empty string")),i&&(f.spaceBefore=!0),r&&(f.comment=r,f.range[2]=a),f}function Bn({options:s},{offset:e,source:t,end:n},i){let r=new ee(t.substring(1));r.source===""&&i(e,"BAD_ALIAS","Alias cannot be an empty string"),r.source.endsWith(":")&&i(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,l=ie(n,o,s.strict,i);return r.range=[e,o,l.offset],l.comment&&(r.comment=l.comment),r}function Us(s,e,{offset:t,start:n,value:i,end:r},o){let l=Object.assign({_directives:e},s),a=new se(void 0,l),c={atRoot:!0,directives:a.directives,options:a.options,schema:a.schema},p=ne(n,{indicator:"doc-start",next:i??r?.[0],offset:t,onError:o,startOnNewline:!0});p.found&&(a.directives.docStart=!0,i&&(i.type==="block-map"||i.type==="block-seq")&&!p.hasNewline&&o(p.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),a.contents=i?Zt(c,i,p,o):vt(c,p.end,n,null,p,o);let f=a.contents.range[2],h=ie(r,f,!1,o);return h.comment&&(a.comment=h.comment),a.range=[t,f,h.offset],a}function He(s){if(typeof s=="number")return[s,s+1];if(Array.isArray(s))return s.length===2?s:[s[0],s[1]];let{offset:e,source:t}=s;return[e,e+(typeof t=="string"?t.length:1)]}function Vs(s){let e="",t=!1,n=!1;for(let i=0;i{let o=He(t);r?this.warnings.push(new _e(o,n,i)):this.errors.push(new q(o,n,i))},this.directives=new Z({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:n,afterEmptyLine:i}=Vs(this.prelude);if(n){let r=e.contents;if(t)e.comment=e.comment?`${e.comment} -${n}`:n;else if(i||e.directives.docStart||!r)e.commentBefore=n;else if(T(r)&&!r.flow&&r.items.length>0){let o=r.items[0];A(o)&&(o=o.key);let l=o.commentBefore;o.commentBefore=l?`${n} -${l}`:n}else{let o=r.commentBefore;r.commentBefore=o?`${n} -${o}`:n}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Vs(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,n=-1){for(let i of e)yield*this.next(i);yield*this.end(t,n)}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,n,i)=>{let r=He(e);r[0]+=t,this.onError(r,"BAD_DIRECTIVE",n,i)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Us(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,n=new q(He(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(n):this.doc.errors.push(n);break}case"doc-end":{if(!this.doc){let n="Unexpected doc-end without preceding document";this.errors.push(new q(He(e),"UNEXPECTED_TOKEN",n));break}this.doc.directives.docEnd=!0;let t=ie(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let n=this.doc.comment;this.doc.comment=n?`${n} -${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new q(He(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let n=Object.assign({_directives:this.directives},this.options),i=new se(void 0,n);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),i.range=[0,t,t],this.decorate(i,!1),yield i}}};var ns={};as(ns,{BOM:()=>Xe,DOCUMENT:()=>ze,FLOW_END:()=>Ze,SCALAR:()=>Pe,createScalarToken:()=>Js,isCollection:()=>Kn,isScalar:()=>qn,prettyToken:()=>xn,resolveAsScalar:()=>Ys,setScalarValue:()=>Qs,stringify:()=>Ws,tokenType:()=>ss,visit:()=>me});function Ys(s,e=!0,t){if(s){let n=(i,r,o)=>{let l=typeof i=="number"?i:Array.isArray(i)?i[0]:i.offset;if(t)t(l,r,o);else throw new q([l,l+1],r,o)};switch(s.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Ct(s,e,n);case"block-scalar":return It(s,e,n)}}return null}function Js(s,e){let{implicitKey:t=!1,indent:n,inFlow:i=!1,offset:r=-1,type:o="PLAIN"}=e,l=le({type:o,value:s},{implicitKey:t,indent:n>0?" ".repeat(n):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}}),a=e.end??[{type:"newline",offset:-1,indent:n,source:` -`}];switch(l[0]){case"|":case">":{let c=l.indexOf(` -`),p=l.substring(0,c),f=l.substring(c+1)+` -`,h=[{type:"block-scalar-header",offset:r,indent:n,source:p}];return Gs(h,a)||h.push({type:"newline",offset:-1,indent:n,source:` -`}),{type:"block-scalar",offset:r,indent:n,props:h,source:f}}case'"':return{type:"double-quoted-scalar",offset:r,indent:n,source:l,end:a};case"'":return{type:"single-quoted-scalar",offset:r,indent:n,source:l,end:a};default:return{type:"scalar",offset:r,indent:n,source:l,end:a}}}function Qs(s,e,t={}){let{afterKey:n=!1,implicitKey:i=!1,inFlow:r=!1,type:o}=t,l="indent"in s?s.indent:null;if(n&&typeof l=="number"&&(l+=2),!o)switch(s.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{let c=s.props[0];if(c.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o=c.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}let a=le({type:o,value:e},{implicitKey:i||l===null,indent:l!==null&&l>0?" ".repeat(l):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}});switch(a[0]){case"|":case">":Dn(s,a);break;case'"':es(s,a,"double-quoted-scalar");break;case"'":es(s,a,"single-quoted-scalar");break;default:es(s,a,"scalar")}}function Dn(s,e){let t=e.indexOf(` -`),n=e.substring(0,t),i=e.substring(t+1)+` -`;if(s.type==="block-scalar"){let r=s.props[0];if(r.type!=="block-scalar-header")throw new Error("Invalid block scalar header");r.source=n,s.source=i}else{let{offset:r}=s,o="indent"in s?s.indent:-1,l=[{type:"block-scalar-header",offset:r,indent:o,source:n}];Gs(l,"end"in s?s.end:void 0)||l.push({type:"newline",offset:-1,indent:o,source:` -`});for(let a of Object.keys(s))a!=="type"&&a!=="offset"&&delete s[a];Object.assign(s,{type:"block-scalar",indent:o,props:l,source:i})}}function Gs(s,e){if(e)for(let t of e)switch(t.type){case"space":case"comment":s.push(t);break;case"newline":return s.push(t),!0}return!1}function es(s,e,t){switch(s.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":s.type=t,s.source=e;break;case"block-scalar":{let n=s.props.slice(1),i=e.length;s.props[0].type==="block-scalar-header"&&(i-=s.props[0].source.length);for(let r of n)r.offset+=i;delete s.props,Object.assign(s,{type:t,source:e,end:n});break}case"block-map":case"block-seq":{let i={type:"newline",offset:s.offset+e.length,indent:s.indent,source:` -`};delete s.items,Object.assign(s,{type:t,source:e,end:[i]});break}default:{let n="indent"in s?s.indent:-1,i="end"in s&&Array.isArray(s.end)?s.end.filter(r=>r.type==="space"||r.type==="comment"||r.type==="newline"):[];for(let r of Object.keys(s))r!=="type"&&r!=="offset"&&delete s[r];Object.assign(s,{type:t,indent:n,source:e,end:i})}}}var Ws=s=>"type"in s?_t(s):$t(s);function _t(s){switch(s.type){case"block-scalar":{let e="";for(let t of s.props)e+=_t(t);return e+s.source}case"block-map":case"block-seq":{let e="";for(let t of s.items)e+=$t(t);return e}case"flow-collection":{let e=s.start.source;for(let t of s.items)e+=$t(t);for(let t of s.end)e+=t.source;return e}case"document":{let e=$t(s);if(s.end)for(let t of s.end)e+=t.source;return e}default:{let e=s.source;if("end"in s&&s.end)for(let t of s.end)e+=t.source;return e}}}function $t({start:s,key:e,sep:t,value:n}){let i="";for(let r of s)i+=r.source;if(e&&(i+=_t(e)),t)for(let r of t)i+=r.source;return n&&(i+=_t(n)),i}var ts=Symbol("break visit"),jn=Symbol("skip children"),Hs=Symbol("remove item");function me(s,e){"type"in s&&s.type==="document"&&(s={start:s.start,value:s.value}),Xs(Object.freeze([]),s,e)}me.BREAK=ts;me.SKIP=jn;me.REMOVE=Hs;me.itemAtPath=(s,e)=>{let t=s;for(let[n,i]of e){let r=t?.[n];if(r&&"items"in r)t=r.items[i];else return}return t};me.parentCollection=(s,e)=>{let t=me.itemAtPath(s,e.slice(0,-1)),n=e[e.length-1][0],i=t?.[n];if(i&&"items"in i)return i;throw new Error("Parent collection not found")};function Xs(s,e,t){let n=t(e,s);if(typeof n=="symbol")return n;for(let i of["key","value"]){let r=e[i];if(r&&"items"in r){for(let o=0;o!!s&&"items"in s,qn=s=>!!s&&(s.type==="scalar"||s.type==="single-quoted-scalar"||s.type==="double-quoted-scalar"||s.type==="block-scalar");function xn(s){switch(s){case Xe:return"";case ze:return"";case Ze:return"";case Pe:return"";default:return JSON.stringify(s)}}function ss(s){switch(s){case Xe:return"byte-order-mark";case ze:return"doc-mode";case Ze:return"flow-error-end";case Pe:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case` -`:case`\r -`:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(s[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}function J(s){switch(s){case void 0:case" ":case` -`:case"\r":case" ":return!0;default:return!1}}var zs="0123456789ABCDEFabcdef".split(""),Fn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()".split(""),is=",[]{}".split(""),Rn=` ,[]{} -\r `.split(""),rs=s=>!s||Rn.includes(s),Me=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){e&&(this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null),this.atEnd=!t;let n=this.next??"stream";for(;n&&(t||this.hasChars(1));)n=yield*this.parseNext(n)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===` -`?!0:t==="\r"?this.buffer[e+1]===` -`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let n=0;for(;t===" ";)t=this.buffer[++n+e];if(t==="\r"){let i=this.buffer[n+e+1];if(i===` -`||!i&&!this.atEnd)return e+n+1}return t===` -`||n>=this.indentNext||!t&&!this.atEnd?e+n:-1}if(t==="-"||t==="."){let n=this.buffer.substr(e,3);if((n==="---"||n==="...")&&J(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&ethis.indentValue&&!J(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&J(t)){let n=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=n,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(rs),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=yield*this.parseBlockScalarHeader(),t+=yield*this.pushSpaces(!0),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,n=-1;do e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=n=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0);let i=this.getLine();if(i===null)return this.setNext("flow");if((n!==-1&&n"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if(t!=="-")break}return yield*this.pushUntil(t=>J(t)||t==="#")}*parseBlockScalar(){let e=this.pos-1,t=0,n;e:for(let i=this.pos;n=this.buffer[i];++i)switch(n){case" ":t+=1;break;case` -`:e=i,t=0;break;case"\r":{let r=this.buffer[i+1];if(!r&&!this.atEnd)return this.setNext("block-scalar");if(r===` -`)break}default:break e}if(!n&&!this.atEnd)return this.setNext("block-scalar");if(t>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=t:this.indentNext+=this.blockScalarIndent;do{let i=this.continueScalar(e+1);if(i===-1)break;e=this.buffer.indexOf(` -`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}if(!this.blockScalarKeep)do{let i=e-1,r=this.buffer[i];r==="\r"&&(r=this.buffer[--i]);let o=i;for(;r===" "||r===" ";)r=this.buffer[--i];if(r===` -`&&i>=this.pos&&i+1+t>o)e=i;else break}while(!0);return yield Pe,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,n=this.pos-1,i;for(;i=this.buffer[++n];)if(i===":"){let r=this.buffer[n+1];if(J(r)||e&&r===",")break;t=n}else if(J(i)){let r=this.buffer[n+1];if(i==="\r"&&(r===` -`?(n+=1,i=` -`,r=this.buffer[n+1]):t=n),r==="#"||e&&is.includes(r))break;if(i===` -`){let o=this.continueScalar(n+1);if(o===-1)break;n=Math.max(n,o-2)}}else{if(e&&is.includes(i))break;t=n}return!i&&!this.atEnd?this.setNext("plain-scalar"):(yield Pe,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let n=this.buffer.slice(this.pos,e);return n?(yield n,this.pos+=n.length,n.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(rs))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(J(t)||e&&is.includes(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!J(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Fn.includes(t))t=this.buffer[++e];else if(t==="%"&&zs.includes(this.buffer[e+1])&&zs.includes(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return e===` -`?yield*this.pushCount(1):e==="\r"&&this.charAt(1)===` -`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,n;do n=this.buffer[++t];while(n===" "||e&&n===" ");let i=t-this.pos;return i>0&&(yield this.buffer.substr(this.pos,i),this.pos=t),i}*pushUntil(e){let t=this.pos,n=this.buffer[t];for(;!e(n);)n=this.buffer[++t];return yield*this.pushToIndex(t,!1)}};var Be=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,n=this.lineStarts.length;for(;t>1;this.lineStarts[r]=0;)switch(s[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;s[++e]?.type==="space";);return s.splice(e,s.length)}function en(s){if(s.start.type==="flow-seq-start")for(let e of s.items)e.sep&&!e.value&&!H(e.start,"explicit-key-ind")&&!H(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,tn(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var we=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new Me,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let n of this.lexer.lex(e,t))yield*this.next(n);t||(yield*this.end())}*next(e){if(this.source=e,this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let t=ss(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let n=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:n,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&(!e||e.type!=="doc-end")){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e??this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{let n=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in n?n.indent:0:t.type==="flow-collection"&&n.type==="document"&&(t.indent=0),t.type==="flow-collection"&&en(t),n.type){case"document":n.value=t;break;case"block-scalar":n.props.push(t);break;case"block-map":{let i=n.items[n.items.length-1];if(i.value){n.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(i.sep)i.value=t;else{Object.assign(i,{key:t,sep:[]}),this.onKeyLine=!H(i.start,"explicit-key-ind");return}break}case"block-seq":{let i=n.items[n.items.length-1];i.value?n.items.push({start:[],value:t}):i.value=t;break}case"flow-collection":{let i=n.items[n.items.length-1];!i||i.value?n.items.push({start:[],key:t,sep:[]}):i.sep?i.value=t:Object.assign(i,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if((n.type==="document"||n.type==="block-map"||n.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let i=t.items[t.items.length-1];i&&!i.sep&&!i.value&&i.start.length>0&&Zs(i.start)===-1&&(t.indent===0||i.start.every(r=>r.type!=="comment"||r.indent=e.indent){let n=!this.onKeyLine&&this.indent===e.indent&&t.sep&&this.type!=="seq-item-ind",i=[];if(n&&t.sep&&!t.value){let r=[];for(let o=0;oe.indent&&(r.length=0);break;default:r.length=0}}r.length>=2&&(i=t.sep.splice(r[1]))}switch(this.type){case"anchor":case"tag":n||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!H(t.start,"explicit-key-ind")?t.start.push(this.sourceToken):n||t.value?(i.push(this.sourceToken),e.items.push({start:i})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]}),this.onKeyLine=!0;return;case"map-value-ind":if(H(t.start,"explicit-key-ind"))if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(H(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(tn(t.key)&&!H(t.sep,"newline")){let r=De(t.start),o=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:o,sep:l}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(H(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let r=De(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||n?e.items.push({start:i,key:null,sep:[this.sourceToken]}):H(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let r=this.flowScalar(this.type);n||t.value?(e.items.push({start:i,key:r,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(r):(Object.assign(t,{key:r,sep:[]}),this.onKeyLine=!0);return}default:{let r=this.startBlockValue(e);if(r){n&&r.type!=="block-seq"&&H(t.start,"explicit-key-ind")&&e.items.push({start:i}),this.stack.push(r);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let n="end"in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||H(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let n=this.startBlockValue(e);if(n){this.stack.push(n);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let n;do yield*this.pop(),n=this.peek(1);while(n&&n.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let i=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:i,sep:[]}):t.sep?this.stack.push(i):Object.assign(t,{key:i,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{let n=this.peek(2);if(n.type==="block-map"&&(this.type==="map-value-ind"&&n.indent===e.indent||this.type==="newline"&&!n.items[n.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&n.type!=="flow-collection"){let i=Pt(n),r=De(i);en(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let l={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:r,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=l}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(` -`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(` -`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=Pt(e),n=De(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n}]}}case"map-value-ind":{this.onKeyLine=!0;let t=Pt(e),n=De(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};function sn(s){let e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new Be||null,prettyErrors:e}}function nn(s,e={}){let{lineCounter:t,prettyErrors:n}=sn(e),i=new we(t?.addNewLine),r=new be(e),o=Array.from(r.compose(i.parse(s)));if(n&&t)for(let l of o)l.errors.forEach(Ge(s,t)),l.warnings.forEach(Ge(s,t));return o.length>0?o:Object.assign([],{empty:!0},r.streamInfo())}function os(s,e={}){let{lineCounter:t,prettyErrors:n}=sn(e),i=new we(t?.addNewLine),r=new be(e),o=null;for(let l of r.compose(i.parse(s),!0,s.length))if(!o)o=l;else if(o.options.logLevel!=="silent"){o.errors.push(new q(l.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&t&&(o.errors.forEach(Ge(s,t)),o.warnings.forEach(Ge(s,t))),o}function rn(s,e,t){let n;typeof e=="function"?n=e:t===void 0&&e&&typeof e=="object"&&(t=e);let i=os(s,t);if(!i)return null;if(i.warnings.forEach(r=>ft(i.options.logLevel,r)),i.errors.length>0){if(i.options.logLevel!=="silent")throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:n},t))}function on(s,e,t){let n=null;if(typeof e=="function"||Array.isArray(e)?n=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){let i=Math.round(t);t=i<1?void 0:i>8?{indent:8}:{indent:i}}if(s===void 0){let{keepUndefined:i}=t??e??{};if(!i)return}return new se(s,n,t).toString(t)}var ln=ls;window.yaml=ln;})(); diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 00000000..da1c5620 Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 00000000..b3cb3742 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..d79caa15 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,62 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..663be4c9 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,560 @@ +/* + * searchtools.js_t + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for the full-text search. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words, hlwords is the list of normal, unstemmed + * words. the first one is used to find the occurance, the + * latter for highlighting it. + */ + +jQuery.makeSearchSummary = function(text, keywords, hlwords) { + var textLower = text.toLowerCase(); + var start = 0; + $.each(keywords, function() { + var i = textLower.indexOf(this.toLowerCase()); + if (i > -1) + start = i; + }); + start = Math.max(start - 120, 0); + var excerpt = ((start > 0) ? '...' : '') + + $.trim(text.substr(start, 240)) + + ((start + 240 - text.length) ? '...' : ''); + var rv = $('
    ').text(excerpt); + $.each(hlwords, function() { + rv = rv.highlightText(this, 'highlighted'); + }); + return rv; +} + + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, success: null, + dataType: "script", cache: true}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (var i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

    ' + _('Searching') + '

    ').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

    ').appendTo(this.out); + this.output = $('
    '); + } + // Prettify the comment rating. + comment.pretty_rating = comment.rating + ' point' + + (comment.rating == 1 ? '' : 's'); + // Make a class (for displaying not yet moderated comments differently) + comment.css_class = comment.displayed ? '' : ' moderate'; + // Create a div for this comment. + var context = $.extend({}, opts, comment); + var div = $(renderTemplate(commentTemplate, context)); + + // If the user has voted on this comment, highlight the correct arrow. + if (comment.vote) { + var direction = (comment.vote == 1) ? 'u' : 'd'; + div.find('#' + direction + 'v' + comment.id).hide(); + div.find('#' + direction + 'u' + comment.id).show(); + } + + if (opts.moderator || comment.text != '[deleted]') { + div.find('a.reply').show(); + if (comment.proposal_diff) + div.find('#sp' + comment.id).show(); + if (opts.moderator && !comment.displayed) + div.find('#cm' + comment.id).show(); + if (opts.moderator || (opts.username == comment.username)) + div.find('#dc' + comment.id).show(); + } + return div; + } + + /** + * A simple template renderer. Placeholders such as <%id%> are replaced + * by context['id'] with items being escaped. Placeholders such as <#id#> + * are not escaped. + */ + function renderTemplate(template, context) { + var esc = $(document.createElement('div')); + + function handle(ph, escape) { + var cur = context; + $.each(ph.split('.'), function() { + cur = cur[this]; + }); + return escape ? esc.text(cur || "").html() : cur; + } + + return template.replace(/<([%#])([\w\.]*)\1>/g, function() { + return handle(arguments[2], arguments[1] == '%' ? true : false); + }); + } + + /** Flash an error message briefly. */ + function showError(message) { + $(document.createElement('div')).attr({'class': 'popup-error'}) + .append($(document.createElement('div')) + .attr({'class': 'error-message'}).text(message)) + .appendTo('body') + .fadeIn("slow") + .delay(2000) + .fadeOut("slow"); + } + + /** Add a link the user uses to open the comments popup. */ + $.fn.comment = function() { + return this.each(function() { + var id = $(this).attr('id').substring(1); + var count = COMMENT_METADATA[id]; + var title = count + ' comment' + (count == 1 ? '' : 's'); + var image = count > 0 ? opts.commentBrightImage : opts.commentImage; + var addcls = count == 0 ? ' nocomment' : ''; + $(this) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-open' + addcls, + id: 'ao' + id + }) + .append($(document.createElement('img')).attr({ + src: image, + alt: 'comment', + title: title + })) + .click(function(event) { + event.preventDefault(); + show($(this).attr('id').substring(2)); + }) + ) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-close hidden', + id: 'ah' + id + }) + .append($(document.createElement('img')).attr({ + src: opts.closeCommentImage, + alt: 'close', + title: 'close' + })) + .click(function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }) + ); + }); + }; + + var opts = { + processVoteURL: '/_process_vote', + addCommentURL: '/_add_comment', + getCommentsURL: '/_get_comments', + acceptCommentURL: '/_accept_comment', + deleteCommentURL: '/_delete_comment', + commentImage: '/static/_static/comment.png', + closeCommentImage: '/static/_static/comment-close.png', + loadingImage: '/static/_static/ajax-loader.gif', + commentBrightImage: '/static/_static/comment-bright.png', + upArrow: '/static/_static/up.png', + downArrow: '/static/_static/down.png', + upArrowPressed: '/static/_static/up-pressed.png', + downArrowPressed: '/static/_static/down-pressed.png', + voting: false, + moderator: false + }; + + if (typeof COMMENT_OPTIONS != "undefined") { + opts = jQuery.extend(opts, COMMENT_OPTIONS); + } + + var popupTemplate = '\ +
    \ +

    \ + Sort by:\ + best rated\ + newest\ + oldest\ +

    \ +
    Comments
    \ +
    \ + loading comments...
    \ +
      \ +
      \ +

      Add a comment\ + (markup):

      \ +
      \ + reStructured text markup: *emph*, **strong**, \ + ``code``, \ + code blocks: :: and an indented block after blank line
      \ +
      \ + \ +

      \ + \ + Propose a change ▹\ + \ + \ + Propose a change ▿\ + \ +

      \ + \ + \ + \ + \ +
      \ +
      \ +
      '; + + var commentTemplate = '\ +
      \ +
      \ +
      \ + \ + \ + \ + \ + \ + \ +
      \ +
      \ + \ + \ + \ + \ + \ + \ +
      \ +
      \ +
      \ +

      \ + <%username%>\ + <%pretty_rating%>\ + <%time.delta%>\ +

      \ +
      <#text#>
      \ +

      \ + \ + reply ▿\ + proposal ▹\ + proposal ▿\ + \ + \ +

      \ +
      \
      +<#proposal_diff#>\
      +        
      \ +
        \ +
        \ +
        \ +
        \ +
        '; + + var replyTemplate = '\ +
      • \ +
        \ +
        \ + \ + \ + \ + \ + \ +
        \ +
        \ +
      • '; + + $(document).ready(function() { + init(); + }); +})(jQuery); + +$(document).ready(function() { + // add comment anchors for all paragraphs that are commentable + $('.sphinx-has-comment').comment(); + + // highlight search words in search results + $("div.context").each(function() { + var params = $.getQueryParameters(); + var terms = (params.q) ? params.q[0].split(/\s+/) : []; + var result = $(this); + $.each(terms, function() { + result.highlightText(this.toLowerCase(), 'highlighted'); + }); + }); + + // directly open comment window if requested + var anchor = document.location.hash; + if (anchor.substring(0, 9) == '#comment-') { + $('#ao' + anchor.substring(9)).click(); + document.location.hash = '#s' + anchor.substring(9); + } +}); diff --git a/about.rst b/about.rst deleted file mode 100644 index 4eb2a78d..00000000 --- a/about.rst +++ /dev/null @@ -1,89 +0,0 @@ -.. _astropy-org-about: - -About The Astropy Project -========================= - -The Astropy Project is a community effort to develop a core -package for astronomy using the `Python programming -language `__ and improve usability, -interoperability, and collaboration between astronomy Python -packages. The core *astropy* package contains functionality aimed -at professional astronomers and astrophysicists, but may be useful -to anyone developing astronomy software. The Astropy Project also -includes "affiliated packages," Python packages that are not -necessarily developed by the core development team, but share the -goals of Astropy, and often build from the core package's code and -infrastructure. - -Aside from the actual code, Astropy is also a community of -astronomy- associated users and developers that agree that sharing -utilities is healthy for the community and the science it -produces. This community is of course central to accomplishing -anything with the code itself. We welcome anyone who wishes to -contribute to the project and expect everyone in our community to -follow the :ref:`code of conduct ` when -interacting with others. - -For more details on background of the project, you can read the -:external+astropy-dev:ref:`original vision ` -from when the project was founded. - - -``astropy`` Core Package ------------------------- - -The *astropy* package (alternatively known as the "core" package) -contains various classes, utilities, and a packaging framework -intended to provide commonly-used astronomy tools. It is divided -into a variety of sub-packages, which are described in detail in -the `documentation `__. - -Affiliated Packages -------------------- - -The Astropy project includes the concept of "affiliated packages." -An affiliated package is an astronomy-related python package that -is not part of the *astropy* core source code, but has requested -to be included in the general community effort of the Astropy -project. Such a package may be a candidate for eventual inclusion -in the main *astropy* package (although this is not required). -Until then, however, it is a separate package, and may not be in -the *astropy* namespace. - -The authoritative listing of current affiliated packages is -available at https://www.astropy.org/affiliated/ . That page also -describes the process to get a package listed as an affiliated -package. - -License -------- - -Astropy is licensed under a `three-clause BSD -license `__. For -details, see the -`LICENSE.rst `__ -file in the astropy repository. - -Governance ----------- - -Astropy governance is as laid out in `APE 0 `__, -consisting of the Coordination Committee, the Ombudsperson, and -the Voting Members. Accompanying policies are documented in the -`project policies folder `__. - - -Fiscal Sponsor --------------- - -Astropy is a Sponsored Project of -`NumFOCUS `__, a 501(c)(3) nonprofit -charity in the United States. -`NumFOCUS `__ provides Astropy with -fiscal, legal, and administrative support to help ensure the -health and sustainability of the project. Visit -`numfocus.org `__ for more information. - -.. image:: _static/img/Numfocus_stamp.png - :width: 299px - :target: https://www.numfocus.org diff --git a/acknowledging.rst b/acknowledging.rst deleted file mode 100644 index a36aaf2f..00000000 --- a/acknowledging.rst +++ /dev/null @@ -1,206 +0,0 @@ -.. raw:: html - - - -.. _astropy-org-acknowledge: - -Acknowledging or Citing -======================= - -In Publications ---------------- - -If you use Astropy Project tools and resources for work/research presented in a publication (whether directly, or as a dependency to another package), we ask that you please cite the Astropy papers. -We encourage you to cite all three papers, but if space is limited, please cite the most recent paper: - -- `Astropy Paper III (v5.0) `__ (`ADS `__ - `BibTeX `__) -- `Astropy Paper II (v2.0) `__ (`ADS `__ - `BibTeX `__) -- `Astropy Paper I (v0.2) `__ (`ADS `__ - `BibTeX `__ - :ref:`10k citations `) - -.. raw:: html - -

        Copy all BibTeX to clipboard

        - -If you are using AASTeX and plan to submit an article to one of the AAS journals, we recommend adding a ``\software{...}`` tag to your manuscript that cites Astropy (`see the AASTeX guide for more information `__), -e.g.: - -.. code-block:: latex - - \software{Astropy \citep{astropy:2013, astropy:2018, astropy:2022}} - -(but please also consider adding and citing other software packages that you use to this list as well). -If you are submitting an article to another journal, or have no other specific place in your manuscript to cite the papers, we provide the following LaTeX/BibTeX snippet to add to your acknowledgments: - -.. code-block:: latex - - This work made use of Astropy: \footnote{https://www.astropy.org} a community-developed core Python package and an ecosystem of tools and resources for astronomy \citep{astropy:2013, astropy:2018, astropy:2022}. - -As an alternative, the BibTeX record recommended for a given version of Astropy is available from the Python package itself: - -.. code-block:: python - - import astropy - astropy.__citation__ - - -In Presentations ----------------- - -If you are giving a presentation or talk featuring work/research that makes use of Astropy and would like to acknowledge Astropy, we suggest using this logo on your title slide: - -|Powered by Astropy| - -The logo is also available with white text: - -|Powered by Astropy with white text| - -The SVG originals can be obtained at the `astropy-logo github repository `__. - -In Projects ------------ -If you are using Astropy as part of a code project (e.g., affiliated packages), a useful way to acknowledge your use of Astropy is with a badge in your README. -We suggest this badge: - -|Powered by Astropy Badge| - -Which is available at the URL https://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat -You can place the following in your ``README.md`` file to get the badge: - -.. code-block:: markdown - - [![astropy](https://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat)](https://www.astropy.org/) - -.. |Powered by Astropy| image:: _static/img/astropy_powered.png - :width: 256px -.. |Powered by Astropy with white text| image:: _static/img/astropy_powered_white.png - :width: 256px -.. |Powered by Astropy Badge| image:: https://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat - - -.. raw:: html - - diff --git a/affiliated/index.html b/affiliated/index.html new file mode 100644 index 00000000..9f179a88 --- /dev/null +++ b/affiliated/index.html @@ -0,0 +1,446 @@ + + + + + + + + + + + + About affiliated packages — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        +

        About affiliated packages

        +

        A major part of the Astropy project is the concept of “Affiliated +Packages”. An affiliated package is an astronomy-related Python package +that is not part of the astropy core package, but has requested to +be included as part of the Astropy project’s community. These packages +are expressing an interest in Astropy’s goals of improving reuse, +interoperability, and interface standards for python astronomy and +astrophysics packages.

        +

        If you are developer interested in signing up as an affiliated package, +details are at the end of this page.

        +
        + +
        +

        Other packages

        +
        +

        Stable packages

        +
          +
        • astroML: tools for machine learning and data mining in Astronomy
        • +
        • Astropysics: library of IDL astronomy routines converted to Python.
        • +
        +
        +
        +

        In development

        +

        A few additional affiliated packages are currently in development, including:

        +
          +
        • photutils: photometry tools
        • +
        • astroquery: online database querying
        • +
        • specutils: spectroscopic analysis utilities
        • +
        • kcorrect: Python bindings to kcorrect code of Blanton et al. 2007
        • +
        +

        These packages are still very much in development, and the user interface (API) may not be stable. If you do try these packages, please do report any issues to the developers, so

        +
        +
        +
        +

        Affiliated Package Registry

        +

        The following table lists all currently registered affiliated packages. +This table is determined from the http://affiliated.astropy.org/registry.json +file, which is the actual authoritative registry. The Stable column indicates +whether the package maintainer consider the package to be ready for use. +Packages that are under heavy development and for which the user interface +is likely to change significantly in the near future are marked as No.

        + ++++++++ + + + + + + + + + + + + + + + + + + + +
        Package NameStablePyPI NameWeb PageCode RepositoryMaintainer
        Loading...     
        +
        +
        +

        Becoming an affiliated package

        +

        If you are the developer of an astronomy package and would like to become +affiliated with the Astropy project, contact the Astropy coordination commitee +by leaving a message on the astropy-dev +group, or by contacting one of the coordination committee members directly.

        +

        A candiate affilated package will be judged by the coordination committee on the following +standards:

        +
          +
        • It should use classes and functions from the astropy package +wherever possible and appropriate. This facilitates re-use of code and +sharing of resources.
        • +
        • The package should have documentation that adequately explains the use of the +package, at standards comparable to astropy. Additionally, user-facing +classes and functions should all have docstrings. We suggest using sphinx, +with the numpydoc-like docstring standards used by astropy, +but this is not a strict requirement as long as the documentation is of +comparable quality.
        • +
        • The package should make a best-effort to include an easy-to-run test suite +that covers its intended functionality. We realize this is not possible +always possible, but when possible, a test suite is a crucial element of +stable software and reproducible science.
        • +
        • The package developer(s) should make an effort to connect with the Astropy +developer community, including both relevant parts of the core astropy +package and any related affiliated packages.
        • +
        +

        If you are considering creating a new astronomy package and would like it to be +an Astropy affiliated package, we provides a package template to make it much +easier to meet these standards. It provides the necessary structure to +generate documentation like that used in the astropy package, a ready-to-use +testing framework, and a variety of tools that streamline tasks like user +configuration, caching downloaded files, or linking C-compiled extensions. More +details on this template are available in the usage instructions for the +template . +We also provide +coding guidelines +that will make your code easier to read by members of the community.

        +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/affiliated/index.rst b/affiliated/index.rst deleted file mode 100644 index 22e4de1d..00000000 --- a/affiliated/index.rst +++ /dev/null @@ -1,296 +0,0 @@ -.. _astropy-org-affiliated: - -Affiliated Packages -=================== - -Astropy Affiliated Packages - A major part of the Astropy Project is the concept of “Astropy - affiliated packages”. An affiliated package is an - astronomy-related Python package that is not part of the astropy - core package, and is not managed by the project but is a part of - the Astropy Project community. These packages demonstrate a - commitment to Astropy’s goals of improving reuse, - interoperability, and interface standards for Python astronomy and - astrophysics packages. In many (but not all) cases, affiliated - packages also follow similar development processes and package - templates as for the core package. - - If you are a developer interested in signing up as an affiliated package, details are in the `Becoming an Affiliated Package <#affiliated-instructions>`__ section. - -Astropy Coordinated Packages - A related concept is that of “Astropy coordinated packages”. - Coordinated packages are similar to affiliated packages, but the - Astropy Project as a whole maintains them. In practice this means - the Astropy coordination committee has administrative control of a - coordinated package repository (delegated to the maintainers), and - that maintainers of these packages have :ref:`formal - roles ` in the Astropy Project. The most prominent - of these coordinated packages is the Astropy core package itself. - In some cases these are packages identified by the core team as - needing development separate from the core (either they are - experimental or problem space-focused), while others started as - affiliated packages but have become so important to the ecosystem - that they grew to become coordinated. - -Astropy Infrastructure Packages - One final related category are the "Astropy infrastructure - packages". These packages are those that are necessary - infrastructure for Astropy packages - e.g. testing and - documentation machinery. While occasionally these have - astro-specific functionality, in general they are more generic - packages that are useful to packages outside of astronomy, and as - a result may have some maintainers outside the Astropy project. - But some are also Astropy coordinated packages, with maintainers - drawn from the infrastructure roles. - -Installing Affiliated and Coordinated Packages - All packages should be available on PyPI. Some are available via - conda, particularly through the conda-forge channel. That said, - affiliated packages are developed independently of the Astropy - core library. You should refer to the package's documentation - first if you encounter problems. - -.. _astropy-org-affililated-coordinated-table: - -Coordinated Packages --------------------- - -The following table lists all current Astropy coordinated -packages. - -.. raw:: html - -

        Total number of coordinated packages:

        - -.. list-table:: - :header-rows: 0 - :stub-columns: 1 - :name: coordinated-package-table - :class: package-table forth-row-sep - - * - Loading... - - \- - - \- - - \- - * - \- - - \- - - \- - - \- - - -.. _astropy-org-affililated-registry-table: - -Affiliated Packages Registry ----------------------------- - -The following table lists all currently registered affiliated -packages. - -NOTE: The listing is currently minimal because Astropy has just -accepted `APE 22 `__ -in January 2024. We are in the midst of transitioning to the new -process in partnership with pyOpenSci, so we really appreciate -your patience. - - -.. raw:: html - -

        Total number of post-APE 22 affiliated packages:

        - - -.. list-table:: - :header-rows: 0 - :stub-columns: 1 - :name: pyos-package-table - :class: package-table third-row-sep - - * - Loading... - - \- - - \- - - \- - * - \- - - \- - - \- - - \- - -All accepted pyOpenSci packages available `here `__. - -All currently under review packages via pyOpenSci available `here `__. - -.. _astropy-org-affililated-registry-pre-ape-table: - -Affiliated Packages Registry (Pre-APE 22) ------------------------------------------ - -This section contains the listing of Astropy Affiliated Packages -that pre-dated `APE 22 `__. -This section is frozen as of March 6, 2024. - -.. raw:: html - -

        Total number of pre-APE 22 affiliated packages:

        - - -.. list-table:: - :header-rows: 0 - :stub-columns: 1 - :name: affiliated-package-table - :class: package-table forth-row-sep - - * - Loading... - - \- - - \- - - \- - * - \- - - \- - - \- - - \- - -.. _astropy-org-affiliated-instructions: - -Becoming an Affiliated Package ------------------------------- - -Astropy `uses the pyOpenSci peer review process `__ to vet affiliated packages. If you are a developer of an astronomy package and would like your package to become affiliated with the Astropy Project, you submit your package directly to pyOpenSci. -Astropy will be involved in the review, which will allow your package to become an affiliated package through that review process. You can also opt to be fast tracked through `JOSS `__ if desired. -Read the pyOpenSci author guide to learn `how to get started with submitting a package to pyOpenSci through their affiliated partner program Guidebook `__. - -In addition to pyOpenSci criteria, we also apply `Astropy-specific guidelines for reviewing affiliated packages `__. -This will give you a sense of whether your package is ready for review. -Broadly speaking, your package should: - -- Comply with general pyOpenSci review standards. Please see `Peer Review Guide for Python Open Source Authors `__ for more details. -- Be potentially useful to astronomers. This can mean useful to a specific sub-domain of astronomy, or more broadly useful to a large fraction of astronomy (or beyond, as long as it is also useful for astronomy). -- Specifically use, interface with, or provide complementary capabilities to other Astropy packages. -- Use `classes and functions from the astropy core package `__ wherever possible and appropriate, and (as much as possible) avoid duplication with other packages in the Astropy ecosystem. This facilitates re-use of code and sharing of resources. -- Be open to contributions from others. While this most straightforwardly means it follows a Github-based open development model (like the Astropy core package), alternative approaches are perfectly valid as long as they are consistent with basic principles of open source; e.g., `an OSI-approved license `__. -- Include instructions to users on how to cite your package. This is commonly done with a CITATION file. This file could include a Zenodo record (highly recommended), acknowledgement text, and/or journal article(s). Where possible, full BibTeX entries of these citations are recommended. -- Include citations to other relevant papers and software following `leading practices for citing astronomy software `__. - -In addition, you should make an effort to connect with the Astropy developer community, including developers from the core astropy package or any related affiliated packages. -If your package is determined to meet the above standards, it will be accepted and added to the affiliated package registry. -Note however that if packages become unmaintained or do not meet the standards anymore, they may be removed from the list of affiliated packages, `as per pyOpenSci policy. `__ - -Package Template -################ - -If you are considering creating a new astronomy package and would like it to be an Astropy affiliated package, you can use `the OpenAstronomy packaging guide `__ to make it much easier to meet these standards. -It reflects up-to-date Python packaging techniques to generate documentation like that used in the astropy package, a ready-to-use testing framework, and a variety of tools that streamline tasks like user configuration, caching downloaded files, or linking C-compiled extensions. More details on this template are available in the `usage instructions for the template `__. - -Additionally, it is also acceptable to use `pyOpenSci Python Package Guide `__ if you think that better suits your package needs. - -We recommend that you join the `astropy-affiliated-maintainers `__ mailing list to be kept informed of any dicussions related to affiliated packages. - - -Affiliated Package: FAQs ------------------------- - -I want my package to be Astropy Affiliated -########################################## - -Thank you for your interest! Please see `Becoming an Affiliated Package <#becoming-an-affiliated-package>`__ above. -When in doubt, feel free to contact Astropy Affiliated Editors for advice. - -I no longer have time to maintain my Astropy Affiliated package -############################################################### - -Please contact pyOpenSci, as per `Peer Review Guidelines & Policies `__. - -I want to delist my package as Astropy Affiliated -################################################# - -Please see `Requesting package removal from the pyOpenSci ecosystem `__. - -I am a new Editor -################# - -Welcome and thank you! We usually do not switch out all our Editors at the same time, so the incumbent co-Editor could help you contact pyOpenSci to add you to `pyOpenSci editorial board `__ with the understanding that we are taking the person you are replacing off that board and that your role is Astropy- and astronomy-focused. - -Your name would also be added to :ref:`Astropy Team ` under the same role. - -I am a new reviewer -################### - -Welcome and thank you! Please submit the sign-up form that can be found under `Become a pyOpenSci reviewer `__. -Do not forget to check "Astropy"/"astronomy"/"astrophysics" when you see them as options. - -It is important that you understand your reviews will be done in public. There is no option to remain anonymous. - -.. raw:: html - - - - - - - diff --git a/affiliated/registry.json b/affiliated/registry.json index 53d145cf..4ee49025 100644 --- a/affiliated/registry.json +++ b/affiliated/registry.json @@ -1,1092 +1,82 @@ { "packages": [ - { - "name": "regularizePSF", - "maintainer": "Marcus Hughes ", - "stable": true, - "home_url": "https://punch-mission.github.io/regularizepsf/", - "repo_url": "https://github.com/punch-mission/regularizepsf", - "pypi_name": "regularizepsf", - "description": "regularizePSF is a package for manipulating and correcting variable point spread functions in astronomical images", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2023-04-21" - } - }, - { - "name": "BayesicFitting", - "maintainer": "Do Kester and Migo Mueller ", - "stable": true, - "home_url": "https://bayesicfitting.nl/", - "repo_url": "https://github.com/dokester/BayesicFitting", - "pypi_name": "BayesicFitting", - "description": "General purpose toolbox for Bayesian fitting and evidence calculation.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2021-11-25" - } - }, - { - "name": "PyCBC", - "maintainer": "Alexander Harvey Nitz ", - "stable": true, - "home_url": "https://pycbc.org/", - "repo_url": "https://github.com/gwastro/pycbc", - "pypi_name": "pycbc", - "description": "Core package to analyze gravitational-wave data, find signals, and study their parameters.", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2021-10-22" - } - }, - { - "name": "SpectraPy", - "maintainer": "Marco Fumana ", - "stable": true, - "home_url": "https://mcfuman.gitlab.io/SpectraPy/", - "repo_url": "https://gitlab.com/mcfuman/SpectraPy/", - "pypi_name": "", - "description": "SpectraPy is a Python3 library, which collects algorithms and methods for data reduction of astronomical spectra obtained by a through slits spectrograph. The library is designed to be spectrograph independent. Current implementation is focused on the extraction of 2D spectra.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Functional but low activity", - "python3": "Yes", - "last-updated": "2021-10-14" - } - }, - { - "name": "statmorph", - "maintainer": "Vicente Rodriguez-Gomez ", - "stable": true, - "home_url": "https://statmorph.readthedocs.io/", - "repo_url": "https://github.com/vrodgom/statmorph", - "pypi_name": "statmorph", - "description": "A Python package for calculating non-parametric morphological diagnostics of galaxy images, as well as fitting 2D Sérsic profiles.", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2021-01-12" - } - }, - { - "name": "lenstronomy", - "maintainer": "Simon Birrer, Anowar Shajib, and Daniel Gilman ", - "stable": true, - "home_url": "https://lenstronomy.readthedocs.io", - "repo_url": "https://github.com/lenstronomy/lenstronomy", - "pypi_name": "lenstronomy", - "description": "Multi-purpose gravitational lensing and image modeling package", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2020-07-24" - } - }, - { - "name": "astropy core package", - "maintainer": "Astropy Coordination Committee", - "stable": true, - "home_url": "https://docs.astropy.org", - "repo_url": "https://github.com/astropy/astropy", - "pypi_name": "astropy", - "description": "A common core package for Astronomy in Python.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2019-6-5" - } - }, { "name": "specutils", - "maintainer": "Ricky O'Steen, Adam Ginsburg, Erik Tollerud and Kelle Cruz ", + "maintainer": "Wolfgang Kerzendorf", "stable": false, - "home_url": "https://specutils.readthedocs.io", - "repo_url": "https://github.com/astropy/specutils", - "pypi_name": "specutils", - "description": "Coordinated package for analysis tools and basic data types of astronomical spectra.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2018-12-04" - } - }, - { - "name": "specreduce", - "maintainer": "Tim Pickering, Erik Tollerud, Kyle Conroy, Clare Shanahan, and Hannu Parviainen ", - "stable": false, - "home_url": "https://specreduce.readthedocs.io", - "repo_url": "https://github.com/astropy/specreduce", - "pypi_name": "specreduce", - "description": "Coordinated package to provide a data reduction toolkit for optical and infrared spectroscopy, on which applications such as pipeline processes for specific instruments can be built.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2022-05-05" - } + "home_url": "https://github.com/astropy/specutils", + "repo_url": "http://github.com/astropy/specutils.git", + "pypi_name": "specutils" }, { "name": "astroquery", - "maintainer": "Adam Ginsburg and Brigitta Sipőcz ", - "stable": true, - "home_url": "https://astroquery.readthedocs.io", - "repo_url": "https://github.com/astropy/astroquery", - "pypi_name": "astroquery", - "description": "Tools for querying online astronomical data sources.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "photutils", - "maintainer": "Larry Bradley ", - "stable": false, - "home_url": "https://photutils.readthedocs.io/", - "repo_url": "https://github.com/astropy/photutils", - "pypi_name": "photutils", - "description": "Photometry and related image-processing tools.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "asdf-astropy", - "maintainer": "Brett Graham, Nadia Dencheva, Perry Greenfield, and Stuart Mumford ", - "stable": true, - "home_url": "https://asdf-astropy.readthedocs.io/en/latest/", - "repo_url": "https://github.com/astropy/asdf-astropy", - "pypi_name": "asdf-astropy", - "description": "ASDF format support for astropy.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2022-05-19" - } - }, - { - "name": "ginga", - "maintainer": "Eric Jeschke and Pey Lian Lim ", - "stable": true, - "home_url": "https://ejeschke.github.io/ginga", - "repo_url": "https://github.com/ejeschke/ginga", - "pypi_name": "ginga", - "description": "Ginga is a Python toolkit for building viewers for astronomical and scientific images stored in numpy data arrays and displaying them on a variety of different display platforms. The toolkit provides many features for building a viewer, including a flexible plugin framework that is provided as a customizable reference viewer for FITS images.", - "image": "https://ejeschke.github.io/ginga/images/Ginga_screenshot_MacOSX-1024x613.jpg", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "astroML", - "maintainer": "Jake Vanderplas and Brigitta Sipőcz ", - "stable": true, - "home_url": "https://www.astroml.org/", - "repo_url": "https://github.com/astroML/astroML", - "pypi_name": "astroML", - "description": "Tools for machine learning and data mining in Astronomy.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2019-10-06" - } - }, - { - "name": "PyDL", - "maintainer": "Benjamin Alan Weaver ", - "stable": false, - "home_url": "https://pydl.readthedocs.io", - "repo_url": "https://github.com/weaverba137/pydl", - "pypi_name": "pydl", - "image": null, - "description": "Python replacements for functions that are part of the IDL built-in library, or part of astronomical IDL libraries. The emphasis is on reproducing results of the astronomical library functions. Only the bare minimum of IDL built-in functions are implemented to support this.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Needs work", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "APLpy", - "maintainer": "Thomas Robitaille and Eli Bressert ", - "stable": true, - "home_url": "https://aplpy.github.io", - "repo_url": "https://github.com/aplpy/aplpy", - "pypi_name": "APLpy", - "description": "A Python module aimed at producing publication-quality plots of astronomical imaging data in FITS format. The module uses Matplotlib, a powerful and interactive plotting package. It is capable of creating output files in several graphical formats, including EPS, PDF, PS, PNG, and SVG.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Functional but low activity", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "reproject", - "maintainer": "Thomas Robitaille, Stuart Mumford, and Sam Van Kooten ", - "stable": true, - "home_url": "https://reproject.readthedocs.io", - "repo_url": "https://github.com/astropy/reproject", - "pypi_name": "reproject", - "image": null, - "description": "Python-based astronomical image reprojection.", - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "PyVO", - "maintainer": "Adrian Damian, Brigitta Sipőcz, Manon Marchand, Markus Demleitner, and Tom Donaldson", - "stable": true, - "home_url": "https://pyvo.readthedocs.io/", - "repo_url": "https://github.com/astropy/pyvo", - "pypi_name": "pyvo", - "description": "Access to the Virtual Observatory through Python using IVOA Standards.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2019-10-06" - } - }, - { - "name": "gammapy", - "maintainer": "Axel Donath and Régis Terrier ", - "stable": false, - "home_url": "https://gammapy.org", - "repo_url": "https://github.com/gammapy/gammapy", - "pypi_name": "gammapy", - "description": "A Python package for gamma-ray astronomy", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "ccdproc", - "maintainer": "Matt Craig ", - "stable": true, - "home_url": "https://ccdproc.readthedocs.io", - "repo_url": "https://github.com/astropy/ccdproc", - "pypi_name": "ccdproc", - "description": "Package to do basic CCD data reduction.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "sncosmo", - "maintainer": "Kyle Barbary and Ben Rose ", - "stable": true, - "home_url": "https://sncosmo.readthedocs.io", - "repo_url": "https://github.com/sncosmo/sncosmo", - "pypi_name": "sncosmo", - "image": "https://avatars1.githubusercontent.com/u/5490746?v=3&s=500", - "description": "Supernova light curve models in Python. SNCosmo synthesizes supernova spectra and photometry from SN models, and has functions for fitting and sampling SN model parameters given photometric light curve data. It includes built-in supernova models such as the SALT2, MLCS2k2, Hsiao, Nugent, PSNID, SNANA and Whalen models, a variety of built-in bandpasses and magnitude systems, and allows custom models, bandpasses, and magnitude systems to be defined.", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "Glue", - "maintainer": "Chris Beaumont and Thomas Robitaille ", - "stable": true, - "home_url": "https://www.glueviz.org", - "repo_url": "https://github.com/glue-viz/glue", - "pypi_name": "glueviz", - "image": null, - "description": "Linked data visualizations across multiple files.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "pyregion", - "maintainer": "Jae-Joon Lee", - "stable": true, - "home_url": "https://pyregion.readthedocs.io", - "repo_url": "https://github.com/astropy/pyregion", - "pypi_name": "pyregion", - "image": null, - "description": "Python module to parse DS9 and CIAO region files.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "imexam", - "maintainer": "Megan Sosey", - "stable": false, - "home_url": "https://imexam.readthedocs.io", - "repo_url": "https://github.com/spacetelescope/imexam", - "pypi_name": "imexam", - "description": "A package for functionality like IRAF's imexamine.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "spherical_geometry", - "maintainer": "Mihai Cara", - "stable": false, - "home_url": "https://spherical-geometry.readthedocs.io", - "repo_url": "https://github.com/spacetelescope/spherical_geometry", - "pypi_name": "spherical-geometry", - "image": null, - "description": "Python package for handling spherical polygons that represent arbitrary regions of the sky.", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Needs work", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Functional but low activity", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "gwcs", - "maintainer": "Nadia Dencheva", + "maintainer": "Adam Ginsburg ", "stable": false, - "home_url": "https://gwcs.readthedocs.io", - "repo_url": "https://github.com/spacetelescope/gwcs", - "pypi_name": "gwcs", - "image": null, - "description": "Package for managing the world coordinate system (WCS) of astronomical data.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "spectral-cube", - "maintainer": "Adam Ginsburg and Eric Koch", - "stable": true, - "home_url": "https://spectral-cube.readthedocs.io", - "repo_url": "https://github.com/radio-astro-tools/spectral-cube", - "pypi_name": "spectral-cube", - "image": null, - "description": "Library for reading and analyzing astrophysical spectral data cubes.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } + "home_url": "https://github.com/astropy/astroquery", + "repo_url": "http://github.com/astropy/astroquery.git", + "pypi_name": "astroquery" }, { - "name": "astroplan", - "maintainer": "Brett Morris", + "name": "photutils", + "maintainer": "Rene Breton", "stable": false, - "home_url": "https://astroplan.readthedocs.io/", - "repo_url": "https://github.com/astropy/astroplan", - "pypi_name": "astroplan", - "description": "An open source Python package to help astronomers plan observations.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "Astro-SCRAPPY", - "maintainer": "Curtis McCully ", - "stable": true, - "home_url": "https://github.com/astropy/astroscrappy", - "repo_url": "https://github.com/astropy/astroscrappy", - "pypi_name": "astroscrappy", - "description": "A high-performance package to detect and remove cosmic rays from astronomical images.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Needs work", - "testing": "Partial", - "devstatus": "Functional but low activity", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "naima", - "maintainer": "Victor Zabalza ", - "stable": true, - "home_url": "https://naima.readthedocs.io/", - "repo_url": "https://github.com/zblz/naima", - "pypi_name": "naima", - "description": "Derivation of non-thermal particle distributions through MCMC spectral fitting.", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "omnifit", - "maintainer": "Aleksi Suutarinen ", - "stable": true, - "home_url": "https://ricemunk.github.io/omnifit/", - "repo_url": "https://github.com/RiceMunk/omnifit", - "pypi_name": "omnifit", - "image": null, - "description": "Package for doing astronomical spectroscopy fitting of interstellar ices.", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Partial", - "testing": "Good", - "devstatus": "Functional but low activity", - "python3": "Yes", - "last-updated": "2022-01-12" - } - }, - { - "name": "gala", - "maintainer": "Adrian Price-Whelan ", - "stable": true, - "home_url": "https://gala.adrian.pw/en/latest/", - "repo_url": "https://github.com/adrn/gala", - "pypi_name": "gala", - "image": null, - "description": "A Python package for gravitational and galactic dynamics. gala contains functionality for representing gravitational potential models, numerically integrating orbits, and non-linear dynamics. gala also relies heavily on Astropy's unit and coordinates subpackages. (Note: this was previously listed on pypi as 'astro-gala', and older versions can still be installed with that name)", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "galpy", - "maintainer": "Jo Bovy", - "stable": true, - "home_url": "https://galpy.readthedocs.io/en/latest/", - "repo_url": "https://github.com/jobovy/galpy", - "pypi_name": "galpy", - "image": null, - "description": "A Python 2 and 3 package for galactic dynamics.", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "HENDRICS", - "maintainer": "Matteo Bachetti ", - "stable": true, - "repo_url": "https://github.com/StingraySoftware/HENDRICS", - "home_url": "https://hendrics.readthedocs.io", - "pypi_name": "hendrics", - "description": "Spectral-timing analysis of X-ray data from the command line (formerly known as MaLTPyNT).", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } + "home_url": "https://github.com/astropy/photutils", + "repo_url": "http://github.com/astropy/photutils.git" }, { - "name": "Halotools", - "maintainer": "Andrew Hearin, Nick van Alfen ", - "stable": true, - "home_url": "https://halotools.readthedocs.io", - "repo_url": "https://github.com/astropy/halotools", - "pypi_name": "halotools", - "description": "Generate Monte Carlo realizations of mock galaxy populations using cosmological simulations.", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "cluster-lensing", - "maintainer": "Jes Ford", + "name": "kcorrect", + "maintainer": "Taro Sato", "stable": false, - "repo_url": "https://github.com/jesford/cluster-lensing", - "home_url": "https://jesford.github.io/cluster-lensing", - "pypi_name": "cluster-lensing", - "description": "Galaxy cluster properties and NFW profiles (with miscentering option).", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "marxs", - "maintainer": "Hans Moritz G\u00fcnther (hamogu)", - "stable": true, - "repo_url": "https://github.com/Chandra-MARX/marxs", - "home_url": "https://marxs.readthedocs.io/", - "pypi_name": "marxs", - "description": "Multi-Architecture-Raytrace-Xraymission-Simulator (MARXS) is a toolsuite to ray-trace X-ray observatories. It is primarily aimed at astronomical X-ray satellites and sounding rocket payloads, but can be used to ray-trace experiments in the laboratory as well.", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "pyspeckit", - "maintainer": "Adam Ginsburg ", - "stable": true, - "home_url": "https://pyspeckit.readthedocs.io", - "repo_url": "https://github.com/pyspeckit/pyspeckit", - "pypi_name": "pyspeckit", - "description": "A toolkit for spectroscopic input/output, plotting, fitting, and manipulation.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } + "home_url": "https://github.com/astropy/kcorrect", + "repo_url": "http://github.com/astropy/kcorrect.git" }, { - "name": "linetools", - "maintainer": "J. Xavier Prochaska, Nicolas Tejos, and Neil Crighton", + "name": "astropysics", + "maintainer": "Erik Tollerud ", "stable": true, - "home_url": "https://linetools.readthedocs.io", - "repo_url": "https://github.com/linetools/linetools", - "pypi_name": "linetools", - "description": "Package for the analysis of 1-D spectra for astronomy.", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "poliastro", - "maintainer": "Juan Luis Cano Rodr\u00edguez", - "stable": false, - "repo_url": "https://github.com/poliastro/poliastro", - "home_url": "https://docs.poliastro.space", - "pypi_name": "poliastro", - "description": "Astrodynamics and Orbital Mechanics computations", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Partial", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "hips", - "maintainer": "Thomas Boch", - "stable": false, - "repo_url": "https://github.com/hipspy/hips", - "home_url": "https://hips.readthedocs.io", - "pypi_name": "hips", - "description": "A Python astronomy package for HiPS : Hierarchical Progressive Surveys.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Good", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-08" - } + "home_url": "http://packages.python.org/Astropysics/", + "repo_url": "http://github.com/eteq/astropysics.git", + "pypi_name": "Astropysics" }, { - "name": "regions", - "maintainer": "Larry Bradley and Adam Ginsburg ", - "stable": false, - "repo_url": "https://github.com/astropy/regions", - "home_url": "https://astropy-regions.readthedocs.io", - "pypi_name": "regions", - "description": "A Python astronomy package for region handling, including serialization (input and output) and masking.", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-08" - } - }, - { - "name": "synphot", - "maintainer": "Pey Lian Lim", + "name": "ginga", + "maintainer": "Eric Jeschke ", "stable": true, - "home_url": "https://synphot.readthedocs.io", - "repo_url": "https://github.com/spacetelescope/synphot_refactor", - "pypi_name": "synphot", - "description": "A Python astronomy package for synthetic photometry.", - "image": "https://synphot.readthedocs.io/en/latest/_images/spectrum-2.png", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2017-11-08" - } + "home_url": "http://ejeschke.github.com/ginga", + "repo_url": "http://github.com/ejeschke/ginga", + "pypi_name": "ginga" }, { - "name": "astropy-healpix", - "maintainer": "Leo Singer and Thomas Robitaille ", - "stable": false, - "repo_url": "https://github.com/astropy/astropy-healpix", - "home_url": "https://astropy-healpix.readthedocs.io/", - "pypi_name": "astropy-healpix", - "description": "A BSD-licensed HEALPix implementation for Astropy", - "image": null, - "coordinated": true, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2017-11-27" - } - }, - { - "name": "dust_extinction", - "maintainer": "Karl Gordon", - "stable": false, - "repo_url": "https://github.com/karllark/dust_extinction", - "home_url": "https://dust-extinction.readthedocs.io", - "pypi_name": "dust_extinction", - "description": "Interstellar dust extinction curves", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2018-5-25" - } - }, - { - "name": "feets", - "maintainer": "Juan B Cabral ", - "stable": true, - "repo_url": "https://github.com/carpyncho/feets", - "home_url": "https://feets.readthedocs.io", - "pypi_name": "feets", - "description": "feATURE eXTRACTOR FOR tIME sERIES.", - "image": "https://github.com/carpyncho/feets/raw/master/res/logo_medium.png", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2018-11-27" - } - }, - { - "name": "corral", - "maintainer": "Toros Survey Team", + "name": "astroML", + "maintainer": "Jake Vanderplas ", "stable": true, - "repo_url": "https://github.com/toros-astro/corral", - "home_url": "https://corral.readthedocs.io/", - "pypi_name": "corral-pipeline", - "description": "Corral will solve your pipeline needs by merging a database full connection interface with a MVC model, by making you able of editing your custom schemas and adding the possibility of writting specific processing steps following a intuitive data handling model.", - "image": null, - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Partial", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2018-8-21" - } + "home_url": "http://astroml.github.com/", + "repo_url": "http://github.com/astroML/astroML", + "pypi_name": "astroML" }, { - "name": "baseband", - "maintainer": "Marten H. van Kerkwijk ", + "name": "montage-wrapper", + "maintainer": "Thomas Robitaille ", "stable": true, - "home_url": "https://baseband.readthedocs.io", - "repo_url": "https://github.com/mhvk/baseband", - "pypi_name": "baseband", - "description": "Radio baseband IO: readers and writers for VLBI and other baseband data formats.", - "image": null, - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2018-11-27" - } + "home_url": "http://www.astropy.org/montage-wrapper/", + "repo_url": "https://github.com/astropy/montage-wrapper", + "pypi_name": "montage-wrapper" }, { - "name": "sbpy", - "maintainer": "Michael S. P. Kelley, Henry Hsieh, and Jian-Yang Li ", + "name": "pydl", + "maintainer": "Benjamin Alan Weaver ", "stable": false, - "home_url": "https://sbpy.org", - "repo_url": "https://github.com/NASA-Planetary-Science/sbpy", - "pypi_name": "sbpy", - "description": "A Python Module for Small-Body Planetary Astronomy", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2019-06-18" - } + "home_url": "https://github.com/weaverba137/pydl", + "repo_url": "http://github.com/weaverba137/pydl.git", + "pypi_name": "pydl" }, { - "name": "EinsteinPy", - "maintainer": "Shreyas Bapat, Ritwik Saha, Bhavya Bhatt, and Priyanshu Khandelwal ", - "stable": true, - "home_url": "https://einsteinpy.org", - "repo_url": "https://github.com/einsteinpy/einsteinpy", - "pypi_name": "einsteinpy", - "description": "A Python Package for General Relativity and Gravitational Astronomy", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2019-07-23" - } - }, - { - "name": "astroalign", - "maintainer": "Martin Beroiz ", - "stable": true, - "home_url": "https://astroalign.readthedocs.io/", - "repo_url": "https://github.com/quatrope/astroalign", - "pypi_name": "astroalign", - "description": "Astrometric registration of images when no WCS info is available", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2019-08-15" - } - }, - { - "name": "mocpy", - "maintainer": "François-Xavier Pineau , Matthieu Baumann , and Thomas Boch ", - "stable": true, - "home_url": "https://cds-astro.github.io/mocpy/", - "repo_url": "https://github.com/cds-astro/mocpy", - "pypi_name": "mocpy", - "description": "MOCPy is a Python library allowing easy creation, parsing and manipulation of MOCs (Multi-Order Coverage maps). These coverage maps heavily rely on the HEALPix sky partionning scheme. A MOC is therefore a set of HEALPix cells at different orders. This allows the description of any arbitrary maps on the sky.", - "coordinated": false, - "review": { - "functionality": "General package", - "ecointegration": "Partial", - "documentation": "Partial", - "testing": "Partial", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2019-11-04" - } - }, - { - "name": "ligo.skymap", - "maintainer": "Leo Singer ", - "stable": true, - "home_url": "https://lscsoft.docs.ligo.org/ligo.skymap/", - "repo_url": "https://git.ligo.org/lscsoft/ligo.skymap", - "pypi_name": "ligo.skymap", - "description": "Read, write, generate, simulate, and visualize LIGO/Virgo gravitational-wave probability sky maps.", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Good", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2020-07-01" - } - }, - { - "name": "agnpy", - "maintainer": "Cosimo Nigro ", - "stable": true, - "home_url": "https://agnpy.readthedocs.io/en/latest/", - "repo_url": "https://github.com/cosimoNigro/agnpy", - "pypi_name": "agnpy", - "description": "Modelling Active Galactic Nuclei radiative processes with python. agnpy focuses on the numerical computation of the photon spectra produced by leptonic radiative processes in jetted Active Galactic Nuclei (AGN).", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Partial", - "documentation": "Good", - "testing": "Good", - "devstatus": "Heavy development", - "python3": "Yes", - "last-updated": "2020-07-13" - } - }, - { - "name": "kanon", - "maintainer": "Léni Gauffier ", + "name": "APLpy", + "maintainer": "Thomas Robitaille and Eli Bressert ", "stable": true, - "home_url": "https://kanon.readthedocs.io/", - "repo_url": "https://github.com/legau/kanon", - "pypi_name": "kanon", - "description": "History of astronomy package, historical geocentric models and number systems", - "coordinated": false, - "review": { - "functionality": "Specialized package", - "ecointegration": "Good", - "documentation": "Partial", - "testing": "Good", - "devstatus": "Good", - "python3": "Yes", - "last-updated": "2022-02-05" - } + "home_url": "http://aplpy.github.io", + "repo_url": "http://github.com/aplpy/aplpy.git", + "pypi_name": "APLpy" } ] } diff --git a/affiliated/validate_registry.py b/affiliated/validate_registry.py deleted file mode 100644 index a0e2b424..00000000 --- a/affiliated/validate_registry.py +++ /dev/null @@ -1,135 +0,0 @@ -import os -import sys -import json -from termcolor import cprint -from datetime import datetime - -import requests - -REQUIRED_KEYS = {'name', 'maintainer', 'stable', 'home_url', 'repo_url', 'coordinated'} - -OPTIONAL_KEYS = {'provisional', 'stable', 'pypi_name', 'image', 'review', 'description'} - -ALL_KEYS = REQUIRED_KEYS | OPTIONAL_KEYS - -REVIEW_KEYS = {'functionality', 'ecointegration', 'documentation', 'testing', - 'devstatus', 'python3', 'last-updated'} - -REVIEW_FUNCTIONALITY = {'Specialized package', 'General package'} -REVIEW_DEVSTATUS = {'Unmaintained', 'Functional but low activity', - 'Functional but unmaintained', 'Heavy development', 'Good'} -REVIEW_PYTHON3 = {'No', 'Yes'} -REVIEW_GENERIC = {'Needs work', 'Partial', 'Good'} - - -jsonfn = os.path.join(os.path.dirname(__file__), "registry.json") -try: - registry = json.load(open(jsonfn)) -except json.decoder.JSONDecodeError as e: - cprint(jsonfn + ' : ' + e.args[0], color='red') - cprint("*** JSON file appears to be malformed - see above ***", color='red') - sys.exit(2) - -error = 0 - -for package in registry['packages']: - - if 'name' in package: - name = package['name'] - else: - cprint("ERROR: Missing package name: {0}".format(package), file=sys.stderr, color='red') - error += 1 - continue - - cprint("Checking {0}".format(name), color='blue') - - print(" - verifying keys") - - difference = set(package.keys()) - (REQUIRED_KEYS | OPTIONAL_KEYS) - if difference: - cprint(f" ERROR: Unrecognized key(s) for {name}: {difference}. " - f"Valid options are {', '.join(ALL_KEYS)}", file=sys.stderr, color='red') - error += 1 - - difference = REQUIRED_KEYS - set(package.keys()) - if difference: - cprint(f" ERROR: Missing key(s) for {name}: {difference}", file=sys.stderr, color='red') - error += 1 - - # Check that URLs work - - print(" - verifying URLs") - - try: - r = requests.get(package['home_url']) - assert r.ok - except Exception: - cprint(f" ERROR: Home URL for {name} - {package['home_url']} - did not work", file=sys.stderr, color='red') - error += 1 - - try: - r = requests.get(package['repo_url']) - assert r.ok - except Exception: - cprint(f" ERROR: Repository URL for {name} - {package['repo_url']} - did not work", file=sys.stderr, color='red') - error += 1 - - if package.get('pypi_name'): - - print(" - verifying PyPI name") - - r = requests.get(f"https://pypi.python.org/pypi/{package['pypi_name']}/json") - if not r.ok: - cprint(f" ERROR: PyPI package {package['pypi_name']} doesn't appear to exist", file=sys.stderr, color='red') - error += 1 - - if package.get('review'): - - print(" - verifying review") - - review = package['review'] - - difference = set(review.keys()) - REVIEW_KEYS - if difference: - cprint(f" ERROR: Unrecognized review key(s) for {name}: {difference}. " - f"Valid options are {', '.join(REVIEW_KEYS)}", file=sys.stderr, color='red') - error += 1 - - difference = REVIEW_KEYS - set(review.keys()) - if difference: - cprint(f" ERROR: Missing review key(s) for {name}: {difference}", file=sys.stderr, color='red') - error += 1 - - for key, value in review.items(): - - if key == 'functionality': - if value not in REVIEW_FUNCTIONALITY: - cprint(f" ERROR: Invalid functionality in review for {name}: '{value}'. " - f"Valid options are {', '.join(REVIEW_FUNCTIONALITY)}", file=sys.stderr, color='red') - error += 1 - elif key == 'last-updated': - try: - dt = datetime.strptime(value, "%Y-%m-%d") - except Exception: - cprint(f" ERROR: Could not parse date: '{value}'", file=sys.stderr, color='red') - error += 1 - elif key == 'devstatus': - if value not in REVIEW_DEVSTATUS: - cprint(f" ERROR: Invalid devstatus in review for {name}: '{value}'. " - f"Valid options are {', '.join(REVIEW_DEVSTATUS)}", file=sys.stderr, color='red') - error += 1 - elif key == 'python3': - if value not in REVIEW_PYTHON3: - cprint(f" ERROR: Invalid python3 in review for {name}: '{value}'. " - f"Valid options are {', '.join(REVIEW_PYTHON3)}", file=sys.stderr, color='red') - error += 1 - else: - if value not in REVIEW_GENERIC: - cprint(f" ERROR: Invalid {key} in review for {name}: '{value}'. " - f"Valid options are {', '.join(REVIEW_GENERIC)}", file=sys.stderr, color='red') - error += 1 - -if error > 0: - sornot = 's' if error > 1 else '' - cprint(f"** {error} error{sornot} occurred - see above for details **", file=sys.stderr, color='red') - sys.exit(1) diff --git a/annoucement_banner.html b/annoucement_banner.html deleted file mode 100644 index e69de29b..00000000 diff --git a/announcements/release-0.4.rst b/announcements/release-0.4.rst deleted file mode 100644 index e3f4e70f..00000000 --- a/announcements/release-0.4.rst +++ /dev/null @@ -1,75 +0,0 @@ -:orphan: - -Astropy v0.4 Released! -====================== - -Dear colleagues, - -We are very happy to announce the third major public release (v0.4) of -the astropy package, a core Python package for Astronomy: - -https://www.astropy.org - -Astropy is a community-driven package intended to contain much of the -core functionality and common tools needed for performing astronomy and -astrophysics with Python. - -New and improved major functionality in this release includes: - -- A new astropy.vo.samp sub-package adapted from the previously - standalone SAMPy package -- A re-designed astropy.coordinates sub-package for celestial - coordinates -- A new ‘fitsheader’ command-line tool that can be used to quickly - inspect FITS headers -- A new HTML table reader/writer -- Improved performance for Quantity objects -- A re-designed configuration framework - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/0.4.html - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -In particular, if you use Anaconda, you can update to v0.4 with: - -:: - - conda update astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 80 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -If you use Astropy directly - or as a dependency to another package - -for your work, please remember to include the following acknowledgment -at the end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013). - -where (Astropy Collaboration, 2013) is a citation to the `Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Please feel free to forward this announcement to anyone you think might -be interested in this release. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Thomas Robitaille, Erik Tollerud, and Perry Greenfield -| on behalf of The Astropy Collaboration diff --git a/announcements/release-1.0.rst b/announcements/release-1.0.rst deleted file mode 100644 index 94f8b283..00000000 --- a/announcements/release-1.0.rst +++ /dev/null @@ -1,90 +0,0 @@ -:orphan: - -Astropy v1.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the fourth major public release (v1.0) of -the astropy package, a core Python package for Astronomy: - -https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. - -New and improved major functionality in this release includes: - -- Support for Altitude/Azimuth and Galactocentric coordinates in - astropy.coordinates -- A new astropy.visualization sub-package -- A new astropy.analytic_functions sub-package -- Compound models in astropy.modeling may now be created using - arithmetic expressions, and the resulting models support fitting. -- Significantly faster C-based readers/writers for astropy.io.ascii -- Support for a new enhanced CSV ASCII table format -- A refactored Table class with improved performance when - adding/removing columns -- Support for using Time, Quantity, or SkyCoord arrays as Table columns - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/1.0.html - -Astropy v1.0 is a special release that we are denoting a *Long Term -Support* (LTS) release, which means that we will be supporting it with -bug fixes for the next two years, rather than the usual six months. More -information about this can be found at the link above. - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -In particular, if you use the `Anaconda Python -Distribution `__, you can -update to v1.0 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 122 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to include the following acknowledgment at the -end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013). - -where (Astropy Collaboration, 2013) is a citation to the `Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Please feel free to forward this announcement to anyone you think might -be interested in this release. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Thomas Robitaille, Erik Tollerud, and Perry Greenfield -| on behalf of The Astropy Collaboration diff --git a/announcements/release-1.1.rst b/announcements/release-1.1.rst deleted file mode 100644 index 3a1fc48b..00000000 --- a/announcements/release-1.1.rst +++ /dev/null @@ -1,100 +0,0 @@ -:orphan: - -Astropy v1.1 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v1.1 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. - -New and improved major functionality in this release includes: - -- New functions to automatically determine histogram bins, including the - Bayesian blocks algorithm -- A new interface to transform between Table objects and pandas - DataFrame objects -- Support for table indexing -- Support for supergalactic and ecliptic coordinates -- A new .info attribute to get summary information about tables and - columns -- A new show_in_notebook() method to show a table in Jupyter/IPython - notebooks with additional interactivity features -- Support for new units, including logarithmic units such as magnitudes, - dex, and decibels -- Support for the Planck 2015 cosmology and significant performance - improvements in the cosmology sub-package - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/1.1.html - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v1.1 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 160 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -As a reminder, Astropy v1.0 (our long term support release) will -continue to be supported with bug fixes until Feb 19th 2017, so if you -need to use Astropy in a very stable environment, you may want to -consider staying on the v1.0.x set of releases rather than upgrading to -v1.1. - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to include the following acknowledgment at the -end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013). - -where (Astropy Collaboration, 2013) is a citation to the `Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Please feel free to forward this announcement to anyone you think might -be interested in this release. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Thomas Robitaille, Erik Tollerud, and Perry Greenfield -| on behalf of The Astropy Collaboration diff --git a/announcements/release-1.2.rst b/announcements/release-1.2.rst deleted file mode 100644 index 8a35029a..00000000 --- a/announcements/release-1.2.rst +++ /dev/null @@ -1,108 +0,0 @@ -:orphan: - -Astropy v1.2 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v1.2 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. - -New and improved major functionality in this release includes: - -- A new class to compute Lomb-Scargle periodograms efficiently using - different methods. -- A number of new statistics functions including those for Jackknife - resampling, circular statistics, and the Akaike and Bayesian - information criteria. -- Support for getting the positions of solar system bodies in the - coordinates sub-package. -- The ability to compute Barycentric and Heliocentric light-travel time - corrections. -- Support for offset coordinate frames, which can be used to define a - coordinate system relative to a known position and rotation. -- An implementation of the zscale algorithm to determine image limits - automatically. -- Support for bolometric magnitudes in the units package. -- Improvements to the NDData class and subclasses. -- Auto-downloading of IERS tables as needed, which gives information - about Earth orientation parameters necessary for high precision - coordinate calculations and conversions to/from the UT1 scale. - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/1.2.html - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v1.2 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Note that if you install now you should get Astropy v1.2.1, as some -last-minute bug fixes were found and fixed after the v1.2 release was -created but before this announcement. - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 190 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -As a reminder, Astropy v1.0 (our long term support release) will -continue to be supported with bug fixes until Feb 19th 2017, so if you -need to use Astropy in a very stable environment, you may want to -consider staying on the v1.0.x set of releases (for which we have -recently released v1.0.10). - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to include the following acknowledgment at the -end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013). - -where (Astropy Collaboration, 2013) is a citation to the `Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Please feel free to forward this announcement to anyone you think might -be interested in this release. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-1.3.rst b/announcements/release-1.3.rst deleted file mode 100644 index 82834642..00000000 --- a/announcements/release-1.3.rst +++ /dev/null @@ -1,110 +0,0 @@ -:orphan: - -Astropy v1.3 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v1.3 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. - -New and improved major functionality in this release includes: - -- The WCSAxes framework for plotting points or images on celestial - coordinates in matplotlib. -- A new function in astropy.visualization to generate 3-color images - from astronomy images in different bands. -- Astropy coordinate representations now combine like vectors, with - useful mathematical operations that can be performed on them. -- Astropy coordinates and time objects now behave much more consistently - like arrays when they are reshaped. -- Earth locations can now be created from a postal address. -- JPL Ephemerides can now be used in the coordinates sub-package to - improve the accuracy of coordinate transformations and barycentric - time corrections. -- FORTRAN-style extended floating precision files like 1.495D+238 can - now be read using astropy.io.ascii or Table.read. -- Astropy objects can now be serialized to (or re-loaded from) a - standard YAML representation. -- FITS HDUs can now be lazy loaded, improving performance in files with - many HDUs. -- The default cosmology is now Planck 2015. - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/1.3.html - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v1.3 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 210 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -Astropy v1.0 (our long term support release) will continue to be -supported with bug fixes until the v2.0 release in June 2017, so if you -need to use Astropy in a very stable environment, you may want to -consider staying on the v1.0.x set of releases (for which we are -simultaneously releasing v1.0.11). - -While we typically do not support non-LTS releases, we are also -simultaneously releasing an Astropy v1.2.2, the last in that series. -This update is primarily to include a leap second at the end of 2016 -(but also contains other bug fixes). - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to include the following acknowledgment at the -end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013). - -where (Astropy Collaboration, 2013) is a citation to the `Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Please feel free to forward this announcement to anyone you think might -be interested in this release. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-2.0.rst b/announcements/release-2.0.rst deleted file mode 100644 index 0ed547f2..00000000 --- a/announcements/release-2.0.rst +++ /dev/null @@ -1,103 +0,0 @@ -:orphan: - -Astropy v2.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v2.0 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. - -New and improved major functionality in this release includes: - -- Most models now support parameters having units (i.e., being Quantity - objects). -- A new CCDData class that is directly useful for typical astronomical - images and implements the NDData interface. -- Coordinate frame objects can now carry proper motions and radial - velocities, and will carry them through and transform them between - frames. (This functionality is experimental and feedback is greatly - desired.) -- Many of the typical mixin columns for astropy tables can now be saved - into ECSV files and fully round-tripped. -- The fft and direct versions of the convolution algorithm in - astropy.convolution are now more consistent and work better with - typical use cases. -- A variety of additions to the astropy.stats subpackage - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/2.0.html - -Note that the Astropy 2.x series will be the last versions of Astropy -that will support Python 2.x. Future versions of Astropy will only -support Python 3.x. - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v2.0 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 232 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -Astropy v2.0 now repaces v1.0 as the long term support release, and will -be supported until the end of 2019. The next major release of Astropy -(scheduled for January 2018) will only support Python 3.x. So if you -need to use Astropy in a very stable environment in Python 2.7, you -should continue to use the 2.0.x series after 3.0.x is released. - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to include the following acknowledgment at the -end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013). - -where (Astropy Collaboration, 2013) is a citation to the `Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Special thanks to the coordinator for this release: Brigitta Sipocz. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-3.0.rst b/announcements/release-3.0.rst deleted file mode 100644 index 04a367ba..00000000 --- a/announcements/release-3.0.rst +++ /dev/null @@ -1,121 +0,0 @@ -:orphan: - -Astropy v3.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v3.0 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. It is part of the Astropy Project, which aims to foster an -ecosystem of interoperable astronomy packages for Python. - -New and improved major functionality in this release includes: - -- Full support for velocities in the coordinates subpackage, including - SkyCoord objects and proper motion corrections. -- Very large ASCII files can now be read in as chunks, allowing larger - tables to be efficiently read in, along with other performance - improvements reading tables. -- Time objects can now be read from or written to FITS files following - the official FITS time standard. -- Table mixin columns (e.g., quantities) can now be losslessly saved to - HDF5 or FITS tables. -- Constants can now be versioned using context managers. -- Support for quantities in scipy special functions -- A new command line script, "showtable", is available to display tables - from any format Astropy can read. -- The pytest plugins for testing Astropy have been moved to external - packages, enabling their use in a wider range of Python packages. -- False alarm probabilities are now available for the Lomb-Scargle - periodogram implementation. - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/3.0.html - -Note that the Astropy 3.x series is the first to only support Python 3. -Python 2 users can continue to use the 2.x series, which will receive -bug fixes and support until the Python developers permanently sunset -Python 2.7 (scheduled for 2019). - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v3.0 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 253 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -As a reminder, Astropy v2.0 (our long term support release) will -continue to be supported with bug fixes until the end 2019, so if you -need to use Astropy in a very stable environment, you may want to -consider staying on the v2.0.x set of releases (for which we have -recently released v2.0.4). - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to include the following acknowledgment at the -end of papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2018). - -where (Astropy Collaboration, 2018) is a citation to the `Astropy Paper -II `__ -(`ADS `__ - -`BibTeX `__). - -This paper is still under review, however, and an earlier paper is -available describing the status of the package at the time of v0.2. If -your work has used Astropy since then, you are encouraged to acknowledge -both papers: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (Astropy Collaboration, 2013, 2018). - -where (Astropy Collaboration, 2013) is a citation to the `first Astropy -Paper `__ -(`ADS `__ - -`BibTeX `__). - -Special thanks to the coordinator for this release: Brigitta Sipocz. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-3.1.rst b/announcements/release-3.1.rst deleted file mode 100644 index 78a0a5e4..00000000 --- a/announcements/release-3.1.rst +++ /dev/null @@ -1,102 +0,0 @@ -:orphan: - -Astropy v3.1 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v3.1 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. It is part of the Astropy Project, which aims to foster an -ecosystem of interoperable astronomy packages for Python. - -The focus of this release is on performance, but it also contains new -and improved major functionality. Highlights include: - -- Performance Improvements across-the-board -- A new sub-package for Uncertainties and Distributions -- A new Box Least Squares Periodogram -- J-style coordinates parser -- Support for use of Time and TimeDelta columns within a Table -- Array-valued Time and TimeDelta objects are now mutable -- Better uncertainty support and bit planes in NDData -- A new operator for Quantity performance -- Thermodynamic temperature equivalency -- Little-h equivalency -- Change in default cosmology -- Significant improvements in WCSAxes -- A new convenience function for imshow with ImageNormalize -- A common API for World Coordinate Systems - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/3.1.html - -Note that the Astropy 3.x series only supports Python 3. Python 2 users -can continue to use the 2.x (LTS) series (but without new features). - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v3.1 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 300 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -As a reminder, Astropy v2.0 (our long term support release) will -continue to be supported with bug fixes (but no new features) until the -end of 2019, so if you need to use Astropy in a very stable environment, -you may want to consider staying on the v2.0.x set of releases (for -which we have recently released v2.0.10). - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to acknowledgment it by citing the appropriate -Astropy paper. For the most up-to-date suggestions, see :ref:`the -acknowledgment page `, but as of this -release the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -Special thanks to the coordinator for this release: Brigitta Sipocz. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-3.2.rst b/announcements/release-3.2.rst deleted file mode 100644 index 091e42b6..00000000 --- a/announcements/release-3.2.rst +++ /dev/null @@ -1,93 +0,0 @@ -:orphan: - -Astropy v3.2 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v3.2 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. It is part of the Astropy Project, which aims to foster an -ecosystem of interoperable astronomy packages for Python. - -New and improved major functionality in this release includes: - -- New Sub-package for Time Series -- New SI/CODATA 2018 Constants -- Additions and changes to Ecliptic Transformations -- Table performance improvements and change in metadata handling -- Table I/O integration of pandas I/O functions for ASCII tables -- Improved help on Table read() and write() methods - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/3.2.html - -Note that the Astropy 3.x series only supports Python 3. Python 2 users -can continue to use the 2.x (LTS) series (but without new features). - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v3.2 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 300 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -As a reminder, Astropy v2.0 (our long term support release) will -continue to be supported with bug fixes (but no new features) until the -end of 2019, so if you need to use Astropy in a very stable environment, -you may want to consider staying on the v2.0.x set of releases (for -which we have recently released v2.0.13). - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to acknowledgment it by citing the appropriate -Astropy paper. For the most up-to-date suggestions, see :ref:`the -acknowledgment page `, but as of this release -the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -Special thanks to the coordinator for this release: Brigitta Sipocz. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-4.0.rst b/announcements/release-4.0.rst deleted file mode 100644 index 05d3a9dc..00000000 --- a/announcements/release-4.0.rst +++ /dev/null @@ -1,100 +0,0 @@ -:orphan: - -Astropy v4.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v4.0 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. It is part of the Astropy Project, which aims to foster an -ecosystem of interoperable astronomy packages for Python. - -New and improved major functionality in this release includes: - -- Support for Planck 2018 Cosmological Parameters -- Improved Consistency of Physical Constants and Units -- Scientific enhancements to the Galactocentric Frame -- New ymdhms Time Format -- New Context Manager for plotting time values -- Dynamic and improved handling of leap second -- Major Improvements in Compatibility of Quantity Objects with NumPy - Functions -- Multiple interface improvements to WCSAxes -- Fitting of WCS to Pairs of Pixel/World Coordinates -- Support for WCS Transformations between Pixel and Time Values -- Improvements to Folding for Time Series -- New Table Methods and significant performance improvements for Tables -- Improved downloading and caching of remote files - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/4.0.html - -The Astropy v4.0.x series now replaces v2.0.x as the long term support -release, and will be supported until the end of 2021. Also note that the -Astropy 4.x series only supports Python 3. Python 2 users can continue -to use the 2.x series but as of now it is no longer supported (as Python -2 itself is no longer supported). For assistance converting Python 2 -code to Python 3, see the `Python 3 for scientists conversion -guide `__. - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you make use of the `Anaconda Python -Distribution `__, you can update to -Astropy v4.0 with: - -:: - - conda update astropy - -Whereas if you usually use pip, you can do: - -:: - - pip install astropy --upgrade - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 350 developers have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to acknowledgment it by citing the appropriate -Astropy paper. For the most up-to-date suggestions, see :ref:`the -acknowledgment page `, but as of this release -the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -Special thanks to the coordinator for this release: Brigitta Sipocz. - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud, Tom Robitaille, Kelle Cruz, and Tom Aldcroft -| on behalf of The Astropy Collaboration diff --git a/announcements/release-4.1.rst b/announcements/release-4.1.rst deleted file mode 100644 index 0305b23e..00000000 --- a/announcements/release-4.1.rst +++ /dev/null @@ -1,110 +0,0 @@ -:orphan: - -Astropy v4.1 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v4.1 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. It is part of the Astropy Project, which aims to foster an -ecosystem of interoperable astronomy packages for Python. - -New and improved major functionality in this release includes: - -- A new SpectralCoord class for representing and transforming spectral - quantities -- Support for writing Dask arrays to FITS files -- Added True Equator Mean Equinox (TEME) frame for satellite two-line - ephemeris data -- Support for in-place setting of array-valued SkyCoord and frame - objects -- Change in the definition of equality comparison for coordinate classes -- Support use of SkyCoord in table vstack, dstack, and insert_row -- Support for table cross-match join with SkyCoord or N-d columns -- Support for custom attributes in Table subclasses -- Added a new Time subformat unix_tai -- Added support for the -TAB convention in FITS WCS -- Support for replacing submodels in CompoundModel -- Support for units on otherwise unitless models via the - Model.coerce_units method. -- Support for ASDF serialization of models - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/4.1.html - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v4.1 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the astropy channel: - -:: - - conda update -c astropy astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Nearly 400 developers have contributed code to Astropy so far, and you -can find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -The LTS (Long Term Support) version of Astropy at the time of v4.1's -release is v4.0 - this version will be maintained until next LTS release -(v5.0, scheduled for Fall 2021). Additionally, note that the Astropy 4.x -series only supports Python 3. Python 2 users can continue to use the -2.x series but it is no longer supported (as Python 2 itself is no -longer supported). For assistance converting Python 2 code to Python 3, -see the `Python 3 for scientists conversion -guide `__. - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to acknowledge it by citing the appropriate -Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `, but as of this -release the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud -| v4.1 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-4.3.rst b/announcements/release-4.3.rst deleted file mode 100644 index 92a29438..00000000 --- a/announcements/release-4.3.rst +++ /dev/null @@ -1,107 +0,0 @@ -:orphan: - -Astropy v4.3 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v4.3 release of the Astropy package, a -core Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -Astropy is a community-driven Python package intended to contain much of -the core functionality and common tools needed for astronomy and -astrophysics. It is part of the Astropy Project, which aims to foster an -ecosystem of interoperable astronomy packages for Python. - -New and improved major functionality in this release includes: - -- Transformations to AltAz are now much more precise (and faster) -- Improvements in making Astropy thread-safe -- Performance improvements to sigma clipping -- Changes in the Time and IERS leap second handling -- Support for multidimensional and object columns in ECSV -- Support for reading and writing tables to QDP format -- Append table to existing FITS file -- General masked class for Quantity and other ndarray subclasses -- Configuration file improvements -- Support for different solvers and bracket option in z_at_value - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     `https://docs.astropy.org/en/stable/whatsnew/4.3.html `__ - -Instructions for installing Astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -Note that this will yield astropy v4.3.1 instead of 4.3, which is -expected - a significant bug reported between the 4.3 release and this -announcement means that the correct version is indeed 4.3.1. - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v4.3.1 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 400 people have contributed code to Astropy so far, and you can -find out more about the team behind Astropy here: - -     https://www.astropy.org/team.html - -The LTS (Long Term Support) version of Astropy at the time of v4.3's -release is v4.0 - this version will be maintained until next LTS release -(v5.0, scheduled for Fall 2021). Additionally, note that the Astropy 4.x -series only supports Python 3. Python 2 users can continue to use the -2.x series but it is no longer supported (as Python 2 itself is no -longer supported). For assistance converting Python 2 code to Python 3, -see the `Python 3 for scientists conversion -guide `__. - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to acknowledge it by citing the appropriate -Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `, but as of this release -the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -We hope that you enjoy using Astropy as much as we enjoyed developing -it! - -| Erik Tollerud -| v4.3 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-5.0.rst b/announcements/release-5.0.rst deleted file mode 100644 index 2b20eae9..00000000 --- a/announcements/release-5.0.rst +++ /dev/null @@ -1,99 +0,0 @@ -:orphan: - -Astropy v5.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v5.0 release of astropy, a core Python -package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -New and improved major functionality in this release includes: - -- Support for reading, writing, and converting Cosmology objects -- A new cosmology units module -- New trigonometric and spline models -- Support for dask arrays in tables -- Support for registering array-like objects as mixin columns -- Support for reading and writing tables to Parquet format -- Support for reading and writing tables to MRT format -- Support for masked quantity columns, including masked FITS columns - with units -- Converting SkyCoord to QTable -- A new unified I/O architecture - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     `https://docs.astropy.org/en/stable/whatsnew/5.0.html `__ - -The astropy v5.0.x series now replaces v4.0.x as the long term support -release, and will be supported for two years. - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v5.0 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 400 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `, but as of -this release the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Thomas Robitaille -| v5.0 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-5.1.rst b/announcements/release-5.1.rst deleted file mode 100644 index c7bafd41..00000000 --- a/announcements/release-5.1.rst +++ /dev/null @@ -1,93 +0,0 @@ -:orphan: - -Astropy v5.1 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v5.1 release of astropy, a core Python -package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -New and improved major functionality in this release includes: - -- Updates to cosmology -- doppler_redshift() equivalency -- Specifying data types when reading ASCII tables -- Structured Columns -- New model fitters have been added -- Allow time conversions without predictive Earth rotation data (IERS-A) -- Uncertainty classes can be transformed into each other -- Schechter1D Model - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     `https://docs.astropy.org/en/stable/whatsnew/5.1.html `__ - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v5.1 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 400 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use Astropy directly for your work, or as a dependency to another -package, please remember to acknowledge it by citing the appropriate -Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `, but as of this release -the recommendation is: - -This research made use of Astropy, a community-developed core Python -package for Astronomy (`Astropy Collaboration, -2018 `__). - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Simon Conseil -| v5.1 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-5.2.rst b/announcements/release-5.2.rst deleted file mode 100644 index e4af0e52..00000000 --- a/announcements/release-5.2.rst +++ /dev/null @@ -1,91 +0,0 @@ -:orphan: - -Astropy v5.2 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v5.2 release of astropy, a core Python -package for Astronomy (and a v5.2.1 release which fixes compatibility -with Numpy 1.24): - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -New and improved major functionality in this release includes: - -- Quantity data types -- Updates to astropy.cosmology -- Topocentric ITRS Frame -- Enhanced Fixed Width ASCII Tables -- Accessing cloud-hosted FITS files -- Drawing the instrument beam and a physical scale bar on celestial - images -- Interior ticks and tick labels -- Support for tilde-prefixed paths -- CCDData PSF Image representation - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/5.2.html - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v5.2 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 430 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `. - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Thomas Robitaille -| v5.2 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-5.3.rst b/announcements/release-5.3.rst deleted file mode 100644 index 0b36f884..00000000 --- a/announcements/release-5.3.rst +++ /dev/null @@ -1,89 +0,0 @@ -:orphan: - -Astropy v5.3 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v5.3 release of astropy, a core Python -package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -New and improved major functionality in this release includes: - -- New flat astropy.cosmology classes -- New union operators for Table -- Efficient data access for compressed FITS files -- Added support for NOCOMPRESS for compressed FITS files -- New fraction option for representing units as strings -- Change in order in unit string representations -- Support for collapse operations on arbitrary axes in nddata -- Refresh cached observatory site registry for EarthLocation methods -- New LombScargleMultiband class for multiband datasets - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/5.3.html - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v5.3 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 490 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `. - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Simon Conseil -| v5.3 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-6.0.rst b/announcements/release-6.0.rst deleted file mode 100644 index e1c2799a..00000000 --- a/announcements/release-6.0.rst +++ /dev/null @@ -1,92 +0,0 @@ -:orphan: - -Astropy v6.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v6.0 release of astropy, a core Python -package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -New and improved major functionality in this release includes: - -- Define Geodetic and Bodycentric Representations via their geometric - parameters -- Body-fixed planetary reference frames and their WCS description -- Support for Numpy broadcasting over frame data and attributes -- Updates to cosmology -- Updates to how IERS data are handled -- Masked Time values now use Masked arrays internally -- Reading and writing VO model annotations -- TimeDelta string format “quantity_str” -- VOTable now supports PARQUET serialization -- Faster FITS file decompression -- New GeneralSersic2D model - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/6.0.html - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip/vanilla Python, you can do: - -:: - - pip install astropy --upgrade - -If you make use of the `Anaconda Python -Distribution `__, soon you will be -able update to Astropy v6.0 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 490 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `. - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Simon Conseil -| v6.0 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-6.1.rst b/announcements/release-6.1.rst deleted file mode 100644 index 4726b394..00000000 --- a/announcements/release-6.1.rst +++ /dev/null @@ -1,88 +0,0 @@ -:orphan: - -Astropy v6.1 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v6.1 release of astropy, a core Python -package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -Notable changes in this release include: - -- Warnings are now emitted when carrying out order-dependent angular - separation calculations -- Cosmology classes are now Python dataclasses -- Compatibility with the upcoming major Numpy 2.0 release -- Changes to the meaning of the copy= argument when using Numpy 2.0 -- io.ascii now uses 64-bit integers by default for integer numerical - data on all platforms -- Minimum supported version of Python updated to 3.10 - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/6.1.html - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip to install packages, you can do: - -:: - - pip install astropy --upgrade - -If you make use of conda (such as through the `Anaconda Python -Distribution `__), you should soon -be able update to Astropy v6.1 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 490 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `. - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Thomas Robitaille -| v6.1 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-7.0.rst b/announcements/release-7.0.rst deleted file mode 100644 index b374af50..00000000 --- a/announcements/release-7.0.rst +++ /dev/null @@ -1,108 +0,0 @@ -:orphan: - -Astropy v7.0 Released! -====================== - -Dear colleagues, - -We are very happy to announce the v7.0 release of astropy, a core Python -package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -Notable changes in this release include: - -- Full MaskedQuantity Support in QTable -- Coordinate frames can now be stored in tables -- Table show_in_notebook is back with ipydatagrid -- Ordering of table columns constructed from rows -- Table.pformat is now independent of terminal dimensions -- Quantity.to_string supports formatter for formatting -- NumPy constructor functions with a like argument are now supported - with Quantity -- Change default type for meta attribute to dict and update ECSV writer -- Improve the Contributor Documentation -- Typing in astropy.stats -- Converting units on dask and other array-like objects -- Performance improvements in astropy.modeling -- Fitting models in parallel with N-dimensional data -- RGB image visualization enhancements -- New Lorentz2D model -- Faster guessing of formats in astropy.io.ascii -- Support VOTable version 1.5 -- New \`parquet.votable\` format is available to read/write a Table from - Parquet files with VOTable metadata included -- New SimpleNorm class -- New SigmaClippedStats class -- Automatic placement of axis and tick labels for WCSAxes -- Support for masks in coordinates -- Minimum supported version of Python updated to 3.11 -- The astropy conda-forge package now has all the optional dependencies, - a new astropy-base package is provided with only required - dependencies. - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/7.0.html - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip to install packages, you can do: - -:: - - pip install astropy --upgrade - -If you make use of conda (such as through the `Anaconda Python -Distribution `__), you should soon -be able update to Astropy v7.0 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 540 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `. - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Simon Conseil -| v7.0 Release Coordinator -| on behalf of The Astropy Project diff --git a/announcements/release-7.2.rst b/announcements/release-7.2.rst deleted file mode 100644 index dbb21c77..00000000 --- a/announcements/release-7.2.rst +++ /dev/null @@ -1,86 +0,0 @@ -:orphan: - -Astropy v7.2.0 Released! -======================== - -Dear colleagues, - -We are very happy to announce the v7.2.0 release of astropy, a core -Python package for Astronomy: - -.. rst-class:: announce-logo -.. container:: - - .. image:: /_static/img/astropy_logo_notext.png - :width: 100px - - https://www.astropy.org - -The astropy core package is a community-driven Python package intended -to contain much of the core functionality and common tools needed for -astronomy and astrophysics. It is part of the Astropy Project, which -aims to foster an ecosystem of interoperable astronomy packages for -Python. - -Notable changes in this release include: - -- A faster ECSV table reader -- Generic DataFrame conversion methods -- Table index improvements and deprecation -- Cosmology traits -- An option to preserve units in FITS-WCS -- Concatenation and stacking of coordinates and time classes - -In addition, hundreds of smaller improvements and fixes have been made. -An overview of the changes is provided at: - -     https://docs.astropy.org/en/stable/whatsnew/7.2.html - -Instructions for installing astropy are provided on our -`website `__, and extensive documentation can be -found at: - -     https://docs.astropy.org - -If you usually use pip to install packages, you can do: - -:: - - pip install astropy --upgrade - -If you make use of conda (such as through the `Anaconda Python -Distribution `__), you should soon -be able update to Astropy v7.2.0 with: - -:: - - conda update astropy - -Or if you cannot wait for Anaconda to update their default version, you -can use the conda-forge channel: - -:: - - conda update -c conda-forge astropy - -Please report any issues, or request new features via our GitHub -repository: - -     https://github.com/astropy/astropy/issues - -Over 580 people have contributed code to the core astropy package so -far, and you can find out more about the team here: - -     https://www.astropy.org/team.html - -If you use astropy directly for your work, or as a dependency to -another package, please remember to acknowledge it by citing the -appropriate Astropy paper. For the most up-to-date suggestions, see -:ref:`the acknowledgment page `. - -We hope that you enjoy using astropy as much as we enjoyed developing -it! - -| Thomas Robitaille -| v7.2 Release Coordinator -| on behalf of The Astropy Project diff --git a/code_of_conduct.rst b/code_of_conduct.rst deleted file mode 100644 index 08c0ff01..00000000 --- a/code_of_conduct.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. _astropy-org-coc: - -Astropy Community Code of Conduct -================================= - -Since November 2025, the Astropy Project has adopted the NumFOCUS Code of Conduct, which is summarized below. For the previous version of the Astropy Code of Conduct, click :ref:`here `. - - -The Short Version ------------------ - -Be kind to others. Do not insult or put down others. -Behave professionally. Remember that harassment and sexist, racist, or exclusionary jokes are not appropriate for Astropy. - -Astropy is dedicated to providing a harassment-free community for everyone, regardless of gender, sexual orientation, gender identity and expression, disability, physical appearance, body -size, race, or religion. -We do not tolerate harassment of community members in any form. - -All communication should be appropriate for a professional audience including people of many different backgrounds. -Sexual language and imagery is not appropriate. - -Thank you for helping make this a welcoming, friendly community for all. - -The Long Version ----------------- - -You can find the long version of the Code of Conduct on the `NumFOCUS website `__. - -How To Report -------------- - -If you feel that the Code of Conduct has been violated, you can submit a report via the `NumFOCUS Code of Conduct Reporting Form `__. - -Who Will Receive Your Report ----------------------------- - -Your report will be received and handled by NumFOCUS Code of Conduct Working Group; trained, and experienced contributors with diverse backgrounds. -The group is making decisions independently from the project, PyData, NumFOCUS, or any other organization. - -The Working Group will work with the Astropy Project's Ombudsperson to resolve an incident: The NumFOCUS Code of Conduct Working group will review the incident, and provide recommendations on how to handle this or what consequences or sanction might be appropriate. -As per `Astropy's governance charter `__, the Astropy Ombudsperson along with the Coordination Committee will receive those recommendations and perform any actions necessary to address the concern. - -Examples --------- - -To make this Code of Conduct more concrete, we provide here some hypothetical examples of how a Code of Conduct issue might arise that may be particular to our community: - -- A member of the Astropy community might express a preference on - an online forum for a specific tool or programming language - (e.g., Python) over another language. If this preference is - expressed as a personal preference or with reference to - particular technical merits of that language vs. others, there - is no violation of the Code of Conduct. However, if that member - instead expresses this preference by way of insult to those who - use another language, or via violent imagery directed at those - other languages or its users, that would be an act of "tool - shaming" and be a violation of the Code of Conduct. -- If a member of the community knowingly uses a software tool or - astronomical dataset in a public package or academic publication - without acknowledging or citing the tool in a reasonable way - requested by the upstream tool, this is a violation of the Code - of Conduct. If the member makes a reasonable effort to find an - acknowledgement and one is not available, this would not be a - Code of Conduct violation (although it might or might not - represent a violation of copyright law depending on the details - of the situation and adopted license). -- If an Astropy maintainer were to post a message in a public - forum that is insulting an astronomy research community member's - skills as a programmer, this would be a violation of the Code of - Conduct, as the researcher is also a member of our community. - Conversely, if a researcher insultingly rejected a maintainer's - suggestion because the maintainer is not a scientist, this would - be a violation by the researcher. If that same thing were stated - in a meeting with other Astropy maintainers, it may or may not - represent a code of conduct violation, depending on whether the - intent is to insult vs. pointing out a skill lack in the - community in a productive manner. diff --git a/code_of_conduct_old_astropy.rst b/code_of_conduct_old_astropy.rst deleted file mode 100644 index 3a17cbef..00000000 --- a/code_of_conduct_old_astropy.rst +++ /dev/null @@ -1,72 +0,0 @@ -:orphan: - -.. _astropy-org-coc-old: - -Astropy Community Code of Conduct (prior to November 2025) -========================================================== - -**Astropy has switched to using NumFOCUS code of conduct, please see the** :ref:`astropy-org-coc` **for the current version.** - -The community of participants in open source Astronomy projects is -made up of members from around the globe with a diverse set of -skills, personalities, and experiences. It is through these -differences that our community experiences success and continued -growth. We expect everyone in our community to follow these -guidelines when interacting with others both inside and outside of -our community. Our goal is to keep ours a positive, inclusive, -successful, and growing community. - -As members of the community, - -- We pledge to treat all people with respect and provide a - harassment- and bullying-free environment, regardless of sex, - sexual orientation and/or gender identity, disability, physical - appearance, body size, race, nationality, ethnicity, and - religion. In particular, sexual language and imagery, sexist, - racist, or otherwise exclusionary jokes are not appropriate. -- We pledge to respect the work of others by recognizing - acknowledgment/citation requests of original authors. As - authors, we pledge to be explicit about how we want our own work - to be cited or acknowledged. -- We pledge to welcome those interested in joining the community, - and realize that including people with a variety of opinions and - backgrounds will only serve to enrich our community. In - particular, discussions relating to pros/cons of various - technologies, programming languages, and so on are welcome, but - these should be done with respect, taking proactive measure to - ensure that all participants are heard and feel confident that - they can freely express their opinions. -- We pledge to welcome questions and answer them respectfully, - paying particular attention to those new to the community. We - pledge to provide respectful criticisms and feedback in forums, - especially in discussion threads resulting from code - contributions. -- We pledge to be conscientious of the perceptions of the wider - community and to respond to criticism respectfully. We will - strive to model behaviors that encourage productive debate and - disagreement, both within our community and where we are - criticized. We will treat those outside our community with the - same respect as people within our community. -- We pledge to help the entire community follow the code of - conduct, and to not remain silent when we see violations of the - code of conduct. We will take action when members of our - community violate this code such as contacting - confidential@astropy.org (all emails sent to this address will - be treated with the strictest confidence) or talking privately - with the person. - -This code of conduct applies to all community situations online -and offline, including mailing lists, forums, social media, -conferences, meetings, associated social events, and one-to-one -interactions. - -Any related activity or project organized by members of the -Astropy community, including affiliated packages, are welcome to -have their own codes of conduct, but agree to also abide by the -present code of conduct. - -Parts of this code of conduct have been adapted from the PSF code -of conduct. - -The Astropy Community Code of Conduct is licensed under a `Creative Commons Attribution 4.0 International License `__. -We encourage other communities related to ours to use or adapt this code as they see fit. diff --git a/conf.py b/conf.py deleted file mode 100644 index 90304e7e..00000000 --- a/conf.py +++ /dev/null @@ -1,102 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -import sys -from pathlib import Path - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -project = 'astropy.org' -copyright = '2026, Astropy Community' -author = 'Astropy Community' - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -intersphinx_mapping = { - "python": ("https://docs.python.org/3/", - (None, "http://data.astropy.org/intersphinx/python3.inv")), - "astropy": ("https://docs.astropy.org/en/stable", None), - "astropy-dev": ("https://docs.astropy.org/en/latest", None), -} - -sys.path.append(Path("exts").absolute().as_posix()) -extensions = [ - "sphinx.ext.intersphinx", - "myst_parser", - "sphinx_design", - "sphinx_copybutton", - "rawfiles", -] - -templates_path = ['_templates'] -exclude_patterns = [ - '_build', - 'Thumbs.db', - '.DS_Store', - 'LICENSE.rst', - 'README.md', - 'CONTRIBUTING.md', - '.tox/**', -] - -rawfiles = ["annoucement_banner.html", "roles.json", "affiliated/registry.json"] - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = 'astropy-unified' - -html_static_path = ['_static'] - -html_theme_options = { - "show_prev_next": False, - "sst_is_root": True, -} - -html_sidebars = { - "**": [], -} - -html_css_files = [ - "css/astropy-org.css" -] - -html_js_files = [ - "js/functions.js", - "https://code.jquery.com/jquery-3.7.1.min.js", -] - -html_title = "" -html_favicon = "_static/img/favicon.ico" - -################################################################################ -# Other Trickery -################################################################################ -# We want to get the credits.rst file from astropy core, but not keep it in the repo - -from urllib.request import urlretrieve - -urlretrieve( - "https://raw.githubusercontent.com/astropy/astropy/refs/heads/main/docs/credits.rst", - filename="credits.rst", -) - -# Linkcheck -linkcheck_ignore = [ - # These sites blocked CI - r"https://doi\.org/\d+", - "http://joinslack.astropy.org", - "https://astropy.slack.com", - "https://numfocus.medium.com/", - "https://ui.adsabs.harvard.edu/", - "https://www.astrobetter.com/", - # This page has cloudflare captcha on it - "https://aas.org/press/astropy-collaboration-receive-2025-berkeley-prize", -] -linkcheck_anchors = False -linkcheck_timeout = 20 -linkcheck_workers = 10 diff --git a/contribute.rst b/contribute.rst deleted file mode 100644 index 7360b604..00000000 --- a/contribute.rst +++ /dev/null @@ -1,123 +0,0 @@ -.. _astropy-org-contribute: - -Contribute to Astropy -===================== - -The Astropy project is made both by and for its users, so we accept contributions of many kinds. -We always welcome contributors who will abide by the :ref:`astropy-org-coc`. - -.. _astropy-org-contribute-feedback: - -Contribute feedback -------------------- - -There are several ways in which you can give feedback. - -- If you would like to give feedback and participate in discussions, we encourage you to join the `astropy mailing list `__ and post there. - This is the easiest way to have a discussion with both developers and other users. -- Feature requests from the community are welcome and encouraged. -- If you have feedback you would prefer to keep private, you can e-mail feedback@astropy.org. - This address points to a private mailing list that includes the astropy core developers. - If you would like a reply (e.g., an acknowledgement of your comment), please request it. -- For the extremely impatient, astropy developers often can be found in the `Astropy Slack team `__ (get an account `here `__). - Slack is basically a live web chat. -- If you would like to participate in discussions about how the Project is run, please join the `Developer Email List [astropy-dev] `__. - -.. _astropy-org-contribute-issues: - -Reporting Issues ----------------- - -If you have found a bug in Astropy please report it. -The preferred way is to create a new issue on the Astropy `GitHub issue page `__; that requires `creating a free account `__ on GitHub if you do not have one. - -If you prefer not to create a GitHub account, please report the issue to either the `astropy mailing list `__, the `astropy-dev mailing list `__ or sending a private email to the astropy core developers at feedback@astropy.org - -Please include an example that demonstrates the issue that will allow the developers to reproduce and fix the problem. -You may be asked to also provide information about your operating system and a full Python stack trace; the Astropy developers will walk you through obtaining a stack trace if it is necessary. - -.. _astropy-org-contribute-code: - -Contribute code or documentation --------------------------------- - -If you are interested in contributing fixes, code or documentation to Astropy (whether the core package or affiliated packages), you should join the `astropy-dev `__ mailing list/forum. -For the core, start looking at any related `issues `__. -In particular, we have introduced a labeling system used across most Astropy-related packages which will allow you to find good starting issues. -Good labels to start with are `Good-first-issue `__ and `Package-novice `__ which means you don't need much prior experience of the package. -You can use the following links to find all the issues labeled this way and also labeled by how much work they involve: - -- `Effort-low `__: issues that should take a few hours at most -- `Effort-medium `__: issues that should take a few days at most -- `Effort-high `__: longer term issues - -You may also want to familiarize yourself with the :external+astropy-dev:ref:`developer documentation `, particularly the :external+astropy-dev:ref:`coding ` and :external+astropy-dev:ref:`documentation ` guidelines, and our `AI usage `__ policy. - - -Once you have a change to propose, if it's a simple fix to just a single file, you can even just browse to the appropriate file and use the "edit" button on github. -If it's a more complex change, we suggest you follow the :external+astropy-dev:ref:`developer install instructions `, and use that with `Astropy's github page `__ to issue a pull request with your changes. -If you aren't familiar with github, we suggest you looking over our :external+astropy-dev:ref:`workflow documentation `. -Once your code is accepted, you are officially an Astropy contributor and eligible to be included on the author list of future publications. - -If you want to propose a larger change to Astropy, there's a procedure for that: `Astropy Proposals for Enhancement (APEs) `__ (modeled after Python's `PEPs `__). -The sort of changes that APEs are intended for include plans for new sub-packages, wide-ranging code re-organizations, a new procedure needing review by a lot of the Astropy community, or an informational document on some decision for Astropy that you want remembered. -For more background on APEs, check out `APE #1 `__ and the `APE repository's README `__. -There is also a `wiki page on Astropy's github repository `__ that has an overview of the existing APEs. - -.. _astropy-org-contribute-role: - -Taking on a formal project role -------------------------------- - -If you are interested in a higher level of contribution to the project, you can consider taking on one of the formal project roles as listed in the :ref:`astropy-org-team` page. - -In order to be nominated for a named Astropy role, it is typical that a person will have been actively involved in the project for a considerable amount of time (at least a year and often longer) and have made substantial contributions. -They will have shown a sustained commitment to Astropy by participating actively already in activities related to the role. -This could involve submitting pull requests and participating in reviews, or discussions in other channels such as mailing lists or Slack, or other contributions as defined by a particular role. -Finally, they need to express a desire to maintain this involvement going forward and accept the responsibility of having a role. -For example, being a core sub-package maintainer involves interacting with users and responding to bug reports in a timely manner. -If you are interested in taking on such a role, you can volunteer either on `astropy-dev `__, by talking to a holder of the role you are interested in, or a coordination committee member. - -.. _astropy-org-contribute-affiliated: - -Develop an affiliated package ------------------------------ - -Whether you have an idea for a new Astronomy package, or already have a package that you want to integrate with the Astropy project, you can develop an affiliated package! You'll want to join the `astropy-dev `__ list so you can notify other developers of your intent to develop an affiliated package, and the `astropy-affiliated-maintainers `__ mailing list to be kept informed of any discussions related to setting up affiliated packages. -Then you can check out the section on :ref:`astropy-org-affiliated-instructions` to get started. - -.. _astropy-org-contribute-financially: - -Contribute Financially ----------------------- - -Donations to Astropy are managed by `NumFOCUS `__. -For donors in the United States, your gift is tax-deductible to the extent provided by law. -As with any donation, you should consult with your tax adviser about your particular tax situation. -If you would like to donate to astropy, please see the NumFOCUS contribution page for the Astropy Project: - -.. button-link:: https://numfocus.org/donate-to-astropy - - Donate to Astropy - -.. _astropy-org-contribute-justify: - -For academics: How to justify your contribution ------------------------------------------------ - -While in some more technical areas, contributing code is recognized as a goal in and of itself, some academic fields have not yet developed a clear understanding of the role of code development relative to other more traditional contributions like publication. -This section aims to provide suggestions to academics for how you might justify contributions to the Astropy project if you are in a field or institution that needs convincing of the value of such contributions. - -Contributing to the Astropy Project as a volunteer directly benefits the astronomical research community in tangible ways. -Nevertheless, people employed in academic departments may be asked to justify their time and efforts in terms of direct benefit to their own department or organization. -In this case it is worth highlighting the well-established role of community service in academia, including: - -- Referring journal papers -- Reviewing proposals for funding or for an observatory time allocation committee -- Serving on a conference science organizing committee -- Serving on an external review committee such as the NASA Senior Review - -These volunteer duties typically bring no direct benefit to the home department of a researcher, yet they are widely accepted as necessary to the functioning of global research astronomy. -We should now add the following to the above list of community service duties: - -- Contribute to open source software projects that benefit astronomical research diff --git a/contributing.html b/contributing.html new file mode 100644 index 00000000..f615bd5b --- /dev/null +++ b/contributing.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + Contributing to Astropy — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        +

        Contributing to Astropy

        +

        There are many different ways you can contribute to the Astropy project!

        +
        +

        Report issues

        +

        Even if you don’t have time to contribute code or documentation, please make +sure you report any issues with the package, the documentation, or this +website, to the Astropy issue tracker!

        +
        +
        +

        Contribute code

        +

        If you are interested in contributing fixes, code or documentation to Astropy +(whether the core package or affiliated packages), you can join the +astropy-dev mailing list, and head over to the documentation pages on +contributing to Astropy. You can either send us a patch, or (preferably) +work on a fork of Astropy and submit the changes via a pull request.

        +
        +
        +

        Develop an affiliated package

        +

        Whether you have an idea for a new Astronomy package, or already have a +package that you want to integrate with the Astropy project, you can develop +an affiliated package! After joining the astropy-dev list and notifying +other developers of your intent to develop an affiliated package, you can head +over here for instructions on +getting started! We can even create a repository for your affiliated package +in the astropy organization on GitHub!

        +
        +
        +

        Community

        +

        Astropy welcomes anyone who wants to contribute to the project. We follow the +Python Software Foundation Code of Conduct.

        +
        +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/docs.html b/docs.html new file mode 100644 index 00000000..d2b585c3 --- /dev/null +++ b/docs.html @@ -0,0 +1,179 @@ + + + + + + + + + + + + Astropy Documentation — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        +

        Astropy Documentation

        +

        Below are links to the documentation for all versions of Astropy.

        + +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/exts/rawfiles.py b/exts/rawfiles.py deleted file mode 100644 index 715b085d..00000000 --- a/exts/rawfiles.py +++ /dev/null @@ -1,23 +0,0 @@ -import shutil -from pathlib import Path - - -def on_html_collect_pages(app): - for f in app.builder.config.rawfiles: - src = str(Path(app.srcdir) / Path(f)) - dst = str(Path(app.builder.outdir) / Path(f)) - if Path(src).is_file(): - shutil.copy(src, dst) - else: - shutil.copytree(src, dst) - return () - - -def setup(app) -> None: - app.add_config_value("rawfiles", [], "html") - app.connect("html-collect-pages", on_html_collect_pages) - - return { - "parallel_read_safe": True, - "parallel_write_safe": True, - } diff --git a/feedback/index.html b/feedback/index.html new file mode 100644 index 00000000..e72fecae --- /dev/null +++ b/feedback/index.html @@ -0,0 +1,185 @@ + + + + + + + + + + + + Astropy Feedback (and getting help) — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        +

        Astropy Feedback (and getting help)

        +

        Astropy is a package for the community, and the developers depend on the +feedback from users to understand how we can improve Astropy.

        +

        There are several ways in which you can give us feedback:

        +
          +
        • If you would like to give us feedback and participate in discussions, we +encourage you to join the astropy mailing list and post +there. This should be the preferred way if you are interested in having a +discussion with the developers and other users.
        • +
        • If you have feedback you would prefer to keep private, you can e-mail +astropy-feedback@googlegroups.com. This address points to a private mailing list that +includes the astropy core developers. If you would like a reply (e.g., an +acknowledgement of your comment), please request it.
        • +
        • For the extremely impatient, astropy developers often hang out in the +#astropy freenode.net IRC channel, which can be accessed for free without +registration from any IRC client (e.g., http://webchat.freenode.net?channels=astropy).
        • +
        • We also welcome code posts as issues (or pull requests) on github and +as posts to the astropy-dev google group.
        • +
        +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..230d72a2 --- /dev/null +++ b/genindex.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + Index — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + + +

        Index

        + +
        + +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/help.rst b/help.rst deleted file mode 100644 index 00cc0370..00000000 --- a/help.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. _astropy-org-help: - -Getting Help with Astropy -========================= - -The best way to get help is usually by asking questions to the -Astropy user and development community. There are a number of -active forums and you are welcome to use whichever one you are the -most comfortable with. - -- `Open Astronomy - Discourse `__ - - This forum allows questions to be tagged by topic, is searchable - on Google, and displays code snippets well. Please head over and - ask (and answer) questions. -- `Astropy Slack workspace `__ (`get an - account `__) - This forum is - primarily focused on developing and maintaining the Astropy - project, but the ``#community-help`` channel is a good place for - users to seek help from the Astropy community. -- `Astropy Users Email List - [astropy@python.org] `__ - - Post questions or start discussions about anything related to - Python programming applied to astronomy. -- `Astropy Developers Email List - [astropy-dev@googlegroups.com] `__ - - Start discussions and ask questions about changing or adding - functionality to the ``astropy`` package. This is also the place - where significant announcements for contributors/developers are - usually made. If you would like to participate in discussion - about how the Project is run, please join this list. diff --git a/history.rst b/history.rst deleted file mode 100644 index 2b4c4741..00000000 --- a/history.rst +++ /dev/null @@ -1,168 +0,0 @@ -.. _astropy-org-history: - -A brief history of the Astropy Project -====================================== - -Some of the earliest use of Python in astronomy was at the Space -Telescope Science Institute (STScI) with their release of PyRAF -around 2000. That release helped raise awareness of Python as a -scripting language, leading to its use at more institutions. STScI -was also active in the development of Python tools for science, -including a pre-cursor to numpy and early versions of matplotlib. -By the early 2010s there were multiple independent efforts by -institutions and individuals to use Python for data analysis. - -The initial trigger for Astropy was a `conversation in 2011 on the -astropy mailing list (which pre-dated The Astropy Project by over -a -decade) `__ -on the topic of how many “general astronomy” packages were being -written in Python. This discussion thread led to the creation of a -`short-lived -wiki `__ -where over 100 participants voted in favor of a shared package to -combine the efforts of these different developers into a single -space. This demonstrated broad interest in such an effort. With -that motivation and charge in place, this same wiki was used to -organize a planning meeting for this effort. - -That planning meeting, in Fall 2011, was the formal beginning of -the Astropy Project and was held at the `Harvard Center for -Astrophysics `__. -The `list of -attendees `__ -at that meeting underscores what has been essential to the launch, -growth, and continued development of Astropy: it was a mix of -graduate students, postdocs, scientists, and professional software -developers. The attendees with permanent positions were willing to -contribute both code and their time to the project; Space -Telescope Science Institute (STScI) additionally contributed -substantial staff time to the project. The early-career attendees -had either already devoted substantial time to code development, -would do so over the ensuing years, or both. - -The foundation of Astropy’s subsequent success was the combination -of institutional resources, a deliberate effort to include and -foster the growth of a broad community of contributors, the rapid -growth of GitHub and the surrounding ecosystem of open source -development tools, and a willingness of early-career professionals -to contribute code to an open community project. The initial -release for users of the core astropy package, version 0.2 on -February 19, 2013, was less than 18 months after the CfA meeting -and already contained many of the core subpackages that are part -of the package today. That was possible only because some of the -code already existed in a form that could be adapted to Astropy. -Major pieces had been written by staff at STScI that were -contributed by the Institute to the project. There were also large -contributions from early participants who were graduate students -and postdocs. - -By the time of the first stable release in 2013, the number of -contributors to the code base was over 20, including several -people who were not involved in the initial meeting. Though most -of the lines of code at that point had been written by a handful -of people, the effort they put into welcoming and supporting new -contributors was just as important and is not easily captured in a -single number. The project made an effort early on to provide -prompt, constructive, and welcoming feedback to new contributors. -The promptness was a key factor in encouraging early contributors -and was possible in part because STScI devoted substantial staff -time to the project with the explicit intent of growing the -community of contributors. - -One of the Project’s first efforts to formally recruit early -career scientists was participation in `Google’s Summer of Code -(GSoC) -program `__. -That program provides participants with a stipend in exchange for -doing extensive work on open source projects during the northern -hemisphere summer. It was the first of several efforts to grow the -community of contributors. These efforts yielded a handful of very -active long-term contributors to the project whose cumulative work -goes well beyond the initial code contributions made by -participants. - -Another critical element in the growth of the Astropy Project was -the Python in Astronomy conference series. The first Python in -Astronomy conference was held in 2015. The hope was that the -conference would encourage the development of Python packages in -astronomy outside of the astropy core, foster the adoption of -Astropy in the broader community, and serve as an introduction to -contributing to open source software. Though it was not an Astropy -conference, many of the astropy core developers were attending. -For example, the initial Code of Conduct for the Astropy Project -was written at the conference and the “Python in Astronomy” -Facebook group was started, among `other -activities `__. - -The intent from the first coordination meeting in 2011 was to put -some functionality into more specialized packages, called -affiliated packages, that were developed independent of the core -project but followed the same coding, testing and documentation -conventions and often used the same continuous integration (CI) -infrastructure. The first affiliated packages were created in -2011. That model has been quite successful: as of early 2022 there -are almost 50 affiliated packages (pre-APE 22). The use of common -conventions across the packages has eased the burden of -maintaining those packages as the project ecosystem grows. - -Deliberate community development has been essential to the success -of the Project and has included several aspects. Astropy was an -early and enthusiastic adopter of an explicit Code of Conduct. -This served to formalize the welcoming atmosphere established -early in the project. Community presence has included setting up -social media spaces for Python in Astronomy, workshops at AAS -meetings, work on learning materials for Astropy and development -of the project’s web presence. The Facebook group “Python in -Astronomy’’ has been wildly successful with over 6400 members and -nearly daily postings. This success is in part because of careful -moderation by members of the project early in the list's history -to keep conversations on topic, though community moderators have -taken on more of those responsibilities as time has gone on. -Workshops at AAS meetings have helped several hundred astronomers -adopt Python and astropy as part of their workflow. - -The day-to-day effort of managing the Astropy codebase is -unglamorous but critical. Tasks include promptly labeling and -triaging new issues, responding to new pull requests, and watching -for and fixing changes that break part of the infrastructure. -There have been times when that infrastructure has shifted very -rapidly, such as when Travis-CI stopped hosting open source -packages in Nov 2020. -Transitioning the entire ecosystem to a new infrastructure -required substantial effort by a number of people, though it was -facilitated primarily by a single individual. Indeed, much of this -day-to-day work has been done by a handful of people, many of whom -are in permanent positions at STScI and a few other institutions. - -The patterns at the beginning of the project have persisted -throughout: it is the combined effort of individuals and -institutions that includes scientists and software developers. It -includes early-career individuals and those in permanent -positions. - -There are a few important changes to the project since its -inception. One is external funding from the Moore Foundation in -2019 and from NASA in 2022, which provides monetary support for -contributors at all career stages in addition to funding for -Project needs. Another is the establishment of a formal governance -structure (`APE 0 adopted in -2021 `__) -that is open and responsive to community needs. - -Another development that was perhaps not envisioned at the start -of the project is some contributors choosing to make Astropy an -essential part of their career. Their involvement since the -beginning of the project has provided continuity to the project -and represents taking a risk that potential future employers may -not scientifically value this software work, regardless of its -impact on astronomy as a whole. - -As of summer 2022, the success of the Project hinged on a number -of factors, including the willingness of institutions and -individuals to contribute extensive prior work to a community -project, a deliberate effort to foster new contributors, and an -effort to create a welcoming community. It is difficult to see how -the project could have come so far absent any of these factors or -absent any one of the groups of contributors. Institutional -support and individual contributions has been inextricably linked. diff --git a/index.html b/index.html new file mode 100644 index 00000000..f95ac81e --- /dev/null +++ b/index.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        _images/astropy_banner_96.png +

        The Astropy Project is a community effort to develop a single core package for +Astronomy in Python and foster interoperability between Python astronomy packages. +Development is actively ongoing, with major packages such as PyFITS, +PyWCS, vo, and asciitable already merged in, and many other components +are under development. For more details, on the plan for the Astropy +project, you can read the original vision, or the +documentation overview.

        +

        The current stable version is Astropy 0.3. (Changelog)

        +

        Stay updated by following @astropy on Twitter, and sign up for the astropy mailing list, where you can ask python astronomy +questions of all sorts! If you want to get involved in Astropy development +efforts, or other more technical discussions of Astropy, join the +astropy-dev list.

        +

        Please note: If you use Astropy for work/research presented in a +publication, please read Acknowledging the use of Astropy.

        +
        +

        How to start working with Astropy

        +

        Take a look at the Getting Started +guide in the documentation for an initial look at how to work with Astropy.

        +
        +
        +

        Documentation

        +

        The documentation for the astropy core package is available at the +websites listed below. The first is for the most recent released +version. The second is for a version of the documentation that is +automatically updated any time a change is made to the +astropy source code repository.

        + +
        +
        +

        Installing

        +

        Detailed up-to-date installation instructions are provided in the latest documentation, but +we have included a simplified version here.

        +

        Astropy requires Python 2.6, 2.7, 3.1, 3.2, or 3.3, and Numpy 1.5 or later. The +best way to install astropy is to use pip:

        +
        pip install astropy
        +
        +

        Or alternatively, you can download the source from the current version (Astropy 0.3), +and install the source code in that archive using:

        +
        python setup.py install
        +
        +

        You can check that astropy is correctly installed by starting up python or ipython, and importing astropy:

        +
        >>> import astropy
        +
        +
        +

        If you do not get any errors, the installation was successful!

        +
        +

        Note

        +

        If you want to install the latest developer version of Astropy, use:

        +
        git clone https://github.com/astropy/astropy.git
        +cd astropy
        +python setup.py install
        +
        +

        Be aware that the developer build requires Cython (in addition to Numpy).

        +
        +
        +
        +

        Getting help

        +

        If you want to discuss issues with other Astropy users, you can sign up +to the astropy mailing list. Alternatively, the astropy-dev list +is where you should go to discuss more technical aspects of Astropy.

        +
        +
        +

        Reporting issues

        +

        If you have come across something that you believe is a bug, please open a +ticket in the Astropy issue tracker, and we will look into it promptly!

        +
        +
        +

        Acknowledging the use of Astropy

        +
        +

        Publications

        +

        If you use Astropy for work/research presented in a publication (whether +directly, or as a dependency to another package), we would be grateful if you +could include the following acknowledgment:

        +

        This research made use of Astropy, a community-developed core Python package +for Astronomy (Astropy Collaboration, 2013).

        +

        where (Astropy Collaboration, 2013) is a citation to this paper (ADS - BibTeX).

        +

        If you wish, you can also include a link to http://www.astropy.org (if +the journal allows this) in addition to the above text.

        +
        +
        +

        Presentations

        +

        If you are giving a presentation or talk featuring work/research that makes use of +Astropy and would like to acknowledge Astropy, we suggest using this logo on your title slide:

        +_images/astropy_powered.png +

        The logo is also available with white text, +or the SVG originals can be obtained at the astropy-logo github repository.

        +
        +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/index.rst b/index.rst deleted file mode 100644 index 84b5e5a4..00000000 --- a/index.rst +++ /dev/null @@ -1,265 +0,0 @@ -.. _astropy-org-index: - -Astropy -======= - -.. toctree:: - :maxdepth: 0 - :hidden: - - about - acknowledging - affiliated/index - code_of_conduct - contribute - help - history - team - -.. raw:: html - -
        -
        -
        - -.. image:: _static/img/astropy_project_logo.svg - :name: logo - :class: dark-light sunpy-logo - :alt: Astropy Logo - -.. raw:: html -
        - -
        - -The Astropy Project is a community effort to develop a `common core package `__ for Astronomy in Python and foster an ecosystem of :ref:`astropy-org-affiliated`. -The Astropy community is committed to supporting the :ref:`astropy-org-coc`. - -.. rst-class:: acknowledge - - Please remember to :ref:`acknowledge and cite ` the use of Astropy! - -.. raw:: html - -
        -
        -
        - -.. container:: text-center mx-auto - - .. rst-class:: whatsnew - - What's new in `Astropy 8.0 `__ - - .. raw:: html - -

        - Latest stable release: -

        - -Install Astropy ---------------- - -There are a number of ways of installing the latest release of the astropy core package. If you normally use ``pip`` to install Python packages, you can do: - -.. code-block:: - - pip install astropy[recommended] --upgrade - -The astropy core package is also available in a number of other package managers, so be sure to check your preferred one! -Please see the :external+astropy-dev:ref:`astropy installation guide ` for important details. - -This guide covers creating a Python environment, installing with ``pip`` or ``conda``, building from source, requirements, and testing. - -Learn Astropy -------------- - -You can explore the functionality available in Astropy by checking out the `Tutorials `__ and `Documentation `__. - -.. grid:: 2 - :gutter: 1 - - .. grid-item:: - :columns: auto - - .. button-link:: https://learn.astropy.org - - Tutorials - - .. grid-item:: - :columns: auto - - .. button-link:: https://docs.astropy.org/en/stable/index.html - - Documentation - -Get Help --------- - -If you have any questions regarding using Astropy there are numerous -channels for communication. Post to any one of several forums to get -help from our active, helpful, and friendly community of users and -developers. - -.. button-ref:: astropy-org-help - - Get Help - -Report bugs and Contribute --------------------------- - -If you encounter something you believe to be a mistake, error, or bug, the best way to get it addressed is to report it on the `github issue tracker `__. -If you aren't sure if something is a bug or not, or if you don't have a Github account, feel free to ask on one of the :ref:`forums `. -If you believe you know how to fix the problem, please consider :ref:`contributing `! - -.. grid:: 2 - :gutter: 1 - - .. grid-item:: - :columns: auto - - .. button-link:: https://github.com/astropy/astropy/issues - - Report issues - - .. grid-item:: - :columns: auto - - .. button-ref:: astropy-org-contribute - - Contribute - -Support Astropy ---------------- - -If you use Astropy in your work, we would be grateful if you could -include an acknowledgment in papers and/or presentations. See -:ref:`Acknowledging & Citing Astropy ` for details. - -You can also purchase apparel and trinkets from -`the NumFOCUS shop `__, -and a portion of the profits go to support the project! - -If you are interested in directly financially supporting Astropy -(either one-time or recurring), you can do so via our fiscal sponsor -NumFOCUS: - -.. button-link:: https://numfocus.org/donate-to-astropy - - Donate to Astropy - -Awards ------- - -- `Lancelot M. Berkeley–New York Community Trust Prize for Meritorious Work in Astronomy `__ (2025) -- `IOP Publishing Top Cited Paper Awards North America `__ (2023) -- `ADASS Prize for an Outstanding Contribution to Astronomical Software `__ (2022) -- `Royal Astronomical Society Group Award (Astronomy) `__ (2020) - -.. rst-class:: last - -Zenodo Community ----------------- - -Documents, notes from previous meetings, and talks about Astropy are -collected in a Zenodo community for long-term archiving. Everyone is -encouraged to submit talks, etc. and other relevant materials. - -.. button-link:: https://www.zenodo.org/communities/astropy - - Zenodo community - -.. raw:: html - - - -.. raw:: html - - - - diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..f773ca52 Binary files /dev/null and b/objects.inv differ diff --git a/paper_10k_citation.rst b/paper_10k_citation.rst deleted file mode 100644 index 019e00a2..00000000 --- a/paper_10k_citation.rst +++ /dev/null @@ -1,18 +0,0 @@ -:orphan: - -.. _astropy-org-paper-10k: - -Astropy Paper Reaches 10,000 Citations -====================================== - -Published by NumFOCUS on 2025-10-04 (`link to original article `__) - -The Astropy Project is excited to announce that the `first Astropy paper `__ has reached 10,000 citations, as tracked by the Astrophysics Data System. - -Astropy is a community-driven project that develops the astropy Python package along with other libraries and tools that enable astronomical research software. The Astropy Project has published three journal articles that mark significant milestones for the project, coinciding with the initial announcement of the project, version 2.0 of the core package, and version 5.0 of the core package, respectively. - -Since its inception just over 10 years ago, Astropy has become a core pillar of astronomical research, laying the foundation for thousands of software packages and enabling over 10,000 published research projects. This milestone demonstrates the impact Astropy has had on astronomy research and reflects the potential impact of scientific software. Other recent milestones include the ADASS Software Prize in 2022 and the 2025 Berkeley Prize. - -The Astropy Project is not a centralized institution or endeavor: The astropy Python package contains contributions from over 500 unique contributors and the governing bodies of the project are located at a range of universities and institutes with members spanning junior to senior positions in both academic and non-academic careers. While many have contributed to Astropy, the majority of the effort in the project was done by a much smaller group of 20–25 core contributors and maintainers. - -Astropy has benefitted from and is grateful for grant funding from the Moore Foundation and NASA over the years. However, most of the project was developed through volunteer effort or in-kind contributions from institutions such as Space Telescope Science Institute and the Chandra X-ray Center, and more recently the Center for Computational Astrophysics at the Flatiron Institute. Astropy also receives support as a Sponsored Project with `NumFOCUS `__, which provides services in funding and infrastructure for open source scientific computing projects. Infrastructure software like Astropy is critical to the success of modern astronomy, and we hope that the community will continue to support the project in the future through funding and contributions. diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 090e75fc..00000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -sphinx -myst-parser -sphinx-design -astropy-sphinx-theme>=3.0.0 -sphinx-copybutton diff --git a/roles.json b/roles.json deleted file mode 100644 index 78ff0462..00000000 --- a/roles.json +++ /dev/null @@ -1,707 +0,0 @@ -[ - { - "role": "Coordination committee member", - "url": "Coordination_committee_member", - "people": [ - "Clara Brasseur", - "Aarya Patil", - "Nathaniel Starkman", - "Erik Tollerud", - "Kyle Westfall" - ], - "role-head": "Coordination committee member", - "responsibilities": [ - { - "description": "Overall coordination and management of the Astropy project, including:", - "details": [ - "Formally detailed in the The Astropy Project Governance Charter (APE 0)", - "Keeping a large-scale view of the Astropy ecosystem", - "Approving or rejecting Astropy APEs", - "Evaluating and merging core package pull requests as needed (e.g., for sub-packages without a maintainer)", - "Arbitrating disagreements in the core package, including final decisions when otherwise deadlocked", - "Maintaining the list of roles and related github permissions", - "Managing finances for the project", - "Coordinating with NumFOCUS and other funding organizations", - "Securing funding for the project via discussions and proposals to funding agencies" - ] - }, - { - "description": "Organization and communication:", - "details": [ - "Policies: CoCo Operating Policies.", - "Meeting records: CoCo Running Notes.", - "Communication within the coordination committee happens through regular Zoom meetings and a private Slack channel.", - "Contact the Coordination Committee via email to coordinators@astropy.org or by tagging the github team @astropy/coordinators.", - "Coordination committee members send project updates to appropriate email lists (e.g. astropy-dev)." - ] - } - ] - }, - { - "role": "Ombudsperson", - "url": "Ombudsperson", - "people": [ - "Perry Greenfield" - ], - "role-head": "Ombudsperson", - "responsibilities": { - "description": "Provide a point of contact for sensitive issues separate from the coordinating committee, including:", - "details": [ - "Formally detailed in the The Astropy Project Governance Charter (APE 0)", - "Monitoring the confidential@astropy.org email account", - "Solicit and provide anonymized feedback to the astropy coordination committee regarding coordination of the project", - "Assist the coordination committee and community engagement coordinator with violations of the code of conduct or other ethical concerns" - ] - } - }, - { - "role": "Strategic planning and organizing committee member", - "url": "strategic_planner", - "people": [ - "Kelle Cruz", - "Adrian Price-Whelan", - "Thomas Robitaille", - "Nathaniel Starkman", - "Erik Tollerud" - ], - "role-head": "Strategic planner", - "responsibilities": [{ - "description": "Do long-term planning for the Astropy Project as a whole, including:", - "details": [ - "Shape and provide a vision for next major steps in the Project, in consultation with the whole Astropy community.", - "Maintain an overview of all the project activities (both from developer and user perspectives).", - "Provide points of contact for external stakeholders on the above (with the Coordination Committee).", - "Monitor project activities to see how well aligned they are with the roadmap and strategic goals of the project, and report back to the community and Coordination Committee.", - "Coordinate writing grant proposals (in collaboration with the Finance Committee, Coordination Committee, and community).", - "Maintain the Astropy Project Roadmap.", - "Engage with, and collect input from, the whole Astropy Community on project vision and priorities." - ] - }, - { - "description": "Organization and communication:", - "details": [ - "Policies: Beta-Year Draft.", - "Meeting records: Strategic Planning Running Notes.", - "Communication within the coordination committee happens through regular Zoom meetings and a private Slack channel.", - "Contact the Strategic Planning Committee via email to strategic.planning@astropy.org or by tagging the github team @astropy/strategic-planning." - ] - }] - }, - { - "role": "Finance committee member", - "url": "finance_committee_member", - "people": [ - "Kelle Cruz (chair)", - "Aarya Patil", - "John Swinbank", - "Erik Tollerud" - ], - "role-head": "Finance committee member", - "responsibilities": [{ - "description": "Plan, oversee, and disburse the Astropy project finances, including:", - "details": [ - "Determine and manage the process for paying people from Astropy's project-level funding.", - "Paying and overseeing people in supporting roles (e.g., documentation copy-editors, contract lawyers).", - "Oversee payment for services, licenses, and travel (e.g., Python in Astronomy, SciPy), and other miscellaneous expenses the project already pays for.", - "Maintain and continuously develop a transparent process for reporting all of the above to the Coordination Committee and wider community, related record keeping, and planning the same for future possible financial committee efforts." - ] - }, - { - "description": "Organization and communication:", - "details": [ - "Policies: Finance Committee Operating Policies.", - "Meeting records: Finance Running Notes.", - "Communication within the finance committee happens through regular Zoom meetings and a private Slack channel.", - "Contact the Finance Committee via email to finance@astropy.org, tagging the github team @astropy/finance-committee, or via #finance-committee public channel in Astropy Slack workspace.", - "Finance committee members send project updates to appropriate email lists (e.g. astropy-dev)." - ] - }] - }, - { - "role": "Maintainer Mentorship coordinator", - "url": "mentorship", - "people": [ - "Tom Aldcroft" - ], - "role-head": "Maintainer Mentorship coordinator", - "responsibilities": { - "description": "Lead the maintainer mentorship program, including:", - "details": [ - "identifying active and experienced contributors that would like to become maintainers", - "finding mentors for new maintainers", - "develop opportunities for new maintainers" - ] - } - }, - { - "role": "Community engagement coordinator", - "url": "Community_engagement_coordinator", - "role-head": "Community engagement coordinator", - "sub-roles": [ - { - "role": "Overall", - "people": [ - "Unfilled" - ] - }, - { - "role": "Facebook", - "people": [ - "Kelle Cruz" - ] - }, - { - "role": "Slack", - "people": [ - "Stuart Mumford" - ] - }, - { - "role": "Discourse", - "people": [ - "Stuart Mumford" - ] - }, - { - "role": "Conferences", - "people": [ - "Kelle Cruz", - "Erik Tollerud" - ] - }, - { - "role": "BlueSky", - "people": [ - "Brett Morris" - ] - }, - { - "role": "Mastodon", - "people": [ - "Stuart Mumford" - ] - } - ], - "responsibilities": { - "description": "Facilitate engagement with the Astropy community, including:", - "details": [ - "Maintain Astropy's social media accounts", - "Monitor/moderate the Python Users in Astronomy Facebook group", - "Keep track of/help organize presence in conferences and workshops", - "Maintain infrastructure for communication channels (e.g., Discourse)" - ] - } - }, - { - "role": "Learn Team", - "url": "Learn_team", - "role-head": "Learn Team", - "sub-roles": [ - { - "role": "Coordinators", - "people": [ - "Clara Brasseur" - ] - }, - { - "role": "Learn content and infrastructure", - "people": [ - "Lia Corrales", - "Kelle Cruz", - "Matt Craig", - "Adrian Price-Whelan", - "Erik Tollerud", - "Jonathan Sick", - "Jeff Jennings" - ] - }, - { - "role": "Workshop Coordinators", - "people": [ - "David Shupe", - "Brett Morris", - "Kelle Cruz" - ] - } - ], - "responsibilities": [ - { - "subrole-head": "Coordinators", - "description": "Oversee the Astropy \"Learn\" ecosystem, including:", - "details": [ - "Ensuring that the documentation, tutorials, and guide materials are internally consistent and cover key areas of the ecosystem", - "Overseeing the maintainers for the aforementioned areas", - "Organizing sprints or other events focused on Astropy learning materials" - ] - }, - { - "subrole-head": "Learn content and infrastructure", - "description": "Maintain the infrastructure and edit content of the Tutorials website, including:", - "details": [ - "Facilitating the display and discoverability of the tutorials", - "Rendering of the Jupyter notebooks", - "Integrated testing of notebooks", - "Reviewing issues and pull requests", - "Soliciting new content as needed" - ] - }, - { - "subrole-head": "Workshop Coordinators", - "description": "Organize and coordinate Astropy workshops for training and outreach to users", - "details": [ - "Maintain the astropy-workshops repository", - "Oversee staffing/volunteers for workshops", - "Identify opportunities for workshops in diverse geographic locations" - ] - } - ] - }, - { - "role": "Affiliated package review editor", - "url": "Affiliated_package_review_editor", - "people": ["Hans Moritz G\u00fcnther", "Derek Homeier"], - "deputy": ["Unfilled"], - "role-head": "Affiliated package review editor", - "responsibilities": { - "description": "Oversee affiliated packages in partnership with pyOpenSci, including:", - "details": [ - "Representing Astropy as pyOpenSci Software Review Editor", - "Keeping track of submissions to the affiliated package ecosystem", - "Guiding submissions through the pre-submission and submission steps to the Peer Review system" - ] - } - }, - { - "role": "APE editor", - "url": "APE_editor", - "people": [ - "Clara Brasseur", - "Aarya Patil", - "Nathaniel Starkman", - "Erik Tollerud", - "Kyle Westfall" - ], - "deputy": ["Unfilled"], - "role-head": "APE editor", - "responsibilities": { - "description": "Oversee APE submissions as laid out in APE 1, including:", - "details": [ - "Perform editorial reviews of new APE submissions", - "Shepherd the APE discussions and redirect them to astropy-dev, as needed", - "Monitor and maintain astropy-APEs repository" - ] - } - }, - { - "role": "Release team", - "url": "release_team", - "people": [ - "Simon Conseil", - "Thomas Robitaille" - ], - "role-head": "Release team", - "responsibilities": { - "description": "Oversee the release process for packages in the project, including:", - "details": [ - "Carrying out releases of the core astropy package", - "Notifying the Distribution Coordinators of any core astropy package release", - "Working with the Community Engagement Coordinator to make release announcements via channels such as mailing lists and social media", - "Keeping documentation for the release process of the core package up to date", - "Designing policies to improve the uniformity of release procedures for the coordinated and infrastructure packages of the Astropy Project", - "Testing the interoperability of the core, coordinated, and infrastructure packages and provide safeguards against breaking the ecosystem." - ] - } - }, - { - "role": "Security team", - "url": "security_team", - "people": [ - "Hans Moritz G\u00fcnther", - "Pey Lian Lim", - "Cl\u00e9ment Robert", - "Thomas Robitaille", - "Erik Tollerud" - ], - "role-head": "Security team", - "responsibilities": { - "description": "Organize security reporting and auditing for packages in the project, including:", - "details": [ - "Monitor and reply to security reports (this role needs admin privileges on GitHub to access reports submitted through GitHub's secure reporting form)", - "Coordinate the response to any security report with the relevant package maintainers and outside security experts", - "Coordinate security audits with external experts as needed and available", - "Release CVEs as necessary" - ] - } - }, - { - "role": "Infrastructure and Operations", - "url": "devops_team", - "role-head": "Infrastructure and Operations", - "sub-roles": [ - { - "role": "Technical Lead", - "people": [ - "Pey Lian Lim", - "Brigitta Sip\u0151cz" - ] - }, - { - "role": "Testing infrastructure", - "people": [ - "Simon Conseil", - "Pey Lian Lim", - "Thomas Robitaille", - "Brigitta Sip\u0151cz" - ] - }, - { - "role": "Documentation infrastructure", - "people": [ - "Simon Conseil", - "Pey Lian Lim", - "Stuart Mumford", - "Thomas Robitaille", - "Brigitta Sip\u0151cz" - ] - }, - { - "role": "Astropy.org web page maintainer", - "people": [ - "Hans Moritz G\u00fcnther", - "Derek Homeier", - "Erik Tollerud" - ] - } - - ], - "responsibilities": [ - { - "subrole-head": "Technical Lead", - "description": "Ensure the smooth running of the project", - "details": [ - "Set up and maintain continuous integration services", - "Move issues between repositories within the organization" - ] - }, - { - "subrole-head": "Testing infrastructure", - "description": "Lead development and maintenance of the testing infrastructure for Astropy and the helpers, including:", - "details": [ - "Managing issues/pull request for the Astropy core package regarding testing infrastructure", - "Managing issues/pull requests in the repositories containing the testing plugins, and determining when new plugins are required", - "Maintaining the 'metapackage' with the testing machinery (pytest-astropy at the time of this writing)", - "Supporting and enabling affiliated package usage of the testing infrastructure" - ] - }, - { - "subrole-head": "Documentation infrastructure", - "description": "Maintain the Astropy documentation website, including:", - "details": [ - "Managing the Sphinx infrastructure", - "Implementing changes and improvements to the documentation website", - "Overseeing content (although primary responsibility for content lies with subpackage maintainers)" - ] - }, - { - "subrole-head": "Astropy.org web page maintainer", - "description": "Manage the astropy.org web site, including:", - "details": [ - "Managing pull requests to the website repository in general", - "Managing data.astropy.org, which is done by managing the astropy-data repository (which is automatically synced with data.astropy.org)", - "Managing the astropy.org DNS entries and related domain name upkeep" - ] - } - ] - }, - { - "role": "Core astropy package maintainer", - "url": "Subpackage_maintainer", - "role-head": "Sub-package maintainer (at least one per core package sub-package)", - "sub-roles": [ - { - "role": "General", - "people": [ - "Derek Homeier", - "Pey Lian Lim", - "Cl\u00e9ment Robert", - "Ole Streicher" - ] - }, - { - "role": "astropy.constants", - "people": [ - "David Shupe", - "Marten van Kerkwijk" - ] - }, - { - "role": "astropy.convolution", - "people": [ - "Larry Bradley", - "Axel Donath", - "Adam Ginsburg" - ] - }, - { - "role": "astropy.coordinates", - "people": [ - "Stuart Littlefair", - "Adrian Price-Whelan", - "Eero Vaher", - "Marten van Kerkwijk" - ] - }, - { - "role": "astropy.cosmology", - "people": [ - "Nathaniel Starkman" - ] - }, - { - "role": "astropy.io.ascii", - "people": [ - "Tom Aldcroft", - "Hans Moritz G\u00fcnther", - "Derek Homeier" - ] - }, - { - "role": "astropy.io.fits", - "people": [ - "Simon Conseil", - "Thomas Robitaille" - ] - }, - { - "role": "astropy.io.misc", - "people": [ - "Matteo Bachetti" - ] - }, - { - "role": "astropy.io.votable", - "people": [ - "Thomas Boch", - "Tom Donaldson", - "Pey Lian Lim" - ] - }, - { - "role": "astropy.modeling", - "people": [ - "Nadia Dencheva", - "Perry Greenfield", - "William Jamieson" - ] - }, - { - "role": "astropy.nddata", - "people": [ - "Matt Craig", - "Brett Morris" - ] - }, - { - "role": "astropy.stats", - "people": [ - "Larry Bradley" - ] - }, - { - "role": "astropy.table", - "people": [ - "Tom Aldcroft", - "Marten van Kerkwijk" - ] - }, - { - "role": "astropy.time", - "people": [ - "Tom Aldcroft", - "Marten van Kerkwijk" - ] - }, - { - "role": "astropy.timeseries", - "people": [ - "Thomas Robitaille", - "Brigitta Sip\u0151cz" - ] - }, - { - "role": "astropy.uncertainties", - "people": [ - "Erik Tollerud", - "Marten van Kerkwijk" - ] - }, - { - "role": "astropy.units", - "people": [ - "Nathaniel Starkman", - "Marten van Kerkwijk" - ] - }, - { - "role": "astropy.utils", - "people": [ - "Pey Lian Lim", - "Brigitta Sip\u0151cz" - ] - }, - { - "role": "astropy.visualization", - "people": [ - "Larry Bradley", - "Stuart Mumford", - "Thomas Robitaille" - ] - }, - { - "role": "astropy.wcs", - "people": [ - "Mihai Cara, Nadia Dencheva" - ] - } - ], - "responsibilities": [ - { - "subrole-head": "General maintainer", - "description": "Maintain the astropy core package in aspects that are not specific to a single sub-package, including:", - "details": [ - "Evaluating new pull requests for quality, API consistency, Astropy coding standards, and appropriateness within the overall astropy ecosystem, in particular for pull requests spanning multiple sub-packages", - "Merging Pull Requests that are non-controversial or after reaching out to relevant subpackage maintainers", - "Maintain, review, and advocate for useful interaction between multiple sub-packages", - "Perform initial triaging of issues and pull requests", - "Keeping track of frequent contributors and their relevant areas of expertise" - ] - }, - { - - "subrole-head": "Sub-package maintainer", - "description": "Maintain a sub-package of the astropy core package, including:", - "details": [ - "Evaluating new pull requests for quality, API consistency, Astropy coding standards, and appropriateness within the overall astropy ecosystem", - "Merging Pull Requests in the sub-package", - "Keeping track of the \u201cbig picture\u201d progress of the sub-package - includes new feature development and significant bugs", - "Perform initial triaging of issues and pull requests", - "Keeping track of frequent contributors to the sub-package and their relevant areas of expertise" - ] - } - ] - }, - { - "role": "Coordinated package maintainer", - "url": "Coordinated_package_maintainer", - "role-head": "Astropy coordinated package maintainer", - "sub-roles": [ - { - "role": "asdf-astropy", - "people": [ - "Brett Graham", - "Nadia Dencheva", - "Perry Greenfield", - "Stuart Mumford" - ] - }, - { - "role": "astropy-healpix", - "people": [ - "Leo Singer", - "Thomas Robitaille", - "Michael Coughlin" - ] - }, - { - "role": "astroquery", - "people": [ - "Adam Ginsburg", - "Brigitta Sip\u0151cz" - ] - }, - { - "role": "ccdproc", - "people": [ - "Matt Craig" - ] - }, - { - "role": "photutils", - "people": [ - "Larry Bradley" - ] - }, - { - "role": "regions", - "people": [ - "Larry Bradley", - "Adam Ginsburg" - ] - }, - { - "role": "reproject", - "people": [ - "Thomas Robitaille", - "Stuart Mumford", - "Sam Van Kooten" - ] - }, - { - "role": "specreduce", - "people": [ - "Tim Pickering", - "Erik Tollerud", - "Kyle Conroy", - "Clare Shanahan", - "Hannu Parviainen" - ] - }, - { - "role": "specutils", - "people": [ - "Ricky O'Steen", - "Adam Ginsburg", - "Erik Tollerud", - "Kelle Cruz" - ] - } - ], - "responsibilities": { - "description": "Maintain an astropy coordinated package, including:", - "details": [ - "Maintaining the github repository for the coordinated package", - "Maintaining the coordinated package's infrastructure (usually via the helpers and package template)", - "Monitoring features and bringing them for inclusion in the core package when relevant", - "All the same responsilities as a sub-package, but for the coordinated package." - ] - } - }, - { - "role": "Dev-telecon coordinator", - "url": "devtelecon_coordinator", - "people": [ - "Hans Moritz G\u00fcnther" - ], - "role-head": "Developer telecon coordinators", - "responsibilities": { - "description": "Organize monthly developer telecons", - "details": [] - } - }, - { - "role": "Distribution coordinator", - "url": "Distribution_coordinator", - "people": [ - "Matt Craig", - "Stuart Mumford", - "Sergio Pascual", - "Ole Streicher", - "Miguel de Val-Borro" - ], - "role-head": "Distribution coordinators", - "responsibilities": { - "description": "Create and maintain binary distribution packages for Astropy core and affiliated packages for a specific OS or package management system.", - "details": [] - } - } -] diff --git a/search.html b/search.html new file mode 100644 index 00000000..86f04c12 --- /dev/null +++ b/search.html @@ -0,0 +1,187 @@ + + + + + + + + + + + + Search — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +

        Search

        +
        + +

        + Please activate JavaScript to enable the search + functionality. +

        +
        +

        + From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

        +
        + + + +
        + +
        + +
        + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..07aee83a --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({objects:{},terms:{all:[0,4,6,2],concept:4,queri:4,webchat:1,code:[0,1,3,4,5,6],lian:5,follow:[3,0,4,6],astroml:4,row:4,cython:0,authorit:4,simon:5,depend:[0,1,6],send:[3,5],foster:0,decis:5,under:[0,4],sourc:0,ginsburg:[4,5],util:4,mechan:6,whether:[3,0,4],veri:4,ticket:0,relev:4,nmcell:4,pypinam:4,level:[4,6],gui:6,henri:5,list:[0,1,3,4,5,6],ryan:5,"try":4,barbari:5,team:[6,5],div:0,refer:6,pleas:[3,0,1,4,5],prevent:6,kowalik:5,direct:6,nair:5,sign:[0,4],second:0,design:5,pypi_transl:4,download:[0,4,6],further:6,victor:5,even:[3,4],url_transl:4,compar:4,repli:1,abl:6,candiat:4,uniform:6,current:[0,4,6,2],version:[0,2],axel:5,conduct:3,"new":[3,4,6],net:1,ever:6,method:6,ongo:0,widget:4,zach:5,gener:[4,6],never:6,privat:1,matplotlib:[4,6],leo:5,satisfi:6,address:1,layout:6,becom:4,valu:6,madhura:5,convert:4,urlcel:4,jame:5,prasanth:5,extrem:1,chang:[3,0,4],woillez:5,via:[3,6],modul:4,pypicel:4,prefer:[3,1],ask:0,href:4,instal:[0,4,6],should:[0,1,4,6],unit:5,plot:4,from:[0,1,4,6],would:[0,1,4,6],commun:[3,0,1,4,6],conlei:5,mumford:5,regist:4,websit:[3,0],few:[4,6],edward:5,criteria:6,commite:4,type:4,until:6,oprescu:5,more:[0,4,6],sort:[0,4],"fr\u00e9d\u00e9ric":5,desir:6,relat:4,indic:4,actual:4,baumbach:5,effort:[0,4],cach:4,must:6,none:4,graphic:4,join:[3,0,1],scalabl:4,regdiv:4,setup:0,work:[3,0,4,6],judg:4,dev:[3,0,1,4,5],xhr:4,archiv:0,can:[3,0,1,6],learn:4,meet:4,want:[3,0],give:[0,1],process:6,registr:1,share:4,templat:[4,6],high:4,tab:4,onlin:4,keep:[1,6],alwai:[4,6],end:4,goal:[4,6],rather:6,anoth:0,write:4,how:[0,1,6],anyon:3,pure:4,chri:5,updat:0,map:4,maintcel:4,resourc:4,dencheva:5,rudi:5,pyfit:0,"20affili":4,befor:[4,6],date:0,pdf:4,data:4,grow:6,insertrow:4,github:[3,0,1],bind:4,spectra:6,element:4,issu:[3,0,1,4],maintain:4,allow:[0,6],devdoc:0,order:[4,6],talk:0,feedback:1,astropys:4,over:[3,6],beaumont:5,becaus:[4,6],barrett:5,robitail:[4,5],report:[3,0,4],paper:0,flexibl:4,grollier:5,streamlin:4,style:6,group:[1,4],fit:[4,6],fix:3,urltext:4,onc:6,mail:[3,0,1,5],main:6,easier:4,them:6,scipi:6,"return":4,thei:6,python:[3,0,4,6],wolfgang:5,initi:[0,6],framework:[4,6],getelementbyid:4,facilit:[4,6],geert:5,discuss:[0,1,5],strive:6,choic:[4,6],term:6,document:[0,2,3,4,5,6],alex:5,name:[4,5],anyth:4,photometri:[4,6],tstat:4,astronom:[4,6],slide:0,mean:6,zabalza:5,neil:5,citat:0,michael:5,individu:4,idea:3,procedur:6,heavi:4,contributor:5,astropi:[0,1,2,3,4,5,6],significantli:4,populatet:4,logo:[0,5],engin:4,rpocel:4,special:6,out:[1,4,6],canvas:4,open:[0,4,5],crucial:4,astroqueri:4,research:0,daniel:5,"_email_with_name_regex":4,correct:4,hogan:5,shiga:5,benjamin:5,after:3,stable_transl:4,hang:1,free:1,standard:[4,6],standalon:6,reason:4,believ:0,releas:[0,6],org:[0,4],nmarr:4,featur:[0,4],promptli:0,wai:[3,0,1],could:[0,4,6],david:5,length:4,outsid:6,adrian:5,getelementsbytagnam:4,think:4,first:[0,4,6],origin:[0,6],softwar:[3,4],major:[0,4],notifi:3,directli:[0,4,6],christoph:5,demitri:5,arrai:4,independ:6,qualiti:[4,6],number:6,moritz:5,mai:[4,6],instruct:[3,0,4],alreadi:[3,0,6],done:6,wrapper:4,stabl:[0,4,6,2],agre:6,miss:5,differ:[3,6],"long":[4,6],script:[4,6],interact:4,system:[4,6],messag:4,sortord:4,aldcroft:5,tom:5,white:0,tool:[4,6],alan:5,insertcel:4,part:[4,6],exactli:6,technic:0,png:4,"20packag":4,grew:5,whenev:6,provid:[0,4,6],seamlessli:6,tree:6,structur:4,"g\u00fcnther":5,project:[3,0,4,6,5],reus:4,transport:4,browser:4,conseil:5,viewer:4,craig:5,modern:4,ani:[3,0,1,4,6],packag:[0,1,3,4,5,6],larri:5,perri:5,have:[0,1,3,4,5,6],tabl:[4,6],need:[4,6],take:0,turner:5,"null":4,seek:6,photutil:4,connelli:5,gustavo:5,lim:5,bradlei:5,contact:4,note:[0,4],also:[0,1,4,6],client:1,maintainer_transl:4,which:[1,4,6],thoma:[4,5],subject:4,juli:6,channel:1,pontzen:5,simplifi:0,sure:[3,4],unless:6,exec:4,track:6,price:5,who:[3,6],reach:6,most:0,plan:0,phase:6,"class":[0,4,6],singer:5,don:3,correctli:0,url:4,doc:[0,4],adopt:6,cover:4,face:4,bibtex:0,determin:4,latest:[0,2],text:[0,4],maint:4,pkg:4,astrophys:4,fine:4,affil:4,involv:0,consolid:6,onli:6,locat:6,explain:4,hanlei:5,activ:[0,6],figur:4,than:6,configur:4,theme:5,nadia:5,local:4,asciit:0,decid:6,contribut:[3,5],get:[3,0,1],googlegroup:1,spectroscop:4,express:4,pypi:[4,6],muna:5,cannot:6,increas:6,requir:[0,4,6],"terr\u00f3n":5,organ:[3,6],pkgnm:4,"public":[0,4],blanton:4,common:6,contain:6,jeschke:4,weaver:5,where:[0,6],vision:[0,6],set:6,julien:5,pynbodi:5,specutil:4,around:4,fail:4,best:[0,4],concern:6,awar:0,still:4,shupe:5,databas:4,someth:0,particip:1,enough:6,stall:6,donath:5,between:[0,6],"import":[0,6],irc:1,across:[0,6],deil:5,altern:0,kei:6,javascript:4,barentsen:5,extens:4,entir:6,here:[3,0],ipython:0,"_email_regex":4,come:0,addit:[0,4,6],both:4,easi:[4,6],numpydoc:4,comment:1,etc:6,present:0,committe:[4,6],improv:[1,4],brai:5,com:[0,1],clone:0,jeff:5,color:4,guidelin:4,innerhtml:4,droettboom:5,taylor:5,guid:0,summar:6,duplic:6,mailto:4,ultim:6,strong:6,chrome:4,patch:[3,6],numpi:[0,6],mark:4,compon:[0,6],hagen:5,json:4,much:[4,6],interest:[3,1,4],thereaft:6,futur:[4,6],wait:6,crawford:5,wish:[0,6],imag:4,andrew:5,mine:4,coordin:[4,6,5],understand:1,"bragan\u00e7a":5,andrea:5,impati:1,davi:5,"case":6,interoper:[0,4],look:0,aim:[4,6],whelan:5,abov:0,error:0,everyon:5,ginga:4,cell:4,readi:4,toolkit:6,itself:6,routin:4,sever:[1,4],scienc:4,develop:[0,1,2,3,4,6],welcom:[3,1],credit:5,suggest:[0,4],make:[3,0,4,6],format:4,access:[1,4,6],pkgi:4,member:4,complex:6,home_url:4,pan:4,higher:6,competit:6,http:[0,1,4],upon:6,capabl:4,jqueri:4,user:[0,1,4,6],mani:[3,0,6,5],robust:6,wherev:4,stablecel:4,mosaic:4,recent:0,task:[4,6],center:4,discourag:6,thu:6,kyle:5,without:1,exampl:6,command:4,thi:[0,1,3,4,5,6],undefin:4,everyth:6,ferguson:5,load:4,pywc:0,identifi:6,erben:5,eventu:6,kramer:5,obtain:0,collabor:0,aspect:0,bressert:[4,5],paul:5,web:4,eli:[4,5],han:5,parikh:5,point:1,help:[0,1,6],overview:0,els:4,transit:6,match:4,build:[0,6],"_email_regex_str":4,quirk:4,read:[0,4],foundat:3,consensu:6,realiz:4,pypi_nam:4,repo_url:4,emma:5,like:[0,1,4],success:0,eric:4,changelog:0,zoom:4,server:4,benefit:6,api:4,necessari:4,singl:[0,6],output:4,page:[3,4,5],"function":[4,6],jean:5,www:0,repocel:4,often:1,acknowledg:[0,1],twitter:0,some:[4,6],deleterow:4,adequ:4,ncol:4,home:4,librari:[4,6],affili:[3,4,6],implement:6,montag:4,avoid:6,cut:4,fox:5,tracker:[3,0],leav:4,pei:5,reproduc:4,either:[3,6],machin:4,core:[0,1,3,4,5,6],encourag:[1,6],run:4,power:4,journal:0,usag:4,docstr:4,pascual:5,repositori:[3,0,4,6,5],hsu:5,regexp:4,post:1,sphinx:4,unsaf:4,about:4,central:6,column:4,preclud:6,logo_bann:0,addition:4,idl:4,integr:[3,6],stuart:5,kerzendorf:5,produc:4,compil:4,own:6,greenfield:5,primarili:6,sergio:5,automat:[0,4],appropri:4,steven:5,ensur:6,your:[3,0,1,4,5],merg:0,inclus:6,git:0,van:5,val:5,area:6,support:[4,6],question:0,submit:[3,6],avail:[0,4,6],start:[3,0,6],reli:6,joseph:5,interfac:[4,6],includ:[0,1,4,6],suit:4,"var":4,strict:4,analysi:4,head:3,marten:5,roban:5,form:[4,6],kerkwijk:5,bundl:4,basic:4,continu:6,link:[0,4,2],grate:0,tollerud:5,bug:0,freenod:1,pull:[3,1,6,5],made:[0,6],consist:6,possibl:[4,6],"default":6,crighton:5,"v\u00edctor":5,displai:4,below:[0,2],miguel:5,those:6,email:5,connect:4,bell:5,aplpi:4,later:[0,6],creat:[3,4],request:[3,1,4,6,5],dure:6,miruna:5,indeci:4,exist:6,erik:5,file:4,pip:0,check:0,googl:1,titl:0,when:4,detail:[0,4],borro:5,other:[0,1,3,4,5,6],kacper:5,varieti:4,test:[4,6],you:[3,0,1,4,5],fork:3,intend:[4,6],registri:4,astronomi:[3,0,4,6],matt:5,intens:4,intent:3,consid:[4,6],stai:0,reduc:6,mosaick:4,algorithm:4,svg:[0,4],getjson:4,geometr:4,adam:[4,5],potenti:6,time:[3,0,6],manifesto:6,kcorrect:4},objtypes:{},titles:["How to start working with Astropy","Astropy Feedback (and getting help)","Astropy Documentation","Contributing to Astropy","About affiliated packages","The Astropy Team","Vision for a Common Astronomy Python Package"],objnames:{},filenames:["index","feedback/index","docs","contributing","affiliated/index","team","vision"]}) \ No newline at end of file diff --git a/team.html b/team.html new file mode 100644 index 00000000..83908f28 --- /dev/null +++ b/team.html @@ -0,0 +1,256 @@ + + + + + + + + + + + + The Astropy Team — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        +

        The Astropy Team

        +
        +

        Astropy Project Coordinators

        +
          +
        • Perry Greenfield
        • +
        • Thomas Robitaille
        • +
        • Erik Tollerud
        • +
        +
        +
        +

        Core Package Contributors

        +
          +
        • Tom Aldcroft
        • +
        • Kyle Barbary
        • +
        • Geert Barentsen
        • +
        • Paul Barrett
        • +
        • Andreas Baumbach
        • +
        • Chris Beaumont
        • +
        • Daniel Bell
        • +
        • Larry Bradley
        • +
        • Gustavo Bragança
        • +
        • Erik M. Bray
        • +
        • Eli Bressert
        • +
        • Alex Conley
        • +
        • Jean Connelly
        • +
        • Simon Conseil
        • +
        • Matt Craig
        • +
        • Steven Crawford
        • +
        • Neil Crighton
        • +
        • Matt Davis
        • +
        • Christoph Deil
        • +
        • Nadia Dencheva
        • +
        • Axel Donath
        • +
        • Michael Droettboom
        • +
        • Zach Edwards
        • +
        • Thomas Erben
        • +
        • Henry Ferguson
        • +
        • Ryan Fox
        • +
        • Adam Ginsburg
        • +
        • Perry Greenfield
        • +
        • Frédéric Grollier
        • +
        • Hans Moritz Günther
        • +
        • Alex Hagen
        • +
        • Emma Hogan
        • +
        • Chris Hanley
        • +
        • JC Hsu
        • +
        • Marten van Kerkwijk
        • +
        • Wolfgang Kerzendorf
        • +
        • Kacper Kowalik
        • +
        • Roban Kramer
        • +
        • Pey Lian Lim
        • +
        • Stuart Mumford
        • +
        • Demitri Muna
        • +
        • Prasanth Nair
        • +
        • Miruna Oprescu
        • +
        • Madhura Parikh
        • +
        • Sergio Pascual
        • +
        • Adrian Price-Whelan
        • +
        • Thomas Robitaille
        • +
        • Alex Rudy
        • +
        • Joseph Ryan
        • +
        • David Shiga
        • +
        • David Shupe
        • +
        • Leo Singer
        • +
        • James Taylor
        • +
        • Jeff Taylor
        • +
        • Víctor Terrón
        • +
        • Erik Tollerud
        • +
        • James Turner
        • +
        • Miguel de Val-Borro
        • +
        • Benjamin Alan Weaver
        • +
        • Julien Woillez
        • +
        • Victor Zabalza
        • +
        +
        +
        +

        Other Credits

        +
          +
        • Kyle Barbary for designing the Astropy logos and documentation themes.
        • +
        • Andrew Pontzen and the pynbody team +(For code that grew into astropy.units)
        • +
        • Everyone on astropy-dev +and the astropy mailing list +for contributing to many discussions and decisions!
        • +
        +

        (If you have contributed to the Astropy project and your name is missing, +please send an email to the coordinators, or +open a pull request for this page +in the astropy repository)

        +
        +
        + + +
        +
        +
        +

        Back to top

        +

        + © Copyright 2012, The Astropy Collaboration.
        + Created using Sphinx 1.1.3.
        +

        + +
        +
        + + \ No newline at end of file diff --git a/team.rst b/team.rst deleted file mode 100644 index 95afe8cb..00000000 --- a/team.rst +++ /dev/null @@ -1,125 +0,0 @@ -.. NOTE: This file has weird heading order deliberately to allow us to just include credits.rst from astropy core - -.. _astropy-org-team: - -************ -Astropy Team -************ - -.. _astropy-org-team-roles: - -Roles ------ - -The Astropy project is made possible through the efforts of community members that perform numerous important roles. This encompasses a broad scope of responsibilities ranging from direct package development to communication, distribution, and managerial activities. In this section we list the identified project roles and responsible parties, to provide members with a point-of-contact for individual tasks and to give the project an overview of the current state of the team. Different roles on this page have very different scope and effort needed to perform them. Listing on this page is also not mean to be any particular assignment of credit beyond that implict in having the responsibilities of the role. See the `Astropy project role responsibilities <#role-responsibilities>`__ section below for a full description of each role. - -We are always looking for interested community members to fill empty roles and to join existing teams. Community members may volunteer or nominate someone else for any role by emailing coordinators@astropy.org or by getting in touch with the current team. - -.. list-table:: - :header-rows: 1 - :name: roles-table - :class: package-table - - * - Role - - Sub-role - - Person/People (last name alphabetical) - * - \- - - \- - - \- - -Astropy Project Role Responsibilities -===================================== - -The Astropy project is made possible through the efforts of community members that perform numerous important roles. This encompasses a broad scope of responsibilities ranging from direct package development to communication, distribution, and managerial activities. In this section we list the responsibilities for each of the identified project roles. The list of people fulfilling these roles is found in the `Roles <#roles>`__ section. Committee/Team specific policies and communication methods are outlined in the `Astropy Policies `__ readme document. - -.. container:: - :name: roles-description - - .. raw:: html - -
        - -Voting Members --------------- - -The Voting Members are the group of trusted individuals who operate the Astropy Project on behalf of the community. Their role and responsibilites are defined in `The Astropy Project Governance Charter (APE 0) `__. - -Active Voting Members -===================== - -- Tom Aldcroft -- Sam Bianco -- Larry Bradley -- Clara Brasseur -- Michael K. Brewer -- Mihai Cara -- Kyle Conroy -- Simon Conseil -- Lia Corrales -- Michael Coughlin -- Matt Craig -- Kelle Cruz -- Nadia Dencheva -- Nicholas Earl -- Tom Donaldson -- Wilfred Gee -- Adam Ginsburg -- Perry Greenfield -- Moritz Günther -- Derek Homeier -- William Jamieson -- Pey Lian Lim -- Stuart Littlefair -- Brett Morris -- Stuart Mumford -- Ricky O'Steen -- Hannu Parviainen -- Aarya Patil -- Tim Pickering -- Adrian Price-Whelan -- Clément Robert -- Thomas Robitaille -- Albert Y. Shih -- David Shupe -- Jonathan Sick -- Leo Singer -- Brigitta Sipőcz -- Nathaniel Starkman -- Ole Streicher -- John Swinbank -- Erik Tollerud -- James Turner -- Marten van Kerkwijk -- Eero Vaher -- Benjamin Alan Weaver -- Kyle Westfall - - -Emeritus Voting Members -======================= - -- E. Madison Bray -- Juan Luis Cano Rodríguez -- Steve Crawford -- Michael Droettboom -- Lauren Glattly -- Michael Seifert -- Edward Slavich -- Zé Vinícius - - -Contributors ------------- - -Astropy project packages are under continuous development by professional astronomers and software developers from around the world. The Project is community-driven, with decisions generally made by consensus, but with oversight and organization provided by the coordinating committee. - -.. include:: credits.rst - :start-line: 4 - -.. raw:: html - - diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 2b205429..00000000 --- a/tox.ini +++ /dev/null @@ -1,29 +0,0 @@ -[tox] -minversion = 4.0 -envlist = - build_site - linkcheck - -[testenv] -pass_env = - # A variable to tell tests we are on a CI system - CI - # Custom compiler locations (such as ccache) - CC - # Location of locales (needed by sphinx on some systems) - LOCALE_ARCHIVE - # If the user has set a LC override we should follow it - LC_ALL -skip_install = true -description = Invoke sphinx-build to build the website. -deps = - -r{toxinidir}/requirements.txt -commands = - pip freeze --all --no-input - sphinx-build --color -W --keep-going -b html -d _build/ . _build/html {posargs} - -# This does not check the html file links. -[testenv:linkcheck] -commands = - pip freeze --all --no-input - sphinx-build --color -b linkcheck . _build/html {posargs} diff --git a/validate_roles.py b/validate_roles.py deleted file mode 100644 index e3a42492..00000000 --- a/validate_roles.py +++ /dev/null @@ -1,73 +0,0 @@ -import os -import sys -import json -from termcolor import cprint - -REQUIRED_KEYS = {"role", "url", "role-head", "responsibilities"} - - -def assert_is_list(i, key, value): - if isinstance(value, list): - return 0 - else: - cprint(f" ERROR: Key \"{key}\" for role #{i} should be a list but instead is a {type(value)}", file=sys.stderr, color='red') - return 1 - - -def assert_is_string(i, key, value): - if isinstance(value, str): - return 0 - else: - cprint(f" ERROR: Key \"{key}\" for role #{i} should be a string but instead is a {type(value)}", file=sys.stderr, color='red') - return 1 - - -jsonfn = "roles.json" -try: - roles = json.load(open(jsonfn)) -except json.decoder.JSONDecodeError as e: - cprint(jsonfn + ' : ' + e.args[0], color='red') - cprint("*** JSON file appears to be malformed - see above ***", color='red') - sys.exit(2) - -error = 0 - -for i, role in enumerate(roles): - if not isinstance(role, dict): - cprint(f" ERROR: Role #{i} is not a key/value set", file=sys.stderr, color='red') - error += 1 - else: - key_difference = REQUIRED_KEYS - set(role.keys()) - if key_difference: - cprint(f" ERROR: Missing key(s) for role #{i}: {key_difference}", file=sys.stderr, color='red') - error += 1 - - error += assert_is_string(i, 'role', role['role']) - error += assert_is_string(i, 'url', role['url']) - error += assert_is_string(i, 'role-head', role['role-head']) - - if 'sub-roles' in role: - if 'people' in role: - cprint(f" ERROR: people should not be defined at top level for role #{i} since sub-roles are defined") - error += 1 - for sub_role in role['sub-roles']: - error += assert_is_string(i, 'sub-roles[role]', sub_role['role']) - error += assert_is_list(i, 'sub-roles[people]', sub_role['people']) - else: - error += assert_is_list(i, 'people', role['people']) - - if isinstance(role['responsibilities'], list): - for resp in role['responsibilities']: - error += assert_is_string(i, 'responsibilities[description]', resp['description']) - for detail in resp['details']: - error += assert_is_string(i, 'responsibilities[detail]', detail) - else: - resp = role['responsibilities'] - error += assert_is_string(i, 'responsibilities[description]', resp['description']) - for detail in resp['details']: - error += assert_is_string(i, 'responsibilities[detail]', detail) - -if error > 0: - sornot = 's' if error > 1 else '' - cprint(f"** {error} error{sornot} occurred - see above for details **", file=sys.stderr, color='red') - sys.exit(1) diff --git a/vision.html b/vision.html new file mode 100644 index 00000000..83f33bb4 --- /dev/null +++ b/vision.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + Vision for a Common Astronomy Python Package — Astropy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        + + + +
        +
        +
        + + Fork me on GitHub + +
        + +
        +

        Vision for a Common Astronomy Python Package

        +

        The following document summarizes the original ‘manifesto’ for the Astropy +project which was adopted in July 2011.

        +
        +

        Long-term Vision

        +

        The ultimate goal that we seek is a package that would contain much of the +core functionality and some common tools required across Astronomy, but not +everything Astronomers will ever need. The aim is primarily to avoid +duplication for common core tasks, and to provide a robust framework upon +which to build more complex tools.

        +

        Such a common package should not preclude any other Astronomy package from +existing, because there will always be more complex and/or specialized tools +required. These tools will be able to rely on a single core library for many +tasks, and thus reduce the number of dependencies, reduce duplication of +functionality, and increase consistency of their interfaces.

        +
        +
        +

        Procedure

        +

        With the help of the community, the coordination committee will start by +identifying a few of key areas where initial development/consolidation will be +needed (such as FITS, WCS, coordinates, tables, photometry, spectra, etc.) and +will encourage teams to be formed to build standalone packages implementing +this functionality. These packages will be referred to as affiliated packages +(meaning that they are intended for future integration in the core package).

        +

        A set of requirements will be set out concerning the interfaces and +classes/methods that affiliated packages will need to make available in order +to ensure consistency between the different components. As the core package +grows, new potential areas/components for the core package will be identified. +Competition cannot be avoided, and will not be actively discouraged, but +whenever possible, developers should strive to work as a team to provide a +single and robust affiliated package, for the benefit of the community.

        +

        The affiliated packages will be developed outside the core package in +independent repositories, which will allow the teams the choice of tool and +organization. Once an affiliated package has implemented the desired +functionality, and satisfies quality criteria for coding style, documentation, +and testing, it will be considered for inclusion in the core package, and +further development will be done directly in the core package either via +direct access to the repository, or via patches/pull requests (exactly how +this will be done will be decided later).

        +

        To ensure uniformity across affiliated packages, and to facilitate integration +with the core package, developers who wish to submit their affiliated packages +for inclusion in the core will need to follow the layout of a template +package that will be provided before development starts.

        +
        +
        +

        Dependencies

        +

        Affiliated packages should be able to be imported with only the following +dependencies:

        +
          +
        • The Python Standard Library
        • +
        • NumPy, SciPy, and Matplotlib
        • +
        • Components already in the core Astronomy package
        • +
        +

        Other packages may be used, but must be imported as needed rather than during +the initial import of the package.

        +

        If a dependency is needed, but is an affiliated package, the dependent package +will need to wait until the dependency is integrated into the core package +before being itself considered for inclusion. In the mean time, it can make +use of the other affiliated package in its current form, or other packages, so +as not to stall development. Thus, the first packages to be included in the +core will be those only requiring the standard library, NumPy, SciPy, and +Matplotlib.

        +

        If the required dependency will never be part of a main package, then by +default the dependency can be included but should be imported as needed +(meaning that it only prevents the importing of that component, not the entire +core package), unless a strong case is made and a general consensus is reached +by the community that this dependency is important enough to be required at a +higher level.

        +

        This system means that packages will be integrated into the core package in an +order depending on the dependency tree, and also ensures that the interfaces +of packages being integrated into the core package are consistent with those +already in the core package.

        +

        Initially, no dependency on GUI toolkits will be allowed in the core package. +If the community reaches agrees on a single toolkit that could be used, then +this toolkit will be allowed (but will only be imported as needed).

        +
        +
        +

        Keeping track of affiliated packages

        +

        Affiliated packages will be listed in a central location (in addition to PyPI) +that will allow an easy installation of all the affiliated packages, for +example with a script that will seamlessly download and install all the +affiliated packages. The core package will also include mechanisms to +facilitate this installation process.

        +
        +
        +

        Existing Packages

        +

        Developers who already have existing packages will be encouraged to continue +supporting them for the benefit of users until the core library is considered +stable, contains this functionality, and is released to the community. +Thereafter, developers should encourage users to transition to using the +functionality in the core package, and eventually phase out their own +packages, unless they provide added value over the core package.

        +
        +
        + + +
        + + + \ No newline at end of file