diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..286aed4 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7e76fb2d63321ec3c347e52311e09cea +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..48c55b5 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +scope.ztf.dev diff --git a/_images/beta_lyr.png b/_images/beta_lyr.png new file mode 100644 index 0000000..d672203 Binary files /dev/null and b/_images/beta_lyr.png differ diff --git a/_images/bogus_1.png b/_images/bogus_1.png new file mode 100644 index 0000000..11aa463 Binary files /dev/null and b/_images/bogus_1.png differ diff --git a/_images/bogus_2.png b/_images/bogus_2.png new file mode 100644 index 0000000..319bcc8 Binary files /dev/null and b/_images/bogus_2.png differ diff --git a/_images/cepheid_1O.png b/_images/cepheid_1O.png new file mode 100644 index 0000000..2902a59 Binary files /dev/null and b/_images/cepheid_1O.png differ diff --git a/_images/cepheid_F.png b/_images/cepheid_F.png new file mode 100644 index 0000000..678659b Binary files /dev/null and b/_images/cepheid_F.png differ diff --git a/_images/cepheid_F1O.png b/_images/cepheid_F1O.png new file mode 100644 index 0000000..a10139e Binary files /dev/null and b/_images/cepheid_F1O.png differ diff --git a/_images/cepheid_F_1.png b/_images/cepheid_F_1.png new file mode 100644 index 0000000..c8edb5d Binary files /dev/null and b/_images/cepheid_F_1.png differ diff --git a/_images/cv_Novalike.png b/_images/cv_Novalike.png new file mode 100644 index 0000000..c0f0dd5 Binary files /dev/null and b/_images/cv_Novalike.png differ diff --git a/_images/cv_SU_UMa.png b/_images/cv_SU_UMa.png new file mode 100644 index 0000000..a2d8cb2 Binary files /dev/null and b/_images/cv_SU_UMa.png differ diff --git a/_images/cv_U_Gem.png b/_images/cv_U_Gem.png new file mode 100644 index 0000000..be983a5 Binary files /dev/null and b/_images/cv_U_Gem.png differ diff --git a/_images/cv_Z_Cam.png b/_images/cv_Z_Cam.png new file mode 100644 index 0000000..910881f Binary files /dev/null and b/_images/cv_Z_Cam.png differ diff --git a/_images/delta_scuti.png b/_images/delta_scuti.png new file mode 100644 index 0000000..6ed511f Binary files /dev/null and b/_images/delta_scuti.png differ diff --git a/_images/flaring_dwarfnova.png b/_images/flaring_dwarfnova.png new file mode 100644 index 0000000..64a5d5f Binary files /dev/null and b/_images/flaring_dwarfnova.png differ diff --git a/_images/flaring_mdwarf.png b/_images/flaring_mdwarf.png new file mode 100644 index 0000000..6ec12e1 Binary files /dev/null and b/_images/flaring_mdwarf.png differ diff --git a/_images/hr__beta_lyr.png b/_images/hr__beta_lyr.png new file mode 100644 index 0000000..298e1c6 Binary files /dev/null and b/_images/hr__beta_lyr.png differ diff --git a/_images/hr__cepheid.png b/_images/hr__cepheid.png new file mode 100644 index 0000000..972586c Binary files /dev/null and b/_images/hr__cepheid.png differ diff --git a/_images/hr__cv.png b/_images/hr__cv.png new file mode 100644 index 0000000..7894062 Binary files /dev/null and b/_images/hr__cv.png differ diff --git a/_images/hr__delta_scuti.png b/_images/hr__delta_scuti.png new file mode 100644 index 0000000..74ecfb9 Binary files /dev/null and b/_images/hr__delta_scuti.png differ diff --git a/_images/hr__flaring.png b/_images/hr__flaring.png new file mode 100644 index 0000000..085036f Binary files /dev/null and b/_images/hr__flaring.png differ diff --git a/_images/hr__lpv.png b/_images/hr__lpv.png new file mode 100644 index 0000000..9d26297 Binary files /dev/null and b/_images/hr__lpv.png differ diff --git a/_images/hr__periodic.png b/_images/hr__periodic.png new file mode 100644 index 0000000..95ba27b Binary files /dev/null and b/_images/hr__periodic.png differ diff --git a/_images/hr__rr_lyr.png b/_images/hr__rr_lyr.png new file mode 100644 index 0000000..3f849eb Binary files /dev/null and b/_images/hr__rr_lyr.png differ diff --git a/_images/hr__variable.png b/_images/hr__variable.png new file mode 100644 index 0000000..f51ad14 Binary files /dev/null and b/_images/hr__variable.png differ diff --git a/_images/hr__w_uma.png b/_images/hr__w_uma.png new file mode 100644 index 0000000..7ed857a Binary files /dev/null and b/_images/hr__w_uma.png differ diff --git a/_images/mira.png b/_images/mira.png new file mode 100644 index 0000000..e0243be Binary files /dev/null and b/_images/mira.png differ diff --git a/_images/period__beta_lyr.png b/_images/period__beta_lyr.png new file mode 100644 index 0000000..77a9b55 Binary files /dev/null and b/_images/period__beta_lyr.png differ diff --git a/_images/period__cepheid.png b/_images/period__cepheid.png new file mode 100644 index 0000000..915f44f Binary files /dev/null and b/_images/period__cepheid.png differ diff --git a/_images/periodic.png b/_images/periodic.png new file mode 100644 index 0000000..9786ba9 Binary files /dev/null and b/_images/periodic.png differ diff --git a/_images/radec__cepheid.png b/_images/radec__cepheid.png new file mode 100644 index 0000000..e7c1085 Binary files /dev/null and b/_images/radec__cepheid.png differ diff --git a/_images/radec__delta_scuti.png b/_images/radec__delta_scuti.png new file mode 100644 index 0000000..d6f6e0c Binary files /dev/null and b/_images/radec__delta_scuti.png differ diff --git a/_images/radec__flaring.png b/_images/radec__flaring.png new file mode 100644 index 0000000..44f78be Binary files /dev/null and b/_images/radec__flaring.png differ diff --git a/_images/radec__lpv.png b/_images/radec__lpv.png new file mode 100644 index 0000000..3b6faba Binary files /dev/null and b/_images/radec__lpv.png differ diff --git a/_images/radec__periodic.png b/_images/radec__periodic.png new file mode 100644 index 0000000..7889a70 Binary files /dev/null and b/_images/radec__periodic.png differ diff --git a/_images/radec__rr_lyr.png b/_images/radec__rr_lyr.png new file mode 100644 index 0000000..7d1d1f2 Binary files /dev/null and b/_images/radec__rr_lyr.png differ diff --git a/_images/radec__variable.png b/_images/radec__variable.png new file mode 100644 index 0000000..181679e Binary files /dev/null and b/_images/radec__variable.png differ diff --git a/_images/radec__w_uma.png b/_images/radec__w_uma.png new file mode 100644 index 0000000..fac7ed7 Binary files /dev/null and b/_images/radec__w_uma.png differ diff --git a/_images/rr_lyr_ab.png b/_images/rr_lyr_ab.png new file mode 100644 index 0000000..eb17d25 Binary files /dev/null and b/_images/rr_lyr_ab.png differ diff --git a/_images/rr_lyr_c.png b/_images/rr_lyr_c.png new file mode 100644 index 0000000..07cdabd Binary files /dev/null and b/_images/rr_lyr_c.png differ diff --git a/_images/srv.png b/_images/srv.png new file mode 100644 index 0000000..b2bf875 Binary files /dev/null and b/_images/srv.png differ diff --git a/_images/variable.png b/_images/variable.png new file mode 100644 index 0000000..59ea3b5 Binary files /dev/null and b/_images/variable.png differ diff --git a/_images/w_uma.png b/_images/w_uma.png new file mode 100644 index 0000000..be08303 Binary files /dev/null and b/_images/w_uma.png differ diff --git a/_sources/developer.md.txt b/_sources/developer.md.txt new file mode 100644 index 0000000..3af8e72 --- /dev/null +++ b/_sources/developer.md.txt @@ -0,0 +1,236 @@ +# Installation/Developer Guidelines + +## Initial steps + +- Create your own fork the [scope repository](https://github.com/ZwickyTransientFacility/scope) by clicking the "fork" button. Then, decide whether you would like to use HTTPS (easier for beginners) or SSH. +- Following one set of instructions below, clone (download) your copy of the repository, and set up a remote called `upstream` that points to the main `scope` repository. + +### HTTPS: + +```shell script +git clone https://github.com//scope.git && cd scope +git remote add upstream https://github.com/ZwickyTransientFacility/scope.git +``` + +### SSH: + +- [Set up SSH authentication with GitHub](https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh). + +```shell script +git clone git@github.com:/scope.git && cd scope +git remote add upstream git@github.com:ZwickyTransientFacility/scope.git +``` + +## Setting up your environment (Windows/Linux/macOS) + +#### Use a package manager for installation + +We currently recommend running `scope` with Python 3.10. You may want to begin your installation by creating/activating a virtual environment, for example using conda. We specifically recommend installing miniforge3 (https://github.com/conda-forge/miniforge). + +Once you have a package manager installed, run: + +```bash +conda create -n scope-env -c conda-forge python=3.10 healpy +conda activate scope-env +``` + +#### Update your `PYTHONPATH` + +Ensure that Python can import from `scope` by modifying the `PYTHONPATH` environment variable. Use a simple text editor like `nano` to modify the appropriate file (depending on which shell you are using). For example, if using bash, run `nano ~/.bash_profile` and add the following line: + +```bash +export PYTHONPATH="$PYTHONPATH:$HOME/scope" +``` + +Save the updated file (`Ctrl+O` in `nano`) and close/reopen your terminal for this change to be recognized. Then `cd` back into scope and activate your `scope-env` again. + +#### Install pre-commit + +We use `black` to format the code and `flake8` to verify that code complies with [PEP8](https://www.python.org/dev/peps/pep-0008/). +Please install our pre-commit hook as follows: + +```shell script +pip install pre-commit +pre-commit install +``` + +This will check your changes before each commit to ensure that they +conform with our code style standards. We use black to reformat Python +code. + +The pre-commit hook will lint *changes* made to the source. + +--- + +### Instructions for macOS (ARM64/Apple Silicon only) + +Skip to the next section if using Windows/Linux or macOS (AMD64/Intel). + +#### Install tensorflow for macOS/Apple Silicon + +You will need to install the correct version of tensorflow for the ARM64 architecture used by Macs with Apple Silicon. Apple provides an effective version here: `https://developer.apple.com/metal/tensorflow-plugin/`. + +To install tensorflow for macOS (including a version that runs on GPUs), run: +```bash +pip install tensorflow-macos +pip install tensorflow-metal +``` + +#### Modify remaining requirements + +After successfully installing tensorflow-deps, tensorflow-macos, tensorflow-metal, modify the remaining software requirements before installing anything else. Overwrite the `.requirements/dev.txt` file with the updated requirements from `.requirements/dev-M1.txt` by running the following from the scope directory: + +```bash +cp -f .requirements/dev-M1.txt .requirements/dev.txt +``` + +This removes `tensorflow` and `tensorflow-addons` from `.requirements/dev.txt` . The file should now list the following requirements: + +```txt +deepdiff>=5.0 +gsutil>=4.60 +keras-tuner>=1.0.2 +matplotlib>=3.3 +pytest>=6.1.2 +questionary>=1.8.1 +scikit-learn>=0.24.1 +wandb>=0.12.1 +``` + +Continue the installation by following the below instructions for all operating systems. + +--- +### All Windows/Linux/macOS + +#### Install required packages + +Install the required python packages by running: +```bash +pip install -r requirements.txt +``` + +#### Create and modify config.yaml + +From the included config.defaults.yaml, make a copy called config.yaml: + +```bash +cp config.defaults.yaml config.yaml +``` + +Edit config.yaml to include Kowalski instance and Fritz tokens in the associated empty `token:` fields. + +#### Testing +Run `./scope.py test` to test your installation. Note that for the test to pass, you will need access to the Kowalski database. If you do not have Kowalski access, you can run `./scope.py test_limited` to run a more limited (but still useful) set of tests. + +#### Troubleshooting +Upon encountering installation/testing errors, manually install the package in question using `conda install xxx` , and remove it from `.requirements/dev.txt`. After that, re-run `pip install -r requirements.txt` to continue. + +#### Known issues +- Across all platforms, we are currently aware of `scope` dependency issues with Python 3.11. +- Anaconda continues to cause problems with environment setup. +- Using `pip` to install `healpy` on an arm64 Mac can raise an error upon import. We recommend including `healpy` as a requirement during the creation of your `conda` environment. +- On Windows machines, `healpy` and `cesium` raise errors upon installation. + - For `healpy`, see [this](https://healpy.readthedocs.io/en/latest/install.html#installation-on-windows-through-the-windows-subsystem-for-linux) guide for a potential workaround. + - For `cesium`, try to install from the source (https://cesium-ml.org/docs/install.html#from-source) within `scope`. If you will not be running feature generation, this is not a critical error, but there will be points in the code that fail (e.g. `scope.py test`, `tools/generate_features.py`) + +If the installation continues to raise errors, update the conda environment and try again. + +### How to contribute + +Contributions to `scope` are made through [GitHub Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests), a set of proposed commits (or patches): + +1. Download the latest version of `scope`, and create a new branch for your work. + + Here, let's say we want to contribute some documentation fixes; we'll call our branch `rewrite-contributor-guide`. + + ```shell script + git checkout main + git pull upstream main + git checkout -b rewrite-contributor-guide + ``` + +2. Make modifications to `scope` and commit your changes using `git add` and `git commit`. +Each commit message should consist of a summary line and a longer description, e.g.: + + ```text + Rewrite the contributor guide + While reading through the contributor guide, I noticed several places + in which instructions were out of order. I therefore reorganized all + sections to follow logically, and fixed several grammar mistakes along + the way. + ``` + +1. When ready, push your branch to GitHub: + + ```shell script + git push origin rewrite-contributor-guide + ``` + + Once the branch is uploaded, GitHub should print a URL for turning your branch into a pull request. + Open that URL in your browser, write an informative title and description for your pull request, and submit it. + +2. The team will now review your contribution, and suggest changes. +*To simplify review, please limit pull requests to one logical set of changes.* +To incorporate changes recommended by the reviewers, commit edits to your branch, and push to the branch again +(there is no need to re-create the pull request, it will automatically track modifications to your branch). + +1. Sometimes, while you were working on your feature, the `main` branch is updated with new commits, potentially +resulting in conflicts with your feature branch. The are two ways to resolve this situation - merging and rebasing, +please look [here](https://www.atlassian.com/git/tutorials/merging-vs-rebasing) for a detailed discussion. +While both ways are acceptable, since we are squashing commits from a PR before merging, we prefer the first option: + + ```shell script + git merge rewrite-contributor-guide upstream/main + ``` +Developers may merge `main` into their branch as many times as they want to. + +1. Once the pull request has been reviewed and approved by at least one team member, it will be merged into `scope`. + +## Contributing Field Guide sections + +If you would like to contribute a Field Guide section, please follow the steps below. + +- Make sure to follow the steps described above in the "How to contribute" section! + +- Add sections to `config.defaults.yaml` under `docs.field_guide.`. + - Use `docs.field_guide.rr_lyr_ab` as an example. You need to specify the object's + coordinates and a title for the generated light curve plot. Optionally, + you may specify a period [days] - then a phase-folded light curve will also be rendered. + +- Make sure your `config.yaml` file contains a valid Kowalski token. + - See [here](https://github.com/dmitryduev/penquins) on how to generate one + (Kowalski account required). + - You can use `config.defaults.yaml` as a template. + +- Make sure the structure of your config file is the same as the default, + i.e. you propagated the changes in `config.defaults.yaml`. + (otherwise the `scope.py` utility will later complain and ask you to fix that). + +- Add a Markdown file to `doc/` and call it `field_guide__.md`. + - Use [`doc/field_guide__rr_lyrae.md`](field_guide__rr_lyrae.md) as a template. + - Light curve examples will be generated as `data/.png` files using the info + you provided in the config. + - Add the following include statements to [`doc/field_guide.md`](field_guide.md): + +``` +{include} ./field_guide__.md +``` + +- If you wish to render a sample Gaia-based HR diagram, you need to create a "Golden" data set + for that class of objects and put it under `data/golden` as `.csv` + - The `csv` file must follow the same structure as [`data/golden/rr_lyr.csv`]. + Please keep the `csv` header ("ra,dec") and provide object coordinates in degrees. + - The HR diagram will be generated as `data/hr__.png` + +- Run the `./scope.py doc` command to generate the imagery and build the documentation. + - If the build is successful, you can check the results in + [`doc/_build/html/index.html`](_build/html/index.html) + +- Once you're happy with the result, commit the changes to a branch on your fork + and open a pull request on GitHub (see the "How to contribute" section above). + - The GitHub Actions CI will run a subset of the testing/deployment pipeline + for each commit you make to your branch - + make sure you get a green checkmark next to the commit hash. + - Once the PR is reviewed, approved, and merged, + the CI will automatically build and deploy the docs to + [`https://scope.ztf.dev`](https://scope.ztf.dev) diff --git a/_sources/field_guide.md.txt b/_sources/field_guide.md.txt new file mode 100644 index 0000000..3d8bf2c --- /dev/null +++ b/_sources/field_guide.md.txt @@ -0,0 +1,40 @@ +# Field guide + +This guide provides detailed information about the different types of variable sources along with examples of bogus variability. + +Proceed here to interactively inspect the taxonomy +tree we are employing in SCoPe. Please refer to [arXiv:2102.11304](https://arxiv.org/pdf/2102.11304.pdf) +for more details on the taxonomy. + +```{include} ./field_guide__variable.md +``` + +```{include} ./field_guide__periodic.md +``` + +```{include} ./field_guide__rr_lyrae.md +``` + +```{include} ./field_guide__w_uma.md +``` + +```{include} ./field_guide__delta_scuti.md +``` + +```{include} ./field_guide__cepheid.md +``` + +```{include} ./field_guide__CVs.md +``` + +```{include} ./field_guide__flaring.md +``` + +```{include} ./field_guide__beta_lyr.md +``` + +```{include} ./field_guide__lpv.md +``` + +```{include} ./field_guide__bogus.md +``` diff --git a/_sources/field_guide__CVs.md.txt b/_sources/field_guide__CVs.md.txt new file mode 100644 index 0000000..709b45b --- /dev/null +++ b/_sources/field_guide__CVs.md.txt @@ -0,0 +1,55 @@ +## Cataclysmic Variables (cv) +Cataclysmic variables are close binaries with active mass transfer from a late +type main sequence star or brown dwarf to a white dwarf. There are several different +types of CVs, depending on their causes of variability. These include novae (which +have 9-15 mag outbursts from thermonuclear events on the white dwarf surface), dwarf novae which have 2-9 mag outbursts on weeks to decades timescales due to disk instabilities) and novalikes which do not have outbursts but have high and low states of accretion which cause several magnitudes of brightness change. + +### Classification and numbers +- Supertypes + - variable + - aperiodic outbursts + - aperiodic high and low states + - periodic orbital variability +- Subtypes + - Nova + - U Gem dwarf nova + - Z Cam dwarf nova + - SU UMa/WZ Sge dwarf nova + - Novalike + +- Occurrence rate: common, several thousand expected in ZTF data + + +### ZTF light curves +![ZTF CV U Gem](data/cv_U_Gem.png) +![ZTF CV Z Cam](data/cv_Z_Cam.png) +![ZTF CV SU UMa](data/cv_SU_UMa.png) +![ZTF CV Novalike](data/cv_Novalike.png) + +#### Description +CVs are easy to recognize by their distinctive light curve shape, colors and +high amplitude variability. The outbursts are non-periodic. +They can sometimes be confused with supernovae, flare stars or long period variables. + +#### Light curve characteristics +- non-periodic variable but recur on some timescale +- outburst timescale range: days to decades +- amplitude: 9-15 mag (nova), 2-9 mag (dwarf nova), 1-4 mag (novalike) +- light curve shape: + - sawtooth; steep rise and slow decay (subtype nova) + - symmetrical to slightly sawtooth (subtype U Gem) + - standstills about 1 mag below outburst level for weeks (subtype Z Cam) + - fast rise and extended plateau for 1-2 weeks followed by steeper decline (subtype SU UMa/WZ Sge) + - extended (days-weeks) states at either high or low brightness +- can show periodic modulation of the light curve on orbital timescales of hours + + +#### Other characteristics and selection methods +- intrinsic CV colors: blue, (g-r < 0.6). + Reddening is usually not important except for places in the galactic plane. +- absolute magnitude at quiescence: 85 expected in ZTF data + +### ZTF light curves +![ZTF betalyr](data/beta_lyr.png) + +#### Description +Any type of star can be in an eclipsing binary (so they may be small, large, hot, cool, etc.), which in turn can lead to a large range in eclipse amplitudes (though typically these are between 0.1 and ~1 mag, with most in the ~0.3 to 0.75 mag range) or eclipse periods (though our observations are typically only sensitive to periods between 0.1 to ~20 days). + +#### Light curve characteristics +- periodic variable +- Range of amplitudes (~0.2 to >1 mag) +- Intermediate periods (log Period between -0.5 and 1.4) +- light curve shape: EB, round or sinusoidal light curves, with imposed "V-shape" dips in the phase folded light curve + +![HR diagram of Beta Lyrae](data/hr__beta_lyr.png) + +![Period histogram of Beta Lyrae](data/period__beta_lyr.png) + +### References and further reading: +- Sterken & Jasschek: Light curves of variable stars diff --git a/_sources/field_guide__bogus.md.txt b/_sources/field_guide__bogus.md.txt new file mode 100644 index 0000000..97ffd74 --- /dev/null +++ b/_sources/field_guide__bogus.md.txt @@ -0,0 +1,16 @@ +## Bogus variability (bogus) + +Not all light curve variability pertains to a source's intrinsic astrophysical nature. Some is caused by nearby extended objects, bright stars, blends and image artifacts, and being aware of how such bogus light curves appear can help avoid confusion. + +### ZTF light curves +![ZTF bogus](data/bogus_1.png) +![ZTF bogus](data/bogus_2.png) + +#### Description +The first light curve above demonstrates a saturation ghost artifact, and the second light curve suffers from another kind of artifact. These artifacts were identified and affected data masked after ZTF began, but data from earlier releases were not retroactively masked. This produces the apparent cutoff in variability after a certain point in time. + +#### Light curve characteristics +The light curves appear to be "flaring" with departures from the median by multiple magnitudes which suddenly stop in later data. This cutoff corresponds to the time when a new method of processing the data was used to mask affected points. + +### References and further reading: +- [ZTF Explanatory Supplement (esp. Appendix B)](https://irsa.ipac.caltech.edu/data/ZTF/docs/ztf_explanatory_supplement.pdf) diff --git a/_sources/field_guide__cepheid.md.txt b/_sources/field_guide__cepheid.md.txt new file mode 100644 index 0000000..e9d7b49 --- /dev/null +++ b/_sources/field_guide__cepheid.md.txt @@ -0,0 +1,44 @@ +## Classical Cepheids (ceph) +Classical Cepheids are young, bright (100-10,000 solar luminosities) supergiant stars that pulsate with periods of 1 to 100 days (typically several days). They are located in the main instability strip in the H-R diagram. Cepheids follow a famous pulsation period-luminosity relation, allowing the absolute magnitude of a Cepheid, and thus its distance, to be inferred from the pulsation period. Thus, Cepheids are used to measure distances to nearby galaxies. + +### Classification and numbers +- Supertypes + - variable + - periodic + - pulsator +- Occurrence rate: rare, about 103 expected in ZTF data, mostly in the Galactic plane and in M31 + + +### ZTF light curves +![ZTF cepheids](data/cepheid_F.png) +![ZTF cepheids](data/cepheid_F_1.png) +![ZTF cepheids](data/cepheid_1O.png) +![ZTF cepheids](data/cepheid_F1O.png) + +#### Description +Fundamental-mode Cepheids are easy to recognise by their distinctive sawtooth light curve shape (with a rapid rise to maximum light and a slower decline) and period range (from 1 to 100 days). A secondary bump may be seen in the light curves of some Cepheids with periods in the range 6-20 days. Cepheids pulsating in the first overtone have lower amplitudes and more symmetric light curves than fundamental-mode Cepheids. Their periods (in the Milky Way) range from 0.24 to 8 days. The lower period limit is arbitrary since there is no natural boundary between first-overtone Cepheids and delta Scuti stars. Some Cepheids pulsate both in the fundamental mode and first overtone, the period ratio ranges from 0.68 to 0.77. + +#### Light curve characteristics +- periodic variable +- period range: 1-100 days (fundamental-mode pulsators), 0.24-8 days (first-overtone pulsators) +- amplitude: moderate amplitude (~0.3 to 0.8 mag) +- light curve shape: + - smooth, sawtooth variations (blue/green filters show stronger sawtooth pattern); steep rise and slow decay + - Classical Cepheids with pulsation periods 6-20 days may have a secondary bump + +#### Other characteristics and selection methods +- intrinsic Cepheids colors: Bp-Rp = 0.8 -- 2.0 mag, but as these stars are located near the Galactic plane, the reddening may be significant +- absolute magnitude: -6The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. I. Classical Cepheids in the Large Magellanic Cloud +- Udalski, A. et al. (2018) OGLE Collection of Galactic Cepheids +- Rimoldini, L. et al. (2019) Gaia Data Release 2. All-sky classification of high-amplitude pulsating stars +- Skowron, D. et al. (2020) A three-dimensional map of the Milky Way using classical Cepheid variable stars diff --git a/_sources/field_guide__delta_scuti.md.txt b/_sources/field_guide__delta_scuti.md.txt new file mode 100644 index 0000000..824ae28 --- /dev/null +++ b/_sources/field_guide__delta_scuti.md.txt @@ -0,0 +1,35 @@ +## Delta Scuti (dscu) +Delta Scuti variables are classic pulsating stars (i.e., they are stars passing through the [instability strip](https://en.wikipedia.org/wiki/Instability_strip)). As these stars expand and contract (i.e. pulsate) their size and temperature changes leading to regular, smooth variations in their brightness. Delta Scuti stars are smaller than both Cepheids and RR Lyrae stars, which leads to a short period of oscillations (typically anywhere between 0.03 days and 0.3 days). + +### Classification and numbers +- Supertypes + - variable + - periodic + - pulsator +- Occurrence rate: very common, about 104 expected in ZTF data + + +### ZTF light curves +![ZTF delta_scuti](data/delta_scuti.png) + +#### Description +Delta Scuti are easy to recognise by their distinctive light curve shape and period range, which distinguishes them from RR Lyrae and Cepheids. + +#### Light curve characteristics +- periodic variable +- period range: 0.03-0.3 days +- amplitude: Small amplitude (between 0.05 and 0.3) +- light curve shape: + - smooth, sawtooth variations (blue/green filters show stronger sawtooth pattern); steep rise and slow decay + +#### Other characteristics and selection methods +- intrinsic Delta Scuti colors: blue, that of A/F type main sequence stars (g-r = -0.1 -- 0.5). + Reddening can be significant since these stars can be detected at large distances. +- absolute magnitude: 05 expected in ZTF data +- Non LPV wth Long Periods + - RV Tau - Cepheid IIs +- Other possible confusions + - YSOs - their variations tend to be over shorter periods + +### ZTF light curves +![ZTF lpv](data/mira.png) +![ZTF lpv](data/srv.png) + +#### Description +Long period variables have periods from several tens of days to over thousand day and are +easy to identify due to the slow variations. + +#### Light curve characteristics +- periodic variable +- period range: 100-1000 days +- amplitude: over a mag (Mira), or a few tenths of a mag to 1 or 2 mags (semiregulars) +- light curve shape: + - periodic sinusoidal (Mira) + - semiregular (Semiregular) + +#### Other characteristics and selection methods +- intrinsic lpv colors: red +- absolute magnitude: + +![HR diagram of LPV](data/hr__lpv.png) + +![RA/Dec diagram of LPV](data/radec__lpv.png) + +### References and further reading: +- Mowlawi et al., 2018, A&A 618, A58, The first Gaia catalogue of long-period variable candidates [arxiv:1805.02035](https://arxiv.org/pdf/1805.02035.pdf) +- Soszynski et al., 2009, AcA, 59, 239S, The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. IV. Long-Period Variables in the Large Magellanic Cloud [arxix:0910.1354](https://arxiv.org/pdf/0910.1354.pdf) +- Soszynski et al., 2008, AcA, 58, 293S, The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. II.Type II Cepheids and Anomalous Cepheids in the Large Magellanic Cloud [arxiv:0811.3636](https://arxiv.org/pdf/0811.3636.pdf) diff --git a/_sources/field_guide__periodic.md.txt b/_sources/field_guide__periodic.md.txt new file mode 100644 index 0000000..5d1ff8d --- /dev/null +++ b/_sources/field_guide__periodic.md.txt @@ -0,0 +1,30 @@ +## Periodic Variables (pnp) +Periodic Variables are objects that exhibit repeating sequences of values over a fixed length of time, known as the period. +Many astrophysical objects exhibit periodic behavior, including eclipsing binaries, pulsators, etc. + +### Classification and numbers +- Supertypes + - variable +- Subtypes + - Eclipsing + - Sinusoidal + - Sawtooth + - Elliptical + +### ZTF light curves +![ZTF periodic](data/periodic.png) + +#### Description +Periodic variables have periods ranging from minutes to over a thousand days with millimagnitude to magnitude level variations. + +#### Light curve characteristics +- periodic variable: objects that exhibit repeating sequences of values over a fixed length of time +- period range: 0.001-1000 days +- amplitude: varies from survey precision to more than a magnitude + +![HR diagram of Periodic](data/hr__periodic.png) + +![RA/Dec diagram of Periodic](data/radec__periodic.png) + +### References and further reading: +- Drake et al., 2014, ApJS 618 213 9, The Catalina Surveys Periodic Variable Catalog [arxiv:1405.4290](https://arxiv.org/pdf/1405.4290.pdf) diff --git a/_sources/field_guide__rr_lyrae.md.txt b/_sources/field_guide__rr_lyrae.md.txt new file mode 100644 index 0000000..bc9a5e5 --- /dev/null +++ b/_sources/field_guide__rr_lyrae.md.txt @@ -0,0 +1,49 @@ +## RR Lyrae (rrlyr) +RR Lyrae are pulsating horizontal branch dA/dF stars with a mass 0.5 of Solar masses. +They are part of the main 'instability strip' in the HR-diagram, +where stars pulsate due to the double ionisation of He. +The two main subtypes are `ab` and `c`, + +### Classification and numbers +- Supertypes + - variable + - periodic + - pulsator +- Subtypes + - RR Lyrae ab + - RR Lyrae c +- Occurrence rate: very common, about 105 expected in ZTF data + + +### ZTF light curves +![ZTF rrlyr ab](data/rr_lyr_ab.png) +![ZTF rrlyr c](data/rr_lyr_c.png) + +#### Description +RR Lyrae (ab) are easy to recognise by their distinctive light curve shape and +high amplitude variability. +RR Lyrae (c) are a bit more of a challenge since their light curve shape is more sinusoidal. +For low-SNR cases they can sometimes be confused with contact binaries (EW), +which occur at similar periods and have sinusoidal-like light curves. + +#### Light curve characteristics +- periodic variable +- period range: 0.2-1 days +- amplitude: up to 1 mag (subtype ab), or 0.5 mag (subtype c) +- light curve shape: + - sawtooth; steep rise and slow decay (subtype ab) + - periodic sinusoidal (subtype c) +- can show modulation of the light curve shape on timescales of ~100 days (Blazhko effect) + + +#### Other characteristics and selection methods +- intrinsic RR Lyrae colors: blue, that of A/F type main sequence stars (g-r = -0.1 -- 0.5). + Reddening can be significant since these stars can be detected at large distances. +- absolute magnitude: -10.1 mag for objects near the detection limit. +Many astrophysical objects exhibit variable behavior, including periodic variables such as eclipsing binaries, pulsators, etc, and non-periodic variables such as AGN and YSOs. + +### Classification and numbers +- Subtypes + - Irregular + - Flaring + - Periodic + - Dipping + - Long Time Scale + +### ZTF light curves +![ZTF variable](data/variable.png) + +#### Description +Most stars are likely to be variable at some level. Therefore, variable is defined to be those varying at a statistically varying level, with millimagnitude to magnitude level variations. + +#### Light curve characteristics +- amplitude: varies from survey precision to more than a magnitude + +![HR diagram of Variable](data/hr__variable.png) + +![RA/Dec diagram of Variable](data/radec__variable.png) + +### References and further reading: +- Jayasinghe et al., 2018, MNRAS 447 3, The ASAS-SN catalogue of variable stars I: The Serendipitous Survey [arxiv:1803.01001](https://arxiv.org/pdf/1803.01001.pdf) diff --git a/_sources/field_guide__w_uma.md.txt b/_sources/field_guide__w_uma.md.txt new file mode 100644 index 0000000..7e75e24 --- /dev/null +++ b/_sources/field_guide__w_uma.md.txt @@ -0,0 +1,35 @@ +## W Uma (wuma) +W UMa stars are main-sequence overcontact binaries. In overcontact binaries both stars are too large for their Roche lobe share a common envelope and can exchange mass and energy. The mass-ratio of the system ranges from 1 to 10 in extreme cases. Components can have different raddii and surface brightness with temperatures ranging from 4000 to 9000K. + +### Classification and numbers +- Supertypes + - variable + - periodic + - binary + - eclipsing +- Occurrence rate: very common, about 105 expected in ZTF data + +### ZTF light curves +![ZTF wuma](data/w_uma.png) + +#### Description +Contact binary lightcurves show a distinctive shape that shows two eclipses which do smoothly transition over. Eclipses can have a flat bottom. The eclipse depth is often identical, but can be show slightly different depths. In rare cases there can be differences in the maxima of the lightcurves (e.g. due to starspots). + +#### Light curve characteristics +- periodic variable +- period range: 0.22-0.8 days +- amplitude: up to 0.75 mag +- light curve shape: EW, two 'V'-shaped eclipses with smooth transitions +- eclipses often equal depth, within 0.1mag + +#### Other characteristics and selection methods +- g-r = -0.1 -- 1.0. Short period systems are typically redder. +- absolute magnitudes are similar to main-sequence stars + +![HR diagram of W Uma](data/hr__w_uma.png) + +![RA/Dec diagram of W Uma](data/radec__w_uma.png) + +### References and further reading: +- Sterken & Jasschek: Light curves of variable stars +- Marsh et al, MNRAS 465, 4678–4689, 2017 diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..da5b930 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,12 @@ +ZTF Variable Source Classification Project +========================================== + +.. toctree:: + :maxdepth: 2 + + developer + quickstart + usage + scanner + field_guide + license diff --git a/_sources/license.md.txt b/_sources/license.md.txt new file mode 100644 index 0000000..1f8761f --- /dev/null +++ b/_sources/license.md.txt @@ -0,0 +1,4 @@ +# License + +```{include} ../LICENSE +``` diff --git a/_sources/quickstart.md.txt b/_sources/quickstart.md.txt new file mode 100644 index 0000000..6fad4ae --- /dev/null +++ b/_sources/quickstart.md.txt @@ -0,0 +1,117 @@ +# Quick Start Guide + +This guide is intended to facilitate quick interactions with SCoPe code after you have completed the **Installation/Developer Guidelines** section. More detailed usage info can be found in the **Usage** section. **All of the following examples assume that SCoPe is installed in your home directory. If the `scope` directory is located elsewhere, adjust the example code as necessary.** + +## Modify `config.yaml` +To start out, provide SCoPe your training set's filepath using the `training:` `dataset:` field in `config.yaml`. The path should be a partial one starting within the `scope` directory. For example, if your training set `trainingSet.parquet` is within the `tools` directory (which itself is within `scope`), provide `tools/trainingSet.parquet` in the `dataset:` field. + +## Training + +Train an XGBoost binary classifier using the following code: + +``` +./scope.py train --tag=vnv --algorithm=xgb --group=ss23 --period_suffix=ELS_ECE_EAOV --epochs=30 --verbose --save --plot --skip_cv +``` + +### Arguments: +`--tag`: the abbreviated name of the classification to train a binary classifier. A list of abbreviations and definitions can be found in the **Guide for Fritz Scanners** section. + +`--algorithm`: SCoPe currently supports neural network (dnn) and XGBoost (xgb) algorithms. + +`--group`: if `--save` is passed, training results are saved to the group/directory named here. + +`--period_suffix`: SCoPe determines light curve periods using GPU-accelerated algorithms. These algorithms include a Lomb-Scargle approach (ELS), Conditional Entropy (ECE), Analysis of Variance (AOV), and an approach nesting all three (ELS_ECE_EAOV). Periodic features are stored with the suffix specified here. + +`--min_count`: requires at least min_count positive examples to run training. + +`--epochs`: neural network training takes an --epochs argument that is set to 30 here. + +***Notes:*** +- *The above training runs the XGB algorithm by default and skips cross-validation in the interest of time. For a full run, you can remove the `--skip_cv` argument to run a cross-validated grid search of XGB hyperparameters during training.* + +- *DNN hyperparameters are optimized using a different approach - Weights and Biases Sweeps (https://docs.wandb.ai/guides/sweeps). The results of these sweeps are the default hyperparameters in the config file. To run another round of sweeps for DNN, create a WandB account and set the `--run_sweeps` keyword in the call to `scope.py train`.* + +- *SCoPe DNN training does not provide feature importance information (due to the hidden layers of the network). Feature importance is possible to estimate for neural networks, but it is more computationally expensive compared to this "free" information from XGB.* + +### Train multiple classifiers with one script + +Create a shell script that contains multiple calls to `scope.py train`: +``` +./scope.py create_training_script --filename=train_xgb.sh --min_count=1000 --algorithm=xgb --period_suffix=ELS_ECE_EAOV --add_keywords="--save --plot --group=ss23 --epochs=30 --skip_cv" +``` + +Modify the permissions of this script by running `chmod +x train_xgb.sh`. Run the generated training script in a terminal window (using e.g. `./train_xgb.sh`) to train multiple label sequentially. + +***Note:*** +- *The code will throw an error if the training script filename already exists.* + +### Running training on HPC resources + +`train_algorithm_slurm.py` and `train_algorithm_job_submission.py` can be used generate and submit `slurm` scripts to train all classifiers in parallel using HPC resources. + +## Plotting Classifier Performance +SCoPe saves diagnostic plots and json files to report each classifier's performance. The below code shows the location of the validation set results for one classifier. + +``` +import pathlib +import json + +path_model = pathlib.Path.home() / "scope/models_xgb/ss23/vnv" +path_stats = [x for x in path_model.glob("*plots/val/*stats.json")][0] + +with open(path_stats) as f: + stats = json.load(f) +``` + +The code below makes a bar plot of the precision and recall for this classifier: +``` +import matplotlib.pyplot as plt + +plt.figure(figsize=(6,4)) +plt.rcParams['font.size']=13 +plt.title(f"XGB performance (vnv)") +plt.bar("vnv", stats['precision'], color='blue',width=1,label='precision') +plt.bar("vnv", stats['recall'], color='red',width=0.6, label='recall') +plt.legend(ncol=2,loc=0) +plt.ylim(0,1.15) +plt.xlim(-3,3) +plt.ylabel('Score') + +``` +This code may also be placed in a loop over multiple labels to compare each classifier's performance. + +## Inference + +Use `tools/inference.py` to run inference on a field (297) of features (within a directory called `generated_features`). The classifiers used for this inference are within the `ss23` directory/group specified during training. + +``` +./scope.py create_inference_script --filename=get_all_preds_xgb.sh --group_name=ss23 --algorithm=xgb --period_suffix=ELS_ECE_EAOV --feature_directory=generated_features +``` + +Modify the permissions of this script using `chmod +x get_all_preds_xgb.sh`, then run on the desired field: +``` +./get_all_preds_xgb.sh 297 +``` + +***Notes:*** +- *`scope.py create_inference_script` will throw an error if the inference script filename already exists.* +- *Inference begins by imputing missing features using the strategies specified in the `features:` section of the config file.* + +### Running inference on HPC resources + +`run_inference_slurm.py` and `run_inference_job_submission.py` can be used generate and submit `slurm` scripts to run inference for all classifiers in parallel using HPC resources.* + +## Examining predictions + +The result of running the inference script will be a parquet file containing some descriptive columns followed by columns containing for each classification's probability for each source in the field. By default, the file is located as follows: + +``` +path_preds = pathlib.Path.home() / "scope/preds_xgb/field_297/field_297.parquet" +``` + +SCoPe's `read_parquet` utility offers an easy way to read the predictions file and provide it as a `pandas` DataFrame. + +``` +from scope.utils import read_parquet +preds = read_parquet(path_preds) +``` diff --git a/_sources/scanner.md.txt b/_sources/scanner.md.txt new file mode 100644 index 0000000..c2876df --- /dev/null +++ b/_sources/scanner.md.txt @@ -0,0 +1,86 @@ +# Guide for Fritz Scanners +This page is a guide the SCoPe classification process. It contains sections on the classification taxonomies we use, definitions of each classification that may be posted to Fritz, An explanation of the binary classifier algorithms we train and the workflow we run on transient candidates, and plots of each classifer's current precision and recall scores. + +## Two classification taxonomies +The goal of SCoPe is to use machine learning algorithms to reliably classify each ZTF source with as much detail as possible. The level of classification detail will vary across the broad range of ZTF sources. Factors that can affect the level of source classification include the quantity and quality of the data, the similarity of the training set to the source in question, and the existence of new kinds of variable sources in the data. With this in mind, we adopt two kinds of taxonomies which contain the labels we use to classify ZTF sources. + +### Ontological classifications +The first taxonomy is ontological and contains specific kinds of astrophysical sources. On Fritz, this is called `Sitewide Taxonomy`. See the table below for the current ontological classifications, training set abbreviations and definitions, ordered by low to high detail: + +| classification | abbreviation | definition | +| -------------- | ------------ | ---------- | +| pulsator | `puls` | Pulsating star | +| AGN | `agn` | Active Galactic Nucleus | +| YSO | `yso` | Young Stellar Object | +| CV | `cv` | Cataclysmic Variable | +| binary | `bis` | binary system | +| Cepheid | `ceph` | Cepheid variable star | +| Delta Scu | `dscu` | Delta Scu star | +| Pop II Cepheid | `ceph2` | Population II Cepheid variable star | +| RR Lyr | `rrlyr` | RR Lyr star | +| LPV | `lpv` | Long Period Variable star | +| MS-MS | `emsms` | Eclipsing MS-MS binary | +| W UMa | `wuma` | W UMa binary system | +| Beta Lyr | `blyr` | Beta Lyr binary | +| RS CVn | `rscvn` | RS CVn binary | +| RRab | `rrab` | RR Lyr ab star | +| RRc | `rrc` | RR Lyr c star | +| RRd | `rrd` | RR Lyr d star | +| Mira | `mir` | Mira variable star | +| SRV | `srv` | Semi-regular variable star | +| OSARG | `osarg` | OGLE small-amplitude red giant star | + +*Refer to the field guide for more information about these classes.* + +### Phenomenological classifications +In consideration of the importance of having some information about a source (even if not a definitive ontological classification), we also employ a phenomenological taxonomy with labels that describe light curve-based features. This taxonomy is called `SCoPe Phenomenological Taxonomy` on Fritz. See the table below for the current phenomenological classifications, training set abbreviations and definitions: + +| classification | abbreviation | definition | +| -------------- | ------------ | ---------- | +| variable | `vnv` | Light curve shows variability | +| periodic | `pnp` | periodic variability | +| irregular | `i` | irregular variability | +| eclipsing | `e` | eclipsing phenomenology | +| sinusoidal | `sin` | sinusoidal phenomenology | +| sawtooth | `saw` | sawtooth phenomenology | +| long timescale | `longt` | long timescale variability | +| flaring | `fla` | flaring phenomenology | +| EA | `ea` | EA eclipsing phenomenology | +| EB | `eb` | EB eclipsing phenomenology | +| EW | `ew` | EW eclipsing phenomenology | +| blend | `blend` | blended sources phenomenology | + +*Refer to the field guide for more information about these classes.* + +## Independent binary classifiers +We train a binary classifier for every label in these taxonomies. This choice allows more than one classification to be assigned to a source, often with varying levels of detail. This is important not only due to the practical challenges outlined above, but also because some sources merit more than one classification (e.g. an eclipsing binary system containing a flaring star). The independence of binary classifiers allows for future updates to the taxonomies without a revision of the current results from each existing classifier. + +We classify each ZTF light curve separately in recognition of systematics that may exist between ZTF fields and bands. Before posting results to Fritz, we aggregate these classification results on a source-by-source basis. The details of this workflow are described in the next section. + +## Classification process + +### Machine learning algorithms/training +We currently employ a convolutional/dense neural network (DNN) and gradient-boosted decision trees (XGBoost, XGB) to perform classification. The process is initially a regression problem, with classifiers assigning a classification probability that ranges between 0 and 1 for each source. We then apply a probability threshold to determine whether to include each source as a positive or negative example when minimizing the binary cross-entropy loss function. + +We trained each binary classifier algorithm using a training set containing ~80,000 sources labeled manually (~170,000 light curves). The training set is available on Fritz in group 1458 (Golden Dataset Unique Sources). + +### Repeated workflow for transients +The following SCoPe workflow currently runs every two hours as a cron job: + +- Query Fritz for GCN events within the last 7 days +- For each event, query all candidates within the 95% confidence localization +- For each candidate, query existing ZTF DR16 light curves within 0.5 arcsec +- For ZTF light curves with 50 or more epochs of data, generate SCoPe features and run through all trained binary classifiers (DNN and XGB) +- Consolidate light curve classifications by matching Gaia, AllWISE or Pan-STARRS1 IDs, computing the mean probabilities among all light curves for a source. + - Each source will now have a set of classifications from both the DNN and XGB algorithms. +- For each ZTF source, compute mean classification probabilities between DNN and XGB results. +- For classifications having a mean probability ≥ 0.7, post to the candidate page. + - SCoPe classifications will be color-coded with blue text (instead of the default black) and will be preceded by the `ML: ` prefix. + - ***Note that these classifications do not pertain to the candidate itself, but persistent ZTF sources within 0.5 arcsec.*** + - The time series and phase-folded ZTF light curves used for classification are posted as comments on their associated candidate. + + +## Classifier performance +The bar plots below show the precision and recall metrics for the DNN and XGB classifiers. 'Missing' bars indicate classifiers which did not have enough examples to train successfully. +dnn classifier precision/recall +xgb classifier precision/recall diff --git a/_sources/usage.md.txt b/_sources/usage.md.txt new file mode 100644 index 0000000..95d6929 --- /dev/null +++ b/_sources/usage.md.txt @@ -0,0 +1,494 @@ +# Usage + +## Download ids for ZTF fields/CCDs/quadrants + +- Create HDF5 file for single CCD/quad pair in a field: + +```sh +./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --ccd 2 --quad 3 --minobs 20 --skip 0 --limit 10000 +``` + +- Create multiple HDF5 files for some CCD/quad pairs in a field: + +```sh +./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --multi-quads --ccd-range 1 8 --quad-range 2 4 --minobs 20 --limit 10000 +``` + +- Create multiple HDF5 files for all CCD/quad pairs in a field: + +```sh +./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --multi-quads --minobs 20 --limit 10000 +``` + +- Create single HDF5 file for all sources in a field: + +```sh +./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --whole-field +``` + +## Download SCoPe features for ZTF fields/CCDs/quadrants + +- First, run `get_quad_ids.py` for desired fields/ccds/quads. + +- Download features for all sources in a field: +```sh +./tools/get_features.py --field 301 --whole-field +``` + +- Download features for all sources in a field, imputing missing features using the strategies in `config.yaml`: +```sh +./tools/get_features.py --field 301 --whole-field --impute-missing-features +``` + +- Download features for a range of ccd/quads individually: +```sh +./tools/get_features.py --field 301 --ccd-range 1 2 --quad-range 3 4 +``` + +- Download features for a single pair of ccd/quad: +```sh +./tools/get_features.py --field 301 --ccd-range 1 --quad-range 2 +``` + + +## Training deep learning models + +For details on the SCoPe taxonomy and architecture, +please refer to [arxiv:2102.11304](https://arxiv.org/pdf/2102.11304.pdf). + +- The training pipeline can be invoked with the `scope.py` utility. For example: + +```sh +./scope.py train --tag=vnv --path_dataset=data/training/dataset.d15.csv --batch_size=64 --epochs=100 --verbose=1 --pre_trained_model=models/experiment/vnv/vnv.20221117_001502.h5 +``` + +Refer to `./scope.py train --help` for details. + +- All the necessary metadata/configuration could be defined in `config.yaml` under `training`, +but could also be overridden with optional `scope.py train` arguments, e.g. +`./scope.py train ... --batch_size=32 --threshold=0.6 ...`. + +- By default, the pipeline uses the `DNN` models defined in `scope/nn.py` using the tensorflow's `keras` functional API. SCoPe also supports an implementation of XGBoost (set `--algorithm=xgb`; see `scope/xgb.py`). +- If `--save` is specified during `DNN` training, an HDF5 file of the model's layers and weights will be saved. This file can be directly used for additional training and inferencing. For `XGB`, a json file will save the model along with a `.params` file with the model parameters. +- The `Dataset` class defined in `scope.utils` hides the complexity of our dataset handling "under the rug". +- You can request access to a Google Drive folder containing the latest trained models [here](https://drive.google.com/drive/folders/1_oLBxveioKtw7LyMJfism745USe9tEGZ?usp=sharing). + +- Feature name sets are specified in `config.yaml` under `features`. + These are referenced in `config.yaml` under `training.classes..features`. + +- Feature stats to be used for feature scaling/standardization before training + is defined in `config.yaml` under `feature_stats`. + +- We use [Weights & Biases](https://wandb.com) to track experiments. + Project details and access credentials can be defined in `config.yaml` under `wandb`. + +Initially, SCoPe used a `bash` script to train all classifier families: + +```sh +for class in pnp longt i fla ew eb ea e agn bis blyr ceph dscu lpv mir puls rrlyr rscvn srv wuma yso; \ + do echo $class; \ + for state in 1 2 3 4 5 6 7 8 9 42; \ + do ./scope.py train \ + --tag=$class --path_dataset=data/training/dataset.d15.csv \ + --scale_features=min_max --batch_size=64 \ + --epochs=300 --patience=30 --random_state=$state \ + --verbose=1 --gpu=1 --conv_branch=true --save; \ + done; \ +done; +``` + +Now, a training script containing one line per class to be trained can be generated by running `./scope.py create_training_script`, for example: +```bash +./scope.py create_training_script --filename='train_dnn.sh' --min_count=100 --pre_trained_group_name='experiment' --add_keywords='--save --batch_size=32 --group=new_experiment --period_suffix=ELS_ECE_EAOV' +``` +A path to the training set may be provided as input to this method or otherwise taken from `config.yaml` (`training: dataset:`). To continue training on existing models, specify the `--pre_trained_group_name` keyword containing the models in `create_training_script`. If training on a feature collection containing multiple sets of periodic features (from different algorithms), set the suffix corresponding to the desired algorithm using `--period_suffix` or the `features: info: period_suffix:` field in the config file. The string specified in `--add_keywords` serves as a catch-all for additional keywords that the user wishes to be included in each line of the script. + +If `--pre_trained_group_name` is specified and the `--train_all` keyword is set, the output script will train all classes specified in `config.yaml` regardless of whether they have a pre-trained model. If `--train_all` is not set (the default), the script will limit training to classes that have an existing trained model. + +## Running inference + +Running inference requires the following steps: download ids of a field, download (or generate) features for all downloaded ids, run inference for all available trained models, e.g: +``` +./tools/get_quad_ids.py --field= --whole_field +./tools/get_features.py --field= --whole_field --impute_missing_features +``` +OR +``` +./tools/generate_features.py --field --ccd --quad --doGPU +``` + +The optimal way to run inference is through an inference script generated by running `./scope.py create_inference_script` with the appropriate arguments. After creating the script and adding the needed permissions (e.g. using `chmod +x`), the commands to run inference on the field `` are (in order): +``` +./get_all_preds.sh +``` + +* Requires `models_dnn/` or `models_xgb/` folder in the root directory containing the pre-trained models for DNN and XGBoost, respectively. +* In a `preds_dnn` or `preds_xgb` directory, creates a single `.parquet` (and optionally `.csv`) file containing all ids of the field in the rows and inference scores for different classes across the columns. +* If running inference on specific ids instead of a field/ccd/quad (e.g. on GCN sources), run `./get_all_preds.sh specific_ids` + +## Handling different file formats +When our manipulations of `pandas` dataframes is complete, we want to save them in an appropriate file format with the desired metadata. Our code works with multiple formats, each of which have advantages and drawbacks: + +- Comma Separated Values (CSV, .csv): in this format, data are plain text and columns are separated by commas. While this format offers a high level of human readability, it also takes more space to store and a longer time to write and read than other formats. + + `pandas` offers the `read_csv()` function and `to_csv()` method to perform I/O operations with this format. Metadata must be included as plain text in the file. + +- Hierarchical Data Format (HDF5, .h5): this format stores data in binary form, so it is not human-readable. It takes up less space on disk than CSV files, and it writes/reads faster for numerical data. HDF5 does not serialize data columns containing structures like a `numpy` array, so file size improvements over CSV can be diminished if these structures exist in the data. + + `pandas` includes `read_hdf()` and `to_hdf()` to handle this format, and they require a package like [`PyTables`](https://www.pytables.org/) to work. `pandas` does not currently support the reading and writing of metadata using the above function and method. See `scope/utils.py` for code that handles metadata in HDF5 files. + +- Apache Parquet (.parquet): this format stores data in binary form like HDF5, so it is not human-readable. Like HDF5, Parquet also offers significant disk space savings over CSV. Unlike HDF5, Parquet supports structures like `numpy` arrays in data columns. + + While `pandas` offers `read_parquet()` and `to_parquet()` to support this format (requiring e.g. [`PyArrow`](https://arrow.apache.org/docs/python/) to work), these again do not support the reading and writing of metadata associated with the dataframe. See `scope/utils.py` for code that reads and writes metadata in Parquet files. + +## Mapping between column names and Fritz taxonomies +The column names of training set files and Fritz taxonomy classifications are not the same by default. Training sets may also contain columns that are not meant to be uploaded to Fritz. To address both of these issues, we use a 'taxonomy mapper' file to connect local data and Fritz taxonomies. + +This file must currently be generated manually, entry by entry. Each entry's key corresponds to a column name in the local file. The set of all keys is used to establish the columns of interest for upload or download. For example, if the training set includes columns that are not classifications, like RA and Dec, these columns should not be included among the entries in the mapper file. The code will then ignore these columns for the purpose of classification. + +The fields associated with each key are `fritz_label` (containing the associated Fritz classification name) and `taxonomy_id` identifying the classification's taxonomy system. The mapper must have the following format, also demonstrated in `golden_dataset_mapper.json` and `DNN_AL_mapper.json`: + +``` +{ +"variable": + {"fritz_label": "variable", + "taxonomy_id": 1012 + }, + +"periodic": + {"fritz_label": "periodic", + "taxonomy_id": 1012 + }, + + . + . [add more entries here] + . + +"CV": + {"fritz_label": "Cataclysmic", + "taxonomy_id": 1011 + } +} + +``` + +## Generating features +Code has been adapted from [ztfperiodic](https://github.com/mcoughlin/ztfperiodic) and other sources to calculate basic and Fourier stats for light curves along with other features. This allows new features to be generated with SCoPe, both locally and using GPU cluster resources. The feature generation script is contained within `tools/generate_features.py`. + +Currently, the basic stats are calculated via `tools/featureGeneration/lcstats.py`, and a host of period-finding algorithms are available in `tools/featureGeneration/periodsearch.py`. Among the CPU-based period-finding algorithms, there is not yet support for `AOV_cython`. For the `AOV` algorithm to work, run `source build.sh` in the `tools/featureGeneration/pyaov/` directory, then copy the newly created `.so` file (`aov.cpython-310-darwin.so` or similar) to `lib/python3.10/site-packages/` or equivalent within your environment. The GPU-based algorithms require CUDA support (so Mac GPUs are not supported). + +inputs: +1. --source_catalog* : name of Kowalski catalog containing ZTF sources (str) +2. --alerts_catalog* : name of Kowalski catalog containing ZTF alerts (str) +3. --gaia_catalog* : name of Kowalski catalog containing Gaia data (str) +4. --bright_star_query_radius_arcsec : maximum angular distance from ZTF sources to query nearby bright stars in Gaia (float) +5. --xmatch_radius_arcsec : maximum angular distance from ZTF sources to match external catalog sources (float) +6. --kowalski_instances* : dictionary containing {names of Kowalski instances : authenticated penquins.Kowalski objects} (dict) +7. --limit : maximum number of sources to process in batch queries / statistics calculations (int) +8. --period_algorithms* : dictionary containing names of period algorithms to run. Normally specified in config - if specified here, should be a (list) +9. --period_batch_size : maximum number of sources to simultaneously perform period finding (int) +10. --doCPU : flag to run config-specified CPU period algorithms (bool) +11. --doGPU : flag to run config-specified GPU period algorithms (bool) +12. --samples_per_peak : number of samples per periodogram peak (int) +13. --doScaleMinPeriod : for period finding, scale min period based on min_cadence_minutes (bool). Otherwise, set --max_freq to desired value +14. --doRemoveTerrestrial : remove terrestrial frequencies from period-finding analysis (bool) +15. --Ncore : number of CPU cores to parallelize queries (int) +16. --field : ZTF field to run (int) +17. --ccd : ZTF ccd to run (int) +18. --quad : ZTF quadrant to run (int) +19. --min_n_lc_points : minimum number of points required to generate features for a light curve (int) +20. --min_cadence_minutes : minimum cadence between light curve points. Higher-cadence data are dropped except for the first point in the sequence (float) +21. --dirname : name of generated feature directory (str) +22. --filename : prefix of each feature filename (str) +23. --doCesium : flag to compute config-specified cesium features in addition to default list (bool) +24. --doNotSave : flag to avoid saving generated features (bool) +25. --stop_early : flag to stop feature generation before entire quadrant is run. Pair with --limit to run small-scale tests (bool) +26. --doQuadrantFile : flag to use a generated file containing [jobID, field, ccd, quad] columns instead of specifying --field, --ccd and --quad (bool) +27. --quadrant_file : name of quadrant file in the generated_features/slurm directory or equivalent (str) +28. --quadrant_index : number of job in quadrant file to run (int) +29. --doSpecificIDs: flag to perform feature generation for ztf_id column in config-specified file (bool) +30. --skipCloseSources: flag to skip removal of sources too close to bright stars via Gaia (bool) +31. --top_n_periods: number of ELS, ECE periods to pass to EAOV if using ELS_ECE_EAOV algorithm (int) +32. --max_freq: maximum frequency [1 / days] to use for period finding (float). Overridden by --doScaleMinPeriod + +output: +feature_df : dataframe containing generated features + +\* - specified in config.yaml + +### Example usage +The following is an example of running the feature generation script locally: + +``` +./generate_features.py --field 301 --ccd 2 --quad 4 --source_catalog ZTF_sources_20230109 --alerts_catalog ZTF_alerts --gaia_catalog Gaia_EDR3 --bright_star_query_radius_arcsec 300.0 --xmatch_radius_arcsec 2.0 --query_size_limit 10000 --period_batch_size 1000 --samples_per_peak 10 --Ncore 4 --min_n_lc_points 50 --min_cadence_minutes 30.0 --dirname generated_features --filename gen_features --doCPU --doRemoveTerrestrial --doCesium +``` + +Setting `--doCPU` will run the config-specified CPU period algorithms on each source. Setting `--doGPU` instead will do likewise with the specified GPU algorithms. If neither of these keywords is set, the code will assign a value of `1.0` to each period and compute Fourier statistics using that number. + +Below is an example run the script using a job/quadrant file (containing [job id, field, ccd, quad] columns) instead of specifying field/ccd/quad directly: + +``` +/home/bhealy/scope/tools/generate_features.py --source_catalog ZTF_sources_20230109 --alerts_catalog ZTF_alerts --gaia_catalog Gaia_EDR3 --bright_star_query_radius_arcsec 300.0 --xmatch_radius_arcsec 2.0 --query_size_limit 10000 --period_batch_size 1000 --samples_per_peak 10 --Ncore 20 --min_n_lc_points 50 --min_cadence_minutes 30.0 --dirname generated_features_DR15 --filename gen_features --doGPU --doRemoveTerrestrial --doCesium --doQuadrantFile --quadrant_file slurm.dat --quadrant_index 5738 +``` + +### Slurm scripts +For large-scale feature generation, `generate_features.py` is intended to be run on a high-performance computing cluster. Often these clusters require jobs to be submitted using a utility like `slurm` (Simple Linux Utility for Resource Management) to generate scripts. These scripts contain information about the type, amount and duration of computing resources to allocate to the user. + +Scope's `generate_features_slurm.py` code creates two slurm scripts: (1) runs single instance of `generate_features.py`, and (2) runs the `generate_features_job_submission.py` which submits multiple jobs in parallel, periodically checking to see if additional jobs can be started. See below for more information about these components of feature generation. + +`generate_features_slurm.py` can receive all of the arguments used by `generate_features.py`. These arguments are passed to the instances of feature generation begun by running slurm script (1). There are also additional arguments specific to cluster resource management: + +inputs: +1. --job_name : name of submitted jobs (str) +2. --cluster_name : name of HPC cluster (str) +3. --partition_type : cluster partition to use (str) +4. --nodes : number of nodes to request (int) +5. --gpus : number of GPUs to request (int) +6. --memory_GB : amount of memory to request in GB (int) +7. --time : amount of time before instance times out (str) +8. --mail_user: user's email address for job updates (str) +9. --account_name : name of account having HPC allocation (str) +10. --python_env_name : name of Python environment to activate before running `generate_features.py` (str) +11. --kowalski_instance_name : name of Kowalski instance containing ZTF source catalog (str) +12. --generateQuadrantFile : flag to map fields/ccds/quads containing sources to job numbers, save file (bool) +13. --max_instances : maximum number of HPC instances to run in parallel (int) +14. --wait_time_minutes : amount of time to wait between status checks in minutes (float) +15. --doSubmitLoop : flag to run loop initiating instances until out of jobs (hard on Kowalski) +16. --runParallel : flag to run jobs in parallel using slurm [recommended]. Otherwise, run in series on a single instance +17. --user : if using slurm, your username. This will be used to periodically run `squeue` and list your running jobs (str) + +## Feature definitions +### Selected phenomenological feature definitions + +| name | definition | +| ---- | ---------- | +|ad | Anderson-Darling statistic | +|chi2red | Reduced chi^2 | +|f1_BIC | Bayesian information criterion, first order (Fourier analysis) | +|f1_a | a coefficient, first order (Fourier analysis) | +|f1_amp | Amplitude, first order (Fourier analysis) | +|f1_b | b coefficient (Fourier analysis) | +|f1_phi0 | Zero-phase, first order (Fourier analysis) | +|f1_power | Power, first order (Fourier analysis) | +|f1_relamp1 | Relative amplitude, first order (Fourier analysis) | +|f1_relamp2 | Relative amplitude, second order (Fourier analysis) | +|f1_relamp3 | Relative amplitude, third order (Fourier analysis) | +|f1_relamp4 | Relative amplitude, fourth order (Fourier analysis) | +|f1_relphi1 | Relative phase, first order (Fourier analysis) | +|f1_relphi2 | Relative phase, second order (Fourier analysis) | +|f1_relphi3 | Relative phase, third order (Fourier analysis) | +|f1_relphi4 | Relative phase, fourth order (Fourier analysis) | +|i60r | Mag ratio between 20th, 80th percentiles | +|i70r | Mag ratio between 15th, 85th percentiles | +|i80r | Mag ratio between 10th, 90th percentiles | +|i90r | Mag ratio between 5th, 95th percentiles | +|inv_vonneumannratio | Inverse of Von Neumann ratio | +|iqr | Mag ratio between 25th, 75th percentiles | +|median | Median magnitude | +|median_abs_dev | Median absolute deviation of magnitudes | +|norm_excess_var | Normalized excess variance | +|norm_peak_to_peak_amp | Normalized peak-to-peak amplitude | +|roms | Root of mean magnitudes squared | +|skew | Skew of magnitudes | +|smallkurt | Kurtosis of magnitudes | +|stetson_j | Stetson J coefficient | +|stetson_k | Stetson K coefficient | +|sw | Shapiro-Wilk statistic | +|welch_i | Welch I statistic | +|wmean | Weighted mean of magtnidues | +|wstd | Weighted standard deviation of magnitudes | +|dmdt | Magnitude-time histograms (26x26) | + +### Selected ontological feature definitions +| name | definition | +| ---- | ---------- | +| mean_ztf_alert_braai | Mean significance of ZTF alerts for this source | +| n_ztf_alerts | Number of ZTF alerts for this source | +| period | Period determined by subscripted algorithms (e.g. ELS_ECE_EAOV) | +| significance | Significance of period | +| AllWISE_w1mpro | AllWISE W1 mag | +| AllWISE_w1sigmpro | AllWISE W1 mag error | +| AllWISE_w2mpro | AllWISE W2 mag | +| AllWISE_w2sigmpro | AllWISE W2 mag error | +| AllWISE_w3mpro | AllWISE W3 mag | +| AllWISE_w4mpro | AllWISE W4 mag | +| Gaia_EDR3__parallax | Gaia parallax | +| Gaia_EDR3__phot_bp_mean_mag | Gaia BP mag | +| Gaia_EDR3__phot_bp_rp_excess_factor | Gaia BP-RP excess factor | +| Gaia_EDR3__phot_g_mean_mag | Gaia G mag | +| Gaia_EDR3__phot_rp_mean_mag | Gaia RP mag | +| PS1_DR1__gMeanPSFMag | PS1 g mag | +| PS1_DR1__gMeanPSFMagErr | PS1 g mag error | +| PS1_DR1__rMeanPSFMag | PS1 r mag | +| PS1_DR1__rMeanPSFMagErr | PS1 r mag error | +| PS1_DR1__iMeanPSFMag | PS1 i mag | +| PS1_DR1__iMeanPSFMagErr | PS1 i mag error | +| PS1_DR1__zMeanPSFMag | PS1 z mag | +| PS1_DR1__zMeanPSFMagErr | PS1 z mag error | +| PS1_DR1__yMeanPSFMag | PS1 y mag | +| PS1_DR1__yMeanPSFMagErr | PS1 y mag error | + +## Running automated analyses +The primary deliverable of SCoPe is a catalog of variable source classifications across all of ZTF. Since ZTF contains billions of light curves, this catalog requires significant compute resources to assemble. We may still want to study ZTF's expansive collection of data with SCoPe before the classification catalog is complete. For example, SCoPe classifiers can be applied to the realm of transient follow-up. + +It is useful to know the classifications of any persistent ZTF sources that are close to transient candidates on the sky. Once SCoPe's primary deliverable is complete, obtaining these classifications will involve a straightforward database query. Presently, however, we must run the SCoPe workflow on a custom list of sources repeatedly to account for the rapidly changing landscape of transient events. See "Guide for Fritz Scanners" for a more detailed explanation of the workflow itself. This section continues with a discussion of how the automated analysis in `gcn_cronjob.py` is implemented using `cron`. + +### `cron` job basics +`cron` runs scripts at specific time intervals in a simple environment. While this simplicity fosters compatibility between different operating systems, the trade-off is that some extra steps are required to run scripts compared to more familiar coding environments (e.g. within `scope-env` for this project). + +To set up a `cron` job, first run `EDITOR=emacs crontab -e`. You can replace `emacs` with your text editor of choice as long as it is installed on your machine. This command will open a text file in which to place `cron` commands. An example command is as follows: +```bash +0 */2 * * * ~/scope/gcn_cronjob.py > ~/scope/log_gcn_cronjob.txt 2>&1 + +``` +Above, the `0 */2 * * *` means that this command will run every two hours, on minute 0 of that hour. Time increments increase from left to right; in this example, the five numbers are minute, hour, day (of month), month, day (of week). The `*/2` means that the hour has to be divisible by 2 for the job to run. Check out [crontab.guru](https://crontab.guru) to learn more about `cron` timing syntax. + +Next in the line, `~/scope/gcn_cronjob.py` is the command that gets run. The `>` character forwards the output from the command (e.g. what your script prints) into a log file in a specific location (here `~/scope/log_gcn_cronjob.txt`). Finally, the `2>&1` suppresses 'emails' from `cron` about the status of your job (unnecessary since the log is being saved to the user-specified file). + +Save the text file once you finish modifying it to install the cron job. **Ensure that the last line of your file is a newline to avoid issues when running.** Your computer may pop up a window to which you should respond in the affirmative in order to successfully initialize the job. To check which `cron` jobs have been installed, run `crontab -l`. To uninstall your jobs, run `crontab -r`. + +### Additional details for `cron` environment +Because `cron` runs in a simple environment, the usual details of environment setup and paths cannot be overlooked. In order for the above job to work, we need to add more information when we run `EDITOR=emacs crontab -e`. The lines below will produce a successful run (if SCoPe is installed in your home directory): + +``` +PYTHONPATH = /Users/username/scope + +0 */2 * * * /opt/homebrew/bin/gtimeout 2h ~/miniforge3/envs/scope-env/bin/python ~/scope/gcn_cronjob.py > ~/scope/log_gcn_cronjob.txt 2>&1 + +``` +In the first line above, the `PYTHONPATH` environment variable is defined to include the `scope` directory. Without this line, any code that imports from `scope` will throw an error, since the user's usual `PYTHONPATH` variable is not accessed in the `cron` environment. + +The second line begins with the familiar `cron` timing pattern described above. It continues by specifying the a maximum runtime of 2 hours before timing out using the `gtimeout` command. On a Mac, this can be installed with `homebrew` by running `brew install coreutils`. Note that the full path to `gtimeout` must be specified. After the timeout comes the call to the `gcn_cronjob.py` script. Note that the usual `#/usr/bin/env python` line at the top of SCoPe's python scripts does not work within the `cron` environment. Instead, `python` must be explicitly specified, and in order to have access to the modules installed in `scope-env` we must provide a full path like the one above (`~/miniforge3/envs/scope-env/bin/python`). The line concludes by sending the script's output to a dedicated log file. This file gets overwritten each time the script runs. + +### Check if `cron` job is running +It can be useful to know whether the script within a cron job is currently running. One way to do this for `gcn_cronjob.py` is to run the command `ps aux | grep gcn_cronjob.py`. This will always return one item (representing the command you just ran), but if the script is currently running you will see more than one item. + + +## Scope Download Classification +inputs: +1. --file : CSV file containing obj_id and/or ra dec coordinates. Set to "parse" to download sources by group id. +2. --group_ids : target group id(s) on Fritz for download (if CSV file not provided) +3. --start : Index or page number (if in "parse" mode) to begin downloading (optional) +4. --merge_features : Flag to merge features from Kowalski with downloaded sources +5. --features_catalog : Name of features catalog to query +6. --features_limit : Limit on number of sources to query at once +7. --taxonomy_map : Filename of taxonomy mapper (JSON format) +8. --output_dir : Name of directory to save downloaded files +9. --output_filename : Name of file containing merged classifications and features +10. --output_format : Output format of saved files, if not specified in (9). Must be one of parquet, h5, or csv. +11. --get_ztf_filters : Flag to add ZTF filter IDs (separate catalog query) to default features +12. --impute_missing_features : Flag to impute missing features using scope.utils.impute_features +13. --update_training_set : if downloading an active learning sample, update the training set with the new classification based on votes +14. --updated_training_set_prefix : Prefix to add to updated training set file +15. --min_vote_diff : Minimum number of net votes (upvotes - downvotes) to keep an active learning classification. Caution: if zero, all classifications of reviewed sources will be added + +process: +1. if CSV file provided, query by object ids or ra, dec +2. if CSV file not provided, bulk query based on group id(s) +3. get the classification/probabilities/periods of the objects in the dataset from Fritz +4. append these values as new columns on the dataset, save to new file +5. if merge_features, query Kowalski and merge sources with features, saving new CSV file +6. Fritz sources with multiple associated ZTF IDs will generate multiple rows in the merged feature file +7. To skip the source download part of the code, provide an input CSV file containing columns named 'obj_id', 'classification', 'probability', 'period_origin', 'period', 'ztf_id_origin', and 'ztf_id'. +8. Set `--update_training_set` to read the config-specified training set and merge new sources/classifications from an active learning group + +output: data with new columns appended. + +```sh +./scope_download_classification.py --file sample.csv --group_ids 360 361 --start 10 --merge_features True --features_catalog ZTF_source_features_DR16 --features_limit 5000 --taxonomy_map golden_dataset_mapper.json --output_dir fritzDownload --output_filename merged_classifications_features --output_format parquet -get_ztf_filters --impute_missing_features +``` + +## Scope Download GCN Sources +inputs: +1. --dateobs: unique dateObs of GCN event (str) +2. --group_ids: group ids to query sources [all if not specified] (list) +3. --days_range: max days past event to search for sources (float) +4. --radius_arcsec: radius [arcsec] around new sources to search for existing ZTF sources (float) +5. --save_filename: filename to save source ids/coordinates (str) + +process: +1. query all sources associated with GCN event +2. get fritz names, ras and decs for each page of sources +3. save json file in a useful format to use with `generate_features.py --doSpecificIDs` + +```sh +./scope_download_gcn_sources.py --dateobs 2023-05-21T05:30:43 +``` + +## Scope Upload Classification +inputs: +1. --file : path to CSV, HDF5 or Parquet file containing ra, dec, period, and labels +2. --group_ids : target group id(s) on Fritz for upload +3. --classification : Name(s) of input file columns containing classification probabilities (one column per label). Set this to "read" to automatically upload all classes specified in the taxonomy mapper at once. +4. --taxonomy_map : Filename of taxonomy mapper (JSON format) +5. --comment : Comment to post (if specified) +6. --start : Index to start uploading (zero-based) +7. --stop : Index to stop uploading (inclusive) +8. --classification_origin: origin of classifications. If 'SCoPe' (default), Fritz will apply custom color-coding +9. --skip_phot : flag to skip photometry upload (skips for existing sources only) +10. --post_survey_id : flag to post an annotation for the Gaia, AllWISE or PS1 id associated with each source +11. --survey_id_origin : Annotation origin name for survey_id +12. --p_threshold : Probability threshold for posted classification (values must be >= than this number to post) +13. --match_ids : flag to match input and existing survey_id values during upload. It is recommended to instead match obj_ids (see next line) +14. --use_existing_obj_id : flag to use existing source names in a column named 'obj_id' (a coordinate-based ID is otherwise generated by default) +15. --post_upvote : flag to post an upvote to newly uploaded classifications. Not recommended when posting automated classifications for active learning. +16. --check_labelled_box : flag to check the 'labelled' box for each source when uploading classifications. Not recommended when posting automated classifications for active learning. +17. --write_obj_id : flag to output a copy of the input file with an 'obj_id' column containing the coordinate-based IDs for each posted object. Use this file as input for future uploads to add to this column. +18. --result_dir : name of directory where upload results file is saved. Default is 'fritzUpload' within the tools directory. +19. --result_filetag: name of tag appended to the result filename. Default is 'fritzUpload'. +20. --result_format : result file format; one of csv, h5 or parquet. Default is parquet. +21. --replace_classifications : flag to delete each source's existing classifications before posting new ones. +22. --radius_arcsec: photometry search radius for uploaded sources. +23. --no_ml: flag to post classifications that do not originate from an ML classifier. +24. --post_phot_as_comment: flag to post photometry as a comment on the source (bool) +25. --post_phasefolded_phot: flag to post phase-folded photometry as comment in addition to time series (bool) +26. --phot_dirname: name of directory in which to save photometry plots (str) + +process: +0. include Kowalski host, port, protocol, and token or username+password in config.yaml +1. check if each input source exists by comparing input and existing obj_ids and/or survey_ids +2. save the objects to Fritz group if new +3. in batches, upload the classifications of the objects in the dataset to target group on Fritz +4. duplicate classifications will not be uploaded to Fritz. If n classifications are manually specified, probabilities will be sourced from the last n columns of the dataset. +5. post survey_id annotations +6. (post comment to each uploaded source) + +```sh +./scope_upload_classification.py --file sample.csv --group_ids 500 250 750 --classification variable flaring --taxonomy_map map.json --comment confident --start 35 --stop 50 --skip_phot --p_threshold 0.9 --write_obj_id --result_format csv --use_existing_obj_id --post_survey_id --replace_classifications +``` + +## Scope Manage Annotation +inputs: +1. --action : one of "post", "update", or "delete" +2. --source : ZTF ID or path to .csv file with multiple objects (ID column "obj_id") +3. --target : group id(s) on Fritz +4. --origin : name of annotation +5. --key : name of annotation +6. --value : value of annotation (required for "post" and "update" - if source is a .csv file, value will auto-populate from `source[key]`) + +process: +1. for each source, find existing annotations (for "update" and "delete" actions) +2. interact with API to make desired changes to annotations +3. confirm changes with printed messages + +```sh +./scope_manage_annotation.py --action post --source sample.csv --group_ids 200 300 400 --origin revisedperiod --key period +``` + +## Scope Upload Disagreements +inputs: +1. dataset +2. group id on Fritz +3. gloria object + +process: +1. read in the csv dataset to pandas dataframe +2. get high scoring objects on DNN or on XGBoost from Fritz +3. get objects that have high confidence on DNN but low confidence on XGBoost and vice versa +4. get different statistics of those disagreeing objects and combine to a dataframe +5. filter those disagreeing objects that are contained in the training set and remove them +6. upload the remaining disagreeing objects to target group on Fritz + +```sh +./scope_upload_disagreements.py -file dataset.d15.csv -id 360 -token sample_token +``` diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- 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%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +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 form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- 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 p.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%; + margin-left: auto; + margin-right: auto; +} + +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 ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +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; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +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, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 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; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +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; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- 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; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.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; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + 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; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- 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/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (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: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..7e4c114 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * 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; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000..d96755f 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 0000000..7107cec 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 0000000..f4af905 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,79 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #4f424c } +.highlight { background: #2f1e2e; color: #e7e9db } +.highlight .c { color: #776e71 } /* Comment */ +.highlight .err { color: #ef6155 } /* Error */ +.highlight .k { color: #815ba4 } /* Keyword */ +.highlight .l { color: #f99b15 } /* Literal */ +.highlight .n { color: #e7e9db } /* Name */ +.highlight .o { color: #5bc4bf } /* Operator */ +.highlight .p { color: #e7e9db } /* Punctuation */ +.highlight .ch { color: #776e71 } /* Comment.Hashbang */ +.highlight .cm { color: #776e71 } /* Comment.Multiline */ +.highlight .cp { color: #776e71 } /* Comment.Preproc */ +.highlight .cpf { color: #776e71 } /* Comment.PreprocFile */ +.highlight .c1 { color: #776e71 } /* Comment.Single */ +.highlight .cs { color: #776e71 } /* Comment.Special */ +.highlight .gd { color: #ef6155 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gh { color: #e7e9db; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #48b685 } /* Generic.Inserted */ +.highlight .gp { color: #776e71; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #5bc4bf; font-weight: bold } /* Generic.Subheading */ +.highlight .kc { color: #815ba4 } /* Keyword.Constant */ +.highlight .kd { color: #815ba4 } /* Keyword.Declaration */ +.highlight .kn { color: #5bc4bf } /* Keyword.Namespace */ +.highlight .kp { color: #815ba4 } /* Keyword.Pseudo */ +.highlight .kr { color: #815ba4 } /* Keyword.Reserved */ +.highlight .kt { color: #fec418 } /* Keyword.Type */ +.highlight .ld { color: #48b685 } /* Literal.Date */ +.highlight .m { color: #f99b15 } /* Literal.Number */ +.highlight .s { color: #48b685 } /* Literal.String */ +.highlight .na { color: #06b6ef } /* Name.Attribute */ +.highlight .nb { color: #e7e9db } /* Name.Builtin */ +.highlight .nc { color: #fec418 } /* Name.Class */ +.highlight .no { color: #ef6155 } /* Name.Constant */ +.highlight .nd { color: #5bc4bf } /* Name.Decorator */ +.highlight .ni { color: #e7e9db } /* Name.Entity */ +.highlight .ne { color: #ef6155 } /* Name.Exception */ +.highlight .nf { color: #06b6ef } /* Name.Function */ +.highlight .nl { color: #e7e9db } /* Name.Label */ +.highlight .nn { color: #fec418 } /* Name.Namespace */ +.highlight .nx { color: #06b6ef } /* Name.Other */ +.highlight .py { color: #e7e9db } /* Name.Property */ +.highlight .nt { color: #5bc4bf } /* Name.Tag */ +.highlight .nv { color: #ef6155 } /* Name.Variable */ +.highlight .ow { color: #5bc4bf } /* Operator.Word */ +.highlight .pm { color: #e7e9db } /* Punctuation.Marker */ +.highlight .w { color: #e7e9db } /* Text.Whitespace */ +.highlight .mb { color: #f99b15 } /* Literal.Number.Bin */ +.highlight .mf { color: #f99b15 } /* Literal.Number.Float */ +.highlight .mh { color: #f99b15 } /* Literal.Number.Hex */ +.highlight .mi { color: #f99b15 } /* Literal.Number.Integer */ +.highlight .mo { color: #f99b15 } /* Literal.Number.Oct */ +.highlight .sa { color: #48b685 } /* Literal.String.Affix */ +.highlight .sb { color: #48b685 } /* Literal.String.Backtick */ +.highlight .sc { color: #e7e9db } /* Literal.String.Char */ +.highlight .dl { color: #48b685 } /* Literal.String.Delimiter */ +.highlight .sd { color: #776e71 } /* Literal.String.Doc */ +.highlight .s2 { color: #48b685 } /* Literal.String.Double */ +.highlight .se { color: #f99b15 } /* Literal.String.Escape */ +.highlight .sh { color: #48b685 } /* Literal.String.Heredoc */ +.highlight .si { color: #f99b15 } /* Literal.String.Interpol */ +.highlight .sx { color: #48b685 } /* Literal.String.Other */ +.highlight .sr { color: #48b685 } /* Literal.String.Regex */ +.highlight .s1 { color: #48b685 } /* Literal.String.Single */ +.highlight .ss { color: #48b685 } /* Literal.String.Symbol */ +.highlight .bp { color: #e7e9db } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06b6ef } /* Name.Function.Magic */ +.highlight .vc { color: #ef6155 } /* Name.Variable.Class */ +.highlight .vg { color: #ef6155 } /* Name.Variable.Global */ +.highlight .vi { color: #ef6155 } /* Name.Variable.Instance */ +.highlight .vm { color: #ef6155 } /* Name.Variable.Magic */ +.highlight .il { color: #f99b15 } /* 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 0000000..7918c3f --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_static/sphinx_press_theme.css b/_static/sphinx_press_theme.css new file mode 100644 index 0000000..5c439ce --- /dev/null +++ b/_static/sphinx_press_theme.css @@ -0,0 +1,116 @@ +/* + * + * Defines default styles specific to Sphinx Press, + * on top of VuePress styles + * + */ + + /* FONTS FOR THE CODE - will fall back to monospace if unavailable */ + +@import url('https://fontlibrary.org/face/roboto-mono'); +@import url('https://fontlibrary.org/face/inconsolata'); + +/* MAKES MAIN TEXT SECTION LARGER */ +.content:not(.custom) { + max-width: 840px; +} + +/* THE SECTION BELOW DEFINES THE APPEARANCE OF AUTODOC-GENERATED DOCS */ + +.sig-name.descname { + font-size: 1.2em; + font-weight: bold; + padding: 0 0 3px; /* creates a perfect grey rectangle*/ +} + +.sig-param { + font-family: 'RobotoMonoRegular', 'Roboto Mono', 'Inconsolata', monospace; + margin-left: 0.3em; +} + +.sig-paren { + margin-left: 0.3em; +} + +dt { + line-height: 1.5em; + margin-bottom: 1em; +} + +dt.field-odd, dt.field-even, p.rubric { + font-size: 1.2em; + font-weight: bold; + color: #4d6a86 +} + +dd { + margin-inline-start: 10px; +} + +dd.field-odd p strong { + margin-left: 1em; +} + +dl.method, dl.function { + margin-top: 2em; + margin-bottom: 3em; +} + +.viewcode-link { + margin-left: 1em; + color: #9ad8bc; +} + +/* THE SECTION BELOW DEFINES THE APPEARANCE OF TABLE-OF-CONTENTS */ + +/* color fixes for table of contents */ +.toc-backref { + /* TOCS cause all your section titles to go green. Pouah! */ + color: inherit; +} + +.contents.topic p.topic-title { + /* Hide all TOC titles */ + display: none; +} + +.contents.topic { + margin-bottom: 3em; +} + + +/* THE SECTION BELOW CHANGES CODE FONTS FOR BETTER 80-CHARS READABILITY */ +/* Code will be displayed as Roboto, or Inconsolata if screen is small */ +code, pre { + font-family: 'RobotoMonoRegular', 'Roboto Mono', 'Inconsolata', monospace; +} + +@media (max-width: 1200px) { + code, pre { + font-family: 'InconsolataRegular', 'Inconsolata', 'RobotoMonoRegular', 'Roboto Mono', monospace; + } + pre { + font-size: 0.95em; + } +} + +blockquote { + font-size: inherit; +} + +blockquote h2 { + margin-left: 1em; +} + +/* THE SECTION BELOW FIXES A SPHINX-MERMAID OPACITY PROBLEM */ +.content .section { + opacity: 1.0 !important; +} +.section { + opacity: 1.0 !important; +} + +/* MAKES SPHINX SYNTAX figure:: :align:center WORK AGAIN */ +.figure.align-center { + text-align: center +} \ No newline at end of file diff --git a/_static/taxonomy.html b/_static/taxonomy.html new file mode 100644 index 0000000..cbae7f3 --- /dev/null +++ b/_static/taxonomy.html @@ -0,0 +1,270 @@ + + + + + + +

Time-Domain Taxonomy

+ +
+2023-09-08 21:15:17.468098 Version: 0.1.6 +
+ + + + + diff --git a/_static/theme.css b/_static/theme.css new file mode 100644 index 0000000..409bbb9 --- /dev/null +++ b/_static/theme.css @@ -0,0 +1 @@ +.page{margin-left:10px;margin-right:10px}dd p,li p,table p{margin:0}.content{max-width:840px;margin:0 auto}.content pre{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.content .footnote-reference,.content .label,.content .reference{scroll-margin-top:3.6rem}.content a:focus{outline:0}.content:not(.custom){max-width:840px}.content section{scroll-margin-top:4.1rem;margin-bottom:0}.content section:hover .headerlink{opacity:1}h1:hover a.headerlink::after,h2:hover a.headerlink::after,h3:hover a.headerlink::after,h4:hover a.headerlink::after,h5:hover a.headerlink::after,h6:hover a.headerlink::after{visibility:visible;content:"#"}a.headerlink{font-size:.85em;visibility:hidden}a.headerlink:hover{text-decoration:none}ul.page-nav{list-style:none}ul.page-nav li{display:inline-block}.body-header{display:flex}.body-header ul.page-nav{flex-grow:1;list-style:none;list-style-position:inside;text-align:right;margin-right:30px}.body-header ul.page-nav li+li:before{content:"|";padding:0 1em}ul.breadcrumbs{list-style:none}ul.breadcrumbs li{display:inline-block;margin-right:5px}.toc-backref{color:inherit}.contents.topic p.topic-title{display:none}.contents.topic{margin-bottom:3em}aside.sidebar{margin:0 0 .5em 1em;border:1px solid #ddb;padding:7px;background-color:#ffe;width:40%;float:right;clear:right;overflow-x:auto}p.sidebar-title{font-weight:700}blockquote,div.admonition,div.topic{clear:left}div[class*=highlight-],pre{clear:both}.toctree-wrapper .caption{font-weight:600;line-height:1.25;font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}.footer{clear:both;min-height:2rem;padding-top:1rem;overflow:auto;color:grey;font-size:small;line-height:1.5rem}.content .highlight{border-radius:6px}.content .highlight pre{background-color:inherit}.content .highlighted{background-color:#fbe54e;font-weight:700;padding:0 4px}.admonition{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0;background-color:#e2e2e2;border-color:#787878}.admonition .admonition-title{font-weight:600;margin-bottom:-.4rem}.admonition.hint,.admonition.tip{background-color:#f3f5f7;border-color:#42b983}.admonition.important,.admonition.note{background-color:#e5f1fb;border-color:#5faaea}.admonition.caution,.admonition.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.admonition.caution .custom-block-title,.admonition.warning .custom-block-title{color:#b29400}.admonition.caution a,.admonition.warning a{color:#2c3e50}.admonition.danger,.admonition.error{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.admonition.danger .custom-block-title,.admonition.error .custom-block-title{color:#900}.admonition.danger a,.admonition.error a{color:#2c3e50}.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}.classifier:before{font-style:normal;margin:.5em;content:":"}abbr,acronym{border-bottom:dotted 1px;cursor:help}div.topic{border:1px solid #ccc;padding:7px;margin:10px 0 10px 0;background-color:#f7f7f7}p.topic-title{font-size:1.1em;font-weight:700;margin-top:10px}a.brackets:before,span.brackets>a:before{content:"["}a.brackets:after,span.brackets>a:after{content:"]"}p.rubric{margin-top:30px;font-weight:700}.pre,code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace}@media (max-width:1200px){pre{font-size:.95em}}blockquote{font-size:inherit}blockquote h2{margin-left:1em}.sig .property{color:#4d6a86;padding-right:.25rem}.sig-name.descname{font-size:1.2em;font-weight:700;padding:0 0 3px}.sig-param{margin-left:.3em}.sig-paren{margin-left:.3em}dt{line-height:1.5em;margin-top:1em;font-weight:700}dt.field-even,dt.field-odd,p.rubric{font-size:1.2em;font-weight:700;color:#4d6a86}dd{margin-inline-start:10px}dd.field-odd p strong{margin-left:1em}dl.function,dl.method{margin-top:1em;margin-bottom:2em}.viewcode-link{margin-left:1em;color:#9ad8bc}dl.field-list{display:grid;grid-template-columns:fit-content(30%) auto}dl.field-list dt{margin-top:0}dl.field-list dd{margin-bottom:1em}dl.field-list>dt{font-weight:700;word-break:break-word;padding-left:.5em;padding-right:5px}dl.field-list>dt:after{content:":"}dl.field-list>dd{padding-left:.5em;margin-top:0;margin-left:0;margin-bottom:0}dl{margin-bottom:15px}.figure.align-left,figure.align-left,img.align-left,object.align-left{clear:left;float:left;margin-right:1em}.figure.align-right,figure.align-right,img.align-right,object.align-right{clear:right;float:right;margin-left:1em}.figure.align-center,figure.align-center,img.align-center,object.align-center{display:block;margin-left:auto;margin-right:auto}.figure.align-default,figure.align-default,img.align-default{display:block;margin-left:auto;margin-right:auto}.align-left{text-align:left}.align-center{text-align:center}.align-default{text-align:center}.align-right{text-align:right}.content .section{opacity:1!important}.section{opacity:1!important}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:0 0;position:relative;z-index:1}div[class*=language-]::before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:rgba(255,255,255,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:' ';position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:rgba(255,255,255,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode::after{content:'';position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~="language-$codeLang"]:before{content:'$codeLang'}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:0;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid #ccc}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid #ccc}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.vp-sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;color:#3eaf7c;text-decoration:none}p a code{font-weight:400;color:#3eaf7c}kbd{background:#eee;border:solid .15rem #ddd;border-bottom:solid .25rem #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .vp-sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .vp-sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.vp-sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.vp-sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .vp-sidebar{transform:translateX(0)}.theme-container.no-navbar .vp-sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.page{margin-left:10px;margin-right:10px}dd p,li p,table p{margin:0}.content{max-width:840px;margin:0 auto}.content pre{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.content .footnote-reference,.content .label,.content .reference{scroll-margin-top:3.6rem}.content a:focus{outline:0}.content:not(.custom){max-width:840px}.content section{scroll-margin-top:4.1rem;margin-bottom:0}.content section:hover .headerlink{opacity:1}h1:hover a.headerlink::after,h2:hover a.headerlink::after,h3:hover a.headerlink::after,h4:hover a.headerlink::after,h5:hover a.headerlink::after,h6:hover a.headerlink::after{visibility:visible;content:"#"}a.headerlink{font-size:.85em;visibility:hidden}a.headerlink:hover{text-decoration:none}ul.page-nav{list-style:none}ul.page-nav li{display:inline-block}.body-header{display:flex}.body-header ul.page-nav{flex-grow:1;list-style:none;list-style-position:inside;text-align:right;margin-right:30px}.body-header ul.page-nav li+li:before{content:"|";padding:0 1em}ul.breadcrumbs{list-style:none}ul.breadcrumbs li{display:inline-block;margin-right:5px}.toc-backref{color:inherit}.contents.topic p.topic-title{display:none}.contents.topic{margin-bottom:3em}aside.sidebar{margin:0 0 .5em 1em;border:1px solid #ddb;padding:7px;background-color:#ffe;width:40%;float:right;clear:right;overflow-x:auto}p.sidebar-title{font-weight:700}blockquote,div.admonition,div.topic{clear:left}div[class*=highlight-],pre{clear:both}.toctree-wrapper .caption{font-weight:600;line-height:1.25;font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}.footer{clear:both;min-height:2rem;padding-top:1rem;overflow:auto;color:grey;font-size:small;line-height:1.5rem}.content .highlight{border-radius:6px}.content .highlight pre{background-color:inherit}.content .highlighted{background-color:#fbe54e;font-weight:700;padding:0 4px}.admonition{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0;background-color:#e2e2e2;border-color:#787878}.admonition .admonition-title{font-weight:600;margin-bottom:-.4rem}.admonition.hint,.admonition.tip{background-color:#f3f5f7;border-color:#42b983}.admonition.important,.admonition.note{background-color:#e5f1fb;border-color:#5faaea}.admonition.caution,.admonition.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.admonition.caution .custom-block-title,.admonition.warning .custom-block-title{color:#b29400}.admonition.caution a,.admonition.warning a{color:#2c3e50}.admonition.danger,.admonition.error{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.admonition.danger .custom-block-title,.admonition.error .custom-block-title{color:#900}.admonition.danger a,.admonition.error a{color:#2c3e50}.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}.classifier:before{font-style:normal;margin:.5em;content:":"}abbr,acronym{border-bottom:dotted 1px;cursor:help}div.topic{border:1px solid #ccc;padding:7px;margin:10px 0 10px 0;background-color:#f7f7f7}p.topic-title{font-size:1.1em;font-weight:700;margin-top:10px}a.brackets:before,span.brackets>a:before{content:"["}a.brackets:after,span.brackets>a:after{content:"]"}p.rubric{margin-top:30px;font-weight:700}.pre,code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace}@media (max-width:1200px){pre{font-size:.95em}}blockquote{font-size:inherit}blockquote h2{margin-left:1em}.sig .property{color:#4d6a86;padding-right:.25rem}.sig-name.descname{font-size:1.2em;font-weight:700;padding:0 0 3px}.sig-param{margin-left:.3em}.sig-paren{margin-left:.3em}dt{line-height:1.5em;margin-top:1em;font-weight:700}dt.field-even,dt.field-odd,p.rubric{font-size:1.2em;font-weight:700;color:#4d6a86}dd{margin-inline-start:10px}dd.field-odd p strong{margin-left:1em}dl.function,dl.method{margin-top:1em;margin-bottom:2em}.viewcode-link{margin-left:1em;color:#9ad8bc}dl.field-list{display:grid;grid-template-columns:fit-content(30%) auto}dl.field-list dt{margin-top:0}dl.field-list dd{margin-bottom:1em}dl.field-list>dt{font-weight:700;word-break:break-word;padding-left:.5em;padding-right:5px}dl.field-list>dt:after{content:":"}dl.field-list>dd{padding-left:.5em;margin-top:0;margin-left:0;margin-bottom:0}dl{margin-bottom:15px}.figure.align-left,figure.align-left,img.align-left,object.align-left{clear:left;float:left;margin-right:1em}.figure.align-right,figure.align-right,img.align-right,object.align-right{clear:right;float:right;margin-left:1em}.figure.align-center,figure.align-center,img.align-center,object.align-center{display:block;margin-left:auto;margin-right:auto}.figure.align-default,figure.align-default,img.align-default{display:block;margin-left:auto;margin-right:auto}.align-left{text-align:left}.align-center{text-align:center}.align-default{text-align:center}.align-right{text-align:right}.content .section{opacity:1!important}.section{opacity:1!important}.page{margin-left:10px;margin-right:10px}dd p,li p,table p{margin:0}.content{max-width:840px;margin:0 auto}.content pre{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.content .footnote-reference,.content .label,.content .reference{scroll-margin-top:3.6rem}.content a:focus{outline:0}.content:not(.custom){max-width:840px}.content section{scroll-margin-top:4.1rem;margin-bottom:0}.content section:hover .headerlink{opacity:1}h1:hover a.headerlink::after,h2:hover a.headerlink::after,h3:hover a.headerlink::after,h4:hover a.headerlink::after,h5:hover a.headerlink::after,h6:hover a.headerlink::after{visibility:visible;content:"#"}a.headerlink{font-size:.85em;visibility:hidden}a.headerlink:hover{text-decoration:none}ul.page-nav{list-style:none}ul.page-nav li{display:inline-block}.body-header{display:flex}.body-header ul.page-nav{flex-grow:1;list-style:none;list-style-position:inside;text-align:right;margin-right:30px}.body-header ul.page-nav li+li:before{content:"|";padding:0 1em}ul.breadcrumbs{list-style:none}ul.breadcrumbs li{display:inline-block;margin-right:5px}.toc-backref{color:inherit}.contents.topic p.topic-title{display:none}.contents.topic{margin-bottom:3em}aside.sidebar{margin:0 0 .5em 1em;border:1px solid #ddb;padding:7px;background-color:#ffe;width:40%;float:right;clear:right;overflow-x:auto}p.sidebar-title{font-weight:700}blockquote,div.admonition,div.topic{clear:left}div[class*=highlight-],pre{clear:both}.toctree-wrapper .caption{font-weight:600;line-height:1.25;font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}.footer{clear:both;min-height:2rem;padding-top:1rem;overflow:auto;color:grey;font-size:small;line-height:1.5rem}.content .highlight{border-radius:6px}.content .highlight pre{background-color:inherit}.content .highlighted{background-color:#fbe54e;font-weight:700;padding:0 4px}.admonition{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0;background-color:#e2e2e2;border-color:#787878}.admonition .admonition-title{font-weight:600;margin-bottom:-.4rem}.admonition.hint,.admonition.tip{background-color:#f3f5f7;border-color:#42b983}.admonition.important,.admonition.note{background-color:#e5f1fb;border-color:#5faaea}.admonition.caution,.admonition.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.admonition.caution .custom-block-title,.admonition.warning .custom-block-title{color:#b29400}.admonition.caution a,.admonition.warning a{color:#2c3e50}.admonition.danger,.admonition.error{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.admonition.danger .custom-block-title,.admonition.error .custom-block-title{color:#900}.admonition.danger a,.admonition.error a{color:#2c3e50}.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}.classifier:before{font-style:normal;margin:.5em;content:":"}abbr,acronym{border-bottom:dotted 1px;cursor:help}div.topic{border:1px solid #ccc;padding:7px;margin:10px 0 10px 0;background-color:#f7f7f7}p.topic-title{font-size:1.1em;font-weight:700;margin-top:10px}a.brackets:before,span.brackets>a:before{content:"["}a.brackets:after,span.brackets>a:after{content:"]"}p.rubric{margin-top:30px;font-weight:700}.pre,code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace}@media (max-width:1200px){pre{font-size:.95em}}blockquote{font-size:inherit}blockquote h2{margin-left:1em}.sig .property{color:#4d6a86;padding-right:.25rem}.sig-name.descname{font-size:1.2em;font-weight:700;padding:0 0 3px}.sig-param{margin-left:.3em}.sig-paren{margin-left:.3em}dt{line-height:1.5em;margin-top:1em;font-weight:700}dt.field-even,dt.field-odd,p.rubric{font-size:1.2em;font-weight:700;color:#4d6a86}dd{margin-inline-start:10px}dd.field-odd p strong{margin-left:1em}dl.function,dl.method{margin-top:1em;margin-bottom:2em}.viewcode-link{margin-left:1em;color:#9ad8bc}dl.field-list{display:grid;grid-template-columns:fit-content(30%) auto}dl.field-list dt{margin-top:0}dl.field-list dd{margin-bottom:1em}dl.field-list>dt{font-weight:700;word-break:break-word;padding-left:.5em;padding-right:5px}dl.field-list>dt:after{content:":"}dl.field-list>dd{padding-left:.5em;margin-top:0;margin-left:0;margin-bottom:0}dl{margin-bottom:15px}.figure.align-left,figure.align-left,img.align-left,object.align-left{clear:left;float:left;margin-right:1em}.figure.align-right,figure.align-right,img.align-right,object.align-right{clear:right;float:right;margin-left:1em}.figure.align-center,figure.align-center,img.align-center,object.align-center{display:block;margin-left:auto;margin-right:auto}.figure.align-default,figure.align-default,img.align-default{display:block;margin-left:auto;margin-right:auto}.align-left{text-align:left}.align-center{text-align:center}.align-default{text-align:center}.align-right{text-align:right}.content .section{opacity:1!important}.section{opacity:1!important}.icon.outbound{color:#aaa;display:inline-block}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:$MQMobile){.sidebar-button{display:block}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;position:fixed}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{font-size:.9rem;position:absolute;right:1.5rem;top:.7rem}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.sidebar-button{display:block}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.vp-sidebar ul{padding:0;margin:0;list-style-type:none}.vp-sidebar a{display:inline-block}.vp-sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem 0}.vp-sidebar .nav-links a{font-weight:600}.vp-sidebar .nav-links .nav-item,.vp-sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.vp-sidebar .searchbox{font-weight:600;font-size:1.1em;line-height:1.5rem;padding:1rem 0 1.5rem .75rem;border-bottom:1px solid #eaecef}.vp-sidebar .sidebar-links{padding:1.5rem 0}@media (max-width:719px){.vp-sidebar .nav-links{display:block}.vp-sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{top:calc(1rem - 2px)}.vp-sidebar .sidebar-links{padding:1rem 0}}.sidebar-group:not(.first){margin-top:1em}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .caption{cursor:auto;color:inherit}.sidebar-group .caption{color:#999;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:0 1.5rem;margin-top:0;margin-bottom:.5rem}.sidebar-group .caption.open,.sidebar-group .caption:hover{color:inherit}.sidebar-group .caption .arrow{position:relative;top:-.12em;left:.5em}.sidebar-group .caption:.open .arrow{top:-.18em}.sidebar-group-items{transition:height .1s ease-out;overflow:hidden}.vp-sidebar .toctree-l1 ul{font-size:.95em}.vp-sidebar .toctree-l1 a,.vp-sidebar .toctree-l2 a{font-weight:400;display:inline-block;color:#2c3e50;line-height:1.4;width:100%;box-sizing:border-box;border-left:.5rem solid transparent}.vp-sidebar .toctree-l1 a.current,.vp-sidebar .toctree-l2 a.current{color:#3eaf7c;font-weight:600}.vp-sidebar .toctree-l1 a:hover,.vp-sidebar .toctree-l2 a:hover{color:#3eaf7c}.vp-sidebar .toctree-l1.current a{border-left:.5rem solid #86d4b1}.vp-sidebar .toctree-l1 a{padding:.35rem 1rem .35rem 1.25rem}.vp-sidebar .toctree-l1 a.current{border-left-color:#3eaf7c}.vp-sidebar .toctree-l2 a{padding:.25rem 1rem .25rem 1.75rem}.page-edit,.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit,.page-nav{padding:2rem}}@media (max-width:419px){.page-edit,.page-nav{padding:1.5rem}}.page{padding-top:3.6rem;padding-bottom:2rem}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#aaa}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}} \ No newline at end of file diff --git a/_static/theme.js b/_static/theme.js new file mode 100644 index 0000000..37bbfe6 --- /dev/null +++ b/_static/theme.js @@ -0,0 +1 @@ +!function(){"use strict";function e(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[e.toLowerCase()]:e=>!!n[e]}const t=e("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),n=e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function o(e){if(w(e)){const t={};for(let n=0;n{if(e){const n=e.split(s);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function l(e){let t="";if(F(e))t=e;else if(w(e))for(let n=0;np(e,t)))}const d=(e,t)=>T(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:E(t)?{[`Set(${t.size})`]:[...t.values()]}:!A(t)||w(t)||R(t)?t:String(t),h={},m=[],g=()=>{},v=()=>!1,y=/^on[^a-z]/,b=e=>y.test(e),_=e=>e.startsWith("onUpdate:"),x=Object.assign,S=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},C=Object.prototype.hasOwnProperty,k=(e,t)=>C.call(e,t),w=Array.isArray,T=e=>"[object Map]"===B(e),E=e=>"[object Set]"===B(e),N=e=>e instanceof Date,$=e=>"function"==typeof e,F=e=>"string"==typeof e,M=e=>"symbol"==typeof e,A=e=>null!==e&&"object"==typeof e,I=e=>A(e)&&$(e.then)&&$(e.catch),O=Object.prototype.toString,B=e=>O.call(e),R=e=>"[object Object]"===B(e),V=e=>F(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,P=e(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),L=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},j=/-(\w)/g,U=L((e=>e.replace(j,((e,t)=>t?t.toUpperCase():"")))),H=/\B([A-Z])/g,D=L((e=>e.replace(H,"-$1").toLowerCase())),z=L((e=>e.charAt(0).toUpperCase()+e.slice(1))),W=L((e=>e?`on${z(e)}`:"")),K=(e,t)=>e!==t&&(e==e||t==t),G=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},J=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Z=new WeakMap,Q=[];let X;const Y=Symbol(""),ee=Symbol("");function te(e,t=h){(function(e){return e&&!0===e._isEffect})(e)&&(e=e.raw);const n=function(e,t){const n=function(){if(!n.active)return t.scheduler?void 0:e();if(!Q.includes(n)){re(n);try{return ie.push(se),se=!0,Q.push(n),X=n,e()}finally{Q.pop(),ce(),X=Q[Q.length-1]}}};return n.id=oe++,n.allowRecurse=!!t.allowRecurse,n._isEffect=!0,n.active=!0,n.raw=e,n.deps=[],n.options=t,n}(e,t);return t.lazy||n(),n}function ne(e){e.active&&(re(e),e.options.onStop&&e.options.onStop(),e.active=!1)}let oe=0;function re(e){const{deps:t}=e;if(t.length){for(let n=0;n{e&&e.forEach((e=>{(e!==X||e.allowRecurse)&&l.add(e)}))};if("clear"===t)i.forEach(c);else if("length"===n&&w(e))i.forEach(((e,t)=>{("length"===t||t>=o)&&c(e)}));else switch(void 0!==n&&c(i.get(n)),t){case"add":w(e)?V(n)&&c(i.get("length")):(c(i.get(Y)),T(e)&&c(i.get(ee)));break;case"delete":w(e)||(c(i.get(Y)),T(e)&&c(i.get(ee)));break;case"set":T(e)&&c(i.get(Y))}l.forEach((e=>{e.options.scheduler?e.options.scheduler(e):e()}))}const pe=e("__proto__,__v_isRef,__isVue"),fe=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(M)),de=ye(),he=ye(!1,!0),me=ye(!0),ge=ye(!0,!0),ve={};function ye(e=!1,t=!1){return function(n,o,r){if("__v_isReactive"===o)return!e;if("__v_isReadonly"===o)return e;if("__v_raw"===o&&r===(e?t?Ze:Je:t?qe:Ge).get(n))return n;const s=w(n);if(!e&&s&&k(ve,o))return Reflect.get(ve,o,r);const i=Reflect.get(n,o,r);if(M(o)?fe.has(o):pe(o))return i;if(e||ae(n,0,o),t)return i;if(lt(i)){return!s||!V(o)?i.value:i}return A(i)?e?et(i):Xe(i):i}}["includes","indexOf","lastIndexOf"].forEach((e=>{const t=Array.prototype[e];ve[e]=function(...e){const n=st(this);for(let t=0,r=this.length;t{const t=Array.prototype[e];ve[e]=function(...e){le();const n=t.apply(this,e);return ce(),n}}));function be(e=!1){return function(t,n,o,r){let s=t[n];if(!e&&(o=st(o),s=st(s),!w(t)&<(s)&&!lt(o)))return s.value=o,!0;const i=w(t)&&V(n)?Number(n)!0,deleteProperty:(e,t)=>!0},Se=x({},_e,{get:he,set:be(!0)}),Ce=x({},xe,{get:ge}),ke=e=>A(e)?Xe(e):e,we=e=>A(e)?et(e):e,Te=e=>e,Ee=e=>Reflect.getPrototypeOf(e);function Ne(e,t,n=!1,o=!1){const r=st(e=e.__v_raw),s=st(t);t!==s&&!n&&ae(r,0,t),!n&&ae(r,0,s);const{has:i}=Ee(r),l=o?Te:n?we:ke;return i.call(r,t)?l(e.get(t)):i.call(r,s)?l(e.get(s)):void 0}function $e(e,t=!1){const n=this.__v_raw,o=st(n),r=st(e);return e!==r&&!t&&ae(o,0,e),!t&&ae(o,0,r),e===r?n.has(e):n.has(e)||n.has(r)}function Fe(e,t=!1){return e=e.__v_raw,!t&&ae(st(e),0,Y),Reflect.get(e,"size",e)}function Me(e){e=st(e);const t=st(this);return Ee(t).has.call(t,e)||(t.add(e),ue(t,"add",e,e)),this}function Ae(e,t){t=st(t);const n=st(this),{has:o,get:r}=Ee(n);let s=o.call(n,e);s||(e=st(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?K(t,i)&&ue(n,"set",e,t):ue(n,"add",e,t),this}function Ie(e){const t=st(this),{has:n,get:o}=Ee(t);let r=n.call(t,e);r||(e=st(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&ue(t,"delete",e,void 0),s}function Oe(){const e=st(this),t=0!==e.size,n=e.clear();return t&&ue(e,"clear",void 0,void 0),n}function Be(e,t){return function(n,o){const r=this,s=r.__v_raw,i=st(s),l=t?Te:e?we:ke;return!e&&ae(i,0,Y),s.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function Re(e,t,n){return function(...o){const r=this.__v_raw,s=st(r),i=T(s),l="entries"===e||e===Symbol.iterator&&i,c="keys"===e&&i,a=r[e](...o),u=n?Te:t?we:ke;return!t&&ae(s,0,c?ee:Y),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Ve(e){return function(...t){return"delete"!==e&&this}}const Pe={get(e){return Ne(this,e)},get size(){return Fe(this)},has:$e,add:Me,set:Ae,delete:Ie,clear:Oe,forEach:Be(!1,!1)},Le={get(e){return Ne(this,e,!1,!0)},get size(){return Fe(this)},has:$e,add:Me,set:Ae,delete:Ie,clear:Oe,forEach:Be(!1,!0)},je={get(e){return Ne(this,e,!0)},get size(){return Fe(this,!0)},has(e){return $e.call(this,e,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Be(!0,!1)},Ue={get(e){return Ne(this,e,!0,!0)},get size(){return Fe(this,!0)},has(e){return $e.call(this,e,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Be(!0,!0)};function He(e,t){const n=t?e?Ue:Le:e?je:Pe;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(k(n,o)&&o in t?n:t,o,r)}["keys","values","entries",Symbol.iterator].forEach((e=>{Pe[e]=Re(e,!1,!1),je[e]=Re(e,!0,!1),Le[e]=Re(e,!1,!0),Ue[e]=Re(e,!0,!0)}));const De={get:He(!1,!1)},ze={get:He(!1,!0)},We={get:He(!0,!1)},Ke={get:He(!0,!0)},Ge=new WeakMap,qe=new WeakMap,Je=new WeakMap,Ze=new WeakMap;function Qe(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>B(e).slice(8,-1))(e))}function Xe(e){return e&&e.__v_isReadonly?e:tt(e,!1,_e,De,Ge)}function Ye(e){return tt(e,!1,Se,ze,qe)}function et(e){return tt(e,!0,xe,We,Je)}function tt(e,t,n,o,r){if(!A(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=Qe(e);if(0===i)return e;const l=new Proxy(e,2===i?o:n);return r.set(e,l),l}function nt(e){return ot(e)?nt(e.__v_raw):!(!e||!e.__v_isReactive)}function ot(e){return!(!e||!e.__v_isReadonly)}function rt(e){return nt(e)||ot(e)}function st(e){return e&&st(e.__v_raw)||e}const it=e=>A(e)?Xe(e):e;function lt(e){return Boolean(e&&!0===e.__v_isRef)}function ct(e){return ut(e)}class at{constructor(e,t=!1){this._rawValue=e,this._shallow=t,this.__v_isRef=!0,this._value=t?e:it(e)}get value(){return ae(st(this),0,"value"),this._value}set value(e){K(st(e),this._rawValue)&&(this._rawValue=e,this._value=this._shallow?e:it(e),ue(st(this),"set","value",e))}}function ut(e,t=!1){return lt(e)?e:new at(e,t)}function pt(e){return lt(e)?e.value:e}const ft={get:(e,t,n)=>pt(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return lt(r)&&!lt(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function dt(e){return nt(e)?e:new Proxy(e,ft)}class ht{constructor(e){this.__v_isRef=!0;const{get:t,set:n}=e((()=>ae(this,0,"value")),(()=>ue(this,"set","value")));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}class mt{constructor(e,t){this._object=e,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(e){this._object[this._key]=e}}function gt(e,t){return lt(e[t])?e[t]:new mt(e,t)}class vt{constructor(e,t,n){this._setter=t,this._dirty=!0,this.__v_isRef=!0,this.effect=te(e,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,ue(st(this),"set","value"))}}),this.__v_isReadonly=n}get value(){const e=st(this);return e._dirty&&(e._value=this.effect(),e._dirty=!1),ae(e,0,"value"),e._value}set value(e){this._setter(e)}}const yt=[];function bt(e,...t){le();const n=yt.length?yt[yt.length-1].component:null,o=n&&n.appContext.config.warnHandler,r=function(){let e=yt[yt.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const o=e.component&&e.component.parent;e=o&&o.vnode}return t}();if(o)St(o,n,11,[e+t.join(""),n&&n.proxy,r.map((({vnode:e})=>`at <${Rr(n,e.type)}>`)).join("\n"),r]);else{const n=[`[Vue warn]: ${e}`,...t];r.length&&n.push("\n",...function(e){const t=[];return e.forEach(((e,n)=>{t.push(...0===n?[]:["\n"],...function({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",o=!!e.component&&null==e.component.parent,r=` at <${Rr(e.component,e.type,o)}`,s=">"+n;return e.props?[r,..._t(e.props),s]:[r+s]}(e))})),t}(r)),console.warn(...n)}ce()}function _t(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach((n=>{t.push(...xt(n,e[n]))})),n.length>3&&t.push(" ..."),t}function xt(e,t,n){return F(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):"number"==typeof t||"boolean"==typeof t||null==t?n?t:[`${e}=${t}`]:lt(t)?(t=xt(e,st(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):$(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=st(t),n?t:[`${e}=`,t])}function St(e,t,n,o){let r;try{r=o?e(...o):e()}catch(s){kt(s,t,n)}return r}function Ct(e,t,n,o){if($(e)){const r=St(e,t,n,o);return r&&I(r)&&r.catch((e=>{kt(e,t,n)})),r}const r=[];for(let s=0;s>>1;Wt(Et[e])-1?Et.splice(t,0,e):Et.push(e),jt()}}function jt(){wt||Tt||(Tt=!0,Rt=Bt.then(Kt))}function Ut(e,t,n,o){w(e)?n.push(...e):t&&t.includes(e,e.allowRecurse?o+1:o)||n.push(e),jt()}function Ht(e){Ut(e,It,At,Ot)}function Dt(e,t=null){if($t.length){for(Vt=t,Ft=[...new Set($t)],$t.length=0,Mt=0;MtWt(e)-Wt(t))),Ot=0;Otnull==e.id?1/0:e.id;function Kt(e){Tt=!1,wt=!0,Dt(e),Et.sort(((e,t)=>Wt(e)-Wt(t)));try{for(Nt=0;Nte.trim())):t&&(r=n.map(J))}let l,c=o[l=W(t)]||o[l=W(U(t))];!c&&s&&(c=o[l=W(D(t))]),c&&Ct(c,e,6,r);const a=o[l+"Once"];if(a){if(e.emitted){if(e.emitted[l])return}else(e.emitted={})[l]=!0;Ct(a,e,6,r)}}function Jt(e,t,n=!1){if(!t.deopt&&void 0!==e.__emits)return e.__emits;const o=e.emits;let r={},s=!1;if(!$(e)){const o=e=>{const n=Jt(e,t,!0);n&&(s=!0,x(r,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return o||s?(w(o)?o.forEach((e=>r[e]=null)):x(r,o),e.__emits=r):e.__emits=null}function Zt(e,t){return!(!e||!b(t))&&(t=t.slice(2).replace(/Once$/,""),k(e,t[0].toLowerCase()+t.slice(1))||k(e,D(t))||k(e,t))}let Qt=0;const Xt=e=>Qt+=e;function Yt(e,t,n={},o,r){let s=e[t];Qt++,Wo();const i=s&&en(s(n)),l=qo(Lo,{key:n.key||`_${t}`},i||(o?o():[]),i&&1===e._?64:-2);return!r&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),Qt--,l}function en(e){return e.some((e=>!Jo(e)||e.type!==Uo&&!(e.type===Lo&&!en(e.children))))?e:null}let tn=null,nn=null;function on(e){const t=tn;return tn=e,nn=e&&e.type.__scopeId||null,t}function rn(e,t=tn){if(!t)return e;const n=(...n)=>{Qt||Wo(!0);const o=on(t),r=e(...n);return on(o),Qt||Ko(),r};return n._c=!0,n}function sn(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[i],slots:l,attrs:c,emit:a,render:u,renderCache:p,data:f,setupState:d,ctx:h}=e;let m;const g=on(e);try{let e;if(4&n.shapeFlag){const t=r||o;m=or(u.call(t,t,p,s,d,f,h)),e=c}else{const n=t;0,m=or(n.length>1?n(s,{attrs:c,slots:l,emit:a}):n(s,null)),e=t.props?c:cn(c)}let g=m;if(!1!==t.inheritAttrs&&e){const t=Object.keys(e),{shapeFlag:n}=g;t.length&&(1&n||6&n)&&(i&&t.some(_)&&(e=an(e,i)),g=tr(g,e))}n.dirs&&(g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),m=g}catch(v){Do.length=0,kt(v,e,1),m=er(Uo)}return on(g),m}function ln(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||b(n))&&((t||(t={}))[n]=e[n]);return t},an=(e,t)=>{const n={};for(const o in e)_(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function un(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r0?(a(null,e.ssFallback,t,n,o,null,s,i),gn(f,e.ssFallback)):f.resolve()}(t,n,o,r,s,i,l,c,a):function(e,t,n,o,r,s,i,l,{p:c,um:a,o:{createElement:u}}){const p=t.suspense=e.suspense;p.vnode=t,t.el=e.el;const f=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:m,isInFallback:g,isHydrating:v}=p;if(m)p.pendingBranch=f,Zo(f,m)?(c(m,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0?p.resolve():g&&(c(h,d,n,o,r,null,s,i,l),gn(p,d))):(p.pendingId++,v?(p.isHydrating=!1,p.activeBranch=m):a(m,r,p),p.deps=0,p.effects.length=0,p.hiddenContainer=u("div"),g?(c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0?p.resolve():(c(h,d,n,o,r,null,s,i,l),gn(p,d))):h&&Zo(f,h)?(c(h,f,n,o,r,p,s,i,l),p.resolve(!0)):(c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0&&p.resolve()));else if(h&&Zo(f,h))c(h,f,n,o,r,p,s,i,l),gn(p,f);else{const e=t.props&&t.props.onPending;if($(e)&&e(),p.pendingBranch=f,p.pendingId++,c(null,f,p.hiddenContainer,null,r,p,s,i,l),p.deps<=0)p.resolve();else{const{timeout:e,pendingId:t}=p;e>0?setTimeout((()=>{p.pendingId===t&&p.fallback(d)}),e):0===e&&p.fallback(d)}}}(e,t,n,o,r,i,l,c,a)},hydrate:function(e,t,n,o,r,s,i,l,c){const a=t.suspense=dn(t,o,n,e.parentNode,document.createElement("div"),null,r,s,i,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,s,i);0===a.deps&&a.resolve();return u},create:dn};function dn(e,t,n,o,r,s,i,l,c,a,u=!1){const{p:p,m:f,um:d,n:h,o:{parentNode:m,remove:g}}=a,v=J(e.props&&e.props.timeout),y={vnode:e,parent:t,parentComponent:n,isSVG:i,container:o,hiddenContainer:r,anchor:s,deps:0,pendingId:0,timeout:"number"==typeof v?v:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:o,pendingId:r,effects:s,parentComponent:i,container:l}=y;if(y.isHydrating)y.isHydrating=!1;else if(!e){const e=n&&o.transition&&"out-in"===o.transition.mode;e&&(n.transition.afterLeave=()=>{r===y.pendingId&&f(o,l,t,0)});let{anchor:t}=y;n&&(t=h(n),d(n,i,y,!0)),e||f(o,l,t,0)}gn(y,o),y.pendingBranch=null,y.isInFallback=!1;let c=y.parent,a=!1;for(;c;){if(c.pendingBranch){c.effects.push(...s),a=!0;break}c=c.parent}a||Ht(s),y.effects=[];const u=t.props&&t.props.onResolve;$(u)&&u()},fallback(e){if(!y.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:o,container:r,isSVG:s}=y,i=t.props&&t.props.onFallback;$(i)&&i();const a=h(n),u=()=>{y.isInFallback&&(p(null,e,r,a,o,null,s,l,c),gn(y,e))},f=e.transition&&"out-in"===e.transition.mode;f&&(n.transition.afterLeave=u),d(n,o,null,!0),y.isInFallback=!0,f||u()},move(e,t,n){y.activeBranch&&f(y.activeBranch,e,t,n),y.container=e},next:()=>y.activeBranch&&h(y.activeBranch),registerDep(e,t){const n=!!y.pendingBranch;n&&y.deps++;const o=e.vnode.el;e.asyncDep.catch((t=>{kt(t,e,0)})).then((r=>{if(e.isUnmounted||y.isUnmounted||y.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:s}=e;$r(e,r),o&&(s.el=o);const l=!o&&e.subTree.el;t(e,s,m(o||e.subTree.el),o?null:h(e.subTree),y,i,c),l&&g(l),pn(e,s.el),n&&0==--y.deps&&y.resolve()}))},unmount(e,t){y.isUnmounted=!0,y.activeBranch&&d(y.activeBranch,n,e,t),y.pendingBranch&&d(y.pendingBranch,n,e,t)}};return y}function hn(e){if($(e)&&(e=e()),w(e)){e=ln(e)}return or(e)}function mn(e,t){t&&t.pendingBranch?w(e)?t.effects.push(...e):t.effects.push(e):Ht(e)}function gn(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e,r=n.el=t.el;o&&o.subTree===n&&(o.vnode.el=r,pn(o,r))}function vn(e,t,n,o){const[r,s]=e.propsOptions;if(t)for(const i in t){const s=t[i];if(P(i))continue;let l;r&&k(r,l=U(i))?n[l]=s:Zt(e.emitsOptions,i)||(o[i]=s)}if(s){const t=st(n);for(let o=0;o{i=!0;const[n,o]=bn(e,t,!0);x(r,n),o&&s.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!o&&!i)return e.__props=m;if(w(o))for(let l=0;l-1,n[1]=o<0||t-1||k(n,"default"))&&s.push(e)}}}return e.__props=[r,s]}function _n(e){return"$"!==e[0]}function xn(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Sn(e,t){return xn(e)===xn(t)}function Cn(e,t){return w(t)?t.findIndex((t=>Sn(t,e))):$(t)&&Sn(t,e)?0:-1}function kn(e,t,n=Cr,o=!1){if(n){const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;le(),wr(n);const r=Ct(t,n,e,o);return wr(null),ce(),r});return o?r.unshift(s):r.push(s),s}}const wn=e=>(t,n=Cr)=>!Nr&&kn(e,t,n),Tn=wn("bm"),En=wn("m"),Nn=wn("bu"),$n=wn("u"),Fn=wn("bum"),Mn=wn("um"),An=wn("rtg"),In=wn("rtc"),On=(e,t=Cr)=>{kn("ec",e,t)};function Bn(e,t){return Pn(e,null,t)}const Rn={};function Vn(e,t,n){return Pn(e,t,n)}function Pn(e,t,{immediate:n,deep:o,flush:r,onTrack:s,onTrigger:i}=h,l=Cr){let c,a,u=!1;if(lt(e)?(c=()=>e.value,u=!!e._shallow):nt(e)?(c=()=>e,o=!0):c=w(e)?()=>e.map((e=>lt(e)?e.value:nt(e)?jn(e):$(e)?St(e,l,2,[l&&l.proxy]):void 0)):$(e)?t?()=>St(e,l,2,[l&&l.proxy]):()=>{if(!l||!l.isUnmounted)return a&&a(),Ct(e,l,3,[p])}:g,t&&o){const e=c;c=()=>jn(e())}let p=e=>{a=v.options.onStop=()=>{St(e,l,4)}},f=w(e)?[]:Rn;const d=()=>{if(v.active)if(t){const e=v();(o||u||K(e,f))&&(a&&a(),Ct(t,l,3,[e,f===Rn?void 0:f,p]),f=e)}else v()};let m;d.allowRecurse=!!t,m="sync"===r?d:"post"===r?()=>So(d,l&&l.suspense):()=>{!l||l.isMounted?function(e){Ut(e,Ft,$t,Mt)}(d):d()};const v=te(c,{lazy:!0,onTrack:s,onTrigger:i,scheduler:m});return Ir(v,l),t?n?d():f=v():"post"===r?So(v,l&&l.suspense):v(),()=>{ne(v),l&&S(l.effects,v)}}function Ln(e,t,n){const o=this.proxy;return Pn(F(e)?()=>o[e]:e.bind(o),t.bind(o),n,this)}function jn(e,t=new Set){if(!A(e)||t.has(e))return e;if(t.add(e),lt(e))jn(e.value,t);else if(w(e))for(let n=0;n{jn(e,t)}));else for(const n in e)jn(e[n],t);return e}function Un(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return En((()=>{e.isMounted=!0})),Fn((()=>{e.isUnmounting=!0})),e}const Hn=[Function,Array],Dn={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Hn,onEnter:Hn,onAfterEnter:Hn,onEnterCancelled:Hn,onBeforeLeave:Hn,onLeave:Hn,onAfterLeave:Hn,onLeaveCancelled:Hn,onBeforeAppear:Hn,onAppear:Hn,onAfterAppear:Hn,onAppearCancelled:Hn},setup(e,{slots:t}){const n=kr(),o=Un();let r;return()=>{const s=t.default&&Jn(t.default(),!0);if(!s||!s.length)return;const i=st(e),{mode:l}=i,c=s[0];if(o.isLeaving)return Kn(c);const a=Gn(c);if(!a)return Kn(c);const u=Wn(a,i,o,n);qn(a,u);const p=n.subTree,f=p&&Gn(p);let d=!1;const{getTransitionKey:h}=a.type;if(h){const e=h();void 0===r?r=e:e!==r&&(r=e,d=!0)}if(f&&f.type!==Uo&&(!Zo(a,f)||d)){const e=Wn(f,i,o,n);if(qn(f,e),"out-in"===l)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,n.update()},Kn(c);"in-out"===l&&a.type!==Uo&&(e.delayLeave=(e,t,n)=>{zn(o,f)[String(f.key)]=f,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return c}}};function zn(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Wn(e,t,n,o){const{appear:r,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:p,onLeave:f,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:m,onAppear:g,onAfterAppear:v,onAppearCancelled:y}=t,b=String(e.key),_=zn(n,e),x=(e,t)=>{e&&Ct(e,o,9,t)},S={mode:s,persisted:i,beforeEnter(t){let o=l;if(!n.isMounted){if(!r)return;o=m||l}t._leaveCb&&t._leaveCb(!0);const s=_[b];s&&Zo(e,s)&&s.el._leaveCb&&s.el._leaveCb(),x(o,[t])},enter(e){let t=c,o=a,s=u;if(!n.isMounted){if(!r)return;t=g||c,o=v||a,s=y||u}let i=!1;const l=e._enterCb=t=>{i||(i=!0,x(t?s:o,[e]),S.delayedLeave&&S.delayedLeave(),e._enterCb=void 0)};t?(t(e,l),t.length<=1&&l()):l()},leave(t,o){const r=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return o();x(p,[t]);let s=!1;const i=t._leaveCb=n=>{s||(s=!0,o(),x(n?h:d,[t]),t._leaveCb=void 0,_[r]===e&&delete _[r])};_[r]=e,f?(f(t,i),f.length<=1&&i()):i()},clone:e=>Wn(e,t,n,o)};return S}function Kn(e){if(Zn(e))return(e=tr(e)).children=null,e}function Gn(e){return Zn(e)?e.children?e.children[0]:void 0:e}function qn(e,t){6&e.shapeFlag&&e.component?qn(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Jn(e,t=!1){let n=[],o=0;for(let r=0;r1)for(let r=0;re.type.__isKeepAlive,Qn={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=kr(),o=n.ctx;if(!o.renderer)return t.default;const r=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:p}}}=o,f=p("div");function d(e){oo(e),u(e,n,l)}function h(e){r.forEach(((t,n)=>{const o=Br(t.type);!o||e&&e(o)||m(n)}))}function m(e){const t=r.get(e);i&&t.type===i.type?i&&oo(i):d(t),r.delete(e),s.delete(e)}o.activate=(e,t,n,o,r)=>{const s=e.component;a(e,t,n,0,l),c(s.vnode,e,t,n,s,l,o,e.slotScopeIds,r),So((()=>{s.isDeactivated=!1,s.a&&G(s.a);const t=e.props&&e.props.onVnodeMounted;t&&Eo(t,s.parent,e)}),l)},o.deactivate=e=>{const t=e.component;a(e,f,null,1,l),So((()=>{t.da&&G(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&Eo(n,t.parent,e),t.isDeactivated=!0}),l)},Vn((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>Xn(e,t))),t&&h((e=>!Xn(t,e)))}),{flush:"post",deep:!0});let g=null;const v=()=>{null!=g&&r.set(g,ro(n.subTree))};return En(v),$n(v),Fn((()=>{r.forEach((e=>{const{subTree:t,suspense:o}=n,r=ro(t);if(e.type!==r.type)d(e);else{oo(r);const e=r.component.da;e&&So(e,o)}}))})),()=>{if(g=null,!t.default)return null;const n=t.default(),o=n[0];if(n.length>1)return i=null,n;if(!(Jo(o)&&(4&o.shapeFlag||128&o.shapeFlag)))return i=null,o;let l=ro(o);const c=l.type,a=Br(c),{include:u,exclude:p,max:f}=e;if(u&&(!a||!Xn(u,a))||p&&a&&Xn(p,a))return i=l,o;const d=null==l.key?c:l.key,h=r.get(d);return l.el&&(l=tr(l),128&o.shapeFlag&&(o.ssContent=l)),g=d,h?(l.el=h.el,l.component=h.component,l.transition&&qn(l,l.transition),l.shapeFlag|=512,s.delete(d),s.add(d)):(s.add(d),f&&s.size>parseInt(f,10)&&m(s.values().next().value)),l.shapeFlag|=256,i=l,o}}};function Xn(e,t){return w(e)?e.some((e=>Xn(e,t))):F(e)?e.split(",").indexOf(t)>-1:!!e.test&&e.test(t)}function Yn(e,t){to(e,"a",t)}function eo(e,t){to(e,"da",t)}function to(e,t,n=Cr){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}e()});if(kn(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Zn(e.parent.vnode)&&no(o,t,n,e),e=e.parent}}function no(e,t,n,o){const r=kn(t,e,o,!0);Mn((()=>{S(o[t],r)}),n)}function oo(e){let t=e.shapeFlag;256&t&&(t-=256),512&t&&(t-=512),e.shapeFlag=t}function ro(e){return 128&e.shapeFlag?e.ssContent:e}const so=e=>"_"===e[0]||"$stable"===e,io=e=>w(e)?e.map(or):[or(e)],lo=(e,t,n)=>rn((e=>io(t(e))),n),co=(e,t)=>{const n=e._ctx;for(const o in e){if(so(o))continue;const r=e[o];if($(r))t[o]=lo(0,r,n);else if(null!=r){const e=io(r);t[o]=()=>e}}},ao=(e,t)=>{const n=io(t);e.slots.default=()=>n};function uo(e,t,n,o){const r=e.dirs,s=t&&t.dirs;for(let i=0;i(s.has(e)||(e&&$(e.install)?(s.add(e),e.install(l,...t)):$(e)&&(s.add(e),e(l,...t))),l),mixin:e=>(r.mixins.includes(e)||(r.mixins.push(e),(e.props||e.emits)&&(r.deopt=!0)),l),component:(e,t)=>t?(r.components[e]=t,l):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,l):r.directives[e],mount(s,c,a){if(!i){const u=er(n,o);return u.appContext=r,c&&t?t(u,s):e(u,s,a),i=!0,l._container=s,s.__vue_app__=l,u.component.proxy}},unmount(){i&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,l)};return l}}let mo=!1;const go=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,vo=e=>8===e.nodeType;function yo(e){const{mt:t,p:n,o:{patchProp:o,nextSibling:r,parentNode:s,remove:i,insert:l,createComment:c}}=e,a=(n,o,i,l,c,m=!1)=>{const g=vo(n)&&"["===n.data,v=()=>d(n,o,i,l,c,g),{type:y,ref:b,shapeFlag:_}=o,x=n.nodeType;o.el=n;let S=null;switch(y){case jo:3!==x?S=v():(n.data!==o.children&&(mo=!0,n.data=o.children),S=r(n));break;case Uo:S=8!==x||g?v():r(n);break;case Ho:if(1===x){S=n;const e=!o.children.length;for(let t=0;t{t(o,e,null,i,l,go(e),m)},u=o.type.__asyncLoader;u?u().then(a):a(),S=g?h(n):r(n)}else 64&_?S=8!==x?v():o.type.hydrate(n,o,i,l,c,m,e,p):128&_&&(S=o.type.hydrate(n,o,i,l,go(s(n)),c,m,e,a))}return null!=b&&Co(b,null,l,o),S},u=(e,t,n,r,s,l)=>{l=l||!!t.dynamicChildren;const{props:c,patchFlag:a,shapeFlag:u,dirs:f}=t;if(-1!==a){if(f&&uo(t,null,n,"created"),c)if(!l||16&a||32&a)for(const t in c)!P(t)&&b(t)&&o(e,t,null,c[t]);else c.onClick&&o(e,"onClick",null,c.onClick);let d;if((d=c&&c.onVnodeBeforeMount)&&Eo(d,n,t),f&&uo(t,null,n,"beforeMount"),((d=c&&c.onVnodeMounted)||f)&&mn((()=>{d&&Eo(d,n,t),f&&uo(t,null,n,"mounted")}),r),16&u&&(!c||!c.innerHTML&&!c.textContent)){let o=p(e.firstChild,t,e,n,r,s,l);for(;o;){mo=!0;const e=o;o=o.nextSibling,i(e)}}else 8&u&&e.textContent!==t.children&&(mo=!0,e.textContent=t.children)}return e.nextSibling},p=(e,t,o,r,s,i,l)=>{l=l||!!t.dynamicChildren;const c=t.children,u=c.length;for(let p=0;p{const{slotScopeIds:u}=t;u&&(i=i?i.concat(u):u);const f=s(e),d=p(r(e),t,f,n,o,i,a);return d&&vo(d)&&"]"===d.data?r(t.anchor=d):(mo=!0,l(t.anchor=c("]"),f,d),d)},d=(e,t,o,l,c,a)=>{if(mo=!0,t.el=null,a){const t=h(e);for(;;){const n=r(e);if(!n||n===t)break;i(n)}}const u=r(e),p=s(e);return i(e),n(null,t,p,u,o,l,go(p),c),u},h=e=>{let t=0;for(;e;)if((e=r(e))&&vo(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return r(e);t--}return e};return[(e,t)=>{mo=!1,a(t.firstChild,e,null,null,null),zt(),mo&&console.error("Hydration completed but contains mismatches.")},a]}function bo(e){return $(e)?{setup:e,name:e.name}:e}function _o(e,{vnode:{ref:t,props:n,children:o}}){const r=er(e,n,o);return r.ref=t,r}const xo={scheduler:Lt,allowRecurse:!0},So=mn,Co=(e,t,n,o)=>{if(w(e))return void e.forEach(((e,r)=>Co(e,t&&(w(t)?t[r]:t),n,o)));let r;if(o){if(o.type.__asyncLoader)return;r=4&o.shapeFlag?o.component.exposed||o.component.proxy:o.el}else r=null;const{i:s,r:i}=e,l=t&&t.r,c=s.refs===h?s.refs={}:s.refs,a=s.setupState;if(null!=l&&l!==i&&(F(l)?(c[l]=null,k(a,l)&&(a[l]=null)):lt(l)&&(l.value=null)),F(i)){const e=()=>{c[i]=r,k(a,i)&&(a[i]=r)};r?(e.id=-1,So(e,n)):e()}else if(lt(i)){const e=()=>{i.value=r};r?(e.id=-1,So(e,n)):e()}else $(i)&&St(i,s,12,[r,c])};function ko(e){return To(e)}function wo(e){return To(e,yo)}function To(e,t){const{insert:n,remove:o,patchProp:r,forcePatchProp:s,createElement:i,createText:l,createComment:c,setText:a,setElementText:u,parentNode:p,nextSibling:f,setScopeId:d=g,cloneNode:v,insertStaticContent:y}=e,b=(e,t,n,o=null,r=null,s=null,i=!1,l=null,c=!1)=>{e&&!Zo(e,t)&&(o=Y(e),K(e,r,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:p}=t;switch(a){case jo:_(e,t,n,o);break;case Uo:S(e,t,n,o);break;case Ho:null==e&&C(t,n,o,i);break;case Lo:A(e,t,n,o,r,s,i,l,c);break;default:1&p?w(e,t,n,o,r,s,i,l,c):6&p?O(e,t,n,o,r,s,i,l,c):(64&p||128&p)&&a.process(e,t,n,o,r,s,i,l,c,oe)}null!=u&&r&&Co(u,e&&e.ref,s,t)},_=(e,t,o,r)=>{if(null==e)n(t.el=l(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&a(n,t.children)}},S=(e,t,o,r)=>{null==e?n(t.el=c(t.children||""),o,r):t.el=e.el},C=(e,t,n,o)=>{[e.el,e.anchor]=y(e.children,t,n,o)},w=(e,t,n,o,r,s,i,l,c)=>{i=i||"svg"===t.type,null==e?T(t,n,o,r,s,i,l,c):$(e,t,r,s,i,l,c)},T=(e,t,o,s,l,c,a,p)=>{let f,d;const{type:h,props:m,shapeFlag:g,transition:y,patchFlag:b,dirs:_}=e;if(e.el&&void 0!==v&&-1===b)f=e.el=v(e.el);else{if(f=e.el=i(e.type,c,m&&m.is,m),8&g?u(f,e.children):16&g&&N(e.children,f,null,s,l,c&&"foreignObject"!==h,a,p||!!e.dynamicChildren),_&&uo(e,null,s,"created"),m){for(const t in m)P(t)||r(f,t,null,m[t],c,e.children,s,l,X);(d=m.onVnodeBeforeMount)&&Eo(d,s,e)}E(f,e,e.scopeId,a,s)}_&&uo(e,null,s,"beforeMount");const x=(!l||l&&!l.pendingBranch)&&y&&!y.persisted;x&&y.beforeEnter(f),n(f,t,o),((d=m&&m.onVnodeMounted)||x||_)&&So((()=>{d&&Eo(d,s,e),x&&y.enter(f),_&&uo(e,null,s,"mounted")}),l)},E=(e,t,n,o,r)=>{if(n&&d(e,n),o)for(let s=0;s{for(let a=c;a{const a=t.el=e.el;let{patchFlag:p,dynamicChildren:f,dirs:d}=t;p|=16&e.patchFlag;const m=e.props||h,g=t.props||h;let v;if((v=g.onVnodeBeforeUpdate)&&Eo(v,n,t,e),d&&uo(t,e,n,"beforeUpdate"),p>0){if(16&p)M(a,t,m,g,n,o,i);else if(2&p&&m.class!==g.class&&r(a,"class",null,g.class,i),4&p&&r(a,"style",m.style,g.style,i),8&p){const l=t.dynamicProps;for(let t=0;t{v&&Eo(v,n,t,e),d&&uo(t,e,n,"updated")}),o)},F=(e,t,n,o,r,s,i)=>{for(let l=0;l{if(n!==o){for(const a in o){if(P(a))continue;const u=o[a],p=n[a];(u!==p||s&&s(e,a))&&r(e,a,p,u,c,t.children,i,l,X)}if(n!==h)for(const s in n)P(s)||s in o||r(e,s,n[s],null,c,t.children,i,l,X)}},A=(e,t,o,r,s,i,c,a,u)=>{const p=t.el=e?e.el:l(""),f=t.anchor=e?e.anchor:l("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:m}=t;d>0&&(u=!0),m&&(a=a?a.concat(m):m),null==e?(n(p,o,r),n(f,o,r),N(t.children,o,f,s,i,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?(F(e.dynamicChildren,h,o,s,i,c,a),(null!=t.key||s&&t===s.subTree)&&No(e,t,!0)):j(e,t,o,f,s,i,c,a,u)},O=(e,t,n,o,r,s,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,i,c):B(t,n,o,r,s,i,c):R(e,t,c)},B=(e,t,n,o,r,s,i)=>{const l=e.component=function(e,t,n){const o=e.type,r=(t?t.appContext:e.appContext)||xr,s={uid:Sr++,vnode:e,type:o,parent:t,appContext:r,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:bn(o,r),emitsOptions:Jt(o,r),emit:null,emitted:null,propsDefaults:h,ctx:h,data:h,props:h,attrs:h,slots:h,refs:h,setupState:h,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=qt.bind(null,s),s}(e,o,r);if(Zn(e)&&(l.ctx.renderer=oe),function(e,t=!1){Nr=t;const{props:n,children:o}=e.vnode,r=Tr(e);(function(e,t,n,o=!1){const r={},s={};q(s,Qo,1),e.propsDefaults=Object.create(null),vn(e,t,r,s),n?e.props=o?r:Ye(r):e.type.props?e.props=r:e.props=s,e.attrs=s})(e,n,r,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=t,q(t,"_",n)):co(t,e.slots={})}else e.slots={},t&&ao(e,t);q(e.slots,Qo,1)})(e,o);const s=r?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,br);const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?Ar(e):null;Cr=e,le();const r=St(o,e,0,[e.props,n]);if(ce(),Cr=null,I(r)){if(t)return r.then((t=>{$r(e,t)})).catch((t=>{kt(t,e,0)}));e.asyncDep=r}else $r(e,r)}else Mr(e)}(e,t):void 0;Nr=!1}(l),l.asyncDep){if(r&&r.registerDep(l,V),!e.el){const e=l.subTree=er(Uo);S(null,e,t,n)}}else V(l,e,t,n,r,s,i)},R=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:s}=e,{props:i,children:l,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!l||l&&l.$stable)||o!==i&&(o?!i||un(o,i,a):!!i);if(1024&c)return!0;if(16&c)return o?un(o,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;tNt&&Et.splice(t,1)}(o.update),o.update()}else t.component=e.component,t.el=e.el,o.vnode=t},V=(e,t,n,o,r,s,i)=>{e.update=te((function(){if(e.isMounted){let t,{next:n,bu:o,u:l,parent:c,vnode:a}=e,u=n;n?(n.el=a.el,L(e,n,i)):n=a,o&&G(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Eo(t,c,n,a);const f=sn(e),d=e.subTree;e.subTree=f,b(d,f,p(d.el),Y(d),e,r,s),n.el=f.el,null===u&&pn(e,f.el),l&&So(l,r),(t=n.props&&n.props.onVnodeUpdated)&&So((()=>{Eo(t,c,n,a)}),r)}else{let i;const{el:l,props:c}=t,{bm:a,m:u,parent:p}=e;a&&G(a),(i=c&&c.onVnodeBeforeMount)&&Eo(i,p,t);const f=e.subTree=sn(e);if(l&&se?se(t.el,f,e,r,null):(b(null,f,n,o,e,r,s),t.el=f.el),u&&So(u,r),i=c&&c.onVnodeMounted){const e=t;So((()=>{Eo(i,p,e)}),r)}const{a:d}=e;d&&256&t.shapeFlag&&So(d,r),e.isMounted=!0,t=n=o=null}}),xo)},L=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:r,attrs:s,vnode:{patchFlag:i}}=e,l=st(r),[c]=e.propsOptions;if(!(o||i>0)||16&i){let o;vn(e,t,r,s);for(const s in l)t&&(k(t,s)||(o=D(s))!==s&&k(t,o))||(c?!n||void 0===n[s]&&void 0===n[o]||(r[s]=yn(c,t||h,s,void 0,e)):delete r[s]);if(s!==l)for(const e in s)t&&k(t,e)||delete s[e]}else if(8&i){const n=e.vnode.dynamicProps;for(let o=0;o{const{vnode:o,slots:r}=e;let s=!0,i=h;if(32&o.shapeFlag){const e=t._;e?n&&1===e?s=!1:(x(r,t),n||1!==e||delete r._):(s=!t.$stable,co(t,r)),i=t}else t&&(ao(e,t),i={default:1});if(s)for(const l in r)so(l)||l in i||delete r[l]})(e,t.children,n),le(),Dt(void 0,e.update),ce()},j=(e,t,n,o,r,s,i,l,c=!1)=>{const a=e&&e.children,p=e?e.shapeFlag:0,f=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void z(a,f,n,o,r,s,i,l,c);if(256&d)return void H(a,f,n,o,r,s,i,l,c)}8&h?(16&p&&X(a,r,s),f!==a&&u(n,f)):16&p?16&h?z(a,f,n,o,r,s,i,l,c):X(a,r,s,!0):(8&p&&u(n,""),16&h&&N(f,n,o,r,s,i,l,c))},H=(e,t,n,o,r,s,i,l,c)=>{t=t||m;const a=(e=e||m).length,u=t.length,p=Math.min(a,u);let f;for(f=0;fu?X(e,r,s,!0,!1,p):N(t,n,o,r,s,i,l,c,p)},z=(e,t,n,o,r,s,i,l,c)=>{let a=0;const u=t.length;let p=e.length-1,f=u-1;for(;a<=p&&a<=f;){const o=e[a],u=t[a]=c?rr(t[a]):or(t[a]);if(!Zo(o,u))break;b(o,u,n,null,r,s,i,l,c),a++}for(;a<=p&&a<=f;){const o=e[p],a=t[f]=c?rr(t[f]):or(t[f]);if(!Zo(o,a))break;b(o,a,n,null,r,s,i,l,c),p--,f--}if(a>p){if(a<=f){const e=f+1,p=ef)for(;a<=p;)K(e[a],r,s,!0),a++;else{const d=a,h=a,g=new Map;for(a=h;a<=f;a++){const e=t[a]=c?rr(t[a]):or(t[a]);null!=e.key&&g.set(e.key,a)}let v,y=0;const _=f-h+1;let x=!1,S=0;const C=new Array(_);for(a=0;a<_;a++)C[a]=0;for(a=d;a<=p;a++){const o=e[a];if(y>=_){K(o,r,s,!0);continue}let u;if(null!=o.key)u=g.get(o.key);else for(v=h;v<=f;v++)if(0===C[v-h]&&Zo(o,t[v])){u=v;break}void 0===u?K(o,r,s,!0):(C[u-h]=a+1,u>=S?S=u:x=!0,b(o,t[u],n,null,r,s,i,l,c),y++)}const k=x?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const c=e.length;for(o=0;o0&&(t[o]=n[s-1]),n[s]=o)}}s=n.length,i=n[s-1];for(;s-- >0;)n[s]=i,i=t[i];return n}(C):m;for(v=k.length-1,a=_-1;a>=0;a--){const e=h+a,p=t[e],f=e+1{const{el:i,type:l,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void W(e.component.subTree,t,o,r);if(128&u)return void e.suspense.move(t,o,r);if(64&u)return void l.move(e,t,o,oe);if(l===Lo){n(i,t,o);for(let e=0;e{let s;for(;e&&e!==t;)s=f(e),n(e,o,r),e=s;n(t,o,r)})(e,t,o);if(2!==r&&1&u&&c)if(0===r)c.beforeEnter(i),n(i,t,o),So((()=>c.enter(i)),s);else{const{leave:e,delayLeave:r,afterLeave:s}=c,l=()=>n(i,t,o),a=()=>{e(i,(()=>{l(),s&&s()}))};r?r(i,l,a):a()}else n(i,t,o)},K=(e,t,n,o=!1,r=!1)=>{const{type:s,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:p,dirs:f}=e;if(null!=l&&Co(l,null,n,null),256&u)return void t.ctx.deactivate(e);const d=1&u&&f;let h;if((h=i&&i.onVnodeBeforeUnmount)&&Eo(h,t,e),6&u)Q(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);d&&uo(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,r,oe,o):a&&(s!==Lo||p>0&&64&p)?X(a,t,n,!1,!0):(s===Lo&&(128&p||256&p)||!r&&16&u)&&X(c,t,n),o&&J(e)}((h=i&&i.onVnodeUnmounted)||d)&&So((()=>{h&&Eo(h,t,e),d&&uo(e,null,t,"unmounted")}),n)},J=e=>{const{type:t,el:n,anchor:r,transition:s}=e;if(t===Lo)return void Z(n,r);if(t===Ho)return void(({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),o(e),e=n;o(t)})(e);const i=()=>{o(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:o}=s,r=()=>t(n,i);o?o(e.el,i,r):r()}else i()},Z=(e,t)=>{let n;for(;e!==t;)n=f(e),o(e),e=n;o(t)},Q=(e,t,n)=>{const{bum:o,effects:r,update:s,subTree:i,um:l}=e;if(o&&G(o),r)for(let c=0;c{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},X=(e,t,n,o=!1,r=!1,s=0)=>{for(let i=s;i6&e.shapeFlag?Y(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),ee=(e,t,n)=>{null==e?t._vnode&&K(t._vnode,null,null,!0):b(t._vnode||null,e,t,null,null,null,n),zt(),t._vnode=e},oe={p:b,um:K,m:W,r:J,mt:B,mc:N,pc:j,pbc:F,n:Y,o:e};let re,se;return t&&([re,se]=t(oe)),{render:ee,hydrate:re,createApp:ho(ee,re)}}function Eo(e,t,n,o=null){Ct(e,t,7,[n,o])}function No(e,t,n=!1){const o=e.children,r=t.children;if(w(o)&&w(r))for(let s=0;se&&(e.disabled||""===e.disabled),Fo=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,Mo=(e,t)=>{const n=e&&e.to;if(F(n)){if(t){return t(n)}return null}return n};function Ao(e,t,n,{o:{insert:o},m:r},s=2){0===s&&o(e.targetAnchor,t,n);const{el:i,anchor:l,shapeFlag:c,children:a,props:u}=e,p=2===s;if(p&&o(i,t,n),(!p||$o(u))&&16&c)for(let f=0;f{16&y&&u(b,e,t,r,s,i,l,c)};v?g(n,a):p&&g(p,f)}else{t.el=e.el;const o=t.anchor=e.anchor,u=t.target=e.target,d=t.targetAnchor=e.targetAnchor,m=$o(e.props),g=m?n:u,y=m?o:d;if(i=i||Fo(u),t.dynamicChildren?(f(e.dynamicChildren,t.dynamicChildren,g,r,s,i,l),No(e,t,!0)):c||p(e,t,g,y,r,s,i,l,!1),v)m||Ao(t,n,o,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=Mo(t.props,h);e&&Ao(t,e,null,a,0)}else m&&Ao(t,u,d,a,1)}},remove(e,t,n,o,{um:r,o:{remove:s}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:p,props:f}=e;if(p&&s(u),(i||!$o(f))&&(s(a),16&l))for(let d=0;d0&&zo&&zo.push(s),s}function Jo(e){return!!e&&!0===e.__v_isVNode}function Zo(e,t){return e.type===t.type&&e.key===t.key}const Qo="__vInternal",Xo=({key:e})=>null!=e?e:null,Yo=({ref:e})=>null!=e?F(e)||lt(e)||$(e)?{i:tn,r:e}:e:null,er=function(e,t=null,n=null,r=0,s=null,i=!1){e&&e!==Ro||(e=Uo);if(Jo(e)){const o=tr(e,t,!0);return n&&sr(o,n),o}c=e,$(c)&&"__vccOpts"in c&&(e=e.__vccOpts);var c;if(t){(rt(t)||Qo in t)&&(t=x({},t));let{class:e,style:n}=t;e&&!F(e)&&(t.class=l(e)),A(n)&&(rt(n)&&!w(n)&&(n=x({},n)),t.style=o(n))}const a=F(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:A(e)?4:$(e)?2:0,u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Xo(t),ref:t&&Yo(t),scopeId:nn,slotScopeIds:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null};if(sr(u,n),128&a){const{content:e,fallback:t}=function(e){const{shapeFlag:t,children:n}=e;let o,r;return 32&t?(o=hn(n.default),r=hn(n.fallback)):(o=hn(n),r=or(null)),{content:o,fallback:r}}(u);u.ssContent=e,u.ssFallback=t}Go>0&&!i&&zo&&(r>0||6&a)&&32!==r&&zo.push(u);return u};function tr(e,t,n=!1){const{props:o,ref:r,patchFlag:s,children:i}=e,l=t?ir(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Xo(l),ref:t&&t.ref?n&&r?w(r)?r.concat(Yo(t)):[r,Yo(t)]:Yo(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Lo?-1===s?16:16|s:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&tr(e.ssContent),ssFallback:e.ssFallback&&tr(e.ssFallback),el:e.el,anchor:e.anchor}}function nr(e=" ",t=0){return er(jo,null,e,t)}function or(e){return null==e||"boolean"==typeof e?er(Uo):w(e)?er(Lo,null,e):"object"==typeof e?null===e.el?e:tr(e):er(jo,null,String(e))}function rr(e){return null===e.el?e:tr(e)}function sr(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if(w(t))n=16;else if("object"==typeof t){if(1&o||64&o){const n=t.default;return void(n&&(n._c&&Xt(1),sr(e,n()),n._c&&Xt(-1)))}{n=32;const o=t._;o||Qo in t?3===o&&tn&&(1024&tn.vnode.patchFlag?(t._=2,e.patchFlag|=1024):t._=1):t._ctx=tn}}else $(t)?(t={default:t,_ctx:tn},n=32):(t=String(t),64&o?(n=16,t=[nr(t)]):n=8);e.children=t,e.shapeFlag|=n}function ir(...e){const t=x({},e[0]);for(let n=1;n1)return n&&$(t)?t():t}}let ar=!0;function ur(e,t,n=[],o=[],r=[],s=!1){const{mixins:i,extends:l,data:c,computed:a,methods:u,watch:p,provide:f,inject:d,components:m,directives:v,beforeMount:y,mounted:b,beforeUpdate:_,updated:S,activated:C,deactivated:k,beforeDestroy:T,beforeUnmount:E,destroyed:N,unmounted:F,render:M,renderTracked:I,renderTriggered:O,errorCaptured:B,expose:R}=t,V=e.proxy,P=e.ctx,L=e.appContext.mixins;if(s&&M&&e.render===g&&(e.render=M),s||(ar=!1,pr("beforeCreate","bc",t,e,L),ar=!0,dr(e,L,n,o,r)),l&&ur(e,l,n,o,r,!0),i&&dr(e,i,n,o,r),d)if(w(d))for(let h=0;hhr(e,t,V))),c&&hr(e,c,V)),a)for(const h in a){const e=a[h],t=Vr({get:$(e)?e.bind(V,V):$(e.get)?e.get.bind(V,V):g,set:!$(e)&&$(e.set)?e.set.bind(V):g});Object.defineProperty(P,h,{enumerable:!0,configurable:!0,get:()=>t.value,set:e=>t.value=e})}if(p&&o.push(p),!s&&o.length&&o.forEach((e=>{for(const t in e)mr(e[t],P,V,t)})),f&&r.push(f),!s&&r.length&&r.forEach((e=>{const t=$(e)?e.call(V):e;Reflect.ownKeys(t).forEach((e=>{lr(e,t[e])}))})),s&&(m&&x(e.components||(e.components=x({},e.type.components)),m),v&&x(e.directives||(e.directives=x({},e.type.directives)),v)),s||pr("created","c",t,e,L),y&&Tn(y.bind(V)),b&&En(b.bind(V)),_&&Nn(_.bind(V)),S&&$n(S.bind(V)),C&&Yn(C.bind(V)),k&&eo(k.bind(V)),B&&On(B.bind(V)),I&&In(I.bind(V)),O&&An(O.bind(V)),E&&Fn(E.bind(V)),F&&Mn(F.bind(V)),w(R)&&!s)if(R.length){const t=e.exposed||(e.exposed=dt({}));R.forEach((e=>{t[e]=gt(V,e)}))}else e.exposed||(e.exposed=h)}function pr(e,t,n,o,r){for(let s=0;s{let t=e;for(let e=0;en[o];if(F(e)){const n=t[e];$(n)&&Vn(r,n)}else if($(e))Vn(r,e.bind(n));else if(A(e))if(w(e))e.forEach((e=>mr(e,t,n,o)));else{const o=$(e.handler)?e.handler.bind(n):t[e.handler];$(o)&&Vn(r,o,e)}}function gr(e,t,n){const o=n.appContext.config.optionMergeStrategies,{mixins:r,extends:s}=t;s&&gr(e,s,n),r&&r.forEach((t=>gr(e,t,n)));for(const i in t)o&&k(o,i)?e[i]=o[i](e[i],t[i],n.proxy,i):e[i]=t[i]}const vr=e=>e?Tr(e)?e.exposed?e.exposed:e.proxy:vr(e.parent):null,yr=x(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>vr(e.parent),$root:e=>vr(e.root),$emit:e=>e.emit,$options:e=>function(e){const t=e.type,{__merged:n,mixins:o,extends:r}=t;if(n)return n;const s=e.appContext.mixins;if(!s.length&&!o&&!r)return t;const i={};return s.forEach((t=>gr(i,t,e))),gr(i,t,e),t.__merged=i}(e),$forceUpdate:e=>()=>Lt(e.update),$nextTick:e=>Pt.bind(e.proxy),$watch:e=>Ln.bind(e)}),br={get({_:e},t){const{ctx:n,setupState:o,data:r,props:s,accessCache:i,type:l,appContext:c}=e;if("__v_skip"===t)return!0;let a;if("$"!==t[0]){const l=i[t];if(void 0!==l)switch(l){case 0:return o[t];case 1:return r[t];case 3:return n[t];case 2:return s[t]}else{if(o!==h&&k(o,t))return i[t]=0,o[t];if(r!==h&&k(r,t))return i[t]=1,r[t];if((a=e.propsOptions[0])&&k(a,t))return i[t]=2,s[t];if(n!==h&&k(n,t))return i[t]=3,n[t];ar&&(i[t]=4)}}const u=yr[t];let p,f;return u?("$attrs"===t&&ae(e,0,t),u(e)):(p=l.__cssModules)&&(p=p[t])?p:n!==h&&k(n,t)?(i[t]=3,n[t]):(f=c.config.globalProperties,k(f,t)?f[t]:void 0)},set({_:e},t,n){const{data:o,setupState:r,ctx:s}=e;if(r!==h&&k(r,t))r[t]=n;else if(o!==h&&k(o,t))o[t]=n;else if(k(e.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:s}},i){let l;return void 0!==n[i]||e!==h&&k(e,i)||t!==h&&k(t,i)||(l=s[0])&&k(l,i)||k(o,i)||k(yr,i)||k(r.config.globalProperties,i)}},_r=x({},br,{get(e,t){if(t!==Symbol.unscopables)return br.get(e,t,e)},has:(e,n)=>"_"!==n[0]&&!t(n)}),xr=po();let Sr=0;let Cr=null;const kr=()=>Cr||tn,wr=e=>{Cr=e};function Tr(e){return 4&e.vnode.shapeFlag}let Er,Nr=!1;function $r(e,t,n){$(t)?e.render=t:A(t)&&(e.setupState=dt(t)),Mr(e)}function Fr(e){Er=e}function Mr(e,t){const n=e.type;e.render||(Er&&n.template&&!n.render&&(n.render=Er(n.template,{isCustomElement:e.appContext.config.isCustomElement,delimiters:n.delimiters})),e.render=n.render||g,e.render._rc&&(e.withProxy=new Proxy(e.ctx,_r))),Cr=e,le(),ur(e,n),ce(),Cr=null}function Ar(e){const t=t=>{e.exposed=dt(t)};return{attrs:e.attrs,slots:e.slots,emit:e.emit,expose:t}}function Ir(e,t=Cr){t&&(t.effects||(t.effects=[])).push(e)}const Or=/(?:^|[-_])(\w)/g;function Br(e){return $(e)&&e.displayName||e.name}function Rr(e,t,n=!1){let o=Br(t);if(!o&&t.__file){const e=t.__file.match(/([^/\\]+)\.\w+$/);e&&(o=e[1])}if(!o&&e&&e.parent){const n=e=>{for(const n in e)if(e[n]===t)return n};o=n(e.components||e.parent.type.components)||n(e.appContext.components)}return o?o.replace(Or,(e=>e.toUpperCase())).replace(/[-_]/g,""):n?"App":"Anonymous"}function Vr(e){const t=function(e){let t,n;return $(e)?(t=e,n=g):(t=e.get,n=e.set),new vt(t,n,$(e)||!e.set)}(e);return Ir(t.effect),t}function Pr(e,t,n){const o=arguments.length;return 2===o?A(t)&&!w(t)?Jo(t)?er(e,null,[t]):er(e,t):er(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&Jo(n)&&(n=[n]),er(e,t,n))}const Lr=Symbol("");const jr="3.0.11",Ur="http://www.w3.org/2000/svg",Hr="undefined"!=typeof document?document:null;let Dr,zr;const Wr={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?Hr.createElementNS(Ur,e):Hr.createElement(e,n?{is:n}:void 0);return"select"===e&&o&&null!=o.multiple&&r.setAttribute("multiple",o.multiple),r},createText:e=>Hr.createTextNode(e),createComment:e=>Hr.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Hr.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o){const r=o?zr||(zr=Hr.createElementNS(Ur,"svg")):Dr||(Dr=Hr.createElement("div"));r.innerHTML=e;const s=r.firstChild;let i=s,l=i;for(;i;)l=i,Wr.insert(i,t,n),i=r.firstChild;return[s,l]}};const Kr=/\s*!important$/;function Gr(e,t,n){if(w(n))n.forEach((n=>Gr(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const o=function(e,t){const n=Jr[t];if(n)return n;let o=U(t);if("filter"!==o&&o in e)return Jr[t]=o;o=z(o);for(let r=0;rdocument.createEvent("Event").timeStamp&&(Qr=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);Xr=!!(e&&Number(e[1])<=53)}let Yr=0;const es=Promise.resolve(),ts=()=>{Yr=0};function ns(e,t,n,o){e.addEventListener(t,n,o)}function os(e,t,n,o,r=null){const s=e._vei||(e._vei={}),i=s[t];if(o&&i)i.value=o;else{const[n,l]=function(e){let t;if(rs.test(e)){let n;for(t={};n=e.match(rs);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[D(e.slice(2)),t]}(t);if(o){ns(e,n,s[t]=function(e,t){const n=e=>{const o=e.timeStamp||Qr();(Xr||o>=n.attached-1)&&Ct(function(e,t){if(w(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>Yr||(es.then(ts),Yr=Qr()))(),n}(o,r),l)}else i&&(!function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,i,l),s[t]=void 0)}}const rs=/(?:Once|Passive|Capture)$/;const ss=/^on[a-z]/;function is(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{is(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el){const n=e.el.style;for(const e in t)n.setProperty(`--${e}`,t[e])}else e.type===Lo&&e.children.forEach((e=>is(e,t)))}const ls="transition",cs="animation",as=(e,{slots:t})=>Pr(Dn,fs(e),t);as.displayName="Transition";const us={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ps=as.props=x({},Dn.props,us);function fs(e){let{name:t="v",type:n,css:o=!0,duration:r,enterFromClass:s=`${t}-enter-from`,enterActiveClass:i=`${t}-enter-active`,enterToClass:l=`${t}-enter-to`,appearFromClass:c=s,appearActiveClass:a=i,appearToClass:u=l,leaveFromClass:p=`${t}-leave-from`,leaveActiveClass:f=`${t}-leave-active`,leaveToClass:d=`${t}-leave-to`}=e;const h={};for(const x in e)x in us||(h[x]=e[x]);if(!o)return h;const m=function(e){if(null==e)return null;if(A(e))return[ds(e.enter),ds(e.leave)];{const t=ds(e);return[t,t]}}(r),g=m&&m[0],v=m&&m[1],{onBeforeEnter:y,onEnter:b,onEnterCancelled:_,onLeave:S,onLeaveCancelled:C,onBeforeAppear:k=y,onAppear:w=b,onAppearCancelled:T=_}=h,E=(e,t,n)=>{ms(e,t?u:l),ms(e,t?a:i),n&&n()},N=(e,t)=>{ms(e,d),ms(e,f),t&&t()},$=e=>(t,o)=>{const r=e?w:b,i=()=>E(t,e,o);r&&r(t,i),gs((()=>{ms(t,e?c:s),hs(t,e?u:l),r&&r.length>1||ys(t,n,g,i)}))};return x(h,{onBeforeEnter(e){y&&y(e),hs(e,s),hs(e,i)},onBeforeAppear(e){k&&k(e),hs(e,c),hs(e,a)},onEnter:$(!1),onAppear:$(!0),onLeave(e,t){const o=()=>N(e,t);hs(e,p),Ss(),hs(e,f),gs((()=>{ms(e,p),hs(e,d),S&&S.length>1||ys(e,n,v,o)})),S&&S(e,o)},onEnterCancelled(e){E(e,!1),_&&_(e)},onAppearCancelled(e){E(e,!0),T&&T(e)},onLeaveCancelled(e){N(e),C&&C(e)}})}function ds(e){return J(e)}function hs(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function ms(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function gs(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let vs=0;function ys(e,t,n,o){const r=e._endId=++vs,s=()=>{r===e._endId&&o()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=bs(e,t);if(!i)return o();const a=i+"end";let u=0;const p=()=>{e.removeEventListener(a,f),s()},f=t=>{t.target===e&&++u>=c&&p()};setTimeout((()=>{u(n[e]||"").split(", "),r=o("transitionDelay"),s=o("transitionDuration"),i=_s(r,s),l=o("animationDelay"),c=o("animationDuration"),a=_s(l,c);let u=null,p=0,f=0;t===ls?i>0&&(u=ls,p=i,f=s.length):t===cs?a>0&&(u=cs,p=a,f=c.length):(p=Math.max(i,a),u=p>0?i>a?ls:cs:null,f=u?u===ls?s.length:c.length:0);return{type:u,timeout:p,propCount:f,hasTransform:u===ls&&/\b(transform|all)(,|$)/.test(n.transitionProperty)}}function _s(e,t){for(;e.lengthxs(t)+xs(e[n]))))}function xs(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function Ss(){return document.body.offsetHeight}const Cs=new WeakMap,ks=new WeakMap,ws={name:"TransitionGroup",props:x({},ps,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=kr(),o=Un();let r,s;return $n((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!function(e,t,n){const o=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\s+/).forEach((e=>e&&o.classList.remove(e)))}));n.split(/\s+/).forEach((e=>e&&o.classList.add(e))),o.style.display="none";const r=1===t.nodeType?t:t.parentNode;r.appendChild(o);const{hasTransform:s}=bs(o);return r.removeChild(o),s}(r[0].el,n.vnode.el,t))return;r.forEach(Ts),r.forEach(Es);const o=r.filter(Ns);Ss(),o.forEach((e=>{const n=e.el,o=n.style;hs(n,t),o.transform=o.webkitTransform=o.transitionDuration="";const r=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener("transitionend",r),n._moveCb=null,ms(n,t))};n.addEventListener("transitionend",r)}))})),()=>{const i=st(e),l=fs(i),c=i.tag||Lo;r=s,s=t.default?Jn(t.default()):[];for(let e=0;e{const t=e.props["onUpdate:modelValue"];return w(t)?e=>G(t,e):t};function Fs(e){e.target.composing=!0}function Ms(e){const t=e.target;t.composing&&(t.composing=!1,function(e,t){const n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,"input"))}const As={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=$s(r);const s=o||"number"===e.type;ns(e,t?"change":"input",(t=>{if(t.target.composing)return;let o=e.value;n?o=o.trim():s&&(o=J(o)),e._assign(o)})),n&&ns(e,"change",(()=>{e.value=e.value.trim()})),t||(ns(e,"compositionstart",Fs),ns(e,"compositionend",Ms),ns(e,"change",Ms))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{trim:n,number:o}},r){if(e._assign=$s(r),e.composing)return;if(document.activeElement===e){if(n&&e.value.trim()===t)return;if((o||"number"===e.type)&&J(e.value)===t)return}const s=null==t?"":t;e.value!==s&&(e.value=s)}},Is={created(e,t,n){e._assign=$s(n),ns(e,"change",(()=>{const t=e._modelValue,n=Ps(e),o=e.checked,r=e._assign;if(w(t)){const e=f(t,n),s=-1!==e;if(o&&!s)r(t.concat(n));else if(!o&&s){const n=[...t];n.splice(e,1),r(n)}}else if(E(t)){const e=new Set(t);o?e.add(n):e.delete(n),r(e)}else r(Ls(e,o))}))},mounted:Os,beforeUpdate(e,t,n){e._assign=$s(n),Os(e,t,n)}};function Os(e,{value:t,oldValue:n},o){e._modelValue=t,w(t)?e.checked=f(t,o.props.value)>-1:E(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=p(t,Ls(e,!0)))}const Bs={created(e,{value:t},n){e.checked=p(t,n.props.value),e._assign=$s(n),ns(e,"change",(()=>{e._assign(Ps(e))}))},beforeUpdate(e,{value:t,oldValue:n},o){e._assign=$s(o),t!==n&&(e.checked=p(t,o.props.value))}},Rs={created(e,{value:t,modifiers:{number:n}},o){const r=E(t);ns(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?J(Ps(e)):Ps(e)));e._assign(e.multiple?r?new Set(t):t:t[0])})),e._assign=$s(o)},mounted(e,{value:t}){Vs(e,t)},beforeUpdate(e,t,n){e._assign=$s(n)},updated(e,{value:t}){Vs(e,t)}};function Vs(e,t){const n=e.multiple;if(!n||w(t)||E(t)){for(let o=0,r=e.options.length;o-1:r.selected=t.has(s);else if(p(Ps(r),t))return void(e.selectedIndex=o)}n||(e.selectedIndex=-1)}}function Ps(e){return"_value"in e?e._value:e.value}function Ls(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const js={created(e,t,n){Us(e,t,n,null,"created")},mounted(e,t,n){Us(e,t,n,null,"mounted")},beforeUpdate(e,t,n,o){Us(e,t,n,o,"beforeUpdate")},updated(e,t,n,o){Us(e,t,n,o,"updated")}};function Us(e,t,n,o,r){let s;switch(e.tagName){case"SELECT":s=Rs;break;case"TEXTAREA":s=As;break;default:switch(n.props&&n.props.type){case"checkbox":s=Is;break;case"radio":s=Bs;break;default:s=As}}const i=s[r];i&&i(e,t,n,o)}const Hs=["ctrl","shift","alt","meta"],Ds={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>Hs.some((n=>e[`${n}Key`]&&!t.includes(n)))},zs={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Ws={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):Ks(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),Ks(e,!0),o.enter(e)):o.leave(e,(()=>{Ks(e,!1)})):Ks(e,t))},beforeUnmount(e,{value:t}){Ks(e,t)}};function Ks(e,t){e.style.display=t?e._vod:"none"}const Gs=x({patchProp:(e,t,o,r,s=!1,i,l,c,a)=>{switch(t){case"class":!function(e,t,n){if(null==t&&(t=""),n)e.setAttribute("class",t);else{const n=e._vtc;n&&(t=(t?[t,...n]:[...n]).join(" ")),e.className=t}}(e,r,s);break;case"style":!function(e,t,n){const o=e.style;if(n)if(F(n)){if(t!==n){const t=o.display;o.cssText=n,"_vod"in e&&(o.display=t)}}else{for(const e in n)Gr(o,e,n[e]);if(t&&!F(t))for(const e in t)null==n[e]&&Gr(o,e,"")}else e.removeAttribute("style")}(e,o,r);break;default:b(t)?_(t)||os(e,t,0,r,l):function(e,t,n,o){if(o)return"innerHTML"===t||!!(t in e&&ss.test(t)&&$(n));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(ss.test(t)&&F(n))return!1;return t in e}(e,t,r,s)?function(e,t,n,o,r,s,i){if("innerHTML"===t||"textContent"===t)return o&&i(o,r,s),void(e[t]=null==n?"":n);if("value"!==t||"PROGRESS"===e.tagName){if(""===n||null==n){const o=typeof e[t];if(""===n&&"boolean"===o)return void(e[t]=!0);if(null==n&&"string"===o)return e[t]="",void e.removeAttribute(t);if("number"===o)return e[t]=0,void e.removeAttribute(t)}try{e[t]=n}catch(l){}}else{e._value=n;const t=null==n?"":n;e.value!==t&&(e.value=t)}}(e,t,r,i,l,c,a):("true-value"===t?e._trueValue=r:"false-value"===t&&(e._falseValue=r),function(e,t,o,r){if(r&&t.startsWith("xlink:"))null==o?e.removeAttributeNS(Zr,t.slice(6,t.length)):e.setAttributeNS(Zr,t,o);else{const r=n(t);null==o||r&&!1===o?e.removeAttribute(t):e.setAttribute(t,r?"":o)}}(e,t,r,s))}},forcePatchProp:(e,t)=>"value"===t},Wr);let qs,Js=!1;function Zs(){return qs||(qs=ko(Gs))}function Qs(){return qs=Js?qs:wo(Gs),Js=!0,qs}const Xs=(...e)=>{const t=Zs().createApp(...e),{mount:n}=t;return t.mount=e=>{const o=Ys(e);if(!o)return;const r=t._component;$(r)||r.render||r.template||(r.template=o.innerHTML),o.innerHTML="";const s=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),s},t};function Ys(e){if(F(e)){return document.querySelector(e)}return e}var ei=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",Transition:as,TransitionGroup:ws,createApp:Xs,createSSRApp:(...e)=>{const t=Qs().createApp(...e),{mount:n}=t;return t.mount=e=>{const t=Ys(e);if(t)return n(t,!0,t instanceof SVGElement)},t},hydrate:(...e)=>{Qs().hydrate(...e)},render:(...e)=>{Zs().render(...e)},useCssModule:function(e="$style"){{const t=kr();if(!t)return h;const n=t.type.__cssModules;if(!n)return h;const o=n[e];return o||h}},useCssVars:function(e){const t=kr();if(!t)return;const n=()=>is(t.subTree,e(t.proxy));En((()=>Bn(n,{flush:"post"}))),$n(n)},vModelCheckbox:Is,vModelDynamic:js,vModelRadio:Bs,vModelSelect:Rs,vModelText:As,vShow:Ws,withKeys:(e,t)=>n=>{if(!("key"in n))return;const o=D(n.key);return t.some((e=>e===o||zs[e]===o))?e(n):void 0},withModifiers:(e,t)=>(n,...o)=>{for(let e=0;enull==e?"":A(e)?JSON.stringify(e,d,2):String(e),toHandlerKey:W,BaseTransition:Dn,Comment:Uo,Fragment:Lo,KeepAlive:Qn,Static:Ho,Suspense:fn,Teleport:Io,Text:jo,callWithAsyncErrorHandling:Ct,callWithErrorHandling:St,cloneVNode:tr,computed:Vr,createBlock:qo,createCommentVNode:function(e="",t=!1){return t?(Wo(),qo(Uo,null,e)):er(Uo,null,e)},createHydrationRenderer:wo,createRenderer:ko,createSlots:function(e,t){for(let n=0;n{let e;return a||(e=a=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,a=null,p()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==a&&a?a:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),c=t,t))))};return bo({__asyncLoader:p,name:"AsyncComponentWrapper",setup(){const e=Cr;if(c)return()=>_o(c,e);const t=t=>{a=null,kt(t,e,13,!o)};if(i&&e.suspense)return p().then((t=>()=>_o(t,e))).catch((e=>(t(e),()=>o?er(o,{error:e}):null)));const l=ct(!1),u=ct(),f=ct(!!r);return r&&setTimeout((()=>{f.value=!1}),r),null!=s&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${s}ms.`);t(e),u.value=e}}),s),p().then((()=>{l.value=!0})).catch((e=>{t(e),u.value=e})),()=>l.value&&c?_o(c,e):u.value&&o?er(o,{error:u.value}):n&&!f.value?er(n):void 0}})},defineComponent:bo,defineEmit:function(){return null},defineProps:function(){return null},get devtools(){return Gt},getCurrentInstance:kr,getTransitionRawChildren:Jn,h:Pr,handleError:kt,initCustomFormatter:function(){},inject:cr,isRuntimeOnly:()=>!Er,isVNode:Jo,mergeProps:ir,nextTick:Pt,onActivated:Yn,onBeforeMount:Tn,onBeforeUnmount:Fn,onBeforeUpdate:Nn,onDeactivated:eo,onErrorCaptured:On,onMounted:En,onRenderTracked:In,onRenderTriggered:An,onUnmounted:Mn,onUpdated:$n,openBlock:Wo,popScopeId:function(){nn=null},provide:lr,pushScopeId:function(e){nn=e},queuePostFlushCb:Ht,registerRuntimeCompiler:Fr,renderList:function(e,t){let n;if(w(e)||F(e)){n=new Array(e.length);for(let o=0,r=e.length;o{{const e=cr(Lr);return e||bt("Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build."),e}},useTransitionState:Un,version:jr,warn:bt,watch:Vn,watchEffect:Bn,withCtx:rn,withDirectives:function(e,t){if(null===tn)return e;const n=tn.proxy,o=e.dirs||(e.dirs=[]);for(let r=0;rrn});function ti(e){throw e}function ni(e,t,n,o){const r=new SyntaxError(String(e));return r.code=e,r.loc=t,r}const oi=Symbol(""),ri=Symbol(""),si=Symbol(""),ii=Symbol(""),li=Symbol(""),ci=Symbol(""),ai=Symbol(""),ui=Symbol(""),pi=Symbol(""),fi=Symbol(""),di=Symbol(""),hi=Symbol(""),mi=Symbol(""),gi=Symbol(""),vi=Symbol(""),yi=Symbol(""),bi=Symbol(""),_i=Symbol(""),xi=Symbol(""),Si=Symbol(""),Ci=Symbol(""),ki=Symbol(""),wi=Symbol(""),Ti=Symbol(""),Ei=Symbol(""),Ni=Symbol(""),$i=Symbol(""),Fi=Symbol(""),Mi=Symbol(""),Ai=Symbol(""),Ii=Symbol(""),Oi={[oi]:"Fragment",[ri]:"Teleport",[si]:"Suspense",[ii]:"KeepAlive",[li]:"BaseTransition",[ci]:"openBlock",[ai]:"createBlock",[ui]:"createVNode",[pi]:"createCommentVNode",[fi]:"createTextVNode",[di]:"createStaticVNode",[hi]:"resolveComponent",[mi]:"resolveDynamicComponent",[gi]:"resolveDirective",[vi]:"withDirectives",[yi]:"renderList",[bi]:"renderSlot",[_i]:"createSlots",[xi]:"toDisplayString",[Si]:"mergeProps",[Ci]:"toHandlers",[ki]:"camelize",[wi]:"capitalize",[Ti]:"toHandlerKey",[Ei]:"setBlockTracking",[Ni]:"pushScopeId",[$i]:"popScopeId",[Fi]:"withScopeId",[Mi]:"withCtx",[Ai]:"unref",[Ii]:"isRef"};const Bi={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function Ri(e,t,n,o,r,s,i,l=!1,c=!1,a=Bi){return e&&(l?(e.helper(ci),e.helper(ai)):e.helper(ui),i&&e.helper(vi)),{type:13,tag:t,props:n,children:o,patchFlag:r,dynamicProps:s,directives:i,isBlock:l,disableTracking:c,loc:a}}function Vi(e,t=Bi){return{type:17,loc:t,elements:e}}function Pi(e,t=Bi){return{type:15,loc:t,properties:e}}function Li(e,t){return{type:16,loc:Bi,key:F(e)?ji(e,!0):e,value:t}}function ji(e,t,n=Bi,o=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:o}}function Ui(e,t=Bi){return{type:8,loc:t,children:e}}function Hi(e,t=[],n=Bi){return{type:14,loc:n,callee:e,arguments:t}}function Di(e,t,n=!1,o=!1,r=Bi){return{type:18,params:e,returns:t,newline:n,isSlot:o,loc:r}}function zi(e,t,n,o=!0){return{type:19,test:e,consequent:t,alternate:n,newline:o,loc:Bi}}const Wi=e=>4===e.type&&e.isStatic,Ki=(e,t)=>e===t||e===D(t);function Gi(e){return Ki(e,"Teleport")?ri:Ki(e,"Suspense")?si:Ki(e,"KeepAlive")?ii:Ki(e,"BaseTransition")?li:void 0}const qi=/^\d|[^\$\w]/,Ji=e=>!qi.test(e),Zi=/^[A-Za-z_$\xA0-\uFFFF][\w$\xA0-\uFFFF]*(?:\s*\.\s*[A-Za-z_$\xA0-\uFFFF][\w$\xA0-\uFFFF]*|\[[^\]]+\])*$/,Qi=e=>!!e&&Zi.test(e.trim());function Xi(e,t,n){const o={source:e.source.substr(t,n),start:Yi(e.start,e.source,t),end:e.end};return null!=n&&(o.end=Yi(e.start,e.source,t+n)),o}function Yi(e,t,n=t.length){return el(x({},e),t,n)}function el(e,t,n=t.length){let o=0,r=-1;for(let s=0;s4===e.key.type&&e.key.content===n))}e||r.properties.unshift(t),o=r}else o=Hi(n.helper(Si),[Pi([t]),r]);13===e.type?e.props=o:e.arguments[2]=o}function al(e,t){return`_${t}_${e.replace(/[^\w]/g,"_")}`}const ul=/&(gt|lt|amp|apos|quot);/g,pl={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},fl={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:v,isPreTag:v,isCustomElement:v,decodeEntities:e=>e.replace(ul,((e,t)=>pl[t])),onError:ti,comments:!1};function dl(e,t={}){const n=function(e,t){const n=x({},fl);for(const o in t)n[o]=t[o]||fl[o];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1}}(e,t),o=El(n);return function(e,t=Bi){return{type:0,children:e,helpers:[],components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}(hl(n,0,[]),Nl(n,o))}function hl(e,t,n){const o=$l(n),r=o?o.ns:0,s=[];for(;!Bl(e,t,n);){const i=e.source;let l;if(0===t||1===t)if(!e.inVPre&&Fl(i,e.options.delimiters[0]))l=kl(e,t);else if(0===t&&"<"===i[0])if(1===i.length)Ol(e,5,1);else if("!"===i[1])Fl(i,"\x3c!--")?l=vl(e):Fl(i,""===i[2]){Ol(e,14,2),Ml(e,3);continue}if(/[a-z]/i.test(i[2])){Ol(e,23),xl(e,1,o);continue}Ol(e,12,2),l=yl(e)}else/[a-z]/i.test(i[1])?l=bl(e,n):"?"===i[1]?(Ol(e,21,1),l=yl(e)):Ol(e,12,1);if(l||(l=wl(e,t)),w(l))for(let e=0;e/.exec(e.source);if(o){o.index<=3&&Ol(e,0),o[1]&&Ol(e,10),n=e.source.slice(4,o.index);const t=e.source.slice(0,o.index);let r=1,s=0;for(;-1!==(s=t.indexOf("\x3c!--",r));)Ml(e,s-r+1),s+4");return-1===r?(o=e.source.slice(n),Ml(e,e.source.length)):(o=e.source.slice(n,r),Ml(e,r+1)),{type:3,content:o,loc:Nl(e,t)}}function bl(e,t){const n=e.inPre,o=e.inVPre,r=$l(t),s=xl(e,0,r),i=e.inPre&&!n,l=e.inVPre&&!o;if(s.isSelfClosing||e.options.isVoidTag(s.tag))return s;t.push(s);const c=e.options.getTextMode(s,r),a=hl(e,c,t);if(t.pop(),s.children=a,Rl(e.source,s.tag))xl(e,1,r);else if(Ol(e,24,0,s.loc.start),0===e.source.length&&"script"===s.tag.toLowerCase()){const t=a[0];t&&Fl(t.loc.source,"\x3c!--")&&Ol(e,8)}return s.loc=Nl(e,s.loc.start),i&&(e.inPre=!1),l&&(e.inVPre=!1),s}const _l=e("if,else,else-if,for,slot");function xl(e,t,n){const o=El(e),r=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),s=r[1],i=e.options.getNamespace(s,n);Ml(e,r[0].length),Al(e);const l=El(e),c=e.source;let a=Sl(e,t);e.options.isPreTag(s)&&(e.inPre=!0),!e.inVPre&&a.some((e=>7===e.type&&"pre"===e.name))&&(e.inVPre=!0,x(e,l),e.source=c,a=Sl(e,t).filter((e=>"v-pre"!==e.name)));let u=!1;0===e.source.length?Ol(e,9):(u=Fl(e.source,"/>"),1===t&&u&&Ol(e,4),Ml(e,u?2:1));let p=0;const f=e.options;if(!e.inVPre&&!f.isCustomElement(s)){const e=a.some((e=>7===e.type&&"is"===e.name));f.isNativeTag&&!e?f.isNativeTag(s)||(p=1):(e||Gi(s)||f.isBuiltInComponent&&f.isBuiltInComponent(s)||/^[A-Z]/.test(s)||"component"===s)&&(p=1),"slot"===s?p=2:"template"===s&&a.some((e=>7===e.type&&_l(e.name)))&&(p=3)}return{type:1,ns:i,tag:s,tagType:p,props:a,isSelfClosing:u,children:[],loc:Nl(e,o),codegenNode:void 0}}function Sl(e,t){const n=[],o=new Set;for(;e.source.length>0&&!Fl(e.source,">")&&!Fl(e.source,"/>");){if(Fl(e.source,"/")){Ol(e,22),Ml(e,1),Al(e);continue}1===t&&Ol(e,3);const r=Cl(e,o);0===t&&n.push(r),/^[^\t\r\n\f />]/.test(e.source)&&Ol(e,15),Al(e)}return n}function Cl(e,t){const n=El(e),o=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(o)&&Ol(e,2),t.add(o),"="===o[0]&&Ol(e,19);{const t=/["'<]/g;let n;for(;n=t.exec(o);)Ol(e,17,n.index)}let r;Ml(e,o.length),/^[\t\r\n\f ]*=/.test(e.source)&&(Al(e),Ml(e,1),Al(e),r=function(e){const t=El(e);let n;const o=e.source[0],r='"'===o||"'"===o;if(r){Ml(e,1);const t=e.source.indexOf(o);-1===t?n=Tl(e,e.source.length,4):(n=Tl(e,t,4),Ml(e,1))}else{const t=/^[^\t\r\n\f >]+/.exec(e.source);if(!t)return;const o=/["'<=`]/g;let r;for(;r=o.exec(t[0]);)Ol(e,18,r.index);n=Tl(e,t[0].length,4)}return{content:n,isQuoted:r,loc:Nl(e,t)}}(e),r||Ol(e,13));const s=Nl(e,n);if(!e.inVPre&&/^(v-|:|@|#)/.test(o)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(o),i=t[1]||(Fl(o,":")?"bind":Fl(o,"@")?"on":"slot");let l;if(t[2]){const r="slot"===i,s=o.lastIndexOf(t[2]),c=Nl(e,Il(e,n,s),Il(e,n,s+t[2].length+(r&&t[3]||"").length));let a=t[2],u=!0;a.startsWith("[")?(u=!1,a.endsWith("]")||Ol(e,26),a=a.substr(1,a.length-2)):r&&(a+=t[3]||""),l={type:4,content:a,isStatic:u,constType:u?3:0,loc:c}}if(r&&r.isQuoted){const e=r.loc;e.start.offset++,e.start.column++,e.end=Yi(e.start,r.content),e.source=e.source.slice(1,-1)}return{type:7,name:i,exp:r&&{type:4,content:r.content,isStatic:!1,constType:0,loc:r.loc},arg:l,modifiers:t[3]?t[3].substr(1).split("."):[],loc:s}}return{type:6,name:o,value:r&&{type:2,content:r.content,loc:r.loc},loc:s}}function kl(e,t){const[n,o]=e.options.delimiters,r=e.source.indexOf(o,n.length);if(-1===r)return void Ol(e,25);const s=El(e);Ml(e,n.length);const i=El(e),l=El(e),c=r-n.length,a=e.source.slice(0,c),u=Tl(e,c,t),p=u.trim(),f=u.indexOf(p);f>0&&el(i,a,f);return el(l,a,c-(u.length-p.length-f)),Ml(e,o.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:p,loc:Nl(e,i,l)},loc:Nl(e,s)}}function wl(e,t){const n=["<",e.options.delimiters[0]];3===t&&n.push("]]>");let o=e.source.length;for(let s=0;st&&(o=t)}const r=El(e);return{type:2,content:Tl(e,o,t),loc:Nl(e,r)}}function Tl(e,t,n){const o=e.source.slice(0,t);return Ml(e,t),2===n||3===n||-1===o.indexOf("&")?o:e.options.decodeEntities(o,4===n)}function El(e){const{column:t,line:n,offset:o}=e;return{column:t,line:n,offset:o}}function Nl(e,t,n){return{start:t,end:n=n||El(e),source:e.originalSource.slice(t.offset,n.offset)}}function $l(e){return e[e.length-1]}function Fl(e,t){return e.startsWith(t)}function Ml(e,t){const{source:n}=e;el(e,n,t),e.source=n.slice(t)}function Al(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&Ml(e,t[0].length)}function Il(e,t,n){return Yi(t,e.originalSource.slice(t.offset,n),n)}function Ol(e,t,n,o=El(e)){n&&(o.offset+=n,o.column+=n),e.options.onError(ni(t,{start:o,end:o,source:""}))}function Bl(e,t,n){const o=e.source;switch(t){case 0:if(Fl(o,"=0;--e)if(Rl(o,n[e].tag))return!0;break;case 1:case 2:{const e=$l(n);if(e&&Rl(o,e.tag))return!0;break}case 3:if(Fl(o,"]]>"))return!0}return!o}function Rl(e,t){return Fl(e,"]/.test(e[2+t.length]||">")}function Vl(e,t){Ll(e,t,Pl(e,e.children[0]))}function Pl(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!ll(t)}function Ll(e,t,n=!1){let o=!1,r=!0;const{children:s}=e;for(let i=0;i0){if(s<3&&(r=!1),s>=2){e.codegenNode.patchFlag="-1",e.codegenNode=t.hoist(e.codegenNode),o=!0;continue}}else{const n=e.codegenNode;if(13===n.type){const o=Dl(n);if((!o||512===o||1===o)&&Ul(e,t)>=2){const o=Hl(e);o&&(n.props=t.hoist(o))}}}}else if(12===e.type){const n=jl(e.content,t);n>0&&(n<3&&(r=!1),n>=2&&(e.codegenNode=t.hoist(e.codegenNode),o=!0))}if(1===e.type){const n=1===e.tagType;n&&t.scopes.vSlot++,Ll(e,t),n&&t.scopes.vSlot--}else if(11===e.type)Ll(e,t,1===e.children.length);else if(9===e.type)for(let n=0;n1)for(let r=0;r`_${Oi[S.helper(e)]}`,replaceNode(e){S.parent.children[S.childIndex]=S.currentNode=e},removeNode(e){const t=S.parent.children,n=e?t.indexOf(e):S.currentNode?S.childIndex:-1;e&&e!==S.currentNode?S.childIndex>n&&(S.childIndex--,S.onNodeRemoved()):(S.currentNode=null,S.onNodeRemoved()),S.parent.children.splice(n,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){S.hoists.push(e);const t=ji(`_hoisted_${S.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>function(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:Bi}}(++S.cached,e,t)};return S}function Wl(e,t){const n=zl(e,t);Kl(e,n),t.hoistStatic&&Vl(e,n),t.ssr||function(e,t){const{helper:n,removeHelper:o}=t,{children:r}=e;if(1===r.length){const t=r[0];if(Pl(e,t)&&t.codegenNode){const r=t.codegenNode;13===r.type&&(r.isBlock||(o(ui),r.isBlock=!0,n(ci),n(ai))),e.codegenNode=r}else e.codegenNode=t}else if(r.length>1){let o=64;e.codegenNode=Ri(t,n(oi),void 0,e.children,o+"",void 0,void 0,!0)}}(e,n),e.helpers=[...n.helpers.keys()],e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached}function Kl(e,t){t.currentNode=e;const{nodeTransforms:n}=t,o=[];for(let s=0;s{n--};for(;nt===e:t=>e.test(t);return(e,o)=>{if(1===e.type){const{props:r}=e;if(3===e.tagType&&r.some(sl))return;const s=[];for(let i=0;i`_${Oi[e]}`,push(e,t){u.code+=e},indent(){p(++u.indentLevel)},deindent(e=!1){e?--u.indentLevel:p(--u.indentLevel)},newline(){p(u.indentLevel)}};function p(e){u.push("\n"+" ".repeat(e))}return u}(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:o,push:r,prefixIdentifiers:s,indent:i,deindent:l,newline:c,scopeId:a,ssr:u}=n,p=e.helpers.length>0,f=!s&&"module"!==o;!function(e,t){const{ssr:n,prefixIdentifiers:o,push:r,newline:s,runtimeModuleName:i,runtimeGlobalName:l}=t,c=l,a=e=>`${Oi[e]}: _${Oi[e]}`;if(e.helpers.length>0&&(r(`const _Vue = ${c}\n`),e.hoists.length)){r(`const { ${[ui,pi,fi,di].filter((t=>e.helpers.includes(t))).map(a).join(", ")} } = _Vue\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:o,helper:r,scopeId:s,mode:i}=t;o(),e.forEach(((e,r)=>{e&&(n(`const _hoisted_${r+1} = `),Yl(e,t),o())})),t.pure=!1})(e.hoists,t),s(),r("return ")}(e,n);if(r(`function ${u?"ssrRender":"render"}(${(u?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ")}) {`),i(),f&&(r("with (_ctx) {"),i(),p&&(r(`const { ${e.helpers.map((e=>`${Oi[e]}: _${Oi[e]}`)).join(", ")} } = _Vue`),r("\n"),c())),e.components.length&&(Zl(e.components,"component",n),(e.directives.length||e.temps>0)&&c()),e.directives.length&&(Zl(e.directives,"directive",n),e.temps>0&&c()),e.temps>0){r("let ");for(let t=0;t0?", ":""}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(r("\n"),c()),u||r("return "),e.codegenNode?Yl(e.codegenNode,n):r("null"),f&&(l(),r("}")),l(),r("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function Zl(e,t,{helper:n,push:o,newline:r}){const s=n("component"===t?hi:gi);for(let i=0;i3||!1;t.push("["),n&&t.indent(),Xl(e,t,n),n&&t.deindent(),t.push("]")}function Xl(e,t,n=!1,o=!0){const{push:r,newline:s}=t;for(let i=0;ie||"null"))}([s,i,l,c,a]),t),n(")"),p&&n(")");u&&(n(", "),Yl(u,t),n(")"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:o,pure:r}=t,s=F(e.callee)?e.callee:o(e.callee);r&&n(ql);n(s+"(",e),Xl(e.arguments,t),n(")")}(e,t);break;case 15:!function(e,t){const{push:n,indent:o,deindent:r,newline:s}=t,{properties:i}=e;if(!i.length)return void n("{}",e);const l=i.length>1||!1;n(l?"{":"{ "),l&&o();for(let c=0;c "),(u||a)&&(n("{"),o());c?(u&&n("return "),w(c)?Ql(c,t):Yl(c,t)):a&&Yl(a,t);(u||a)&&(r(),n("}"));p&&n(")")}(e,t);break;case 19:!function(e,t){const{test:n,consequent:o,alternate:r,newline:s}=e,{push:i,indent:l,deindent:c,newline:a}=t;if(4===n.type){const e=!Ji(n.content);e&&i("("),ec(n,t),e&&i(")")}else i("("),Yl(n,t),i(")");s&&l(),t.indentLevel++,s||i(" "),i("? "),Yl(o,t),t.indentLevel--,s&&a(),s||i(" "),i(": ");const u=19===r.type;u||t.indentLevel++;Yl(r,t),u||t.indentLevel--;s&&c(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:o,indent:r,deindent:s,newline:i}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(r(),n(`${o(Ei)}(-1),`),i());n(`_cache[${e.index}] = `),Yl(e.value,t),e.isVNode&&(n(","),i(),n(`${o(Ei)}(1),`),i(),n(`_cache[${e.index}]`),s());n(")")}(e,t)}}function ec(e,t){const{content:n,isStatic:o}=e;t.push(o?JSON.stringify(n):n,e)}function tc(e,t){for(let n=0;nfunction(e,t,n,o){if(!("else"===t.name||t.exp&&t.exp.content.trim())){const o=t.exp?t.exp.loc:e.loc;n.onError(ni(27,t.loc)),t.exp=ji("true",!1,o)}if("if"===t.name){const r=rc(e,t),s={type:9,loc:e.loc,branches:[r]};if(n.replaceNode(s),o)return o(s,r,!0)}else{const r=n.parent.children;let s=r.indexOf(e);for(;s-- >=-1;){const i=r[s];if(!i||2!==i.type||i.content.trim().length){if(i&&9===i.type){n.removeNode();const r=rc(e,t);i.branches.push(r);const s=o&&o(i,r,!1);Kl(r,n),s&&s(),n.currentNode=null}else n.onError(ni(29,e.loc));break}n.removeNode(i)}}}(e,t,n,((e,t,o)=>{const r=n.parent.children;let s=r.indexOf(e),i=0;for(;s-- >=0;){const e=r[s];e&&9===e.type&&(i+=e.branches.length)}return()=>{if(o)e.codegenNode=sc(t,i,n);else{(function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode)).alternate=sc(t,i+e.branches.length-1,n)}}}))));function rc(e,t){return{type:10,loc:e.loc,condition:"else"===t.name?void 0:t.exp,children:3!==e.tagType||tl(e,"for")?[e]:e.children,userKey:nl(e,"key")}}function sc(e,t,n){return e.condition?zi(e.condition,ic(e,t,n),Hi(n.helper(pi),['""',"true"])):ic(e,t,n)}function ic(e,t,n){const{helper:o,removeHelper:r}=n,s=Li("key",ji(`${t}`,!1,Bi,2)),{children:i}=e,l=i[0];if(1!==i.length||1!==l.type){if(1===i.length&&11===l.type){const e=l.codegenNode;return cl(e,s,n),e}{let t=64;return Ri(n,o(oi),Pi([s]),i,t+"",void 0,void 0,!0,!1,e.loc)}}{const e=l.codegenNode;return 13!==e.type||e.isBlock||(r(ui),e.isBlock=!0,o(ci),o(ai)),cl(e,s,n),e}}const lc=Gl("for",((e,t,n)=>{const{helper:o,removeHelper:r}=n;return function(e,t,n,o){if(!t.exp)return void n.onError(ni(30,t.loc));const r=pc(t.exp);if(!r)return void n.onError(ni(31,t.loc));const{addIdentifiers:s,removeIdentifiers:i,scopes:l}=n,{source:c,value:a,key:u,index:p}=r,f={type:11,loc:t.loc,source:c,valueAlias:a,keyAlias:u,objectIndexAlias:p,parseResult:r,children:il(e)?e.children:[e]};n.replaceNode(f),l.vFor++;const d=o&&o(f);return()=>{l.vFor--,d&&d()}}(e,t,n,(t=>{const s=Hi(o(yi),[t.source]),i=nl(e,"key"),l=i?Li("key",6===i.type?ji(i.value.content,!0):i.exp):null,c=4===t.source.type&&t.source.constType>0,a=c?64:i?128:256;return t.codegenNode=Ri(n,o(oi),void 0,s,a+"",void 0,void 0,!0,!c,e.loc),()=>{let i;const a=il(e),{children:u}=t,p=1!==u.length||1!==u[0].type,f=ll(e)?e:a&&1===e.children.length&&ll(e.children[0])?e.children[0]:null;f?(i=f.codegenNode,a&&l&&cl(i,l,n)):p?i=Ri(n,o(oi),l?Pi([l]):void 0,e.children,"64",void 0,void 0,!0):(i=u[0].codegenNode,a&&l&&cl(i,l,n),i.isBlock!==!c&&(i.isBlock?(r(ci),r(ai)):r(ui)),i.isBlock=!c,i.isBlock?(o(ci),o(ai)):o(ui)),s.arguments.push(Di(dc(t.parseResult),i,!0))}}))}));const cc=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ac=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,uc=/^\(|\)$/g;function pc(e,t){const n=e.loc,o=e.content,r=o.match(cc);if(!r)return;const[,s,i]=r,l={source:fc(n,i.trim(),o.indexOf(i,s.length)),value:void 0,key:void 0,index:void 0};let c=s.trim().replace(uc,"").trim();const a=s.indexOf(c),u=c.match(ac);if(u){c=c.replace(ac,"").trim();const e=u[1].trim();let t;if(e&&(t=o.indexOf(e,a+c.length),l.key=fc(n,e,t)),u[2]){const r=u[2].trim();r&&(l.index=fc(n,r,o.indexOf(r,l.key?t+e.length:a+c.length)))}}return c&&(l.value=fc(n,c,a)),l}function fc(e,t,n){return ji(t,!1,Xi(e,n,t.length))}function dc({value:e,key:t,index:n}){const o=[];return e&&o.push(e),t&&(e||o.push(ji("_",!1)),o.push(t)),n&&(t||(e||o.push(ji("_",!1)),o.push(ji("__",!1))),o.push(n)),o}const hc=ji("undefined",!1),mc=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=tl(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},gc=(e,t,n)=>Di(e,t,!1,!0,t.length?t[0].loc:n);function vc(e,t,n=gc){t.helper(Mi);const{children:o,loc:r}=e,s=[],i=[],l=(e,t)=>Li("default",n(e,t,r));let c=t.scopes.vSlot>0||t.scopes.vFor>0;const a=tl(e,"slot",!0);if(a){const{arg:e,exp:t}=a;e&&!Wi(e)&&(c=!0),s.push(Li(e||ji("default",!0),n(t,o,r)))}let u=!1,p=!1;const f=[],d=new Set;for(let g=0;gfunction(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:o}=e,r=1===e.tagType,s=r?function(e,t,n=!1){const{tag:o}=e,r=wc(o)?nl(e,"is"):tl(e,"is");if(r){const e=6===r.type?r.value&&ji(r.value.content,!0):r.exp;if(e)return Hi(t.helper(mi),[e])}const s=Gi(o)||t.isBuiltInComponent(o);if(s)return n||t.helper(s),s;return t.helper(hi),t.components.add(o),al(o,"component")}(e,t):`"${n}"`;let i,l,c,a,u,p,f=0,d=A(s)&&s.callee===mi||s===ri||s===si||!r&&("svg"===n||"foreignObject"===n||nl(e,"key",!0));if(o.length>0){const n=Sc(e,t);i=n.props,f=n.patchFlag,u=n.dynamicPropNames;const o=n.directives;p=o&&o.length?Vi(o.map((e=>function(e,t){const n=[],o=_c.get(e);o?n.push(t.helperString(o)):(t.helper(gi),t.directives.add(e.name),n.push(al(e.name,"directive")));const{loc:r}=e;e.exp&&n.push(e.exp);e.arg&&(e.exp||n.push("void 0"),n.push(e.arg));if(Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const t=ji("true",!1,r);n.push(Pi(e.modifiers.map((e=>Li(e,t))),r))}return Vi(n,e.loc)}(e,t)))):void 0}if(e.children.length>0){s===ii&&(d=!0,f|=1024);if(r&&s!==ri&&s!==ii){const{slots:n,hasDynamicSlots:o}=vc(e,t);l=n,o&&(f|=1024)}else if(1===e.children.length&&s!==ri){const n=e.children[0],o=n.type,r=5===o||8===o;r&&0===jl(n,t)&&(f|=1),l=r||2===o?n:e.children}else l=e.children}0!==f&&(c=String(f),u&&u.length&&(a=function(e){let t="[";for(let n=0,o=e.length;n{if(Wi(e)){const o=e.content,r=b(o);if(i||!r||"onclick"===o.toLowerCase()||"onUpdate:modelValue"===o||P(o)||(h=!0),r&&P(o)&&(g=!0),20===n.type||(4===n.type||8===n.type)&&jl(n,t)>0)return;"ref"===o?p=!0:"class"!==o||i?"style"!==o||i?"key"===o||v.includes(o)||v.push(o):d=!0:f=!0}else m=!0};for(let b=0;b1?Hi(t.helper(Si),c,s):c[0]):l.length&&(_=Pi(Cc(l),s)),m?u|=16:(f&&(u|=2),d&&(u|=4),v.length&&(u|=8),h&&(u|=32)),0!==u&&32!==u||!(p||g||a.length>0)||(u|=512),{props:_,directives:a,patchFlag:u,dynamicPropNames:v}}function Cc(e){const t=new Map,n=[];for(let o=0;o{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))})((e=>e.replace(Tc,((e,t)=>t?t.toUpperCase():"")))),Nc=(e,t)=>{if(ll(e)){const{children:n,loc:o}=e,{slotName:r,slotProps:s}=function(e,t){let n,o='"default"';const r=[];for(let s=0;s0){const{props:o,directives:s}=Sc(e,t,r);n=o,s.length&&t.onError(ni(35,s[0].loc))}return{slotName:o,slotProps:n}}(e,t),i=[t.prefixIdentifiers?"_ctx.$slots":"$slots",r];s&&i.push(s),n.length&&(s||i.push("{}"),i.push(Di([],n,!1,!1,o))),t.scopeId&&!t.slotted&&(s||i.push("{}"),n.length||i.push("undefined"),i.push("true")),e.codegenNode=Hi(t.helper(bi),i,o)}};const $c=/^\s*([\w$_]+|\([^)]*?\))\s*=>|^\s*function(?:\s+[\w$]+)?\s*\(/,Fc=(e,t,n,o)=>{const{loc:r,modifiers:s,arg:i}=e;let l;if(e.exp||s.length||n.onError(ni(34,r)),4===i.type)if(i.isStatic){const e=i.content;l=ji(W(U(e)),!0,i.loc)}else l=Ui([`${n.helperString(Ti)}(`,i,")"]);else l=i,l.children.unshift(`${n.helperString(Ti)}(`),l.children.push(")");let c=e.exp;c&&!c.content.trim()&&(c=void 0);let a=n.cacheHandlers&&!c;if(c){const e=Qi(c.content),t=!(e||$c.test(c.content)),n=c.content.includes(";");(t||a&&e)&&(c=Ui([`${t?"$event":"(...args)"} => ${n?"{":"("}`,c,n?"}":")"]))}let u={props:[Li(l,c||ji("() => {}",!1,r))]};return o&&(u=o(u)),a&&(u.props[0].value=n.cache(u.props[0].value)),u},Mc=(e,t,n)=>{const{exp:o,modifiers:r,loc:s}=e,i=e.arg;return 4!==i.type?(i.children.unshift("("),i.children.push(') || ""')):i.isStatic||(i.content=`${i.content} || ""`),r.includes("camel")&&(4===i.type?i.isStatic?i.content=U(i.content):i.content=`${n.helperString(ki)}(${i.content})`:(i.children.unshift(`${n.helperString(ki)}(`),i.children.push(")"))),!o||4===o.type&&!o.content.trim()?(n.onError(ni(33,s)),{props:[Li(i,ji("",!0,s))]}):{props:[Li(i,o)]}},Ac=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let o,r=!1;for(let e=0;e{if(1===e.type&&tl(e,"once",!0)){if(Ic.has(e))return;return Ic.add(e),t.helper(Ei),()=>{const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},Bc=(e,t,n)=>{const{exp:o,arg:r}=e;if(!o)return n.onError(ni(40,e.loc)),Rc();const s=o.loc.source,i=4===o.type?o.content:s;n.bindingMetadata[s];if(!Qi(i))return n.onError(ni(41,o.loc)),Rc();const l=r||ji("modelValue",!0),c=r?Wi(r)?`onUpdate:${r.content}`:Ui(['"onUpdate:" + ',r]):"onUpdate:modelValue";let a;a=Ui([`${n.isTS?"($event: any)":"$event"} => (`,o," = $event)"]);const u=[Li(l,e.exp),Li(c,a)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(Ji(e)?e:JSON.stringify(e))+": true")).join(", "),n=r?Wi(r)?`${r.content}Modifiers`:Ui([r,' + "Modifiers"']):"modelModifiers";u.push(Li(n,ji(`{ ${t} }`,!1,e.loc,2)))}return Rc(u)};function Rc(e=[]){return{props:e}}function Vc(e,t={}){const n=t.onError||ti,o="module"===t.mode;!0===t.prefixIdentifiers?n(ni(45)):o&&n(ni(46));t.cacheHandlers&&n(ni(47)),t.scopeId&&!o&&n(ni(48));const r=F(e)?dl(e,t):e,[s,i]=[[Oc,oc,lc,Nc,xc,mc,Ac],{on:Fc,bind:Mc,model:Bc}];return Wl(r,x({},t,{prefixIdentifiers:false,nodeTransforms:[...s,...t.nodeTransforms||[]],directiveTransforms:x({},i,t.directiveTransforms||{})})),Jl(r,x({},t,{prefixIdentifiers:false}))}const Pc=Symbol(""),Lc=Symbol(""),jc=Symbol(""),Uc=Symbol(""),Hc=Symbol(""),Dc=Symbol(""),zc=Symbol(""),Wc=Symbol(""),Kc=Symbol(""),Gc=Symbol("");var qc;let Jc;qc={[Pc]:"vModelRadio",[Lc]:"vModelCheckbox",[jc]:"vModelText",[Uc]:"vModelSelect",[Hc]:"vModelDynamic",[Dc]:"withModifiers",[zc]:"withKeys",[Wc]:"vShow",[Kc]:"Transition",[Gc]:"TransitionGroup"},Object.getOwnPropertySymbols(qc).forEach((e=>{Oi[e]=qc[e]}));const Zc=e("style,iframe,script,noscript",!0),Qc={isVoidTag:u,isNativeTag:e=>c(e)||a(e),isPreTag:e=>"pre"===e,decodeEntities:function(e){return(Jc||(Jc=document.createElement("div"))).innerHTML=e,Jc.textContent},isBuiltInComponent:e=>Ki(e,"Transition")?Kc:Ki(e,"TransitionGroup")?Gc:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if("annotation-xml"===t.tag){if("svg"===e)return 1;t.props.some((e=>6===e.type&&"encoding"===e.name&&null!=e.value&&("text/html"===e.value.content||"application/xhtml+xml"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&"mglyph"!==e&&"malignmark"!==e&&(n=0);else t&&1===n&&("foreignObject"!==t.tag&&"desc"!==t.tag&&"title"!==t.tag||(n=0));if(0===n){if("svg"===e)return 1;if("math"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if("textarea"===e||"title"===e)return 1;if(Zc(e))return 2}return 0}},Xc=(e,t)=>{const n=i(e);return ji(JSON.stringify(n),!1,t,3)};function Yc(e,t){return ni(e,t)}const ea=e("passive,once,capture"),ta=e("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),na=e("left,right"),oa=e("onkeyup,onkeydown,onkeypress",!0),ra=(e,t)=>Wi(e)&&"onclick"===e.content.toLowerCase()?ji(t,!0):4!==e.type?Ui(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,sa=(e,t)=>{1!==e.type||0!==e.tagType||"script"!==e.tag&&"style"!==e.tag||(t.onError(Yc(59,e.loc)),t.removeNode())},ia=[e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&"style"===t.name&&t.value&&(e.props[n]={type:7,name:"bind",arg:ji("style",!0,t.loc),exp:Xc(t.value.content,t.loc),modifiers:[],loc:t.loc})}))}],la={cloak:()=>({props:[]}),html:(e,t,n)=>{const{exp:o,loc:r}=e;return o||n.onError(Yc(49,r)),t.children.length&&(n.onError(Yc(50,r)),t.children.length=0),{props:[Li(ji("innerHTML",!0,r),o||ji("",!0))]}},text:(e,t,n)=>{const{exp:o,loc:r}=e;return o||n.onError(Yc(51,r)),t.children.length&&(n.onError(Yc(52,r)),t.children.length=0),{props:[Li(ji("textContent",!0),o?Hi(n.helperString(xi),[o],r):ji("",!0))]}},model:(e,t,n)=>{const o=Bc(e,t,n);if(!o.props.length||1===t.tagType)return o;e.arg&&n.onError(Yc(54,e.arg.loc));const{tag:r}=t,s=n.isCustomElement(r);if("input"===r||"textarea"===r||"select"===r||s){let i=jc,l=!1;if("input"===r||s){const o=nl(t,"type");if(o){if(7===o.type)i=Hc;else if(o.value)switch(o.value.content){case"radio":i=Pc;break;case"checkbox":i=Lc;break;case"file":l=!0,n.onError(Yc(55,e.loc))}}else(function(e){return e.props.some((e=>!(7!==e.type||"bind"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))})(t)&&(i=Hc)}else"select"===r&&(i=Uc);l||(o.needRuntime=n.helper(i))}else n.onError(Yc(53,e.loc));return o.props=o.props.filter((e=>!(4===e.key.type&&"modelValue"===e.key.content))),o},on:(e,t,n)=>Fc(e,0,n,(t=>{const{modifiers:o}=e;if(!o.length)return t;let{key:r,value:s}=t.props[0];const{keyModifiers:i,nonKeyModifiers:l,eventOptionModifiers:c}=((e,t)=>{const n=[],o=[],r=[];for(let s=0;s{const{exp:o,loc:r}=e;return o||n.onError(Yc(57,r)),{props:[],needRuntime:n.helper(Wc)}}};const ca=Object.create(null);Fr((function(e,t){if(!F(e)){if(!e.nodeType)return g;e=e.innerHTML}const n=e,o=ca[n];if(o)return o;if("#"===e[0]){const t=document.querySelector(e);e=t?t.innerHTML:""}const{code:r}=function(e,t={}){return Vc(e,x({},Qc,t,{nodeTransforms:[sa,...ia,...t.nodeTransforms||[]],directiveTransforms:x({},la,t.directiveTransforms||{}),transformHoist:null}))}(e,x({hoistStatic:!0,onError(e){throw e}},t)),s=new Function("Vue",r)(ei);return s._rc=!0,ca[n]=s}));const aa={name:"App",data:()=>({isSidebarOpen:!1,swUpdateEvent:null}),computed:{pageClasses(){return[{"sidebar-open":this.isSidebarOpen}]}},methods:{toggleSidebar(e){this.isSidebarOpen="boolean"==typeof e?e:!this.isSidebarOpen}}};const ua={},pa={class:"icon outbound",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},fa=er("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"},null,-1),da=er("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"},null,-1);ua.render=function(e,t){return Wo(),qo("svg",pa,[fa,da])};const ha={},ma=er("svg",{class:"icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"},[er("path",{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z",class:""})],-1);ha.render=function(e,t){return Wo(),qo("div",{class:"sidebar-button",onClick:t[1]||(t[1]=t=>e.$emit("toggle-sidebar"))},[ma])};const ga={components:{SidebarButton:ha}},va={class:"navbar"};ga.render=function(e,t,n,o,r,s){const i=Bo("SidebarButton");return Wo(),qo("header",va,[er(i,{onToggleSidebar:t[1]||(t[1]=t=>e.$emit("toggle-sidebar"))}),Yt(e.$slots,"default")])};const ya={},ba={class:"nav-links"};ya.render=function(e,t,n,o,r,s){return Wo(),qo("nav",ba,[Yt(e.$slots,"default")])};const _a={},xa={class:"vp-sidebar"};_a.render=function(e,t,n,o,r,s){return Wo(),qo("div",xa,[Yt(e.$slots,"default")])};const Sa={},Ca={class:"page"};Sa.render=function(e,t,n,o,r,s){return Wo(),qo("div",Ca,[Yt(e.$slots,"default"),Yt(e.$slots,"bottom")])};const ka=Xs(aa);ka.component("outboundlink",ua),ka.component("navbar",ga),ka.component("navlinks",ya),ka.component("sidebar",_a),ka.component("page",Sa),ka.component("router-link",{props:["to"],template:''}),ka.mount("#app",!0)}(); diff --git a/data/DNN_performance.png b/data/DNN_performance.png new file mode 100644 index 0000000..fd69d55 Binary files /dev/null and b/data/DNN_performance.png differ diff --git a/data/XGB_performance.png b/data/XGB_performance.png new file mode 100644 index 0000000..54942e4 Binary files /dev/null and b/data/XGB_performance.png differ diff --git a/data/beta_lyr.png b/data/beta_lyr.png new file mode 100644 index 0000000..d672203 Binary files /dev/null and b/data/beta_lyr.png differ diff --git a/data/bogus_1.png b/data/bogus_1.png new file mode 100644 index 0000000..11aa463 Binary files /dev/null and b/data/bogus_1.png differ diff --git a/data/bogus_2.png b/data/bogus_2.png new file mode 100644 index 0000000..319bcc8 Binary files /dev/null and b/data/bogus_2.png differ diff --git a/data/cepheid_1O.png b/data/cepheid_1O.png new file mode 100644 index 0000000..2902a59 Binary files /dev/null and b/data/cepheid_1O.png differ diff --git a/data/cepheid_F.png b/data/cepheid_F.png new file mode 100644 index 0000000..678659b Binary files /dev/null and b/data/cepheid_F.png differ diff --git a/data/cepheid_F1O.png b/data/cepheid_F1O.png new file mode 100644 index 0000000..a10139e Binary files /dev/null and b/data/cepheid_F1O.png differ diff --git a/data/cepheid_F_1.png b/data/cepheid_F_1.png new file mode 100644 index 0000000..c8edb5d Binary files /dev/null and b/data/cepheid_F_1.png differ diff --git a/data/cv_Novalike.png b/data/cv_Novalike.png new file mode 100644 index 0000000..c0f0dd5 Binary files /dev/null and b/data/cv_Novalike.png differ diff --git a/data/cv_SU_UMa.png b/data/cv_SU_UMa.png new file mode 100644 index 0000000..a2d8cb2 Binary files /dev/null and b/data/cv_SU_UMa.png differ diff --git a/data/cv_U_Gem.png b/data/cv_U_Gem.png new file mode 100644 index 0000000..be983a5 Binary files /dev/null and b/data/cv_U_Gem.png differ diff --git a/data/cv_Z_Cam.png b/data/cv_Z_Cam.png new file mode 100644 index 0000000..910881f Binary files /dev/null and b/data/cv_Z_Cam.png differ diff --git a/data/delta_scuti.png b/data/delta_scuti.png new file mode 100644 index 0000000..6ed511f Binary files /dev/null and b/data/delta_scuti.png differ diff --git a/data/flaring_dwarfnova.png b/data/flaring_dwarfnova.png new file mode 100644 index 0000000..64a5d5f Binary files /dev/null and b/data/flaring_dwarfnova.png differ diff --git a/data/flaring_mdwarf.png b/data/flaring_mdwarf.png new file mode 100644 index 0000000..6ec12e1 Binary files /dev/null and b/data/flaring_mdwarf.png differ diff --git a/data/gaia_hr_histogram.dat b/data/gaia_hr_histogram.dat new file mode 100644 index 0000000..e771fc2 --- /dev/null +++ b/data/gaia_hr_histogram.dat @@ -0,0 +1,200 @@ +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 3.700000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 6.200000000000000000e+01 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.300000000000000000e+01 5.700000000000000000e+01 6.300000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 9.100000000000000000e+01 9.700000000000000000e+01 4.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.500000000000000000e+01 9.600000000000000000e+01 1.360000000000000000e+02 8.200000000000000000e+01 4.800000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.800000000000000000e+01 1.030000000000000000e+02 1.240000000000000000e+02 8.500000000000000000e+01 5.900000000000000000e+01 3.700000000000000000e+01 nan 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 9.100000000000000000e+01 1.450000000000000000e+02 1.190000000000000000e+02 5.200000000000000000e+01 4.600000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.300000000000000000e+01 8.700000000000000000e+01 1.200000000000000000e+02 9.900000000000000000e+01 6.500000000000000000e+01 2.900000000000000000e+01 nan 3.100000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 9.900000000000000000e+01 1.220000000000000000e+02 1.070000000000000000e+02 5.700000000000000000e+01 5.400000000000000000e+01 3.400000000000000000e+01 2.700000000000000000e+01 3.800000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.900000000000000000e+01 9.500000000000000000e+01 1.390000000000000000e+02 1.090000000000000000e+02 8.100000000000000000e+01 5.100000000000000000e+01 2.600000000000000000e+01 2.500000000000000000e+01 3.300000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 5.900000000000000000e+01 1.140000000000000000e+02 1.840000000000000000e+02 1.220000000000000000e+02 8.400000000000000000e+01 6.200000000000000000e+01 4.600000000000000000e+01 4.000000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 6.600000000000000000e+01 1.390000000000000000e+02 1.420000000000000000e+02 1.110000000000000000e+02 9.900000000000000000e+01 6.200000000000000000e+01 4.200000000000000000e+01 4.200000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 6.400000000000000000e+01 1.370000000000000000e+02 1.350000000000000000e+02 9.100000000000000000e+01 7.000000000000000000e+01 7.100000000000000000e+01 5.800000000000000000e+01 4.500000000000000000e+01 4.300000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.200000000000000000e+01 nan 2.700000000000000000e+01 2.900000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.600000000000000000e+01 8.200000000000000000e+01 1.450000000000000000e+02 1.280000000000000000e+02 1.030000000000000000e+02 6.800000000000000000e+01 7.000000000000000000e+01 7.200000000000000000e+01 5.300000000000000000e+01 3.400000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 nan nan nan 2.700000000000000000e+01 2.900000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.200000000000000000e+01 9.500000000000000000e+01 1.390000000000000000e+02 9.800000000000000000e+01 9.500000000000000000e+01 7.700000000000000000e+01 1.000000000000000000e+02 7.200000000000000000e+01 6.100000000000000000e+01 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 nan 3.200000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.100000000000000000e+01 1.120000000000000000e+02 1.370000000000000000e+02 9.800000000000000000e+01 7.600000000000000000e+01 7.100000000000000000e+01 7.500000000000000000e+01 7.100000000000000000e+01 6.500000000000000000e+01 5.900000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 2.800000000000000000e+01 3.000000000000000000e+01 3.000000000000000000e+01 3.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.400000000000000000e+01 9.800000000000000000e+01 1.460000000000000000e+02 9.700000000000000000e+01 9.100000000000000000e+01 6.300000000000000000e+01 9.000000000000000000e+01 8.800000000000000000e+01 7.400000000000000000e+01 5.500000000000000000e+01 3.200000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 2.500000000000000000e+01 2.900000000000000000e+01 2.600000000000000000e+01 2.700000000000000000e+01 4.100000000000000000e+01 3.400000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.300000000000000000e+01 7.200000000000000000e+01 9.900000000000000000e+01 1.300000000000000000e+02 9.800000000000000000e+01 6.600000000000000000e+01 6.600000000000000000e+01 8.000000000000000000e+01 8.800000000000000000e+01 6.800000000000000000e+01 4.500000000000000000e+01 3.800000000000000000e+01 3.400000000000000000e+01 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 nan nan 3.300000000000000000e+01 3.200000000000000000e+01 4.200000000000000000e+01 2.800000000000000000e+01 3.900000000000000000e+01 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.500000000000000000e+01 5.200000000000000000e+01 1.050000000000000000e+02 1.440000000000000000e+02 9.500000000000000000e+01 9.300000000000000000e+01 8.600000000000000000e+01 8.000000000000000000e+01 9.500000000000000000e+01 6.500000000000000000e+01 4.200000000000000000e+01 3.800000000000000000e+01 3.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 2.500000000000000000e+01 3.500000000000000000e+01 3.800000000000000000e+01 5.500000000000000000e+01 4.700000000000000000e+01 4.000000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.600000000000000000e+01 6.600000000000000000e+01 1.000000000000000000e+02 1.540000000000000000e+02 9.700000000000000000e+01 8.100000000000000000e+01 8.000000000000000000e+01 9.700000000000000000e+01 1.020000000000000000e+02 6.200000000000000000e+01 4.800000000000000000e+01 4.300000000000000000e+01 4.000000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 2.700000000000000000e+01 nan nan 3.100000000000000000e+01 3.700000000000000000e+01 2.600000000000000000e+01 4.400000000000000000e+01 4.700000000000000000e+01 4.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 4.500000000000000000e+01 5.200000000000000000e+01 1.110000000000000000e+02 1.450000000000000000e+02 1.030000000000000000e+02 7.600000000000000000e+01 8.100000000000000000e+01 9.300000000000000000e+01 8.400000000000000000e+01 6.000000000000000000e+01 6.600000000000000000e+01 3.800000000000000000e+01 3.500000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.300000000000000000e+01 3.600000000000000000e+01 3.800000000000000000e+01 4.600000000000000000e+01 5.700000000000000000e+01 7.700000000000000000e+01 4.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 5.900000000000000000e+01 1.010000000000000000e+02 1.430000000000000000e+02 9.600000000000000000e+01 9.000000000000000000e+01 8.200000000000000000e+01 9.600000000000000000e+01 8.400000000000000000e+01 7.200000000000000000e+01 5.300000000000000000e+01 4.800000000000000000e+01 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 2.900000000000000000e+01 3.600000000000000000e+01 2.500000000000000000e+01 4.300000000000000000e+01 3.500000000000000000e+01 3.500000000000000000e+01 3.700000000000000000e+01 5.100000000000000000e+01 6.100000000000000000e+01 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 6.900000000000000000e+01 9.600000000000000000e+01 1.190000000000000000e+02 1.160000000000000000e+02 9.000000000000000000e+01 9.800000000000000000e+01 8.200000000000000000e+01 9.600000000000000000e+01 4.900000000000000000e+01 4.700000000000000000e+01 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.300000000000000000e+01 3.600000000000000000e+01 4.000000000000000000e+01 3.700000000000000000e+01 5.300000000000000000e+01 5.700000000000000000e+01 6.500000000000000000e+01 5.500000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.700000000000000000e+01 7.900000000000000000e+01 1.140000000000000000e+02 1.150000000000000000e+02 1.050000000000000000e+02 1.030000000000000000e+02 7.700000000000000000e+01 8.200000000000000000e+01 8.000000000000000000e+01 4.900000000000000000e+01 4.700000000000000000e+01 4.600000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.200000000000000000e+01 3.300000000000000000e+01 4.200000000000000000e+01 3.700000000000000000e+01 6.000000000000000000e+01 3.900000000000000000e+01 7.400000000000000000e+01 6.300000000000000000e+01 6.400000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 4.300000000000000000e+01 8.500000000000000000e+01 1.100000000000000000e+02 1.270000000000000000e+02 1.070000000000000000e+02 8.900000000000000000e+01 8.300000000000000000e+01 9.000000000000000000e+01 7.300000000000000000e+01 7.400000000000000000e+01 5.800000000000000000e+01 4.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.700000000000000000e+01 4.000000000000000000e+01 5.200000000000000000e+01 5.200000000000000000e+01 6.900000000000000000e+01 5.400000000000000000e+01 8.000000000000000000e+01 1.040000000000000000e+02 7.000000000000000000e+01 3.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 4.500000000000000000e+01 8.200000000000000000e+01 1.070000000000000000e+02 1.080000000000000000e+02 9.600000000000000000e+01 8.200000000000000000e+01 8.700000000000000000e+01 8.600000000000000000e+01 6.700000000000000000e+01 6.400000000000000000e+01 5.500000000000000000e+01 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 3.100000000000000000e+01 2.700000000000000000e+01 4.000000000000000000e+01 4.900000000000000000e+01 4.800000000000000000e+01 6.500000000000000000e+01 6.500000000000000000e+01 8.900000000000000000e+01 8.200000000000000000e+01 9.400000000000000000e+01 1.050000000000000000e+02 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 3.800000000000000000e+01 8.500000000000000000e+01 1.200000000000000000e+02 1.080000000000000000e+02 1.010000000000000000e+02 7.900000000000000000e+01 9.100000000000000000e+01 7.500000000000000000e+01 6.700000000000000000e+01 6.000000000000000000e+01 5.500000000000000000e+01 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.000000000000000000e+01 3.300000000000000000e+01 4.600000000000000000e+01 4.400000000000000000e+01 7.400000000000000000e+01 7.000000000000000000e+01 5.400000000000000000e+01 1.050000000000000000e+02 9.600000000000000000e+01 1.150000000000000000e+02 1.170000000000000000e+02 7.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 4.700000000000000000e+01 8.500000000000000000e+01 1.180000000000000000e+02 1.180000000000000000e+02 9.500000000000000000e+01 8.800000000000000000e+01 7.400000000000000000e+01 8.000000000000000000e+01 6.300000000000000000e+01 5.400000000000000000e+01 5.500000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.500000000000000000e+01 3.000000000000000000e+01 4.400000000000000000e+01 3.200000000000000000e+01 6.300000000000000000e+01 5.800000000000000000e+01 5.500000000000000000e+01 8.900000000000000000e+01 1.030000000000000000e+02 9.900000000000000000e+01 1.330000000000000000e+02 1.530000000000000000e+02 8.800000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.900000000000000000e+01 7.900000000000000000e+01 1.200000000000000000e+02 1.130000000000000000e+02 9.100000000000000000e+01 6.900000000000000000e+01 7.600000000000000000e+01 7.100000000000000000e+01 7.700000000000000000e+01 7.900000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.500000000000000000e+01 3.700000000000000000e+01 5.000000000000000000e+01 6.200000000000000000e+01 5.600000000000000000e+01 8.000000000000000000e+01 7.700000000000000000e+01 8.900000000000000000e+01 9.800000000000000000e+01 1.060000000000000000e+02 1.410000000000000000e+02 1.860000000000000000e+02 1.150000000000000000e+02 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.800000000000000000e+01 7.800000000000000000e+01 8.500000000000000000e+01 1.010000000000000000e+02 7.200000000000000000e+01 1.000000000000000000e+02 9.500000000000000000e+01 6.500000000000000000e+01 6.800000000000000000e+01 5.000000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 3.200000000000000000e+01 3.900000000000000000e+01 4.900000000000000000e+01 5.800000000000000000e+01 7.000000000000000000e+01 7.600000000000000000e+01 1.040000000000000000e+02 1.220000000000000000e+02 1.290000000000000000e+02 1.430000000000000000e+02 1.920000000000000000e+02 2.650000000000000000e+02 2.030000000000000000e+02 7.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.600000000000000000e+01 4.400000000000000000e+01 7.000000000000000000e+01 1.090000000000000000e+02 8.700000000000000000e+01 8.200000000000000000e+01 7.600000000000000000e+01 6.500000000000000000e+01 7.800000000000000000e+01 6.500000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 2.900000000000000000e+01 4.100000000000000000e+01 6.600000000000000000e+01 6.600000000000000000e+01 7.100000000000000000e+01 8.900000000000000000e+01 9.900000000000000000e+01 1.070000000000000000e+02 1.360000000000000000e+02 1.880000000000000000e+02 2.470000000000000000e+02 2.970000000000000000e+02 3.520000000000000000e+02 3.030000000000000000e+02 1.770000000000000000e+02 6.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 4.600000000000000000e+01 8.000000000000000000e+01 9.600000000000000000e+01 7.800000000000000000e+01 7.400000000000000000e+01 6.700000000000000000e+01 6.700000000000000000e+01 5.900000000000000000e+01 6.400000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 3.800000000000000000e+01 4.000000000000000000e+01 5.200000000000000000e+01 6.500000000000000000e+01 8.600000000000000000e+01 1.020000000000000000e+02 1.140000000000000000e+02 1.260000000000000000e+02 1.670000000000000000e+02 2.070000000000000000e+02 2.340000000000000000e+02 2.970000000000000000e+02 3.520000000000000000e+02 4.000000000000000000e+02 3.880000000000000000e+02 3.610000000000000000e+02 1.820000000000000000e+02 5.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.800000000000000000e+01 5.900000000000000000e+01 8.600000000000000000e+01 1.040000000000000000e+02 8.800000000000000000e+01 6.700000000000000000e+01 7.900000000000000000e+01 6.900000000000000000e+01 7.500000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.600000000000000000e+01 3.100000000000000000e+01 3.000000000000000000e+01 5.000000000000000000e+01 6.600000000000000000e+01 5.900000000000000000e+01 8.100000000000000000e+01 8.400000000000000000e+01 1.100000000000000000e+02 1.140000000000000000e+02 1.510000000000000000e+02 1.810000000000000000e+02 2.060000000000000000e+02 2.600000000000000000e+02 2.680000000000000000e+02 2.900000000000000000e+02 3.820000000000000000e+02 4.450000000000000000e+02 4.920000000000000000e+02 5.570000000000000000e+02 3.940000000000000000e+02 1.780000000000000000e+02 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 4.300000000000000000e+01 6.700000000000000000e+01 9.900000000000000000e+01 7.000000000000000000e+01 7.200000000000000000e+01 6.200000000000000000e+01 7.300000000000000000e+01 5.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.300000000000000000e+01 3.600000000000000000e+01 5.400000000000000000e+01 5.000000000000000000e+01 6.200000000000000000e+01 9.000000000000000000e+01 8.700000000000000000e+01 1.110000000000000000e+02 1.310000000000000000e+02 1.600000000000000000e+02 1.830000000000000000e+02 2.510000000000000000e+02 2.600000000000000000e+02 2.880000000000000000e+02 3.100000000000000000e+02 3.820000000000000000e+02 4.910000000000000000e+02 5.770000000000000000e+02 6.480000000000000000e+02 6.440000000000000000e+02 4.120000000000000000e+02 1.660000000000000000e+02 4.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.200000000000000000e+01 5.000000000000000000e+01 8.100000000000000000e+01 8.700000000000000000e+01 5.800000000000000000e+01 7.300000000000000000e+01 5.600000000000000000e+01 6.300000000000000000e+01 3.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 2.900000000000000000e+01 4.000000000000000000e+01 5.200000000000000000e+01 7.300000000000000000e+01 8.500000000000000000e+01 7.900000000000000000e+01 1.040000000000000000e+02 1.270000000000000000e+02 1.720000000000000000e+02 1.860000000000000000e+02 2.170000000000000000e+02 2.450000000000000000e+02 2.720000000000000000e+02 3.280000000000000000e+02 3.310000000000000000e+02 4.860000000000000000e+02 4.980000000000000000e+02 5.730000000000000000e+02 6.990000000000000000e+02 7.470000000000000000e+02 7.020000000000000000e+02 4.540000000000000000e+02 1.830000000000000000e+02 7.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 5.300000000000000000e+01 9.100000000000000000e+01 6.700000000000000000e+01 6.700000000000000000e+01 5.700000000000000000e+01 6.500000000000000000e+01 3.000000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 2.600000000000000000e+01 4.900000000000000000e+01 3.900000000000000000e+01 5.200000000000000000e+01 8.200000000000000000e+01 1.020000000000000000e+02 9.000000000000000000e+01 1.430000000000000000e+02 1.640000000000000000e+02 1.620000000000000000e+02 2.100000000000000000e+02 2.400000000000000000e+02 2.830000000000000000e+02 3.560000000000000000e+02 3.840000000000000000e+02 4.450000000000000000e+02 5.040000000000000000e+02 5.660000000000000000e+02 7.460000000000000000e+02 8.230000000000000000e+02 9.390000000000000000e+02 7.950000000000000000e+02 4.680000000000000000e+02 2.240000000000000000e+02 6.900000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.200000000000000000e+01 5.000000000000000000e+01 8.500000000000000000e+01 5.600000000000000000e+01 6.500000000000000000e+01 5.600000000000000000e+01 4.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 4.000000000000000000e+01 5.900000000000000000e+01 5.100000000000000000e+01 8.600000000000000000e+01 9.700000000000000000e+01 1.300000000000000000e+02 1.430000000000000000e+02 1.670000000000000000e+02 2.230000000000000000e+02 2.060000000000000000e+02 2.750000000000000000e+02 3.220000000000000000e+02 3.670000000000000000e+02 4.750000000000000000e+02 4.980000000000000000e+02 5.420000000000000000e+02 6.610000000000000000e+02 8.650000000000000000e+02 9.560000000000000000e+02 1.034000000000000000e+03 8.590000000000000000e+02 4.790000000000000000e+02 2.070000000000000000e+02 9.000000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.500000000000000000e+01 7.100000000000000000e+01 7.300000000000000000e+01 6.700000000000000000e+01 5.000000000000000000e+01 5.100000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 3.200000000000000000e+01 4.400000000000000000e+01 5.600000000000000000e+01 7.500000000000000000e+01 9.900000000000000000e+01 1.250000000000000000e+02 1.320000000000000000e+02 1.480000000000000000e+02 1.590000000000000000e+02 2.290000000000000000e+02 2.720000000000000000e+02 3.410000000000000000e+02 3.810000000000000000e+02 4.230000000000000000e+02 4.900000000000000000e+02 5.700000000000000000e+02 6.600000000000000000e+02 7.730000000000000000e+02 9.220000000000000000e+02 1.127000000000000000e+03 1.098000000000000000e+03 8.700000000000000000e+02 4.850000000000000000e+02 2.260000000000000000e+02 7.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 6.500000000000000000e+01 6.000000000000000000e+01 5.300000000000000000e+01 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.300000000000000000e+01 3.600000000000000000e+01 5.000000000000000000e+01 6.600000000000000000e+01 8.800000000000000000e+01 8.300000000000000000e+01 1.240000000000000000e+02 1.350000000000000000e+02 1.780000000000000000e+02 2.210000000000000000e+02 2.600000000000000000e+02 3.140000000000000000e+02 4.140000000000000000e+02 4.570000000000000000e+02 5.260000000000000000e+02 5.670000000000000000e+02 6.840000000000000000e+02 8.150000000000000000e+02 9.600000000000000000e+02 1.109000000000000000e+03 1.243000000000000000e+03 1.167000000000000000e+03 7.050000000000000000e+02 4.060000000000000000e+02 1.910000000000000000e+02 5.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 3.800000000000000000e+01 6.100000000000000000e+01 6.100000000000000000e+01 5.100000000000000000e+01 3.700000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 3.000000000000000000e+01 5.200000000000000000e+01 5.200000000000000000e+01 7.100000000000000000e+01 8.400000000000000000e+01 1.270000000000000000e+02 1.350000000000000000e+02 1.880000000000000000e+02 2.260000000000000000e+02 2.680000000000000000e+02 3.650000000000000000e+02 3.860000000000000000e+02 4.310000000000000000e+02 4.750000000000000000e+02 5.640000000000000000e+02 6.470000000000000000e+02 7.180000000000000000e+02 9.060000000000000000e+02 1.060000000000000000e+03 1.307000000000000000e+03 1.319000000000000000e+03 1.070000000000000000e+03 7.100000000000000000e+02 3.360000000000000000e+02 1.520000000000000000e+02 4.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.400000000000000000e+01 4.900000000000000000e+01 5.500000000000000000e+01 5.000000000000000000e+01 3.700000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 3.900000000000000000e+01 5.700000000000000000e+01 7.000000000000000000e+01 7.100000000000000000e+01 9.800000000000000000e+01 1.190000000000000000e+02 1.490000000000000000e+02 2.120000000000000000e+02 2.500000000000000000e+02 2.940000000000000000e+02 3.700000000000000000e+02 3.740000000000000000e+02 4.460000000000000000e+02 4.830000000000000000e+02 5.350000000000000000e+02 6.760000000000000000e+02 8.300000000000000000e+02 1.022000000000000000e+03 1.203000000000000000e+03 1.359000000000000000e+03 1.308000000000000000e+03 9.500000000000000000e+02 4.830000000000000000e+02 2.400000000000000000e+02 7.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.200000000000000000e+01 5.200000000000000000e+01 4.800000000000000000e+01 4.900000000000000000e+01 5.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 3.800000000000000000e+01 4.700000000000000000e+01 7.100000000000000000e+01 6.400000000000000000e+01 1.030000000000000000e+02 1.060000000000000000e+02 1.670000000000000000e+02 2.050000000000000000e+02 2.080000000000000000e+02 2.410000000000000000e+02 2.510000000000000000e+02 2.900000000000000000e+02 3.550000000000000000e+02 3.780000000000000000e+02 4.650000000000000000e+02 5.700000000000000000e+02 6.790000000000000000e+02 8.840000000000000000e+02 1.132000000000000000e+03 1.372000000000000000e+03 1.496000000000000000e+03 1.167000000000000000e+03 6.750000000000000000e+02 3.840000000000000000e+02 1.230000000000000000e+02 4.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.500000000000000000e+01 4.300000000000000000e+01 5.200000000000000000e+01 4.800000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 2.500000000000000000e+01 3.800000000000000000e+01 4.900000000000000000e+01 6.600000000000000000e+01 7.300000000000000000e+01 8.100000000000000000e+01 9.400000000000000000e+01 1.260000000000000000e+02 1.580000000000000000e+02 1.290000000000000000e+02 1.450000000000000000e+02 1.810000000000000000e+02 2.120000000000000000e+02 2.520000000000000000e+02 3.090000000000000000e+02 3.640000000000000000e+02 4.520000000000000000e+02 5.860000000000000000e+02 7.160000000000000000e+02 9.890000000000000000e+02 1.396000000000000000e+03 1.577000000000000000e+03 1.320000000000000000e+03 8.380000000000000000e+02 4.660000000000000000e+02 2.300000000000000000e+02 8.300000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.800000000000000000e+01 4.700000000000000000e+01 5.300000000000000000e+01 3.500000000000000000e+01 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 3.000000000000000000e+01 4.500000000000000000e+01 4.300000000000000000e+01 5.000000000000000000e+01 4.900000000000000000e+01 7.700000000000000000e+01 1.070000000000000000e+02 6.600000000000000000e+01 7.100000000000000000e+01 7.500000000000000000e+01 1.010000000000000000e+02 1.020000000000000000e+02 1.500000000000000000e+02 1.570000000000000000e+02 2.520000000000000000e+02 3.010000000000000000e+02 3.700000000000000000e+02 4.910000000000000000e+02 6.600000000000000000e+02 8.830000000000000000e+02 1.230000000000000000e+03 1.515000000000000000e+03 1.499000000000000000e+03 1.052000000000000000e+03 5.770000000000000000e+02 3.150000000000000000e+02 9.600000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 4.400000000000000000e+01 4.600000000000000000e+01 3.900000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.800000000000000000e+01 3.200000000000000000e+01 4.200000000000000000e+01 3.700000000000000000e+01 5.600000000000000000e+01 6.400000000000000000e+01 7.400000000000000000e+01 4.000000000000000000e+01 3.800000000000000000e+01 3.700000000000000000e+01 5.100000000000000000e+01 5.100000000000000000e+01 6.500000000000000000e+01 1.240000000000000000e+02 1.340000000000000000e+02 1.940000000000000000e+02 2.470000000000000000e+02 3.050000000000000000e+02 4.240000000000000000e+02 5.760000000000000000e+02 8.080000000000000000e+02 1.107000000000000000e+03 1.449000000000000000e+03 1.526000000000000000e+03 1.211000000000000000e+03 5.900000000000000000e+02 3.460000000000000000e+02 1.280000000000000000e+02 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.300000000000000000e+01 5.800000000000000000e+01 3.400000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 nan 2.800000000000000000e+01 2.600000000000000000e+01 nan 3.900000000000000000e+01 3.500000000000000000e+01 4.100000000000000000e+01 6.400000000000000000e+01 6.400000000000000000e+01 3.700000000000000000e+01 2.900000000000000000e+01 nan 3.200000000000000000e+01 3.900000000000000000e+01 4.500000000000000000e+01 5.300000000000000000e+01 7.600000000000000000e+01 1.150000000000000000e+02 1.600000000000000000e+02 1.880000000000000000e+02 2.580000000000000000e+02 2.930000000000000000e+02 4.950000000000000000e+02 7.280000000000000000e+02 1.057000000000000000e+03 1.423000000000000000e+03 1.617000000000000000e+03 1.325000000000000000e+03 7.600000000000000000e+02 3.750000000000000000e+02 1.620000000000000000e+02 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.100000000000000000e+01 4.300000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 nan 2.500000000000000000e+01 3.000000000000000000e+01 3.400000000000000000e+01 nan 2.700000000000000000e+01 3.000000000000000000e+01 4.300000000000000000e+01 4.100000000000000000e+01 3.200000000000000000e+01 nan nan nan nan 2.800000000000000000e+01 3.900000000000000000e+01 4.200000000000000000e+01 6.200000000000000000e+01 7.900000000000000000e+01 1.490000000000000000e+02 1.490000000000000000e+02 2.260000000000000000e+02 2.580000000000000000e+02 3.980000000000000000e+02 6.130000000000000000e+02 9.510000000000000000e+02 1.378000000000000000e+03 1.554000000000000000e+03 1.379000000000000000e+03 8.480000000000000000e+02 4.470000000000000000e+02 1.730000000000000000e+02 5.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 3.500000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 nan nan nan 2.600000000000000000e+01 2.700000000000000000e+01 3.400000000000000000e+01 3.000000000000000000e+01 3.400000000000000000e+01 3.800000000000000000e+01 3.800000000000000000e+01 4.200000000000000000e+01 nan nan nan nan nan nan nan 3.800000000000000000e+01 4.300000000000000000e+01 5.600000000000000000e+01 9.200000000000000000e+01 1.330000000000000000e+02 1.500000000000000000e+02 1.810000000000000000e+02 2.140000000000000000e+02 3.180000000000000000e+02 5.530000000000000000e+02 8.330000000000000000e+02 1.358000000000000000e+03 1.512000000000000000e+03 1.502000000000000000e+03 9.360000000000000000e+02 4.860000000000000000e+02 1.980000000000000000e+02 6.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 3.700000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 nan 3.000000000000000000e+01 3.500000000000000000e+01 3.300000000000000000e+01 4.100000000000000000e+01 3.600000000000000000e+01 2.700000000000000000e+01 3.800000000000000000e+01 3.000000000000000000e+01 3.800000000000000000e+01 2.900000000000000000e+01 3.200000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan 3.900000000000000000e+01 6.400000000000000000e+01 7.400000000000000000e+01 1.080000000000000000e+02 1.640000000000000000e+02 1.740000000000000000e+02 2.020000000000000000e+02 2.990000000000000000e+02 4.720000000000000000e+02 7.700000000000000000e+02 1.250000000000000000e+03 1.609000000000000000e+03 1.497000000000000000e+03 9.380000000000000000e+02 4.570000000000000000e+02 2.030000000000000000e+02 5.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.800000000000000000e+01 4.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.300000000000000000e+01 3.400000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.500000000000000000e+01 2.700000000000000000e+01 3.000000000000000000e+01 3.000000000000000000e+01 nan 3.400000000000000000e+01 2.600000000000000000e+01 3.800000000000000000e+01 3.700000000000000000e+01 2.700000000000000000e+01 4.700000000000000000e+01 4.000000000000000000e+01 nan 3.800000000000000000e+01 nan 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan 3.900000000000000000e+01 6.200000000000000000e+01 7.700000000000000000e+01 1.040000000000000000e+02 1.550000000000000000e+02 1.510000000000000000e+02 1.910000000000000000e+02 2.480000000000000000e+02 4.630000000000000000e+02 7.690000000000000000e+02 1.163000000000000000e+03 1.594000000000000000e+03 1.502000000000000000e+03 9.780000000000000000e+02 4.720000000000000000e+02 2.130000000000000000e+02 7.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.100000000000000000e+01 4.600000000000000000e+01 4.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 7.400000000000000000e+01 4.100000000000000000e+01 3.200000000000000000e+01 nan 2.700000000000000000e+01 nan 2.600000000000000000e+01 nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 2.500000000000000000e+01 nan 2.500000000000000000e+01 nan nan 3.800000000000000000e+01 3.200000000000000000e+01 2.700000000000000000e+01 3.200000000000000000e+01 2.800000000000000000e+01 2.600000000000000000e+01 2.800000000000000000e+01 3.600000000000000000e+01 3.100000000000000000e+01 3.100000000000000000e+01 3.100000000000000000e+01 2.800000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 3.900000000000000000e+01 7.800000000000000000e+01 1.080000000000000000e+02 1.360000000000000000e+02 1.480000000000000000e+02 1.720000000000000000e+02 2.120000000000000000e+02 3.860000000000000000e+02 7.080000000000000000e+02 1.119000000000000000e+03 1.607000000000000000e+03 1.535000000000000000e+03 8.890000000000000000e+02 4.940000000000000000e+02 2.090000000000000000e+02 5.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 3.800000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 8.000000000000000000e+01 7.700000000000000000e+01 4.300000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan nan 2.600000000000000000e+01 2.800000000000000000e+01 2.900000000000000000e+01 4.100000000000000000e+01 2.600000000000000000e+01 3.300000000000000000e+01 3.000000000000000000e+01 nan 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 4.200000000000000000e+01 7.100000000000000000e+01 9.100000000000000000e+01 1.260000000000000000e+02 1.520000000000000000e+02 1.600000000000000000e+02 2.080000000000000000e+02 3.740000000000000000e+02 6.950000000000000000e+02 1.145000000000000000e+03 1.604000000000000000e+03 1.527000000000000000e+03 9.220000000000000000e+02 4.450000000000000000e+02 1.770000000000000000e+02 5.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.600000000000000000e+01 4.500000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.800000000000000000e+01 1.070000000000000000e+02 6.400000000000000000e+01 3.100000000000000000e+01 nan 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.500000000000000000e+01 6.500000000000000000e+01 1.100000000000000000e+02 1.150000000000000000e+02 1.340000000000000000e+02 1.480000000000000000e+02 1.940000000000000000e+02 3.000000000000000000e+02 6.680000000000000000e+02 1.113000000000000000e+03 1.534000000000000000e+03 1.420000000000000000e+03 8.280000000000000000e+02 4.270000000000000000e+02 1.700000000000000000e+02 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 6.700000000000000000e+01 1.110000000000000000e+02 5.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.500000000000000000e+01 6.200000000000000000e+01 1.120000000000000000e+02 1.100000000000000000e+02 1.370000000000000000e+02 1.340000000000000000e+02 1.810000000000000000e+02 3.870000000000000000e+02 6.860000000000000000e+02 1.137000000000000000e+03 1.516000000000000000e+03 1.394000000000000000e+03 7.510000000000000000e+02 3.220000000000000000e+02 1.610000000000000000e+02 4.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.500000000000000000e+01 9.800000000000000000e+01 8.900000000000000000e+01 nan nan 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 3.200000000000000000e+01 4.600000000000000000e+01 1.040000000000000000e+02 1.510000000000000000e+02 1.180000000000000000e+02 1.300000000000000000e+02 1.820000000000000000e+02 3.370000000000000000e+02 7.560000000000000000e+02 1.221000000000000000e+03 1.572000000000000000e+03 1.391000000000000000e+03 6.610000000000000000e+02 3.090000000000000000e+02 1.110000000000000000e+02 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 4.300000000000000000e+01 7.700000000000000000e+01 4.300000000000000000e+01 nan nan nan 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.000000000000000000e+01 5.100000000000000000e+01 9.300000000000000000e+01 1.070000000000000000e+02 1.280000000000000000e+02 1.340000000000000000e+02 1.710000000000000000e+02 3.320000000000000000e+02 7.810000000000000000e+02 1.178000000000000000e+03 1.637000000000000000e+03 1.206000000000000000e+03 5.730000000000000000e+02 2.770000000000000000e+02 1.170000000000000000e+02 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.000000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.900000000000000000e+01 7.400000000000000000e+01 1.030000000000000000e+02 1.140000000000000000e+02 1.080000000000000000e+02 1.210000000000000000e+02 1.680000000000000000e+02 3.580000000000000000e+02 8.070000000000000000e+02 1.337000000000000000e+03 1.509000000000000000e+03 1.112000000000000000e+03 5.260000000000000000e+02 2.230000000000000000e+02 8.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 5.400000000000000000e+01 1.030000000000000000e+02 1.040000000000000000e+02 8.400000000000000000e+01 1.220000000000000000e+02 1.990000000000000000e+02 4.140000000000000000e+02 8.590000000000000000e+02 1.399000000000000000e+03 1.464000000000000000e+03 9.750000000000000000e+02 4.400000000000000000e+02 1.820000000000000000e+02 6.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 7.300000000000000000e+01 9.100000000000000000e+01 1.100000000000000000e+02 1.110000000000000000e+02 1.190000000000000000e+02 2.030000000000000000e+02 4.650000000000000000e+02 9.620000000000000000e+02 1.492000000000000000e+03 1.463000000000000000e+03 8.660000000000000000e+02 3.830000000000000000e+02 1.660000000000000000e+02 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.800000000000000000e+01 8.100000000000000000e+01 9.300000000000000000e+01 8.700000000000000000e+01 8.800000000000000000e+01 1.250000000000000000e+02 2.240000000000000000e+02 5.470000000000000000e+02 9.910000000000000000e+02 1.486000000000000000e+03 1.304000000000000000e+03 7.440000000000000000e+02 3.170000000000000000e+02 1.230000000000000000e+02 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.500000000000000000e+01 7.400000000000000000e+01 9.100000000000000000e+01 1.010000000000000000e+02 8.100000000000000000e+01 1.250000000000000000e+02 2.410000000000000000e+02 6.120000000000000000e+02 1.177000000000000000e+03 1.439000000000000000e+03 1.206000000000000000e+03 6.440000000000000000e+02 2.810000000000000000e+02 1.050000000000000000e+02 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 8.100000000000000000e+01 8.800000000000000000e+01 1.000000000000000000e+02 9.000000000000000000e+01 1.370000000000000000e+02 2.920000000000000000e+02 7.540000000000000000e+02 1.201000000000000000e+03 1.515000000000000000e+03 1.156000000000000000e+03 5.000000000000000000e+02 2.430000000000000000e+02 8.100000000000000000e+01 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 5.600000000000000000e+01 8.500000000000000000e+01 8.500000000000000000e+01 9.000000000000000000e+01 1.100000000000000000e+02 1.210000000000000000e+02 3.720000000000000000e+02 8.170000000000000000e+02 1.344000000000000000e+03 1.479000000000000000e+03 9.830000000000000000e+02 4.620000000000000000e+02 2.130000000000000000e+02 6.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 6.000000000000000000e+01 9.300000000000000000e+01 1.040000000000000000e+02 9.100000000000000000e+01 1.040000000000000000e+02 1.680000000000000000e+02 4.620000000000000000e+02 9.470000000000000000e+02 1.436000000000000000e+03 1.460000000000000000e+03 8.370000000000000000e+02 3.770000000000000000e+02 1.600000000000000000e+02 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 6.800000000000000000e+01 8.400000000000000000e+01 9.000000000000000000e+01 7.700000000000000000e+01 1.090000000000000000e+02 1.860000000000000000e+02 5.510000000000000000e+02 1.034000000000000000e+03 1.461000000000000000e+03 1.268000000000000000e+03 7.020000000000000000e+02 3.430000000000000000e+02 1.190000000000000000e+02 4.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.000000000000000000e+01 8.400000000000000000e+01 1.040000000000000000e+02 9.300000000000000000e+01 1.120000000000000000e+02 1.100000000000000000e+02 2.570000000000000000e+02 6.560000000000000000e+02 1.263000000000000000e+03 1.534000000000000000e+03 1.217000000000000000e+03 6.480000000000000000e+02 3.210000000000000000e+02 1.340000000000000000e+02 4.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 5.400000000000000000e+01 9.200000000000000000e+01 1.090000000000000000e+02 8.300000000000000000e+01 9.700000000000000000e+01 1.540000000000000000e+02 3.190000000000000000e+02 8.170000000000000000e+02 1.344000000000000000e+03 1.431000000000000000e+03 1.082000000000000000e+03 5.730000000000000000e+02 2.690000000000000000e+02 7.200000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 5.400000000000000000e+01 9.400000000000000000e+01 7.500000000000000000e+01 7.800000000000000000e+01 1.080000000000000000e+02 1.550000000000000000e+02 3.910000000000000000e+02 8.510000000000000000e+02 1.436000000000000000e+03 1.452000000000000000e+03 9.250000000000000000e+02 4.220000000000000000e+02 2.540000000000000000e+02 7.800000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.500000000000000000e+01 7.500000000000000000e+01 8.300000000000000000e+01 7.800000000000000000e+01 8.600000000000000000e+01 1.260000000000000000e+02 1.790000000000000000e+02 5.320000000000000000e+02 1.072000000000000000e+03 1.510000000000000000e+03 1.324000000000000000e+03 8.190000000000000000e+02 4.200000000000000000e+02 2.000000000000000000e+02 5.800000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.900000000000000000e+01 7.700000000000000000e+01 1.000000000000000000e+02 9.200000000000000000e+01 1.070000000000000000e+02 1.310000000000000000e+02 2.560000000000000000e+02 6.910000000000000000e+02 1.096000000000000000e+03 1.454000000000000000e+03 1.278000000000000000e+03 6.870000000000000000e+02 3.720000000000000000e+02 2.100000000000000000e+02 7.100000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.900000000000000000e+01 7.000000000000000000e+01 9.500000000000000000e+01 9.000000000000000000e+01 1.090000000000000000e+02 1.450000000000000000e+02 3.770000000000000000e+02 7.690000000000000000e+02 1.312000000000000000e+03 1.446000000000000000e+03 1.229000000000000000e+03 6.420000000000000000e+02 3.730000000000000000e+02 2.090000000000000000e+02 7.000000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 5.300000000000000000e+01 9.800000000000000000e+01 9.200000000000000000e+01 9.500000000000000000e+01 1.090000000000000000e+02 1.570000000000000000e+02 4.830000000000000000e+02 8.330000000000000000e+02 1.287000000000000000e+03 1.432000000000000000e+03 1.077000000000000000e+03 5.930000000000000000e+02 3.370000000000000000e+02 2.210000000000000000e+02 8.500000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 5.900000000000000000e+01 9.400000000000000000e+01 8.800000000000000000e+01 9.800000000000000000e+01 1.120000000000000000e+02 2.150000000000000000e+02 5.710000000000000000e+02 1.019000000000000000e+03 1.495000000000000000e+03 1.437000000000000000e+03 9.450000000000000000e+02 5.700000000000000000e+02 3.620000000000000000e+02 1.940000000000000000e+02 8.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.700000000000000000e+01 7.000000000000000000e+01 9.300000000000000000e+01 1.140000000000000000e+02 1.000000000000000000e+02 1.320000000000000000e+02 2.740000000000000000e+02 6.690000000000000000e+02 1.159000000000000000e+03 1.513000000000000000e+03 1.390000000000000000e+03 8.660000000000000000e+02 5.630000000000000000e+02 3.130000000000000000e+02 1.910000000000000000e+02 9.400000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.600000000000000000e+01 7.500000000000000000e+01 9.800000000000000000e+01 1.010000000000000000e+02 1.070000000000000000e+02 1.510000000000000000e+02 3.780000000000000000e+02 8.030000000000000000e+02 1.194000000000000000e+03 1.479000000000000000e+03 1.319000000000000000e+03 8.040000000000000000e+02 4.760000000000000000e+02 3.290000000000000000e+02 1.920000000000000000e+02 1.040000000000000000e+02 3.700000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 6.400000000000000000e+01 8.200000000000000000e+01 1.120000000000000000e+02 1.130000000000000000e+02 1.410000000000000000e+02 2.030000000000000000e+02 5.050000000000000000e+02 8.510000000000000000e+02 1.344000000000000000e+03 1.484000000000000000e+03 1.196000000000000000e+03 7.630000000000000000e+02 5.100000000000000000e+02 3.260000000000000000e+02 1.740000000000000000e+02 1.050000000000000000e+02 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 7.400000000000000000e+01 9.900000000000000000e+01 1.000000000000000000e+02 1.180000000000000000e+02 1.320000000000000000e+02 2.350000000000000000e+02 6.140000000000000000e+02 9.690000000000000000e+02 1.333000000000000000e+03 1.459000000000000000e+03 1.098000000000000000e+03 7.330000000000000000e+02 4.840000000000000000e+02 3.520000000000000000e+02 1.870000000000000000e+02 9.600000000000000000e+01 4.500000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.000000000000000000e+01 6.100000000000000000e+01 1.010000000000000000e+02 1.040000000000000000e+02 1.270000000000000000e+02 1.580000000000000000e+02 3.260000000000000000e+02 6.970000000000000000e+02 1.073000000000000000e+03 1.409000000000000000e+03 1.377000000000000000e+03 1.090000000000000000e+03 7.720000000000000000e+02 4.470000000000000000e+02 3.370000000000000000e+02 2.120000000000000000e+02 9.600000000000000000e+01 4.900000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 6.500000000000000000e+01 6.700000000000000000e+01 1.050000000000000000e+02 1.070000000000000000e+02 1.270000000000000000e+02 1.900000000000000000e+02 4.460000000000000000e+02 7.830000000000000000e+02 1.109000000000000000e+03 1.517000000000000000e+03 1.406000000000000000e+03 9.880000000000000000e+02 6.960000000000000000e+02 4.990000000000000000e+02 3.550000000000000000e+02 2.180000000000000000e+02 1.230000000000000000e+02 5.700000000000000000e+01 3.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.800000000000000000e+01 4.100000000000000000e+01 8.500000000000000000e+01 1.080000000000000000e+02 1.070000000000000000e+02 1.510000000000000000e+02 2.460000000000000000e+02 5.470000000000000000e+02 8.340000000000000000e+02 1.223000000000000000e+03 1.462000000000000000e+03 1.369000000000000000e+03 9.700000000000000000e+02 6.850000000000000000e+02 5.030000000000000000e+02 3.640000000000000000e+02 2.280000000000000000e+02 1.050000000000000000e+02 6.500000000000000000e+01 3.300000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.400000000000000000e+01 7.600000000000000000e+01 8.100000000000000000e+01 1.230000000000000000e+02 1.240000000000000000e+02 1.650000000000000000e+02 3.360000000000000000e+02 6.210000000000000000e+02 9.050000000000000000e+02 1.415000000000000000e+03 1.470000000000000000e+03 1.254000000000000000e+03 9.210000000000000000e+02 6.570000000000000000e+02 4.480000000000000000e+02 3.680000000000000000e+02 2.320000000000000000e+02 1.430000000000000000e+02 6.200000000000000000e+01 4.000000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.600000000000000000e+01 4.800000000000000000e+01 7.000000000000000000e+01 8.800000000000000000e+01 1.250000000000000000e+02 1.470000000000000000e+02 1.970000000000000000e+02 4.100000000000000000e+02 6.940000000000000000e+02 9.640000000000000000e+02 1.412000000000000000e+03 1.440000000000000000e+03 1.252000000000000000e+03 8.910000000000000000e+02 6.870000000000000000e+02 5.000000000000000000e+02 3.680000000000000000e+02 2.480000000000000000e+02 1.390000000000000000e+02 9.300000000000000000e+01 5.000000000000000000e+01 2.600000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 5.900000000000000000e+01 9.300000000000000000e+01 9.900000000000000000e+01 9.800000000000000000e+01 1.880000000000000000e+02 2.380000000000000000e+02 5.270000000000000000e+02 7.380000000000000000e+02 1.067000000000000000e+03 1.389000000000000000e+03 1.468000000000000000e+03 1.193000000000000000e+03 9.130000000000000000e+02 6.410000000000000000e+02 4.990000000000000000e+02 3.470000000000000000e+02 2.540000000000000000e+02 1.610000000000000000e+02 9.600000000000000000e+01 4.900000000000000000e+01 3.000000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.400000000000000000e+01 5.700000000000000000e+01 6.900000000000000000e+01 1.200000000000000000e+02 1.290000000000000000e+02 1.730000000000000000e+02 2.890000000000000000e+02 5.680000000000000000e+02 8.320000000000000000e+02 1.190000000000000000e+03 1.452000000000000000e+03 1.403000000000000000e+03 1.224000000000000000e+03 8.500000000000000000e+02 6.160000000000000000e+02 5.270000000000000000e+02 3.480000000000000000e+02 3.050000000000000000e+02 1.920000000000000000e+02 1.010000000000000000e+02 4.800000000000000000e+01 3.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.300000000000000000e+01 5.100000000000000000e+01 5.600000000000000000e+01 8.400000000000000000e+01 1.270000000000000000e+02 1.400000000000000000e+02 2.080000000000000000e+02 3.850000000000000000e+02 6.500000000000000000e+02 9.200000000000000000e+02 1.255000000000000000e+03 1.430000000000000000e+03 1.366000000000000000e+03 1.122000000000000000e+03 8.470000000000000000e+02 6.330000000000000000e+02 5.170000000000000000e+02 4.060000000000000000e+02 2.840000000000000000e+02 2.170000000000000000e+02 1.360000000000000000e+02 6.400000000000000000e+01 5.900000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 4.300000000000000000e+01 8.900000000000000000e+01 1.000000000000000000e+02 1.420000000000000000e+02 1.590000000000000000e+02 2.370000000000000000e+02 4.470000000000000000e+02 6.790000000000000000e+02 9.740000000000000000e+02 1.320000000000000000e+03 1.421000000000000000e+03 1.347000000000000000e+03 1.166000000000000000e+03 8.500000000000000000e+02 6.640000000000000000e+02 4.910000000000000000e+02 3.980000000000000000e+02 3.230000000000000000e+02 2.170000000000000000e+02 1.550000000000000000e+02 8.400000000000000000e+01 3.800000000000000000e+01 4.000000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 4.300000000000000000e+01 8.200000000000000000e+01 1.210000000000000000e+02 1.560000000000000000e+02 1.630000000000000000e+02 2.920000000000000000e+02 5.380000000000000000e+02 7.610000000000000000e+02 1.062000000000000000e+03 1.347000000000000000e+03 1.462000000000000000e+03 1.268000000000000000e+03 1.075000000000000000e+03 8.790000000000000000e+02 6.270000000000000000e+02 5.730000000000000000e+02 4.610000000000000000e+02 3.360000000000000000e+02 2.370000000000000000e+02 1.490000000000000000e+02 9.400000000000000000e+01 6.100000000000000000e+01 4.100000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.100000000000000000e+01 6.500000000000000000e+01 8.400000000000000000e+01 1.090000000000000000e+02 1.590000000000000000e+02 1.970000000000000000e+02 3.750000000000000000e+02 5.540000000000000000e+02 8.090000000000000000e+02 1.131000000000000000e+03 1.444000000000000000e+03 1.461000000000000000e+03 1.259000000000000000e+03 1.030000000000000000e+03 8.450000000000000000e+02 6.980000000000000000e+02 5.160000000000000000e+02 4.450000000000000000e+02 3.410000000000000000e+02 2.440000000000000000e+02 1.730000000000000000e+02 1.050000000000000000e+02 6.200000000000000000e+01 6.000000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 4.000000000000000000e+01 7.700000000000000000e+01 1.060000000000000000e+02 1.220000000000000000e+02 1.810000000000000000e+02 2.310000000000000000e+02 4.530000000000000000e+02 6.310000000000000000e+02 9.060000000000000000e+02 1.224000000000000000e+03 1.453000000000000000e+03 1.407000000000000000e+03 1.232000000000000000e+03 9.830000000000000000e+02 8.350000000000000000e+02 6.780000000000000000e+02 5.670000000000000000e+02 4.980000000000000000e+02 3.430000000000000000e+02 2.790000000000000000e+02 1.590000000000000000e+02 1.370000000000000000e+02 8.000000000000000000e+01 6.800000000000000000e+01 4.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.100000000000000000e+01 4.700000000000000000e+01 8.400000000000000000e+01 1.030000000000000000e+02 1.310000000000000000e+02 1.910000000000000000e+02 2.560000000000000000e+02 5.390000000000000000e+02 7.290000000000000000e+02 1.000000000000000000e+03 1.337000000000000000e+03 1.508000000000000000e+03 1.397000000000000000e+03 1.234000000000000000e+03 1.068000000000000000e+03 9.490000000000000000e+02 7.700000000000000000e+02 5.730000000000000000e+02 5.110000000000000000e+02 3.940000000000000000e+02 2.710000000000000000e+02 2.460000000000000000e+02 1.660000000000000000e+02 1.260000000000000000e+02 6.500000000000000000e+01 5.100000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.100000000000000000e+01 6.300000000000000000e+01 1.090000000000000000e+02 1.300000000000000000e+02 1.770000000000000000e+02 2.170000000000000000e+02 3.650000000000000000e+02 5.840000000000000000e+02 7.690000000000000000e+02 1.129000000000000000e+03 1.391000000000000000e+03 1.472000000000000000e+03 1.424000000000000000e+03 1.310000000000000000e+03 1.086000000000000000e+03 9.610000000000000000e+02 7.240000000000000000e+02 6.710000000000000000e+02 5.460000000000000000e+02 4.320000000000000000e+02 2.940000000000000000e+02 3.140000000000000000e+02 1.980000000000000000e+02 1.140000000000000000e+02 6.200000000000000000e+01 5.200000000000000000e+01 3.800000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 4.500000000000000000e+01 8.200000000000000000e+01 1.090000000000000000e+02 1.550000000000000000e+02 1.640000000000000000e+02 2.470000000000000000e+02 4.090000000000000000e+02 6.180000000000000000e+02 7.990000000000000000e+02 1.158000000000000000e+03 1.480000000000000000e+03 1.530000000000000000e+03 1.395000000000000000e+03 1.345000000000000000e+03 1.129000000000000000e+03 9.700000000000000000e+02 8.120000000000000000e+02 6.910000000000000000e+02 5.780000000000000000e+02 4.010000000000000000e+02 3.950000000000000000e+02 2.720000000000000000e+02 2.150000000000000000e+02 1.350000000000000000e+02 9.300000000000000000e+01 5.300000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 5.700000000000000000e+01 7.600000000000000000e+01 1.220000000000000000e+02 1.690000000000000000e+02 1.860000000000000000e+02 2.860000000000000000e+02 4.540000000000000000e+02 7.000000000000000000e+02 9.240000000000000000e+02 1.195000000000000000e+03 1.555000000000000000e+03 1.573000000000000000e+03 1.471000000000000000e+03 1.361000000000000000e+03 1.152000000000000000e+03 1.010000000000000000e+03 8.500000000000000000e+02 7.990000000000000000e+02 4.850000000000000000e+02 4.450000000000000000e+02 4.450000000000000000e+02 2.910000000000000000e+02 2.450000000000000000e+02 1.750000000000000000e+02 1.130000000000000000e+02 6.900000000000000000e+01 3.300000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 2.700000000000000000e+01 3.900000000000000000e+01 5.300000000000000000e+01 8.300000000000000000e+01 1.310000000000000000e+02 1.570000000000000000e+02 2.460000000000000000e+02 3.370000000000000000e+02 5.300000000000000000e+02 7.650000000000000000e+02 1.041000000000000000e+03 1.294000000000000000e+03 1.544000000000000000e+03 1.618000000000000000e+03 1.550000000000000000e+03 1.380000000000000000e+03 1.215000000000000000e+03 1.020000000000000000e+03 9.000000000000000000e+02 7.180000000000000000e+02 5.960000000000000000e+02 5.810000000000000000e+02 4.410000000000000000e+02 3.360000000000000000e+02 2.370000000000000000e+02 1.870000000000000000e+02 1.340000000000000000e+02 7.000000000000000000e+01 4.800000000000000000e+01 3.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.600000000000000000e+01 3.400000000000000000e+01 6.300000000000000000e+01 1.000000000000000000e+02 1.190000000000000000e+02 1.640000000000000000e+02 2.340000000000000000e+02 4.200000000000000000e+02 5.840000000000000000e+02 8.640000000000000000e+02 1.077000000000000000e+03 1.425000000000000000e+03 1.616000000000000000e+03 1.664000000000000000e+03 1.562000000000000000e+03 1.442000000000000000e+03 1.297000000000000000e+03 1.157000000000000000e+03 9.530000000000000000e+02 6.800000000000000000e+02 7.310000000000000000e+02 5.940000000000000000e+02 4.760000000000000000e+02 3.630000000000000000e+02 2.670000000000000000e+02 1.880000000000000000e+02 1.280000000000000000e+02 9.300000000000000000e+01 5.700000000000000000e+01 4.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.000000000000000000e+01 3.500000000000000000e+01 6.700000000000000000e+01 1.220000000000000000e+02 1.540000000000000000e+02 1.920000000000000000e+02 2.890000000000000000e+02 4.280000000000000000e+02 6.370000000000000000e+02 8.720000000000000000e+02 1.124000000000000000e+03 1.518000000000000000e+03 1.648000000000000000e+03 1.740000000000000000e+03 1.664000000000000000e+03 1.545000000000000000e+03 1.376000000000000000e+03 1.240000000000000000e+03 7.420000000000000000e+02 8.540000000000000000e+02 7.680000000000000000e+02 6.240000000000000000e+02 5.170000000000000000e+02 4.130000000000000000e+02 2.710000000000000000e+02 2.230000000000000000e+02 1.580000000000000000e+02 7.100000000000000000e+01 4.600000000000000000e+01 4.200000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.300000000000000000e+01 4.800000000000000000e+01 8.900000000000000000e+01 1.100000000000000000e+02 1.720000000000000000e+02 2.010000000000000000e+02 3.510000000000000000e+02 5.880000000000000000e+02 7.260000000000000000e+02 9.910000000000000000e+02 1.257000000000000000e+03 1.646000000000000000e+03 1.744000000000000000e+03 1.777000000000000000e+03 1.723000000000000000e+03 1.588000000000000000e+03 1.524000000000000000e+03 1.157000000000000000e+03 9.550000000000000000e+02 9.580000000000000000e+02 8.350000000000000000e+02 7.080000000000000000e+02 4.950000000000000000e+02 4.500000000000000000e+02 3.010000000000000000e+02 2.480000000000000000e+02 1.580000000000000000e+02 8.600000000000000000e+01 4.300000000000000000e+01 4.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 2.600000000000000000e+01 3.500000000000000000e+01 7.900000000000000000e+01 1.000000000000000000e+02 1.360000000000000000e+02 1.890000000000000000e+02 2.610000000000000000e+02 4.160000000000000000e+02 5.530000000000000000e+02 8.390000000000000000e+02 9.750000000000000000e+02 1.320000000000000000e+03 1.589000000000000000e+03 1.898000000000000000e+03 1.818000000000000000e+03 1.756000000000000000e+03 1.713000000000000000e+03 1.494000000000000000e+03 1.208000000000000000e+03 1.145000000000000000e+03 1.018000000000000000e+03 8.290000000000000000e+02 6.580000000000000000e+02 5.480000000000000000e+02 4.370000000000000000e+02 3.380000000000000000e+02 2.460000000000000000e+02 1.540000000000000000e+02 1.010000000000000000e+02 7.700000000000000000e+01 3.600000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 2.900000000000000000e+01 2.800000000000000000e+01 3.600000000000000000e+01 6.700000000000000000e+01 9.600000000000000000e+01 1.580000000000000000e+02 1.840000000000000000e+02 2.870000000000000000e+02 4.540000000000000000e+02 6.250000000000000000e+02 9.440000000000000000e+02 1.142000000000000000e+03 1.434000000000000000e+03 1.776000000000000000e+03 1.965000000000000000e+03 1.936000000000000000e+03 1.903000000000000000e+03 1.707000000000000000e+03 1.333000000000000000e+03 1.346000000000000000e+03 1.275000000000000000e+03 1.021000000000000000e+03 8.860000000000000000e+02 6.780000000000000000e+02 5.630000000000000000e+02 4.480000000000000000e+02 3.380000000000000000e+02 2.480000000000000000e+02 1.550000000000000000e+02 9.200000000000000000e+01 7.200000000000000000e+01 2.600000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 4.300000000000000000e+01 6.000000000000000000e+01 9.100000000000000000e+01 1.200000000000000000e+02 1.620000000000000000e+02 1.970000000000000000e+02 3.340000000000000000e+02 4.780000000000000000e+02 7.280000000000000000e+02 9.440000000000000000e+02 1.207000000000000000e+03 1.440000000000000000e+03 1.790000000000000000e+03 1.978000000000000000e+03 1.957000000000000000e+03 2.001000000000000000e+03 1.563000000000000000e+03 1.594000000000000000e+03 1.585000000000000000e+03 1.283000000000000000e+03 1.130000000000000000e+03 8.690000000000000000e+02 7.120000000000000000e+02 5.940000000000000000e+02 4.350000000000000000e+02 3.670000000000000000e+02 2.890000000000000000e+02 1.700000000000000000e+02 1.260000000000000000e+02 6.800000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan nan 3.600000000000000000e+01 6.000000000000000000e+01 1.030000000000000000e+02 1.400000000000000000e+02 1.890000000000000000e+02 2.320000000000000000e+02 3.600000000000000000e+02 5.810000000000000000e+02 7.770000000000000000e+02 1.044000000000000000e+03 1.382000000000000000e+03 1.623000000000000000e+03 1.853000000000000000e+03 1.973000000000000000e+03 2.141000000000000000e+03 1.906000000000000000e+03 1.716000000000000000e+03 1.787000000000000000e+03 1.632000000000000000e+03 1.275000000000000000e+03 1.200000000000000000e+03 9.800000000000000000e+02 7.510000000000000000e+02 5.730000000000000000e+02 4.730000000000000000e+02 3.650000000000000000e+02 2.490000000000000000e+02 1.720000000000000000e+02 1.040000000000000000e+02 6.500000000000000000e+01 4.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.500000000000000000e+01 3.200000000000000000e+01 5.200000000000000000e+01 8.800000000000000000e+01 1.180000000000000000e+02 1.510000000000000000e+02 1.890000000000000000e+02 2.810000000000000000e+02 4.060000000000000000e+02 6.090000000000000000e+02 7.870000000000000000e+02 1.114000000000000000e+03 1.322000000000000000e+03 1.636000000000000000e+03 1.975000000000000000e+03 2.265000000000000000e+03 2.091000000000000000e+03 1.959000000000000000e+03 1.949000000000000000e+03 1.799000000000000000e+03 1.572000000000000000e+03 1.350000000000000000e+03 1.140000000000000000e+03 9.860000000000000000e+02 7.820000000000000000e+02 5.910000000000000000e+02 4.600000000000000000e+02 3.550000000000000000e+02 2.360000000000000000e+02 1.280000000000000000e+02 1.000000000000000000e+02 6.900000000000000000e+01 5.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 nan 3.300000000000000000e+01 3.800000000000000000e+01 6.400000000000000000e+01 7.700000000000000000e+01 1.140000000000000000e+02 1.600000000000000000e+02 2.180000000000000000e+02 2.780000000000000000e+02 3.840000000000000000e+02 6.500000000000000000e+02 8.710000000000000000e+02 1.184000000000000000e+03 1.454000000000000000e+03 1.732000000000000000e+03 2.066000000000000000e+03 2.150000000000000000e+03 2.037000000000000000e+03 2.028000000000000000e+03 1.945000000000000000e+03 1.901000000000000000e+03 1.615000000000000000e+03 1.381000000000000000e+03 1.178000000000000000e+03 9.470000000000000000e+02 7.640000000000000000e+02 6.190000000000000000e+02 4.590000000000000000e+02 3.430000000000000000e+02 2.560000000000000000e+02 1.520000000000000000e+02 1.020000000000000000e+02 4.900000000000000000e+01 4.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 2.500000000000000000e+01 4.000000000000000000e+01 4.600000000000000000e+01 6.900000000000000000e+01 1.040000000000000000e+02 1.370000000000000000e+02 1.560000000000000000e+02 2.350000000000000000e+02 3.210000000000000000e+02 5.020000000000000000e+02 6.760000000000000000e+02 9.150000000000000000e+02 1.239000000000000000e+03 1.503000000000000000e+03 1.801000000000000000e+03 2.093000000000000000e+03 2.002000000000000000e+03 2.244000000000000000e+03 2.134000000000000000e+03 2.068000000000000000e+03 1.875000000000000000e+03 1.636000000000000000e+03 1.462000000000000000e+03 1.176000000000000000e+03 1.020000000000000000e+03 7.730000000000000000e+02 5.810000000000000000e+02 4.740000000000000000e+02 3.560000000000000000e+02 2.210000000000000000e+02 1.490000000000000000e+02 9.700000000000000000e+01 5.500000000000000000e+01 4.000000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 2.700000000000000000e+01 4.100000000000000000e+01 3.500000000000000000e+01 4.400000000000000000e+01 5.200000000000000000e+01 1.010000000000000000e+02 1.330000000000000000e+02 1.950000000000000000e+02 2.470000000000000000e+02 3.290000000000000000e+02 5.060000000000000000e+02 7.530000000000000000e+02 9.950000000000000000e+02 1.300000000000000000e+03 1.496000000000000000e+03 1.871000000000000000e+03 1.852000000000000000e+03 2.173000000000000000e+03 2.204000000000000000e+03 2.161000000000000000e+03 2.025000000000000000e+03 1.860000000000000000e+03 1.617000000000000000e+03 1.464000000000000000e+03 1.186000000000000000e+03 9.920000000000000000e+02 7.500000000000000000e+02 5.660000000000000000e+02 4.710000000000000000e+02 2.990000000000000000e+02 2.030000000000000000e+02 1.360000000000000000e+02 7.700000000000000000e+01 4.100000000000000000e+01 2.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.300000000000000000e+01 4.300000000000000000e+01 4.500000000000000000e+01 6.000000000000000000e+01 6.800000000000000000e+01 9.600000000000000000e+01 1.760000000000000000e+02 1.820000000000000000e+02 2.640000000000000000e+02 3.500000000000000000e+02 5.690000000000000000e+02 7.880000000000000000e+02 1.068000000000000000e+03 1.338000000000000000e+03 1.549000000000000000e+03 1.676000000000000000e+03 1.994000000000000000e+03 2.068000000000000000e+03 2.309000000000000000e+03 2.172000000000000000e+03 2.048000000000000000e+03 1.908000000000000000e+03 1.617000000000000000e+03 1.375000000000000000e+03 1.150000000000000000e+03 8.960000000000000000e+02 7.110000000000000000e+02 5.370000000000000000e+02 4.460000000000000000e+02 3.470000000000000000e+02 1.980000000000000000e+02 1.190000000000000000e+02 5.900000000000000000e+01 3.600000000000000000e+01 2.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 2.600000000000000000e+01 2.700000000000000000e+01 2.700000000000000000e+01 6.000000000000000000e+01 5.400000000000000000e+01 8.800000000000000000e+01 1.190000000000000000e+02 1.460000000000000000e+02 2.140000000000000000e+02 2.770000000000000000e+02 4.090000000000000000e+02 5.740000000000000000e+02 8.300000000000000000e+02 1.100000000000000000e+03 1.269000000000000000e+03 1.556000000000000000e+03 1.780000000000000000e+03 1.972000000000000000e+03 2.081000000000000000e+03 2.270000000000000000e+03 2.272000000000000000e+03 2.051000000000000000e+03 1.908000000000000000e+03 1.595000000000000000e+03 1.358000000000000000e+03 1.119000000000000000e+03 8.750000000000000000e+02 6.840000000000000000e+02 5.340000000000000000e+02 4.000000000000000000e+02 3.020000000000000000e+02 1.640000000000000000e+02 1.150000000000000000e+02 5.000000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 3.700000000000000000e+01 4.400000000000000000e+01 4.900000000000000000e+01 7.900000000000000000e+01 8.500000000000000000e+01 1.170000000000000000e+02 1.630000000000000000e+02 2.130000000000000000e+02 3.220000000000000000e+02 4.050000000000000000e+02 6.030000000000000000e+02 8.600000000000000000e+02 1.084000000000000000e+03 1.331000000000000000e+03 1.566000000000000000e+03 1.717000000000000000e+03 1.897000000000000000e+03 2.003000000000000000e+03 2.291000000000000000e+03 2.239000000000000000e+03 2.142000000000000000e+03 1.899000000000000000e+03 1.608000000000000000e+03 1.297000000000000000e+03 1.158000000000000000e+03 8.270000000000000000e+02 6.690000000000000000e+02 5.410000000000000000e+02 3.450000000000000000e+02 2.600000000000000000e+02 1.520000000000000000e+02 9.100000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.500000000000000000e+01 4.200000000000000000e+01 4.200000000000000000e+01 5.000000000000000000e+01 7.500000000000000000e+01 1.100000000000000000e+02 1.280000000000000000e+02 1.720000000000000000e+02 2.100000000000000000e+02 3.040000000000000000e+02 4.110000000000000000e+02 5.930000000000000000e+02 8.450000000000000000e+02 1.071000000000000000e+03 1.293000000000000000e+03 1.517000000000000000e+03 1.657000000000000000e+03 1.817000000000000000e+03 2.061000000000000000e+03 2.173000000000000000e+03 2.229000000000000000e+03 2.048000000000000000e+03 1.871000000000000000e+03 1.666000000000000000e+03 1.321000000000000000e+03 1.055000000000000000e+03 8.390000000000000000e+02 6.270000000000000000e+02 4.400000000000000000e+02 3.420000000000000000e+02 2.230000000000000000e+02 1.240000000000000000e+02 7.800000000000000000e+01 3.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.800000000000000000e+01 4.500000000000000000e+01 4.700000000000000000e+01 5.500000000000000000e+01 6.200000000000000000e+01 1.060000000000000000e+02 1.240000000000000000e+02 1.480000000000000000e+02 2.290000000000000000e+02 2.910000000000000000e+02 4.090000000000000000e+02 6.230000000000000000e+02 8.520000000000000000e+02 1.018000000000000000e+03 1.366000000000000000e+03 1.468000000000000000e+03 1.656000000000000000e+03 1.924000000000000000e+03 2.029000000000000000e+03 2.197000000000000000e+03 2.295000000000000000e+03 2.066000000000000000e+03 1.765000000000000000e+03 1.587000000000000000e+03 1.233000000000000000e+03 9.920000000000000000e+02 7.820000000000000000e+02 5.760000000000000000e+02 3.960000000000000000e+02 3.150000000000000000e+02 1.810000000000000000e+02 1.030000000000000000e+02 5.500000000000000000e+01 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.500000000000000000e+01 4.000000000000000000e+01 5.200000000000000000e+01 6.300000000000000000e+01 7.800000000000000000e+01 1.300000000000000000e+02 1.430000000000000000e+02 1.760000000000000000e+02 2.570000000000000000e+02 3.370000000000000000e+02 4.260000000000000000e+02 6.240000000000000000e+02 8.230000000000000000e+02 1.076000000000000000e+03 1.183000000000000000e+03 1.384000000000000000e+03 1.531000000000000000e+03 1.863000000000000000e+03 1.966000000000000000e+03 2.116000000000000000e+03 2.218000000000000000e+03 2.022000000000000000e+03 1.794000000000000000e+03 1.510000000000000000e+03 1.172000000000000000e+03 9.460000000000000000e+02 7.190000000000000000e+02 5.440000000000000000e+02 3.560000000000000000e+02 2.260000000000000000e+02 1.300000000000000000e+02 9.300000000000000000e+01 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.300000000000000000e+01 4.100000000000000000e+01 4.000000000000000000e+01 4.500000000000000000e+01 5.600000000000000000e+01 8.800000000000000000e+01 1.170000000000000000e+02 1.750000000000000000e+02 1.790000000000000000e+02 2.050000000000000000e+02 3.120000000000000000e+02 4.500000000000000000e+02 6.110000000000000000e+02 8.410000000000000000e+02 1.096000000000000000e+03 1.177000000000000000e+03 1.411000000000000000e+03 1.650000000000000000e+03 1.832000000000000000e+03 2.039000000000000000e+03 2.074000000000000000e+03 2.106000000000000000e+03 1.964000000000000000e+03 1.725000000000000000e+03 1.446000000000000000e+03 1.187000000000000000e+03 8.780000000000000000e+02 6.180000000000000000e+02 4.340000000000000000e+02 2.560000000000000000e+02 1.800000000000000000e+02 9.600000000000000000e+01 5.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 2.900000000000000000e+01 4.900000000000000000e+01 4.900000000000000000e+01 5.400000000000000000e+01 5.200000000000000000e+01 1.050000000000000000e+02 1.170000000000000000e+02 1.480000000000000000e+02 1.990000000000000000e+02 2.400000000000000000e+02 3.210000000000000000e+02 4.040000000000000000e+02 5.480000000000000000e+02 8.270000000000000000e+02 8.890000000000000000e+02 1.136000000000000000e+03 1.418000000000000000e+03 1.622000000000000000e+03 1.716000000000000000e+03 1.928000000000000000e+03 2.036000000000000000e+03 2.076000000000000000e+03 1.949000000000000000e+03 1.638000000000000000e+03 1.442000000000000000e+03 1.011000000000000000e+03 7.590000000000000000e+02 5.600000000000000000e+02 3.920000000000000000e+02 2.220000000000000000e+02 1.370000000000000000e+02 8.200000000000000000e+01 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 2.900000000000000000e+01 4.200000000000000000e+01 4.300000000000000000e+01 5.300000000000000000e+01 6.800000000000000000e+01 8.100000000000000000e+01 1.170000000000000000e+02 1.460000000000000000e+02 1.970000000000000000e+02 2.220000000000000000e+02 2.910000000000000000e+02 4.140000000000000000e+02 5.720000000000000000e+02 7.290000000000000000e+02 9.580000000000000000e+02 1.178000000000000000e+03 1.309000000000000000e+03 1.524000000000000000e+03 1.715000000000000000e+03 1.857000000000000000e+03 1.985000000000000000e+03 2.004000000000000000e+03 1.816000000000000000e+03 1.582000000000000000e+03 1.221000000000000000e+03 9.640000000000000000e+02 6.370000000000000000e+02 4.790000000000000000e+02 2.700000000000000000e+02 1.560000000000000000e+02 1.230000000000000000e+02 5.200000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 nan 4.300000000000000000e+01 3.100000000000000000e+01 5.800000000000000000e+01 6.400000000000000000e+01 7.700000000000000000e+01 1.030000000000000000e+02 1.040000000000000000e+02 1.580000000000000000e+02 1.900000000000000000e+02 2.400000000000000000e+02 3.580000000000000000e+02 3.940000000000000000e+02 5.050000000000000000e+02 6.980000000000000000e+02 8.750000000000000000e+02 1.044000000000000000e+03 1.314000000000000000e+03 1.531000000000000000e+03 1.627000000000000000e+03 1.755000000000000000e+03 1.937000000000000000e+03 1.869000000000000000e+03 1.657000000000000000e+03 1.393000000000000000e+03 1.070000000000000000e+03 8.400000000000000000e+02 5.730000000000000000e+02 3.870000000000000000e+02 2.270000000000000000e+02 1.330000000000000000e+02 6.600000000000000000e+01 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.900000000000000000e+01 3.600000000000000000e+01 4.800000000000000000e+01 5.900000000000000000e+01 6.600000000000000000e+01 8.800000000000000000e+01 1.190000000000000000e+02 1.530000000000000000e+02 1.770000000000000000e+02 2.390000000000000000e+02 3.130000000000000000e+02 3.770000000000000000e+02 5.080000000000000000e+02 7.110000000000000000e+02 8.610000000000000000e+02 1.020000000000000000e+03 1.179000000000000000e+03 1.379000000000000000e+03 1.541000000000000000e+03 1.696000000000000000e+03 1.867000000000000000e+03 1.754000000000000000e+03 1.589000000000000000e+03 1.244000000000000000e+03 9.530000000000000000e+02 6.910000000000000000e+02 4.550000000000000000e+02 3.100000000000000000e+02 1.890000000000000000e+02 8.700000000000000000e+01 5.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 nan 2.500000000000000000e+01 3.900000000000000000e+01 4.800000000000000000e+01 5.300000000000000000e+01 6.800000000000000000e+01 9.400000000000000000e+01 1.150000000000000000e+02 1.170000000000000000e+02 1.690000000000000000e+02 2.190000000000000000e+02 3.070000000000000000e+02 3.740000000000000000e+02 4.600000000000000000e+02 5.910000000000000000e+02 8.070000000000000000e+02 9.870000000000000000e+02 1.134000000000000000e+03 1.268000000000000000e+03 1.492000000000000000e+03 1.606000000000000000e+03 1.711000000000000000e+03 1.580000000000000000e+03 1.408000000000000000e+03 1.134000000000000000e+03 7.990000000000000000e+02 5.730000000000000000e+02 3.560000000000000000e+02 2.430000000000000000e+02 1.350000000000000000e+02 5.800000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 2.700000000000000000e+01 3.900000000000000000e+01 5.700000000000000000e+01 6.000000000000000000e+01 6.900000000000000000e+01 7.300000000000000000e+01 8.700000000000000000e+01 1.220000000000000000e+02 1.350000000000000000e+02 1.550000000000000000e+02 2.300000000000000000e+02 2.770000000000000000e+02 3.630000000000000000e+02 4.310000000000000000e+02 5.820000000000000000e+02 7.320000000000000000e+02 8.680000000000000000e+02 1.026000000000000000e+03 1.212000000000000000e+03 1.332000000000000000e+03 1.468000000000000000e+03 1.563000000000000000e+03 1.482000000000000000e+03 1.234000000000000000e+03 9.620000000000000000e+02 6.450000000000000000e+02 4.540000000000000000e+02 2.670000000000000000e+02 1.590000000000000000e+02 8.500000000000000000e+01 5.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 3.400000000000000000e+01 4.900000000000000000e+01 4.300000000000000000e+01 5.100000000000000000e+01 7.300000000000000000e+01 8.000000000000000000e+01 1.240000000000000000e+02 1.330000000000000000e+02 1.570000000000000000e+02 2.170000000000000000e+02 2.960000000000000000e+02 3.440000000000000000e+02 4.060000000000000000e+02 5.290000000000000000e+02 6.840000000000000000e+02 7.910000000000000000e+02 9.540000000000000000e+02 1.103000000000000000e+03 1.252000000000000000e+03 1.354000000000000000e+03 1.369000000000000000e+03 1.295000000000000000e+03 1.008000000000000000e+03 7.590000000000000000e+02 5.570000000000000000e+02 3.170000000000000000e+02 1.960000000000000000e+02 1.070000000000000000e+02 5.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 3.800000000000000000e+01 3.200000000000000000e+01 3.800000000000000000e+01 5.400000000000000000e+01 6.700000000000000000e+01 8.600000000000000000e+01 1.060000000000000000e+02 1.330000000000000000e+02 1.510000000000000000e+02 2.060000000000000000e+02 2.560000000000000000e+02 3.140000000000000000e+02 3.890000000000000000e+02 4.850000000000000000e+02 5.880000000000000000e+02 7.130000000000000000e+02 8.640000000000000000e+02 1.048000000000000000e+03 1.160000000000000000e+03 1.172000000000000000e+03 1.213000000000000000e+03 1.093000000000000000e+03 8.660000000000000000e+02 6.180000000000000000e+02 4.200000000000000000e+02 2.250000000000000000e+02 1.550000000000000000e+02 8.300000000000000000e+01 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 3.300000000000000000e+01 3.100000000000000000e+01 4.300000000000000000e+01 4.000000000000000000e+01 6.200000000000000000e+01 6.500000000000000000e+01 7.900000000000000000e+01 1.020000000000000000e+02 1.260000000000000000e+02 1.680000000000000000e+02 1.840000000000000000e+02 2.420000000000000000e+02 3.080000000000000000e+02 3.750000000000000000e+02 4.620000000000000000e+02 5.090000000000000000e+02 5.770000000000000000e+02 7.870000000000000000e+02 9.190000000000000000e+02 9.610000000000000000e+02 1.090000000000000000e+03 1.032000000000000000e+03 8.960000000000000000e+02 7.650000000000000000e+02 4.880000000000000000e+02 3.040000000000000000e+02 2.210000000000000000e+02 1.090000000000000000e+02 4.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 3.300000000000000000e+01 3.500000000000000000e+01 3.300000000000000000e+01 4.800000000000000000e+01 5.400000000000000000e+01 6.300000000000000000e+01 9.200000000000000000e+01 1.130000000000000000e+02 1.090000000000000000e+02 1.420000000000000000e+02 1.830000000000000000e+02 2.360000000000000000e+02 2.940000000000000000e+02 3.280000000000000000e+02 3.580000000000000000e+02 4.670000000000000000e+02 5.870000000000000000e+02 6.910000000000000000e+02 7.990000000000000000e+02 8.810000000000000000e+02 9.210000000000000000e+02 8.740000000000000000e+02 7.570000000000000000e+02 5.730000000000000000e+02 3.930000000000000000e+02 2.120000000000000000e+02 1.410000000000000000e+02 6.100000000000000000e+01 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 3.400000000000000000e+01 nan 3.200000000000000000e+01 4.600000000000000000e+01 3.200000000000000000e+01 4.700000000000000000e+01 4.200000000000000000e+01 8.000000000000000000e+01 1.140000000000000000e+02 1.290000000000000000e+02 1.350000000000000000e+02 1.840000000000000000e+02 2.200000000000000000e+02 2.690000000000000000e+02 2.750000000000000000e+02 3.240000000000000000e+02 4.000000000000000000e+02 5.050000000000000000e+02 6.210000000000000000e+02 7.370000000000000000e+02 7.970000000000000000e+02 8.460000000000000000e+02 7.590000000000000000e+02 6.350000000000000000e+02 4.410000000000000000e+02 2.710000000000000000e+02 1.560000000000000000e+02 7.300000000000000000e+01 4.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 2.800000000000000000e+01 3.400000000000000000e+01 3.300000000000000000e+01 3.200000000000000000e+01 3.800000000000000000e+01 4.500000000000000000e+01 4.700000000000000000e+01 6.700000000000000000e+01 7.900000000000000000e+01 9.700000000000000000e+01 1.370000000000000000e+02 1.800000000000000000e+02 1.960000000000000000e+02 2.960000000000000000e+02 2.940000000000000000e+02 3.040000000000000000e+02 3.710000000000000000e+02 4.610000000000000000e+02 5.230000000000000000e+02 6.260000000000000000e+02 7.000000000000000000e+02 6.770000000000000000e+02 6.810000000000000000e+02 5.100000000000000000e+02 3.340000000000000000e+02 2.040000000000000000e+02 1.030000000000000000e+02 5.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.700000000000000000e+01 3.500000000000000000e+01 3.900000000000000000e+01 5.500000000000000000e+01 5.900000000000000000e+01 5.900000000000000000e+01 9.600000000000000000e+01 9.700000000000000000e+01 1.210000000000000000e+02 1.460000000000000000e+02 1.910000000000000000e+02 2.250000000000000000e+02 2.260000000000000000e+02 2.580000000000000000e+02 2.960000000000000000e+02 3.500000000000000000e+02 4.770000000000000000e+02 5.380000000000000000e+02 6.020000000000000000e+02 5.980000000000000000e+02 5.420000000000000000e+02 4.240000000000000000e+02 2.350000000000000000e+02 1.470000000000000000e+02 7.300000000000000000e+01 3.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 nan 2.800000000000000000e+01 3.500000000000000000e+01 3.100000000000000000e+01 6.000000000000000000e+01 6.600000000000000000e+01 9.500000000000000000e+01 9.100000000000000000e+01 1.190000000000000000e+02 1.420000000000000000e+02 1.670000000000000000e+02 2.220000000000000000e+02 2.330000000000000000e+02 1.940000000000000000e+02 2.430000000000000000e+02 2.800000000000000000e+02 3.830000000000000000e+02 4.800000000000000000e+02 5.120000000000000000e+02 5.220000000000000000e+02 4.070000000000000000e+02 3.300000000000000000e+02 1.910000000000000000e+02 1.020000000000000000e+02 6.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan nan 2.500000000000000000e+01 3.200000000000000000e+01 3.800000000000000000e+01 4.900000000000000000e+01 6.300000000000000000e+01 9.300000000000000000e+01 8.900000000000000000e+01 1.270000000000000000e+02 1.630000000000000000e+02 1.630000000000000000e+02 1.700000000000000000e+02 1.860000000000000000e+02 1.890000000000000000e+02 2.810000000000000000e+02 3.450000000000000000e+02 4.450000000000000000e+02 4.670000000000000000e+02 4.140000000000000000e+02 3.350000000000000000e+02 2.160000000000000000e+02 1.240000000000000000e+02 5.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 2.700000000000000000e+01 2.600000000000000000e+01 nan 2.600000000000000000e+01 nan 4.400000000000000000e+01 3.700000000000000000e+01 4.100000000000000000e+01 6.800000000000000000e+01 8.500000000000000000e+01 1.040000000000000000e+02 1.220000000000000000e+02 1.540000000000000000e+02 1.240000000000000000e+02 1.390000000000000000e+02 1.500000000000000000e+02 1.810000000000000000e+02 2.460000000000000000e+02 3.290000000000000000e+02 3.550000000000000000e+02 4.120000000000000000e+02 3.750000000000000000e+02 2.280000000000000000e+02 1.700000000000000000e+02 7.800000000000000000e+01 4.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 3.600000000000000000e+01 3.700000000000000000e+01 3.200000000000000000e+01 5.500000000000000000e+01 6.900000000000000000e+01 7.900000000000000000e+01 9.100000000000000000e+01 1.170000000000000000e+02 1.210000000000000000e+02 1.250000000000000000e+02 1.100000000000000000e+02 1.310000000000000000e+02 1.670000000000000000e+02 2.290000000000000000e+02 2.740000000000000000e+02 3.520000000000000000e+02 3.370000000000000000e+02 2.830000000000000000e+02 2.070000000000000000e+02 9.200000000000000000e+01 6.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 nan 3.300000000000000000e+01 3.600000000000000000e+01 3.600000000000000000e+01 3.500000000000000000e+01 5.500000000000000000e+01 7.100000000000000000e+01 9.000000000000000000e+01 9.000000000000000000e+01 8.500000000000000000e+01 1.060000000000000000e+02 1.050000000000000000e+02 1.060000000000000000e+02 1.390000000000000000e+02 1.920000000000000000e+02 2.520000000000000000e+02 2.760000000000000000e+02 3.000000000000000000e+02 2.160000000000000000e+02 1.180000000000000000e+02 6.600000000000000000e+01 4.100000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.700000000000000000e+01 4.900000000000000000e+01 6.000000000000000000e+01 6.400000000000000000e+01 7.500000000000000000e+01 7.200000000000000000e+01 7.200000000000000000e+01 7.600000000000000000e+01 5.600000000000000000e+01 9.300000000000000000e+01 1.200000000000000000e+02 1.790000000000000000e+02 2.460000000000000000e+02 2.820000000000000000e+02 2.600000000000000000e+02 1.600000000000000000e+02 8.800000000000000000e+01 3.900000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan nan nan 4.000000000000000000e+01 3.000000000000000000e+01 5.200000000000000000e+01 3.600000000000000000e+01 5.900000000000000000e+01 6.900000000000000000e+01 6.900000000000000000e+01 8.800000000000000000e+01 6.400000000000000000e+01 7.200000000000000000e+01 1.090000000000000000e+02 1.810000000000000000e+02 2.130000000000000000e+02 2.430000000000000000e+02 1.860000000000000000e+02 1.220000000000000000e+02 7.300000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.200000000000000000e+01 3.200000000000000000e+01 3.700000000000000000e+01 5.400000000000000000e+01 7.200000000000000000e+01 6.100000000000000000e+01 5.700000000000000000e+01 5.400000000000000000e+01 7.000000000000000000e+01 1.150000000000000000e+02 1.750000000000000000e+02 1.920000000000000000e+02 1.810000000000000000e+02 1.360000000000000000e+02 7.800000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 nan 2.900000000000000000e+01 5.200000000000000000e+01 5.800000000000000000e+01 5.100000000000000000e+01 5.900000000000000000e+01 3.400000000000000000e+01 3.400000000000000000e+01 6.100000000000000000e+01 1.180000000000000000e+02 1.800000000000000000e+02 1.880000000000000000e+02 1.560000000000000000e+02 9.700000000000000000e+01 3.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.100000000000000000e+01 5.200000000000000000e+01 3.400000000000000000e+01 4.100000000000000000e+01 4.600000000000000000e+01 3.400000000000000000e+01 5.100000000000000000e+01 6.200000000000000000e+01 1.330000000000000000e+02 1.610000000000000000e+02 1.290000000000000000e+02 1.070000000000000000e+02 5.600000000000000000e+01 2.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.800000000000000000e+01 3.600000000000000000e+01 3.900000000000000000e+01 2.900000000000000000e+01 2.500000000000000000e+01 nan 3.300000000000000000e+01 7.600000000000000000e+01 1.070000000000000000e+02 1.370000000000000000e+02 1.110000000000000000e+02 5.600000000000000000e+01 3.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.600000000000000000e+01 3.800000000000000000e+01 3.700000000000000000e+01 2.700000000000000000e+01 nan nan 3.500000000000000000e+01 7.000000000000000000e+01 1.190000000000000000e+02 1.340000000000000000e+02 7.200000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.500000000000000000e+01 nan 2.800000000000000000e+01 3.100000000000000000e+01 2.900000000000000000e+01 nan 2.600000000000000000e+01 4.800000000000000000e+01 8.500000000000000000e+01 1.070000000000000000e+02 1.170000000000000000e+02 6.400000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.700000000000000000e+01 nan nan nan nan 4.900000000000000000e+01 8.200000000000000000e+01 1.040000000000000000e+02 5.900000000000000000e+01 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 2.700000000000000000e+01 7.400000000000000000e+01 8.800000000000000000e+01 7.600000000000000000e+01 3.900000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.500000000000000000e+01 6.700000000000000000e+01 8.800000000000000000e+01 6.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 5.100000000000000000e+01 7.100000000000000000e+01 7.300000000000000000e+01 3.300000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 6.600000000000000000e+01 7.900000000000000000e+01 5.800000000000000000e+01 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 4.900000000000000000e+01 3.500000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 4.200000000000000000e+01 4.600000000000000000e+01 2.800000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 5.400000000000000000e+01 4.600000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.400000000000000000e+01 2.700000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 3.200000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 3.000000000000000000e+01 nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan +nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan diff --git a/data/hr__beta_lyr.png b/data/hr__beta_lyr.png new file mode 100644 index 0000000..298e1c6 Binary files /dev/null and b/data/hr__beta_lyr.png differ diff --git a/data/hr__cepheid.png b/data/hr__cepheid.png new file mode 100644 index 0000000..972586c Binary files /dev/null and b/data/hr__cepheid.png differ diff --git a/data/hr__cv.png b/data/hr__cv.png new file mode 100644 index 0000000..7894062 Binary files /dev/null and b/data/hr__cv.png differ diff --git a/data/hr__delta_scuti.png b/data/hr__delta_scuti.png new file mode 100644 index 0000000..74ecfb9 Binary files /dev/null and b/data/hr__delta_scuti.png differ diff --git a/data/hr__flaring.png b/data/hr__flaring.png new file mode 100644 index 0000000..085036f Binary files /dev/null and b/data/hr__flaring.png differ diff --git a/data/hr__lpv.png b/data/hr__lpv.png new file mode 100644 index 0000000..9d26297 Binary files /dev/null and b/data/hr__lpv.png differ diff --git a/data/hr__periodic.png b/data/hr__periodic.png new file mode 100644 index 0000000..95ba27b Binary files /dev/null and b/data/hr__periodic.png differ diff --git a/data/hr__rr_lyr.png b/data/hr__rr_lyr.png new file mode 100644 index 0000000..3f849eb Binary files /dev/null and b/data/hr__rr_lyr.png differ diff --git a/data/hr__variable.png b/data/hr__variable.png new file mode 100644 index 0000000..f51ad14 Binary files /dev/null and b/data/hr__variable.png differ diff --git a/data/hr__w_uma.png b/data/hr__w_uma.png new file mode 100644 index 0000000..7ed857a Binary files /dev/null and b/data/hr__w_uma.png differ diff --git a/data/mira.png b/data/mira.png new file mode 100644 index 0000000..e0243be Binary files /dev/null and b/data/mira.png differ diff --git a/data/period__beta_lyr.png b/data/period__beta_lyr.png new file mode 100644 index 0000000..77a9b55 Binary files /dev/null and b/data/period__beta_lyr.png differ diff --git a/data/period__cepheid.png b/data/period__cepheid.png new file mode 100644 index 0000000..915f44f Binary files /dev/null and b/data/period__cepheid.png differ diff --git a/data/period__cv.png b/data/period__cv.png new file mode 100644 index 0000000..52dfa31 Binary files /dev/null and b/data/period__cv.png differ diff --git a/data/period__delta_scuti.png b/data/period__delta_scuti.png new file mode 100644 index 0000000..24ef500 Binary files /dev/null and b/data/period__delta_scuti.png differ diff --git a/data/period__flaring.png b/data/period__flaring.png new file mode 100644 index 0000000..33ad84b Binary files /dev/null and b/data/period__flaring.png differ diff --git a/data/period__lpv.png b/data/period__lpv.png new file mode 100644 index 0000000..868c759 Binary files /dev/null and b/data/period__lpv.png differ diff --git a/data/period__periodic.png b/data/period__periodic.png new file mode 100644 index 0000000..72d12e5 Binary files /dev/null and b/data/period__periodic.png differ diff --git a/data/period__rr_lyr.png b/data/period__rr_lyr.png new file mode 100644 index 0000000..dfc7a92 Binary files /dev/null and b/data/period__rr_lyr.png differ diff --git a/data/period__variable.png b/data/period__variable.png new file mode 100644 index 0000000..c953591 Binary files /dev/null and b/data/period__variable.png differ diff --git a/data/period__w_uma.png b/data/period__w_uma.png new file mode 100644 index 0000000..cf373aa Binary files /dev/null and b/data/period__w_uma.png differ diff --git a/data/periodic.png b/data/periodic.png new file mode 100644 index 0000000..9786ba9 Binary files /dev/null and b/data/periodic.png differ diff --git a/data/radec__beta_lyr.png b/data/radec__beta_lyr.png new file mode 100644 index 0000000..795a17e Binary files /dev/null and b/data/radec__beta_lyr.png differ diff --git a/data/radec__cepheid.png b/data/radec__cepheid.png new file mode 100644 index 0000000..e7c1085 Binary files /dev/null and b/data/radec__cepheid.png differ diff --git a/data/radec__cv.png b/data/radec__cv.png new file mode 100644 index 0000000..43b210b Binary files /dev/null and b/data/radec__cv.png differ diff --git a/data/radec__delta_scuti.png b/data/radec__delta_scuti.png new file mode 100644 index 0000000..d6f6e0c Binary files /dev/null and b/data/radec__delta_scuti.png differ diff --git a/data/radec__flaring.png b/data/radec__flaring.png new file mode 100644 index 0000000..44f78be Binary files /dev/null and b/data/radec__flaring.png differ diff --git a/data/radec__lpv.png b/data/radec__lpv.png new file mode 100644 index 0000000..3b6faba Binary files /dev/null and b/data/radec__lpv.png differ diff --git a/data/radec__periodic.png b/data/radec__periodic.png new file mode 100644 index 0000000..7889a70 Binary files /dev/null and b/data/radec__periodic.png differ diff --git a/data/radec__rr_lyr.png b/data/radec__rr_lyr.png new file mode 100644 index 0000000..7d1d1f2 Binary files /dev/null and b/data/radec__rr_lyr.png differ diff --git a/data/radec__variable.png b/data/radec__variable.png new file mode 100644 index 0000000..181679e Binary files /dev/null and b/data/radec__variable.png differ diff --git a/data/radec__w_uma.png b/data/radec__w_uma.png new file mode 100644 index 0000000..fac7ed7 Binary files /dev/null and b/data/radec__w_uma.png differ diff --git a/data/rr_lyr_ab.png b/data/rr_lyr_ab.png new file mode 100644 index 0000000..eb17d25 Binary files /dev/null and b/data/rr_lyr_ab.png differ diff --git a/data/rr_lyr_c.png b/data/rr_lyr_c.png new file mode 100644 index 0000000..07cdabd Binary files /dev/null and b/data/rr_lyr_c.png differ diff --git a/data/srv.png b/data/srv.png new file mode 100644 index 0000000..b2bf875 Binary files /dev/null and b/data/srv.png differ diff --git a/data/variable.png b/data/variable.png new file mode 100644 index 0000000..59ea3b5 Binary files /dev/null and b/data/variable.png differ diff --git a/data/w_uma.png b/data/w_uma.png new file mode 100644 index 0000000..be08303 Binary files /dev/null and b/data/w_uma.png differ diff --git a/developer.html b/developer.html new file mode 100644 index 0000000..9a2111b --- /dev/null +++ b/developer.html @@ -0,0 +1,441 @@ + + + + + + + Installation/Developer Guidelines + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Installation/Developer Guidelines

+
+

Initial steps

+
    +
  • Create your own fork the scope repository by clicking the “fork” button. Then, decide whether you would like to use HTTPS (easier for beginners) or SSH.

  • +
  • Following one set of instructions below, clone (download) your copy of the repository, and set up a remote called upstream that points to the main scope repository.

  • +
+
+

HTTPS:

+
git clone https://github.com/<yourname>/scope.git && cd scope
+git remote add upstream https://github.com/ZwickyTransientFacility/scope.git
+
+
+
+
+

SSH:

+ +
git clone git@github.com:<yourname>/scope.git && cd scope
+git remote add upstream git@github.com:ZwickyTransientFacility/scope.git
+
+
+
+
+
+

Setting up your environment (Windows/Linux/macOS)

+
+

Use a package manager for installation

+

We currently recommend running scope with Python 3.10. You may want to begin your installation by creating/activating a virtual environment, for example using conda. We specifically recommend installing miniforge3 (https://github.com/conda-forge/miniforge).

+

Once you have a package manager installed, run:

+
conda create -n scope-env -c conda-forge python=3.10 healpy
+conda activate scope-env
+
+
+
+
+

Update your PYTHONPATH

+

Ensure that Python can import from scope by modifying the PYTHONPATH environment variable. Use a simple text editor like nano to modify the appropriate file (depending on which shell you are using). For example, if using bash, run nano ~/.bash_profile and add the following line:

+
export PYTHONPATH="$PYTHONPATH:$HOME/scope"
+
+
+

Save the updated file (Ctrl+O in nano) and close/reopen your terminal for this change to be recognized. Then cd back into scope and activate your scope-env again.

+
+
+

Install pre-commit

+

We use black to format the code and flake8 to verify that code complies with PEP8. +Please install our pre-commit hook as follows:

+
pip install pre-commit
+pre-commit install
+
+
+

This will check your changes before each commit to ensure that they +conform with our code style standards. We use black to reformat Python +code.

+

The pre-commit hook will lint changes made to the source.

+
+
+
+

Instructions for macOS (ARM64/Apple Silicon only)

+

Skip to the next section if using Windows/Linux or macOS (AMD64/Intel).

+
+

Install tensorflow for macOS/Apple Silicon

+

You will need to install the correct version of tensorflow for the ARM64 architecture used by Macs with Apple Silicon. Apple provides an effective version here: https://developer.apple.com/metal/tensorflow-plugin/.

+

To install tensorflow for macOS (including a version that runs on GPUs), run:

+
pip install tensorflow-macos
+pip install tensorflow-metal
+
+
+
+
+

Modify remaining requirements

+

After successfully installing tensorflow-deps, tensorflow-macos, tensorflow-metal, modify the remaining software requirements before installing anything else. Overwrite the .requirements/dev.txt file with the updated requirements from .requirements/dev-M1.txt by running the following from the scope directory:

+
cp -f .requirements/dev-M1.txt .requirements/dev.txt
+
+
+

This removes tensorflow and tensorflow-addons from .requirements/dev.txt . The file should now list the following requirements:

+
deepdiff>=5.0
+gsutil>=4.60
+keras-tuner>=1.0.2
+matplotlib>=3.3
+pytest>=6.1.2
+questionary>=1.8.1
+scikit-learn>=0.24.1
+wandb>=0.12.1
+
+
+

Continue the installation by following the below instructions for all operating systems.

+
+
+
+
+

All Windows/Linux/macOS

+
+

Install required packages

+

Install the required python packages by running:

+
pip install -r requirements.txt
+
+
+
+
+

Create and modify config.yaml

+

From the included config.defaults.yaml, make a copy called config.yaml:

+
cp config.defaults.yaml config.yaml
+
+
+

Edit config.yaml to include Kowalski instance and Fritz tokens in the associated empty token: fields.

+
+
+

Testing

+

Run ./scope.py test to test your installation. Note that for the test to pass, you will need access to the Kowalski database. If you do not have Kowalski access, you can run ./scope.py test_limited to run a more limited (but still useful) set of tests.

+
+
+

Troubleshooting

+

Upon encountering installation/testing errors, manually install the package in question using conda install xxx , and remove it from .requirements/dev.txt. After that, re-run pip install -r requirements.txt to continue.

+
+
+

Known issues

+
    +
  • Across all platforms, we are currently aware of scope dependency issues with Python 3.11.

  • +
  • Anaconda continues to cause problems with environment setup.

  • +
  • Using pip to install healpy on an arm64 Mac can raise an error upon import. We recommend including healpy as a requirement during the creation of your conda environment.

  • +
  • On Windows machines, healpy and cesium raise errors upon installation.

    +
      +
    • For healpy, see this guide for a potential workaround.

    • +
    • For cesium, try to install from the source (https://cesium-ml.org/docs/install.html#from-source) within scope. If you will not be running feature generation, this is not a critical error, but there will be points in the code that fail (e.g. scope.py test, tools/generate_features.py)

    • +
    +
  • +
+

If the installation continues to raise errors, update the conda environment and try again.

+
+
+
+

How to contribute

+

Contributions to scope are made through GitHub Pull Requests, a set of proposed commits (or patches):

+
    +
  1. Download the latest version of scope, and create a new branch for your work.

    +

    Here, let’s say we want to contribute some documentation fixes; we’ll call our branch rewrite-contributor-guide.

    +
    git checkout main
    +git pull upstream main
    +git checkout -b rewrite-contributor-guide
    +
    +
    +
  2. +
  3. Make modifications to scope and commit your changes using git add and git commit. +Each commit message should consist of a summary line and a longer description, e.g.:

    +
    Rewrite the contributor guide
    +While reading through the contributor guide, I noticed several places
    +in which instructions were out of order. I therefore reorganized all
    +sections to follow logically, and fixed several grammar mistakes along
    +the way.
    +
    +
    +
  4. +
  5. When ready, push your branch to GitHub:

    +
    git push origin rewrite-contributor-guide
    +
    +
    +

    Once the branch is uploaded, GitHub should print a URL for turning your branch into a pull request. +Open that URL in your browser, write an informative title and description for your pull request, and submit it.

    +
  6. +
  7. The team will now review your contribution, and suggest changes. +To simplify review, please limit pull requests to one logical set of changes. +To incorporate changes recommended by the reviewers, commit edits to your branch, and push to the branch again +(there is no need to re-create the pull request, it will automatically track modifications to your branch).

  8. +
  9. Sometimes, while you were working on your feature, the main branch is updated with new commits, potentially +resulting in conflicts with your feature branch. The are two ways to resolve this situation - merging and rebasing, +please look here for a detailed discussion. +While both ways are acceptable, since we are squashing commits from a PR before merging, we prefer the first option:

    +
    git merge rewrite-contributor-guide upstream/main
    +
    +
    +
  10. +
+

Developers may merge main into their branch as many times as they want to.

+
    +
  1. Once the pull request has been reviewed and approved by at least one team member, it will be merged into scope.

  2. +
+
+
+
+

Contributing Field Guide sections

+

If you would like to contribute a Field Guide section, please follow the steps below.

+
    +
  • Make sure to follow the steps described above in the “How to contribute” section!

  • +
  • Add sections to config.defaults.yaml under docs.field_guide.<object_class_type>.

    +
      +
    • Use docs.field_guide.rr_lyr_ab as an example. You need to specify the object’s +coordinates and a title for the generated light curve plot. Optionally, +you may specify a period [days] - then a phase-folded light curve will also be rendered.

    • +
    +
  • +
  • Make sure your config.yaml file contains a valid Kowalski token.

    +
      +
    • See here on how to generate one +(Kowalski account required).

    • +
    • You can use config.defaults.yaml as a template.

    • +
    +
  • +
  • Make sure the structure of your config file is the same as the default, +i.e. you propagated the changes in config.defaults.yaml. +(otherwise the scope.py utility will later complain and ask you to fix that).

  • +
  • Add a Markdown file to doc/ and call it field_guide__<object_class>.md.

    +
      +
    • Use doc/field_guide__rr_lyrae.md as a template.

    • +
    • Light curve examples will be generated as data/<object_class_type>.png files using the info +you provided in the config.

    • +
    • Add the following include statements to doc/field_guide.md:

    • +
    +
  • +
+
{include} ./field_guide__<object_class>.md
+
+
+
    +
  • If you wish to render a sample Gaia-based HR diagram, you need to create a “Golden” data set +for that class of objects and put it under data/golden as <object_class>.csv

    +
      +
    • The csv file must follow the same structure as [data/golden/rr_lyr.csv]. +Please keep the csv header (“ra,dec”) and provide object coordinates in degrees.

    • +
    • The HR diagram will be generated as data/hr__<object_class>.png

    • +
    +
  • +
  • Run the ./scope.py doc command to generate the imagery and build the documentation.

    + +
  • +
  • Once you’re happy with the result, commit the changes to a branch on your fork +and open a pull request on GitHub (see the “How to contribute” section above).

    +
      +
    • The GitHub Actions CI will run a subset of the testing/deployment pipeline +for each commit you make to your branch - +make sure you get a green checkmark next to the commit hash.

    • +
    • Once the PR is reviewed, approved, and merged, +the CI will automatically build and deploy the docs to +https://scope.ztf.dev

    • +
    +
  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide.html b/field_guide.html new file mode 100644 index 0000000..0ca394f --- /dev/null +++ b/field_guide.html @@ -0,0 +1,807 @@ + + + + + + + Field guide + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Field guide

+

This guide provides detailed information about the different types of variable sources along with examples of bogus variability.

+

Proceed here to interactively inspect the taxonomy +tree we are employing in SCoPe. Please refer to arXiv:2102.11304 +for more details on the taxonomy.

+
+

Variable stars (vnv)

+

Variable stars are objects whose brightness is varying at a statistically significant level. +ZTF has statistical measurements depend on magnitude: down to ~10 millimagnitudes for bright stars and >0.1 mag for objects near the detection limit. +Many astrophysical objects exhibit variable behavior, including periodic variables such as eclipsing binaries, pulsators, etc, and non-periodic variables such as AGN and YSOs.

+
+

Classification and numbers

+
    +
  • Subtypes

    +
      +
    • Irregular

    • +
    • Flaring

    • +
    • Periodic

    • +
    • Dipping

    • +
    • Long Time Scale

    • +
    +
  • +
+
+
+

ZTF light curves

+

ZTF variable

+
+

Description

+

Most stars are likely to be variable at some level. Therefore, variable is defined to be those varying at a statistically varying level, with millimagnitude to magnitude level variations.

+
+
+

Light curve characteristics

+
    +
  • amplitude: varies from survey precision to more than a magnitude

  • +
+

HR diagram of Variable

+

RA/Dec diagram of Variable

+
+
+
+

References and further reading:

+
    +
  • Jayasinghe et al., 2018, MNRAS 447 3, The ASAS-SN catalogue of variable stars I: The Serendipitous Survey arxiv:1803.01001

  • +
+
+
+
+

Periodic Variables (pnp)

+

Periodic Variables are objects that exhibit repeating sequences of values over a fixed length of time, known as the period. +Many astrophysical objects exhibit periodic behavior, including eclipsing binaries, pulsators, etc.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    +
  • +
  • Subtypes

    +
      +
    • Eclipsing

    • +
    • Sinusoidal

    • +
    • Sawtooth

    • +
    • Elliptical

    • +
    +
  • +
+
+
+

ZTF light curves

+

ZTF periodic

+
+

Description

+

Periodic variables have periods ranging from minutes to over a thousand days with millimagnitude to magnitude level variations.

+
+
+

Light curve characteristics

+
    +
  • periodic variable: objects that exhibit repeating sequences of values over a fixed length of time

  • +
  • period range: 0.001-1000 days

  • +
  • amplitude: varies from survey precision to more than a magnitude

  • +
+

HR diagram of Periodic

+

RA/Dec diagram of Periodic

+
+
+
+

References and further reading:

+
    +
  • Drake et al., 2014, ApJS 618 213 9, The Catalina Surveys Periodic Variable Catalog arxiv:1405.4290

  • +
+
+
+
+

RR Lyrae (rrlyr)

+

RR Lyrae are pulsating horizontal branch dA/dF stars with a mass 0.5 of Solar masses. +They are part of the main ‘instability strip’ in the HR-diagram, +where stars pulsate due to the double ionisation of He. +The two main subtypes are ab and c,

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Subtypes

    +
      +
    • RR Lyrae ab

    • +
    • RR Lyrae c

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF rrlyr ab +ZTF rrlyr c

+
+

Description

+

RR Lyrae (ab) are easy to recognise by their distinctive light curve shape and +high amplitude variability. +RR Lyrae (c) are a bit more of a challenge since their light curve shape is more sinusoidal. +For low-SNR cases they can sometimes be confused with contact binaries (EW), +which occur at similar periods and have sinusoidal-like light curves.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 0.2-1 days

  • +
  • amplitude: up to 1 mag (subtype ab), or 0.5 mag (subtype c)

  • +
  • light curve shape:

    +
      +
    • sawtooth; steep rise and slow decay (subtype ab)

    • +
    • periodic sinusoidal (subtype c)

    • +
    +
  • +
  • can show modulation of the light curve shape on timescales of ~100 days (Blazhko effect)

  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic RR Lyrae colors: blue, that of A/F type main sequence stars (g-r = -0.1 – 0.5). +Reddening can be significant since these stars can be detected at large distances.

  • +
  • absolute magnitude: -1<G<1

  • +
+

HR diagram of RRlyrae

+

RA/Dec diagram of RRlyrae

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
+
+
+
+

W Uma (wuma)

+

W UMa stars are main-sequence overcontact binaries. In overcontact binaries both stars are too large for their Roche lobe share a common envelope and can exchange mass and energy. The mass-ratio of the system ranges from 1 to 10 in extreme cases. Components can have different raddii and surface brightness with temperatures ranging from 4000 to 9000K.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • binary

    • +
    • eclipsing

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF wuma

+
+

Description

+

Contact binary lightcurves show a distinctive shape that shows two eclipses which do smoothly transition over. Eclipses can have a flat bottom. The eclipse depth is often identical, but can be show slightly different depths. In rare cases there can be differences in the maxima of the lightcurves (e.g. due to starspots).

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 0.22-0.8 days

  • +
  • amplitude: up to 0.75 mag

  • +
  • light curve shape: EW, two ‘V’-shaped eclipses with smooth transitions

  • +
  • eclipses often equal depth, within 0.1mag

  • +
+
+
+

Other characteristics and selection methods

+
    +
  • g-r = -0.1 – 1.0. Short period systems are typically redder.

  • +
  • absolute magnitudes are similar to main-sequence stars

  • +
+

HR diagram of W Uma

+

RA/Dec diagram of W Uma

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
  • Marsh et al, MNRAS 465, 4678–4689, 2017

  • +
+
+
+
+

Delta Scuti (dscu)

+

Delta Scuti variables are classic pulsating stars (i.e., they are stars passing through the instability strip). As these stars expand and contract (i.e. pulsate) their size and temperature changes leading to regular, smooth variations in their brightness. Delta Scuti stars are smaller than both Cepheids and RR Lyrae stars, which leads to a short period of oscillations (typically anywhere between 0.03 days and 0.3 days).

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Occurrence rate: very common, about 104 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF delta_scuti

+
+

Description

+

Delta Scuti are easy to recognise by their distinctive light curve shape and period range, which distinguishes them from RR Lyrae and Cepheids.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 0.03-0.3 days

  • +
  • amplitude: Small amplitude (between 0.05 and 0.3)

  • +
  • light curve shape:

    +
      +
    • smooth, sawtooth variations (blue/green filters show stronger sawtooth pattern); steep rise and slow decay

    • +
    +
  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic Delta Scuti colors: blue, that of A/F type main sequence stars (g-r = -0.1 – 0.5). +Reddening can be significant since these stars can be detected at large distances.

  • +
  • absolute magnitude: 0<G<5

  • +
+

HR diagram of Delta Scuti

+

RA/Dec diagram of Delta Scuti

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
+
+
+
+

Classical Cepheids (ceph)

+

Classical Cepheids are young, bright (100-10,000 solar luminosities) supergiant stars that pulsate with periods of 1 to 100 days (typically several days). They are located in the main instability strip in the H-R diagram. Cepheids follow a famous pulsation period-luminosity relation, allowing the absolute magnitude of a Cepheid, and thus its distance, to be inferred from the pulsation period. Thus, Cepheids are used to measure distances to nearby galaxies.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Occurrence rate: rare, about 103 expected in ZTF data, mostly in the Galactic plane and in M31

  • +
+
+
+

ZTF light curves

+

ZTF cepheids +ZTF cepheids +ZTF cepheids +ZTF cepheids

+
+

Description

+

Fundamental-mode Cepheids are easy to recognise by their distinctive sawtooth light curve shape (with a rapid rise to maximum light and a slower decline) and period range (from 1 to 100 days). A secondary bump may be seen in the light curves of some Cepheids with periods in the range 6-20 days. Cepheids pulsating in the first overtone have lower amplitudes and more symmetric light curves than fundamental-mode Cepheids. Their periods (in the Milky Way) range from 0.24 to 8 days. The lower period limit is arbitrary since there is no natural boundary between first-overtone Cepheids and delta Scuti stars. Some Cepheids pulsate both in the fundamental mode and first overtone, the period ratio ranges from 0.68 to 0.77.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 1-100 days (fundamental-mode pulsators), 0.24-8 days (first-overtone pulsators)

  • +
  • amplitude: moderate amplitude (~0.3 to 0.8 mag)

  • +
  • light curve shape:

    +
      +
    • smooth, sawtooth variations (blue/green filters show stronger sawtooth pattern); steep rise and slow decay

    • +
    • Classical Cepheids with pulsation periods 6-20 days may have a secondary bump

    • +
    +
  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic Cepheids colors: Bp-Rp = 0.8 – 2.0 mag, but as these stars are located near the Galactic plane, the reddening may be significant

  • +
  • absolute magnitude: -6<G<-2

  • +
  • located close to the Galactic plane (within ~10 degrees)

  • +
+

HR diagram of classical Cepheids

+

RA/Dec diagram of classical Cepheids

+

Period histogram of classical Cepheids

+
+
+
+

References and further reading:

+ +
+
+
+

Cataclysmic Variables (cv)

+

Cataclysmic variables are close binaries with active mass transfer from a late +type main sequence star or brown dwarf to a white dwarf. There are several different +types of CVs, depending on their causes of variability. These include novae (which +have 9-15 mag outbursts from thermonuclear events on the white dwarf surface), dwarf novae which have 2-9 mag outbursts on weeks to decades timescales due to disk instabilities) and novalikes which do not have outbursts but have high and low states of accretion which cause several magnitudes of brightness change.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • aperiodic outbursts

    • +
    • aperiodic high and low states

    • +
    • periodic orbital variability

    • +
    +
  • +
  • Subtypes

    +
      +
    • Nova

    • +
    • U Gem dwarf nova

    • +
    • Z Cam dwarf nova

    • +
    • SU UMa/WZ Sge dwarf nova

    • +
    • Novalike

    • +
    +
  • +
  • Occurrence rate: common, several thousand expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF CV U Gem +ZTF CV Z Cam +ZTF CV SU UMa +ZTF CV Novalike

+
+

Description

+

CVs are easy to recognize by their distinctive light curve shape, colors and +high amplitude variability. The outbursts are non-periodic. +They can sometimes be confused with supernovae, flare stars or long period variables.

+
+
+

Light curve characteristics

+
    +
  • non-periodic variable but recur on some timescale

  • +
  • outburst timescale range: days to decades

  • +
  • amplitude: 9-15 mag (nova), 2-9 mag (dwarf nova), 1-4 mag (novalike)

  • +
  • light curve shape:

    +
      +
    • sawtooth; steep rise and slow decay (subtype nova)

    • +
    • symmetrical to slightly sawtooth (subtype U Gem)

    • +
    • standstills about 1 mag below outburst level for weeks (subtype Z Cam)

    • +
    • fast rise and extended plateau for 1-2 weeks followed by steeper decline (subtype SU UMa/WZ Sge)

    • +
    • extended (days-weeks) states at either high or low brightness

    • +
    +
  • +
  • can show periodic modulation of the light curve on orbital timescales of hours

  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic CV colors: blue, (g-r < 0.6). +Reddening is usually not important except for places in the galactic plane.

  • +
  • absolute magnitude at quiescence: 8<G<14

  • +
+

HR diagram of CVs

+
+
+
+

References and further reading:

+
    +
  • Warner 1995: Cataclysmic Variable Stars

  • +
+
+
+
+

Flaring variables (fla)

+

The phenomelogical classification of flaring is any kind of outbursting source, where a variable star (or binary system) dramatically increases in brightness for minutes to hours before returning to quiescence. Most flare stars are red dwarfs, while RS Canum Venaticorum variables (RS CVn) are also known to flare due to a companion star in the binary system. Other possible sources of flaring include dwarf novae, which arise from accretion disk activity in a cataclysmic variable star.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    +
  • +
  • Occurrence rate: very common, for a given red dwarf, flares 10³¹ - 10³² ergs occur about once per day, and flares 10³³ - 10³⁴ ergs occur about once per 10-100 days.

  • +
+
+
+

ZTF light curves

+

ZTF flaring_dwarfnova

+

ZTF flaring_mdwarf

+
+

Description

+

Flaring stars are easy to recognise by their increase in brightness from quiescent levels, rapidly returning to that same level shortly thereafter.

+
+
+

Light curve characteristics

+
    +
  • variable

  • +
  • increase in brightness before returning to quiescence.

  • +
  • amplitude: at the bright end, flares can be many magnitudes, while at the dim end, flare detection is limited by survey photometric precision.

  • +
+

HR diagram of Flaring

+

RA/Dec diagram of Flaring

+
+
+
+

References and further reading:

+
    +
  • Taichi Kato, WZ Sge-type dwarf novae, Publications of the Astronomical Society of Japan, Volume 67, Issue 6, December 2015, 108 arxiv:1507.07659

  • +
  • Maximilian N. Günther et al 2020 AJ 159 60, arxiv:1901.00443

  • +
+
+
+
+

Beta Lyr (blyr)

+

Semi-detached eclipsing binaries (also called beta Lyrae variables) are binary star systems (i.e. two stars that are in orbit around each other) that are aligned such that they eclipse each other relative to our line of sight from the Earth. Unlike detached EBs, semi-detatched systems are so close to each other that the shape of (at least one of) the stars in the system are distorted, giving rise to the smooth periodic variations even when the system is not eclipsing.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • binary

    • +
    • eclipsing

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF betalyr

+
+

Description

+

Any type of star can be in an eclipsing binary (so they may be small, large, hot, cool, etc.), which in turn can lead to a large range in eclipse amplitudes (though typically these are between 0.1 and ~1 mag, with most in the ~0.3 to 0.75 mag range) or eclipse periods (though our observations are typically only sensitive to periods between 0.1 to ~20 days).

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • Range of amplitudes (~0.2 to >1 mag)

  • +
  • Intermediate periods (log Period between -0.5 and 1.4)

  • +
  • light curve shape: EB, round or sinusoidal light curves, with imposed “V-shape” dips in the phase folded light curve

  • +
+

HR diagram of Beta Lyrae

+

Period histogram of Beta Lyrae

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
+
+
+
+

Long Period Variables (lpv)

+

Long Period Variables have periods over several tens of days. +They incorporate various groups of cool luminous pulsators. +The canonical example is Mira.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Subtypes

    +
      +
    • Miras

    • +
    • Semiregulars

    • +
    • OSARGs - OGLE Small Amplitude Red Giants (some astronomers do not include these under LPVs)

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
  • Non LPV wth Long Periods

    +
      +
    • RV Tau - Cepheid IIs

    • +
    +
  • +
  • Other possible confusions

    +
      +
    • YSOs - their variations tend to be over shorter periods

    • +
    +
  • +
+
+
+

ZTF light curves

+

ZTF lpv +ZTF lpv

+
+

Description

+

Long period variables have periods from several tens of days to over thousand day and are +easy to identify due to the slow variations.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 100-1000 days

  • +
  • amplitude: over a mag (Mira), or a few tenths of a mag to 1 or 2 mags (semiregulars)

  • +
  • light curve shape:

    +
      +
    • periodic sinusoidal (Mira)

    • +
    • semiregular (Semiregular)

    • +
    +
  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic lpv colors: red

  • +
  • absolute magnitude:

  • +
+

HR diagram of LPV

+

RA/Dec diagram of LPV

+
+
+
+

References and further reading:

+
    +
  • Mowlawi et al., 2018, A&A 618, A58, The first Gaia catalogue of long-period variable candidates arxiv:1805.02035

  • +
  • Soszynski et al., 2009, AcA, 59, 239S, The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. IV. Long-Period Variables in the Large Magellanic Cloud arxix:0910.1354

  • +
  • Soszynski et al., 2008, AcA, 58, 293S, The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. II.Type II Cepheids and Anomalous Cepheids in the Large Magellanic Cloud arxiv:0811.3636

  • +
+
+
+
+

Bogus variability (bogus)

+

Not all light curve variability pertains to a source’s intrinsic astrophysical nature. Some is caused by nearby extended objects, bright stars, blends and image artifacts, and being aware of how such bogus light curves appear can help avoid confusion.

+
+

ZTF light curves

+

ZTF bogus +ZTF bogus

+
+

Description

+

The first light curve above demonstrates a saturation ghost artifact, and the second light curve suffers from another kind of artifact. These artifacts were identified and affected data masked after ZTF began, but data from earlier releases were not retroactively masked. This produces the apparent cutoff in variability after a certain point in time.

+
+
+

Light curve characteristics

+

The light curves appear to be “flaring” with departures from the median by multiple magnitudes which suddenly stop in later data. This cutoff corresponds to the time when a new method of processing the data was used to mask affected points.

+
+
+
+

References and further reading:

+ +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__CVs.html b/field_guide__CVs.html new file mode 100644 index 0000000..675a501 --- /dev/null +++ b/field_guide__CVs.html @@ -0,0 +1,245 @@ + + + + + + + Cataclysmic Variables (cv) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Cataclysmic Variables (cv)

+

Cataclysmic variables are close binaries with active mass transfer from a late +type main sequence star or brown dwarf to a white dwarf. There are several different +types of CVs, depending on their causes of variability. These include novae (which +have 9-15 mag outbursts from thermonuclear events on the white dwarf surface), dwarf novae which have 2-9 mag outbursts on weeks to decades timescales due to disk instabilities) and novalikes which do not have outbursts but have high and low states of accretion which cause several magnitudes of brightness change.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • aperiodic outbursts

    • +
    • aperiodic high and low states

    • +
    • periodic orbital variability

    • +
    +
  • +
  • Subtypes

    +
      +
    • Nova

    • +
    • U Gem dwarf nova

    • +
    • Z Cam dwarf nova

    • +
    • SU UMa/WZ Sge dwarf nova

    • +
    • Novalike

    • +
    +
  • +
  • Occurrence rate: common, several thousand expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF CV U Gem +ZTF CV Z Cam +ZTF CV SU UMa +ZTF CV Novalike

+
+

Description

+

CVs are easy to recognize by their distinctive light curve shape, colors and +high amplitude variability. The outbursts are non-periodic. +They can sometimes be confused with supernovae, flare stars or long period variables.

+
+
+

Light curve characteristics

+
    +
  • non-periodic variable but recur on some timescale

  • +
  • outburst timescale range: days to decades

  • +
  • amplitude: 9-15 mag (nova), 2-9 mag (dwarf nova), 1-4 mag (novalike)

  • +
  • light curve shape:

    +
      +
    • sawtooth; steep rise and slow decay (subtype nova)

    • +
    • symmetrical to slightly sawtooth (subtype U Gem)

    • +
    • standstills about 1 mag below outburst level for weeks (subtype Z Cam)

    • +
    • fast rise and extended plateau for 1-2 weeks followed by steeper decline (subtype SU UMa/WZ Sge)

    • +
    • extended (days-weeks) states at either high or low brightness

    • +
    +
  • +
  • can show periodic modulation of the light curve on orbital timescales of hours

  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic CV colors: blue, (g-r < 0.6). +Reddening is usually not important except for places in the galactic plane.

  • +
  • absolute magnitude at quiescence: 8<G<14

  • +
+

HR diagram of CVs

+
+
+
+

References and further reading:

+
    +
  • Warner 1995: Cataclysmic Variable Stars

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__beta_lyr.html b/field_guide__beta_lyr.html new file mode 100644 index 0000000..a8aa2d0 --- /dev/null +++ b/field_guide__beta_lyr.html @@ -0,0 +1,212 @@ + + + + + + + Beta Lyr (blyr) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Beta Lyr (blyr)

+

Semi-detached eclipsing binaries (also called beta Lyrae variables) are binary star systems (i.e. two stars that are in orbit around each other) that are aligned such that they eclipse each other relative to our line of sight from the Earth. Unlike detached EBs, semi-detatched systems are so close to each other that the shape of (at least one of) the stars in the system are distorted, giving rise to the smooth periodic variations even when the system is not eclipsing.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • binary

    • +
    • eclipsing

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF betalyr

+
+

Description

+

Any type of star can be in an eclipsing binary (so they may be small, large, hot, cool, etc.), which in turn can lead to a large range in eclipse amplitudes (though typically these are between 0.1 and ~1 mag, with most in the ~0.3 to 0.75 mag range) or eclipse periods (though our observations are typically only sensitive to periods between 0.1 to ~20 days).

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • Range of amplitudes (~0.2 to >1 mag)

  • +
  • Intermediate periods (log Period between -0.5 and 1.4)

  • +
  • light curve shape: EB, round or sinusoidal light curves, with imposed “V-shape” dips in the phase folded light curve

  • +
+

HR diagram of Beta Lyrae

+

Period histogram of Beta Lyrae

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__bogus.html b/field_guide__bogus.html new file mode 100644 index 0000000..14589ab --- /dev/null +++ b/field_guide__bogus.html @@ -0,0 +1,192 @@ + + + + + + + Bogus variability (bogus) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Bogus variability (bogus)

+

Not all light curve variability pertains to a source’s intrinsic astrophysical nature. Some is caused by nearby extended objects, bright stars, blends and image artifacts, and being aware of how such bogus light curves appear can help avoid confusion.

+
+

ZTF light curves

+

ZTF bogus +ZTF bogus

+
+

Description

+

The first light curve above demonstrates a saturation ghost artifact, and the second light curve suffers from another kind of artifact. These artifacts were identified and affected data masked after ZTF began, but data from earlier releases were not retroactively masked. This produces the apparent cutoff in variability after a certain point in time.

+
+
+

Light curve characteristics

+

The light curves appear to be “flaring” with departures from the median by multiple magnitudes which suddenly stop in later data. This cutoff corresponds to the time when a new method of processing the data was used to mask affected points.

+
+
+
+

References and further reading:

+ +
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__cepheid.html b/field_guide__cepheid.html new file mode 100644 index 0000000..c8726a5 --- /dev/null +++ b/field_guide__cepheid.html @@ -0,0 +1,231 @@ + + + + + + + Classical Cepheids (ceph) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Classical Cepheids (ceph)

+

Classical Cepheids are young, bright (100-10,000 solar luminosities) supergiant stars that pulsate with periods of 1 to 100 days (typically several days). They are located in the main instability strip in the H-R diagram. Cepheids follow a famous pulsation period-luminosity relation, allowing the absolute magnitude of a Cepheid, and thus its distance, to be inferred from the pulsation period. Thus, Cepheids are used to measure distances to nearby galaxies.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Occurrence rate: rare, about 103 expected in ZTF data, mostly in the Galactic plane and in M31

  • +
+
+
+

ZTF light curves

+

ZTF cepheids +ZTF cepheids +ZTF cepheids +ZTF cepheids

+
+

Description

+

Fundamental-mode Cepheids are easy to recognise by their distinctive sawtooth light curve shape (with a rapid rise to maximum light and a slower decline) and period range (from 1 to 100 days). A secondary bump may be seen in the light curves of some Cepheids with periods in the range 6-20 days. Cepheids pulsating in the first overtone have lower amplitudes and more symmetric light curves than fundamental-mode Cepheids. Their periods (in the Milky Way) range from 0.24 to 8 days. The lower period limit is arbitrary since there is no natural boundary between first-overtone Cepheids and delta Scuti stars. Some Cepheids pulsate both in the fundamental mode and first overtone, the period ratio ranges from 0.68 to 0.77.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 1-100 days (fundamental-mode pulsators), 0.24-8 days (first-overtone pulsators)

  • +
  • amplitude: moderate amplitude (~0.3 to 0.8 mag)

  • +
  • light curve shape:

    +
      +
    • smooth, sawtooth variations (blue/green filters show stronger sawtooth pattern); steep rise and slow decay

    • +
    • Classical Cepheids with pulsation periods 6-20 days may have a secondary bump

    • +
    +
  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic Cepheids colors: Bp-Rp = 0.8 – 2.0 mag, but as these stars are located near the Galactic plane, the reddening may be significant

  • +
  • absolute magnitude: -6<G<-2

  • +
  • located close to the Galactic plane (within ~10 degrees)

  • +
+

HR diagram of classical Cepheids

+

RA/Dec diagram of classical Cepheids

+

Period histogram of classical Cepheids

+
+
+
+

References and further reading:

+ +
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__delta_scuti.html b/field_guide__delta_scuti.html new file mode 100644 index 0000000..9ddd9e7 --- /dev/null +++ b/field_guide__delta_scuti.html @@ -0,0 +1,223 @@ + + + + + + + Delta Scuti (dscu) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Delta Scuti (dscu)

+

Delta Scuti variables are classic pulsating stars (i.e., they are stars passing through the instability strip). As these stars expand and contract (i.e. pulsate) their size and temperature changes leading to regular, smooth variations in their brightness. Delta Scuti stars are smaller than both Cepheids and RR Lyrae stars, which leads to a short period of oscillations (typically anywhere between 0.03 days and 0.3 days).

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Occurrence rate: very common, about 104 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF delta_scuti

+
+

Description

+

Delta Scuti are easy to recognise by their distinctive light curve shape and period range, which distinguishes them from RR Lyrae and Cepheids.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 0.03-0.3 days

  • +
  • amplitude: Small amplitude (between 0.05 and 0.3)

  • +
  • light curve shape:

    +
      +
    • smooth, sawtooth variations (blue/green filters show stronger sawtooth pattern); steep rise and slow decay

    • +
    +
  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic Delta Scuti colors: blue, that of A/F type main sequence stars (g-r = -0.1 – 0.5). +Reddening can be significant since these stars can be detected at large distances.

  • +
  • absolute magnitude: 0<G<5

  • +
+

HR diagram of Delta Scuti

+

RA/Dec diagram of Delta Scuti

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__flaring.html b/field_guide__flaring.html new file mode 100644 index 0000000..79cec07 --- /dev/null +++ b/field_guide__flaring.html @@ -0,0 +1,210 @@ + + + + + + + Flaring variables (fla) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Flaring variables (fla)

+

The phenomelogical classification of flaring is any kind of outbursting source, where a variable star (or binary system) dramatically increases in brightness for minutes to hours before returning to quiescence. Most flare stars are red dwarfs, while RS Canum Venaticorum variables (RS CVn) are also known to flare due to a companion star in the binary system. Other possible sources of flaring include dwarf novae, which arise from accretion disk activity in a cataclysmic variable star.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    +
  • +
  • Occurrence rate: very common, for a given red dwarf, flares 10³¹ - 10³² ergs occur about once per day, and flares 10³³ - 10³⁴ ergs occur about once per 10-100 days.

  • +
+
+
+

ZTF light curves

+

ZTF flaring_dwarfnova

+

ZTF flaring_mdwarf

+
+

Description

+

Flaring stars are easy to recognise by their increase in brightness from quiescent levels, rapidly returning to that same level shortly thereafter.

+
+
+

Light curve characteristics

+
    +
  • variable

  • +
  • increase in brightness before returning to quiescence.

  • +
  • amplitude: at the bright end, flares can be many magnitudes, while at the dim end, flare detection is limited by survey photometric precision.

  • +
+

HR diagram of Flaring

+

RA/Dec diagram of Flaring

+
+
+
+

References and further reading:

+
    +
  • Taichi Kato, WZ Sge-type dwarf novae, Publications of the Astronomical Society of Japan, Volume 67, Issue 6, December 2015, 108 arxiv:1507.07659

  • +
  • Maximilian N. Günther et al 2020 AJ 159 60, arxiv:1901.00443

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__lpv.html b/field_guide__lpv.html new file mode 100644 index 0000000..cc55bb1 --- /dev/null +++ b/field_guide__lpv.html @@ -0,0 +1,246 @@ + + + + + + + Long Period Variables (lpv) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Long Period Variables (lpv)

+

Long Period Variables have periods over several tens of days. +They incorporate various groups of cool luminous pulsators. +The canonical example is Mira.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Subtypes

    +
      +
    • Miras

    • +
    • Semiregulars

    • +
    • OSARGs - OGLE Small Amplitude Red Giants (some astronomers do not include these under LPVs)

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
  • Non LPV wth Long Periods

    +
      +
    • RV Tau - Cepheid IIs

    • +
    +
  • +
  • Other possible confusions

    +
      +
    • YSOs - their variations tend to be over shorter periods

    • +
    +
  • +
+
+
+

ZTF light curves

+

ZTF lpv +ZTF lpv

+
+

Description

+

Long period variables have periods from several tens of days to over thousand day and are +easy to identify due to the slow variations.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 100-1000 days

  • +
  • amplitude: over a mag (Mira), or a few tenths of a mag to 1 or 2 mags (semiregulars)

  • +
  • light curve shape:

    +
      +
    • periodic sinusoidal (Mira)

    • +
    • semiregular (Semiregular)

    • +
    +
  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic lpv colors: red

  • +
  • absolute magnitude:

  • +
+

HR diagram of LPV

+

RA/Dec diagram of LPV

+
+
+
+

References and further reading:

+
    +
  • Mowlawi et al., 2018, A&A 618, A58, The first Gaia catalogue of long-period variable candidates arxiv:1805.02035

  • +
  • Soszynski et al., 2009, AcA, 59, 239S, The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. IV. Long-Period Variables in the Large Magellanic Cloud arxix:0910.1354

  • +
  • Soszynski et al., 2008, AcA, 58, 293S, The Optical Gravitational Lensing Experiment. The OGLE-III Catalog of Variable Stars. II.Type II Cepheids and Anomalous Cepheids in the Large Magellanic Cloud arxiv:0811.3636

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__periodic.html b/field_guide__periodic.html new file mode 100644 index 0000000..096ea06 --- /dev/null +++ b/field_guide__periodic.html @@ -0,0 +1,216 @@ + + + + + + + Periodic Variables (pnp) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Periodic Variables (pnp)

+

Periodic Variables are objects that exhibit repeating sequences of values over a fixed length of time, known as the period. +Many astrophysical objects exhibit periodic behavior, including eclipsing binaries, pulsators, etc.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    +
  • +
  • Subtypes

    +
      +
    • Eclipsing

    • +
    • Sinusoidal

    • +
    • Sawtooth

    • +
    • Elliptical

    • +
    +
  • +
+
+
+

ZTF light curves

+

ZTF periodic

+
+

Description

+

Periodic variables have periods ranging from minutes to over a thousand days with millimagnitude to magnitude level variations.

+
+
+

Light curve characteristics

+
    +
  • periodic variable: objects that exhibit repeating sequences of values over a fixed length of time

  • +
  • period range: 0.001-1000 days

  • +
  • amplitude: varies from survey precision to more than a magnitude

  • +
+

HR diagram of Periodic

+

RA/Dec diagram of Periodic

+
+
+
+

References and further reading:

+
    +
  • Drake et al., 2014, ApJS 618 213 9, The Catalina Surveys Periodic Variable Catalog arxiv:1405.4290

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__rr_lyrae.html b/field_guide__rr_lyrae.html new file mode 100644 index 0000000..6474e9b --- /dev/null +++ b/field_guide__rr_lyrae.html @@ -0,0 +1,239 @@ + + + + + + + RR Lyrae (rrlyr) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

RR Lyrae (rrlyr)

+

RR Lyrae are pulsating horizontal branch dA/dF stars with a mass 0.5 of Solar masses. +They are part of the main ‘instability strip’ in the HR-diagram, +where stars pulsate due to the double ionisation of He. +The two main subtypes are ab and c,

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • pulsator

    • +
    +
  • +
  • Subtypes

    +
      +
    • RR Lyrae ab

    • +
    • RR Lyrae c

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF rrlyr ab +ZTF rrlyr c

+
+

Description

+

RR Lyrae (ab) are easy to recognise by their distinctive light curve shape and +high amplitude variability. +RR Lyrae (c) are a bit more of a challenge since their light curve shape is more sinusoidal. +For low-SNR cases they can sometimes be confused with contact binaries (EW), +which occur at similar periods and have sinusoidal-like light curves.

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 0.2-1 days

  • +
  • amplitude: up to 1 mag (subtype ab), or 0.5 mag (subtype c)

  • +
  • light curve shape:

    +
      +
    • sawtooth; steep rise and slow decay (subtype ab)

    • +
    • periodic sinusoidal (subtype c)

    • +
    +
  • +
  • can show modulation of the light curve shape on timescales of ~100 days (Blazhko effect)

  • +
+
+
+

Other characteristics and selection methods

+
    +
  • intrinsic RR Lyrae colors: blue, that of A/F type main sequence stars (g-r = -0.1 – 0.5). +Reddening can be significant since these stars can be detected at large distances.

  • +
  • absolute magnitude: -1<G<1

  • +
+

HR diagram of RRlyrae

+

RA/Dec diagram of RRlyrae

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__variable.html b/field_guide__variable.html new file mode 100644 index 0000000..1895ea6 --- /dev/null +++ b/field_guide__variable.html @@ -0,0 +1,211 @@ + + + + + + + Variable stars (vnv) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Variable stars (vnv)

+

Variable stars are objects whose brightness is varying at a statistically significant level. +ZTF has statistical measurements depend on magnitude: down to ~10 millimagnitudes for bright stars and >0.1 mag for objects near the detection limit. +Many astrophysical objects exhibit variable behavior, including periodic variables such as eclipsing binaries, pulsators, etc, and non-periodic variables such as AGN and YSOs.

+
+

Classification and numbers

+
    +
  • Subtypes

    +
      +
    • Irregular

    • +
    • Flaring

    • +
    • Periodic

    • +
    • Dipping

    • +
    • Long Time Scale

    • +
    +
  • +
+
+
+

ZTF light curves

+

ZTF variable

+
+

Description

+

Most stars are likely to be variable at some level. Therefore, variable is defined to be those varying at a statistically varying level, with millimagnitude to magnitude level variations.

+
+
+

Light curve characteristics

+
    +
  • amplitude: varies from survey precision to more than a magnitude

  • +
+

HR diagram of Variable

+

RA/Dec diagram of Variable

+
+
+
+

References and further reading:

+
    +
  • Jayasinghe et al., 2018, MNRAS 447 3, The ASAS-SN catalogue of variable stars I: The Serendipitous Survey arxiv:1803.01001

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/field_guide__w_uma.html b/field_guide__w_uma.html new file mode 100644 index 0000000..3eae45b --- /dev/null +++ b/field_guide__w_uma.html @@ -0,0 +1,221 @@ + + + + + + + W Uma (wuma) + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

W Uma (wuma)

+

W UMa stars are main-sequence overcontact binaries. In overcontact binaries both stars are too large for their Roche lobe share a common envelope and can exchange mass and energy. The mass-ratio of the system ranges from 1 to 10 in extreme cases. Components can have different raddii and surface brightness with temperatures ranging from 4000 to 9000K.

+
+

Classification and numbers

+
    +
  • Supertypes

    +
      +
    • variable

    • +
    • periodic

    • +
    • binary

    • +
    • eclipsing

    • +
    +
  • +
  • Occurrence rate: very common, about 105 expected in ZTF data

  • +
+
+
+

ZTF light curves

+

ZTF wuma

+
+

Description

+

Contact binary lightcurves show a distinctive shape that shows two eclipses which do smoothly transition over. Eclipses can have a flat bottom. The eclipse depth is often identical, but can be show slightly different depths. In rare cases there can be differences in the maxima of the lightcurves (e.g. due to starspots).

+
+
+

Light curve characteristics

+
    +
  • periodic variable

  • +
  • period range: 0.22-0.8 days

  • +
  • amplitude: up to 0.75 mag

  • +
  • light curve shape: EW, two ‘V’-shaped eclipses with smooth transitions

  • +
  • eclipses often equal depth, within 0.1mag

  • +
+
+
+

Other characteristics and selection methods

+
    +
  • g-r = -0.1 – 1.0. Short period systems are typically redder.

  • +
  • absolute magnitudes are similar to main-sequence stars

  • +
+

HR diagram of W Uma

+

RA/Dec diagram of W Uma

+
+
+
+

References and further reading:

+
    +
  • Sterken & Jasschek: Light curves of variable stars

  • +
  • Marsh et al, MNRAS 465, 4678–4689, 2017

  • +
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000..343a282 --- /dev/null +++ b/genindex.html @@ -0,0 +1,175 @@ + + + + + + + Index + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ + +

Index

+ +
+ +
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..441d93a --- /dev/null +++ b/index.html @@ -0,0 +1,238 @@ + + + + + + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/license.html b/license.html new file mode 100644 index 0000000..ccb3e94 --- /dev/null +++ b/license.html @@ -0,0 +1,204 @@ + + + + + + + License + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

License

+

MIT License

+

Copyright (c) 2021 Zwicky Transient Facility

+

Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the “Software”), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.

+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000..180cee3 --- /dev/null +++ b/objects.inv @@ -0,0 +1,12 @@ +# Sphinx inventory version 2 +# Project: ZTF Variable Source Classification Project +# Version: +# The remainder of this file is compressed using zlib. +xڅn ~ +"JNJX 0v>}/uc9~ G@xߝE/:*%uB +>O +ls y?xr$@PV +﨣L."9P#Q%-oְ#8T9pF0Q۲0[ nRq^gJL~Z +FqeZm &'"^ Pr46Гĥ +L~(ǹJC/4b:0BrƐPC@v9^@G5ncA +́}z1oNUXDvɯtUZp#;y`M3P(/jq\c_$~|];0H 3'0H@ղ8N 61U [,u;cS_`/󺲹+C,qeTXR _LXםF-|Eb \ No newline at end of file diff --git a/quickstart.html b/quickstart.html new file mode 100644 index 0000000..d4c89ef --- /dev/null +++ b/quickstart.html @@ -0,0 +1,309 @@ + + + + + + + Quick Start Guide + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Quick Start Guide

+

This guide is intended to facilitate quick interactions with SCoPe code after you have completed the Installation/Developer Guidelines section. More detailed usage info can be found in the Usage section. All of the following examples assume that SCoPe is installed in your home directory. If the scope directory is located elsewhere, adjust the example code as necessary.

+
+

Modify config.yaml

+

To start out, provide SCoPe your training set’s filepath using the training: dataset: field in config.yaml. The path should be a partial one starting within the scope directory. For example, if your training set trainingSet.parquet is within the tools directory (which itself is within scope), provide tools/trainingSet.parquet in the dataset: field.

+
+
+

Training

+

Train an XGBoost binary classifier using the following code:

+
./scope.py train --tag=vnv --algorithm=xgb --group=ss23 --period_suffix=ELS_ECE_EAOV --epochs=30 --verbose --save --plot --skip_cv
+
+
+
+

Arguments:

+

--tag: the abbreviated name of the classification to train a binary classifier. A list of abbreviations and definitions can be found in the Guide for Fritz Scanners section.

+

--algorithm: SCoPe currently supports neural network (dnn) and XGBoost (xgb) algorithms.

+

--group: if --save is passed, training results are saved to the group/directory named here.

+

--period_suffix: SCoPe determines light curve periods using GPU-accelerated algorithms. These algorithms include a Lomb-Scargle approach (ELS), Conditional Entropy (ECE), Analysis of Variance (AOV), and an approach nesting all three (ELS_ECE_EAOV). Periodic features are stored with the suffix specified here.

+

--min_count: requires at least min_count positive examples to run training.

+

--epochs: neural network training takes an –epochs argument that is set to 30 here.

+

Notes:

+
    +
  • The above training runs the XGB algorithm by default and skips cross-validation in the interest of time. For a full run, you can remove the --skip_cv argument to run a cross-validated grid search of XGB hyperparameters during training.

  • +
  • DNN hyperparameters are optimized using a different approach - Weights and Biases Sweeps (https://docs.wandb.ai/guides/sweeps). The results of these sweeps are the default hyperparameters in the config file. To run another round of sweeps for DNN, create a WandB account and set the --run_sweeps keyword in the call to scope.py train.

  • +
  • SCoPe DNN training does not provide feature importance information (due to the hidden layers of the network). Feature importance is possible to estimate for neural networks, but it is more computationally expensive compared to this “free” information from XGB.

  • +
+
+
+

Train multiple classifiers with one script

+

Create a shell script that contains multiple calls to scope.py train:

+
./scope.py create_training_script --filename=train_xgb.sh --min_count=1000 --algorithm=xgb --period_suffix=ELS_ECE_EAOV --add_keywords="--save --plot --group=ss23 --epochs=30 --skip_cv"
+
+
+

Modify the permissions of this script by running chmod +x train_xgb.sh. Run the generated training script in a terminal window (using e.g. ./train_xgb.sh) to train multiple label sequentially.

+

Note:

+
    +
  • The code will throw an error if the training script filename already exists.

  • +
+
+
+

Running training on HPC resources

+

train_algorithm_slurm.py and train_algorithm_job_submission.py can be used generate and submit slurm scripts to train all classifiers in parallel using HPC resources.

+
+
+
+

Plotting Classifier Performance

+

SCoPe saves diagnostic plots and json files to report each classifier’s performance. The below code shows the location of the validation set results for one classifier.

+
import pathlib
+import json
+
+path_model = pathlib.Path.home() / "scope/models_xgb/ss23/vnv"
+path_stats = [x for x in path_model.glob("*plots/val/*stats.json")][0]
+
+with open(path_stats) as f:
+    stats = json.load(f)
+
+
+

The code below makes a bar plot of the precision and recall for this classifier:

+
import matplotlib.pyplot as plt
+
+plt.figure(figsize=(6,4))
+plt.rcParams['font.size']=13
+plt.title(f"XGB performance (vnv)")
+plt.bar("vnv", stats['precision'], color='blue',width=1,label='precision')
+plt.bar("vnv", stats['recall'], color='red',width=0.6, label='recall')
+plt.legend(ncol=2,loc=0)
+plt.ylim(0,1.15)
+plt.xlim(-3,3)
+plt.ylabel('Score')
+
+
+
+

This code may also be placed in a loop over multiple labels to compare each classifier’s performance.

+
+
+

Inference

+

Use tools/inference.py to run inference on a field (297) of features (within a directory called generated_features). The classifiers used for this inference are within the ss23 directory/group specified during training.

+
./scope.py create_inference_script --filename=get_all_preds_xgb.sh --group_name=ss23 --algorithm=xgb --period_suffix=ELS_ECE_EAOV --feature_directory=generated_features
+
+
+

Modify the permissions of this script using chmod +x get_all_preds_xgb.sh, then run on the desired field:

+
./get_all_preds_xgb.sh 297
+
+
+

Notes:

+
    +
  • scope.py create_inference_script will throw an error if the inference script filename already exists.

  • +
  • Inference begins by imputing missing features using the strategies specified in the features: section of the config file.

  • +
+
+

Running inference on HPC resources

+

run_inference_slurm.py and run_inference_job_submission.py can be used generate and submit slurm scripts to run inference for all classifiers in parallel using HPC resources.*

+
+
+
+

Examining predictions

+

The result of running the inference script will be a parquet file containing some descriptive columns followed by columns containing for each classification’s probability for each source in the field. By default, the file is located as follows:

+
path_preds = pathlib.Path.home() / "scope/preds_xgb/field_297/field_297.parquet"
+
+
+

SCoPe’s read_parquet utility offers an easy way to read the predictions file and provide it as a pandas DataFrame.

+
from scope.utils import read_parquet
+preds = read_parquet(path_preds)
+
+
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/scanner.html b/scanner.html new file mode 100644 index 0000000..39d2ba6 --- /dev/null +++ b/scanner.html @@ -0,0 +1,407 @@ + + + + + + + Guide for Fritz Scanners + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Guide for Fritz Scanners

+

This page is a guide the SCoPe classification process. It contains sections on the classification taxonomies we use, definitions of each classification that may be posted to Fritz, An explanation of the binary classifier algorithms we train and the workflow we run on transient candidates, and plots of each classifer’s current precision and recall scores.

+
+

Two classification taxonomies

+

The goal of SCoPe is to use machine learning algorithms to reliably classify each ZTF source with as much detail as possible. The level of classification detail will vary across the broad range of ZTF sources. Factors that can affect the level of source classification include the quantity and quality of the data, the similarity of the training set to the source in question, and the existence of new kinds of variable sources in the data. With this in mind, we adopt two kinds of taxonomies which contain the labels we use to classify ZTF sources.

+
+

Ontological classifications

+

The first taxonomy is ontological and contains specific kinds of astrophysical sources. On Fritz, this is called Sitewide Taxonomy. See the table below for the current ontological classifications, training set abbreviations and definitions, ordered by low to high detail:

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

classification

abbreviation

definition

pulsator

puls

Pulsating star

AGN

agn

Active Galactic Nucleus

YSO

yso

Young Stellar Object

CV

cv

Cataclysmic Variable

binary

bis

binary system

Cepheid

ceph

Cepheid variable star

Delta Scu

dscu

Delta Scu star

Pop II Cepheid

ceph2

Population II Cepheid variable star

RR Lyr

rrlyr

RR Lyr star

LPV

lpv

Long Period Variable star

MS-MS

emsms

Eclipsing MS-MS binary

W UMa

wuma

W UMa binary system

Beta Lyr

blyr

Beta Lyr binary

RS CVn

rscvn

RS CVn binary

RRab

rrab

RR Lyr ab star

RRc

rrc

RR Lyr c star

RRd

rrd

RR Lyr d star

Mira

mir

Mira variable star

SRV

srv

Semi-regular variable star

OSARG

osarg

OGLE small-amplitude red giant star

+

Refer to the field guide for more information about these classes.

+
+
+

Phenomenological classifications

+

In consideration of the importance of having some information about a source (even if not a definitive ontological classification), we also employ a phenomenological taxonomy with labels that describe light curve-based features. This taxonomy is called SCoPe Phenomenological Taxonomy on Fritz. See the table below for the current phenomenological classifications, training set abbreviations and definitions:

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

classification

abbreviation

definition

variable

vnv

Light curve shows variability

periodic

pnp

periodic variability

irregular

i

irregular variability

eclipsing

e

eclipsing phenomenology

sinusoidal

sin

sinusoidal phenomenology

sawtooth

saw

sawtooth phenomenology

long timescale

longt

long timescale variability

flaring

fla

flaring phenomenology

EA

ea

EA eclipsing phenomenology

EB

eb

EB eclipsing phenomenology

EW

ew

EW eclipsing phenomenology

blend

blend

blended sources phenomenology

+

Refer to the field guide for more information about these classes.

+
+
+
+

Independent binary classifiers

+

We train a binary classifier for every label in these taxonomies. This choice allows more than one classification to be assigned to a source, often with varying levels of detail. This is important not only due to the practical challenges outlined above, but also because some sources merit more than one classification (e.g. an eclipsing binary system containing a flaring star). The independence of binary classifiers allows for future updates to the taxonomies without a revision of the current results from each existing classifier.

+

We classify each ZTF light curve separately in recognition of systematics that may exist between ZTF fields and bands. Before posting results to Fritz, we aggregate these classification results on a source-by-source basis. The details of this workflow are described in the next section.

+
+
+

Classification process

+
+

Machine learning algorithms/training

+

We currently employ a convolutional/dense neural network (DNN) and gradient-boosted decision trees (XGBoost, XGB) to perform classification. The process is initially a regression problem, with classifiers assigning a classification probability that ranges between 0 and 1 for each source. We then apply a probability threshold to determine whether to include each source as a positive or negative example when minimizing the binary cross-entropy loss function.

+

We trained each binary classifier algorithm using a training set containing ~80,000 sources labeled manually (~170,000 light curves). The training set is available on Fritz in group 1458 (Golden Dataset Unique Sources).

+
+
+

Repeated workflow for transients

+

The following SCoPe workflow currently runs every two hours as a cron job:

+
    +
  • Query Fritz for GCN events within the last 7 days

  • +
  • For each event, query all candidates within the 95% confidence localization

  • +
  • For each candidate, query existing ZTF DR16 light curves within 0.5 arcsec

  • +
  • For ZTF light curves with 50 or more epochs of data, generate SCoPe features and run through all trained binary classifiers (DNN and XGB)

  • +
  • Consolidate light curve classifications by matching Gaia, AllWISE or Pan-STARRS1 IDs, computing the mean probabilities among all light curves for a source.

    +
      +
    • Each source will now have a set of classifications from both the DNN and XGB algorithms.

    • +
    +
  • +
  • For each ZTF source, compute mean classification probabilities between DNN and XGB results.

  • +
  • For classifications having a mean probability ≥ 0.7, post to the candidate page.

    +
      +
    • SCoPe classifications will be color-coded with blue text (instead of the default black) and will be preceded by the ML: prefix.

    • +
    • Note that these classifications do not pertain to the candidate itself, but persistent ZTF sources within 0.5 arcsec.

    • +
    • The time series and phase-folded ZTF light curves used for classification are posted as comments on their associated candidate.

    • +
    +
  • +
+
+
+
+

Classifier performance

+

The bar plots below show the precision and recall metrics for the DNN and XGB classifiers. ‘Missing’ bars indicate classifiers which did not have enough examples to train successfully. +dnn classifier precision/recall +xgb classifier precision/recall

+
+
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 0000000..8d785fb --- /dev/null +++ b/search.html @@ -0,0 +1,200 @@ + + + + + + Search + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +

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. +

+
+ + + +
+ +
+ +
+ +
+ +
+
+ + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..e927f42 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["developer", "field_guide", "field_guide__CVs", "field_guide__beta_lyr", "field_guide__bogus", "field_guide__cepheid", "field_guide__delta_scuti", "field_guide__flaring", "field_guide__lpv", "field_guide__periodic", "field_guide__rr_lyrae", "field_guide__variable", "field_guide__w_uma", "index", "license", "quickstart", "scanner", "usage"], "filenames": ["developer.md", "field_guide.md", "field_guide__CVs.md", "field_guide__beta_lyr.md", "field_guide__bogus.md", "field_guide__cepheid.md", "field_guide__delta_scuti.md", "field_guide__flaring.md", "field_guide__lpv.md", "field_guide__periodic.md", "field_guide__rr_lyrae.md", "field_guide__variable.md", "field_guide__w_uma.md", "index.rst", "license.md", "quickstart.md", "scanner.md", "usage.md"], "titles": ["Installation/Developer Guidelines", "Field guide", "Cataclysmic Variables (cv)", "Beta Lyr (blyr)", "Bogus variability (bogus)", "Classical Cepheids (ceph)", "Delta Scuti (dscu)", "Flaring variables (fla)", "Long Period Variables (lpv)", "Periodic Variables (pnp)", "RR Lyrae (rrlyr)", "Variable stars (vnv)", "W Uma (wuma)", "ZTF Variable Source Classification Project", "License", "Quick Start Guide", "Guide for Fritz Scanners", "Usage"], "terms": {"own": 0, "fork": 0, "scope": [0, 1, 13, 15, 16], "repositori": 0, "click": 0, "button": 0, "Then": 0, "decid": 0, "whether": [0, 14, 16, 17], "you": [0, 15, 17], "would": 0, "like": [0, 1, 10, 11, 17], "easier": 0, "beginn": 0, "follow": [0, 1, 2, 5, 14, 15, 16, 17], "one": [0, 1, 3, 16, 17], "below": [0, 1, 2, 15, 16, 17], "clone": 0, "download": [0, 13], "copi": [0, 14, 17], "remot": 0, "call": [0, 1, 3, 15, 16, 17], "upstream": 0, "point": [0, 1, 4, 17], "main": [0, 1, 2, 5, 6, 10, 12], "git": 0, "github": 0, "com": 0, "yournam": 0, "cd": 0, "add": [0, 17], "zwickytransientfacil": 0, "authent": [0, 17], "we": [0, 1, 16, 17], "current": [0, 15, 16, 17], "recommend": [0, 17], "run": [0, 13, 16], "python": [0, 17], "3": [0, 1, 3, 5, 6, 11, 15, 17], "10": [0, 1, 3, 5, 6, 7, 8, 10, 11, 12, 17], "mai": [0, 1, 3, 5, 15, 16, 17], "want": [0, 17], "begin": [0, 15, 17], "activ": [0, 1, 2, 7, 16, 17], "virtual": 0, "exampl": [0, 1, 8, 15, 16], "conda": 0, "specif": [0, 16, 17], "miniforge3": [0, 17], "forg": 0, "miniforg": 0, "onc": [0, 1, 7, 17], "have": [0, 1, 2, 5, 8, 9, 10, 12, 15, 16, 17], "n": [0, 1, 7, 17], "env": [0, 17], "c": [0, 1, 10, 14, 16], "healpi": 0, "ensur": [0, 17], "can": [0, 1, 2, 3, 4, 6, 7, 10, 12, 15, 16, 17], "import": [0, 1, 2, 15, 16, 17], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17], "variabl": [0, 3, 5, 6, 10, 12, 16, 17], "simpl": [0, 17], "text": [0, 16, 17], "editor": [0, 17], "nano": 0, "appropri": [0, 17], "file": [0, 13, 14, 15], "depend": [0, 1, 2, 11], "which": [0, 1, 2, 3, 4, 6, 7, 10, 12, 15, 16, 17], "shell": [0, 15], "ar": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17], "For": [0, 1, 10, 15, 16, 17], "bash": [0, 17], "bash_profil": 0, "line": [0, 1, 3, 17], "export": 0, "home": [0, 15, 17], "save": [0, 15, 17], "ctrl": 0, "o": [0, 17], "close": [0, 1, 2, 3, 5, 17], "reopen": 0, "termin": [0, 15], "thi": [0, 1, 4, 14, 15, 16, 17], "chang": [0, 1, 2, 6, 17], "recogn": [0, 1, 2], "back": 0, "again": [0, 17], "black": [0, 16], "format": [0, 13], "code": [0, 15, 16, 17], "flake8": 0, "verifi": 0, "compli": 0, "pep8": 0, "pleas": [0, 1, 17], "our": [0, 1, 3, 17], "hook": 0, "pip": 0, "check": 0, "befor": [0, 1, 7, 16, 17], "each": [0, 1, 3, 15, 16, 17], "thei": [0, 1, 2, 3, 5, 6, 8, 10, 17], "conform": 0, "style": 0, "standard": [0, 17], "reformat": 0, "The": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17], "lint": 0, "made": 0, "sourc": [0, 1, 4, 7, 15, 16], "skip": [0, 15, 17], "next": [0, 16, 17], "amd64": 0, "intel": 0, "need": [0, 17], "correct": 0, "version": 0, "architectur": [0, 17], "mac": [0, 17], "provid": [0, 1, 14, 15, 17], "an": [0, 1, 3, 14, 15, 16, 17], "effect": [0, 1, 10], "here": [0, 1, 15, 17], "metal": 0, "plugin": 0, "To": [0, 15, 17], "includ": [0, 1, 2, 7, 8, 9, 11, 14, 15, 16, 17], "gpu": [0, 15, 17], "after": [0, 1, 4, 15, 17], "successfulli": [0, 16, 17], "dep": 0, "softwar": [0, 14], "anyth": 0, "els": 0, "overwrit": 0, "dev": 0, "txt": [0, 17], "m1": 0, "directori": [0, 15, 17], "cp": 0, "f": [0, 1, 6, 10, 15], "remov": [0, 15, 17], "addon": 0, "should": [0, 15, 17], "now": [0, 16, 17], "list": [0, 15, 17], "deepdiff": 0, "5": [0, 1, 3, 6, 8, 10, 12, 16, 17], "0": [0, 1, 2, 3, 5, 6, 9, 10, 11, 12, 15, 16, 17], "gsutil": 0, "4": [0, 1, 2, 3, 6, 15, 17], "60": [0, 1, 7], "kera": [0, 17], "tuner": 0, "1": [0, 1, 2, 3, 5, 6, 8, 10, 11, 12, 15, 16, 17], "2": [0, 1, 2, 3, 5, 8, 10, 15, 17], "matplotlib": [0, 15], "pytest": 0, "6": [0, 1, 2, 5, 7, 15, 17], "questionari": 0, "8": [0, 1, 2, 5, 12, 17], "scikit": 0, "learn": [0, 13], "24": [0, 1, 5], "wandb": [0, 15, 17], "12": 0, "continu": [0, 17], "oper": [0, 17], "system": [0, 1, 3, 7, 12, 16, 17], "r": [0, 1, 2, 5, 6, 7, 10, 12, 16, 17], "default": [0, 15, 16, 17], "make": [0, 15, 17], "edit": 0, "kowalski": [0, 17], "instanc": [0, 17], "fritz": [0, 13, 15], "token": [0, 17], "associ": [0, 14, 16, 17], "empti": 0, "py": [0, 15, 17], "note": [0, 15, 16, 17], "pass": [0, 1, 6, 15, 17], "access": [0, 17], "databas": [0, 17], "If": [0, 15, 17], "do": [0, 1, 2, 8, 12, 14, 16, 17], "test_limit": 0, "more": [0, 1, 5, 9, 10, 11, 15, 16, 17], "limit": [0, 1, 5, 7, 11, 14, 17], "still": [0, 17], "upon": 0, "encount": 0, "error": [0, 15, 17], "manual": [0, 16, 17], "question": [0, 16], "xxx": 0, "re": 0, "across": [0, 16, 17], "platform": 0, "awar": [0, 1, 4], "11": 0, "anaconda": 0, "caus": [0, 1, 2, 4], "problem": [0, 16], "setup": [0, 17], "rais": 0, "dure": [0, 15, 17], "creation": 0, "On": [0, 16, 17], "machin": [0, 17], "cesium": [0, 17], "see": [0, 16, 17], "potenti": 0, "workaround": 0, "try": 0, "ml": [0, 16, 17], "org": 0, "doc": [0, 15], "html": 0, "within": [0, 1, 5, 12, 15, 16, 17], "featur": [0, 13, 15, 16], "gener": [0, 13, 15, 16], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 14, 15, 16], "critic": 0, "fail": 0, "e": [0, 1, 3, 6, 12, 15, 16, 17], "g": [0, 1, 2, 5, 6, 10, 12, 15, 16, 17], "tool": [0, 15, 17], "generate_featur": [0, 17], "through": [0, 1, 6, 16, 17], "pull": 0, "request": [0, 17], "propos": 0, "patch": 0, "latest": [0, 17], "new": [0, 1, 4, 16, 17], "branch": [0, 1, 10], "work": [0, 17], "let": 0, "": [0, 1, 4, 15, 16, 17], "sai": 0, "some": [0, 1, 2, 4, 5, 8, 11, 15, 16, 17], "document": [0, 14], "fix": [0, 1, 9], "ll": 0, "rewrit": 0, "contributor": 0, "checkout": 0, "b": [0, 1, 4, 17], "modif": 0, "messag": [0, 17], "consist": 0, "summari": 0, "longer": [0, 17], "descript": [0, 15], "while": [0, 1, 7, 17], "read": [0, 15, 17], "notic": [0, 14], "sever": [0, 1, 2, 5, 8], "place": [0, 1, 2, 15, 17], "were": [0, 1, 4], "out": [0, 14, 15, 17], "order": [0, 16, 17], "therefor": [0, 1, 11], "reorgan": 0, "logic": 0, "grammar": 0, "mistak": 0, "along": [0, 1, 17], "wai": [0, 1, 5, 15, 17], "when": [0, 1, 3, 4, 16, 17], "readi": 0, "push": 0, "origin": [0, 17], "upload": [0, 13], "print": [0, 17], "url": 0, "turn": [0, 1, 3], "open": [0, 15, 17], "browser": 0, "write": [0, 17], "inform": [0, 1, 15, 16, 17], "titl": [0, 15], "submit": [0, 15, 17], "team": 0, "review": [0, 17], "suggest": 0, "simplifi": 0, "incorpor": [0, 1, 8], "automat": [0, 17], "track": [0, 17], "sometim": [0, 1, 2, 10], "result": [0, 15, 16, 17], "conflict": 0, "two": [0, 1, 3, 10, 12, 13, 17], "resolv": 0, "situat": 0, "merg": [0, 14, 17], "rebas": 0, "look": 0, "detail": [0, 1, 15, 16], "discuss": [0, 17], "both": [0, 1, 5, 6, 12, 16, 17], "accept": 0, "sinc": [0, 1, 5, 6, 10, 17], "squash": 0, "pr": 0, "prefer": 0, "first": [0, 1, 4, 5, 8, 16, 17], "option": [0, 17], "mani": [0, 1, 7, 9, 11], "time": [0, 1, 4, 9, 11, 15, 16, 17], "ha": [0, 1, 11, 17], "been": [0, 17], "approv": 0, "least": [0, 1, 3, 15], "member": 0, "sure": 0, "describ": [0, 16, 17], "abov": [0, 1, 4, 14, 15, 16, 17], "under": [0, 1, 8, 17], "field_guid": 0, "object_class_typ": 0, "rr_lyr_ab": 0, "specifi": [0, 15, 17], "object": [0, 1, 4, 9, 11, 16, 17], "coordin": [0, 17], "light": [0, 15, 16, 17], "curv": [0, 15, 16, 17], "plot": [0, 13, 16, 17], "period": [0, 2, 3, 5, 6, 10, 11, 12, 13, 15, 16, 17], "dai": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 16, 17], "phase": [0, 1, 3, 16, 17], "fold": [0, 1, 3, 16, 17], "also": [0, 1, 3, 7, 15, 16, 17], "render": 0, "contain": [0, 15, 16, 17], "valid": [0, 15], "account": [0, 15, 17], "templat": 0, "structur": [0, 17], "same": [0, 1, 7, 17], "propag": 0, "otherwis": [0, 14, 17], "util": [0, 15, 17], "later": [0, 1, 4], "complain": 0, "ask": 0, "markdown": 0, "field_guide__": 0, "object_class": 0, "md": 0, "field_guide__rr_lyra": 0, "data": [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 17], "png": 0, "info": [0, 15, 17], "statement": 0, "wish": [0, 17], "sampl": [0, 17], "gaia": [0, 1, 5, 8, 16, 17], "base": [0, 16, 17], "hr": [0, 1, 10], "diagram": [0, 1, 5, 10], "golden": [0, 16], "class": [0, 16, 17], "put": 0, "csv": [0, 17], "must": [0, 17], "rr_lyr": 0, "keep": [0, 17], "header": 0, "ra": [0, 17], "dec": [0, 17], "degre": [0, 1, 5], "hr__": 0, "command": [0, 17], "imageri": 0, "build": [0, 17], "success": [0, 17], "_build": 0, "index": [0, 17], "happi": 0, "action": [0, 14, 17], "ci": 0, "subset": 0, "deploy": 0, "pipelin": [0, 17], "get": [0, 17], "green": [0, 1, 5, 6], "checkmark": 0, "hash": 0, "deploi": 0, "ztf": [0, 16], "about": [1, 2, 3, 5, 6, 7, 8, 10, 12, 16, 17], "differ": [1, 2, 12, 13, 15], "type": [1, 2, 3, 6, 7, 8, 10, 17], "proce": 1, "interact": [1, 15, 17], "inspect": 1, "taxonomi": [1, 13], "tree": [1, 16], "emploi": [1, 16], "arxiv": [1, 7, 8, 9, 11, 17], "2102": [1, 17], "11304": [1, 17], "whose": [1, 11], "bright": [1, 2, 4, 5, 6, 7, 11, 12, 17], "vari": [1, 9, 11, 16], "statist": [1, 11, 17], "signific": [1, 5, 6, 10, 11, 17], "level": [1, 2, 7, 9, 11, 16, 17], "measur": [1, 5, 11], "magnitud": [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17], "down": [1, 11], "millimagnitud": [1, 9, 11], "mag": [1, 2, 3, 5, 8, 10, 11, 12, 17], "detect": [1, 6, 7, 10, 11], "astrophys": [1, 4, 9, 11, 16], "exhibit": [1, 9, 11], "behavior": [1, 9, 11], "eclips": [1, 3, 9, 11, 12, 16], "binari": [1, 2, 3, 7, 9, 10, 11, 12, 13, 15, 17], "pulsat": [1, 5, 6, 8, 9, 10, 11, 16], "etc": [1, 3, 9, 11], "non": [1, 2, 8, 11], "agn": [1, 11, 16, 17], "yso": [1, 8, 11, 16, 17], "subtyp": [1, 2, 8, 9, 10, 11], "irregular": [1, 11, 16], "dip": [1, 3, 11], "scale": [1, 11, 17], "most": [1, 3, 7, 11], "defin": [1, 11, 17], "those": [1, 11, 17], "variat": [1, 3, 5, 6, 8, 9, 11], "amplitud": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17], "survei": [1, 7, 9, 11], "precis": [1, 7, 9, 11, 15, 16], "than": [1, 5, 6, 9, 11, 16, 17], "jayasingh": [1, 11], "et": [1, 5, 7, 8, 9, 11, 12], "al": [1, 5, 7, 8, 9, 11, 12], "2018": [1, 5, 8, 11], "mnra": [1, 11, 12], "447": [1, 11], "asa": [1, 11], "sn": [1, 11], "catalogu": [1, 8, 11], "serendipit": [1, 11], "1803": [1, 11], "01001": [1, 11], "repeat": [1, 9], "sequenc": [1, 2, 6, 9, 10, 12, 17], "valu": [1, 9, 17], "over": [1, 8, 9, 12, 15, 17], "length": [1, 9], "known": [1, 7, 9], "supertyp": [1, 2, 3, 5, 6, 7, 8, 9, 10, 12], "sinusoid": [1, 3, 8, 9, 10, 16], "sawtooth": [1, 2, 5, 6, 9, 10, 16], "ellipt": [1, 9], "rang": [1, 2, 3, 5, 6, 8, 9, 10, 12, 16, 17], "minut": [1, 7, 9, 17], "thousand": [1, 2, 8, 9], "001": [1, 9], "1000": [1, 8, 9, 15, 17], "drake": [1, 9], "2014": [1, 9], "apj": [1, 9], "618": [1, 8, 9], "213": [1, 9], "9": [1, 2, 9, 17], "catalina": [1, 9], "catalog": [1, 5, 8, 9, 17], "1405": [1, 9], "4290": [1, 9], "horizont": [1, 10], "da": [1, 10], "df": [1, 10], "mass": [1, 2, 10, 12], "solar": [1, 5, 10], "part": [1, 10, 17], "instabl": [1, 2, 5, 6, 10], "strip": [1, 5, 6, 10], "where": [1, 7, 10, 17], "due": [1, 2, 7, 8, 10, 12, 15, 16], "doubl": [1, 10], "ionis": [1, 10], "he": [1, 10], "ab": [1, 10, 16], "occurr": [1, 2, 3, 5, 6, 7, 8, 10, 12], "rate": [1, 2, 3, 5, 6, 7, 8, 10, 12], "veri": [1, 3, 6, 7, 8, 10, 12], "common": [1, 2, 3, 6, 7, 8, 10, 12], "expect": [1, 2, 3, 5, 6, 8, 10, 12], "easi": [1, 2, 5, 6, 7, 8, 10, 15], "recognis": [1, 5, 6, 7, 10], "distinct": [1, 2, 5, 6, 10, 12], "shape": [1, 2, 3, 5, 6, 8, 10, 12], "high": [1, 2, 5, 10, 16, 17], "bit": [1, 10], "challeng": [1, 10, 16], "low": [1, 2, 10, 16, 17], "snr": [1, 10], "case": [1, 10, 12], "confus": [1, 2, 4, 8, 10], "contact": [1, 10, 12], "ew": [1, 10, 12, 16, 17], "occur": [1, 7, 10], "similar": [1, 10, 12, 16, 17], "up": [1, 10, 12, 13, 17], "steep": [1, 2, 5, 6, 10], "rise": [1, 2, 3, 5, 6, 10], "slow": [1, 2, 5, 6, 8, 10], "decai": [1, 2, 5, 6, 10], "show": [1, 2, 5, 6, 10, 12, 15, 16], "modul": [1, 2, 10, 17], "timescal": [1, 2, 10, 16], "100": [1, 5, 7, 8, 10, 17], "blazhko": [1, 10], "intrins": [1, 2, 4, 5, 6, 8, 10], "color": [1, 2, 5, 6, 8, 10, 15, 16, 17], "blue": [1, 2, 5, 6, 10, 15, 16], "A": [1, 5, 6, 8, 10, 14, 15, 17], "redden": [1, 2, 5, 6, 10], "larg": [1, 3, 5, 6, 8, 10, 12, 17], "distanc": [1, 5, 6, 10, 17], "absolut": [1, 2, 5, 6, 8, 10, 12, 17], "sterken": [1, 3, 6, 10, 12], "jasschek": [1, 3, 6, 10, 12], "overcontact": [1, 12], "In": [1, 12, 16, 17], "too": [1, 12, 17], "roch": [1, 12], "lobe": [1, 12], "share": [1, 12], "envelop": [1, 12], "exchang": [1, 12], "energi": [1, 12], "ratio": [1, 5, 12, 17], "extrem": [1, 12], "compon": [1, 12, 17], "raddii": [1, 12], "surfac": [1, 2, 12], "temperatur": [1, 6, 12], "4000": [1, 12], "9000k": [1, 12], "lightcurv": [1, 12], "smoothli": [1, 12], "transit": [1, 12], "flat": [1, 12], "bottom": [1, 12], "depth": [1, 12], "often": [1, 12, 16, 17], "ident": [1, 12], "slightli": [1, 2, 12], "rare": [1, 5, 12], "maxima": [1, 12], "starspot": [1, 12], "22": [1, 12], "75": [1, 3, 12], "v": [1, 3, 12], "smooth": [1, 3, 5, 6, 12], "equal": [1, 12], "1mag": [1, 12], "short": [1, 6, 12], "typic": [1, 3, 5, 6, 12], "redder": [1, 12], "marsh": [1, 12], "465": [1, 12], "4678": [1, 12], "4689": [1, 12], "2017": [1, 12], "As": [1, 6], "expand": [1, 6], "contract": [1, 6, 14], "size": [1, 6, 15, 17], "lead": [1, 3, 6], "regular": [1, 6, 16], "smaller": [1, 6], "oscil": [1, 6], "anywher": [1, 6], "between": [1, 3, 5, 6, 13, 16], "03": [1, 6], "distinguish": [1, 6], "them": [1, 6, 17], "small": [1, 3, 6, 8, 16, 17], "05": [1, 6, 17], "filter": [1, 5, 6, 17], "stronger": [1, 5, 6], "pattern": [1, 5, 6, 17], "young": [1, 5, 16], "000": [1, 5, 16], "luminos": [1, 5], "supergi": [1, 5], "locat": [1, 5, 15, 17], "h": [1, 5], "famou": [1, 5], "relat": [1, 5], "allow": [1, 5, 16, 17], "thu": [1, 5], "its": [1, 5], "infer": [1, 5, 13], "us": [1, 4, 5, 14, 15, 16, 17], "nearbi": [1, 4, 5, 17], "galaxi": [1, 5], "mostli": [1, 5], "galact": [1, 2, 5, 16], "plane": [1, 2, 5], "m31": [1, 5], "fundament": [1, 5], "mode": [1, 5, 17], "rapid": [1, 5], "maximum": [1, 5, 17], "slower": [1, 5], "declin": [1, 2, 5], "secondari": [1, 5], "bump": [1, 5], "seen": [1, 5], "20": [1, 3, 5, 17], "overton": [1, 5], "lower": [1, 5], "symmetr": [1, 2, 5], "Their": [1, 5], "milki": [1, 5], "arbitrari": [1, 5], "natur": [1, 4, 5], "boundari": [1, 5], "68": [1, 5], "77": [1, 5], "moder": [1, 5], "bp": [1, 5, 17], "rp": [1, 5, 17], "soszynski": [1, 5, 8], "2008": [1, 5, 8], "optic": [1, 5, 8], "gravit": [1, 5, 8], "lens": [1, 5, 8], "experi": [1, 5, 8, 17], "ogl": [1, 5, 8, 16], "iii": [1, 5, 8], "magellan": [1, 5, 8], "cloud": [1, 5, 8], "udalski": [1, 5], "collect": [1, 5, 17], "rimoldini": [1, 5], "l": [1, 5, 17], "2019": [1, 5], "releas": [1, 4, 5], "all": [1, 4, 5, 14, 15, 16, 17], "sky": [1, 5, 17], "skowron": [1, 5], "d": [1, 5, 16], "2020": [1, 5, 7], "three": [1, 5, 15], "dimension": [1, 5], "map": [1, 5, 13], "transfer": [1, 2], "late": [1, 2], "brown": [1, 2], "dwarf": [1, 2, 7], "white": [1, 2], "There": [1, 2, 17], "These": [1, 2, 4, 15, 17], "nova": [1, 2, 7], "15": [1, 2, 15], "outburst": [1, 2, 7], "thermonuclear": [1, 2], "event": [1, 2, 14, 16, 17], "week": [1, 2, 17], "decad": [1, 2], "disk": [1, 2, 7, 17], "novalik": [1, 2], "state": [1, 2, 17], "accret": [1, 2, 7], "aperiod": [1, 2], "orbit": [1, 2, 3], "u": [1, 2], "gem": [1, 2], "z": [1, 2, 17], "cam": [1, 2], "su": [1, 2], "wz": [1, 2, 7], "sge": [1, 2, 7], "supernova": [1, 2], "recur": [1, 2], "standstil": [1, 2], "fast": [1, 2], "extend": [1, 2, 4], "plateau": [1, 2], "steeper": [1, 2], "either": [1, 2], "hour": [1, 2, 7, 16, 17], "usual": [1, 2, 17], "except": [1, 2, 17], "quiescenc": [1, 2, 7], "14": [1, 2], "warner": [1, 2], "1995": [1, 2], "phenomelog": [1, 7], "ani": [1, 3, 7, 14, 17], "kind": [1, 4, 7, 14, 16], "dramat": [1, 7], "increas": [1, 7, 17], "return": [1, 7, 17], "red": [1, 7, 8, 15, 16], "canum": [1, 7], "venaticorum": [1, 7], "cvn": [1, 7, 16], "companion": [1, 7], "possibl": [1, 7, 8, 15, 16], "aris": [1, 7, 14], "given": [1, 7], "10\u00b3\u00b9": [1, 7], "10\u00b3\u00b2": [1, 7], "erg": [1, 7], "per": [1, 7, 17], "10\u00b3\u00b3": [1, 7], "10\u00b3\u2074": [1, 7], "quiescent": [1, 7], "rapidli": [1, 7, 17], "shortli": [1, 7], "thereaft": [1, 7], "end": [1, 7], "dim": [1, 7], "photometr": [1, 7], "taichi": [1, 7], "kato": [1, 7], "public": [1, 7], "astronom": [1, 7, 8], "societi": [1, 7], "japan": [1, 7], "volum": [1, 7], "67": [1, 7], "issu": [1, 7, 17], "decemb": [1, 7], "2015": [1, 7], "108": [1, 7], "1507": [1, 7], "07659": [1, 7], "maximilian": [1, 7], "g\u00fcnther": [1, 7], "aj": [1, 7], "159": [1, 7], "1901": [1, 7], "00443": [1, 7], "semi": [1, 3, 16], "detach": [1, 3], "around": [1, 3, 17], "align": [1, 3], "rel": [1, 3, 17], "sight": [1, 3], "earth": [1, 3], "unlik": [1, 3, 17], "eb": [1, 3, 16, 17], "detatch": [1, 3], "so": [1, 3, 14, 17], "distort": [1, 3], "give": [1, 3], "even": [1, 3, 16], "hot": [1, 3], "cool": [1, 3, 8], "though": [1, 3], "observ": [1, 3], "onli": [1, 3, 16, 17], "sensit": [1, 3], "intermedi": [1, 3], "log": [1, 3, 17], "round": [1, 3, 15], "impos": [1, 3], "ten": [1, 8], "variou": [1, 8], "group": [1, 8, 15, 16, 17], "lumin": [1, 8], "canon": [1, 8], "mira": [1, 8, 16], "semiregular": [1, 8], "osarg": [1, 8, 16], "giant": [1, 8, 16], "wth": [1, 8], "rv": [1, 8], "tau": [1, 8], "ii": [1, 8, 16], "tend": [1, 8], "shorter": [1, 8], "identifi": [1, 4, 8, 17], "few": [1, 8], "tenth": [1, 8], "mowlawi": [1, 8], "a58": [1, 8], "candid": [1, 8, 16, 17], "1805": [1, 8], "02035": [1, 8], "2009": [1, 8], "aca": [1, 8], "59": [1, 8], "239": [1, 8], "iv": [1, 8], "arxix": [1, 8], "0910": [1, 8], "1354": [1, 8], "58": [1, 8], "293": [1, 8], "anomal": [1, 8], "0811": [1, 8], "3636": [1, 8], "Not": [1, 4, 17], "pertain": [1, 4, 16], "blend": [1, 4, 16], "imag": [1, 4], "artifact": [1, 4], "being": [1, 4, 17], "how": [1, 4, 17], "appear": [1, 4], "help": [1, 4, 17], "avoid": [1, 4, 17], "demonstr": [1, 4, 17], "satur": [1, 4], "ghost": [1, 4], "second": [1, 4, 17], "suffer": [1, 4], "anoth": [1, 4, 15], "affect": [1, 4, 16], "mask": [1, 4], "began": [1, 4], "earlier": [1, 4], "retroact": [1, 4], "produc": [1, 4, 17], "appar": [1, 4], "cutoff": [1, 4], "certain": [1, 4], "departur": [1, 4], "median": [1, 4, 17], "multipl": [1, 4, 17], "suddenli": [1, 4], "stop": [1, 4, 17], "correspond": [1, 4, 17], "process": [1, 4, 13, 17], "wa": [1, 4], "explanatori": [1, 4], "supplement": [1, 4], "esp": [1, 4], "appendix": [1, 4], "star": [2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 16, 17], "uma": [2, 13, 16], "flare": [2, 4, 11, 13, 16, 17], "long": [2, 11, 13, 16, 17], "lyra": [3, 6, 13], "other": [3, 7, 14, 17], "method": [4, 17], "delta": [5, 13, 16], "scuti": [5, 13], "classic": [6, 13], "cepheid": [6, 8, 13, 16], "rr": [6, 13, 16], "cataclysm": [7, 13, 16, 17], "instal": [13, 15, 17], "develop": [13, 15], "guidelin": [13, 15], "initi": [13, 16, 17], "step": [13, 17], "set": [13, 15, 16, 17], "your": [13, 15, 17], "environ": 13, "window": [13, 15, 17], "linux": [13, 17], "maco": 13, "contribut": 13, "field": [13, 15, 16], "guid": [13, 17], "section": [13, 15, 16, 17], "quick": 13, "start": [13, 17], "modifi": [13, 14, 17], "config": [13, 17], "yaml": [13, 17], "train": 13, "classifi": [13, 17], "perform": [13, 17], "examin": 13, "predict": 13, "usag": [13, 15], "id": [13, 16], "ccd": 13, "quadrant": 13, "deep": 13, "model": 13, "handl": 13, "column": [13, 15], "name": [13, 15], "definit": [13, 15, 16], "autom": 13, "analys": 13, "gcn": [13, 16], "manag": 13, "annot": 13, "disagr": 13, "scanner": [13, 15, 17], "independ": 13, "vnv": [13, 15, 16, 17], "pnp": [13, 16, 17], "rrlyr": [13, 16, 17], "w": [13, 16], "wuma": [13, 16, 17], "dscu": [13, 16, 17], "ceph": [13, 16, 17], "cv": [13, 16, 17], "fla": [13, 16, 17], "beta": [13, 16], "lyr": [13, 16], "blyr": [13, 16, 17], "lpv": [13, 16, 17], "bogu": 13, "licens": 13, "mit": 14, "copyright": 14, "2021": 14, "zwicki": 14, "transient": [14, 17], "facil": 14, "permiss": [14, 15, 17], "herebi": 14, "grant": 14, "free": [14, 15], "charg": 14, "person": 14, "obtain": [14, 17], "deal": 14, "without": [14, 16, 17], "restrict": 14, "right": [14, 17], "publish": 14, "distribut": 14, "sublicens": 14, "sell": 14, "permit": 14, "whom": 14, "furnish": 14, "subject": 14, "condit": [14, 15], "shall": 14, "substanti": 14, "portion": 14, "THE": 14, "AS": 14, "warranti": 14, "OF": 14, "express": 14, "OR": [14, 17], "impli": 14, "BUT": 14, "NOT": 14, "TO": 14, "merchant": 14, "fit": 14, "FOR": 14, "particular": 14, "purpos": [14, 17], "AND": 14, "noninfring": 14, "IN": 14, "NO": 14, "author": 14, "holder": 14, "BE": 14, "liabl": 14, "claim": 14, "damag": 14, "liabil": 14, "tort": 14, "connect": [14, 17], "WITH": 14, "intend": [15, 17], "facilit": 15, "complet": [15, 17], "found": 15, "assum": 15, "elsewher": 15, "adjust": 15, "necessari": [15, 17], "filepath": 15, "dataset": [15, 16, 17], "path": [15, 17], "partial": 15, "trainingset": 15, "parquet": [15, 17], "itself": [15, 16, 17], "xgboost": [15, 16, 17], "tag": [15, 17], "algorithm": [15, 17], "xgb": [15, 16, 17], "ss23": 15, "period_suffix": [15, 17], "els_ece_eaov": [15, 17], "epoch": [15, 16, 17], "30": [15, 17], "verbos": [15, 17], "skip_cv": 15, "abbrevi": [15, 16], "classif": 15, "support": [15, 17], "neural": [15, 16], "network": [15, 16], "dnn": [15, 16, 17], "determin": [15, 16, 17], "acceler": 15, "lomb": 15, "scargl": 15, "approach": 15, "el": [15, 17], "entropi": [15, 16], "ec": [15, 17], "analysi": [15, 17], "varianc": [15, 17], "aov": [15, 17], "nest": 15, "store": [15, 17], "suffix": [15, 17], "min_count": [15, 17], "requir": [15, 17], "posit": [15, 16], "take": [15, 17], "cross": [15, 16], "interest": [15, 17], "full": [15, 17], "grid": 15, "search": [15, 17], "hyperparamet": 15, "optim": [15, 17], "weight": [15, 17], "bias": [15, 17], "sweep": 15, "http": 15, "ai": 15, "creat": [15, 17], "run_sweep": 15, "keyword": [15, 17], "doe": [15, 17], "hidden": 15, "layer": [15, 17], "estim": 15, "computation": 15, "expens": 15, "compar": [15, 17], "create_training_script": [15, 17], "filenam": [15, 17], "train_xgb": 15, "sh": [15, 17], "add_keyword": [15, 17], "chmod": [15, 17], "x": [15, 17], "label": [15, 16, 17], "sequenti": 15, "throw": [15, 17], "alreadi": 15, "exist": [15, 16, 17], "train_algorithm_slurm": 15, "train_algorithm_job_submiss": 15, "slurm": 15, "parallel": [15, 17], "diagnost": 15, "json": [15, 17], "report": 15, "pathlib": 15, "path_model": 15, "models_xgb": [15, 17], "path_stat": 15, "glob": 15, "val": 15, "stat": [15, 17], "load": 15, "bar": [15, 16], "recal": [15, 16], "pyplot": 15, "plt": 15, "figur": 15, "figsiz": 15, "rcparam": 15, "font": 15, "13": 15, "width": 15, "legend": 15, "ncol": 15, "loc": 15, "ylim": 15, "xlim": 15, "ylabel": 15, "score": [15, 16, 17], "loop": [15, 17], "297": 15, "generated_featur": [15, 17], "create_inference_script": [15, 17], "get_all_preds_xgb": 15, "group_nam": 15, "feature_directori": 15, "desir": [15, 17], "imput": [15, 17], "miss": [15, 16, 17], "strategi": [15, 17], "run_inference_slurm": 15, "run_inference_job_submiss": 15, "probabl": [15, 16, 17], "By": [15, 17], "path_pr": 15, "preds_xgb": [15, 17], "field_297": 15, "read_parquet": [15, 17], "offer": [15, 17], "panda": [15, 17], "datafram": [15, 17], "pred": 15, "page": [16, 17], "It": [16, 17], "post": [16, 17], "explan": [16, 17], "goal": 16, "reliabl": 16, "much": 16, "broad": 16, "factor": [16, 17], "quantiti": 16, "qualiti": 16, "With": 16, "mind": 16, "adopt": 16, "sitewid": 16, "tabl": 16, "pul": [16, 17], "nucleu": 16, "stellar": 16, "bi": [16, 17], "scu": 16, "pop": [16, 17], "ceph2": 16, "popul": [16, 17], "m": 16, "emsm": 16, "rscvn": [16, 17], "rrab": 16, "rrc": 16, "rrd": 16, "mir": [16, 17], "srv": [16, 17], "refer": [16, 17], "consider": 16, "phenomenologi": 16, "sin": 16, "saw": 16, "longt": [16, 17], "ea": [16, 17], "everi": [16, 17], "choic": [16, 17], "assign": [16, 17], "practic": 16, "outlin": 16, "becaus": [16, 17], "merit": 16, "futur": [16, 17], "updat": [16, 17], "revis": 16, "separ": [16, 17], "recognit": 16, "systemat": 16, "band": 16, "aggreg": 16, "basi": 16, "convolut": 16, "dens": 16, "gradient": 16, "boost": 16, "decis": 16, "regress": 16, "appli": [16, 17], "threshold": [16, 17], "neg": 16, "minim": 16, "loss": 16, "function": [16, 17], "80": 16, "170": 16, "avail": [16, 17], "1458": 16, "uniqu": [16, 17], "cron": 16, "job": 16, "queri": [16, 17], "last": [16, 17], "7": [16, 17], "95": 16, "confid": [16, 17], "local": [16, 17], "dr16": 16, "arcsec": [16, 17], "50": [16, 17], "consolid": 16, "match": [16, 17], "allwis": [16, 17], "pan": 16, "starrs1": 16, "comput": [16, 17], "mean": [16, 17], "among": [16, 17], "instead": [16, 17], "preced": 16, "prefix": [16, 17], "persist": [16, 17], "seri": [16, 17], "comment": [16, 17], "metric": 16, "indic": 16, "did": 16, "enough": 16, "hdf5": 17, "singl": 17, "quad": 17, "pair": 17, "get_quad_id": 17, "ztf_source_features_dr16": 17, "301": 17, "minob": 17, "10000": 17, "multi": 17, "whole": 17, "get_featur": 17, "individu": 17, "invok": 17, "path_dataset": 17, "d15": 17, "batch_siz": 17, "64": 17, "pre_trained_model": 17, "20221117_001502": 17, "h5": 17, "metadata": 17, "configur": 17, "could": 17, "overridden": 17, "argument": 17, "32": 17, "nn": 17, "tensorflow": 17, "api": 17, "implement": 17, "directli": 17, "inferenc": 17, "param": 17, "paramet": 17, "hide": 17, "complex": 17, "rug": 17, "googl": 17, "drive": 17, "folder": 17, "referenc": 17, "feature_stat": 17, "project": 17, "credenti": 17, "famili": 17, "echo": 17, "42": 17, "scale_featur": 17, "min_max": 17, "300": 17, "patienc": 17, "random_st": 17, "conv_branch": 17, "true": 17, "done": 17, "train_dnn": 17, "pre_trained_group_nam": 17, "new_experi": 17, "input": 17, "taken": 17, "string": 17, "serv": 17, "catch": 17, "user": 17, "train_al": 17, "output": 17, "regardless": 17, "pre": 17, "field_numb": 17, "whole_field": 17, "impute_missing_featur": 17, "ccd_number": 17, "quad_numb": 17, "dogpu": 17, "ad": 17, "get_all_pr": 17, "models_dnn": 17, "root": 17, "respect": 17, "preds_dnn": 17, "row": 17, "specific_id": 17, "manipul": 17, "advantag": 17, "drawback": 17, "comma": 17, "plain": 17, "human": 17, "readabl": 17, "space": 17, "read_csv": 17, "to_csv": 17, "hierarch": 17, "form": 17, "less": 17, "faster": 17, "numer": 17, "serial": 17, "numpi": 17, "arrai": 17, "improv": 17, "diminish": 17, "read_hdf": 17, "to_hdf": 17, "packag": 17, "pytabl": 17, "apach": 17, "to_parquet": 17, "pyarrow": 17, "meant": 17, "address": 17, "mapper": 17, "entri": 17, "kei": 17, "establish": 17, "ignor": 17, "fritz_label": 17, "taxonomy_id": 17, "golden_dataset_mapp": 17, "dnn_al_mapp": 17, "1012": 17, "1011": 17, "adapt": 17, "ztfperiod": 17, "calcul": 17, "fourier": 17, "cluster": 17, "resourc": 17, "via": 17, "featuregener": 17, "lcstat": 17, "host": 17, "find": 17, "periodsearch": 17, "cpu": 17, "yet": 17, "aov_cython": 17, "pyaov": 17, "newli": 17, "cpython": 17, "310": 17, "darwin": 17, "lib": 17, "python3": 17, "site": 17, "equival": 17, "cuda": 17, "source_catalog": 17, "str": 17, "alerts_catalog": 17, "alert": 17, "gaia_catalog": 17, "bright_star_query_radius_arcsec": 17, "angular": 17, "float": 17, "xmatch_radius_arcsec": 17, "extern": 17, "kowalski_inst": 17, "dictionari": 17, "penquin": 17, "dict": 17, "number": 17, "batch": 17, "int": 17, "period_algorithm": 17, "normal": 17, "period_batch_s": 17, "simultan": 17, "docpu": 17, "flag": 17, "bool": 17, "samples_per_peak": 17, "periodogram": 17, "peak": 17, "doscaleminperiod": 17, "min": 17, "min_cadence_minut": 17, "max_freq": 17, "doremoveterrestri": 17, "terrestri": 17, "frequenc": 17, "ncore": 17, "core": 17, "min_n_lc_point": 17, "minimum": 17, "cadenc": 17, "higher": 17, "drop": 17, "dirnam": 17, "docesium": 17, "donotsav": 17, "stop_earli": 17, "entir": 17, "test": 17, "doquadrantfil": 17, "jobid": 17, "quadrant_fil": 17, "quadrant_index": 17, "dospecificid": 17, "ztf_id": 17, "skipclosesourc": 17, "top_n_period": 17, "eaov": 17, "feature_df": 17, "ztf_sources_20230109": 17, "ztf_alert": 17, "gaia_edr3": 17, "query_size_limit": 17, "gen_featur": 17, "likewis": 17, "neither": 17, "bheali": 17, "generated_features_dr15": 17, "dat": 17, "5738": 17, "amount": 17, "durat": 17, "alloc": 17, "generate_features_slurm": 17, "generate_features_job_submiss": 17, "receiv": 17, "begun": 17, "job_nam": 17, "cluster_nam": 17, "hpc": 17, "partition_typ": 17, "partit": 17, "node": 17, "memory_gb": 17, "memori": 17, "gb": 17, "mail_us": 17, "email": 17, "account_nam": 17, "python_env_nam": 17, "kowalski_instance_nam": 17, "generatequadrantfil": 17, "max_inst": 17, "wait_time_minut": 17, "wait": 17, "statu": 17, "dosubmitloop": 17, "until": 17, "hard": 17, "runparallel": 17, "usernam": 17, "squeue": 17, "anderson": 17, "darl": 17, "chi2r": 17, "reduc": 17, "chi": 17, "f1_bic": 17, "bayesian": 17, "criterion": 17, "f1_a": 17, "coeffici": 17, "f1_amp": 17, "f1_b": 17, "f1_phi0": 17, "zero": 17, "f1_power": 17, "power": 17, "f1_relamp1": 17, "f1_relamp2": 17, "f1_relamp3": 17, "third": 17, "f1_relamp4": 17, "fourth": 17, "f1_relphi1": 17, "f1_relphi2": 17, "f1_relphi3": 17, "f1_relphi4": 17, "i60r": 17, "20th": 17, "80th": 17, "percentil": 17, "i70r": 17, "15th": 17, "85th": 17, "i80r": 17, "10th": 17, "90th": 17, "i90r": 17, "5th": 17, "95th": 17, "inv_vonneumannratio": 17, "invers": 17, "von": 17, "neumann": 17, "iqr": 17, "25th": 17, "75th": 17, "median_abs_dev": 17, "deviat": 17, "norm_excess_var": 17, "excess": 17, "norm_peak_to_peak_amp": 17, "rom": 17, "squar": 17, "skew": 17, "smallkurt": 17, "kurtosi": 17, "stetson_j": 17, "stetson": 17, "j": 17, "stetson_k": 17, "k": 17, "sw": 17, "shapiro": 17, "wilk": 17, "welch_i": 17, "welch": 17, "wmean": 17, "magtnidu": 17, "wstd": 17, "dmdt": 17, "histogram": 17, "26x26": 17, "mean_ztf_alert_braai": 17, "n_ztf_alert": 17, "subscript": 17, "allwise_w1mpro": 17, "w1": 17, "allwise_w1sigmpro": 17, "allwise_w2mpro": 17, "w2": 17, "allwise_w2sigmpro": 17, "allwise_w3mpro": 17, "w3": 17, "allwise_w4mpro": 17, "w4": 17, "gaia_edr3__parallax": 17, "parallax": 17, "gaia_edr3__phot_bp_mean_mag": 17, "gaia_edr3__phot_bp_rp_excess_factor": 17, "gaia_edr3__phot_g_mean_mag": 17, "gaia_edr3__phot_rp_mean_mag": 17, "ps1_dr1__gmeanpsfmag": 17, "ps1": 17, "ps1_dr1__gmeanpsfmagerr": 17, "ps1_dr1__rmeanpsfmag": 17, "ps1_dr1__rmeanpsfmagerr": 17, "ps1_dr1__imeanpsfmag": 17, "ps1_dr1__imeanpsfmagerr": 17, "ps1_dr1__zmeanpsfmag": 17, "ps1_dr1__zmeanpsfmagerr": 17, "ps1_dr1__ymeanpsfmag": 17, "y": 17, "ps1_dr1__ymeanpsfmagerr": 17, "primari": 17, "deliver": 17, "billion": 17, "assembl": 17, "studi": 17, "expans": 17, "realm": 17, "know": 17, "involv": 17, "straightforward": 17, "present": 17, "howev": 17, "workflow": 17, "custom": 17, "repeatedli": 17, "landscap": 17, "gcn_cronjob": 17, "interv": 17, "simplic": 17, "foster": 17, "compat": 17, "trade": 17, "off": 17, "extra": 17, "familiar": 17, "emac": 17, "crontab": 17, "replac": 17, "log_gcn_cronjob": 17, "increment": 17, "left": 17, "five": 17, "month": 17, "divis": 17, "guru": 17, "syntax": 17, "charact": 17, "forward": 17, "what": 17, "final": 17, "suppress": 17, "unnecessari": 17, "finish": 17, "newlin": 17, "respond": 17, "affirm": 17, "uninstal": 17, "cannot": 17, "overlook": 17, "pythonpath": 17, "opt": 17, "homebrew": 17, "bin": 17, "gtimeout": 17, "2h": 17, "runtim": 17, "brew": 17, "coreutil": 17, "timeout": 17, "come": 17, "usr": 17, "top": 17, "explicitli": 17, "conclud": 17, "send": 17, "dedic": 17, "overwritten": 17, "One": 17, "p": 17, "aux": 17, "grep": 17, "alwai": 17, "item": 17, "repres": 17, "just": 17, "ran": 17, "obj_id": 17, "pars": 17, "group_id": 17, "target": 17, "merge_featur": 17, "features_catalog": 17, "features_limit": 17, "taxonomy_map": 17, "output_dir": 17, "output_filenam": 17, "output_format": 17, "get_ztf_filt": 17, "impute_featur": 17, "update_training_set": 17, "vote": 17, "updated_training_set_prefix": 17, "min_vote_diff": 17, "net": 17, "upvot": 17, "downvot": 17, "caution": 17, "bulk": 17, "append": 17, "period_origin": 17, "ztf_id_origin": 17, "scope_download_classif": 17, "360": 17, "361": 17, "5000": 17, "fritzdownload": 17, "merged_classifications_featur": 17, "dateob": 17, "days_rang": 17, "max": 17, "past": 17, "radius_arcsec": 17, "radiu": 17, "save_filenam": 17, "scope_download_gcn_sourc": 17, "2023": 17, "21t05": 17, "43": 17, "inclus": 17, "classification_origin": 17, "skip_phot": 17, "photometri": 17, "post_survey_id": 17, "survey_id_origin": 17, "survey_id": 17, "p_threshold": 17, "match_id": 17, "use_existing_obj_id": 17, "post_upvot": 17, "check_labelled_box": 17, "box": 17, "write_obj_id": 17, "result_dir": 17, "fritzupload": 17, "result_filetag": 17, "result_format": 17, "replace_classif": 17, "delet": 17, "ones": 17, "no_ml": 17, "post_phot_as_com": 17, "post_phasefolded_phot": 17, "phot_dirnam": 17, "port": 17, "protocol": 17, "password": 17, "duplic": 17, "scope_upload_classif": 17, "500": 17, "250": 17, "750": 17, "35": 17, "auto": 17, "confirm": 17, "scope_manage_annot": 17, "200": 17, "400": 17, "revisedperiod": 17, "gloria": 17, "vice": 17, "versa": 17, "disagre": 17, "combin": 17, "remain": 17, "scope_upload_disagr": 17, "sample_token": 17}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"instal": 0, "develop": 0, "guidelin": 0, "initi": 0, "step": 0, "http": 0, "ssh": 0, "set": 0, "up": 0, "your": 0, "environ": [0, 17], "window": 0, "linux": 0, "maco": 0, "us": 0, "packag": 0, "manag": [0, 17], "updat": 0, "pythonpath": 0, "pre": 0, "commit": 0, "instruct": 0, "arm64": 0, "appl": 0, "silicon": 0, "onli": 0, "tensorflow": 0, "modifi": [0, 15], "remain": 0, "requir": 0, "all": 0, "creat": 0, "config": [0, 15], "yaml": [0, 15], "test": 0, "troubleshoot": 0, "known": 0, "issu": 0, "how": 0, "contribut": 0, "field": [0, 1, 17], "guid": [0, 1, 15, 16], "section": 0, "variabl": [1, 2, 4, 7, 8, 9, 11, 13], "star": [1, 11], "vnv": [1, 11], "classif": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17], "number": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12], "ztf": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 17], "light": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "curv": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "descript": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "characterist": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "refer": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "further": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "read": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "period": [1, 8, 9], "pnp": [1, 9], "rr": [1, 10], "lyra": [1, 10], "rrlyr": [1, 10], "other": [1, 2, 5, 6, 8, 10, 12], "select": [1, 2, 5, 6, 8, 10, 12, 17], "method": [1, 2, 5, 6, 8, 10, 12], "w": [1, 12], "uma": [1, 12], "wuma": [1, 12], "delta": [1, 6], "scuti": [1, 6], "dscu": [1, 6], "classic": [1, 5], "cepheid": [1, 5], "ceph": [1, 5], "cataclysm": [1, 2], "cv": [1, 2], "flare": [1, 7], "fla": [1, 7], "beta": [1, 3], "lyr": [1, 3], "blyr": [1, 3], "long": [1, 8], "lpv": [1, 8], "bogu": [1, 4], "sourc": [13, 17], "project": 13, "licens": 14, "quick": 15, "start": 15, "train": [15, 16, 17], "argument": 15, "multipl": 15, "classifi": [15, 16], "one": 15, "script": [15, 17], "run": [15, 17], "hpc": 15, "resourc": 15, "plot": 15, "perform": [15, 16], "infer": [15, 17], "examin": 15, "predict": 15, "fritz": [16, 17], "scanner": 16, "two": 16, "taxonomi": [16, 17], "ontolog": [16, 17], "phenomenolog": [16, 17], "independ": 16, "binari": 16, "process": 16, "machin": 16, "learn": [16, 17], "algorithm": 16, "repeat": 16, "workflow": 16, "transient": 16, "usag": 17, "download": 17, "id": 17, "ccd": 17, "quadrant": 17, "scope": 17, "featur": 17, "deep": 17, "model": 17, "handl": 17, "differ": 17, "file": 17, "format": 17, "map": 17, "between": 17, "column": 17, "name": 17, "gener": 17, "exampl": 17, "slurm": 17, "definit": 17, "autom": 17, "analys": 17, "cron": 17, "job": 17, "basic": 17, "addit": 17, "detail": 17, "check": 17, "i": 17, "gcn": 17, "upload": 17, "annot": 17, "disagr": 17}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Installation/Developer Guidelines": [[0, "installation-developer-guidelines"]], "Initial steps": [[0, "initial-steps"]], "HTTPS:": [[0, "https"]], "SSH:": [[0, "ssh"]], "Setting up your environment (Windows/Linux/macOS)": [[0, "setting-up-your-environment-windows-linux-macos"]], "Use a package manager for installation": [[0, "use-a-package-manager-for-installation"]], "Update your PYTHONPATH": [[0, "update-your-pythonpath"]], "Install pre-commit": [[0, "install-pre-commit"]], "Instructions for macOS (ARM64/Apple Silicon only)": [[0, "instructions-for-macos-arm64-apple-silicon-only"]], "Install tensorflow for macOS/Apple Silicon": [[0, "install-tensorflow-for-macos-apple-silicon"]], "Modify remaining requirements": [[0, "modify-remaining-requirements"]], "All Windows/Linux/macOS": [[0, "all-windows-linux-macos"]], "Install required packages": [[0, "install-required-packages"]], "Create and modify config.yaml": [[0, "create-and-modify-config-yaml"]], "Testing": [[0, "testing"]], "Troubleshooting": [[0, "troubleshooting"]], "Known issues": [[0, "known-issues"]], "How to contribute": [[0, "how-to-contribute"]], "Contributing Field Guide sections": [[0, "contributing-field-guide-sections"]], "Field guide": [[1, "field-guide"]], "Variable stars (vnv)": [[1, "variable-stars-vnv"], [11, "variable-stars-vnv"]], "Classification and numbers": [[1, "classification-and-numbers"], [1, "id1"], [1, "id6"], [1, "id11"], [1, "id17"], [1, "id23"], [1, "id29"], [1, "id35"], [1, "id40"], [1, "id45"], [2, "classification-and-numbers"], [3, "classification-and-numbers"], [5, "classification-and-numbers"], [6, "classification-and-numbers"], [7, "classification-and-numbers"], [8, "classification-and-numbers"], [9, "classification-and-numbers"], [10, "classification-and-numbers"], [11, "classification-and-numbers"], [12, "classification-and-numbers"]], "ZTF light curves": [[1, "ztf-light-curves"], [1, "id2"], [1, "id7"], [1, "id12"], [1, "id18"], [1, "id24"], [1, "id30"], [1, "id36"], [1, "id41"], [1, "id46"], [1, "id51"], [2, "ztf-light-curves"], [3, "ztf-light-curves"], [4, "ztf-light-curves"], [5, "ztf-light-curves"], [6, "ztf-light-curves"], [7, "ztf-light-curves"], [8, "ztf-light-curves"], [9, "ztf-light-curves"], [10, "ztf-light-curves"], [11, "ztf-light-curves"], [12, "ztf-light-curves"]], "Description": [[1, "description"], [1, "id3"], [1, "id8"], [1, "id13"], [1, "id19"], [1, "id25"], [1, "id31"], [1, "id37"], [1, "id42"], [1, "id47"], [1, "id52"], [2, "description"], [3, "description"], [4, "description"], [5, "description"], [6, "description"], [7, "description"], [8, "description"], [9, "description"], [10, "description"], [11, "description"], [12, "description"]], "Light curve characteristics": [[1, "light-curve-characteristics"], [1, "id4"], [1, "id9"], [1, "id14"], [1, "id20"], [1, "id26"], [1, "id32"], [1, "id38"], [1, "id43"], [1, "id48"], [1, "id53"], [2, "light-curve-characteristics"], [3, "light-curve-characteristics"], [4, "light-curve-characteristics"], [5, "light-curve-characteristics"], [6, "light-curve-characteristics"], [7, "light-curve-characteristics"], [8, "light-curve-characteristics"], [9, "light-curve-characteristics"], [10, "light-curve-characteristics"], [11, "light-curve-characteristics"], [12, "light-curve-characteristics"]], "References and further reading:": [[1, "references-and-further-reading"], [1, "id5"], [1, "id10"], [1, "id16"], [1, "id22"], [1, "id28"], [1, "id34"], [1, "id39"], [1, "id44"], [1, "id50"], [1, "id54"], [2, "references-and-further-reading"], [3, "references-and-further-reading"], [4, "references-and-further-reading"], [5, "references-and-further-reading"], [6, "references-and-further-reading"], [7, "references-and-further-reading"], [8, "references-and-further-reading"], [9, "references-and-further-reading"], [10, "references-and-further-reading"], [11, "references-and-further-reading"], [12, "references-and-further-reading"]], "Periodic Variables (pnp)": [[1, "periodic-variables-pnp"], [9, "periodic-variables-pnp"]], "RR Lyrae (rrlyr)": [[1, "rr-lyrae-rrlyr"], [10, "rr-lyrae-rrlyr"]], "Other characteristics and selection methods": [[1, "other-characteristics-and-selection-methods"], [1, "id15"], [1, "id21"], [1, "id27"], [1, "id33"], [1, "id49"], [2, "other-characteristics-and-selection-methods"], [5, "other-characteristics-and-selection-methods"], [6, "other-characteristics-and-selection-methods"], [8, "other-characteristics-and-selection-methods"], [10, "other-characteristics-and-selection-methods"], [12, "other-characteristics-and-selection-methods"]], "W Uma (wuma)": [[1, "w-uma-wuma"], [12, "w-uma-wuma"]], "Delta Scuti (dscu)": [[1, "delta-scuti-dscu"], [6, "delta-scuti-dscu"]], "Classical Cepheids (ceph)": [[1, "classical-cepheids-ceph"], [5, "classical-cepheids-ceph"]], "Cataclysmic Variables (cv)": [[1, "cataclysmic-variables-cv"], [2, "cataclysmic-variables-cv"]], "Flaring variables (fla)": [[1, "flaring-variables-fla"], [7, "flaring-variables-fla"]], "Beta Lyr (blyr)": [[1, "beta-lyr-blyr"], [3, "beta-lyr-blyr"]], "Long Period Variables (lpv)": [[1, "long-period-variables-lpv"], [8, "long-period-variables-lpv"]], "Bogus variability (bogus)": [[1, "bogus-variability-bogus"], [4, "bogus-variability-bogus"]], "ZTF Variable Source Classification Project": [[13, "ztf-variable-source-classification-project"]], "License": [[14, "license"]], "Quick Start Guide": [[15, "quick-start-guide"]], "Modify config.yaml": [[15, "modify-config-yaml"]], "Training": [[15, "training"]], "Arguments:": [[15, "arguments"]], "Train multiple classifiers with one script": [[15, "train-multiple-classifiers-with-one-script"]], "Running training on HPC resources": [[15, "running-training-on-hpc-resources"]], "Plotting Classifier Performance": [[15, "plotting-classifier-performance"]], "Inference": [[15, "inference"]], "Running inference on HPC resources": [[15, "running-inference-on-hpc-resources"]], "Examining predictions": [[15, "examining-predictions"]], "Guide for Fritz Scanners": [[16, "guide-for-fritz-scanners"]], "Two classification taxonomies": [[16, "two-classification-taxonomies"]], "Ontological classifications": [[16, "ontological-classifications"]], "Phenomenological classifications": [[16, "phenomenological-classifications"]], "Independent binary classifiers": [[16, "independent-binary-classifiers"]], "Classification process": [[16, "classification-process"]], "Machine learning algorithms/training": [[16, "machine-learning-algorithms-training"]], "Repeated workflow for transients": [[16, "repeated-workflow-for-transients"]], "Classifier performance": [[16, "classifier-performance"]], "Usage": [[17, "usage"]], "Download ids for ZTF fields/CCDs/quadrants": [[17, "download-ids-for-ztf-fields-ccds-quadrants"]], "Download SCoPe features for ZTF fields/CCDs/quadrants": [[17, "download-scope-features-for-ztf-fields-ccds-quadrants"]], "Training deep learning models": [[17, "training-deep-learning-models"]], "Running inference": [[17, "running-inference"]], "Handling different file formats": [[17, "handling-different-file-formats"]], "Mapping between column names and Fritz taxonomies": [[17, "mapping-between-column-names-and-fritz-taxonomies"]], "Generating features": [[17, "generating-features"]], "Example usage": [[17, "example-usage"]], "Slurm scripts": [[17, "slurm-scripts"]], "Feature definitions": [[17, "feature-definitions"]], "Selected phenomenological feature definitions": [[17, "selected-phenomenological-feature-definitions"]], "Selected ontological feature definitions": [[17, "selected-ontological-feature-definitions"]], "Running automated analyses": [[17, "running-automated-analyses"]], "cron job basics": [[17, "cron-job-basics"]], "Additional details for cron environment": [[17, "additional-details-for-cron-environment"]], "Check if cron job is running": [[17, "check-if-cron-job-is-running"]], "Scope Download Classification": [[17, "scope-download-classification"]], "Scope Download GCN Sources": [[17, "scope-download-gcn-sources"]], "Scope Upload Classification": [[17, "scope-upload-classification"]], "Scope Manage Annotation": [[17, "scope-manage-annotation"]], "Scope Upload Disagreements": [[17, "scope-upload-disagreements"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/usage.html b/usage.html new file mode 100644 index 0000000..4d6be41 --- /dev/null +++ b/usage.html @@ -0,0 +1,854 @@ + + + + + + + Usage + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + ZTF Variable Source Classification Project + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Usage

+
+

Download ids for ZTF fields/CCDs/quadrants

+
    +
  • Create HDF5 file for single CCD/quad pair in a field:

  • +
+
./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --ccd 2 --quad 3 --minobs 20 --skip 0 --limit 10000
+
+
+
    +
  • Create multiple HDF5 files for some CCD/quad pairs in a field:

  • +
+
./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --multi-quads --ccd-range 1 8 --quad-range 2 4 --minobs 20 --limit 10000
+
+
+
    +
  • Create multiple HDF5 files for all CCD/quad pairs in a field:

  • +
+
./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --multi-quads --minobs 20 --limit 10000
+
+
+
    +
  • Create single HDF5 file for all sources in a field:

  • +
+
./get_quad_ids.py --catalog ZTF_source_features_DR16 --field 301 --whole-field
+
+
+
+
+

Download SCoPe features for ZTF fields/CCDs/quadrants

+
    +
  • First, run get_quad_ids.py for desired fields/ccds/quads.

  • +
  • Download features for all sources in a field:

  • +
+
./tools/get_features.py --field 301 --whole-field
+
+
+
    +
  • Download features for all sources in a field, imputing missing features using the strategies in config.yaml:

  • +
+
./tools/get_features.py --field 301 --whole-field --impute-missing-features
+
+
+
    +
  • Download features for a range of ccd/quads individually:

  • +
+
./tools/get_features.py --field 301 --ccd-range 1 2 --quad-range 3 4
+
+
+
    +
  • Download features for a single pair of ccd/quad:

  • +
+
./tools/get_features.py --field 301 --ccd-range 1 --quad-range 2
+
+
+
+
+

Training deep learning models

+

For details on the SCoPe taxonomy and architecture, +please refer to arxiv:2102.11304.

+
    +
  • The training pipeline can be invoked with the scope.py utility. For example:

  • +
+
./scope.py train --tag=vnv --path_dataset=data/training/dataset.d15.csv --batch_size=64 --epochs=100 --verbose=1 --pre_trained_model=models/experiment/vnv/vnv.20221117_001502.h5
+
+
+

Refer to ./scope.py train --help for details.

+
    +
  • All the necessary metadata/configuration could be defined in config.yaml under training, +but could also be overridden with optional scope.py train arguments, e.g. +./scope.py train ... --batch_size=32 --threshold=0.6 ....

  • +
  • By default, the pipeline uses the DNN models defined in scope/nn.py using the tensorflow’s keras functional API. SCoPe also supports an implementation of XGBoost (set --algorithm=xgb; see scope/xgb.py).

  • +
  • If --save is specified during DNN training, an HDF5 file of the model’s layers and weights will be saved. This file can be directly used for additional training and inferencing. For XGB, a json file will save the model along with a .params file with the model parameters.

  • +
  • The Dataset class defined in scope.utils hides the complexity of our dataset handling “under the rug”.

  • +
  • You can request access to a Google Drive folder containing the latest trained models here.

  • +
  • Feature name sets are specified in config.yaml under features. +These are referenced in config.yaml under training.classes.<class>.features.

  • +
  • Feature stats to be used for feature scaling/standardization before training +is defined in config.yaml under feature_stats.

  • +
  • We use Weights & Biases to track experiments. +Project details and access credentials can be defined in config.yaml under wandb.

  • +
+

Initially, SCoPe used a bash script to train all classifier families:

+
for class in pnp longt i fla ew eb ea e agn bis blyr ceph dscu lpv mir puls rrlyr rscvn srv wuma yso; \
+  do echo $class; \
+  for state in 1 2 3 4 5 6 7 8 9 42; \
+    do ./scope.py train \
+      --tag=$class --path_dataset=data/training/dataset.d15.csv \
+      --scale_features=min_max --batch_size=64 \
+      --epochs=300 --patience=30 --random_state=$state \
+      --verbose=1 --gpu=1 --conv_branch=true --save; \
+  done; \
+done;
+
+
+

Now, a training script containing one line per class to be trained can be generated by running ./scope.py create_training_script, for example:

+
./scope.py create_training_script --filename='train_dnn.sh' --min_count=100 --pre_trained_group_name='experiment' --add_keywords='--save --batch_size=32 --group=new_experiment --period_suffix=ELS_ECE_EAOV'
+
+
+

A path to the training set may be provided as input to this method or otherwise taken from config.yaml (training: dataset:). To continue training on existing models, specify the --pre_trained_group_name keyword containing the models in create_training_script. If training on a feature collection containing multiple sets of periodic features (from different algorithms), set the suffix corresponding to the desired algorithm using --period_suffix or the features: info: period_suffix: field in the config file. The string specified in --add_keywords serves as a catch-all for additional keywords that the user wishes to be included in each line of the script.

+

If --pre_trained_group_name is specified and the --train_all keyword is set, the output script will train all classes specified in config.yaml regardless of whether they have a pre-trained model. If --train_all is not set (the default), the script will limit training to classes that have an existing trained model.

+
+
+

Running inference

+

Running inference requires the following steps: download ids of a field, download (or generate) features for all downloaded ids, run inference for all available trained models, e.g:

+
./tools/get_quad_ids.py --field=<field_number> --whole_field
+./tools/get_features.py --field=<field_number> --whole_field --impute_missing_features
+
+
+

OR

+
./tools/generate_features.py --field <field_number> --ccd <ccd_number> --quad <quad_number> --doGPU
+
+
+

The optimal way to run inference is through an inference script generated by running ./scope.py create_inference_script with the appropriate arguments. After creating the script and adding the needed permissions (e.g. using chmod +x), the commands to run inference on the field <field_number> are (in order):

+
./get_all_preds.sh <field_number>
+
+
+
    +
  • Requires models_dnn/ or models_xgb/ folder in the root directory containing the pre-trained models for DNN and XGBoost, respectively.

  • +
  • In a preds_dnn or preds_xgb directory, creates a single .parquet (and optionally .csv) file containing all ids of the field in the rows and inference scores for different classes across the columns.

  • +
  • If running inference on specific ids instead of a field/ccd/quad (e.g. on GCN sources), run ./get_all_preds.sh specific_ids

  • +
+
+
+

Handling different file formats

+

When our manipulations of pandas dataframes is complete, we want to save them in an appropriate file format with the desired metadata. Our code works with multiple formats, each of which have advantages and drawbacks:

+
    +
  • Comma Separated Values (CSV, .csv): in this format, data are plain text and columns are separated by commas. While this format offers a high level of human readability, it also takes more space to store and a longer time to write and read than other formats.

    +

    pandas offers the read_csv() function and to_csv() method to perform I/O operations with this format. Metadata must be included as plain text in the file.

    +
  • +
  • Hierarchical Data Format (HDF5, .h5): this format stores data in binary form, so it is not human-readable. It takes up less space on disk than CSV files, and it writes/reads faster for numerical data. HDF5 does not serialize data columns containing structures like a numpy array, so file size improvements over CSV can be diminished if these structures exist in the data.

    +

    pandas includes read_hdf() and to_hdf() to handle this format, and they require a package like PyTables to work. pandas does not currently support the reading and writing of metadata using the above function and method. See scope/utils.py for code that handles metadata in HDF5 files.

    +
  • +
  • Apache Parquet (.parquet): this format stores data in binary form like HDF5, so it is not human-readable. Like HDF5, Parquet also offers significant disk space savings over CSV. Unlike HDF5, Parquet supports structures like numpy arrays in data columns.

    +

    While pandas offers read_parquet() and to_parquet() to support this format (requiring e.g. PyArrow to work), these again do not support the reading and writing of metadata associated with the dataframe. See scope/utils.py for code that reads and writes metadata in Parquet files.

    +
  • +
+
+
+

Mapping between column names and Fritz taxonomies

+

The column names of training set files and Fritz taxonomy classifications are not the same by default. Training sets may also contain columns that are not meant to be uploaded to Fritz. To address both of these issues, we use a ‘taxonomy mapper’ file to connect local data and Fritz taxonomies.

+

This file must currently be generated manually, entry by entry. Each entry’s key corresponds to a column name in the local file. The set of all keys is used to establish the columns of interest for upload or download. For example, if the training set includes columns that are not classifications, like RA and Dec, these columns should not be included among the entries in the mapper file. The code will then ignore these columns for the purpose of classification.

+

The fields associated with each key are fritz_label (containing the associated Fritz classification name) and taxonomy_id identifying the classification’s taxonomy system. The mapper must have the following format, also demonstrated in golden_dataset_mapper.json and DNN_AL_mapper.json:

+
{
+"variable":
+    {"fritz_label": "variable",
+      "taxonomy_id": 1012
+    },
+
+"periodic":
+    {"fritz_label": "periodic",
+      "taxonomy_id": 1012
+    },
+
+    .
+    . [add more entries here]
+    .
+
+"CV":
+    {"fritz_label": "Cataclysmic",
+      "taxonomy_id": 1011
+    }
+}
+
+
+
+
+
+

Generating features

+

Code has been adapted from ztfperiodic and other sources to calculate basic and Fourier stats for light curves along with other features. This allows new features to be generated with SCoPe, both locally and using GPU cluster resources. The feature generation script is contained within tools/generate_features.py.

+

Currently, the basic stats are calculated via tools/featureGeneration/lcstats.py, and a host of period-finding algorithms are available in tools/featureGeneration/periodsearch.py. Among the CPU-based period-finding algorithms, there is not yet support for AOV_cython. For the AOV algorithm to work, run source build.sh in the tools/featureGeneration/pyaov/ directory, then copy the newly created .so file (aov.cpython-310-darwin.so or similar) to lib/python3.10/site-packages/ or equivalent within your environment. The GPU-based algorithms require CUDA support (so Mac GPUs are not supported).

+

inputs:

+
    +
  1. –source_catalog* : name of Kowalski catalog containing ZTF sources (str)

  2. +
  3. –alerts_catalog* : name of Kowalski catalog containing ZTF alerts (str)

  4. +
  5. –gaia_catalog* : name of Kowalski catalog containing Gaia data (str)

  6. +
  7. –bright_star_query_radius_arcsec : maximum angular distance from ZTF sources to query nearby bright stars in Gaia (float)

  8. +
  9. –xmatch_radius_arcsec : maximum angular distance from ZTF sources to match external catalog sources (float)

  10. +
  11. –kowalski_instances* : dictionary containing {names of Kowalski instances : authenticated penquins.Kowalski objects} (dict)

  12. +
  13. –limit : maximum number of sources to process in batch queries / statistics calculations (int)

  14. +
  15. –period_algorithms* : dictionary containing names of period algorithms to run. Normally specified in config - if specified here, should be a (list)

  16. +
  17. –period_batch_size : maximum number of sources to simultaneously perform period finding (int)

  18. +
  19. –doCPU : flag to run config-specified CPU period algorithms (bool)

  20. +
  21. –doGPU : flag to run config-specified GPU period algorithms (bool)

  22. +
  23. –samples_per_peak : number of samples per periodogram peak (int)

  24. +
  25. –doScaleMinPeriod : for period finding, scale min period based on min_cadence_minutes (bool). Otherwise, set –max_freq to desired value

  26. +
  27. –doRemoveTerrestrial : remove terrestrial frequencies from period-finding analysis (bool)

  28. +
  29. –Ncore : number of CPU cores to parallelize queries (int)

  30. +
  31. –field : ZTF field to run (int)

  32. +
  33. –ccd : ZTF ccd to run (int)

  34. +
  35. –quad : ZTF quadrant to run (int)

  36. +
  37. –min_n_lc_points : minimum number of points required to generate features for a light curve (int)

  38. +
  39. –min_cadence_minutes : minimum cadence between light curve points. Higher-cadence data are dropped except for the first point in the sequence (float)

  40. +
  41. –dirname : name of generated feature directory (str)

  42. +
  43. –filename : prefix of each feature filename (str)

  44. +
  45. –doCesium : flag to compute config-specified cesium features in addition to default list (bool)

  46. +
  47. –doNotSave : flag to avoid saving generated features (bool)

  48. +
  49. –stop_early : flag to stop feature generation before entire quadrant is run. Pair with –limit to run small-scale tests (bool)

  50. +
  51. –doQuadrantFile : flag to use a generated file containing [jobID, field, ccd, quad] columns instead of specifying –field, –ccd and –quad (bool)

  52. +
  53. –quadrant_file : name of quadrant file in the generated_features/slurm directory or equivalent (str)

  54. +
  55. –quadrant_index : number of job in quadrant file to run (int)

  56. +
  57. –doSpecificIDs: flag to perform feature generation for ztf_id column in config-specified file (bool)

  58. +
  59. –skipCloseSources: flag to skip removal of sources too close to bright stars via Gaia (bool)

  60. +
  61. –top_n_periods: number of ELS, ECE periods to pass to EAOV if using ELS_ECE_EAOV algorithm (int)

  62. +
  63. –max_freq: maximum frequency [1 / days] to use for period finding (float). Overridden by –doScaleMinPeriod

  64. +
+

output: +feature_df : dataframe containing generated features

+

* - specified in config.yaml

+
+

Example usage

+

The following is an example of running the feature generation script locally:

+
./generate_features.py --field 301 --ccd 2 --quad 4 --source_catalog ZTF_sources_20230109 --alerts_catalog ZTF_alerts --gaia_catalog Gaia_EDR3 --bright_star_query_radius_arcsec 300.0 --xmatch_radius_arcsec 2.0 --query_size_limit 10000 --period_batch_size 1000 --samples_per_peak 10 --Ncore 4 --min_n_lc_points 50 --min_cadence_minutes 30.0 --dirname generated_features --filename gen_features --doCPU --doRemoveTerrestrial --doCesium
+
+
+

Setting --doCPU will run the config-specified CPU period algorithms on each source. Setting --doGPU instead will do likewise with the specified GPU algorithms. If neither of these keywords is set, the code will assign a value of 1.0 to each period and compute Fourier statistics using that number.

+

Below is an example run the script using a job/quadrant file (containing [job id, field, ccd, quad] columns) instead of specifying field/ccd/quad directly:

+
/home/bhealy/scope/tools/generate_features.py --source_catalog ZTF_sources_20230109 --alerts_catalog ZTF_alerts --gaia_catalog Gaia_EDR3 --bright_star_query_radius_arcsec 300.0 --xmatch_radius_arcsec 2.0 --query_size_limit 10000 --period_batch_size 1000 --samples_per_peak 10 --Ncore 20 --min_n_lc_points 50 --min_cadence_minutes 30.0 --dirname generated_features_DR15 --filename gen_features --doGPU --doRemoveTerrestrial --doCesium --doQuadrantFile --quadrant_file slurm.dat --quadrant_index 5738
+
+
+
+
+

Slurm scripts

+

For large-scale feature generation, generate_features.py is intended to be run on a high-performance computing cluster. Often these clusters require jobs to be submitted using a utility like slurm (Simple Linux Utility for Resource Management) to generate scripts. These scripts contain information about the type, amount and duration of computing resources to allocate to the user.

+

Scope’s generate_features_slurm.py code creates two slurm scripts: (1) runs single instance of generate_features.py, and (2) runs the generate_features_job_submission.py which submits multiple jobs in parallel, periodically checking to see if additional jobs can be started. See below for more information about these components of feature generation.

+

generate_features_slurm.py can receive all of the arguments used by generate_features.py. These arguments are passed to the instances of feature generation begun by running slurm script (1). There are also additional arguments specific to cluster resource management:

+

inputs:

+
    +
  1. –job_name : name of submitted jobs (str)

  2. +
  3. –cluster_name : name of HPC cluster (str)

  4. +
  5. –partition_type : cluster partition to use (str)

  6. +
  7. –nodes : number of nodes to request (int)

  8. +
  9. –gpus : number of GPUs to request (int)

  10. +
  11. –memory_GB : amount of memory to request in GB (int)

  12. +
  13. –time : amount of time before instance times out (str)

  14. +
  15. –mail_user: user’s email address for job updates (str)

  16. +
  17. –account_name : name of account having HPC allocation (str)

  18. +
  19. –python_env_name : name of Python environment to activate before running generate_features.py (str)

  20. +
  21. –kowalski_instance_name : name of Kowalski instance containing ZTF source catalog (str)

  22. +
  23. –generateQuadrantFile : flag to map fields/ccds/quads containing sources to job numbers, save file (bool)

  24. +
  25. –max_instances : maximum number of HPC instances to run in parallel (int)

  26. +
  27. –wait_time_minutes : amount of time to wait between status checks in minutes (float)

  28. +
  29. –doSubmitLoop : flag to run loop initiating instances until out of jobs (hard on Kowalski)

  30. +
  31. –runParallel : flag to run jobs in parallel using slurm [recommended]. Otherwise, run in series on a single instance

  32. +
  33. –user : if using slurm, your username. This will be used to periodically run squeue and list your running jobs (str)

  34. +
+
+
+
+

Feature definitions

+
+

Selected phenomenological feature definitions

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

name

definition

ad

Anderson-Darling statistic

chi2red

Reduced chi^2

f1_BIC

Bayesian information criterion, first order (Fourier analysis)

f1_a

a coefficient, first order (Fourier analysis)

f1_amp

Amplitude, first order (Fourier analysis)

f1_b

b coefficient (Fourier analysis)

f1_phi0

Zero-phase, first order (Fourier analysis)

f1_power

Power, first order (Fourier analysis)

f1_relamp1

Relative amplitude, first order (Fourier analysis)

f1_relamp2

Relative amplitude, second order (Fourier analysis)

f1_relamp3

Relative amplitude, third order (Fourier analysis)

f1_relamp4

Relative amplitude, fourth order (Fourier analysis)

f1_relphi1

Relative phase, first order (Fourier analysis)

f1_relphi2

Relative phase, second order (Fourier analysis)

f1_relphi3

Relative phase, third order (Fourier analysis)

f1_relphi4

Relative phase, fourth order (Fourier analysis)

i60r

Mag ratio between 20th, 80th percentiles

i70r

Mag ratio between 15th, 85th percentiles

i80r

Mag ratio between 10th, 90th percentiles

i90r

Mag ratio between 5th, 95th percentiles

inv_vonneumannratio

Inverse of Von Neumann ratio

iqr

Mag ratio between 25th, 75th percentiles

median

Median magnitude

median_abs_dev

Median absolute deviation of magnitudes

norm_excess_var

Normalized excess variance

norm_peak_to_peak_amp

Normalized peak-to-peak amplitude

roms

Root of mean magnitudes squared

skew

Skew of magnitudes

smallkurt

Kurtosis of magnitudes

stetson_j

Stetson J coefficient

stetson_k

Stetson K coefficient

sw

Shapiro-Wilk statistic

welch_i

Welch I statistic

wmean

Weighted mean of magtnidues

wstd

Weighted standard deviation of magnitudes

dmdt

Magnitude-time histograms (26x26)

+
+
+

Selected ontological feature definitions

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

name

definition

mean_ztf_alert_braai

Mean significance of ZTF alerts for this source

n_ztf_alerts

Number of ZTF alerts for this source

period

Period determined by subscripted algorithms (e.g. ELS_ECE_EAOV)

significance

Significance of period

AllWISE_w1mpro

AllWISE W1 mag

AllWISE_w1sigmpro

AllWISE W1 mag error

AllWISE_w2mpro

AllWISE W2 mag

AllWISE_w2sigmpro

AllWISE W2 mag error

AllWISE_w3mpro

AllWISE W3 mag

AllWISE_w4mpro

AllWISE W4 mag

Gaia_EDR3__parallax

Gaia parallax

Gaia_EDR3__phot_bp_mean_mag

Gaia BP mag

Gaia_EDR3__phot_bp_rp_excess_factor

Gaia BP-RP excess factor

Gaia_EDR3__phot_g_mean_mag

Gaia G mag

Gaia_EDR3__phot_rp_mean_mag

Gaia RP mag

PS1_DR1__gMeanPSFMag

PS1 g mag

PS1_DR1__gMeanPSFMagErr

PS1 g mag error

PS1_DR1__rMeanPSFMag

PS1 r mag

PS1_DR1__rMeanPSFMagErr

PS1 r mag error

PS1_DR1__iMeanPSFMag

PS1 i mag

PS1_DR1__iMeanPSFMagErr

PS1 i mag error

PS1_DR1__zMeanPSFMag

PS1 z mag

PS1_DR1__zMeanPSFMagErr

PS1 z mag error

PS1_DR1__yMeanPSFMag

PS1 y mag

PS1_DR1__yMeanPSFMagErr

PS1 y mag error

+
+
+
+

Running automated analyses

+

The primary deliverable of SCoPe is a catalog of variable source classifications across all of ZTF. Since ZTF contains billions of light curves, this catalog requires significant compute resources to assemble. We may still want to study ZTF’s expansive collection of data with SCoPe before the classification catalog is complete. For example, SCoPe classifiers can be applied to the realm of transient follow-up.

+

It is useful to know the classifications of any persistent ZTF sources that are close to transient candidates on the sky. Once SCoPe’s primary deliverable is complete, obtaining these classifications will involve a straightforward database query. Presently, however, we must run the SCoPe workflow on a custom list of sources repeatedly to account for the rapidly changing landscape of transient events. See “Guide for Fritz Scanners” for a more detailed explanation of the workflow itself. This section continues with a discussion of how the automated analysis in gcn_cronjob.py is implemented using cron.

+
+

cron job basics

+

cron runs scripts at specific time intervals in a simple environment. While this simplicity fosters compatibility between different operating systems, the trade-off is that some extra steps are required to run scripts compared to more familiar coding environments (e.g. within scope-env for this project).

+

To set up a cron job, first run EDITOR=emacs crontab -e. You can replace emacs with your text editor of choice as long as it is installed on your machine. This command will open a text file in which to place cron commands. An example command is as follows:

+
0 */2 * * * ~/scope/gcn_cronjob.py > ~/scope/log_gcn_cronjob.txt 2>&1
+
+
+

Above, the 0 */2 * * * means that this command will run every two hours, on minute 0 of that hour. Time increments increase from left to right; in this example, the five numbers are minute, hour, day (of month), month, day (of week). The */2 means that the hour has to be divisible by 2 for the job to run. Check out crontab.guru to learn more about cron timing syntax.

+

Next in the line, ~/scope/gcn_cronjob.py is the command that gets run. The > character forwards the output from the command (e.g. what your script prints) into a log file in a specific location (here ~/scope/log_gcn_cronjob.txt). Finally, the 2>&1 suppresses ‘emails’ from cron about the status of your job (unnecessary since the log is being saved to the user-specified file).

+

Save the text file once you finish modifying it to install the cron job. Ensure that the last line of your file is a newline to avoid issues when running. Your computer may pop up a window to which you should respond in the affirmative in order to successfully initialize the job. To check which cron jobs have been installed, run crontab -l. To uninstall your jobs, run crontab -r.

+
+
+

Additional details for cron environment

+

Because cron runs in a simple environment, the usual details of environment setup and paths cannot be overlooked. In order for the above job to work, we need to add more information when we run EDITOR=emacs crontab -e. The lines below will produce a successful run (if SCoPe is installed in your home directory):

+
PYTHONPATH = /Users/username/scope
+
+0 */2 * * * /opt/homebrew/bin/gtimeout 2h ~/miniforge3/envs/scope-env/bin/python ~/scope/gcn_cronjob.py > ~/scope/log_gcn_cronjob.txt 2>&1
+
+
+
+

In the first line above, the PYTHONPATH environment variable is defined to include the scope directory. Without this line, any code that imports from scope will throw an error, since the user’s usual PYTHONPATH variable is not accessed in the cron environment.

+

The second line begins with the familiar cron timing pattern described above. It continues by specifying the a maximum runtime of 2 hours before timing out using the gtimeout command. On a Mac, this can be installed with homebrew by running brew install coreutils. Note that the full path to gtimeout must be specified. After the timeout comes the call to the gcn_cronjob.py script. Note that the usual #/usr/bin/env python line at the top of SCoPe’s python scripts does not work within the cron environment. Instead, python must be explicitly specified, and in order to have access to the modules installed in scope-env we must provide a full path like the one above (~/miniforge3/envs/scope-env/bin/python). The line concludes by sending the script’s output to a dedicated log file. This file gets overwritten each time the script runs.

+
+
+

Check if cron job is running

+

It can be useful to know whether the script within a cron job is currently running. One way to do this for gcn_cronjob.py is to run the command ps aux | grep gcn_cronjob.py. This will always return one item (representing the command you just ran), but if the script is currently running you will see more than one item.

+
+
+
+

Scope Download Classification

+

inputs:

+
    +
  1. –file : CSV file containing obj_id and/or ra dec coordinates. Set to “parse” to download sources by group id.

  2. +
  3. –group_ids : target group id(s) on Fritz for download (if CSV file not provided)

  4. +
  5. –start : Index or page number (if in “parse” mode) to begin downloading (optional)

  6. +
  7. –merge_features : Flag to merge features from Kowalski with downloaded sources

  8. +
  9. –features_catalog : Name of features catalog to query

  10. +
  11. –features_limit : Limit on number of sources to query at once

  12. +
  13. –taxonomy_map : Filename of taxonomy mapper (JSON format)

  14. +
  15. –output_dir : Name of directory to save downloaded files

  16. +
  17. –output_filename : Name of file containing merged classifications and features

  18. +
  19. –output_format : Output format of saved files, if not specified in (9). Must be one of parquet, h5, or csv.

  20. +
  21. –get_ztf_filters : Flag to add ZTF filter IDs (separate catalog query) to default features

  22. +
  23. –impute_missing_features : Flag to impute missing features using scope.utils.impute_features

  24. +
  25. –update_training_set : if downloading an active learning sample, update the training set with the new classification based on votes

  26. +
  27. –updated_training_set_prefix : Prefix to add to updated training set file

  28. +
  29. –min_vote_diff : Minimum number of net votes (upvotes - downvotes) to keep an active learning classification. Caution: if zero, all classifications of reviewed sources will be added

  30. +
+

process:

+
    +
  1. if CSV file provided, query by object ids or ra, dec

  2. +
  3. if CSV file not provided, bulk query based on group id(s)

  4. +
  5. get the classification/probabilities/periods of the objects in the dataset from Fritz

  6. +
  7. append these values as new columns on the dataset, save to new file

  8. +
  9. if merge_features, query Kowalski and merge sources with features, saving new CSV file

  10. +
  11. Fritz sources with multiple associated ZTF IDs will generate multiple rows in the merged feature file

  12. +
  13. To skip the source download part of the code, provide an input CSV file containing columns named ‘obj_id’, ‘classification’, ‘probability’, ‘period_origin’, ‘period’, ‘ztf_id_origin’, and ‘ztf_id’.

  14. +
  15. Set --update_training_set to read the config-specified training set and merge new sources/classifications from an active learning group

  16. +
+

output: data with new columns appended.

+
./scope_download_classification.py --file sample.csv --group_ids 360 361 --start 10 --merge_features True --features_catalog ZTF_source_features_DR16 --features_limit 5000 --taxonomy_map golden_dataset_mapper.json --output_dir fritzDownload --output_filename merged_classifications_features --output_format parquet -get_ztf_filters --impute_missing_features
+
+
+
+
+

Scope Download GCN Sources

+

inputs:

+
    +
  1. –dateobs: unique dateObs of GCN event (str)

  2. +
  3. –group_ids: group ids to query sources [all if not specified] (list)

  4. +
  5. –days_range: max days past event to search for sources (float)

  6. +
  7. –radius_arcsec: radius [arcsec] around new sources to search for existing ZTF sources (float)

  8. +
  9. –save_filename: filename to save source ids/coordinates (str)

  10. +
+

process:

+
    +
  1. query all sources associated with GCN event

  2. +
  3. get fritz names, ras and decs for each page of sources

  4. +
  5. save json file in a useful format to use with generate_features.py --doSpecificIDs

  6. +
+
./scope_download_gcn_sources.py --dateobs 2023-05-21T05:30:43
+
+
+
+
+

Scope Upload Classification

+

inputs:

+
    +
  1. –file : path to CSV, HDF5 or Parquet file containing ra, dec, period, and labels

  2. +
  3. –group_ids : target group id(s) on Fritz for upload

  4. +
  5. –classification : Name(s) of input file columns containing classification probabilities (one column per label). Set this to “read” to automatically upload all classes specified in the taxonomy mapper at once.

  6. +
  7. –taxonomy_map : Filename of taxonomy mapper (JSON format)

  8. +
  9. –comment : Comment to post (if specified)

  10. +
  11. –start : Index to start uploading (zero-based)

  12. +
  13. –stop : Index to stop uploading (inclusive)

  14. +
  15. –classification_origin: origin of classifications. If ‘SCoPe’ (default), Fritz will apply custom color-coding

  16. +
  17. –skip_phot : flag to skip photometry upload (skips for existing sources only)

  18. +
  19. –post_survey_id : flag to post an annotation for the Gaia, AllWISE or PS1 id associated with each source

  20. +
  21. –survey_id_origin : Annotation origin name for survey_id

  22. +
  23. –p_threshold : Probability threshold for posted classification (values must be >= than this number to post)

  24. +
  25. –match_ids : flag to match input and existing survey_id values during upload. It is recommended to instead match obj_ids (see next line)

  26. +
  27. –use_existing_obj_id : flag to use existing source names in a column named ‘obj_id’ (a coordinate-based ID is otherwise generated by default)

  28. +
  29. –post_upvote : flag to post an upvote to newly uploaded classifications. Not recommended when posting automated classifications for active learning.

  30. +
  31. –check_labelled_box : flag to check the ‘labelled’ box for each source when uploading classifications. Not recommended when posting automated classifications for active learning.

  32. +
  33. –write_obj_id : flag to output a copy of the input file with an ‘obj_id’ column containing the coordinate-based IDs for each posted object. Use this file as input for future uploads to add to this column.

  34. +
  35. –result_dir : name of directory where upload results file is saved. Default is ‘fritzUpload’ within the tools directory.

  36. +
  37. –result_filetag: name of tag appended to the result filename. Default is ‘fritzUpload’.

  38. +
  39. –result_format : result file format; one of csv, h5 or parquet. Default is parquet.

  40. +
  41. –replace_classifications : flag to delete each source’s existing classifications before posting new ones.

  42. +
  43. –radius_arcsec: photometry search radius for uploaded sources.

  44. +
  45. –no_ml: flag to post classifications that do not originate from an ML classifier.

  46. +
  47. –post_phot_as_comment: flag to post photometry as a comment on the source (bool)

  48. +
  49. –post_phasefolded_phot: flag to post phase-folded photometry as comment in addition to time series (bool)

  50. +
  51. –phot_dirname: name of directory in which to save photometry plots (str)

  52. +
+

process: +0. include Kowalski host, port, protocol, and token or username+password in config.yaml

+
    +
  1. check if each input source exists by comparing input and existing obj_ids and/or survey_ids

  2. +
  3. save the objects to Fritz group if new

  4. +
  5. in batches, upload the classifications of the objects in the dataset to target group on Fritz

  6. +
  7. duplicate classifications will not be uploaded to Fritz. If n classifications are manually specified, probabilities will be sourced from the last n columns of the dataset.

  8. +
  9. post survey_id annotations

  10. +
  11. (post comment to each uploaded source)

  12. +
+
./scope_upload_classification.py --file sample.csv --group_ids 500 250 750 --classification variable flaring --taxonomy_map map.json --comment confident --start 35 --stop 50 --skip_phot --p_threshold 0.9 --write_obj_id --result_format csv --use_existing_obj_id --post_survey_id --replace_classifications
+
+
+
+
+

Scope Manage Annotation

+

inputs:

+
    +
  1. –action : one of “post”, “update”, or “delete”

  2. +
  3. –source : ZTF ID or path to .csv file with multiple objects (ID column “obj_id”)

  4. +
  5. –target : group id(s) on Fritz

  6. +
  7. –origin : name of annotation

  8. +
  9. –key : name of annotation

  10. +
  11. –value : value of annotation (required for “post” and “update” - if source is a .csv file, value will auto-populate from source[key])

  12. +
+

process:

+
    +
  1. for each source, find existing annotations (for “update” and “delete” actions)

  2. +
  3. interact with API to make desired changes to annotations

  4. +
  5. confirm changes with printed messages

  6. +
+
./scope_manage_annotation.py --action post --source sample.csv --group_ids 200 300 400 --origin revisedperiod --key period
+
+
+
+
+

Scope Upload Disagreements

+

inputs:

+
    +
  1. dataset

  2. +
  3. group id on Fritz

  4. +
  5. gloria object

  6. +
+

process:

+
    +
  1. read in the csv dataset to pandas dataframe

  2. +
  3. get high scoring objects on DNN or on XGBoost from Fritz

  4. +
  5. get objects that have high confidence on DNN but low confidence on XGBoost and vice versa

  6. +
  7. get different statistics of those disagreeing objects and combine to a dataframe

  8. +
  9. filter those disagreeing objects that are contained in the training set and remove them

  10. +
  11. upload the remaining disagreeing objects to target group on Fritz

  12. +
+
./scope_upload_disagreements.py -file dataset.d15.csv -id 360 -token sample_token
+
+
+
+
+ + +
+ +
+
+ + + + \ No newline at end of file