From 58ec210f3151e702d1988c23c8dc3ae7395a2fcb Mon Sep 17 00:00:00 2001 From: Christopher Teubert Date: Tue, 18 Jul 2023 09:57:32 -0700 Subject: [PATCH] Remove everything (moved to progpy) --- .github/ISSUE_TEMPLATE/bug_report.md | 34 - .../ISSUE_TEMPLATE/documentation-update.md | 14 - .github/ISSUE_TEMPLATE/feature_request.md | 25 - .github/ISSUE_TEMPLATE/testing-update.md | 14 - .github/workflows/pr-messages.yml | 34 - .github/workflows/python-package.yml | 96 - .github/workflows/release-messages.yml | 56 - .github/workflows/release-tests.yml | 54 - .github/workflows/release.yml | 41 - .gitignore | 106 - README.md | 56 +- docs/.buildinfo | 4 - docs/.doctrees/dev_guide.doctree | Bin 34994 -> 0 bytes docs/.doctrees/environment.pickle | Bin 59278 -> 0 bytes docs/.doctrees/exceptions.doctree | Bin 12278 -> 0 bytes docs/.doctrees/getting_started.doctree | Bin 88562 -> 0 bytes docs/.doctrees/index.doctree | Bin 16437 -> 0 bytes docs/.doctrees/metrics.doctree | Bin 157860 -> 0 bytes docs/.doctrees/prediction.doctree | Bin 131768 -> 0 bytes docs/.doctrees/predictors.doctree | Bin 52194 -> 0 bytes docs/.doctrees/release.doctree | Bin 26832 -> 0 bytes docs/.doctrees/state_estimators.doctree | Bin 55930 -> 0 bytes docs/.doctrees/uncertain_data.doctree | Bin 100335 -> 0 bytes docs/.doctrees/visualize.doctree | Bin 14287 -> 0 bytes docs/.nojekyll | 0 docs/7150.md | 30 - .../new_state_estimator_example.py | 145 - .../tutorial.ipynb | 620 - .../kalman_filter.py | 133 - .../utpredictor.py | 67 - .../thrown_object_example.py | 65 - .../horizon.py | 72 - .../playback.py | 146 - .../particle_filter_battery_example.py | 73 - .../basic_example.py | 123 - .../eol_event.py | 54 - .../measurement_eqn_example.py | 107 - .../predict_specific_event.py | 42 - .../benchmarking_example.py | 73 - docs/_images/alpha_lambda_plt_ex.png | Bin 319394 -> 0 bytes docs/_images/package_structure.png | Bin 360789 -> 0 bytes docs/_images/scatter_hist_ex.png | Bin 67744 -> 0 bytes docs/_images/scatter_plt_ex.png | Bin 395520 -> 0 bytes docs/_sources/dev_guide.rst.txt | 102 - docs/_sources/exceptions.rst.txt | 18 - docs/_sources/getting_started.rst.txt | 112 - docs/_sources/index.rst.txt | 57 - docs/_sources/metrics.rst.txt | 98 - docs/_sources/prediction.rst.txt | 27 - docs/_sources/predictors.rst.txt | 41 - docs/_sources/release.rst.txt | 48 - docs/_sources/state_estimators.rst.txt | 44 - docs/_sources/uncertain_data.rst.txt | 26 - docs/_sources/visualize.rst.txt | 8 - docs/_static/alabaster.css | 701 - docs/_static/basic.css | 906 -- docs/_static/custom.css | 1 - docs/_static/doctools.js | 358 - docs/_static/documentation_options.js | 14 - docs/_static/file.png | Bin 286 -> 0 bytes docs/_static/jquery-3.5.1.js | 10872 ---------------- docs/_static/jquery.js | 2 - docs/_static/language_data.js | 297 - docs/_static/minus.png | Bin 90 -> 0 bytes docs/_static/plus.png | Bin 90 -> 0 bytes docs/_static/pygments.css | 82 - docs/_static/searchtools.js | 525 - docs/_static/underscore-1.12.0.js | 2027 --- docs/_static/underscore-1.13.1.js | 2042 --- docs/_static/underscore-1.3.1.js | 999 -- docs/_static/underscore.js | 6 - docs/dev_guide.html | 286 - docs/exceptions.html | 151 - docs/genindex.html | 485 - docs/getting_started.html | 1 - docs/index.html | 1 - docs/metrics.html | 1 - docs/objects.inv | Bin 1275 -> 0 bytes docs/prediction.html | 1 - docs/predictors.html | 1 - docs/py-modindex.html | 180 - docs/release.html | 1 - docs/search.html | 124 - docs/searchindex.js | 1 - docs/softwareplan.md | 12 - docs/state_estimators.html | 1 - docs/uncertain_data.html | 1 - docs/visualize.html | 134 - examples/__init__.py | 3 - examples/basic_example.py | 117 - examples/basic_example_battery.py | 148 - examples/benchmarking_example.py | 81 - examples/data_const_load.csv | 2740 ---- examples/eol_event.py | 57 - examples/horizon.py | 71 - examples/kalman_filter.py | 139 - examples/measurement_eqn_example.py | 112 - examples/new_state_estimator_example.py | 146 - examples/particle_filter_battery_example.py | 73 - examples/playback.py | 144 - examples/predict_specific_event.py | 42 - forms/Corporate CLA.pdf | Bin 219343 -> 0 bytes forms/Individual CLA.pdf | Bin 153485 -> 0 bytes license.pdf | Bin 94305 -> 0 bytes predictor_template.py | 85 - scripts/test_copyright.py | 45 - setup.py | 54 - src/prog_algs/__init__.py | 46 - src/prog_algs/metrics/__init__.py | 8 - src/prog_algs/metrics/samples.py | 42 - src/prog_algs/metrics/toe_metrics.py | 75 - src/prog_algs/metrics/toe_profile_metrics.py | 140 - .../metrics/uncertain_data_metrics.py | 112 - src/prog_algs/predictors/__init__.py | 16 - src/prog_algs/predictors/monte_carlo.py | 172 - src/prog_algs/predictors/prediction.py | 171 - src/prog_algs/predictors/predictor.py | 67 - .../predictors/toe_prediction_profile.py | 189 - .../predictors/unscented_transform.py | 283 - src/prog_algs/state_estimators/__init__.py | 7 - .../state_estimators/kalman_filter.py | 168 - .../state_estimators/particle_filter.py | 204 - .../state_estimators/state_estimator.py | 113 - .../unscented_kalman_filter.py | 137 - src/prog_algs/uncertain_data/__init__.py | 8 - .../multivariate_normal_dist.py | 85 - src/prog_algs/uncertain_data/scalar_data.py | 84 - .../uncertain_data/uncertain_data.py | 283 - .../uncertain_data/unweighted_samples.py | 180 - src/prog_algs/utils/__init__.py | 5 - src/prog_algs/utils/table.py | 93 - src/prog_algs/visualize/__init__.py | 5 - src/prog_algs/visualize/plot_hist.py | 58 - src/prog_algs/visualize/plot_scatter.py | 94 - state_estimator_template.py | 62 - test_requirements.txt | 4 - tests/__init__.py | 3 - tests/__main__.py | 73 - tests/benchmark.py | 126 - tests/test_examples.py | 62 - tests/test_manual.py | 40 - tests/test_metrics.py | 546 - tests/test_predictors.py | 423 - tests/test_state_estimators.py | 577 - tests/test_templates.py | 20 - tests/test_tutorials.py | 23 - tests/test_uncertain_data.py | 573 - tests/test_visualize.py | 55 - tutorial.ipynb | 620 - 149 files changed, 2 insertions(+), 33185 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/documentation-update.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/ISSUE_TEMPLATE/testing-update.md delete mode 100644 .github/workflows/pr-messages.yml delete mode 100644 .github/workflows/python-package.yml delete mode 100644 .github/workflows/release-messages.yml delete mode 100644 .github/workflows/release-tests.yml delete mode 100644 .github/workflows/release.yml delete mode 100644 .gitignore delete mode 100644 docs/.buildinfo delete mode 100644 docs/.doctrees/dev_guide.doctree delete mode 100644 docs/.doctrees/environment.pickle delete mode 100644 docs/.doctrees/exceptions.doctree delete mode 100644 docs/.doctrees/getting_started.doctree delete mode 100644 docs/.doctrees/index.doctree delete mode 100644 docs/.doctrees/metrics.doctree delete mode 100644 docs/.doctrees/prediction.doctree delete mode 100644 docs/.doctrees/predictors.doctree delete mode 100644 docs/.doctrees/release.doctree delete mode 100644 docs/.doctrees/state_estimators.doctree delete mode 100644 docs/.doctrees/uncertain_data.doctree delete mode 100644 docs/.doctrees/visualize.doctree delete mode 100644 docs/.nojekyll delete mode 100644 docs/7150.md delete mode 100644 docs/_downloads/067e6c82fdc9573fb921219d62002181/new_state_estimator_example.py delete mode 100644 docs/_downloads/200bc74cf412da163fa7fd0ac3a7bb56/tutorial.ipynb delete mode 100644 docs/_downloads/2c94710bd8ef995f1d885fb2ba73f158/kalman_filter.py delete mode 100644 docs/_downloads/3b9c0c03440e6a6ef2e2e2ccdbd961c5/utpredictor.py delete mode 100644 docs/_downloads/42767bcae008de45e317b0df375c7ab9/thrown_object_example.py delete mode 100644 docs/_downloads/44de953994033adbab05302cdc8c05e4/horizon.py delete mode 100644 docs/_downloads/847c5bdc6f78e586d5a56a90de4f1d95/playback.py delete mode 100644 docs/_downloads/a61393d56728af1a85621dfbed0a6ee1/particle_filter_battery_example.py delete mode 100644 docs/_downloads/b5b078b0fe440e9fa4d922ec9f4f1eea/basic_example.py delete mode 100644 docs/_downloads/d8bf57631d1133f1784a65d1b777032f/eol_event.py delete mode 100644 docs/_downloads/daee0732ebc9103bad35edc2271b7f8d/measurement_eqn_example.py delete mode 100644 docs/_downloads/ea97230ef09e27d10dd5f70f57cc729a/predict_specific_event.py delete mode 100644 docs/_downloads/f970960da825ceb736fa070c31c0b0e8/benchmarking_example.py delete mode 100644 docs/_images/alpha_lambda_plt_ex.png delete mode 100644 docs/_images/package_structure.png delete mode 100644 docs/_images/scatter_hist_ex.png delete mode 100644 docs/_images/scatter_plt_ex.png delete mode 100644 docs/_sources/dev_guide.rst.txt delete mode 100644 docs/_sources/exceptions.rst.txt delete mode 100644 docs/_sources/getting_started.rst.txt delete mode 100644 docs/_sources/index.rst.txt delete mode 100644 docs/_sources/metrics.rst.txt delete mode 100644 docs/_sources/prediction.rst.txt delete mode 100644 docs/_sources/predictors.rst.txt delete mode 100644 docs/_sources/release.rst.txt delete mode 100644 docs/_sources/state_estimators.rst.txt delete mode 100644 docs/_sources/uncertain_data.rst.txt delete mode 100644 docs/_sources/visualize.rst.txt delete mode 100644 docs/_static/alabaster.css delete mode 100644 docs/_static/basic.css delete mode 100644 docs/_static/custom.css delete mode 100644 docs/_static/doctools.js delete mode 100644 docs/_static/documentation_options.js delete mode 100644 docs/_static/file.png delete mode 100644 docs/_static/jquery-3.5.1.js delete mode 100644 docs/_static/jquery.js delete mode 100644 docs/_static/language_data.js delete mode 100644 docs/_static/minus.png delete mode 100644 docs/_static/plus.png delete mode 100644 docs/_static/pygments.css delete mode 100644 docs/_static/searchtools.js delete mode 100644 docs/_static/underscore-1.12.0.js delete mode 100644 docs/_static/underscore-1.13.1.js delete mode 100644 docs/_static/underscore-1.3.1.js delete mode 100644 docs/_static/underscore.js delete mode 100644 docs/dev_guide.html delete mode 100644 docs/exceptions.html delete mode 100644 docs/genindex.html delete mode 100644 docs/getting_started.html delete mode 100644 docs/index.html delete mode 100644 docs/metrics.html delete mode 100644 docs/objects.inv delete mode 100644 docs/prediction.html delete mode 100644 docs/predictors.html delete mode 100644 docs/py-modindex.html delete mode 100644 docs/release.html delete mode 100644 docs/search.html delete mode 100644 docs/searchindex.js delete mode 100644 docs/softwareplan.md delete mode 100644 docs/state_estimators.html delete mode 100644 docs/uncertain_data.html delete mode 100644 docs/visualize.html delete mode 100644 examples/__init__.py delete mode 100644 examples/basic_example.py delete mode 100644 examples/basic_example_battery.py delete mode 100644 examples/benchmarking_example.py delete mode 100644 examples/data_const_load.csv delete mode 100644 examples/eol_event.py delete mode 100644 examples/horizon.py delete mode 100644 examples/kalman_filter.py delete mode 100644 examples/measurement_eqn_example.py delete mode 100644 examples/new_state_estimator_example.py delete mode 100644 examples/particle_filter_battery_example.py delete mode 100644 examples/playback.py delete mode 100644 examples/predict_specific_event.py delete mode 100644 forms/Corporate CLA.pdf delete mode 100644 forms/Individual CLA.pdf delete mode 100644 license.pdf delete mode 100644 predictor_template.py delete mode 100644 scripts/test_copyright.py delete mode 100644 setup.py delete mode 100644 src/prog_algs/__init__.py delete mode 100644 src/prog_algs/metrics/__init__.py delete mode 100644 src/prog_algs/metrics/samples.py delete mode 100644 src/prog_algs/metrics/toe_metrics.py delete mode 100644 src/prog_algs/metrics/toe_profile_metrics.py delete mode 100644 src/prog_algs/metrics/uncertain_data_metrics.py delete mode 100644 src/prog_algs/predictors/__init__.py delete mode 100644 src/prog_algs/predictors/monte_carlo.py delete mode 100644 src/prog_algs/predictors/prediction.py delete mode 100644 src/prog_algs/predictors/predictor.py delete mode 100644 src/prog_algs/predictors/toe_prediction_profile.py delete mode 100644 src/prog_algs/predictors/unscented_transform.py delete mode 100644 src/prog_algs/state_estimators/__init__.py delete mode 100644 src/prog_algs/state_estimators/kalman_filter.py delete mode 100644 src/prog_algs/state_estimators/particle_filter.py delete mode 100644 src/prog_algs/state_estimators/state_estimator.py delete mode 100644 src/prog_algs/state_estimators/unscented_kalman_filter.py delete mode 100644 src/prog_algs/uncertain_data/__init__.py delete mode 100644 src/prog_algs/uncertain_data/multivariate_normal_dist.py delete mode 100644 src/prog_algs/uncertain_data/scalar_data.py delete mode 100644 src/prog_algs/uncertain_data/uncertain_data.py delete mode 100644 src/prog_algs/uncertain_data/unweighted_samples.py delete mode 100644 src/prog_algs/utils/__init__.py delete mode 100644 src/prog_algs/utils/table.py delete mode 100644 src/prog_algs/visualize/__init__.py delete mode 100644 src/prog_algs/visualize/plot_hist.py delete mode 100644 src/prog_algs/visualize/plot_scatter.py delete mode 100644 state_estimator_template.py delete mode 100644 test_requirements.txt delete mode 100644 tests/__init__.py delete mode 100644 tests/__main__.py delete mode 100644 tests/benchmark.py delete mode 100644 tests/test_examples.py delete mode 100644 tests/test_manual.py delete mode 100644 tests/test_metrics.py delete mode 100644 tests/test_predictors.py delete mode 100644 tests/test_state_estimators.py delete mode 100644 tests/test_templates.py delete mode 100644 tests/test_tutorials.py delete mode 100644 tests/test_uncertain_data.py delete mode 100644 tests/test_visualize.py delete mode 100644 tutorial.ipynb diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 8364cc4f..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**Relevant Requirements** -Indicate any enhancement issues (i.e., requirements) that are impacted by this issue. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Python Version [e.g. 3.7] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/documentation-update.md b/.github/ISSUE_TEMPLATE/documentation-update.md deleted file mode 100644 index 6eb7c869..00000000 --- a/.github/ISSUE_TEMPLATE/documentation-update.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: Documentation update -about: Update to the documentation -title: '' -labels: documentation -assignees: '' - ---- - -** Location where change is recommended ** - -** Recommended change ** - -** Reason ** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index b786a387..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -**Requirement Text** -What must this feature do, specifically - this is the thing to test to. E.g., Ability to simulate model until a specified event has been met. - -**Background Information** -Optional - -**Suggested Solution** -Optional, Solution that is proposed. Requirement can be met with other solutions - -**DoD** -What need to be completed for this feature to be complete. E.g., - - [ ] Implement feature - - [ ] Add to example - - [ ] Add to tutorial - - [ ] Add tests - - [ ] Add to change notes for next release diff --git a/.github/ISSUE_TEMPLATE/testing-update.md b/.github/ISSUE_TEMPLATE/testing-update.md deleted file mode 100644 index 6b57a323..00000000 --- a/.github/ISSUE_TEMPLATE/testing-update.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: Testing update -about: Update to tests or CI/CD pipeline -title: '' -labels: CI/CD -assignees: '' - ---- - -** Test to Update ** - -** Change Recommended ** - -** Reason ** diff --git a/.github/workflows/pr-messages.yml b/.github/workflows/pr-messages.yml deleted file mode 100644 index 3a839832..00000000 --- a/.github/workflows/pr-messages.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Print PR Message - Non Release - -on: - pull_request: - branches: - - 'dev' - types: [opened] - -jobs: - benchmark_branch: - runs-on: ubuntu-latest - steps: - - name: Auto Comment - uses: wow-actions/auto-comment@v1 - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - pullRequestOpened: > - Thank you for opening this PR. Each PR into dev requires a code review. For the code review, look at the following: - - - [ ] Reviewer should look for bugs, efficiency, readability, testing, and coverage in examples (if relevant). - - - [ ] Ensure that each PR adding a new feature should include a test verifying that feature. - - - [ ] All tests must be passing. - - - [ ] All errors from static analysis must be resolved. - - - [ ] Review the test coverage reports (if there is a change) - will be added as comment on PR if there is a change - - - [ ] Review the software benchmarking results (if there is a change) - will be added as comment on PR - - - [ ] Any added dependencies are included in requirements.txt, setup.py, and dev_guide.rst (this document) - - - [ ] All warnings from static analysis must be reviewed and resolved - if deemed appropriate. diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml deleted file mode 100644 index e6d2b476..00000000 --- a/.github/workflows/python-package.yml +++ /dev/null @@ -1,96 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - -name: Python package - -on: - push: - pull_request: - paths: - - prog_algs - -jobs: - test-prog_models-dev: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.7'] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install prog_models - run: | - python -m pip install git+https://github.com/nasa/prog_models.git@dev - - name: Install - run: | - python -m pip install --upgrade pip - python -m pip install -e . - python -m pip install notebook - python -m pip install testbook - - name: Run tests - run: python -m tests - # test-prog_models-released: - # runs-on: ubuntu-latest - # strategy: - # matrix: - # python-version: ['3.7'] - # steps: - # - uses: actions/checkout@v2 - # - name: Set up Python ${{ matrix.python-version }} - # uses: actions/setup-python@v2 - # with: - # python-version: ${{ matrix.python-version }} - # - name: Install - # run: | - # python -m pip install --upgrade pip - # python -m pip install -e . - # python -m pip install notebook - # python -m pip install testbook - # - name: Run tests - # run: python -m tests - copyright: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.10'] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Run copyright check - run: | - python scripts/test_copyright.py - coverage: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.10'] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install prog_models from dev - run: | - python -m pip install git+https://github.com/nasa/prog_models.git@dev - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install -e . - pip install coverage - pip install notebook - pip install testbook - - name: Run coverage - run: | - coverage run -m tests - coverage xml - - name: "Upload coverage to Codecov" - uses: codecov/codecov-action@v2 - with: - fail_ci_if_error: true diff --git a/.github/workflows/release-messages.yml b/.github/workflows/release-messages.yml deleted file mode 100644 index 2842dc5a..00000000 --- a/.github/workflows/release-messages.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Print PR Message - Release - -on: - pull_request: - branches: - - 'release/**' - types: [opened] - -jobs: - benchmark_branch: - runs-on: ubuntu-latest - steps: - - name: Auto Comment - uses: wow-actions/auto-comment@v1 - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - pullRequestOpened: > - Thank you for opening this PR. Since this is a release branch, the PR must complete the release checklist, below: - - - [ ] Check that each new feature has corresponding tests - - - [ ] Confirm all dependencies are in the following: requirements.txt, setup.py, the bottom of dev_guide.rst - - - [ ] Confirm that all issues associated with the release have been closed (i.e., requirements have been met) or assigned to another release - - - [ ] Run unit tests `python -m tests` - - - [ ] If present, run manual tests `python -m tests.test_manual` - - - [ ] Review the template(s) - - - [ ] Review static-analysis/linter results - - - [ ] Review the tutorial - - - [ ] Run and review the examples - - - [ ] Check that all examples are tested - - - [ ] Check new files in PR for any accidentally added - - - [ ] Check documents - - - [ ] Check that all desired examples are in docs - - - [ ] General review: see if any updates are required - - - [ ] Rebuild sphinx documents: `sphinx-build sphinx_config/ docs/` - - - [ ] Write release notes - - - [ ] Update version number in src/\*/__init__.py and setup.py - - - [ ] For releases adding new features- ensure that NASA release process has been followed. - - - [ ] Confirm that on GitHub Releases page, the next release has been started and that a schedule is present including at least Release Date, Release Review Date, and Release Branch Opening Date.` diff --git a/.github/workflows/release-tests.yml b/.github/workflows/release-tests.yml deleted file mode 100644 index 51bd60e6..00000000 --- a/.github/workflows/release-tests.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Python package - -on: - push: - branches: - - 'release/**' - pull_request: - branches: - - 'release/**' - paths: - - prog_algs - -jobs: - test-prog_models-dev: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.8', '3.9', '3.10'] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install prog_models - run: | - python -m pip install git+https://github.com/nasa/prog_models.git@dev - - name: Install - run: | - python -m pip install --upgrade pip - python -m pip install -e . - python -m pip install notebook - python -m pip install testbook - - name: Run tests - run: python -m tests - test-prog_models-released: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.8', '3.9', '3.10'] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install - run: | - python -m pip install --upgrade pip - python -m pip install -e . - python -m pip install notebook - python -m pip install testbook - - name: Run tests - run: python -m tests diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 381fd315..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Release - -on: - push: - branches: - - 'release/**' - - 'master' - -jobs: - analysis: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.9'] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install prog_models - run: | - python -m pip install git+https://github.com/nasa/prog_models.git@dev - - name: Lint with flake8 - run: | - python -m pip install flake8 - # stop the build if there are Python syntax errors or undefined names - flake8 src/prog_algs --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 src/prog_algs --count --benchmark --exit-zero --show-source --max-complexity=10 --max-line-length=127 --statistics --tee --output-file=lint_results_${{ matrix.python-version }}.txt - - name: Upload Lint Results - uses: actions/upload-artifact@v2 - with: - name: lint_results_${{matrix.python-version}} - path: lint_results_${{matrix.python-version}}.txt - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: 'python' - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 688f5636..00000000 --- a/.gitignore +++ /dev/null @@ -1,106 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# VS Code -.vscode/ -.pypirc -.DS_Store -data_test.pkl -predictor_test.pkl - -.VSCodeCounter/ diff --git a/README.md b/README.md index 196c0530..eea70b43 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,3 @@ -# Prognostics Algorithm Python Package -[![CodeFactor](https://www.codefactor.io/repository/github/nasa/prog_algs/badge)](https://www.codefactor.io/repository/github/nasa/prog_algs) -[![GitHub License](https://img.shields.io/badge/License-NOSA-green)](https://github.com/nasa/prog_algs/blob/master/license.pdf) -[![GitHub Releases](https://img.shields.io/github/release/nasa/prog_algs.svg)](https://github.com/nasa/prog_algs/releases) -[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/nasa/prog_algs/master?tutorial.ipynb) +# ProgPy Packages -The Prognostic Algorithm Package is a python framework for model-based prognostics (computation of remaining useful life) of engineering systems, and provides a set of algorithms for state estimation and prediction, including uncertainty propagation. The algorithms take as inputs prognostic models (from NASA's Prognostics Model Package), and perform estimation and prediction functions. The library allows the rapid development of prognostics solutions for given models of components and systems. Different algorithms can be easily swapped to do comparative studies and evaluations of different algorithms to select the best for the application at hand. - -This is designed to be used with the [Prognostics Models Package](https://github.com/nasa/prog_models). - -## Installation -`pip3 install prog_algs` - -## Documentation -See documentation [here](https://nasa.github.io/progpy/prog_algs_guide.html) - -## Repository Directory Structure - -`src/prog_algs/` - The prognostics algorithm python package
-`examples/` - Example Python scripts using prog_algs
-`tests/` - Tests for prog_models
-`README.md` - The readme (this file)
- -## Citing this repository -Use the following to cite this repository: - -``` -@misc{2023_nasa_prog_algs, - author = {Christopher Teubert and Matteo Corbetta and Chetan Kulkarni}, - title = {Prognostics Algorithm Python Package}, - month = May, - year = 2023, - version = {1.5}, - url = {https://github.com/nasa/prog\_algs} - } -``` - -The corresponding reference should look like this: - -C. Teubert, M. Corbetta, C. Kulkarni, Prognostics Algorithm Python Package, v1.5, May 2023. URL https://github.com/nasa/prog_algs. - -Alternatively, if using both prog_models and prog_algs, you can cite the combined package as - -C. Teubert, C. Kulkarni, M. Corbetta, K. Jarvis, M. Daigle, ProgPy Prognostics Python Packages, v1.5, May 2023. URL https://nasa.github.io/progpy. - -## Acknowledgements -The structure and algorithms of this package are strongly inspired by the [MATLAB Prognostics Algorithm Library](https://github.com/nasa/PrognosticsAlgorithmLibrary) and the [MATLAB Prognostics Metrics Library](https://github.com/nasa/PrognosticsMetricsLibrary). We would like to recognize Matthew Daigle, Shankar Sankararaman and the rest of the team that contributed to the Prognostics Model Library for the contributions their work on the MATLAB library made to the design of prog_algs - -## Notices -Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -## Disclaimers -No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS." - -Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT. +The prog_algs package has been combined with the prog_models package to create the new progpy python package, here: https://github.com/nasa/progpy. diff --git a/docs/.buildinfo b/docs/.buildinfo deleted file mode 100644 index e944f836..00000000 --- a/docs/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# 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: f13fb5c9a3612612d281a460bc957c40 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/dev_guide.doctree b/docs/.doctrees/dev_guide.doctree deleted file mode 100644 index 63151ae918e4c9de39fd5ee3935373639acc0fff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34994 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 diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle deleted file mode 100644 index 32eefb4a4f77b00f61c73df7f05dbdbab8795157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59278 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 Iy5++E0|9Y4ZU6uP diff --git a/docs/.doctrees/exceptions.doctree b/docs/.doctrees/exceptions.doctree deleted file mode 100644 index 8969685b56605a9ad6cb5d54ce4ba09a2819bca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12278 zcmdT~O^n@E6`ssw{{ND+nayMxmo~~v$;_}Qs2x=)rDRb;Mpav?N~O4d_I>Z#@v~q2 zlbN9)l0~JaTm(`LJ0xfUv4lkdu`3`UK!OG;p)O#7kXTTuq5`Q47JTR0zW#YXlS$Gc zjWjRz_5C^L+;hJ3`TATQ|K>l}N8~@T76Y7Od2cKfww0h;)i;0v4lieXEx&~H{5`I`r>q=ZcCMGf|H^o8M z_E@qRHw`gkL{VTj;|SW3He)Ij56mducpO1o_)pQv-fgGsDJ-?q=>OK!*7upb!Q*cK~8+kwy|<(wzk*ipn&zz{WL&joPP-kPV|J z`L6HYu`uu35a!Q=&0F4J(gAS3?-3vk_Eu&vmYZWQFw8HChqvsA>rnv2A|Bf~r8WBP zUl06h9TsulI+cj~udDxBbshLY8NH}uEF2nzo>*=4lWeJ@23NA2P2M%BNEu?jRlUv0=yIy z?}{Lgqm5H(R1RWznPSfDfsv6yH)n=!X`f06^gr6$A}wTYYfUf0PS-WOn?+5$Xj$1i zOxh=huFavd{_XNBdz@CeoO7=pqNAwqLgo|(Rm6Id zuVlRSMp67|hD?un-8fRNl8F0;VRNl>6_GQ-pUE{C6rE?GO-gMq=P~htQDn!W#Y$ev zUsh`lro@h08&&huZ}sEEa;XZ;)chnzUT|Q?Pz#8Q`;fuv8z=MD_mm|DkXw0hwj>5T zRe(UR;m#GMP(L(i@E`FXS3Ev91~_iX7|vyyMoOo0qVgBy!2w=d73J%@h%zK2_7$Z_ z9M0!4^$p~X34Tp#k*9}LOG*#U7cybNU~3to!HX2}1Vw9plqNS*Q!%Tp;+)R1arnhT zE#fTWS!hILYbu|H+7?b^&}#ZYKx91I-49}FwI9w8Nxfy~2Sc}{PpfqmBsBwk*m>J@Z<-tAB$_up-PsWTqW@3%lnQtJ)+6*9-JSX$>wv-4{;_I5F$9V&7dxyRhysus7p62+Nt}mnUSDBT2 z@v#JtA2tU4FH&mRc{kH7Cv!EHQ9HfHfr0Z&8X?a;oOhIAh7SWXb#fzOhCW-Hp4JTJ z(J48d7|qG)Bwa~zDzEC~G)0?S)*dEY2YZq)PlAw75r87=mgF1GpYK#69#taBtGb9d zoW5E9oFBA3g*S?`LEs0woI)4uz6Ow#sec9CKjSMDc85w*?{=SW+R)c%oE_t{LX2!n<^G@Sp++xkRjpY`$jKG7f&?8_*2QAa;`)~4+Sdd4JI?BC# z3%wFC9Y?Lz2Ug|x|6|pMI-{2*o#V5W%ka`PL89U`QY`v$gagacEaP&PM6A@F)TVHb zj^T68LOO3DLq7Ug^+9d0I7Ay0!cZJ0a`8<&5%aF$wPT~rU~vogqbNxgci_y_4=mkc zUHAuA*`d*NNfD|O#lXot zAoyu92W3#4Nu`viSAy4M-Sn32%AzZ=L|0e@^*huDdqcBX*z#G_?y6h3=wXT~c#hXb zZGdZc>?k>Z=%iTavTjieNXpDnOB3Z6It7Q&cocQRjrH}dtt}Mxpg_P|^Mm%ftafGH za6Q522aJ${V1ynq)QckWsIZ82S5JKGe%N&(XqmNTsHIruSiVf;`=}|lS=5rt@TlWr ziRs8_B8IGpC+DW9{Lt>`DmYasV^&mkRU8U;yvW$rx!vY2{@}d_U7s9(F6@j3A9R*jO46qc6nW6u1iC@lD%n!2@zw zI6^=X#?5NKL#)$e79w>AYjMUR%y!gtedB`8@HN!cQIm~|EUHj`NsKY?5|uNHsT3d( zk#H{hoIsxl^vDR>41j|)a2N~0St1l=!x2#ROI6R}NTro3bYwGTYpI(F3JTOlqx&Q^ zrq>PUT}oQ-(9b{U=kNH5#WeMZsI-`hs%4)|`Fu0xcT)=u;B&G!(prdOviJD=^1F=u zb|a4|yte0f`?O!KClR_u`jr7aY@dB0Toa!c9|CV?Atn!c+% zMRvWj)~I?c*EX=0JU^M1u&K7S=B5ZVHO{Y+}J`~`)%@p8H+G5g9}Q{adYi| Dys3;g diff --git a/docs/.doctrees/getting_started.doctree b/docs/.doctrees/getting_started.doctree deleted file mode 100644 index b02638288cf069447e328efe872da5aa98f48a00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88562 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 bLdoW$bK!LT8{FVHCki(dS!`Mu&eH!MHp$|i diff --git a/docs/.doctrees/metrics.doctree b/docs/.doctrees/metrics.doctree deleted file mode 100644 index 4607843721101728e5991c324613e166276523dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157860 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 JM|*Ve{{n{;TJHb= diff --git a/docs/.doctrees/prediction.doctree b/docs/.doctrees/prediction.doctree deleted file mode 100644 index bce59c0432db0c28823d48e72d1a633dfc3d692d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131768 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 diff --git a/docs/.doctrees/predictors.doctree b/docs/.doctrees/predictors.doctree deleted file mode 100644 index db4182ccde9f377924097930a5299f464fc7fe89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52194 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 OD@hm>G*rEn>i-3;%@mga diff --git a/docs/.doctrees/release.doctree b/docs/.doctrees/release.doctree deleted file mode 100644 index 49369de1075661e74ad2fe457e24ae932eeab459..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26832 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 AcK`qY diff --git a/docs/.doctrees/state_estimators.doctree b/docs/.doctrees/state_estimators.doctree deleted file mode 100644 index 314d941debc53e446957106ed9fbccc9c83156a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55930 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 Owpo}lav6FHmH!XXm~|2W diff --git a/docs/.doctrees/uncertain_data.doctree b/docs/.doctrees/uncertain_data.doctree deleted file mode 100644 index cfc938f1f599828ed05a63a3ad1ccfbed80b5d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100335 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 Xga6W=AtSb-M!ueKi%3TMQxpFmDT3=> diff --git a/docs/.doctrees/visualize.doctree b/docs/.doctrees/visualize.doctree deleted file mode 100644 index 469e5a46327ade2fb3d166e9ae348f68b0a5513a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14287 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 D!;;is diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/7150.md b/docs/7150.md deleted file mode 100644 index df233501..00000000 --- a/docs/7150.md +++ /dev/null @@ -1,30 +0,0 @@ -# Software Classification Documents -## Software Classification: Class-E - -## Compliance Notation Legend -FC: Fully Compliant - -T: Tailored (Specific tailoring described in mitigation)[SWE-121](https://swehb.nasa.gov/display/7150/SWE-121+-+Document+Alternate+Requirements) - -PC: Partially Compliant - -NC: Not Compliant - -NA: Not Applicable - -## Class-E Compliance Matrix -| NPR SWE #| Requirement Text |Comply | Evidence | -|:---|:--|:--|:--| -| [033](https://swehb.nasa.gov/display/SWEHBVC/SWE-033+-+Acquisition+vs.+Development+Assessment) | The project manager shall assess options for software acquisition versus development | FC | Assessed, there are some existing prognostics tools, but no general python package that can support model-based prognostics like we need. | -| [013](https://swehb.nasa.gov/display/SWEHBVC/SWE-013+-+Software+Plans) | The project manager shall develop, maintain, and execute software plans that cover the entire software life cycle and, as a minimum, address the requirements of this directive with approved tailoring | FC | See docs/ folder | -| [042](https://swehb.nasa.gov/display/SWEHBVC/SWE-042+-+Source+Code+Electronic+Access) | The project manager shall require the software developer(s) to provide NASA with electronic access to the source code developed for the project in a modifiable format.| FC | See git repository| -| [139](https://swehb.nasa.gov/display/SWEHBVC/SWE-139+-+Shall+Statements) | The project manager shall comply with the requirements in this NPR that are marked with an ”X” in Appendix C consistent with their software classification. | FC | This document describes compliance with NPR requirements | -| [121](https://swehb.nasa.gov/display/SWEHBVC/SWE-121+-+Document+Tailored+Requirements) | Where approved, the project manager shall document and reflect the tailored requirement in the plans or procedures controlling the development, acquisition, and deployment of the affected software. | FC | This Document | -| [125](https://swehb.nasa.gov/display/SWEHBVC/SWE-125+-+Requirements+Compliance+Matrix) | Each project manager with software components shall maintain a requirements mapping matrix or multiple requirements mapping matrices against requirements in this NPR, including those delegated to other parties or accomplished by contract vehicles or Space Act Agreements. | FC | This document | -| [029](https://swehb.nasa.gov/display/SWEHBVC/SWE-020+-+Software+Classification) | The project manager shall classify each system and subsystem containing software in accordance with the highest applicable software classification definitions for Classes A, B, C, D, E, and F software in Appendix D. | FC | This document | -| [022](https://swehb.nasa.gov/display/SWEHBVC/SWE-022+-+Software+Assurance) | The project manager shall plan and implement software assurance per [NASA-STD-8739.8](https://standards.nasa.gov/file/2640/download?token=GE2uRzcJ) | FC | See softwareplan.md | -| [205](https://swehb.nasa.gov/display/SWEHBVC/SWE-205+-+Determination+of+Safety-Critical+Software) | The project manager, in conjunction with the SMA organization, shall determine if each software component is considered to be safety-critical per the criteria defined in [NASA-STD-8739.8](https://standards.nasa.gov/file/2640/download?token=GE2uRzcJ). | NA | Not safety Critical | -| [023](https://swehb.nasa.gov/display/SWEHBVC/SWE-023+-+Software+Safety-Critical+Requirements) | If a project has safety-critical software, the project manager shall implement the safety-critical software requirements contained in [NASA-STD-8739.8](https://standards.nasa.gov/file/2640/download?token=GE2uRzcJ). | NA | Not Safety Critical| -| [206](https://swehb.nasa.gov/display/SWEHBVC/SWE-206+-+Auto-Generation+Software+Inputs) | The project manager shall require the software developers and suppliers to provide NASA with electronic access to the models, simulations, and associated data used as inputs for auto-generation of software. | FC | No auto generation| -| [148](https://swehb.nasa.gov/display/SWEHBVC/SWE-148+-+Contribute+to+Agency+Software+Catalog) | The project manager shall evaluate software for potential reuse by other projects across NASA and contribute reuse candidates to the NASA Internal Sharing and Reuse Software systems. However, if the project manager is a contractor, then a civil servant must pre-approve all such software contributions; all software contributions should include, at a minimum, the following information:
1. Software Title.
2. Software Description.
3. The Civil Servant Software Technical Point of Contact for the software product.
4. The language or languages used to develop the software.
5. Any third party code contained therein and the record of the requisite license or permission received from the third party permitting the Government’s use, if applicable. | FC | Will contribute | -| [156](https://swehb.nasa.gov/display/SWEHBVC/SWE-156+-+Evaluate+Systems+for+Security+Risks) | The project manager shall perform a software cybersecurity assessment on the software components per the Agency security policies and the project requirements, including risks posed by the use of COTS, GOTS, MOTS, OSS, or reused software components. | FC | Was evaluated in bitbucket code review| diff --git a/docs/_downloads/067e6c82fdc9573fb921219d62002181/new_state_estimator_example.py b/docs/_downloads/067e6c82fdc9573fb921219d62002181/new_state_estimator_example.py deleted file mode 100644 index cc409ce0..00000000 --- a/docs/_downloads/067e6c82fdc9573fb921219d62002181/new_state_estimator_example.py +++ /dev/null @@ -1,145 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -An example illustrating the creation of a new state estimator. - -In this example a basic state estimator is constructed by subclassing the StateEstimator class. This StateEstimator is then demonstrated with a ThrownObject model -""" - -from prog_algs.state_estimators import StateEstimator -from prog_algs.uncertain_data import ScalarData -import random - -class BlindlyStumbleEstimator(StateEstimator): - """ - A new state estimator. This is not a very effective state estimator, but one that technically works. It blindly stumbles towards the correct state by randomly generating a new state each timestep and selecting the state that's most consistant with the measurements. - - I do not in any universe recommend using this state estimator for anything other then demonstrating a bad state estimator. It's intended as an example of creating a new state estimation algorithm. - - This state estimator was created by copying the state estimator template and filling out each function with the logic for this algorithm - """ - def __init__(self, model, x0, measurement = None): - """ - Initialize the state estimator - - Args: - model (PrognosticsModel): Model to be used in state estimation - x0 (dict): Initial State - """ - self.m = model - self.state = x0 - - def estimate(self, t, u, z): - """ - Update the state estimate - - Args: - t (Number): Time - u (dict): Inputs (load) for time t - z (dict): Measured output at time t - """ - # Generate new candidate state - x2 = {key : float(value) + 10*(random.random()-0.5) for (key,value) in self.state.items()} - - # Calculate outputs - z_est = self.m.output(t, self.state) - z_est2 = self.m.output(t, x2) - - # Now score them each by how close they are to the measured z - z_est_score = sum([abs(z_est[key] - z[key]) for key in self.m.outputs]) - z_est2_score = sum([abs(z_est2[key] - z[key]) for key in self.m.outputs]) - - # Now choose the closer one - if z_est2_score < z_est_score: - self.state = x2 - - @property - def x(self): - """ - Measured state - """ - return ScalarData(self.state) - -# Model used in example -class ThrownObject(): - """ - Model that similates an object thrown into the air without air resistance - """ - - inputs = [] # no inputs, no way to control - states = [ - 'x', # Position (m) - 'v' # Velocity (m/s) - ] - outputs = [ # Anything we can measure - 'x' # Position (m) - ] - events = [ - 'falling', # Event- object is falling - 'impact' # Event- object has impacted ground - ] - - # The Default parameters. Overwritten by passing parameters dictionary into constructor - parameters = { - 'thrower_height': 1.83, # m - 'throwing_speed': 40, # m/s - 'g': -9.81, # Acceleration due to gravity in m/s^2 - 'process_noise': 0.0 # amount of noise in each step - } - - def initialize(self, u = None, z = None): - self.max_x = 0.0 - return { - 'x': self.parameters['thrower_height'], # Thrown, so initial altitude is height of thrower - 'v': self.parameters['throwing_speed'] # Velocity at which the ball is thrown - this guy is an professional baseball pitcher - } - - def dx(self, t, x, u = None): - # apply_process_noise is used to add process noise to each step - return { - 'x': x['v'], - 'v': self.parameters['g'] # Acceleration of gravity - } - - def output(self, t, x): - return { - 'x': x['x'] - } - - def event_state(self, t, x): - self.max_x = max(self.max_x, x['x']) # Maximum altitude - return { - 'falling': max(x['v']/self.parameters['throwing_speed'],0), # Throwing speed is max speed - 'impact': max(x['x']/self.max_x,0) # 1 until falling begins, then it's fraction of height - } - -def run_example(): - # This example creates a new state estimator, instead of using the included algorihtms. - # The new state estimator was defined above and can now be used like the UKF or PF - - # First we define the model to be used with the state estimator - m = ThrownObject() - - # Lets pretend we have no idea what the state is, we'll provide an estimate of 0 - x0 = {key : 0 for key in m.states} - filt = BlindlyStumbleEstimator(m, x0) - - # Now lets simulate it forward and see what it looks like - dt = 0.1 - x = m.initialize() - print('t: {}. State: {} (Ground truth: {})'.format(0, filt.x.mean, x)) - for i in range(1, int(8.4/dt)): - # Update ground truth state - x = {key : x[key] + m.dx(i*dt, x)[key] * dt for key in m.states} - - # Run estimation step - filt.estimate(i*dt, None, m.output(i*dt, x)) - - # Print result - print('t: {}. State: {} (Ground truth: {})'.format(i*dt, filt.x.mean, x)) - - # The results probably should show that it is estimating the state with a significant delay - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/200bc74cf412da163fa7fd0ac3a7bb56/tutorial.ipynb b/docs/_downloads/200bc74cf412da163fa7fd0ac3a7bb56/tutorial.ipynb deleted file mode 100644 index 1eab11d1..00000000 --- a/docs/_downloads/200bc74cf412da163fa7fd0ac3a7bb56/tutorial.ipynb +++ /dev/null @@ -1,620 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Welcome to the Prognostics Algorithms Package Tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The goal of this notebook is to instruct the user on how to use and extend the NASA Python Prognostics Algorithms Package. \n", - "\n", - "First some background. The Prognostics Algorithms Package (`prog_algs`) contains tools for performing prognostics (event prediction) using the Prognostics Models Package. `prog_algs` also includes tools for analyzing the performance of prognostics algorithms. \n", - "\n", - "A few definitions:\n", - "* state estimation: The process of estimating the (possibly hidden) state of a system given sensor information on observable states\n", - "* prediction: The process of predicting the evolution of a system state with time and the occurrence of events. \n", - "\n", - "The `prog_algs` package has the following primary subpackages\n", - "* `prog_algs.state_estimators` - Tools for performing state estimation\n", - "* `prog_algs.predictors` - Tools for performing prediction\n", - "* `prog_algs.uncertain_data` - Tools for representing data with uncertainty\n", - "\n", - "In addition to the `prog_algs` package, this repo includes examples showing how to use the package (see `examples/`), a template for implementing a new state estimator (`state_estimator_template`), a template for implementing a new predictor (`predictor_template`), documentation (), and this tutorial (`tutorial.ipynb`).\n", - "\n", - "Before you start, install `prog_algs` using pip:\n", - "\n", - " `pip install prog_algs`\n", - "\n", - "or, to use the pre-release, close from GitHub and checkout the dev branch. Then run the following command:\n", - " `pip install -e .`\n", - "\n", - "Now let's get started with some examples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## UncertainData - Representing a Distribution" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Uncertainty is sometimes present in data used for performing state estimations or making predictions.\n", - "\n", - "In `prog_algs`, data with uncertainty is represented using classes inheriting from `UncertainData`:\n", - "* `prog_algs.uncertain_data.MultivariateNormalDist` - Data represented by a multivariate normal distribution with mean and covariance matrix\n", - "* `prog_algs.uncertain_data.ScalarData` - Data without uncertainty, a single value\n", - "* `prog_algs.uncertain_data.UnweightedSamples` - Data represented by a set of unweighted samples. Objects of this class can be treated like a list where samples[n] returns the nth sample (Dict)\n", - "\n", - "To begin using `UncertainData`, import the type that best portrays the data. In this simple demonstration, we import the `UnweightedSamples` data type. See for full details on the available `UncertainData` types." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.uncertain_data import UnweightedSamples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With `UnweightedSamples` imported, construct an object with samples. This object can be initialized using either a dictionary, list, or model.*Container type from prog_models (e.g., StateContainer). Let's try creating an object using a dictionary. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "samples = UnweightedSamples([{'x': 1, 'v':2}, {'x': 3, 'v':-2}])\n", - "print(samples)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Given an integer value, addition and subtraction can be performed on the `UncertainData` classes to adjust the distribution by a scalar amount." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "samples = samples + 5\n", - "print(samples)\n", - "samples -= 3\n", - "print(samples)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also sample from any `UncertainData` distribution using the `sample` method. In this case it resamples from the existing samples" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(samples.sample()) # A single sample\n", - "print(samples.sample(10)) # 10 samples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see the keys present using the `.keys()` method:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(samples.keys())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "and the data corresponding to a specific key can be retrieved using `.key()`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(samples.key('x'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Various properties are available to quantify the `UncertainData` distribution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('mean', samples.mean)\n", - "print('median', samples.median)\n", - "print('covariance', samples.cov)\n", - "print('size', samples.size)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These `UncertainData` classes are used throughout the prog_algs package to represent data with uncertainty, as described in the following sections." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## State Estimation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "State estimation is the process of estimating the system state given sensor data and a model. Typically, this is done repeatedly as new sensor data is available.\n", - "\n", - "In `prog_algs` a State Estimator is used to estimate the system state. \n", - "\n", - "To start, import the needed packages. Here we will import the `BatteryCircuit` model and the `UnscentedKalmanFilter` state estimator. See for more details on the available state estimators.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_models.models import BatteryCircuit\n", - "from prog_algs.state_estimators import UnscentedKalmanFilter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we construct and initialize the model. \n", - "\n", - "We use the resulting model and initial state to construct the state estimator. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "m = BatteryCircuit()\n", - "x0 = m.initialize()\n", - "\n", - "# Turn into a distribution - this represents uncertainty in the initial state\n", - "from prog_algs.uncertain_data import MultivariateNormalDist\n", - "from numpy import diag\n", - "INITIAL_UNCERT = 0.05 # Uncertainty in initial state (%)\n", - "# Construct covariance matrix (making sure each value is positive)\n", - "cov = diag([max(abs(INITIAL_UNCERT * value), 1e-9) for value in x0.values()])\n", - "x0 = MultivariateNormalDist(x0.keys(), x0.values(), cov)\n", - "\n", - "# Construct State estimator\n", - "est = UnscentedKalmanFilter(m, x0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can use the estimator to estimate the system state." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Prior State:\", est.x.mean)\n", - "print('\\tSOC: ', m.event_state(est.x.mean)['EOD'])\n", - "fig = est.x.plot_scatter(label='prior')\n", - "\n", - "t = 0.1\n", - "u = {'i': 2}\n", - "example_measurements = {'t': 32.2, 'v': 3.915}\n", - "est.estimate(t, u, example_measurements)\n", - "\n", - "print(\"Posterior State:\", est.x.mean)\n", - "print('\\tSOC: ', m.event_state(est.x.mean)['EOD'])\n", - "est.x.plot_scatter(fig= fig, label='posterior')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As mentioned previously, this step is typically repeated when there's new data. filt.x may not be accessed every time the estimate is updated, only when it's needed." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prediction Example" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Prediction is the practice of using a state estimation, a model, and estimates of future loading to predict future states and when an event will occur.\n", - "\n", - "First we will import a predictor. In this case, we will use the MonteCarlo Predictor, but see documentation for a full list of predictors and their configuration parameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.predictors import MonteCarlo" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we initialize it using the model from the above example" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mc = MonteCarlo(m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let's define future loading and the first state. The first state is the output of the state estimator, and the future loading scheme is a simple piecewise function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x = est.x # The state estimate\n", - "\n", - "def future_loading(t, x={}):\n", - " # Variable (piece-wise) future loading scheme \n", - " if (t < 600):\n", - " i = 2\n", - " elif (t < 900):\n", - " i = 1\n", - " elif (t < 1800):\n", - " i = 4\n", - " elif (t < 3000):\n", - " i = 2\n", - " else:\n", - " i = 3\n", - " return m.InputContainer({'i': i})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's use the constructed mc predictor to perform a single prediction. Here we're setting dt to 0.25. Note this may take up to a minute" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mc_results = mc.predict(x, future_loading, dt=0.25, n_samples=20)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The predict function returns predictions of future inputs, states, outputs, and event_states at each save point. For sample-based predictors like the monte carlo, these can be accessed like an array with the format `[sample #][time]` so that `mc_results.states[m][n]` corresponds to the state for sample `m` at time `mc_results.times[m][n]`. Alternately, use the method `snapshot` to get a single point in time. e.g., \n", - "\n", - " `state = mc_results.states.snapshot(3)`\n", - "\n", - "In this case the state snapshot corresponds to time `mc_results.times[3]`. The snapshot method returns type UncertainData. \n", - "\n", - "The `predict` method also returns Time of Event (ToE) as a type UncertainData, representing the predicted time of event (for each event predicted), with uncertainty.\n", - "\n", - "Next, let's use the metrics package to analyze the ToE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"\\nEOD Predictions (s):\")\n", - "print('\\tPortion between 3005.2 and 3005.6: ', mc_results.time_of_event.percentage_in_bounds([3005.2, 3005.6]))\n", - "print('\\tAssuming ground truth 3005.25: ', mc_results.time_of_event.metrics(ground_truth = 3005.25))\n", - "from prog_algs.metrics import prob_success \n", - "print('\\tP(Success) if mission ends at 3005.25: ', prob_success(mc_results.time_of_event, 3005.25))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These analysis methods applied to ToE can also be applied to anything of type UncertainData (e.g., state snapshot). \n", - "\n", - "You can also visualize the results in a variety of different ways. For example, state transition" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig = mc_results.states.snapshot(0).plot_scatter(label = \"t={:.0f}\".format(int(mc_results.times[0])))\n", - "for i in range(1, 4):\n", - " index = int(len(mc_results.times)/4*i)\n", - " mc_results.states.snapshot(index).plot_scatter(fig=fig, label = \"t={:.0f}\".format(mc_results.times[index]))\n", - "mc_results.states.snapshot(-1).plot_scatter(fig = fig, label = \"t={:.0f}\".format(int(mc_results.times[-1])))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or time of event (ToE)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig = mc_results.time_of_event.plot_hist()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note, for this event, there is only one event (End of Discharge). Many models have multiple events that can be predicted. For these models, ToE for each event is returned and can be analyzed.\n", - "\n", - "Alternately, a specific event (or events) can be specified for prediction. See `examples.predict_specific_event` for more details." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Frequently the prediction step is run periodically, less often than the state estimator step" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Extending - Adding a new state estimator" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "New state estimators can be created by extending the state_estimator interface. As an example lets use a really dumb state estimator that adds random noise each step - and accepts the state that is closest. \n", - "\n", - "First thing we need to do is import the StateEstimator parent class" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.state_estimators.state_estimator import StateEstimator" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we select how state will be represented. In this case there's no uncertainty- it's just one state, so we represent it as a scaler. Import the appropriate class" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.uncertain_data import ScalarData" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we construct the class, implementing the functions of the state estimator template (`state_estimator_template.py`)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import random \n", - "\n", - "class BlindlyStumbleEstimator(StateEstimator):\n", - " def __init__(self, model, x0):\n", - " self.m = model\n", - " self.state = x0\n", - "\n", - " def estimate(self, t, u, z):\n", - " # Generate new candidate state\n", - " x2 = {key : float(value) + 10*(random.random()-0.5) for (key,value) in self.state.items()}\n", - "\n", - " # Calculate outputs\n", - " z_est = self.m.output(self.state)\n", - " z_est2 = self.m.output(x2)\n", - "\n", - " # Now score them each by how close they are to the measured z\n", - " z_est_score = sum([abs(z_est[key] - z[key]) for key in self.m.outputs])\n", - " z_est2_score = sum([abs(z_est2[key] - z[key]) for key in self.m.outputs])\n", - "\n", - " # Now choose the closer one\n", - " if z_est2_score < z_est_score: \n", - " self.state = x2\n", - "\n", - " @property\n", - " def x(self):\n", - " return ScalarData(self.state)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Great, now let's try it out using the model from earlier. with an initial state of all 0s. It should slowly converge towards the correct state" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "x0 = {key: 0 for key in m.states}\n", - "se = BlindlyStumbleEstimator(m, x0)\n", - "\n", - "for i in range(25):\n", - " u = {'i': 0}\n", - " z = {'t': 18.95, 'v': 4.183}\n", - " se.estimate(i, u, z)\n", - " print(se.x.mean)\n", - " print(\"\\tcorrect: {'tb': 18.95, 'qb': 7856.3254, 'qcp': 0, 'qcs': 0}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Extending - Adding a new Predictor" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Like the example above with StateEstimators, Predictors can be extended by subclassing the Predictor class. Copy `predictor_template.py` as a starting point." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Conclusion\n", - "This is just the basics, there's much more to learn. Please see the documentation at and the examples in the `examples/` folder for more details on how to use the package, including:\n", - "* `examples.basic_example` : A basic Example using prog_algs for Prognostics \n", - "* `examples.benchmarking_example` : An example benchmarking the performance of prognostics algorithms\n", - "* `examples.eol_event` : An example where a model has multiple events, but the user is only interested in predicting the time when the first event occurs (whatever it is).\n", - "* `examples.measurement_eqn_example` : An example where not every output is measured or measurements are not in the same format as outputs, so a measurement equation is defined to translate between outputs and what's measured. \n", - "* `examples.new_state_estimator_example` : An example of extending StateEstimator to create a new state estimator class\n", - "* `examples.playback` : A full example performing prognostics using playback data.\n", - "* `examples.predict_specific_event` : An example where the model has multiple events, but the user is only interested in predicting a specific event (or events).\n", - "* `examples.thrown_object_example` : An example performing prognostics with the simplified ThrownObject model\n", - "* `examples.utpredictor` : An example using the Unscented Transform Predictor for prediction.\n", - "\n", - "Thank you for trying out this tutorial. Open an issue on github () or email Chris Teubert (christopher.a.teubert@nasa.gov) with any questions or issues." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved." - ] - } - ], - "metadata": { - "interpreter": { - "hash": "ff94885aa2d97705a9dae03869c2058fa855d1acd9df351499300343e2e591a2" - }, - "kernelspec": { - "display_name": "Python 3.8.13 64-bit", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.13" - }, - "metadata": { - "interpreter": { - "hash": "ff94885aa2d97705a9dae03869c2058fa855d1acd9df351499300343e2e591a2" - } - }, - "orig_nbformat": 2 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/_downloads/2c94710bd8ef995f1d885fb2ba73f158/kalman_filter.py b/docs/_downloads/2c94710bd8ef995f1d885fb2ba73f158/kalman_filter.py deleted file mode 100644 index eab72e2d..00000000 --- a/docs/_downloads/2c94710bd8ef995f1d885fb2ba73f158/kalman_filter.py +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example demonstrates use of the Kalman Filter State Estimator with a LinearModel. - -First, a linear model is defined. Then the KF State estimator is used with fake data to estimate state. -""" - -import numpy as np - -from prog_models import LinearModel -from prog_algs.state_estimators import KalmanFilter - -# Linear Model for an object thrown into the air -class ThrownObject(LinearModel): - """ - Model that similates an object thrown into the air without air resistance - - Events (2) - | falling: The object is falling - | impact: The object has hit the ground - - Inputs/Loading: (0) - - States: (2) - | x: Position in space (m) - | v: Velocity in space (m/s) - - Outputs/Measurements: (1) - | x: Position in space (m) - - Keyword Args - ------------ - process_noise : Optional, float or Dict[Srt, float] - Process noise (applied at dx/next_state). - Can be number (e.g., .2) applied to every state, a dictionary of values for each - state (e.g., {'x1': 0.2, 'x2': 0.3}), or a function (x) -> x - process_noise_dist : Optional, String - distribution for process noise (e.g., normal, uniform, triangular) - measurement_noise : Optional, float or Dict[Srt, float] - Measurement noise (applied in output eqn). - Can be number (e.g., .2) applied to every output, a dictionary of values for each - output (e.g., {'z1': 0.2, 'z2': 0.3}), or a function (z) -> z - measurement_noise_dist : Optional, String - distribution for measurement noise (e.g., normal, uniform, triangular) - g : Optional, float - Acceleration due to gravity (m/s^2). Default is 9.81 m/s^2 (standard gravity) - thrower_height : Optional, float - Height of the thrower (m). Default is 1.83 m - throwing_speed : Optional, float - Speed at which the ball is thrown (m/s). Default is 40 m/s - """ - - inputs = [] # no inputs, no way to control - states = [ - 'x', # Position (m) - 'v' # Velocity (m/s) - ] - outputs = [ - 'x' # Position (m) - ] - events = [ - 'impact' # Event- object has impacted ground - ] - - A = np.array([[0, 1], [0, 0]]) - E = np.array([[0], [-9.81]]) - C = np.array([[1, 0]]) - F = None # Will override method - - # The Default parameters. Overwritten by passing parameters dictionary into constructor - default_parameters = { - 'thrower_height': 1.83, # m - 'throwing_speed': 40, # m/s - 'g': -9.81 # Acceleration due to gravity in m/s^2 - } - - def initialize(self, u=None, z=None): - return self.StateContainer({ - 'x': self.parameters['thrower_height'], # Thrown, so initial altitude is height of thrower - 'v': self.parameters['throwing_speed'] # Velocity at which the ball is thrown - this guy is a professional baseball pitcher - }) - - # This is actually optional. Leaving thresholds_met empty will use the event state to define thresholds. - # Threshold = Event State == 0. However, this implementation is more efficient, so we included it - def threshold_met(self, x): - return { - 'falling': x['v'] < 0, - 'impact': x['x'] <= 0 - } - - def event_state(self, x): - x_max = x['x'] + np.square(x['v'])/(-self.parameters['g']*2) # Use speed and position to estimate maximum height - return { - 'falling': np.maximum(x['v']/self.parameters['throwing_speed'],0), # Throwing speed is max speed - 'impact': np.maximum(x['x']/x_max,0) if x['v'] < 0 else 1 # 1 until falling begins, then it's fraction of height - } - -def run_example(): - # Step 1: Instantiate the model - m = ThrownObject(process_noise = 0, measurement_noise = 0) - - # Step 2: Instantiate the Kalman Filter State Estimator - # Define the initial state to be slightly off of actual - x_guess = {'x': 1.75, 'v': 35} # Guess of initial state, actual is {'x': 1.83, 'v': 40} - kf = KalmanFilter(m, x_guess) - - # Step 3: Run the Kalman Filter State Estimator - # Here we're using simulated data from the thrown_object. In a real application you would be using sensor data from the system - dt = 0.01 # Time step (s) - print_freq = 50 # Print every print_freq'th iteration - x = m.initialize() - u = m.InputContainer({}) # No input for this model - - for i in range(500): - # Get simulated output (would be measured in a real application) - z = m.output(x) - - # Estimate New State - kf.estimate(i*dt, u, z) - x_est = kf.x.mean - - # Print Results - if i%print_freq == 0: # Print every print_freq'th iteration - print(f"t: {i*dt:.2f}\n\tEstimate: {x_est}\n\tTruth: {x}") - diff = {key: x_est[key] - x[key] for key in x.keys()} - print(f"\t Diff: {diff}") - - # Update Real state for next step - x = m.next_state(x, u, dt) - -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/3b9c0c03440e6a6ef2e2e2ccdbd961c5/utpredictor.py b/docs/_downloads/3b9c0c03440e6a6ef2e2e2ccdbd961c5/utpredictor.py deleted file mode 100644 index 3ec1544a..00000000 --- a/docs/_downloads/3b9c0c03440e6a6ef2e2e2ccdbd961c5/utpredictor.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -An example using the UnscentedTransformPredictor class to predict the degredation of a battery. -""" - -from prog_models.models import BatteryCircuit -from prog_algs import * -# from prog_algs.visualize import plot_hist -# import matplotlib.pyplot as plt - -def run_example(): - ## Setup - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - - batt = BatteryCircuit() - - ## State Estimation - perform a single ukf state estimate step - filt = state_estimators.UnscentedKalmanFilter(batt, batt.parameters['x0']) - - import matplotlib.pyplot as plt # For plotting - print("Prior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - example_measurements = {'t': 32.2, 'v': 3.915} - t = 0.1 - filt.estimate(t, future_loading(t), example_measurements) - print("Posterior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - ## Prediction - Predict EOD given current state - # Setup prediction - mc = predictors.UnscentedTransformPredictor(batt) - - # Predict with a step size of 0.1 - mc_results = mc.predict(filt.x, future_loading, dt=0.1, save_freq= 100) - - # Print Results - for i, time in enumerate(mc_results.times): - print('\nt = {}'.format(time)) - print('\tu = {}'.format(mc_results.inputs.snapshot(i).mean)) - print('\tx = {}'.format(mc_results.states.snapshot(i).mean)) - print('\tz = {}'.format(mc_results.outputs.snapshot(i).mean)) - print('\tevent state = {}'.format(mc_results.event_states.snapshot(i).mean)) - - print('\nToE:', mc_results.time_of_event.mean) - - # You can also access the final state (of type UncertainData), like so: - final_state = mc_results.time_of_event.final_state - print('Final state @EOD: ', final_state['EOD'].mean) - # toe.plot_hist() - # plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/42767bcae008de45e317b0df375c7ab9/thrown_object_example.py b/docs/_downloads/42767bcae008de45e317b0df375c7ab9/thrown_object_example.py deleted file mode 100644 index 54c8ac22..00000000 --- a/docs/_downloads/42767bcae008de45e317b0df375c7ab9/thrown_object_example.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation and prediction with uncertainty given a Prognostics Model. Unlike basic_example, this example uses a model with multiple events (ThrownObject). Prediction only ends when all events are met - -Method: An instance of the Thrown Object model in prog_models is created, and the prediction process is achieved in three steps: - 1) State estimation of the current state is performed using a chosen state_estimator, and samples are drawn from this estimate - 2) Prediction of future states (with uncertainty) and the times at which the event thresholds will be reached -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) -""" - -from prog_models.models.thrown_object import ThrownObject -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs import * - -from pprint import pprint - -def run_example(): - # Step 1: Setup model & future loading - def future_loading(t, x = None): - return {} - m = ThrownObject(process_noise = 0.25, measurement_noise = 0.2) - initial_state = m.initialize({}, {}) - - # Step 2: Demonstrating state estimator - print("\nPerforming State Estimation Step...") - - # Step 2a: Setup - NUM_SAMPLES = 1000 - filt = state_estimators.ParticleFilter(m, initial_state, num_particles = NUM_SAMPLES) - # VVV Uncomment this to use UKF State Estimator VVV - # filt = state_estimators.UnscentedKalmanFilter(batt, initial_state) - - # Step 2b: Print & Plot Prior State - filt.estimate(0.1, {}, m.output(initial_state)) - - # Note: in a prognostic application the above state estimation step would be repeated each time - # there is new data. Here we're doing one step to demonstrate how the state estimator is used - - # Step 3: Demonstrating Predictor - print("\nPerforming Prediction Step...") - - # Step 3a: Setup Predictor - mc = predictors.MonteCarlo(m) - - # Step 3b: Perform a prediction - samples = filt.x # Since we're using a particle filter, which is also sample-based, we can directly use the samples, without changes - STEP_SIZE = 0.01 - mc_results = mc.predict(samples, future_loading, dt=STEP_SIZE, horizon=8) - print("\nPredicted Time of Event:") - pprint(mc_results.time_of_event.metrics()) # Note this takes some time - mc_results.time_of_event.plot_hist(keys = 'impact') - mc_results.time_of_event.plot_hist(keys = 'falling') - - # Step 4: Show all plots - import matplotlib.pyplot as plt # For plotting - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/44de953994033adbab05302cdc8c05e4/horizon.py b/docs/_downloads/44de953994033adbab05302cdc8c05e4/horizon.py deleted file mode 100644 index 1442a22c..00000000 --- a/docs/_downloads/44de953994033adbab05302cdc8c05e4/horizon.py +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation and prediction with uncertainty given a Prognostics Model with a specific prediction horizon. This prediction horizon marks the end of the "time of interest" for the prediction. Often this represents the end of a mission or sufficiently in the future where the user is unconcerned with the events - -Method: An instance of the Thrown Object model in prog_models is created, and the prediction process is achieved in three steps: - 1) State estimation of the current state is performed using a chosen state_estimator, and samples are drawn from this estimate - 2) Prediction of future states (with uncertainty) and the times at which the event thresholds will be reached, within the prediction horizon. All events outside the horizon come back as None and are ignored in metrics -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) -""" - -from prog_models.models.thrown_object import ThrownObject -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs import * - -from pprint import pprint - -def run_example(): - # Step 1: Setup model & future loading - def future_loading(t, x = None): - return {} - m = ThrownObject(process_noise = 0.25, measurement_noise = 0.2) - initial_state = m.initialize({}, {}) - - # Step 2: Demonstrating state estimator - print("\nPerforming State Estimation Step...") - - # Step 2a: Setup - NUM_SAMPLES = 1000 - filt = state_estimators.ParticleFilter(m, initial_state, num_particles = NUM_SAMPLES) - # VVV Uncomment this to use UKF State Estimator VVV - # filt = state_estimators.UnscentedKalmanFilter(batt, initial_state) - - # Step 2b: Print & Plot Prior State - filt.estimate(0.1, {}, m.output(initial_state)) - - # Note: in a prognostic application the above state estimation step would be repeated each time - # there is new data. Here we're doing one step to demonstrate how the state estimator is used - - # Step 3: Demonstrating Predictor - print("\nPerforming Prediction Step...") - - # Step 3a: Setup Predictor - mc = predictors.MonteCarlo(m) - - # Step 3b: Perform a prediction - # THIS IS WHERE WE DIVERGE FROM THE THROWN_OBJECT_EXAMPLE - # Here we set a prediction horizon - # We're saying we are not interested in any events that occur after this time - PREDICTION_HORIZON = 7.75 - samples = filt.x # Since we're using a particle filter, which is also sample-based, we can directly use the samples, without changes - STEP_SIZE = 0.01 - mc_results = mc.predict(samples, future_loading, dt=STEP_SIZE, horizon = PREDICTION_HORIZON) - print("\nPredicted Time of Event:") - metrics = mc_results.time_of_event.metrics() - pprint(metrics) # Note this takes some time - mc_results.time_of_event.plot_hist(keys = 'impact') - mc_results.time_of_event.plot_hist(keys = 'falling') - - print("\nSamples where impact occurs before horizon: {:.2f}%".format(metrics['impact']['number of samples']/NUM_SAMPLES*100)) - - # Step 4: Show all plots - import matplotlib.pyplot as plt # For plotting - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/847c5bdc6f78e586d5a56a90de4f1d95/playback.py b/docs/_downloads/847c5bdc6f78e586d5a56a90de4f1d95/playback.py deleted file mode 100644 index bc982487..00000000 --- a/docs/_downloads/847c5bdc6f78e586d5a56a90de4f1d95/playback.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs state estimation and prediction using playback data. - -Method: An instance of the BatteryCircuit model in prog_models is created, the state estimation is set up by defining a state_estimator, and the prediction method is set up by defining a predictor. - Prediction is then performed using playback data. For each data point: - 1) The necessary data is extracted (time, current load, output values) and corresponding values defined (t, i, and z) - 2) The current state estimate is performed and samples are drawn from this distribution - 3) Prediction performed to get future states (with uncertainty) and the times at which the event threshold will be reached - -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics - iv) Figures illustrating results -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs.state_estimators import UnscentedKalmanFilter as StateEstimator -# VVV Uncomment this to use UnscentedKalmanFilter instead VVV -# from prog_algs.state_estimators import ParticleFilter as StateEstimator - -from prog_algs.predictors import ToEPredictionProfile - -from prog_algs.predictors import UnscentedTransformPredictor as Predictor -# VVV Uncomment this to use MonteCarloPredictor instead -# from prog_algs.predictors import MonteCarlo as Predictor - -from prog_algs.uncertain_data.multivariate_normal_dist import MultivariateNormalDist - -import csv -import matplotlib.pyplot as plt -import numpy as np - -# Constants -NUM_SAMPLES = 20 -NUM_PARTICLES = 1000 # For state estimator (if using ParticleFilter) -TIME_STEP = 1 -PREDICTION_UPDATE_FREQ = 50 # Number of steps between prediction update -PLOT = True -PROCESS_NOISE = 1e-4 # Percentage process noise -MEASUREMENT_NOISE = 1e-4 # Percentage measurement noise -X0_COV = 1 # Covariance percentage with initial state -GROUND_TRUTH = {'EOD':2780} -ALPHA = 0.05 -BETA = 0.90 -LAMBDA_VALUE = 1500 - -def run_example(): - # Setup Model - batt = Battery() - - # Initial state - x0 = batt.initialize() - batt.parameters['process_noise'] = {key: PROCESS_NOISE * value for key, value in x0.items()} - z0 = batt.output(x0) - batt.parameters['measurement_noise'] = {key: MEASUREMENT_NOISE * value for key, value in z0.items()} - x0 = MultivariateNormalDist(x0.keys(), list(x0.values()), np.diag([max(1e-9, X0_COV * abs(x)) for x in x0.values()])) - - # Setup State Estimation - filt = StateEstimator(batt, x0, num_particles = NUM_PARTICLES) - - # Setup Prediction - def future_loading(t, x=None): - return {'i': 2.35} - Q = np.diag([batt.parameters['process_noise'][key] for key in batt.states]) - R = np.diag([batt.parameters['measurement_noise'][key] for key in batt.outputs]) - mc = Predictor(batt, Q = Q, R = R) - - # Run Playback - step = 0 - profile = ToEPredictionProfile() - - with open('examples/data_const_load.csv', 'r') as f: - reader = csv.reader(f) - next(reader) # Skip header - for row in reader: - step += 1 - print("{} s: {} W, {} C, {} V".format(*row)) - t = float(row[0]) - i = {'i': float(row[1])/float(row[3])} - z = {'t': float(row[2]), 'v': float(row[3])} - - # State Estimation Step - filt.estimate(t, i, z) - eod = batt.event_state(filt.x.mean)['EOD'] - print(" - Event State: ", eod) - - # Prediction Step (every PREDICTION_UPDATE_FREQ steps) - if (step%PREDICTION_UPDATE_FREQ == 0): - mc_results = mc.predict(filt.x, future_loading, t0 = t, n_samples=NUM_SAMPLES, dt=TIME_STEP) - metrics = mc_results.time_of_event.metrics() - print(' - ToE: {} (sigma: {})'.format(metrics['EOD']['mean'], metrics['EOD']['std'])) - profile.add_prediction(t, mc_results.time_of_event) - - # Calculating Prognostic Horizon once the loop completes - from prog_algs.uncertain_data.uncertain_data import UncertainData - from prog_algs.metrics import samples as metrics - - def criteria_eqn(tte : UncertainData, ground_truth_tte : dict) -> dict: - """ - Sample criteria equation for playback. - # UPDATE THIS CRITERIA EQN AND WHAT IS CALCULATED - - Args: - tte : UncertainData - Time to event in UncertainData format. - ground_truth_tte : dict - Dictionary of ground truth of time to event. - """ - - # Set an alpha value - bounds = {} - for key, value in ground_truth_tte.items(): - # Set bounds for precentage_in_bounds by adding/subtracting to the ground_truth - alpha_calc = value * ALPHA - bounds[key] = [value - alpha_calc, value + alpha_calc] # Construct bounds for all events - percentage_in_bounds = tte.percentage_in_bounds(bounds) - - # Verify if percentage in bounds for this ground truth meets beta distribution percentage limit - return {key: percentage_in_bounds[key] > BETA for key in percentage_in_bounds.keys()} - - # Generate plots for playback example - playback_plots = profile.plot(GROUND_TRUTH, ALPHA, True) - - # Calculate prognostic horizon with ground truth, and print - ph = profile.prognostic_horizon(criteria_eqn, GROUND_TRUTH) - print(f"Prognostic Horizon for 'EOD': {ph['EOD']}") - - # Calculate alpha lambda with ground truth, lambda, alpha, and beta, and print - al = profile.alpha_lambda(GROUND_TRUTH, LAMBDA_VALUE, ALPHA, BETA) - print(f"Alpha Lambda for 'EOD': {al['EOD']}") - - # Calculate cumulative relative accuracy with ground truth, and print - cra = profile.cumulative_relative_accuracy(GROUND_TRUTH) - print(f"Cumulative Relative Accuracy for 'EOD': {cra['EOD']}") - - input('Press any key to exit') - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/a61393d56728af1a85621dfbed0a6ee1/particle_filter_battery_example.py b/docs/_downloads/a61393d56728af1a85621dfbed0a6ee1/particle_filter_battery_example.py deleted file mode 100644 index 4b9a9856..00000000 --- a/docs/_downloads/a61393d56728af1a85621dfbed0a6ee1/particle_filter_battery_example.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -In this example the BatteryElectroChemEOD model is used with a particle filter to estimate the state of the battery -""" - -from prog_models.models import BatteryElectroChemEOD -from prog_algs import * -import numpy as np -import matplotlib.pyplot as plt - -def run_example(): - ## Setup - def future_loading(t, x=None): - load = 1 - return {"i": load} - # Save battery model - # Time increment - dt = 1 - # Process noise - Q_vars = { - 'tb': 1, - 'Vo': 0.01, - 'Vsn': 0.01, - 'Vsp': 0.01, - 'qnB': 1, - 'qnS': 1, - 'qpB': 1, - 'qpS': 1 - } - # Measurement noise - R_vars = { - 't': 2, - 'v': 0.02 - } - battery = BatteryElectroChemEOD(process_noise= Q_vars, - measurement_noise = R_vars, - dt = dt) - - # Simulate data until EOD - start_u = future_loading(0) - start_x = battery.initialize(start_u) - start_y = battery.output(start_x) - sim_results = battery.simulate_to_threshold(future_loading, start_y, save_freq = 1) - - # Run particle filter - all_particles = [] - n_times = int(np.round(np.random.uniform(len(sim_results.times)*.25,len(sim_results.times)*.45,1)))# Random current time - - for i in range(n_times): - if i == 0: - batt_pf = state_estimators.ParticleFilter(model = battery, x0 = sim_results.states[i], num_particles = 250) - else: - batt_pf.estimate(t = sim_results.times[i], u = sim_results.inputs[i], z = sim_results.outputs[i]) - all_particles.append(batt_pf.particles) - - # Mean of the particles - alpha = 0.05 - states_vsn = [s['tb'] for s in sim_results.states] - pf_mean = [{key: np.mean(ps[key]) for key in battery.states} for ps in all_particles] - pf_low = [{key: np.quantile(ps[key], alpha / 2.0) for key in battery.states} for ps in all_particles] - pf_upp = [{key: np.quantile(ps[key], 1.0 - alpha / 2.0) for key in battery.states} for ps in all_particles] - print("First State:", pf_mean[0]) - print("Current State:", pf_mean[-1]) - plt.plot(sim_results.times[:n_times],[p['tb'] for p in pf_mean],linewidth=0.7,color="blue") - plt.plot(sim_results.times[:n_times], states_vsn[:n_times],"--",linewidth=0.7,color="red") - plt.fill_between(sim_results.times[:n_times],[p['tb'] for p in pf_low],[p['tb'] for p in pf_upp],alpha=0.5,color="blue") - plt.show() - - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() \ No newline at end of file diff --git a/docs/_downloads/b5b078b0fe440e9fa4d922ec9f4f1eea/basic_example.py b/docs/_downloads/b5b078b0fe440e9fa4d922ec9f4f1eea/basic_example.py deleted file mode 100644 index 0cbe2fcd..00000000 --- a/docs/_downloads/b5b078b0fe440e9fa4d922ec9f4f1eea/basic_example.py +++ /dev/null @@ -1,123 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation and prediction with uncertainty given a Prognostics Model. - -Method: An instance of the BatteryCircuit model in prog_models is created, and the prediction process is achieved in three steps: - 1) State estimation of the current state is performed using a chosen state_estimator, and samples are drawn from this estimate - 2) Prediction of future states (with uncertainty) and the times at which the event threshold will be reached - 3) Metrics tools are used to further investigate the results of prediction -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics - iv) Figures illustrating results -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -from prog_models.models import BatteryElectroChemEOD as Battery - -from prog_algs import * - -def run_example(): - # Step 1: Setup model & future loading - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - # Measurement noise - R_vars = { - 't': 2, - 'v': 0.02 - } - batt = Battery(measurement_noise = R_vars) - initial_state = batt.parameters['x0'] - - # Step 2: Demonstrating state estimator - print("\nPerforming State Estimation Step") - - # Step 2a: Setup - filt = state_estimators.ParticleFilter(batt, initial_state) - # VVV Uncomment this to use UKF State Estimator VVV - # filt = state_estimators.UnscentedKalmanFilter(batt, initial_state) - - # Step 2b: Print & Plot Prior State - print("Prior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - fig = filt.x.plot_scatter(label='prior') - - # Step 2c: Perform state estimation step - example_measurements = {'t': 32.2, 'v': 3.915} - t = 0.1 - filt.estimate(t, future_loading(t), example_measurements) - - # Step 2d: Print & Plot Resulting Posterior State - print("\nPosterior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - filt.x.plot_scatter(fig=fig, label='posterior') # Add posterior state to figure from prior state - - # Note: in a prognostic application the above state estimation step would be repeated each time - # there is new data. Here we're doing one step to demonstrate how the state estimator is used - - # Step 3: Demonstrating Predictor - print("\n\nPerforming Prediction Step") - - # Step 3a: Setup Predictor - mc = predictors.MonteCarlo(batt) - - # Step 3b: Perform a prediction - NUM_SAMPLES = 5 - STEP_SIZE = 0.1 - mc_results = mc.predict(filt.x, future_loading, n_samples = NUM_SAMPLES, dt=STEP_SIZE) - print('ToE', mc_results.time_of_event.mean) - - # Step 3c: Analyze the results - - # Note: The results of a sample-based prediction can be accessed by sample, e.g., - states_sample_1 = mc_results.states[1] - # now states_sample_1[n] corresponds to times[n] for the first sample - - # You can also access a state distribution at a specific time using the .snapshot function - states_time_1 = mc_results.states.snapshot(1) - # now you have all the samples corresponding to times[1] - - # You can also access the final state (of type UncertainData), like so: - final_state = mc_results.time_of_event.final_state - print('Final state @EOD: ', final_state['EOD'].mean) - - # You can also use the metrics package to generate some useful metrics on the result of a prediction - print("\nEOD Prediction Metrics") - - from prog_algs.metrics import prob_success - print('\tPortion between 3005.2 and 3005.6: ', mc_results.time_of_event.percentage_in_bounds([3005.2, 3005.6])) - print('\tAssuming ground truth 3002.25: ', mc_results.time_of_event.metrics(ground_truth=3005.25)) - print('\tP(Success) if mission ends at 3002.25: ', prob_success(mc_results.time_of_event, 3005.25)) - - # Plot state transition - # Here we will plot the states at t0, 25% to ToE, 50% to ToE, 75% to ToE, and ToE - fig = mc_results.states.snapshot(0).plot_scatter(label = "t={} s".format(int(mc_results.times[0]))) # 0 - quarter_index = int(len(mc_results.times)/4) - mc_results.states.snapshot(quarter_index).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index]))) # 25% - mc_results.states.snapshot(quarter_index*2).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*2]))) # 50% - mc_results.states.snapshot(quarter_index*3).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*3]))) # 75% - mc_results.states.snapshot(-1).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[-1]))) # 100% - - mc_results.time_of_event.plot_hist() - - # Step 4: Show all plots - import matplotlib.pyplot as plt # For plotting - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/d8bf57631d1133f1784a65d1b777032f/eol_event.py b/docs/_downloads/d8bf57631d1133f1784a65d1b777032f/eol_event.py deleted file mode 100644 index 82b1eaf6..00000000 --- a/docs/_downloads/d8bf57631d1133f1784a65d1b777032f/eol_event.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -""" -This example demonstrates a use case where someone wants to predict the first event (i.e., End Of Life (EOL)) of a system. Many system models have multiple events that can occur. In some prognostics applications, users are not interested in predicting a specific event, and are instead interested in when the first event occurs, regardless of the event. This example demonstrates how to predict the first event of a system. - -Method: An instance of ThrownObject is used for this example. In this case it is trivial because the event 'falling' will always occur before 'impact', but for some other models that might not be true. The ThrownObject class is subclassed to add a new event 'EOL' which occurs if any other event occurs. The new model is then instantiated and used for prognostics like in basic_example. Prediction specifically specifies EOL as the event to be predicted. -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time the event 'EOL' is predicted to occur (with uncertainty) - iii) Histogram of the event 'EOL' -""" - -from prog_models.models import ThrownObject -from prog_algs.predictors import MonteCarlo -from prog_algs.uncertain_data import ScalarData - -def run_example(): - # Step 1: Define subclass with EOL event - # Similar to the prog_models 'events' example, but with an EOL event - class ThrownObjectWithEOL(ThrownObject): - events = ThrownObject.events + ['EOL'] - - def event_state(self, x): - es = super().event_state(x) - # Add EOL Event (minimum event state) - es['EOL'] = min(list(es.values())) - return es - - def threshold_met(self, x): - t_met = super().threshold_met(x) - # Add EOL Event (if any events have occured) - t_met['EOL'] = any(list(t_met.values())) - return t_met - - # Step 2: Create instance of subclass - m = ThrownObjectWithEOL(process_noise=0.05) - - # Step 3: Setup for prediction - pred = MonteCarlo(m) - def future_loading(t=None, x=None): - return {} # No future loading for ThrownObject - state = ScalarData(m.initialize()) - - # Step 4: Predict to EOL event - pred_results = pred.predict(state, future_loading, events=['EOL'], dt=0.025) - - # Step 5: Plot results - pred_results.time_of_event.plot_hist() - - import matplotlib.pyplot as plt - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/daee0732ebc9103bad35edc2271b7f8d/measurement_eqn_example.py b/docs/_downloads/daee0732ebc9103bad35edc2271b7f8d/measurement_eqn_example.py deleted file mode 100644 index cd2fdca4..00000000 --- a/docs/_downloads/daee0732ebc9103bad35edc2271b7f8d/measurement_eqn_example.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation with uncertainty given a Prognostics Model for a system in which not all output values are measured. - -Method: An instance of the BatteryCircuit model in prog_models is created. We assume that we are only measuring one of the output values, and we define a subclass to remove the other output value. - Estimation of the current state is performed at various time steps, using the defined state_estimator. - -Results: - i) Estimate of the current state given various times - ii) Display of results, such as prior and posterior state estimate values and SOC -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs import * - -def run_example(): - # Step 1: Subclass model with measurement equation - # In this case we're only measuring 'v' (i.e., removing temperature) - # To do this we're creating a new class that's subclassed from the complete model. - # To change the outputs we just have to override outputs (the list of keys) - class MyBattery(Battery): - outputs = ['v'] - - # Step 2: Setup model & future loading - def future_loading(t, x={}): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - - batt = MyBattery() - x0 = batt.parameters['x0'] - - # Step 3: Use the updated model - filt = state_estimators.ParticleFilter(batt, x0) - - # Step 4: Run step and print results - print('Running state estimation step with only one of 2 outputs measured') - - # Print Prior - print("\nPrior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - # Estimate Step - # Note, only voltage was needed in the measurement step, since that is the only output we're measuring - t = 0.1 - load = future_loading(t) - filt.estimate(t, load, {'v': 3.915}) - - # Print Posterior - print("\nPosterior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - # Another Estimate Step - t = 0.2 - load = future_loading(t) - filt.estimate(t, load, {'v': 3.91}) - - # Print Posterior Again - print("\nPosterior State (t={}):".format(t), filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - # Note that the particle filter was still able to perform state estimation. - # The updated outputs can be used for any case where the measurement doesn't match the model outputs - # For example, when units are different, or when the measurement is some combination of the outputs - # These are a little more complicated, since they require an instance of the parent class. For example: - - parent = Battery() - - - class MyBattery(Battery): - outputs = ['tv'] # output is temperature * voltage (for some reason) - - def output(self, x): - parent.parameters = self.parameters # only needed if you expect to change parameters - z = parent.output(x) - return self.OutputContainer({'tv': z['v'] * z['t']}) - - batt = MyBattery() - filt = state_estimators.ParticleFilter(batt, x0) - - print('-----------------\n\nExample 2') - print("\nPrior State:", filt.x.mean) - print("\toutput: ", batt.output(filt.x.mean)) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - t = 0.1 - load = future_loading(t) - filt.estimate(t, load, {'tv': 80}) - print("\nPosterior State:", filt.x.mean) - print("\toutput: ", batt.output(filt.x.mean)) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/ea97230ef09e27d10dd5f70f57cc729a/predict_specific_event.py b/docs/_downloads/ea97230ef09e27d10dd5f70f57cc729a/predict_specific_event.py deleted file mode 100644 index 053a179f..00000000 --- a/docs/_downloads/ea97230ef09e27d10dd5f70f57cc729a/predict_specific_event.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -In this example we are using the UTPredictor to predict a specific event, in this case impact. This will then ignore the other events which are not of interest. -""" - -from prog_models.models.thrown_object import ThrownObject -from prog_algs import * - -def run_example(): - ## Setup - def future_loading(t, x = None): - return {} - - m = ThrownObject() - initial_state = m.initialize({}, {}) - - ## State Estimation - perform a single ukf state estimate step - filt = state_estimators.UnscentedKalmanFilter(m, initial_state) - filt.estimate(0.1, {}, m.output(initial_state)) - - ## Prediction - Predict EOD given current state - # Setup prediction - pred = predictors.UnscentedTransformPredictor(m) - - # Predict with a step size of 0.1 - mc_results = pred.predict(filt.x, future_loading, dt=0.1, save_freq= 1, events=['impact']) - - # Print Results - for i, time in enumerate(mc_results.times): - print('\nt = {}'.format(time)) - print('\tu = {}'.format(mc_results.inputs.snapshot(i).mean)) - print('\tx = {}'.format(mc_results.states.snapshot(i).mean)) - print('\tz = {}'.format(mc_results.outputs.snapshot(i).mean)) - print('\tevent state = {}'.format(mc_results.states.snapshot(i).mean)) - - # Note only impact event is shown here - print('\nToE:', mc_results.time_of_event.mean) - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/docs/_downloads/f970960da825ceb736fa070c31c0b0e8/benchmarking_example.py b/docs/_downloads/f970960da825ceb736fa070c31c0b0e8/benchmarking_example.py deleted file mode 100644 index 1f1679fb..00000000 --- a/docs/_downloads/f970960da825ceb736fa070c31c0b0e8/benchmarking_example.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs benchmarking for a state estimation and prediction with uncertainty given a Prognostics Model. The process and benchmarking analysis are run for various sample sizes. - -Method: An instance of the BatteryCircuit model in prog_models is created, state estimation is set up with a chosen state_estimator, and prediction is set up with a chosen predictor. - Prediction of future states (with uncertainty) is then performed for various sample sizes. - Metrics are calculated and displayed for each run. - -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction for each distinct sample size - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics, including alpha-lambda metric -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs import * - -def run_example(): - # Step 1: Setup Model and Future Loading - def future_loading(t, x={}): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - - batt = Battery() - - # Step 2: Setup Predictor - pred = predictors.MonteCarlo(batt, dt= 0.05) - - # Step 3: Estimate State - x0 = batt.initialize() - state_estimator = state_estimators.ParticleFilter(batt, x0) - # Send in some data to estimate state - state_estimator.estimate(0.1, future_loading(0.1), {'t': 32.2, 'v': 3.915}) - state_estimator.estimate(0.2, future_loading(0.2), {'t': 32.3, 'v': 3.91}) - - # Step 4: Benchmark Predictions - # Here we're comparing the results given different numbers of samples - print('Benchmarking...') - import time # For timing prediction - from prog_algs.metrics import samples as metrics - - # Perform benchmarking for each number of samples - sample_counts = [1, 2, 5, 10] - for sample_count in sample_counts: - print('\nRun 1 ({} samples)'.format(sample_count)) - start = time.perf_counter() - pred_results = pred.predict(state_estimator.x, future_loading, n_samples = sample_count) - toe = pred_results.time_of_event.key("EOD") # Looking at EOD event - end = time.perf_counter() - print('\tMSE: {:4.2f}s'.format(metrics.mean_square_error(toe, 3005.4))) - print('\tRMSE: {:4.2f}s'.format(metrics.root_mean_square_error(toe, 3005.4))) - print('\tRuntime: {:4.2f}s'.format(end - start)) - - # This same approach can be applied for benchmarking and comparing other changes - # For example: different sampling methods, prediction algorithms, step sizes, models - -# This allows the module to be executed directly -if __name__=='__main__': - run_example() diff --git a/docs/_images/alpha_lambda_plt_ex.png b/docs/_images/alpha_lambda_plt_ex.png deleted file mode 100644 index c489c48f7824ad8ede872ed5de02dd3950664ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319394 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

`sDOl0a$PVz6v9}pw2wY6s= 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 diff --git a/docs/_images/scatter_hist_ex.png b/docs/_images/scatter_hist_ex.png deleted file mode 100644 index b4e9907aac264fc90d3dc6d43a6dcd3cff89bfed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67744 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 diff --git a/docs/_images/scatter_plt_ex.png b/docs/_images/scatter_plt_ex.png deleted file mode 100644 index 3352babce1b4197f7401c5eea32cb1c5579f53c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395520 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 z 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 diff --git a/docs/_sources/dev_guide.rst.txt b/docs/_sources/dev_guide.rst.txt deleted file mode 100644 index 0e1e3a34..00000000 --- a/docs/_sources/dev_guide.rst.txt +++ /dev/null @@ -1,102 +0,0 @@ -Developers Guide -================ - -This document includes some details relevant for developers. - -.. contents:: - :backlinks: top - -Guidance for Contributors -------------------------- - -Below are a few design decision made by the authors, documented for the reference of new contributors: - -* When supplied by or to the user, values with names (e.g., inputs, states, outputs, event_states, event occurance, etc.) should be supplied as dictionaries (or dict-like objects) where they can be referred to by name. -* Visualize and metrics subpackages shall be independent (i.e., not have any dependencies with the wider package or other subpackages) -* Limit introduction of new external dependencies, when possible. -* This is a research tool, so when making a design decision between operational efficiency and usability, generally choose the more usable option -* Except in the most extreme cases, maintain backwards compatibility for the convenience of existing users - - * If a feature is to be removed, mark it as depreciated for at least 2 releases before removing - -* Whenever possible, design so a new feature can be used for any model, interchangably. -* Whenever possible, UncertainData types, state estimators, and predictors should be interchangable -* Demonstrate common use cases as an example. -* Every feature should be demonstrated in an example - - * The most commonly used features should be demonstrated in the tutorial - -Branching Strategy ------------------- -Our project is following the git strategy described `here `_. Details specific to each branch are described below. - -`master`: Every merge into the master branch is done using a pull request (never commiting directly), is assigned a release number, and must comply with the release checklist. The release checklist is a software assurance tool. - -`dev`: Every merge into the dev branch that contains a functional change is done using a pull request (not commiting directly). Every commit should be functional. All unit tests must function before commiting to dev or merging another branch. - -`Feature Branches`: These branches include changes specific to a new feature. Before merging into dev unit tests should all run, tests should be added for the feature, and documentation should be updated, as appropriate. - -Release Checklist -***************** -* Code review - all software must be checked by someone other than the author -* Check that each new feature has a corresponding tests -* Run unit tests `python -m tests` -* Check documents- see if any updates are required -* Rebuild sphinx documents: `sphinx-build sphinx-config/ docs/` -* Write release notes -* For releases adding new features- ensure that NASA release process has been followed - -NPR 7150 --------- -This section describes this project's compliance with the NASA's NPR 7150 requirements, documented `here `_. - -* Software Classification: Class-E (Research Software) -* Safety Criticality: Not Safety Critical - -Compliance Notation Legend -************************** -* FC: Fully Compliant -* T: Tailored (Specific tailoring described in mitigation) `SWE-121 `_ -* PC: Partially Compliant -* NC: Not Compliant -* NA: Not Applicable - -Compliance Matrix -***************** -+-------+----------------------------------+------------+---------------------+ -| SWE # | Description | Compliance | Evidence | -+=======+==================================+============+=====================+ -| 033 | Assess aquisiton Options | FC | See section below | -+-------+----------------------------------+------------+---------------------+ -| 013 | Maintain Software Plans | FC | This document | -+-------+----------------------------------+------------+---------------------+ -| 042 | Electronic Accesss to Source | FC | This repo | -+-------+----------------------------------+------------+---------------------+ -| 139 | Comply with 7150 | FC | This document | -+-------+----------------------------------+------------+---------------------+ -| 121 | Tailored Reqs | NA | No tailoring | -+-------+----------------------------------+------------+---------------------+ -| 125 | Compliance Matrix | FC | This document | -+-------+----------------------------------+------------+---------------------+ -| 029 | Software Classification | FC | This document | -+-------+----------------------------------+------------+---------------------+ -| 022 | Software Assurance | FC | This document | -+-------+----------------------------------+------------+---------------------+ -| 205 | Safety Cricial Software | FC | See above | -+-------+----------------------------------+------------+---------------------+ -| 023 | Safety Critical Reqs | NA | Not safety critical | -+-------+----------------------------------+------------+---------------------+ -| 206 | Autogen Software | NA | No autogen | -+-------+----------------------------------+------------+---------------------+ -| 148 | Software Catolog | FC | Will be added | -+-------+----------------------------------+------------+---------------------+ -| 156 | Perform CyberSecurity Assessment | FC | See section below | -+-------+----------------------------------+------------+---------------------+ - -Aquisition Options -****************** -Assessed, there are some existing prognostics tools, but no general python package that can support model-based prognostics like we need. - -Cybersecurity Assessment -************************ -Assessed, no significant Cybersecurity concerns were identified- research software. \ No newline at end of file diff --git a/docs/_sources/exceptions.rst.txt b/docs/_sources/exceptions.rst.txt deleted file mode 100644 index f9612fab..00000000 --- a/docs/_sources/exceptions.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -Exceptions -====================== -Exceptions returned from prog_model fall into a few custom exception types, defined below. Catching any Prognostics Model Exception can be acomplished using `try-except ProgModelException`. Alternatively, a user can catch a specific exception type. - -Prognostics Model Exceptions ----------------------------- - -.. autoexception:: prog_algs.exceptions.ProgAlgException - :members: - :inherited-members: - -.. autoexception:: prog_algs.exceptions.ProgAlgInputException - :members: - :inherited-members: - -.. autoexception:: prog_algs.exceptions.ProgAlgTypeError - :members: - :inherited-members: diff --git a/docs/_sources/getting_started.rst.txt b/docs/_sources/getting_started.rst.txt deleted file mode 100644 index ef2cb76c..00000000 --- a/docs/_sources/getting_started.rst.txt +++ /dev/null @@ -1,112 +0,0 @@ -Getting Started -=============== -.. image:: https://mybinder.org/badge_logo.svg - :target: https://mybinder.org/v2/gh/nasa/prog_algs/master?labpath=tutorial.ipynb - -The NASA Prognostics Algorithms Package is a Python framework for defining, building, using, and testing Algorithms for prognostics (computation of remaining useful life) of engineering systems, and provides a set of prognostics algorithms developed within this framework, suitable for use in prognostics applications. It can be used in conjunction with the Prognostics Models Package (`prog_models`) to perform research in prognostics with prognostics systems. - -Installing ------------------------ - -Installing from pip (recommended) -******************************************** -The latest stable release of `prog_algs` is hosted on PyPi. For most users (unless you want to contribute to the development of `prog_algs`), this version will be adequate. To install from the command line, use the following command: - -.. code-block:: console - - $ pip install prog_algs - -Installing Pre-Release Versions with GitHub -******************************************** -For users who would like to contribute to `prog_algs` or would like to use pre-release features can do so using the 'dev' branch (or a feature branch) on the `prog_algs GitHub repo `__. This isn't recommended for most users as this version may be unstable. To use this version, use the following commands: - -.. code-block:: console - - $ git clone https://github.com/nasa/prog_algs - $ cd prog_algs - $ git checkout dev - $ pip install -e . - -Summary ---------- -A few definitions to get started: - -* **events**: something that can be predicted (e.g., system failure). An event has either occurred or not. - -* **event state**: progress towards event occurring. Defined as a number where an event state of 0 indicates the event has occurred and 1 indicates no progress towards the event (i.e., fully healthy operation for a failure event). For gradually occurring events (e.g., discharge) the number will progress from 1 to 0 as the event nears. In prognostics, event state is frequently called "State of Health". - -* **inputs**: control applied to the system being modeled (e.g., current drawn from a battery). - -* **outputs**: measured sensor values from a system (e.g., voltage and temperature of a battery). - -* **performance metrics**: performance characteristics of a system that are a function of system state, but are not directly measured. - -* **states**: Internal parameters (typically hidden states) used to represent the state of the system- can be same as inputs/outputs but do not have to be. - -* **process noise**: representing uncertainty in the model transition (e.g., model uncertainty). - -* **measurement noise**: representing uncertainty in the measurement process (e.g., sensor sensitivity, sensor misalignements, environmental effects). - -The structure of the packages is illustrated below: - -.. image:: images/package_structure.png - -Prognostics is performed using `State Estimators `__ and `Predictors `__. State Estimators are resposible for estimating the current state of the modeled system using sensor data and a prognostics model (see: `prog_models package `__). The state estimator then produces an estimate of the system state with uncertainty in the form of an `uncertain data object `__. This state estimate is used by the predictor to predict when events will occur (Time of Event, ToE - returned as an `uncertain data object `__), and future system states (returned as a `Prediction object `__). - -Data Structures -*************** - -A few custom data structures are available for storing and manipulating prognostics data of various forms. These structures are listed below and desribed on their respective pages: - * `SimResult (from prog_models) `__ : The result of a single simulation (without uncertainty). Can be used to store inputs, outputs, states, event_states, observables, etc. Is returned by the model.simulate_to* methods. - * `UncertainData `__ : Used throughout the package to represent data with uncertainty. There are a variety of subclasses of UncertainData to represent data with uncertainty in different forms (e.g., ScalarData, MultivariateNormalDist, UnweightedSamples). Notibly, this is used to represent the output of a StateEstimator's `estimate` method, individual snapshots of a prediction, and the time of event estimate from a predictor's `predict` method. - * `Prediction `__ : Prediction of future values (with uncertainty) of some variable (e.g., input, state, output, event_states, etc.). The `predict` method of predictors return this. - * `ToEPredictionProfile `__ : The result of multiple predictions, including time of prediction. This data structure can be treated as a dictionary of time of prediction to toe prediction. - -Use ----- -The best way to learn how to use `prog_algs` is through the `tutorial `__. There are also a number of examples which show different aspects of the package, summarized and linked below: - -* :download:`examples.basic_example <../examples/basic_example.py>` - .. automodule:: examples.basic_example - | -* :download:`examples.thrown_object_example <../examples/thrown_object_example.py>` - .. automodule:: examples.thrown_object_example - | -* :download:`examples.utpredictor <../examples/utpredictor.py>` - .. automodule:: examples.utpredictor - | -* :download:`examples.benchmarking_example <../examples/benchmarking_example.py>` - .. automodule:: examples.benchmarking_example - | -* :download:`examples.eol_event <../examples/eol_event.py>` - .. automodule:: examples.eol_event - | -* :download:`examples.horizon <../examples/horizon.py>` - .. automodule:: examples.horizon - | -* :download:`examples.kalman_filter <../examples/kalman_filter.py>` - .. automodule:: examples.kalman_filter - | -* :download:`examples.measurement_eqn_example <../examples/measurement_eqn_example.py>` - .. automodule:: examples.measurement_eqn_example - | -* :download:`examples.new_state_estimator_example <../examples/new_state_estimator_example.py>` - .. automodule:: examples.new_state_estimator_example - | -* :download:`examples.playback <../examples/playback.py>` - .. automodule:: examples.playback - | -* :download:`examples.predict_specific_event <../examples/predict_specific_event.py>` - .. automodule:: examples.predict_specific_event - | -* :download:`examples.particle_filter_battery_example <../examples/particle_filter_battery_example.py>` - .. automodule:: examples.particle_filter_battery_example - | -* :download:`tutorial <../tutorial.ipynb>` - | - -Extending ---------- -New State Estimators and Predictors are created by extending the :class:`prog_algs.state_estimators.StateEstimator` and :class:`prog_algs.predictors.Predictor` class, respectively. - -See :download:`examples.new_state_estimator_example <../examples/new_state_estimator_example.py>` for an example of this approach. diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt deleted file mode 100644 index 5ad95bd4..00000000 --- a/docs/_sources/index.rst.txt +++ /dev/null @@ -1,57 +0,0 @@ -Prognostics Algorithms Python Package -============================================================= -.. image:: https://mybinder.org/badge_logo.svg - :target: https://mybinder.org/v2/gh/nasa/prog_algs/master?labpath=tutorial.ipynb - -The NASA PCoE Prognostic Algorithms Package is a python framework for model-based prognostics (computation of remaining useful life) of engineering systems. The package provides an extendable set of algorithms for state estimation and prediction, including uncertainty propagation. The package also include metrics, visualization, and analysis tools needed to measure the prognostic performance. The algorithms use prognostic models (from NASA's Prognostics Model Package) to perform estimation and prediction functions. The package enables the rapid development of prognostics solutions for given models of components and systems. Different algorithms can be easily swapped to do comparative studies and evaluations of different algorithms to select the best for the application at hand. - -The Prognostics Algorithms Package was developed by researchers of the NASA Prognostics Center of Excellence (PCoE) and `Diagnostics & Prognostics Group `__. - -If you are new to this package, see `getting started `__. - -.. toctree:: - :maxdepth: 2 - - Tutorial - getting_started - state_estimators - predictors - uncertain_data - prediction - metrics - ProgModels - ProgServer - dev_guide - GitHub - release - -Citing this repository ------------------------ -Use the following to cite this repository: - -@misc{2021_nasa_prog_algs, - | author = {Christopher Teubert and Chetan Kulkarni and Matteo Corbetta}, - | title = {Prognostics Algorithms Python Package}, - | month = May, - | year = 2022, - | version = {1.3.0}, - | url = {https://github.com/nasa/prog_algs} - | } - -The corresponding reference should look like this: - -C. Teubert, C. Kulkarni, M. Corbetta. Prognostics Algorithms Python Package, v1.3.0, May 2022. URL https://github.com/nasa/prog_algs. - -Indices and tables ------------------------ - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - -Disclaimers ----------------------- - -No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER, GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES IT "AS IS." - -Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM, RECIPIENT'S USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT. \ No newline at end of file diff --git a/docs/_sources/metrics.rst.txt b/docs/_sources/metrics.rst.txt deleted file mode 100644 index f0441858..00000000 --- a/docs/_sources/metrics.rst.txt +++ /dev/null @@ -1,98 +0,0 @@ -Metrics and Figures -==================== - -Metrics and Figures are the primary tools prognostics researchers use to understand data, measure performance, and compare methods and models. There are several metrics and figures included in `prog_algs`, most of which are implemented as methods in the various prognostic data structures: `UncertainData`, `Prediction`, and `ToEPredictionProfile`. The supported metrics and figures are described below, divided by structure that they act on. - -.. contents:: - :backlinks: top - -.. role:: raw-html(raw) - :format: html - -UncertainData Metrics and Figures ------------------------------------------------- -The following metrics and figures act on any UncertainData type (e.g., `MultivariateNormalDist`, `UnweightedSamples`, or `ScalarData`). They are meant to provide useful information about a distribution (e.g., predicted state at a future point, Time of Event). - -Simple Statistics -^^^^^^^^^^^^^^^^^^^^^ - -.. automethod:: prog_algs.uncertain_data.UncertainData.mean - -:raw-html:`
` - -.. automethod:: prog_algs.uncertain_data.UncertainData.median - -:raw-html:`
` - -.. automethod:: prog_algs.uncertain_data.UncertainData.cov - -:raw-html:`
` - -.. automethod:: prog_algs.uncertain_data.UncertainData.percentage_in_bounds - -:raw-html:`
` - -.. automethod:: prog_algs.uncertain_data.UncertainData.metrics - -:raw-html:`
` - -.. automethod:: prog_algs.uncertain_data.UncertainData.describe - -Relative Accuracy -^^^^^^^^^^^^^^^^^^^^ - -.. automethod:: prog_algs.uncertain_data.UncertainData.relative_accuracy - -Histogram -^^^^^^^^^^^^^^^^^^^^ -.. automethod:: prog_algs.uncertain_data.UncertainData.plot_hist -.. image:: images/scatter_hist_ex.png - -Scatter Plot -^^^^^^^^^^^^^^^^^^^^ -.. automethod:: prog_algs.uncertain_data.UncertainData.plot_scatter -.. image:: images/scatter_plt_ex.png - -Time of Event Metrics -^^^^^^^^^^^^^^^^^^^^^^^ -These metrics operate on a UncertainData object that represents the distribution of time of events - -.. autofunction:: prog_algs.metrics.prob_success - -Prediction Metrics and Figures ------------------------------------------------- -The following metrics and figures act on a Prediction (i.e., data describing future states). They are meant to provide useful information about the prediction. - -Simple Statistics -^^^^^^^^^^^^^^^^^^^^^ - -.. automethod:: prog_algs.predictors.prediction.Prediction.mean - -:raw-html:`
` - -.. automethod:: prog_algs.predictors.prediction.Prediction.monotonicity - -Toe Prediction Profile Metrics and Figures ------------------------------------------------- -The following metrics and figures act on a ToePrediction Profile (i.e., ToE estimates made at multiple points). They are meant to provide useful information about the ToEPredictionProfile. - -Alpha-Lambda -^^^^^^^^^^^^^^^ -.. automethod:: prog_algs.predictors.toe_prediction_profile.ToEPredictionProfile.alpha_lambda - -Cumulative Relative Accuracy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. automethod:: prog_algs.predictors.toe_prediction_profile.ToEPredictionProfile.cumulative_relative_accuracy - -Monotonicity -^^^^^^^^^^^^^ -.. automethod:: prog_algs.predictors.toe_prediction_profile.ToEPredictionProfile.monotonicity - -Prognostics Horizon -^^^^^^^^^^^^^^^^^^^^^ -.. automethod:: prog_algs.predictors.toe_prediction_profile.ToEPredictionProfile.prognostic_horizon - -Alpha-Beta Plot -^^^^^^^^^^^^^^^^^ -.. automethod:: prog_algs.predictors.toe_prediction_profile.ToEPredictionProfile.plot -.. image:: images/alpha_lambda_plt_ex.png diff --git a/docs/_sources/prediction.rst.txt b/docs/_sources/prediction.rst.txt deleted file mode 100644 index 07817c38..00000000 --- a/docs/_sources/prediction.rst.txt +++ /dev/null @@ -1,27 +0,0 @@ -Prediction -======================= - -Prediction ----------------------- -Predictions store the result of a prediction (i.e., returned by the predict method of a predictor). They store values (with uncertainty) at different future times. These are used to store states, inputs, outputs, perfomance metrics, and event states with uncertainty at savepoints. - -Two types of predictions are distributed with this package: `Prediction` and `UnweightedSamplesPrediction`, described below. `UnweightedSamplesPrediction` extends `Prediction` to allow some operations specific to cases where each prediction is represented by an UnweightedSamples object (e.g., accessing SimResult for a single sample). - -Base Prediction -********************** -.. autoclass:: prog_algs.predictors.Prediction - :members: - :inherited-members: - -UnweightedSamplesPrediction -******************************** -.. autoclass:: prog_algs.predictors.UnweightedSamplesPrediction - :members: - :inherited-members: - :exclude-members: append, extend, clear, pop, remove, reverse, insert - -ToE Prediction Profile ----------------------- -.. autoclass:: prog_algs.predictors.ToEPredictionProfile - :members: - :inherited-members: diff --git a/docs/_sources/predictors.rst.txt b/docs/_sources/predictors.rst.txt deleted file mode 100644 index 3e09496a..00000000 --- a/docs/_sources/predictors.rst.txt +++ /dev/null @@ -1,41 +0,0 @@ -Predictors -======================= - -The Predictor uses a state estimate (type UncertainData subclass, output of a state estimator), information about expected future loading, and a Prognostics Model (see: `prog_models package `__) to predict both future states (also outputs, performance metrics, event_states) at predefined points and the time that an event will occur (Time of Event, ToE) with uncertainty. - -Here's an example of its use. In this example we use the ThrownObject model and the MonteCarlo predictor, and we save the state every 1s. We also use a scalar first state (i.e., no uncertainty). - -.. code-block:: python - - >>> from prog_models.models import ThrownObject - >>> from prog_algs.predictors import MonteCarlo - >>> from prog_algs.uncertain_data import ScalarData - >>> - >>> m = ThrownObject() - >>> pred = MonteCarlo(m) - >>> first_state = ScalarData({'x': 1.7, 'v': 20}) # Initial state for prediction - >>> def future_loading(t, x): - >>> return {} # ThrownObject doesn't have a way of loading it - >>> - >>> pred_results = pred.predict(first_state, future_loading, save_freq=1) - >>> pred_results.time_of_event.plot_hist(events='impact') # Plot a histogram of when the impact event occurred - -See tutorial and examples for more information and additional features. - -Included Predictors ------------------------ -The following predictors are included with this package. A new predictor can be created by subclassing `prog_algs.predictors.Predictor`. See also: `predictor_template.py` - -Monte Carlo Predictor -********************** -.. autoclass:: prog_algs.predictors.MonteCarlo - -Unscented Transform Predictor -***************************** -.. autoclass:: prog_algs.predictors.UnscentedTransformPredictor - -Predictor Interface ------------------------ -.. autoclass:: prog_algs.predictors.Predictor - :members: - :inherited-members: diff --git a/docs/_sources/release.rst.txt b/docs/_sources/release.rst.txt deleted file mode 100644 index 05538bd6..00000000 --- a/docs/_sources/release.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -Release Notes -======================= - -.. contents:: - :backlinks: top - -Updates in V1.3 ------------------------ -* **New State Estimator Added** :class:`prog_algs.state_estimators.KalmanFilter`. Works with models derived from :class:`prog_models.LinearModel`. See :download:`examples.kalman_filter <../examples/kalman_filter.py>` -* **New Predictor Added** :class:`prog_algs.predictors.UnscentedTransformPredictor`. See :download:`examples.utpredictor <../examples/utpredictor.py>` -* Initial state estimate (x0) can now be passed as `UncertainData` to represent initial state uncertainty. See :download:`examples.playback <../examples/playback.py>` -* Added new metrics for :class:`prog_algs.predictors.ToEPredictionProfile`: Prognostics horizon, Cumulative Relative Accuracy (CRA). See :download:`examples.playback <../examples/playback.py>` -* Added ability to plot :class:`prog_algs.predictors.ToEPredictionProfile`: profile.plot(). See :download:`examples.playback <../examples/playback.py>` -* Added new metric for :class:`prog_algs.predictors.Prediction`: Monotonicity, Relative Accuracy (RA) -* Added new metric for :class:`prog_algs.uncertain_data.UncertainData` (and subclasses): Root Mean Square Error (RMSE) -* Added new describe method for :class:`prog_algs.uncertain_data.UncertainData` (and subclasses) -* Add support for python 3.10 -* Various performance improvements and bugfixes - - -Updates in v1.2 ---------------- - -Note for Existing Users -*********************** -This release includes changes to the return format of the MonteCarlo Predictor's `predict` method. These changes were necessary to support non-sample based predictors. The non backwards-compatible changes are listed below: -* times: - * previous ```List[List[float]]``` where times[n][m] corresponds to timepoint m of sample n. - * new ```List[float]``` where times[m] corresponds to timepoint m for all samples. -* End of Life (EOL)/ Time of Event (ToE) estimates: - * previous ```List[float]``` where the times correspond to the time that the first event occurs. - * new ```UnweightedSamples``` where keys correspond to the inidividualevents predicted. -* State at time of event (ToE). - * previous: element in states. - * new: member of ToE structure (e.g., ToE.final_state['event1']). - -General Updates -*************** -* New Feature: Histogram and Scatter Plot of UncertainData. -* New Feature: Vectorized particle filter. - * Particle Filter State Estimator is now vectorized for vectorized models - this significantly improves performance. -* New Feature: Unscented Transform Predictor. - * New predictor that propogates sigma points forward to estimate time of event and future states. -* New Feature: `Prediction` class to represent predicted future values. -* New Feature: `ToEPredictionProfile` class to represent and operate on the result of multiple predictions generated at different prediction times. -* Added metrics `percentage_in_bounds` and `metrics` and plots to UncertainData . -* Add support for Python3.9. -* General Bugfixes. diff --git a/docs/_sources/state_estimators.rst.txt b/docs/_sources/state_estimators.rst.txt deleted file mode 100644 index ee41ad5e..00000000 --- a/docs/_sources/state_estimators.rst.txt +++ /dev/null @@ -1,44 +0,0 @@ -State Estimators -======================= -The State Estimator uses sensor information and a Prognostics Model (see: `prog_models package `__) to produce an estimate of system state (which can be used to estimate outputs, event_states, and performance metrics). This state estimate can either be used by itself or as input to a `Predictor `__. A state estimator is typically run each time new information is available. - -Here's an example of its use. In this example we use the unscented kalman filter state estimator and the ThrownObject model. - -.. code-block:: python - - >>> from prog_models.models import ThrownObject - >>> from prog_algs.state_estimators import UnscentedKalmanFilter - >>> - >>> m = ThrownObject() - >>> initial_state = m.initialize() - >>> filt = UnscentedKalmanFilter(m, initial_state) - >>> - >>> load = {} # No load for ThrownObject - >>> new_data = {'x': 1.8} # Observed state - >>> print('Prior: ', filt.x.mean) - >>> filt.estimate(0.1, load, new_data) - >>> print('Posterior: ', filt.x.mean) - -See tutorial and examples for more information and additional features. - -Included State Estimators -------------------------- -The following state estimators are included with this package. A new state estimator can be created by subclassing `prog_algs.state_estimators.StateEstimator`. See also: `state_estimator_template.py` - -Kalman Filter -************************* -.. autoclass:: prog_algs.state_estimators.KalmanFilter - -Unscented Kalman Filter -************************* -.. autoclass:: prog_algs.state_estimators.UnscentedKalmanFilter - -Particle Filter -************************* -.. autoclass:: prog_algs.state_estimators.ParticleFilter - -State Estimator Interface -------------------------- -.. autoclass:: prog_algs.state_estimators.StateEstimator - :members: - :inherited-members: diff --git a/docs/_sources/uncertain_data.rst.txt b/docs/_sources/uncertain_data.rst.txt deleted file mode 100644 index 049b987c..00000000 --- a/docs/_sources/uncertain_data.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -Uncertain Data -======================= - -The `prog_algs.uncertain_data` package includes classes for representing data with uncertainty. All types of UncertainData can be operated on using `the interface <#interface>`__. Inidividual classes for representing uncertain data of different kinds are described below, in `Implemented UncertainData Types <#implemented-uncertaindata-types>`__. - -Interface ------------------------- -.. autoclass:: prog_algs.uncertain_data.UncertainData - :members: - :inherited-members: - -Implemented UncertainData Types --------------------------------- - -Unweighted Samples -****************** -.. autoclass:: prog_algs.uncertain_data.UnweightedSamples - :members: key - -Multivariate Normal Distribution -******************************** -.. autoclass:: prog_algs.uncertain_data.MultivariateNormalDist - -Scalar Data (i.e., no uncertainty) -********************************** -.. autoclass:: prog_algs.uncertain_data.ScalarData diff --git a/docs/_sources/visualize.rst.txt b/docs/_sources/visualize.rst.txt deleted file mode 100644 index 47393412..00000000 --- a/docs/_sources/visualize.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -Visualization -============= - -Visualization tools are included in `prog_algs.visualize`, described below: - -.. automodule:: prog_algs.visualize - :members: - :undoc-members: \ No newline at end of file diff --git a/docs/_static/alabaster.css b/docs/_static/alabaster.css deleted file mode 100644 index 0eddaeb0..00000000 --- a/docs/_static/alabaster.css +++ /dev/null @@ -1,701 +0,0 @@ -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: Georgia, serif; - font-size: 17px; - background-color: #fff; - color: #000; - margin: 0; - padding: 0; -} - - -div.document { - width: 940px; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 220px; -} - -div.sphinxsidebar { - width: 220px; - font-size: 14px; - line-height: 1.5; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #fff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -div.body > .section { - text-align: left; -} - -div.footer { - width: 940px; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -p.caption { - font-family: inherit; - font-size: inherit; -} - - -div.relations { - display: none; -} - - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 0px; - text-align: center; -} - -div.sphinxsidebarwrapper h1.logo { - margin-top: -10px; - text-align: center; - margin-bottom: 5px; - text-align: left; -} - -div.sphinxsidebarwrapper h1.logo-name { - margin-top: 0px; -} - -div.sphinxsidebarwrapper p.blurb { - margin-top: 0; - font-style: normal; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: Georgia, serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar ul li.toctree-l1 > a { - font-size: 120%; -} - -div.sphinxsidebar ul li.toctree-l2 > a { - font-size: 110%; -} - -div.sphinxsidebar input { - border: 1px solid #CCC; - font-family: Georgia, serif; - font-size: 1em; -} - -div.sphinxsidebar hr { - border: none; - height: 1px; - color: #AAA; - background: #AAA; - - text-align: left; - margin-left: 0; - width: 50%; -} - -div.sphinxsidebar .badge { - border-bottom: none; -} - -div.sphinxsidebar .badge:hover { - border-bottom: none; -} - -/* To address an issue with donation coming after search */ -div.sphinxsidebar h3.donation { - margin-top: 10px; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: Georgia, serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #DDD; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #EAEAEA; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - margin: 20px 0px; - padding: 10px 30px; - background-color: #EEE; - border: 1px solid #CCC; -} - -div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fafafa; -} - -div.admonition p.admonition-title { - font-family: Georgia, serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: #fff; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.warning { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.danger { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.error { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.caution { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.attention { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.important { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.note { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.tip { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.hint { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.seealso { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.topic { - background-color: #EEE; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt, code { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -.hll { - background-color: #FFC; - margin: 0 -12px; - padding: 0 12px; - display: block; -} - -img.screenshot { -} - -tt.descname, tt.descclassname, code.descname, code.descclassname { - font-size: 0.95em; -} - -tt.descname, code.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #EEE; - background: #FDFDFD; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.field-list p { - margin-bottom: 0.8em; -} - -/* Cloned from - * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 - */ -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -table.footnote td.label { - width: .1px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - /* Matches the 30px from the narrow-screen "li > ul" selector below */ - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #EEE; - padding: 7px 30px; - margin: 15px 0px; - line-height: 1.3em; -} - -div.viewcode-block:target { - background: #ffd; -} - -dl pre, blockquote pre, li pre { - margin-left: 0; - padding-left: 30px; -} - -tt, code { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, code.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fff; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -/* Don't put an underline on images */ -a.image-reference, a.image-reference:hover { - border-bottom: none; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt, a:hover code { - background: #EEE; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: #fff; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: #FFF; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: #fff; - } - - div.sphinxsidebar a { - color: #AAA; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -/* Make nested-list/multi-paragraph items look better in Releases changelog - * pages. Without this, docutils' magical list fuckery causes inconsistent - * formatting between different release sub-lists. - */ -div#changelog > div.section > ul > li > p:only-child { - margin-bottom: 0; -} - -/* Hide fugly table cell borders in ..bibliography:: directive output */ -table.docutils.citation, table.docutils.citation td, table.docutils.citation th { - border: none; - /* Below needed in some edge cases; if not applied, bottom shadows appear */ - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - - -/* relbar */ - -.related { - line-height: 30px; - width: 100%; - font-size: 0.9rem; -} - -.related.top { - border-bottom: 1px solid #EEE; - margin-bottom: 20px; -} - -.related.bottom { - border-top: 1px solid #EEE; -} - -.related ul { - padding: 0; - margin: 0; - list-style: none; -} - -.related li { - display: inline; -} - -nav#rellinks { - float: right; -} - -nav#rellinks li+li:before { - content: "|"; -} - -nav#breadcrumbs li+li:before { - content: "\00BB"; -} - -/* Hide certain items when printing */ -@media print { - div.related { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/basic.css b/docs/_static/basic.css deleted file mode 100644 index bf18350b..00000000 --- a/docs/_static/basic.css +++ /dev/null @@ -1,906 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2022 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: 450px; - 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.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -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; -} - -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -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, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::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; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -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; -} - -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd: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 > dt:after { - content: ":"; -} - -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; -} - -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; -} - -/* -- 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/docs/_static/custom.css b/docs/_static/custom.css deleted file mode 100644 index 2a924f1d..00000000 --- a/docs/_static/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* This file intentionally left blank. */ diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js deleted file mode 100644 index e1bfd708..00000000 --- a/docs/_static/doctools.js +++ /dev/null @@ -1,358 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.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": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - this.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('
\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('

') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - var url = new URL(window.location); - url.searchParams.delete('highlight'); - window.history.replaceState({}, '', url); - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar : function() { - $('input[name=q]').first().focus(); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - return; - - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON') { - if (event.altKey || event.ctrlKey || event.metaKey) - return; - - if (!event.shiftKey) { - switch (event.key) { - case 'ArrowLeft': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 'ArrowRight': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - case 'Escape': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.hideSearchWords(); - return false; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case '/': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.focusSearchBar(); - return false; - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js deleted file mode 100644 index aa189541..00000000 --- a/docs/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '1.3.1', - LANGUAGE: 'None', - 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/docs/_static/file.png b/docs/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/docs/_static/jquery-3.5.1.js b/docs/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333..00000000 --- a/docs/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Developers Guide

-

This document includes some details relevant for developers.

- -
-

Guidance for Contributors

-

Below are a few design decision made by the authors, documented for the reference of new contributors:

-
    -
  • When supplied by or to the user, values with names (e.g., inputs, states, outputs, event_states, event occurance, etc.) should be supplied as dictionaries (or dict-like objects) where they can be referred to by name.

  • -
  • Visualize and metrics subpackages shall be independent (i.e., not have any dependencies with the wider package or other subpackages)

  • -
  • Limit introduction of new external dependencies, when possible.

  • -
  • This is a research tool, so when making a design decision between operational efficiency and usability, generally choose the more usable option

  • -
  • Except in the most extreme cases, maintain backwards compatibility for the convenience of existing users

    -
      -
    • If a feature is to be removed, mark it as depreciated for at least 2 releases before removing

    • -
    -
  • -
  • Whenever possible, design so a new feature can be used for any model, interchangably.

  • -
  • Whenever possible, UncertainData types, state estimators, and predictors should be interchangable

  • -
  • Demonstrate common use cases as an example.

  • -
  • Every feature should be demonstrated in an example

    -
      -
    • The most commonly used features should be demonstrated in the tutorial

    • -
    -
  • -
-
-
-

Branching Strategy

-

Our project is following the git strategy described here. Details specific to each branch are described below.

-

master: Every merge into the master branch is done using a pull request (never commiting directly), is assigned a release number, and must comply with the release checklist. The release checklist is a software assurance tool.

-

dev: Every merge into the dev branch that contains a functional change is done using a pull request (not commiting directly). Every commit should be functional. All unit tests must function before commiting to dev or merging another branch.

-

Feature Branches: These branches include changes specific to a new feature. Before merging into dev unit tests should all run, tests should be added for the feature, and documentation should be updated, as appropriate.

-
-

Release Checklist

-
    -
  • Code review - all software must be checked by someone other than the author

  • -
  • Check that each new feature has a corresponding tests

  • -
  • Run unit tests python -m tests

  • -
  • Check documents- see if any updates are required

  • -
  • Rebuild sphinx documents: sphinx-build sphinx-config/ docs/

  • -
  • Write release notes

  • -
  • For releases adding new features- ensure that NASA release process has been followed

  • -
-
-
-
-

NPR 7150

-

This section describes this project’s compliance with the NASA’s NPR 7150 requirements, documented here.

-
    -
  • Software Classification: Class-E (Research Software)

  • -
  • Safety Criticality: Not Safety Critical

  • -
-
-

Compliance Notation Legend

-
    -
  • FC: Fully Compliant

  • -
  • T: Tailored (Specific tailoring described in mitigation) SWE-121

  • -
  • PC: Partially Compliant

  • -
  • NC: Not Compliant

  • -
  • NA: Not Applicable

  • -
-
-
-

Compliance Matrix

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SWE #

Description

Compliance

Evidence

033

Assess aquisiton Options

FC

See section below

013

Maintain Software Plans

FC

This document

042

Electronic Accesss to Source

FC

This repo

139

Comply with 7150

FC

This document

121

Tailored Reqs

NA

No tailoring

125

Compliance Matrix

FC

This document

029

Software Classification

FC

This document

022

Software Assurance

FC

This document

205

Safety Cricial Software

FC

See above

023

Safety Critical Reqs

NA

Not safety critical

206

Autogen Software

NA

No autogen

148

Software Catolog

FC

Will be added

156

Perform CyberSecurity Assessment

FC

See section below

-
-
-

Aquisition Options

-

Assessed, there are some existing prognostics tools, but no general python package that can support model-based prognostics like we need.

-
-
-

Cybersecurity Assessment

-

Assessed, no significant Cybersecurity concerns were identified- research software.

-
-
-
- - -
- -
-
- -
-
- -Copyright © 2020 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - - - \ No newline at end of file diff --git a/docs/exceptions.html b/docs/exceptions.html deleted file mode 100644 index d038fcd2..00000000 --- a/docs/exceptions.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - Exceptions — Prognostics Algorithms Python Package 1.3.0 documentation - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Exceptions

-

Exceptions returned from prog_model fall into a few custom exception types, defined below. Catching any Prognostics Model Exception can be acomplished using try-except ProgModelException. Alternatively, a user can catch a specific exception type.

-
-

Prognostics Model Exceptions

-
-
-exception prog_algs.exceptions.ProgAlgException
-

Base Prognostics Model Exception

-
-
-with_traceback()
-

Exception.with_traceback(tb) – -set self.__traceback__ to tb and return self.

-
- -
- -
-
-exception prog_algs.exceptions.ProgAlgInputException
-

Prognostics Input Exception - indicates the method input parameters were incorrect

-
-
-with_traceback()
-

Exception.with_traceback(tb) – -set self.__traceback__ to tb and return self.

-
- -
- -
-
-exception prog_algs.exceptions.ProgAlgTypeError
-

Prognostics Type Error - indicates the model could not be constructed

-
-
-with_traceback()
-

Exception.with_traceback(tb) – -set self.__traceback__ to tb and return self.

-
- -
- -
-
- - -
- -
-
- -
-
- -Copyright © 2020 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - - - \ No newline at end of file diff --git a/docs/genindex.html b/docs/genindex.html deleted file mode 100644 index f3c0235e..00000000 --- a/docs/genindex.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - - - - Index — Prognostics Algorithms Python Package 1.3.1 documentation - - - - - - - - - - - - - - - - - -
-
-
- - -
- - -

Index

- -
- A - | C - | D - | E - | G - | I - | K - | M - | P - | R - | S - | T - | U - | V - | X - -
-

A

- - - -
- -

C

- - - -
- -

D

- - -
- -

E

- - - -
    -
  • - examples.new_state_estimator_example - -
  • -
  • - examples.particle_filter_battery_example - -
  • -
  • - examples.playback - -
  • -
  • - examples.predict_specific_event - -
  • -
  • - examples.thrown_object_example - -
  • -
  • - examples.utpredictor - -
  • -
- -

G

- - -
- -

I

- - - -
- -

K

- - - -
- -

M

- - - -
- -

P

- - - -
- -

R

- - -
- -

S

- - - -
- -

T

- - -
- -

U

- - - -
- -

V

- - -
- -

X

- - -
- - - -
- -
-
- -
-
- -Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - - - \ No newline at end of file diff --git a/docs/getting_started.html b/docs/getting_started.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/getting_started.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/index.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/metrics.html b/docs/metrics.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/metrics.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv deleted file mode 100644 index 631bcc2211ea06c9895064c5e83d20097983adcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmVNERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkVa&KpD zZ*z2MV{;%uY-ewBX>@39b0AQ8bZBpGAW&grYhh<)3L_v^WpZMd?av*PJAarPHb0B7EY-J#6b0A}HZE$jBb8}^6Aa!$TZf78RY-wUH z3V7PJnNP3dCJ?~y{uD^8CIFUu?&AY(r0R zF!P&%8HNGF2gz~)W`81vQw-H#l;1vQiWTnZ7jy<|xjbWIiMGJ@sm;Vs)!W_AXqP~X z07=t~=!@?iL;@u+TtV7x;;GX7UnRE*Ux>(v#BW?!(Ay9h5L0N#+yF5ABg5uG!n^Ne z0fVtTBUb4!VD8>?Dxe-BJ`wAFZh=riZYM%78>KZcPAxV$Q2yrQaJ%zus@1#1>hw1_ zV$h%pTN|d<1wyXX8542#kzh5aet_zPO+hIb<56#gq?Wr7{e+q>C8RIiYB&2AB`y3$ zv`}803gS4QP^ZJZ_@R2_)uI@PyVk|xKDJAS>z9MJx2+f@l~s~c?ht-%!KR9Bgc(V4 zlPVhos(ie4W|eLl$BcN6`Jukv2XxTNtxeeEsxi=>FoyG92&|u`aj?i!f(6M=j6}q` z>_l`-UXc}oSbhbpp?)Bg7MjpoL^UoiM5J*GnTg1|z%3>&d)ty<#14Oj+mq!2M@w8)t&Mj`^QL=>ku2KN@LlbGf zeoh_mSk(Z58|MsfPgNo9)?rU$xn%GW9~-jo&vJv)$Q(VaGRS<5E)q$bBM%6>z^FOGVuQiq_ESen`+h)sM zwhJ#^FLSW2O@liTv;VWaxcS!J+ccZ?L&uQ;KJ+=%mn4yJN8j+Z`5zg#uix~GvKZix z!H&O)**Y|;gL>C=6TaU~v6n{CtObL6w8@a!V#RhyACIJvSe}j zt~$YKy=0<74J|)E#N^IbiGgr)|DF&)92`Xg*ZqLzmsOa7Stng$S>{X3ocEvR(cQSR zwRw5QG*hPC=@h)yf(~Ow>$0T1R(BsWtG;nDHnopuVrab?L)0!ggRCx+jAfq%If3xl zrnLm3Km21d_!w3SFh#5GkKf7A?^Po@R*lJBO)b^YaA;2~2K_3|?$Bb>%%H=~1-3*7 zLN6}kB~3oTxc*!rr5~%^4qR?QHxfe{Hl?5zMyne4UXaHe(p-{ zrf!bamBDmCRrD`|rxS88ARJP5Wx9wyO8BdVlaU lJS@PvDn^SpR2Gh?tsG6#kGU>jBvw(oGLT;y$$wc!GZ1T5Vx|B9 diff --git a/docs/prediction.html b/docs/prediction.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/prediction.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/predictors.html b/docs/predictors.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/predictors.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/py-modindex.html b/docs/py-modindex.html deleted file mode 100644 index abbcea71..00000000 --- a/docs/py-modindex.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - Python Module Index — Prognostics Algorithms Python Package 1.3.1 documentation - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- - -

Python Module Index

- -
- e -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
- e
- examples -
    - examples.basic_example -
    - examples.benchmarking_example -
    - examples.eol_event -
    - examples.horizon -
    - examples.kalman_filter -
    - examples.measurement_eqn_example -
    - examples.new_state_estimator_example -
    - examples.particle_filter_battery_example -
    - examples.playback -
    - examples.predict_specific_event -
    - examples.thrown_object_example -
    - examples.utpredictor -
- - -
- -
-
- -
-
- -Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - - - \ No newline at end of file diff --git a/docs/release.html b/docs/release.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/release.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/search.html b/docs/search.html deleted file mode 100644 index e532c6a4..00000000 --- a/docs/search.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - Search — Prognostics Algorithms Python Package 1.3.1 documentation - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -

Search

- - - - -

- Searching for multiple words only shows matches that contain - all words. -

- - -
- - - -
- - - -
- -
- - -
- -
-
- -
-
- -Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - - - \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js deleted file mode 100644 index 5ba07006..00000000 --- a/docs/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["getting_started","index","metrics","prediction","predictors","release","state_estimators","uncertain_data"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["getting_started.rst","index.rst","metrics.rst","prediction.rst","predictors.rst","release.rst","state_estimators.rst","uncertain_data.rst"],objects:{"prog_algs.metrics":[[2,1,1,"","prob_success"]],"prog_algs.predictors":[[4,2,1,"","MonteCarlo"],[3,2,1,"","Prediction"],[4,2,1,"","Predictor"],[3,2,1,"","ToEPredictionProfile"],[4,2,1,"","UnscentedTransformPredictor"],[3,2,1,"","UnweightedSamplesPrediction"]],"prog_algs.predictors.Prediction":[[3,3,1,"","mean"],[3,4,1,"","monotonicity"],[3,4,1,"","snapshot"]],"prog_algs.predictors.Predictor":[[4,4,1,"","predict"]],"prog_algs.predictors.ToEPredictionProfile":[[3,4,1,"","add_prediction"],[3,4,1,"","alpha_lambda"],[3,4,1,"","clear"],[3,4,1,"","cumulative_relative_accuracy"],[3,4,1,"","get"],[3,4,1,"","items"],[3,4,1,"","keys"],[3,4,1,"","monotonicity"],[3,4,1,"","plot"],[3,4,1,"","pop"],[3,4,1,"","popitem"],[3,4,1,"","prognostic_horizon"],[3,4,1,"","setdefault"],[3,4,1,"","update"],[3,4,1,"","values"]],"prog_algs.predictors.UnweightedSamplesPrediction":[[3,4,1,"","count"],[3,4,1,"","index"],[3,3,1,"","mean"],[3,4,1,"","monotonicity"],[3,4,1,"","snapshot"]],"prog_algs.predictors.prediction.Prediction":[[2,4,1,"","mean"],[2,4,1,"","monotonicity"]],"prog_algs.predictors.toe_prediction_profile.ToEPredictionProfile":[[2,4,1,"","alpha_lambda"],[2,4,1,"","cumulative_relative_accuracy"],[2,4,1,"","monotonicity"],[2,4,1,"","plot"],[2,4,1,"","prognostic_horizon"]],"prog_algs.state_estimators":[[6,2,1,"","KalmanFilter"],[6,2,1,"","ParticleFilter"],[6,2,1,"","StateEstimator"],[6,2,1,"","UnscentedKalmanFilter"]],"prog_algs.state_estimators.StateEstimator":[[6,4,1,"","estimate"],[6,3,1,"","x"]],"prog_algs.uncertain_data":[[7,2,1,"","MultivariateNormalDist"],[7,2,1,"","ScalarData"],[7,2,1,"","UncertainData"],[7,2,1,"","UnweightedSamples"]],"prog_algs.uncertain_data.UncertainData":[[7,3,1,"","cov"],[7,4,1,"","describe"],[7,4,1,"","keys"],[7,3,1,"","mean"],[7,3,1,"","median"],[7,4,1,"","metrics"],[7,4,1,"","percentage_in_bounds"],[7,4,1,"","plot_hist"],[7,4,1,"","plot_scatter"],[7,4,1,"","relative_accuracy"],[7,4,1,"","sample"]],"prog_algs.uncertain_data.UnweightedSamples":[[7,4,1,"","key"]],examples:[[0,0,0,"-","basic_example"],[0,0,0,"-","benchmarking_example"],[0,0,0,"-","eol_event"],[0,0,0,"-","horizon"],[0,0,0,"-","kalman_filter"],[0,0,0,"-","measurement_eqn_example"],[0,0,0,"-","new_state_estimator_example"],[0,0,0,"-","particle_filter_battery_example"],[0,0,0,"-","playback"],[0,0,0,"-","predict_specific_event"],[0,0,0,"-","thrown_object_example"],[0,0,0,"-","utpredictor"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","property","Python property"],"4":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:property","4":"py:method"},terms:{"0":[0,1,2,3,4,6,7],"000":2,"003":6,"1":[0,1,2,3,4,6,7],"10":[2,4,5,7],"100":[2,7],"1000":[2,7],"12":[2,3,6],"1404":[2,3],"15":[2,3],"175":[2,3],"1e":[2,7],"1s":4,"2":[0,1,2,3,6,7],"20":[2,3,4,7],"2021":[2,3],"2021_nasa_prog_alg":1,"2022":[1,2,3],"22":4,"221":6,"2233":[2,3],"23":[2,7],"239":[2,7],"3":[0,1,2,3,6,7],"306":[2,3],"332":6,"3442":[2,3],"4":6,"46":[2,3],"47":[2,3],"5":[2,4,7],"50":[2,7],"52":[2,3],"6":[2,7],"7":[2,4,7],"748":[2,3],"75":[2,7],"8":6,"9":[2,5,7],"\u03c3":[2,3],"\u03c3sign":[2,3],"abstract":[2,4,6,7],"boolean":[2,3],"case":[0,3],"class":[0,3,4,5,6,7],"default":[2,3,4,7],"do":[0,1],"float":[2,3,4,5,6,7],"function":[0,1,2,3,4,6,7],"import":[2,4,6],"int":[2,3,4,6,7],"new":[0,1,2,4,5,6,7],"return":[0,2,3,4,5,6,7],"true":[0,2,3,7],A:[0,1,2,3,4,6],AND:1,AS:1,At:6,BE:1,BUT:1,BY:1,By:4,FOR:1,For:0,IF:1,IN:1,IS:1,IT:1,ITS:1,If:[1,2,3,4,7],In:[0,3,4,6],Is:[0,3],It:0,NOT:1,No:[1,6],OF:1,ON:1,OR:1,Of:[0,4],SUCH:1,THAT:1,THE:1,TO:1,The:[0,1,2,3,4,5,6,7],Then:0,There:[0,2],These:[0,2,3,5],To:0,WILL:1,With:[2,7],_type:7,abc:6,abil:5,about:[2,4,7],accept:[2,3],access:3,accord:6,accuraci:[3,5,7],achiev:0,act:2,ad:[2,5,7],add:[0,3,5],add_predict:3,addit:[2,4,6,7],adequ:0,after:[2,3],against:1,agenc:1,agre:1,agreement:1,al:[2,3,7],algorithm:[0,2,3,4,6],all:[0,1,2,3,4,5,7],allow:[2,3],along:4,alpha:[0,3,4,6],alpha_lambda:[2,3],also:[0,1,2,3,4,6],alwai:0,an:[0,1,2,3,4,6],analysi:[0,1],ani:[0,1,2,4,6],annual:[2,3],appli:0,applic:[0,1],approach:[0,2,3],ar:[0,1,2,3,4,5,6,7],arg:[2,3,6],argument:[2,3,4,6,7],aris:1,aritif:[2,3],around:[2,3],arrai:[2,3,4,7],articl:[2,3],aspect:0,associ:[2,3],assum:0,assumpt:4,ata:[2,3],author:1,avail:[0,6],b:[2,7],back:0,backward:5,baptistia:[2,3],base:[1,2,4,5,6,7],basic:[0,2,7],basic_exampl:0,batteri:0,batterycircuit:0,batteryelectrochemeod:0,becaus:0,been:[2,3],befor:[0,2,7],begin:4,being:0,below:[0,2,3,5,6,7],benchmark:0,benchmarking_exampl:0,best:[0,1],beta:[3,4,6],between:[2,3,7],bool:[2,3,7],both:4,bound:[2,3,7],branch:0,bugfix:5,build:0,c:[1,2,7],calcul:[0,2,3,7],call:[0,6],callabl:[2,3,4,6],can:[0,1,2,3,4,5,6,7],cannot:4,cautiou:4,cd:0,center:1,chang:5,characterist:0,checkout:0,chetan:1,chosen:0,christoph:1,claim:1,clear:3,clone:0,cobl:[2,3],collect:[2,3,7],com:[0,1,2,3],combin:[2,3],come:0,command:0,compar:[1,2,3],compat:5,compon:1,comput:[0,1,2,3,4],confer:[2,3],configur:[2,3,4,6],conform:1,conjunct:0,consid:[2,7],constitut:1,construct:[0,6],constructor:4,contain:[2,3,7],contractor:1,contribut:0,control:0,corbetta:1,correspond:[0,1,2,3,5],count:[2,3],cov:[2,7],covar:7,covari:[2,4,6,7],cra:[2,3,5],creat:[0,2,4,6,7],creation:0,criteria:[2,3],criteria_eqn:[2,3],cumul:[3,5],cumulative_relative_accuraci:[2,3],current:[0,2,4,6],curv:4,custom:[0,6],d:[2,3,7],damag:1,data:[1,2,3,6],def:[4,6],defaultdict:[2,7],defin:[0,2,3,4,6],definit:0,degred:0,demand:1,demonstr:0,depict:[2,3],deriv:5,describ:[2,3,5,6,7],design:1,desrib:0,dev:0,dev_guid:1,develop:[0,1],deviat:[2,7],diagnost:1,dict:[2,3,6,7],dictionari:[0,2,3,6,7],differ:[0,1,2,3,5,7],dimens:4,directli:[0,4],discharg:0,displai:[0,2,3],dist:[2,7],distinct:0,distribut:[0,1,2,3,4],divid:2,document:[1,6],doe:[1,3,6],doesn:[4,6],domain:4,dont:[2,3],drawn:0,dt:[4,6],e:[0,2,3,4,5,6],each:[0,2,3,4,6,7],easili:1,effect:0,either:[0,1,3,4,6],element:5,els:3,empti:[3,7],en:4,enabl:1,end:[0,4,5],endors:1,engin:[0,1],environment:0,eol:[0,4,5],eol_ev:0,equat:4,equivil:[4,6],error:[1,2,3,5],estim:[0,1,2,3,4,5],et:[2,3,7],etc:0,evalu:[1,2,3],event1:[2,3,4,5],event2:[2,3,4],event3:[2,3],event:[0,3,4,5,7],event_st:[0,4,6],everi:4,exampl:[0,2,3,4,5,6,7],excel:1,exist:[2,3,6,7],expect:4,expens:1,express:1,extend:[1,3],extent:1,extract:0,f:3,fade:6,failur:0,fake:0,fall:0,fals:[2,3],featur:[0,4,5,6],few:0,fig:[2,3,7],figur:[0,1,3,7],filt:6,filter:[0,5],filterpi:6,final_st:5,first:[0,3,4,5],first_stat:4,fit:1,follow:[0,1,2,3,4,6],form:[0,7],format:5,forward:[5,6],found:3,framework:[0,1],free:1,freedom:1,frequenc:4,frequent:0,from:[1,2,3,4,5,6,7],fulli:0,further:[0,1],futur:[0,2,3,4,5],future_load:4,future_loading_eqn:4,g:[0,2,3,4,5,6,7],gaussian:4,gener:[2,3,4,6,7],genet:[2,3],get:[1,3,6,7],git:0,github:1,given:[0,1,2,3,4,6,7],go:[2,3],goebel:[2,7],govern:1,gradual:0,ground:[2,3,7],ground_truth:[2,3,7],group:1,gt:[2,3],ha:[0,2,3],hand:1,hardwar:1,harmless:1,have:[0,4],health:[0,2,3],healthi:0,here:[4,6],hidden:0,histogram:[0,4,5,7],hold:1,horizon:[0,3,4,5],host:0,how:[0,6],http:[0,1,2,3,4],hypothesi:4,i:[0,2,3,4,6],identifi:[2,3],ignor:0,illustr:0,immedi:1,immut:3,impact:[0,4],implement:[1,2,4,6],impli:1,improv:5,includ:[0,1,2,3,5,7],increas:3,indemn:1,indemnifi:1,index:[1,2,3,6],indic:[0,2,3],individu:0,inform:[2,4,6,7],infring:1,inidividu:7,inidividualev:5,initi:[4,5,6],initial_st:6,input:[0,3,4,6],inputcontain:7,instal:1,instanc:[0,2,3],instanti:0,instead:0,integ:3,intellig:[2,3],interest:0,interfac:1,intern:0,interpret:[2,3],investig:0,isn:0,item:3,iter:3,its:[2,3,4,6],itself:6,j:[2,3],journal:[2,3],k:3,kalman:0,kalman_filt:[0,4,5],kalmanfilt:[5,6],kappa:[4,6],kei:[2,3,5,6,7],key1:[2,7],key2:[2,7],keyerror:3,keyword:[2,3,4,6,7],kf:[0,6],kind:[1,7],kulkarni:1,kwarg:[2,3,4,6,7],label:7,lack:3,lambda:[0,3],lambda_valu:[2,3],latest:0,law:1,learn:0,liabil:1,librari:[4,6],life:[0,1,4,5],like:[0,1,3,4,7],limit:1,line:[0,2,3],linear:[0,4],linearmodel:[0,5,6],link:0,list:[0,2,3,4,5,6,7],load:[0,4,6],local:[2,3],logic:[4,6],look:1,loss:1,lower:[2,7],m:[1,2,3,4,5,6,7],made:[2,3],mai:[0,1],make:[2,7],manag:[2,3],mani:0,manipul:0,manner:1,map:[2,3],mark:0,match:6,matlab:[4,6],matplotlib:[2,3,7],matrix:[2,4,6,7],matteo:1,matter:1,mean:[2,3,4,5,6,7],mean_valu:[2,3,7],meant:2,measur:[0,1,2,3,6],measurement_eqn:6,measurement_eqn_exampl:0,median:[2,7],median_valu:[2,7],meet:[2,3],member:5,memori:6,merchant:1,met:[0,2,3,4],method:[0,2,3,4,5,6],metric:[0,1,3,4,5,6,7],might:0,misalign:0,misc:1,mission:0,model:[0,1,2,4,5,6,7],modul:1,monoton:[3,5],monotonicitii:[2,3],monotonicti:[2,3],monotono:[2,3],monte_carlo:6,montecarlo:[3,4,5],month:1,more:[4,6],most:[0,2],multipl:[0,2,3,5],multivariatenormaldist:[0,2,4,7],must:[2,3,4,6,7],n:[2,3,5,7],n_sampl:[2,4,7],name:[2,3],namedtupl:4,nasa:[0,1,4,6],nears:0,necessari:[0,5],need:1,new_data:6,new_state_estimator_exampl:0,next:[2,3],nois:[0,4,6],non:[4,5],none:[0,2,3,6,7],nonlinear:4,normal:[2,3],note:1,notibl:0,now:[2,5],np:4,nsampl:7,nstate:4,nth:7,num_particl:6,num_sampl:[2,7],number:[0,2,3,4,6,7],numpi:7,object:[0,2,3,7],observ:[0,4,6],obtain:4,occur:[0,2,3,4,5],occurr:3,often:0,one:[0,2,3,6],onli:[0,2,7],oper:[0,2,3,5,7],optim:[2,3],option:[2,3,4,6,7],order:[2,3,7],org:[2,3,4],origin:1,other:[0,1],otherwis:3,output:[0,2,3,4,6],outputcontain:7,outsid:0,overritten:[2,7],p:[2,7],p_success:2,packag:[0,3,4,6,7],page:[0,1],pair:[2,3],paper:[2,3],paramet:[0,2,3,4,6,7],parti:1,particl:[0,5],particle_filter_battery_exampl:0,particlefilt:6,particular:1,pass:[2,3,5,7],pcoe:1,percentag:[2,3,7],percentage_in_bound:[2,5,7],perfom:3,perform:[0,1,2,3,4,5,6],permit:1,pf:6,ph:[2,3],phm:[2,3],phmconf:[2,3],phmsocieti:[2,3],php:[2,3],pii:[2,3],place:4,playback:[0,5],plot:[3,4,5,7],plot_hist:[2,4,7],plot_scatt:[2,7],point:[0,2,3,4,5],pop:3,popitem:3,portion:[2,3],posterior:[0,6],pred:4,pred_result:4,predefin:4,predict:[0,1,4,5,6,7],predict_specific_ev:0,predictionresult:4,predictor:[0,1,2,3,5,6],predictor_templ:4,present:[1,3],previou:5,previous:[2,7],primari:2,print:[2,3,6,7],prior:[0,1,6],prob_success:2,probabl:2,procedur:4,process:[0,4,6],produc:[0,2,3,6,7],product:1,profil:[1,5],prog_alg:[0,1,2,3,4,5,6,7],prog_model:[0,4,5,6],progmodel:[1,6],prognost:[0,3,4,5,6,7],prognostic_horizon:[2,3],prognostics_horizon:[2,3],prognosticsmodel:4,progress:0,progserv:1,propag:[1,4],properti:[3,6,7],propog:5,provid:[0,1,2,3,4],purpos:1,py:[4,6],pypi:0,python3:5,python:[0,5],q:[4,6],r:[2,6,7],ra:[2,3,5,7],rais:3,rapid:1,reach:[0,4],real:4,recipi:1,recommend:3,refer:1,regard:1,regardless:0,rel:[3,5,7],relat:[2,3],relative_accuraci:[2,7],releas:1,remain:[0,1],remedi:1,remov:[0,3],repeat:4,replac:6,repo:0,repres:[0,2,3,4,5,7],resampl:6,resample_fcn:6,research:[0,1,2],residual_resampl:6,respect:[0,2,3,7],respos:0,result:[0,1,2,3,4,5],rmse:5,root:5,row:[2,7],run:[0,6],s0004370222000078:[2,3],s:[0,1,2,4,5,6],same:[0,7],sampl:[0,2,3,4,5],satisfactori:4,satisfi:4,save:4,save_freq:4,save_pt:4,savepoint:[3,4],saxena:[2,3],scalar:4,scalardata:[0,2,4,6,7],scale:[4,6],scatter:[5,7],scienc:[2,3,7],sciencedirect:[2,3],search:1,second:6,see:[0,1,4,5,6],select:1,sensit:0,sensor:[0,6],set:[0,1,3,7],setdefault:3,sever:2,shall:1,shap:[2,3],should:[1,2,3,4],show:[0,2,3],sigma:[4,5],sign:[2,3],significantli:5,simresult:[0,3],simul:[0,4],simulate_to:0,singl:[0,2,3,4,7],size:[0,4],snapshot:[0,3,4],so:0,soc:0,societi:[2,3],softwar:1,sole:1,solut:1,some:[0,2,3,4],someon:0,someth:0,space:4,specif:[0,1,2,3,6],specifi:[0,2,3,4,7],squar:5,stabl:0,standard:[2,7],start:[1,3,6],state1:[2,3],state2:[2,3],state:[0,1,2,3,4,5,7],state_estim:[0,5,6],state_estimator_templ:6,statecontain:[6,7],stateestim:[0,6],statist:7,statutori:1,step:[0,4,6],stop:3,store:[0,3,6],str:[2,3,7],string:[2,3,4,7],strong:4,structur:[2,3,5],studi:1,subclass:[0,4,5,6],subcontractor:1,subdictionari:[2,3],subject:1,subset:4,success:2,suffici:0,suitabl:0,sum:[2,3],summar:0,summari:1,summat:[2,3],support:[2,3,4,5,6],swap:1,system:[0,1,4,6],t0:[4,6],t:[0,4,6],tabl:[2,7],temperatur:0,termin:1,test:0,teubert:1,text:[2,7],th:4,thei:[2,3],therefor:4,thi:[0,2,3,4,5,6,7],third:1,those:[2,3,7],three:0,threshold:[0,4],through:[0,2,3],throughout:0,thrown:0,thrown_object_exampl:0,thrownobject:[0,4,6],ti:[2,3],time:[0,3,4,5,6],time_index:3,time_of_ev:[2,4],time_of_predict:3,timepoint:5,timestamp:6,timestep:3,titl:[1,2,7],toe:[0,1,4,5],toe_predict:3,toe_profil:[2,3],toepredict:2,toepredictionprofil:[0,2,3,5],tool:[0,1,2],total:[2,3],toward:0,transform:5,transit:0,treat:[0,3,7],trivial:0,truth:[2,3,7],tte:[2,3],tupl:[2,3,7],turn:6,tutori:[0,1,4,6],two:3,type:[1,2,3,4],typic:[0,6],u:6,ukf:[4,6],uncertain:[0,1],uncertain_data:[2,3,4,5,7],uncertaindata:[0,1,3,4,5,6],uncertaintdata:4,uncertainti:[0,1,3,4,5],uncertiantydata:[2,7],unconcern:0,under:4,understand:2,unilater:1,unit:1,unless:0,unlik:0,unscent:5,unscented_kalman_filt:4,unscentedkalmanfilt:6,unscentedtransformpredictor:[0,4,5],unstabl:0,until:4,unweight:4,unweighted_sampl:3,unweightedsampl:[0,2,3,4,5,7],up:0,updat:[1,3,6],upper:[2,7],url:1,us:[1,2,3,4,6,7],user:[0,4],utpredictor:[0,5],v1:1,v:[3,4,6],valu:[0,2,3,4,5,6,7],valueerror:3,variabl:0,varieti:0,variou:[0,2,5],vector:5,verifi:4,version:1,view:[2,3,7],visual:1,voltag:0,volum:[2,3],wa:[1,2,3],wai:[0,4],waiv:1,waiver:1,want:0,warranti:1,we:[0,4,6],weight:6,well:[1,4,6],were:5,when:[0,2,3,4,7],where:[0,2,3,5,7],whether:[2,3,7],which:[0,2,3,4,6],who:0,wiki:4,wikipedia:4,within:[0,2,3,7],without:[0,1,7],work:5,would:[0,4],www:[2,3],x0:[5,6],x:[4,6],year:1,you:[0,1],z:[0,4,6]},titles:["Getting Started","Prognostics Algorithms Python Package","Metrics and Figures","Prediction","Predictors","Release Notes","State Estimators","Uncertain Data"],titleterms:{"2":5,"3":5,accuraci:2,algorithm:1,alpha:2,base:3,beta:2,carlo:4,cite:1,content:[2,5],cumul:2,data:[0,7],disclaim:1,distribut:7,e:7,estim:6,event:2,exist:5,extend:0,figur:2,filter:6,from:0,gener:5,get:0,github:0,histogram:2,horizon:2,i:7,implement:7,includ:[4,6],indic:1,instal:0,interfac:[4,6,7],kalman:6,lambda:2,metric:2,monoton:2,mont:4,multivari:7,normal:7,note:5,packag:1,particl:6,pip:0,plot:2,pre:0,predict:[2,3],predictor:4,profil:[2,3],prognost:[1,2],python:1,recommend:0,rel:2,releas:[0,5],repositori:1,sampl:7,scalar:7,scatter:2,simpl:2,start:0,state:6,statist:2,structur:0,summari:0,tabl:1,thi:1,time:2,toe:[2,3],transform:4,type:7,uncertain:7,uncertaindata:[2,7],uncertainti:7,unscent:[4,6],unweight:7,unweightedsamplespredict:3,updat:5,us:0,user:5,v1:5,version:0}}) \ No newline at end of file diff --git a/docs/softwareplan.md b/docs/softwareplan.md deleted file mode 100644 index 27f2987e..00000000 --- a/docs/softwareplan.md +++ /dev/null @@ -1,12 +0,0 @@ -# Prognostics Algorithm Library Software Plan - -## Software Goals -- Mirror Prognostics algorithm Matlab Library -- Ability to perform health state estimation and prognostics (prediction of failure) - -## Development Plan -- Oct-Nov: First Implementation -- Dec-Jan: Testing and verification - -## Release & Maintenance Plan -Release open source on Github.com, after which use github ticketing system for bug-tracking and maintenance. \ No newline at end of file diff --git a/docs/state_estimators.html b/docs/state_estimators.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/state_estimators.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/uncertain_data.html b/docs/uncertain_data.html deleted file mode 100644 index 678c677b..00000000 --- a/docs/uncertain_data.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/visualize.html b/docs/visualize.html deleted file mode 100644 index 3494401d..00000000 --- a/docs/visualize.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - Visualization — Prognostics Algorithms Python Package 1.1.0 documentation - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Visualization

-

Visualization tools are included in prog_algs.visualize, described below:

-
-
-prog_algs.visualize.plot_scatter(samples, fig=None, keys=None, legend='auto', **kwargs)
-

Produce a scatter plot for a given list of states

-
-
Parameters
-
    -
  • samples ([dict]) – Non-empty list of states where each element is a dictionary containing a single sample

  • -
  • fig (Figure, optional) – Existing figure previously used to plot states. If passed a figure argument additional data will be added to the plot. Defaults to creating new figure

  • -
  • keys (list of strings, optional) – Keys to plot. Defaults to all keys.

  • -
  • legend (optional) – When the legend should be shown, options: -False: Dont show legend -“auto”: Show legend automatically if more than one data set -True: Always show legend

  • -
  • **kwargs (optional) – Additional keyword arguments passed to scatter function. Includes those supported by scatter

  • -
-
-
Returns
-

Figure

-
-
-

Example

-

states = UnweightedSamples([1, 2, 3, 4, 5]) -plot_scatter(states.sample(100)) # With 100 samples -plot_scatter(states.sample(100), keys=[‘state1’, ‘state2’]) # only plot those keys

-
- -
- - -
- -
-
- -
-
- -Copyright © 2020 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - - - \ No newline at end of file diff --git a/examples/__init__.py b/examples/__init__.py deleted file mode 100644 index 010b98c3..00000000 --- a/examples/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -__all__ = ['basic_example', 'basic_example_battery', 'benchmarking_example', 'eol_event', 'horizon', 'kalman_filter', 'new_state_estimator_example', 'measurement_eqn_example', 'playback', 'predict_specific_event'] diff --git a/examples/basic_example.py b/examples/basic_example.py deleted file mode 100644 index 09a19b9c..00000000 --- a/examples/basic_example.py +++ /dev/null @@ -1,117 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation and prediction with uncertainty given a Prognostics Model. - -Method: An instance of the ThrownObject model in prog_models is created, and the prediction process is achieved in three steps: - 1) State estimation of the current state is performed using a chosen state_estimator, and samples are drawn from this estimate - 2) Prediction of future states (with uncertainty) and the times at which the event threshold will be reached - 3) Metrics tools are used to further investigate the results of prediction -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics - iv) Figures illustrating results -""" - -from prog_models.models import ThrownObject -from prog_algs import * - -def run_example(): - # Step 1: Setup model & future loading - m = ThrownObject(process_noise = 1) - def future_loading(t, x = None): - # No load for a thrown object - return m.InputContainer({}) - initial_state = m.initialize() - - # Step 2: Demonstrating state estimator - # The state estimator is used to estimate the system state given sensor data. - print("\nPerforming State Estimation Step") - - # Step 2a: Setup - filt = state_estimators.ParticleFilter(m, initial_state) - # VVV Uncomment this to use UKF State Estimator VVV - # filt = state_estimators.UnscentedKalmanFilter(m, initial_state) - - # Step 2b: Print & Plot Prior State - print("Prior State:", filt.x.mean) - print('\nevent state: ', m.event_state(filt.x.mean)) - fig = filt.x.plot_scatter(label='prior') - - # Step 2c: Perform state estimation step, given some measurement, above what's expected - example_measurements = m.OutputContainer({'x': 7.5}) - t = 0.1 - u = future_loading(t) - filt.estimate(t, u, example_measurements) # Update state, given (example) sensor data - - # Step 2d: Print & Plot Resulting Posterior State - # Note the posterior state is greater than the predicted state of 5.95 - # This is because of the high measurement - print("\nPosterior State:", filt.x.mean) - # Event state for 'falling' is less, because velocity has decreased - print('\nEvent State: ', m.event_state(filt.x.mean)) - filt.x.plot_scatter(fig=fig, label='posterior') # Add posterior state to figure from prior state - - # Note: in a prognostic application the above state estimation step would be repeated each time - # there is new data. Here we're doing one step to demonstrate how the state estimator is used - - # Step 3: Demonstrating Prediction - print("\n\nPerforming Prediction Step") - - # Step 3a: Setup Predictor - mc = predictors.MonteCarlo(m) - - # Step 3b: Perform a prediction - NUM_SAMPLES = 50 - STEP_SIZE = 0.01 - mc_results = mc.predict(filt.x, future_loading, n_samples = NUM_SAMPLES, dt=STEP_SIZE, save_freq=STEP_SIZE) - print('Predicted time of event (ToE): ', mc_results.time_of_event.mean) - # Here there are 2 events predicted, when the object starts falling, and when it impacts the ground. - - # Step 3c: Analyze the results - - # Note: The results of a sample-based prediction can be accessed by sample, e.g., - states_sample_1 = mc_results.states[1] - # now states_sample_1[n] corresponds to times[n] for the first sample - - # You can also access a state distribution at a specific time using the .snapshot function - states_time_1 = mc_results.states.snapshot(1) - # now you have all the samples corresponding to times[1] - - # You can also access the final state (of type UncertainData), like so: - # Note: to get a more accurate final state, you can decrease the step size. - final_state = mc_results.time_of_event.final_state - print('State when object starts falling: ', final_state['falling'].mean) - - # You can also use the metrics package to generate some useful metrics on the result of a prediction - print("\nEOD Prediction Metrics") - - from prog_algs.metrics import prob_success - print('\tPortion between 3.65 and 3.8: ', mc_results.time_of_event.percentage_in_bounds([3.65, 3.8], keys='falling')) - print('\tAssuming ground truth 3.7: ', mc_results.time_of_event.metrics(ground_truth=3.7, keys='falling')) - print('\tP(Success) if mission ends at 7.6: ', prob_success(mc_results.time_of_event, 7.6, keys='impact')) - - # Plot state transition - # Here we will plot the states at t0, 25% to ToE, 50% to ToE, 75% to ToE, and ToE - # You should see the states move together (i.e., velocity is lowest and highest when closest to the ground (before impact, and at beginning, respectively)) - fig = mc_results.states.snapshot(0).plot_scatter(label = "t={} s".format(int(mc_results.times[0]))) # 0 - quarter_index = int(len(mc_results.times)/4) - mc_results.states.snapshot(quarter_index).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index]))) # 25% - mc_results.states.snapshot(quarter_index*2).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*2]))) # 50% - mc_results.states.snapshot(quarter_index*3).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*3]))) # 75% - mc_results.states.snapshot(-1).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[-1]))) # 100% - - # Plot time of event for each event - # If you dont see many bins here, this is because there is not much variety in the estimate. - # You can increase the number of bins, decrease step size, or increase the number of samples to see more of a distribution - mc_results.time_of_event.plot_hist(keys='impact') - mc_results.time_of_event.plot_hist(keys='falling') - - # Step 4: Show all plots - import matplotlib.pyplot as plt # For plotting - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/basic_example_battery.py b/examples/basic_example_battery.py deleted file mode 100644 index 4599d553..00000000 --- a/examples/basic_example_battery.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example extends the "basic example" to perform a state estimation and prediction with uncertainty given a more complicated model. Models, state estimators, and predictors can be switched out. See documentation nasa.github.io/progpy for description of options - -Method: An instance of the BatteryCircuit model in prog_models is created, and the prediction process is achieved in three steps: - 1) State estimation of the current state is performed using a chosen state_estimator, and samples are drawn from this estimate - 2) Prediction of future states (with uncertainty) and the times at which the event threshold will be reached - 3) Metrics tools are used to further investigate the results of prediction - -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics - iv) Figures illustrating results -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChemEOD as Battery - -from prog_algs.state_estimators import ParticleFilter as StateEstimator -# VVV Uncomment this to use UKF State Estimator VVV -# from prog_algs.state_estimators import UnscentedKalmanFilter as StateEstimator - -from prog_algs.predictors import MonteCarlo as Predictor -# VVV Uncomment this to use UnscentedTransform Predictor VVV -# from prog_algs.predictors import UnscentedTransformPredictor as Predictor - -def run_example(): - # Step 1: Setup model & future loading - # Measurement noise - R_vars = { - 't': 2, - 'v': 0.02 - } - batt = Battery(process_noise = 0.25, measurement_noise = R_vars) - # Creating the input containers outside of the function accelerates prediction - loads = [ - batt.InputContainer({'i': 2}), - batt.InputContainer({'i': 1}), - batt.InputContainer({'i': 4}), - batt.InputContainer({'i': 2}), - batt.InputContainer({'i': 3}) - ] - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - return loads[0] - elif (t < 900): - return loads[1] - elif (t < 1800): - return loads[2] - elif (t < 3000): - return loads[3] - return loads[-1] - - initial_state = batt.initialize() - - # Step 2: Demonstrating state estimator - print("\nPerforming State Estimation Step") - - # Step 2a: Setup - filt = StateEstimator(batt, initial_state) - - # Step 2b: Print & Plot Prior State - print("Prior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - fig = filt.x.plot_scatter(label='prior') - - # Step 2c: Perform state estimation step - example_measurements = batt.OutputContainer({'t': 32.2, 'v': 3.915}) - t = 0.1 - u = future_loading(t) - filt.estimate(t, u, example_measurements) - - # Step 2d: Print & Plot Resulting Posterior State - print("\nPosterior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - filt.x.plot_scatter(fig=fig, label='posterior') # Add posterior state to figure from prior state - - # Note: in a prognostic application the above state estimation step would be repeated each time - # there is new data. Here we're doing one step to demonstrate how the state estimator is used - - # Step 3: Demonstrating Predictor - print("\n\nPerforming Prediction Step") - - # Step 3a: Setup Predictor - mc = Predictor(batt) - - # Step 3b: Perform a prediction - NUM_SAMPLES = 25 - STEP_SIZE = 0.1 - SAVE_FREQ = 100 # How often to save results - mc_results = mc.predict(filt.x, future_loading, n_samples = NUM_SAMPLES, dt=STEP_SIZE, save_freq = SAVE_FREQ) - print('ToE', mc_results.time_of_event.mean) - - # Step 3c: Analyze the results - - # Note: The results of a sample-based prediction can be accessed by sample, e.g., - from prog_algs.predictors import UnweightedSamplesPrediction - if isinstance(mc_results, UnweightedSamplesPrediction): - states_sample_1 = mc_results.states[1] - # now states_sample_1[n] corresponds to times[n] for the first sample - - # You can also access a state distribution at a specific time using the .snapshot function - states_time_1 = mc_results.states.snapshot(1) - # now you have all the samples corresponding to times[1] - - # Print Results - print('Results: ') - for i, time in enumerate(mc_results.times): - print('\nt = {}'.format(time)) - print('\tu = {}'.format(mc_results.inputs.snapshot(i).mean)) - print('\tx = {}'.format(mc_results.states.snapshot(i).mean)) - print('\tz = {}'.format(mc_results.outputs.snapshot(i).mean)) - print('\tevent state = {}'.format(mc_results.event_states.snapshot(i).mean)) - - # You can also access the final state (of type UncertainData), like so: - final_state = mc_results.time_of_event.final_state - print('Final state @EOD: ', final_state['EOD'].mean) - - # You can also use the metrics package to generate some useful metrics on the result of a prediction - print("\nEOD Prediction Metrics") - - from prog_algs.metrics import prob_success - print('\tPortion between 3005.2 and 3005.6: ', mc_results.time_of_event.percentage_in_bounds([3005.2, 3005.6])) - print('\tAssuming ground truth 3002.25: ', mc_results.time_of_event.metrics(ground_truth=3005.25)) - print('\tP(Success) if mission ends at 3002.25: ', prob_success(mc_results.time_of_event, 3005.25)) - - # Plot state transition - # Here we will plot the states at t0, 25% to ToE, 50% to ToE, 75% to ToE, and ToE - fig = mc_results.states.snapshot(0).plot_scatter(label = "t={} s".format(int(mc_results.times[0]))) # 0 - quarter_index = int(len(mc_results.times)/4) - mc_results.states.snapshot(quarter_index).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index]))) # 25% - mc_results.states.snapshot(quarter_index*2).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*2]))) # 50% - mc_results.states.snapshot(quarter_index*3).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*3]))) # 75% - mc_results.states.snapshot(-1).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[-1]))) # 100% - - mc_results.time_of_event.plot_hist() - - # Step 4: Show all plots - import matplotlib.pyplot as plt # For plotting - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/benchmarking_example.py b/examples/benchmarking_example.py deleted file mode 100644 index 9831f931..00000000 --- a/examples/benchmarking_example.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs benchmarking for a state estimation and prediction with uncertainty given a Prognostics Model. The process and benchmarking analysis are run for various sample sizes. - -Method: An instance of the BatteryCircuit model in prog_models is created, state estimation is set up with a chosen state_estimator, and prediction is set up with a chosen predictor. - Prediction of future states (with uncertainty) is then performed for various sample sizes. - Metrics are calculated and displayed for each run. - -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction for each distinct sample size - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics, including alpha-lambda metric -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs import state_estimators, predictors -from prog_algs.metrics import samples as metrics -import time # For timing prediction - -def run_example(): - # Step 1: Setup Model and Future Loading - batt = Battery() - - # Creating the input containers outside of the function accelerates prediction - loads = [ - batt.InputContainer({'i': 2}), - batt.InputContainer({'i': 1}), - batt.InputContainer({'i': 4}), - batt.InputContainer({'i': 2}), - batt.InputContainer({'i': 3}) - ] - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - return loads[0] - elif (t < 900): - return loads[1] - elif (t < 1800): - return loads[2] - elif (t < 3000): - return loads[3] - return loads[-1] - - # Step 2: Setup Predictor - pred = predictors.MonteCarlo(batt, dt= 0.05) - - # Step 3: Estimate State - x0 = batt.initialize() - state_estimator = state_estimators.ParticleFilter(batt, x0) - # Send in some data to estimate state - z1 = batt.OutputContainer({'t': 32.2, 'v': 3.915}) - z2 = batt.OutputContainer({'t': 32.3, 'v': 3.91}) - state_estimator.estimate(0.1, future_loading(0.1), z1) - state_estimator.estimate(0.2, future_loading(0.2), z2) - - # Step 4: Benchmark Predictions - # Here we're comparing the results given different numbers of samples - print('Benchmarking...') - - # Perform benchmarking for each number of samples - sample_counts = [1, 2, 5, 10] - for sample_count in sample_counts: - print('\nRun 1 ({} samples)'.format(sample_count)) - start = time.perf_counter() - pred_results = pred.predict(state_estimator.x, future_loading, n_samples = sample_count) - toe = pred_results.time_of_event.key("EOD") # Looking at EOD event - end = time.perf_counter() - print('\tMSE: {:4.2f}s'.format(metrics.mean_square_error(toe, 3005.4))) - print('\tRMSE: {:4.2f}s'.format(metrics.root_mean_square_error(toe, 3005.4))) - print('\tRuntime: {:4.2f}s'.format(end - start)) - - # This same approach can be applied for benchmarking and comparing other changes - # For example: different sampling methods, prediction algorithms, step sizes, models - -# This allows the module to be executed directly -if __name__=='__main__': - run_example() diff --git a/examples/data_const_load.csv b/examples/data_const_load.csv deleted file mode 100644 index 6cf6fd5c..00000000 --- a/examples/data_const_load.csv +++ /dev/null @@ -1,2740 +0,0 @@ -Timestamp, power, temperature, voltage -0.00, 0.00, 20.00, 4.10 -1.00, 8.00, 18.74, 4.05 -2.00, 8.00, 18.68, 4.03 -3.00, 8.00, 19.40, 4.00 -4.00, 8.00, 19.24, 3.97 -5.00, 8.00, 19.75, 3.95 -6.00, 8.00, 19.73, 3.94 -7.00, 8.00, 17.46, 3.92 -8.00, 8.00, 21.91, 3.90 -9.00, 8.00, 20.03, 3.89 -10.00, 8.00, 20.61, 3.88 -11.00, 8.00, 20.87, 3.88 -12.00, 8.00, 18.64, 3.87 -13.00, 8.00, 19.05, 3.86 -14.00, 8.00, 19.60, 3.85 -15.00, 8.00, 21.98, 3.85 -16.00, 8.00, 18.91, 3.84 -17.00, 8.00, 18.52, 3.83 -18.00, 8.00, 19.31, 3.86 -19.00, 8.00, 19.60, 3.84 -20.00, 8.00, 21.01, 3.82 -21.00, 8.00, 19.64, 3.81 -22.00, 8.00, 18.94, 3.83 -23.00, 8.00, 20.69, 3.82 -24.00, 8.00, 19.23, 3.82 -25.00, 8.00, 20.16, 3.82 -26.00, 8.00, 20.81, 3.81 -27.00, 8.00, 19.80, 3.82 -28.00, 8.00, 22.40, 3.83 -29.00, 8.00, 20.00, 3.81 -30.00, 8.00, 18.87, 3.82 -31.00, 8.00, 19.11, 3.81 -32.00, 8.00, 17.10, 3.82 -33.00, 8.00, 19.91, 3.81 -34.00, 8.00, 19.74, 3.83 -35.00, 8.00, 19.87, 3.82 -36.00, 8.00, 20.16, 3.81 -37.00, 8.00, 20.32, 3.80 -38.00, 8.00, 21.14, 3.79 -39.00, 8.00, 20.30, 3.81 -40.00, 8.00, 20.36, 3.81 -41.00, 8.00, 19.64, 3.79 -42.00, 8.00, 19.64, 3.81 -43.00, 8.00, 18.61, 3.80 -44.00, 8.00, 20.08, 3.81 -45.00, 8.00, 19.90, 3.80 -46.00, 8.00, 19.54, 3.82 -47.00, 8.00, 18.75, 3.81 -48.00, 8.00, 19.48, 3.81 -49.00, 8.00, 20.13, 3.80 -50.00, 8.00, 19.28, 3.81 -51.00, 8.00, 19.12, 3.79 -52.00, 8.00, 20.34, 3.79 -53.00, 8.00, 20.79, 3.79 -54.00, 8.00, 19.73, 3.79 -55.00, 8.00, 20.03, 3.79 -56.00, 8.00, 19.77, 3.82 -57.00, 8.00, 19.42, 3.79 -58.00, 8.00, 23.23, 3.81 -59.00, 8.00, 18.83, 3.77 -60.00, 8.00, 19.62, 3.81 -61.00, 8.00, 20.03, 3.80 -62.00, 8.00, 20.68, 3.79 -63.00, 8.00, 20.78, 3.80 -64.00, 8.00, 20.72, 3.80 -65.00, 8.00, 19.07, 3.80 -66.00, 8.00, 19.50, 3.78 -67.00, 8.00, 21.93, 3.80 -68.00, 8.00, 19.94, 3.79 -69.00, 8.00, 19.42, 3.80 -70.00, 8.00, 19.28, 3.79 -71.00, 8.00, 20.86, 3.79 -72.00, 8.00, 18.43, 3.79 -73.00, 8.00, 19.46, 3.80 -74.00, 8.00, 20.45, 3.78 -75.00, 8.00, 21.44, 3.80 -76.00, 8.00, 18.65, 3.80 -77.00, 8.00, 19.57, 3.80 -78.00, 8.00, 19.33, 3.78 -79.00, 8.00, 21.21, 3.78 -80.00, 8.00, 19.84, 3.79 -81.00, 8.00, 20.02, 3.76 -82.00, 8.00, 18.24, 3.80 -83.00, 8.00, 20.20, 3.79 -84.00, 8.00, 18.44, 3.80 -85.00, 8.00, 18.01, 3.78 -86.00, 8.00, 20.06, 3.79 -87.00, 8.00, 19.85, 3.79 -88.00, 8.00, 21.04, 3.77 -89.00, 8.00, 19.04, 3.80 -90.00, 8.00, 20.18, 3.78 -91.00, 8.00, 20.07, 3.77 -92.00, 8.00, 20.81, 3.79 -93.00, 8.00, 19.31, 3.79 -94.00, 8.00, 21.60, 3.78 -95.00, 8.00, 20.36, 3.79 -96.00, 8.00, 20.91, 3.80 -97.00, 8.00, 21.12, 3.80 -98.00, 8.00, 20.74, 3.79 -99.00, 8.00, 19.58, 3.79 -100.00, 8.00, 18.05, 3.79 -101.00, 8.00, 18.13, 3.78 -102.00, 8.00, 19.93, 3.77 -103.00, 8.00, 18.15, 3.79 -104.00, 8.00, 21.26, 3.77 -105.00, 8.00, 20.80, 3.81 -106.00, 8.00, 21.36, 3.77 -107.00, 8.00, 20.90, 3.79 -108.00, 8.00, 20.40, 3.78 -109.00, 8.00, 18.02, 3.77 -110.00, 8.00, 19.98, 3.76 -111.00, 8.00, 20.80, 3.79 -112.00, 8.00, 19.99, 3.78 -113.00, 8.00, 20.46, 3.77 -114.00, 8.00, 20.83, 3.79 -115.00, 8.00, 19.08, 3.79 -116.00, 8.00, 19.71, 3.77 -117.00, 8.00, 19.62, 3.77 -118.00, 8.00, 19.89, 3.76 -119.00, 8.00, 19.45, 3.78 -120.00, 8.00, 21.58, 3.77 -121.00, 8.00, 19.03, 3.77 -122.00, 8.00, 18.25, 3.77 -123.00, 8.00, 19.25, 3.78 -124.00, 8.00, 20.67, 3.77 -125.00, 8.00, 21.59, 3.75 -126.00, 8.00, 18.29, 3.78 -127.00, 8.00, 20.90, 3.78 -128.00, 8.00, 21.51, 3.78 -129.00, 8.00, 19.11, 3.76 -130.00, 8.00, 19.97, 3.78 -131.00, 8.00, 19.84, 3.75 -132.00, 8.00, 20.14, 3.79 -133.00, 8.00, 17.76, 3.76 -134.00, 8.00, 21.24, 3.75 -135.00, 8.00, 20.58, 3.77 -136.00, 8.00, 20.27, 3.79 -137.00, 8.00, 20.78, 3.77 -138.00, 8.00, 20.42, 3.77 -139.00, 8.00, 19.93, 3.77 -140.00, 8.00, 19.48, 3.77 -141.00, 8.00, 21.01, 3.78 -142.00, 8.00, 19.52, 3.76 -143.00, 8.00, 19.51, 3.76 -144.00, 8.00, 19.14, 3.78 -145.00, 8.00, 20.08, 3.75 -146.00, 8.00, 18.16, 3.78 -147.00, 8.00, 20.23, 3.77 -148.00, 8.00, 21.65, 3.76 -149.00, 8.00, 19.74, 3.76 -150.00, 8.00, 18.69, 3.76 -151.00, 8.00, 20.43, 3.78 -152.00, 8.00, 19.47, 3.75 -153.00, 8.00, 20.70, 3.74 -154.00, 8.00, 19.31, 3.75 -155.00, 8.00, 19.23, 3.76 -156.00, 8.00, 21.70, 3.77 -157.00, 8.00, 19.55, 3.76 -158.00, 8.00, 18.52, 3.76 -159.00, 8.00, 20.13, 3.76 -160.00, 8.00, 19.65, 3.77 -161.00, 8.00, 18.59, 3.77 -162.00, 8.00, 21.83, 3.76 -163.00, 8.00, 20.25, 3.76 -164.00, 8.00, 19.81, 3.75 -165.00, 8.00, 19.56, 3.77 -166.00, 8.00, 20.75, 3.75 -167.00, 8.00, 20.13, 3.77 -168.00, 8.00, 21.35, 3.77 -169.00, 8.00, 17.96, 3.75 -170.00, 8.00, 19.29, 3.76 -171.00, 8.00, 19.55, 3.77 -172.00, 8.00, 20.08, 3.78 -173.00, 8.00, 20.42, 3.76 -174.00, 8.00, 20.81, 3.75 -175.00, 8.00, 19.48, 3.76 -176.00, 8.00, 18.67, 3.75 -177.00, 8.00, 19.03, 3.75 -178.00, 8.00, 19.47, 3.74 -179.00, 8.00, 19.48, 3.76 -180.00, 8.00, 21.55, 3.77 -181.00, 8.00, 19.74, 3.75 -182.00, 8.00, 21.21, 3.76 -183.00, 8.00, 18.85, 3.75 -184.00, 8.00, 19.67, 3.74 -185.00, 8.00, 19.74, 3.77 -186.00, 8.00, 20.81, 3.77 -187.00, 8.00, 20.09, 3.75 -188.00, 8.00, 21.11, 3.75 -189.00, 8.00, 20.32, 3.75 -190.00, 8.00, 18.07, 3.75 -191.00, 8.00, 20.18, 3.76 -192.00, 8.00, 20.14, 3.74 -193.00, 8.00, 20.79, 3.75 -194.00, 8.00, 19.34, 3.75 -195.00, 8.00, 18.76, 3.75 -196.00, 8.00, 20.64, 3.75 -197.00, 8.00, 20.69, 3.75 -198.00, 8.00, 20.08, 3.75 -199.00, 8.00, 21.65, 3.74 -200.00, 8.00, 20.49, 3.76 -201.00, 8.00, 20.81, 3.76 -202.00, 8.00, 19.94, 3.74 -203.00, 8.00, 19.96, 3.76 -204.00, 8.00, 20.70, 3.74 -205.00, 8.00, 17.87, 3.75 -206.00, 8.00, 21.89, 3.76 -207.00, 8.00, 21.78, 3.76 -208.00, 8.00, 18.41, 3.74 -209.00, 8.00, 20.30, 3.74 -210.00, 8.00, 20.06, 3.73 -211.00, 8.00, 20.43, 3.76 -212.00, 8.00, 18.87, 3.75 -213.00, 8.00, 20.58, 3.75 -214.00, 8.00, 19.77, 3.74 -215.00, 8.00, 19.83, 3.74 -216.00, 8.00, 20.37, 3.73 -217.00, 8.00, 18.14, 3.77 -218.00, 8.00, 19.45, 3.74 -219.00, 8.00, 19.75, 3.73 -220.00, 8.00, 21.69, 3.75 -221.00, 8.00, 19.56, 3.75 -222.00, 8.00, 20.77, 3.73 -223.00, 8.00, 21.53, 3.75 -224.00, 8.00, 21.04, 3.74 -225.00, 8.00, 20.59, 3.73 -226.00, 8.00, 21.40, 3.72 -227.00, 8.00, 18.40, 3.74 -228.00, 8.00, 19.10, 3.74 -229.00, 8.00, 20.89, 3.75 -230.00, 8.00, 20.44, 3.75 -231.00, 8.00, 20.83, 3.75 -232.00, 8.00, 20.78, 3.75 -233.00, 8.00, 20.67, 3.75 -234.00, 8.00, 20.17, 3.74 -235.00, 8.00, 20.07, 3.74 -236.00, 8.00, 22.36, 3.76 -237.00, 8.00, 19.32, 3.75 -238.00, 8.00, 19.48, 3.74 -239.00, 8.00, 20.74, 3.75 -240.00, 8.00, 21.31, 3.72 -241.00, 8.00, 18.17, 3.75 -242.00, 8.00, 19.81, 3.74 -243.00, 8.00, 21.61, 3.73 -244.00, 8.00, 19.49, 3.74 -245.00, 8.00, 19.64, 3.75 -246.00, 8.00, 19.01, 3.72 -247.00, 8.00, 20.23, 3.74 -248.00, 8.00, 19.35, 3.73 -249.00, 8.00, 21.53, 3.73 -250.00, 8.00, 21.70, 3.73 -251.00, 8.00, 21.49, 3.73 -252.00, 8.00, 21.46, 3.74 -253.00, 8.00, 21.69, 3.73 -254.00, 8.00, 20.55, 3.74 -255.00, 8.00, 20.54, 3.72 -256.00, 8.00, 19.23, 3.74 -257.00, 8.00, 18.56, 3.70 -258.00, 8.00, 19.13, 3.74 -259.00, 8.00, 18.89, 3.74 -260.00, 8.00, 20.04, 3.74 -261.00, 8.00, 20.18, 3.71 -262.00, 8.00, 19.09, 3.72 -263.00, 8.00, 20.24, 3.74 -264.00, 8.00, 20.52, 3.72 -265.00, 8.00, 21.17, 3.73 -266.00, 8.00, 21.16, 3.73 -267.00, 8.00, 19.26, 3.75 -268.00, 8.00, 22.89, 3.71 -269.00, 8.00, 20.43, 3.73 -270.00, 8.00, 20.23, 3.73 -271.00, 8.00, 18.69, 3.73 -272.00, 8.00, 19.86, 3.72 -273.00, 8.00, 18.39, 3.73 -274.00, 8.00, 19.86, 3.72 -275.00, 8.00, 20.42, 3.74 -276.00, 8.00, 19.60, 3.73 -277.00, 8.00, 18.84, 3.73 -278.00, 8.00, 20.47, 3.73 -279.00, 8.00, 20.82, 3.73 -280.00, 8.00, 20.96, 3.74 -281.00, 8.00, 21.63, 3.72 -282.00, 8.00, 19.09, 3.71 -283.00, 8.00, 19.59, 3.73 -284.00, 8.00, 20.28, 3.71 -285.00, 8.00, 21.40, 3.70 -286.00, 8.00, 20.34, 3.75 -287.00, 8.00, 20.03, 3.74 -288.00, 8.00, 20.18, 3.72 -289.00, 8.00, 19.61, 3.72 -290.00, 8.00, 21.23, 3.71 -291.00, 8.00, 19.02, 3.73 -292.00, 8.00, 20.56, 3.73 -293.00, 8.00, 18.85, 3.72 -294.00, 8.00, 18.37, 3.72 -295.00, 8.00, 21.23, 3.72 -296.00, 8.00, 19.10, 3.72 -297.00, 8.00, 19.69, 3.71 -298.00, 8.00, 21.29, 3.72 -299.00, 8.00, 18.37, 3.74 -300.00, 8.00, 19.35, 3.72 -301.00, 8.00, 19.84, 3.71 -302.00, 8.00, 20.97, 3.74 -303.00, 8.00, 19.32, 3.73 -304.00, 8.00, 20.51, 3.71 -305.00, 8.00, 20.62, 3.70 -306.00, 8.00, 19.60, 3.72 -307.00, 8.00, 18.66, 3.72 -308.00, 8.00, 19.72, 3.71 -309.00, 8.00, 19.38, 3.71 -310.00, 8.00, 20.63, 3.73 -311.00, 8.00, 20.75, 3.73 -312.00, 8.00, 21.16, 3.71 -313.00, 8.00, 18.88, 3.71 -314.00, 8.00, 22.84, 3.73 -315.00, 8.00, 20.51, 3.73 -316.00, 8.00, 20.06, 3.71 -317.00, 8.00, 19.71, 3.72 -318.00, 8.00, 20.71, 3.71 -319.00, 8.00, 19.82, 3.72 -320.00, 8.00, 19.56, 3.70 -321.00, 8.00, 19.45, 3.72 -322.00, 8.00, 23.49, 3.70 -323.00, 8.00, 21.68, 3.72 -324.00, 8.00, 20.49, 3.70 -325.00, 8.00, 20.42, 3.70 -326.00, 8.00, 21.32, 3.72 -327.00, 8.00, 20.77, 3.71 -328.00, 8.00, 20.73, 3.72 -329.00, 8.00, 20.62, 3.69 -330.00, 8.00, 20.42, 3.73 -331.00, 8.00, 19.69, 3.70 -332.00, 8.00, 20.73, 3.70 -333.00, 8.00, 20.72, 3.70 -334.00, 8.00, 19.80, 3.71 -335.00, 8.00, 18.87, 3.71 -336.00, 8.00, 20.16, 3.73 -337.00, 8.00, 19.21, 3.69 -338.00, 8.00, 20.10, 3.71 -339.00, 8.00, 20.69, 3.71 -340.00, 8.00, 20.98, 3.71 -341.00, 8.00, 20.21, 3.72 -342.00, 8.00, 21.71, 3.70 -343.00, 8.00, 19.05, 3.70 -344.00, 8.00, 21.40, 3.72 -345.00, 8.00, 19.04, 3.70 -346.00, 8.00, 22.54, 3.73 -347.00, 8.00, 18.92, 3.73 -348.00, 8.00, 20.63, 3.71 -349.00, 8.00, 19.03, 3.71 -350.00, 8.00, 19.11, 3.72 -351.00, 8.00, 20.72, 3.71 -352.00, 8.00, 21.50, 3.70 -353.00, 8.00, 18.73, 3.70 -354.00, 8.00, 18.90, 3.70 -355.00, 8.00, 20.14, 3.71 -356.00, 8.00, 20.87, 3.70 -357.00, 8.00, 19.06, 3.71 -358.00, 8.00, 20.88, 3.70 -359.00, 8.00, 19.73, 3.72 -360.00, 8.00, 18.61, 3.71 -361.00, 8.00, 19.26, 3.70 -362.00, 8.00, 20.51, 3.70 -363.00, 8.00, 20.74, 3.70 -364.00, 8.00, 19.04, 3.70 -365.00, 8.00, 19.62, 3.71 -366.00, 8.00, 19.17, 3.70 -367.00, 8.00, 21.36, 3.69 -368.00, 8.00, 19.51, 3.70 -369.00, 8.00, 18.75, 3.70 -370.00, 8.00, 19.35, 3.72 -371.00, 8.00, 19.69, 3.70 -372.00, 8.00, 19.97, 3.71 -373.00, 8.00, 21.41, 3.69 -374.00, 8.00, 20.37, 3.71 -375.00, 8.00, 19.40, 3.70 -376.00, 8.00, 20.33, 3.72 -377.00, 8.00, 19.59, 3.69 -378.00, 8.00, 22.21, 3.69 -379.00, 8.00, 22.05, 3.71 -380.00, 8.00, 20.55, 3.69 -381.00, 8.00, 20.92, 3.71 -382.00, 8.00, 19.90, 3.69 -383.00, 8.00, 20.28, 3.70 -384.00, 8.00, 22.13, 3.68 -385.00, 8.00, 19.59, 3.71 -386.00, 8.00, 20.56, 3.70 -387.00, 8.00, 21.59, 3.69 -388.00, 8.00, 20.47, 3.70 -389.00, 8.00, 20.70, 3.69 -390.00, 8.00, 20.50, 3.70 -391.00, 8.00, 20.08, 3.70 -392.00, 8.00, 19.55, 3.70 -393.00, 8.00, 20.67, 3.66 -394.00, 8.00, 19.83, 3.70 -395.00, 8.00, 19.47, 3.68 -396.00, 8.00, 19.80, 3.71 -397.00, 8.00, 20.92, 3.70 -398.00, 8.00, 21.29, 3.70 -399.00, 8.00, 19.51, 3.68 -400.00, 8.00, 21.02, 3.69 -401.00, 8.00, 19.55, 3.70 -402.00, 8.00, 19.49, 3.71 -403.00, 8.00, 21.52, 3.69 -404.00, 8.00, 18.23, 3.70 -405.00, 8.00, 20.05, 3.70 -406.00, 8.00, 18.48, 3.70 -407.00, 8.00, 19.28, 3.71 -408.00, 8.00, 20.91, 3.68 -409.00, 8.00, 18.73, 3.70 -410.00, 8.00, 19.94, 3.69 -411.00, 8.00, 20.78, 3.68 -412.00, 8.00, 20.88, 3.68 -413.00, 8.00, 20.20, 3.68 -414.00, 8.00, 21.11, 3.70 -415.00, 8.00, 21.17, 3.71 -416.00, 8.00, 20.26, 3.68 -417.00, 8.00, 20.32, 3.71 -418.00, 8.00, 22.21, 3.69 -419.00, 8.00, 21.09, 3.69 -420.00, 8.00, 18.96, 3.70 -421.00, 8.00, 20.15, 3.68 -422.00, 8.00, 19.82, 3.69 -423.00, 8.00, 19.38, 3.71 -424.00, 8.00, 19.32, 3.68 -425.00, 8.00, 21.67, 3.68 -426.00, 8.00, 18.12, 3.70 -427.00, 8.00, 20.66, 3.70 -428.00, 8.00, 19.47, 3.69 -429.00, 8.00, 18.82, 3.70 -430.00, 8.00, 20.58, 3.68 -431.00, 8.00, 18.77, 3.70 -432.00, 8.00, 18.97, 3.69 -433.00, 8.00, 19.55, 3.68 -434.00, 8.00, 17.89, 3.68 -435.00, 8.00, 20.68, 3.69 -436.00, 8.00, 20.19, 3.70 -437.00, 8.00, 19.26, 3.69 -438.00, 8.00, 20.36, 3.68 -439.00, 8.00, 18.03, 3.68 -440.00, 8.00, 19.69, 3.69 -441.00, 8.00, 20.16, 3.70 -442.00, 8.00, 21.89, 3.66 -443.00, 8.00, 19.00, 3.68 -444.00, 8.00, 19.49, 3.68 -445.00, 8.00, 20.72, 3.71 -446.00, 8.00, 20.42, 3.68 -447.00, 8.00, 19.20, 3.69 -448.00, 8.00, 19.36, 3.68 -449.00, 8.00, 19.59, 3.68 -450.00, 8.00, 19.10, 3.66 -451.00, 8.00, 20.87, 3.66 -452.00, 8.00, 19.60, 3.68 -453.00, 8.00, 18.19, 3.69 -454.00, 8.00, 20.02, 3.66 -455.00, 8.00, 21.53, 3.68 -456.00, 8.00, 19.98, 3.68 -457.00, 8.00, 22.05, 3.68 -458.00, 8.00, 20.35, 3.66 -459.00, 8.00, 20.05, 3.68 -460.00, 8.00, 20.98, 3.66 -461.00, 8.00, 20.01, 3.68 -462.00, 8.00, 18.82, 3.67 -463.00, 8.00, 19.74, 3.69 -464.00, 8.00, 17.82, 3.70 -465.00, 8.00, 17.95, 3.68 -466.00, 8.00, 19.28, 3.67 -467.00, 8.00, 20.50, 3.69 -468.00, 8.00, 19.17, 3.67 -469.00, 8.00, 21.74, 3.65 -470.00, 8.00, 21.40, 3.66 -471.00, 8.00, 20.90, 3.68 -472.00, 8.00, 18.41, 3.68 -473.00, 8.00, 17.75, 3.66 -474.00, 8.00, 21.44, 3.66 -475.00, 8.00, 20.82, 3.67 -476.00, 8.00, 19.18, 3.69 -477.00, 8.00, 19.20, 3.67 -478.00, 8.00, 20.09, 3.67 -479.00, 8.00, 20.46, 3.67 -480.00, 8.00, 19.18, 3.69 -481.00, 8.00, 18.94, 3.67 -482.00, 8.00, 19.11, 3.70 -483.00, 8.00, 20.00, 3.66 -484.00, 8.00, 20.62, 3.67 -485.00, 8.00, 20.00, 3.67 -486.00, 8.00, 20.40, 3.67 -487.00, 8.00, 20.17, 3.67 -488.00, 8.00, 20.13, 3.67 -489.00, 8.00, 20.70, 3.68 -490.00, 8.00, 20.92, 3.67 -491.00, 8.00, 20.47, 3.66 -492.00, 8.00, 20.03, 3.68 -493.00, 8.00, 18.45, 3.68 -494.00, 8.00, 18.37, 3.66 -495.00, 8.00, 18.62, 3.67 -496.00, 8.00, 20.55, 3.67 -497.00, 8.00, 19.06, 3.67 -498.00, 8.00, 20.47, 3.68 -499.00, 8.00, 20.50, 3.67 -500.00, 8.00, 19.32, 3.65 -501.00, 8.00, 20.46, 3.65 -502.00, 8.00, 19.71, 3.67 -503.00, 8.00, 21.67, 3.67 -504.00, 8.00, 19.44, 3.68 -505.00, 8.00, 19.62, 3.68 -506.00, 8.00, 19.44, 3.68 -507.00, 8.00, 20.44, 3.67 -508.00, 8.00, 21.52, 3.67 -509.00, 8.00, 20.83, 3.68 -510.00, 8.00, 19.74, 3.67 -511.00, 8.00, 19.40, 3.66 -512.00, 8.00, 20.93, 3.65 -513.00, 8.00, 20.62, 3.67 -514.00, 8.00, 20.35, 3.66 -515.00, 8.00, 20.67, 3.67 -516.00, 8.00, 20.43, 3.67 -517.00, 8.00, 19.84, 3.66 -518.00, 8.00, 19.78, 3.67 -519.00, 8.00, 20.34, 3.67 -520.00, 8.00, 21.25, 3.66 -521.00, 8.00, 20.16, 3.67 -522.00, 8.00, 18.51, 3.67 -523.00, 8.00, 19.94, 3.66 -524.00, 8.00, 21.80, 3.64 -525.00, 8.00, 19.81, 3.68 -526.00, 8.00, 18.28, 3.66 -527.00, 8.00, 19.86, 3.66 -528.00, 8.00, 21.04, 3.65 -529.00, 8.00, 20.15, 3.66 -530.00, 8.00, 20.12, 3.69 -531.00, 8.00, 19.46, 3.68 -532.00, 8.00, 19.86, 3.67 -533.00, 8.00, 22.19, 3.66 -534.00, 8.00, 20.51, 3.65 -535.00, 8.00, 21.90, 3.68 -536.00, 8.00, 18.21, 3.67 -537.00, 8.00, 21.19, 3.68 -538.00, 8.00, 20.64, 3.66 -539.00, 8.00, 20.34, 3.65 -540.00, 8.00, 20.26, 3.67 -541.00, 8.00, 19.69, 3.66 -542.00, 8.00, 19.85, 3.66 -543.00, 8.00, 20.57, 3.65 -544.00, 8.00, 18.51, 3.64 -545.00, 8.00, 20.07, 3.65 -546.00, 8.00, 19.54, 3.67 -547.00, 8.00, 18.92, 3.65 -548.00, 8.00, 18.92, 3.65 -549.00, 8.00, 20.21, 3.68 -550.00, 8.00, 20.09, 3.65 -551.00, 8.00, 19.67, 3.66 -552.00, 8.00, 20.12, 3.65 -553.00, 8.00, 19.15, 3.66 -554.00, 8.00, 20.36, 3.65 -555.00, 8.00, 21.31, 3.65 -556.00, 8.00, 20.54, 3.65 -557.00, 8.00, 22.59, 3.66 -558.00, 8.00, 20.73, 3.66 -559.00, 8.00, 19.32, 3.65 -560.00, 8.00, 20.80, 3.65 -561.00, 8.00, 19.69, 3.67 -562.00, 8.00, 20.79, 3.65 -563.00, 8.00, 18.75, 3.65 -564.00, 8.00, 20.52, 3.65 -565.00, 8.00, 21.39, 3.65 -566.00, 8.00, 20.59, 3.66 -567.00, 8.00, 20.72, 3.66 -568.00, 8.00, 22.19, 3.63 -569.00, 8.00, 18.80, 3.65 -570.00, 8.00, 19.68, 3.66 -571.00, 8.00, 21.11, 3.65 -572.00, 8.00, 18.55, 3.66 -573.00, 8.00, 21.52, 3.65 -574.00, 8.00, 19.95, 3.66 -575.00, 8.00, 21.72, 3.65 -576.00, 8.00, 20.79, 3.64 -577.00, 8.00, 20.69, 3.65 -578.00, 8.00, 19.49, 3.65 -579.00, 8.00, 20.25, 3.65 -580.00, 8.00, 19.25, 3.65 -581.00, 8.00, 20.30, 3.67 -582.00, 8.00, 19.12, 3.65 -583.00, 8.00, 20.84, 3.65 -584.00, 8.00, 19.00, 3.67 -585.00, 8.00, 21.57, 3.64 -586.00, 8.00, 19.80, 3.63 -587.00, 8.00, 21.97, 3.64 -588.00, 8.00, 20.23, 3.65 -589.00, 8.00, 21.06, 3.64 -590.00, 8.00, 20.86, 3.65 -591.00, 8.00, 19.33, 3.63 -592.00, 8.00, 18.17, 3.65 -593.00, 8.00, 21.29, 3.67 -594.00, 8.00, 20.11, 3.66 -595.00, 8.00, 19.67, 3.64 -596.00, 8.00, 20.68, 3.65 -597.00, 8.00, 19.46, 3.65 -598.00, 8.00, 19.21, 3.67 -599.00, 8.00, 18.90, 3.65 -600.00, 8.00, 20.19, 3.65 -601.00, 8.00, 19.84, 3.64 -602.00, 8.00, 21.26, 3.64 -603.00, 8.00, 18.39, 3.63 -604.00, 8.00, 21.37, 3.64 -605.00, 8.00, 20.25, 3.63 -606.00, 8.00, 18.70, 3.67 -607.00, 8.00, 19.71, 3.63 -608.00, 8.00, 20.75, 3.66 -609.00, 8.00, 18.38, 3.66 -610.00, 8.00, 20.05, 3.65 -611.00, 8.00, 19.95, 3.65 -612.00, 8.00, 21.28, 3.64 -613.00, 8.00, 21.25, 3.65 -614.00, 8.00, 19.48, 3.65 -615.00, 8.00, 19.82, 3.64 -616.00, 8.00, 18.94, 3.66 -617.00, 8.00, 20.68, 3.66 -618.00, 8.00, 21.21, 3.65 -619.00, 8.00, 19.48, 3.62 -620.00, 8.00, 18.38, 3.66 -621.00, 8.00, 19.23, 3.66 -622.00, 8.00, 17.79, 3.66 -623.00, 8.00, 19.03, 3.65 -624.00, 8.00, 19.43, 3.63 -625.00, 8.00, 21.34, 3.64 -626.00, 8.00, 19.28, 3.64 -627.00, 8.00, 20.14, 3.62 -628.00, 8.00, 18.42, 3.66 -629.00, 8.00, 20.23, 3.66 -630.00, 8.00, 19.29, 3.65 -631.00, 8.00, 20.29, 3.65 -632.00, 8.00, 21.33, 3.64 -633.00, 8.00, 21.15, 3.65 -634.00, 8.00, 20.48, 3.64 -635.00, 8.00, 19.84, 3.63 -636.00, 8.00, 20.57, 3.65 -637.00, 8.00, 19.75, 3.61 -638.00, 8.00, 19.15, 3.62 -639.00, 8.00, 19.85, 3.66 -640.00, 8.00, 18.83, 3.65 -641.00, 8.00, 20.47, 3.65 -642.00, 8.00, 19.21, 3.64 -643.00, 8.00, 20.41, 3.64 -644.00, 8.00, 19.92, 3.63 -645.00, 8.00, 21.33, 3.64 -646.00, 8.00, 19.59, 3.64 -647.00, 8.00, 22.23, 3.63 -648.00, 8.00, 20.22, 3.63 -649.00, 8.00, 18.66, 3.64 -650.00, 8.00, 20.63, 3.64 -651.00, 8.00, 20.08, 3.64 -652.00, 8.00, 19.94, 3.64 -653.00, 8.00, 20.76, 3.62 -654.00, 8.00, 20.18, 3.63 -655.00, 8.00, 20.51, 3.65 -656.00, 8.00, 20.00, 3.63 -657.00, 8.00, 20.55, 3.62 -658.00, 8.00, 20.33, 3.64 -659.00, 8.00, 19.26, 3.63 -660.00, 8.00, 19.38, 3.64 -661.00, 8.00, 21.43, 3.64 -662.00, 8.00, 19.67, 3.63 -663.00, 8.00, 19.08, 3.64 -664.00, 8.00, 19.84, 3.65 -665.00, 8.00, 19.99, 3.64 -666.00, 8.00, 19.27, 3.64 -667.00, 8.00, 20.20, 3.62 -668.00, 8.00, 19.35, 3.65 -669.00, 8.00, 18.10, 3.63 -670.00, 8.00, 19.32, 3.64 -671.00, 8.00, 18.68, 3.64 -672.00, 8.00, 18.97, 3.63 -673.00, 8.00, 17.26, 3.65 -674.00, 8.00, 19.03, 3.62 -675.00, 8.00, 20.03, 3.62 -676.00, 8.00, 19.04, 3.63 -677.00, 8.00, 19.83, 3.61 -678.00, 8.00, 21.33, 3.63 -679.00, 8.00, 18.69, 3.61 -680.00, 8.00, 19.52, 3.64 -681.00, 8.00, 19.47, 3.64 -682.00, 8.00, 21.71, 3.63 -683.00, 8.00, 20.23, 3.64 -684.00, 8.00, 21.04, 3.64 -685.00, 8.00, 21.21, 3.63 -686.00, 8.00, 18.91, 3.64 -687.00, 8.00, 17.93, 3.62 -688.00, 8.00, 20.72, 3.63 -689.00, 8.00, 22.10, 3.63 -690.00, 8.00, 21.62, 3.63 -691.00, 8.00, 19.58, 3.64 -692.00, 8.00, 19.48, 3.61 -693.00, 8.00, 22.78, 3.65 -694.00, 8.00, 20.94, 3.63 -695.00, 8.00, 18.58, 3.63 -696.00, 8.00, 20.46, 3.62 -697.00, 8.00, 20.83, 3.61 -698.00, 8.00, 20.16, 3.63 -699.00, 8.00, 22.03, 3.63 -700.00, 8.00, 20.26, 3.62 -701.00, 8.00, 20.25, 3.63 -702.00, 8.00, 19.84, 3.62 -703.00, 8.00, 20.93, 3.64 -704.00, 8.00, 20.50, 3.65 -705.00, 8.00, 19.38, 3.63 -706.00, 8.00, 19.18, 3.62 -707.00, 8.00, 19.10, 3.61 -708.00, 8.00, 19.54, 3.62 -709.00, 8.00, 19.48, 3.63 -710.00, 8.00, 20.15, 3.62 -711.00, 8.00, 18.87, 3.63 -712.00, 8.00, 21.29, 3.61 -713.00, 8.00, 20.97, 3.62 -714.00, 8.00, 20.95, 3.64 -715.00, 8.00, 20.63, 3.62 -716.00, 8.00, 19.19, 3.62 -717.00, 8.00, 20.98, 3.61 -718.00, 8.00, 19.54, 3.63 -719.00, 8.00, 19.96, 3.62 -720.00, 8.00, 21.39, 3.63 -721.00, 8.00, 19.54, 3.66 -722.00, 8.00, 20.64, 3.64 -723.00, 8.00, 19.60, 3.62 -724.00, 8.00, 19.50, 3.63 -725.00, 8.00, 19.33, 3.62 -726.00, 8.00, 19.21, 3.62 -727.00, 8.00, 18.13, 3.62 -728.00, 8.00, 20.81, 3.63 -729.00, 8.00, 20.27, 3.62 -730.00, 8.00, 20.59, 3.62 -731.00, 8.00, 20.57, 3.63 -732.00, 8.00, 19.84, 3.63 -733.00, 8.00, 19.52, 3.63 -734.00, 8.00, 19.74, 3.63 -735.00, 8.00, 18.49, 3.62 -736.00, 8.00, 21.14, 3.62 -737.00, 8.00, 19.17, 3.61 -738.00, 8.00, 19.24, 3.63 -739.00, 8.00, 21.08, 3.63 -740.00, 8.00, 21.10, 3.63 -741.00, 8.00, 19.56, 3.63 -742.00, 8.00, 19.31, 3.62 -743.00, 8.00, 19.78, 3.62 -744.00, 8.00, 21.11, 3.62 -745.00, 8.00, 18.55, 3.62 -746.00, 8.00, 21.74, 3.64 -747.00, 8.00, 18.31, 3.63 -748.00, 8.00, 20.53, 3.64 -749.00, 8.00, 20.59, 3.61 -750.00, 8.00, 20.47, 3.60 -751.00, 8.00, 20.05, 3.62 -752.00, 8.00, 22.23, 3.62 -753.00, 8.00, 20.89, 3.62 -754.00, 8.00, 19.73, 3.61 -755.00, 8.00, 19.86, 3.62 -756.00, 8.00, 21.13, 3.61 -757.00, 8.00, 19.26, 3.61 -758.00, 8.00, 19.75, 3.63 -759.00, 8.00, 20.11, 3.61 -760.00, 8.00, 20.90, 3.60 -761.00, 8.00, 19.85, 3.61 -762.00, 8.00, 19.88, 3.61 -763.00, 8.00, 18.82, 3.62 -764.00, 8.00, 21.45, 3.60 -765.00, 8.00, 22.54, 3.62 -766.00, 8.00, 18.86, 3.60 -767.00, 8.00, 20.35, 3.59 -768.00, 8.00, 19.88, 3.61 -769.00, 8.00, 20.58, 3.62 -770.00, 8.00, 19.32, 3.61 -771.00, 8.00, 18.78, 3.63 -772.00, 8.00, 19.15, 3.62 -773.00, 8.00, 20.61, 3.63 -774.00, 8.00, 20.34, 3.61 -775.00, 8.00, 18.85, 3.62 -776.00, 8.00, 21.54, 3.59 -777.00, 8.00, 20.62, 3.62 -778.00, 8.00, 19.22, 3.61 -779.00, 8.00, 20.22, 3.60 -780.00, 8.00, 19.66, 3.61 -781.00, 8.00, 19.88, 3.61 -782.00, 8.00, 20.41, 3.61 -783.00, 8.00, 21.10, 3.60 -784.00, 8.00, 21.11, 3.61 -785.00, 8.00, 19.87, 3.62 -786.00, 8.00, 19.78, 3.63 -787.00, 8.00, 19.20, 3.60 -788.00, 8.00, 20.76, 3.61 -789.00, 8.00, 21.56, 3.62 -790.00, 8.00, 19.52, 3.60 -791.00, 8.00, 17.90, 3.60 -792.00, 8.00, 18.84, 3.60 -793.00, 8.00, 20.22, 3.58 -794.00, 8.00, 18.83, 3.61 -795.00, 8.00, 21.04, 3.60 -796.00, 8.00, 20.10, 3.61 -797.00, 8.00, 21.81, 3.62 -798.00, 8.00, 19.20, 3.60 -799.00, 8.00, 19.81, 3.59 -800.00, 8.00, 19.62, 3.64 -801.00, 8.00, 19.34, 3.59 -802.00, 8.00, 18.06, 3.61 -803.00, 8.00, 21.75, 3.62 -804.00, 8.00, 20.51, 3.61 -805.00, 8.00, 18.50, 3.59 -806.00, 8.00, 20.26, 3.61 -807.00, 8.00, 18.35, 3.61 -808.00, 8.00, 20.24, 3.60 -809.00, 8.00, 20.82, 3.62 -810.00, 8.00, 21.51, 3.61 -811.00, 8.00, 19.99, 3.60 -812.00, 8.00, 19.96, 3.60 -813.00, 8.00, 21.21, 3.59 -814.00, 8.00, 18.11, 3.59 -815.00, 8.00, 19.96, 3.59 -816.00, 8.00, 19.36, 3.60 -817.00, 8.00, 19.89, 3.61 -818.00, 8.00, 20.62, 3.60 -819.00, 8.00, 21.76, 3.61 -820.00, 8.00, 18.75, 3.57 -821.00, 8.00, 19.71, 3.60 -822.00, 8.00, 20.27, 3.59 -823.00, 8.00, 21.47, 3.59 -824.00, 8.00, 19.84, 3.59 -825.00, 8.00, 18.98, 3.62 -826.00, 8.00, 20.56, 3.61 -827.00, 8.00, 20.01, 3.60 -828.00, 8.00, 19.15, 3.60 -829.00, 8.00, 22.11, 3.62 -830.00, 8.00, 20.09, 3.61 -831.00, 8.00, 19.88, 3.61 -832.00, 8.00, 20.32, 3.60 -833.00, 8.00, 21.08, 3.60 -834.00, 8.00, 20.33, 3.61 -835.00, 8.00, 20.99, 3.60 -836.00, 8.00, 21.20, 3.59 -837.00, 8.00, 22.29, 3.59 -838.00, 8.00, 18.98, 3.61 -839.00, 8.00, 20.86, 3.59 -840.00, 8.00, 21.92, 3.60 -841.00, 8.00, 21.64, 3.60 -842.00, 8.00, 21.09, 3.59 -843.00, 8.00, 18.86, 3.60 -844.00, 8.00, 19.84, 3.60 -845.00, 8.00, 17.95, 3.58 -846.00, 8.00, 19.74, 3.59 -847.00, 8.00, 18.45, 3.59 -848.00, 8.00, 21.17, 3.59 -849.00, 8.00, 20.07, 3.60 -850.00, 8.00, 18.87, 3.58 -851.00, 8.00, 18.60, 3.59 -852.00, 8.00, 20.62, 3.60 -853.00, 8.00, 21.09, 3.61 -854.00, 8.00, 18.81, 3.60 -855.00, 8.00, 19.32, 3.60 -856.00, 8.00, 20.99, 3.58 -857.00, 8.00, 20.23, 3.61 -858.00, 8.00, 21.74, 3.59 -859.00, 8.00, 22.12, 3.61 -860.00, 8.00, 19.77, 3.61 -861.00, 8.00, 20.31, 3.58 -862.00, 8.00, 19.78, 3.60 -863.00, 8.00, 19.65, 3.59 -864.00, 8.00, 21.03, 3.59 -865.00, 8.00, 18.63, 3.60 -866.00, 8.00, 21.03, 3.60 -867.00, 8.00, 19.29, 3.60 -868.00, 8.00, 20.22, 3.58 -869.00, 8.00, 20.95, 3.58 -870.00, 8.00, 18.77, 3.59 -871.00, 8.00, 17.99, 3.60 -872.00, 8.00, 19.35, 3.62 -873.00, 8.00, 18.83, 3.59 -874.00, 8.00, 19.76, 3.59 -875.00, 8.00, 19.38, 3.57 -876.00, 8.00, 19.51, 3.57 -877.00, 8.00, 20.13, 3.59 -878.00, 8.00, 18.45, 3.62 -879.00, 8.00, 19.66, 3.59 -880.00, 8.00, 19.88, 3.59 -881.00, 8.00, 20.29, 3.60 -882.00, 8.00, 19.02, 3.60 -883.00, 8.00, 20.89, 3.60 -884.00, 8.00, 19.67, 3.60 -885.00, 8.00, 18.89, 3.60 -886.00, 8.00, 19.86, 3.59 -887.00, 8.00, 17.51, 3.58 -888.00, 8.00, 20.04, 3.59 -889.00, 8.00, 20.16, 3.58 -890.00, 8.00, 19.95, 3.60 -891.00, 8.00, 20.02, 3.59 -892.00, 8.00, 18.77, 3.57 -893.00, 8.00, 20.77, 3.57 -894.00, 8.00, 20.54, 3.60 -895.00, 8.00, 19.62, 3.58 -896.00, 8.00, 19.41, 3.59 -897.00, 8.00, 19.87, 3.60 -898.00, 8.00, 18.88, 3.60 -899.00, 8.00, 21.51, 3.60 -900.00, 8.00, 20.45, 3.58 -901.00, 8.00, 20.79, 3.59 -902.00, 8.00, 18.18, 3.58 -903.00, 8.00, 20.33, 3.59 -904.00, 8.00, 20.83, 3.58 -905.00, 8.00, 19.35, 3.57 -906.00, 8.00, 18.57, 3.58 -907.00, 8.00, 19.73, 3.60 -908.00, 8.00, 20.52, 3.59 -909.00, 8.00, 20.74, 3.60 -910.00, 8.00, 18.95, 3.60 -911.00, 8.00, 22.95, 3.59 -912.00, 8.00, 19.75, 3.58 -913.00, 8.00, 20.05, 3.57 -914.00, 8.00, 21.25, 3.58 -915.00, 8.00, 20.77, 3.59 -916.00, 8.00, 21.38, 3.59 -917.00, 8.00, 19.57, 3.57 -918.00, 8.00, 20.13, 3.59 -919.00, 8.00, 20.28, 3.59 -920.00, 8.00, 22.41, 3.59 -921.00, 8.00, 20.81, 3.58 -922.00, 8.00, 21.62, 3.58 -923.00, 8.00, 19.47, 3.58 -924.00, 8.00, 20.61, 3.58 -925.00, 8.00, 18.15, 3.59 -926.00, 8.00, 19.90, 3.58 -927.00, 8.00, 20.47, 3.57 -928.00, 8.00, 18.92, 3.58 -929.00, 8.00, 21.36, 3.58 -930.00, 8.00, 19.04, 3.57 -931.00, 8.00, 19.28, 3.58 -932.00, 8.00, 20.13, 3.56 -933.00, 8.00, 20.91, 3.58 -934.00, 8.00, 19.24, 3.59 -935.00, 8.00, 19.93, 3.59 -936.00, 8.00, 17.90, 3.58 -937.00, 8.00, 21.39, 3.58 -938.00, 8.00, 18.93, 3.58 -939.00, 8.00, 21.16, 3.58 -940.00, 8.00, 18.96, 3.58 -941.00, 8.00, 19.65, 3.58 -942.00, 8.00, 19.86, 3.60 -943.00, 8.00, 20.88, 3.58 -944.00, 8.00, 19.28, 3.56 -945.00, 8.00, 18.17, 3.57 -946.00, 8.00, 19.68, 3.58 -947.00, 8.00, 21.44, 3.57 -948.00, 8.00, 21.28, 3.58 -949.00, 8.00, 22.38, 3.59 -950.00, 8.00, 19.92, 3.57 -951.00, 8.00, 19.99, 3.58 -952.00, 8.00, 21.27, 3.59 -953.00, 8.00, 22.01, 3.57 -954.00, 8.00, 20.86, 3.58 -955.00, 8.00, 20.25, 3.58 -956.00, 8.00, 19.85, 3.57 -957.00, 8.00, 19.60, 3.57 -958.00, 8.00, 19.32, 3.57 -959.00, 8.00, 19.30, 3.59 -960.00, 8.00, 20.64, 3.56 -961.00, 8.00, 20.34, 3.56 -962.00, 8.00, 19.70, 3.57 -963.00, 8.00, 20.37, 3.56 -964.00, 8.00, 20.99, 3.58 -965.00, 8.00, 20.34, 3.56 -966.00, 8.00, 19.91, 3.57 -967.00, 8.00, 21.22, 3.59 -968.00, 8.00, 19.93, 3.57 -969.00, 8.00, 18.62, 3.58 -970.00, 8.00, 20.13, 3.60 -971.00, 8.00, 19.61, 3.56 -972.00, 8.00, 19.69, 3.58 -973.00, 8.00, 18.08, 3.59 -974.00, 8.00, 19.71, 3.57 -975.00, 8.00, 18.25, 3.57 -976.00, 8.00, 18.98, 3.58 -977.00, 8.00, 23.42, 3.58 -978.00, 8.00, 20.27, 3.58 -979.00, 8.00, 20.20, 3.57 -980.00, 8.00, 19.88, 3.58 -981.00, 8.00, 17.96, 3.56 -982.00, 8.00, 18.79, 3.58 -983.00, 8.00, 19.36, 3.56 -984.00, 8.00, 21.62, 3.56 -985.00, 8.00, 20.75, 3.58 -986.00, 8.00, 18.77, 3.57 -987.00, 8.00, 20.36, 3.58 -988.00, 8.00, 20.31, 3.58 -989.00, 8.00, 20.78, 3.57 -990.00, 8.00, 20.56, 3.58 -991.00, 8.00, 19.34, 3.55 -992.00, 8.00, 19.91, 3.56 -993.00, 8.00, 19.80, 3.57 -994.00, 8.00, 20.50, 3.57 -995.00, 8.00, 21.42, 3.56 -996.00, 8.00, 19.35, 3.58 -997.00, 8.00, 19.06, 3.57 -998.00, 8.00, 19.88, 3.57 -999.00, 8.00, 19.92, 3.56 -1000.00, 8.00, 20.30, 3.56 -1001.00, 8.00, 19.14, 3.56 -1002.00, 8.00, 21.12, 3.56 -1003.00, 8.00, 22.12, 3.56 -1004.00, 8.00, 18.88, 3.56 -1005.00, 8.00, 20.32, 3.54 -1006.00, 8.00, 19.25, 3.58 -1007.00, 8.00, 19.73, 3.56 -1008.00, 8.00, 20.53, 3.57 -1009.00, 8.00, 21.04, 3.57 -1010.00, 8.00, 19.94, 3.55 -1011.00, 8.00, 18.35, 3.55 -1012.00, 8.00, 21.03, 3.57 -1013.00, 8.00, 20.07, 3.57 -1014.00, 8.00, 18.97, 3.57 -1015.00, 8.00, 20.10, 3.56 -1016.00, 8.00, 18.00, 3.58 -1017.00, 8.00, 19.69, 3.55 -1018.00, 8.00, 20.11, 3.56 -1019.00, 8.00, 19.09, 3.55 -1020.00, 8.00, 21.23, 3.57 -1021.00, 8.00, 21.05, 3.56 -1022.00, 8.00, 20.51, 3.56 -1023.00, 8.00, 20.82, 3.57 -1024.00, 8.00, 20.54, 3.56 -1025.00, 8.00, 19.82, 3.53 -1026.00, 8.00, 18.43, 3.55 -1027.00, 8.00, 20.52, 3.57 -1028.00, 8.00, 19.08, 3.54 -1029.00, 8.00, 20.13, 3.56 -1030.00, 8.00, 21.48, 3.53 -1031.00, 8.00, 18.73, 3.57 -1032.00, 8.00, 21.90, 3.57 -1033.00, 8.00, 19.70, 3.57 -1034.00, 8.00, 19.76, 3.55 -1035.00, 8.00, 18.93, 3.58 -1036.00, 8.00, 19.13, 3.56 -1037.00, 8.00, 18.84, 3.56 -1038.00, 8.00, 20.03, 3.56 -1039.00, 8.00, 19.17, 3.57 -1040.00, 8.00, 19.65, 3.54 -1041.00, 8.00, 20.25, 3.55 -1042.00, 8.00, 19.61, 3.56 -1043.00, 8.00, 20.86, 3.57 -1044.00, 8.00, 21.91, 3.54 -1045.00, 8.00, 19.41, 3.54 -1046.00, 8.00, 19.60, 3.55 -1047.00, 8.00, 18.67, 3.56 -1048.00, 8.00, 20.09, 3.55 -1049.00, 8.00, 19.17, 3.55 -1050.00, 8.00, 18.49, 3.55 -1051.00, 8.00, 20.13, 3.54 -1052.00, 8.00, 21.29, 3.55 -1053.00, 8.00, 21.03, 3.56 -1054.00, 8.00, 19.71, 3.54 -1055.00, 8.00, 21.11, 3.56 -1056.00, 8.00, 18.75, 3.55 -1057.00, 8.00, 17.43, 3.55 -1058.00, 8.00, 18.92, 3.58 -1059.00, 8.00, 19.34, 3.56 -1060.00, 8.00, 20.81, 3.55 -1061.00, 8.00, 19.41, 3.55 -1062.00, 8.00, 20.70, 3.55 -1063.00, 8.00, 18.75, 3.56 -1064.00, 8.00, 21.03, 3.54 -1065.00, 8.00, 18.74, 3.56 -1066.00, 8.00, 19.70, 3.54 -1067.00, 8.00, 19.89, 3.56 -1068.00, 8.00, 20.02, 3.56 -1069.00, 8.00, 20.39, 3.54 -1070.00, 8.00, 19.41, 3.56 -1071.00, 8.00, 20.64, 3.56 -1072.00, 8.00, 18.70, 3.55 -1073.00, 8.00, 19.27, 3.55 -1074.00, 8.00, 18.71, 3.54 -1075.00, 8.00, 21.38, 3.55 -1076.00, 8.00, 20.94, 3.57 -1077.00, 8.00, 19.49, 3.55 -1078.00, 8.00, 21.87, 3.53 -1079.00, 8.00, 20.47, 3.54 -1080.00, 8.00, 20.85, 3.54 -1081.00, 8.00, 20.31, 3.54 -1082.00, 8.00, 20.44, 3.55 -1083.00, 8.00, 20.05, 3.57 -1084.00, 8.00, 21.40, 3.55 -1085.00, 8.00, 20.52, 3.54 -1086.00, 8.00, 19.77, 3.54 -1087.00, 8.00, 20.46, 3.55 -1088.00, 8.00, 20.03, 3.55 -1089.00, 8.00, 19.86, 3.55 -1090.00, 8.00, 21.66, 3.57 -1091.00, 8.00, 19.21, 3.55 -1092.00, 8.00, 22.17, 3.54 -1093.00, 8.00, 21.06, 3.55 -1094.00, 8.00, 20.16, 3.56 -1095.00, 8.00, 18.56, 3.54 -1096.00, 8.00, 20.43, 3.55 -1097.00, 8.00, 20.83, 3.53 -1098.00, 8.00, 18.79, 3.53 -1099.00, 8.00, 18.26, 3.55 -1100.00, 8.00, 21.28, 3.52 -1101.00, 8.00, 18.69, 3.55 -1102.00, 8.00, 20.09, 3.56 -1103.00, 8.00, 21.93, 3.54 -1104.00, 8.00, 19.41, 3.54 -1105.00, 8.00, 20.54, 3.54 -1106.00, 8.00, 19.97, 3.54 -1107.00, 8.00, 19.03, 3.54 -1108.00, 8.00, 20.31, 3.54 -1109.00, 8.00, 19.18, 3.55 -1110.00, 8.00, 18.75, 3.54 -1111.00, 8.00, 18.36, 3.54 -1112.00, 8.00, 22.20, 3.53 -1113.00, 8.00, 19.89, 3.55 -1114.00, 8.00, 19.80, 3.54 -1115.00, 8.00, 21.37, 3.54 -1116.00, 8.00, 22.42, 3.56 -1117.00, 8.00, 19.01, 3.55 -1118.00, 8.00, 21.54, 3.54 -1119.00, 8.00, 19.90, 3.53 -1120.00, 8.00, 18.74, 3.53 -1121.00, 8.00, 20.48, 3.53 -1122.00, 8.00, 19.38, 3.54 -1123.00, 8.00, 19.33, 3.54 -1124.00, 8.00, 21.68, 3.54 -1125.00, 8.00, 20.99, 3.52 -1126.00, 8.00, 18.51, 3.54 -1127.00, 8.00, 20.66, 3.53 -1128.00, 8.00, 21.01, 3.53 -1129.00, 8.00, 19.80, 3.54 -1130.00, 8.00, 19.94, 3.53 -1131.00, 8.00, 21.67, 3.56 -1132.00, 8.00, 20.44, 3.52 -1133.00, 8.00, 20.95, 3.54 -1134.00, 8.00, 19.75, 3.52 -1135.00, 8.00, 19.19, 3.53 -1136.00, 8.00, 19.53, 3.53 -1137.00, 8.00, 19.66, 3.53 -1138.00, 8.00, 17.59, 3.52 -1139.00, 8.00, 18.50, 3.55 -1140.00, 8.00, 20.21, 3.54 -1141.00, 8.00, 21.32, 3.54 -1142.00, 8.00, 20.17, 3.54 -1143.00, 8.00, 19.28, 3.54 -1144.00, 8.00, 19.88, 3.53 -1145.00, 8.00, 18.40, 3.55 -1146.00, 8.00, 20.60, 3.54 -1147.00, 8.00, 19.90, 3.53 -1148.00, 8.00, 20.88, 3.54 -1149.00, 8.00, 18.87, 3.54 -1150.00, 8.00, 21.98, 3.54 -1151.00, 8.00, 19.65, 3.53 -1152.00, 8.00, 20.97, 3.55 -1153.00, 8.00, 19.32, 3.54 -1154.00, 8.00, 19.51, 3.53 -1155.00, 8.00, 20.32, 3.52 -1156.00, 8.00, 20.00, 3.53 -1157.00, 8.00, 17.26, 3.53 -1158.00, 8.00, 20.83, 3.53 -1159.00, 8.00, 20.13, 3.55 -1160.00, 8.00, 20.49, 3.54 -1161.00, 8.00, 20.77, 3.53 -1162.00, 8.00, 18.89, 3.52 -1163.00, 8.00, 21.48, 3.53 -1164.00, 8.00, 19.53, 3.54 -1165.00, 8.00, 20.10, 3.53 -1166.00, 8.00, 21.66, 3.51 -1167.00, 8.00, 19.44, 3.52 -1168.00, 8.00, 20.47, 3.55 -1169.00, 8.00, 21.89, 3.53 -1170.00, 8.00, 19.52, 3.54 -1171.00, 8.00, 18.41, 3.53 -1172.00, 8.00, 19.86, 3.53 -1173.00, 8.00, 18.51, 3.52 -1174.00, 8.00, 20.95, 3.52 -1175.00, 8.00, 19.42, 3.52 -1176.00, 8.00, 19.00, 3.53 -1177.00, 8.00, 19.76, 3.53 -1178.00, 8.00, 20.76, 3.55 -1179.00, 8.00, 18.27, 3.52 -1180.00, 8.00, 22.83, 3.55 -1181.00, 8.00, 19.31, 3.53 -1182.00, 8.00, 19.05, 3.54 -1183.00, 8.00, 20.44, 3.53 -1184.00, 8.00, 20.23, 3.53 -1185.00, 8.00, 20.29, 3.53 -1186.00, 8.00, 21.67, 3.51 -1187.00, 8.00, 19.05, 3.54 -1188.00, 8.00, 19.90, 3.53 -1189.00, 8.00, 18.97, 3.55 -1190.00, 8.00, 21.29, 3.53 -1191.00, 8.00, 20.15, 3.50 -1192.00, 8.00, 20.91, 3.53 -1193.00, 8.00, 19.46, 3.53 -1194.00, 8.00, 20.85, 3.50 -1195.00, 8.00, 20.09, 3.53 -1196.00, 8.00, 21.01, 3.53 -1197.00, 8.00, 19.00, 3.52 -1198.00, 8.00, 20.26, 3.52 -1199.00, 8.00, 20.50, 3.53 -1200.00, 8.00, 21.96, 3.53 -1201.00, 8.00, 20.29, 3.51 -1202.00, 8.00, 22.19, 3.53 -1203.00, 8.00, 22.66, 3.55 -1204.00, 8.00, 18.76, 3.54 -1205.00, 8.00, 21.40, 3.51 -1206.00, 8.00, 20.04, 3.53 -1207.00, 8.00, 19.02, 3.53 -1208.00, 8.00, 18.90, 3.51 -1209.00, 8.00, 20.15, 3.53 -1210.00, 8.00, 20.36, 3.50 -1211.00, 8.00, 19.34, 3.53 -1212.00, 8.00, 20.40, 3.51 -1213.00, 8.00, 21.52, 3.51 -1214.00, 8.00, 19.56, 3.52 -1215.00, 8.00, 23.30, 3.52 -1216.00, 8.00, 20.32, 3.51 -1217.00, 8.00, 20.74, 3.51 -1218.00, 8.00, 20.88, 3.52 -1219.00, 8.00, 19.05, 3.51 -1220.00, 8.00, 21.28, 3.52 -1221.00, 8.00, 21.36, 3.54 -1222.00, 8.00, 20.12, 3.52 -1223.00, 8.00, 20.59, 3.52 -1224.00, 8.00, 19.47, 3.52 -1225.00, 8.00, 17.69, 3.50 -1226.00, 8.00, 20.71, 3.52 -1227.00, 8.00, 21.83, 3.52 -1228.00, 8.00, 20.16, 3.53 -1229.00, 8.00, 19.58, 3.52 -1230.00, 8.00, 20.65, 3.50 -1231.00, 8.00, 21.33, 3.52 -1232.00, 8.00, 19.57, 3.52 -1233.00, 8.00, 21.14, 3.52 -1234.00, 8.00, 20.56, 3.52 -1235.00, 8.00, 18.80, 3.52 -1236.00, 8.00, 19.06, 3.53 -1237.00, 8.00, 20.14, 3.52 -1238.00, 8.00, 20.75, 3.51 -1239.00, 8.00, 20.72, 3.52 -1240.00, 8.00, 19.08, 3.50 -1241.00, 8.00, 20.04, 3.50 -1242.00, 8.00, 19.90, 3.51 -1243.00, 8.00, 20.76, 3.51 -1244.00, 8.00, 19.85, 3.51 -1245.00, 8.00, 20.85, 3.53 -1246.00, 8.00, 20.73, 3.52 -1247.00, 8.00, 20.84, 3.51 -1248.00, 8.00, 20.55, 3.52 -1249.00, 8.00, 20.84, 3.52 -1250.00, 8.00, 20.91, 3.52 -1251.00, 8.00, 19.57, 3.50 -1252.00, 8.00, 20.75, 3.51 -1253.00, 8.00, 20.70, 3.52 -1254.00, 8.00, 20.25, 3.52 -1255.00, 8.00, 18.85, 3.52 -1256.00, 8.00, 19.18, 3.51 -1257.00, 8.00, 21.58, 3.51 -1258.00, 8.00, 18.43, 3.53 -1259.00, 8.00, 20.18, 3.51 -1260.00, 8.00, 20.75, 3.51 -1261.00, 8.00, 21.33, 3.51 -1262.00, 8.00, 20.68, 3.50 -1263.00, 8.00, 20.12, 3.50 -1264.00, 8.00, 19.60, 3.51 -1265.00, 8.00, 18.71, 3.50 -1266.00, 8.00, 21.56, 3.52 -1267.00, 8.00, 21.06, 3.51 -1268.00, 8.00, 19.52, 3.51 -1269.00, 8.00, 21.99, 3.49 -1270.00, 8.00, 19.77, 3.50 -1271.00, 8.00, 20.25, 3.50 -1272.00, 8.00, 21.55, 3.50 -1273.00, 8.00, 20.71, 3.51 -1274.00, 8.00, 19.60, 3.51 -1275.00, 8.00, 19.54, 3.52 -1276.00, 8.00, 20.53, 3.51 -1277.00, 8.00, 20.47, 3.52 -1278.00, 8.00, 19.38, 3.49 -1279.00, 8.00, 19.55, 3.50 -1280.00, 8.00, 20.41, 3.53 -1281.00, 8.00, 19.11, 3.51 -1282.00, 8.00, 19.73, 3.50 -1283.00, 8.00, 20.99, 3.52 -1284.00, 8.00, 21.27, 3.50 -1285.00, 8.00, 20.99, 3.49 -1286.00, 8.00, 18.69, 3.52 -1287.00, 8.00, 20.42, 3.51 -1288.00, 8.00, 20.26, 3.50 -1289.00, 8.00, 19.15, 3.50 -1290.00, 8.00, 21.68, 3.52 -1291.00, 8.00, 19.92, 3.52 -1292.00, 8.00, 19.39, 3.49 -1293.00, 8.00, 19.07, 3.51 -1294.00, 8.00, 19.42, 3.50 -1295.00, 8.00, 20.45, 3.50 -1296.00, 8.00, 21.59, 3.50 -1297.00, 8.00, 21.62, 3.52 -1298.00, 8.00, 20.65, 3.52 -1299.00, 8.00, 22.22, 3.49 -1300.00, 8.00, 20.65, 3.49 -1301.00, 8.00, 18.44, 3.52 -1302.00, 8.00, 20.29, 3.50 -1303.00, 8.00, 21.94, 3.51 -1304.00, 8.00, 20.73, 3.50 -1305.00, 8.00, 21.35, 3.50 -1306.00, 8.00, 19.80, 3.49 -1307.00, 8.00, 20.38, 3.52 -1308.00, 8.00, 18.85, 3.51 -1309.00, 8.00, 19.94, 3.49 -1310.00, 8.00, 21.14, 3.50 -1311.00, 8.00, 20.10, 3.51 -1312.00, 8.00, 19.84, 3.49 -1313.00, 8.00, 19.10, 3.51 -1314.00, 8.00, 20.07, 3.51 -1315.00, 8.00, 20.34, 3.52 -1316.00, 8.00, 18.55, 3.50 -1317.00, 8.00, 18.63, 3.51 -1318.00, 8.00, 20.44, 3.49 -1319.00, 8.00, 20.73, 3.50 -1320.00, 8.00, 18.71, 3.50 -1321.00, 8.00, 20.10, 3.48 -1322.00, 8.00, 17.98, 3.49 -1323.00, 8.00, 20.87, 3.49 -1324.00, 8.00, 21.11, 3.49 -1325.00, 8.00, 21.07, 3.49 -1326.00, 8.00, 21.64, 3.51 -1327.00, 8.00, 17.93, 3.50 -1328.00, 8.00, 20.58, 3.49 -1329.00, 8.00, 20.07, 3.51 -1330.00, 8.00, 19.61, 3.51 -1331.00, 8.00, 19.85, 3.51 -1332.00, 8.00, 17.80, 3.50 -1333.00, 8.00, 20.44, 3.49 -1334.00, 8.00, 20.00, 3.51 -1335.00, 8.00, 19.82, 3.49 -1336.00, 8.00, 21.01, 3.49 -1337.00, 8.00, 20.06, 3.50 -1338.00, 8.00, 20.47, 3.50 -1339.00, 8.00, 20.32, 3.49 -1340.00, 8.00, 19.85, 3.49 -1341.00, 8.00, 21.80, 3.50 -1342.00, 8.00, 19.77, 3.49 -1343.00, 8.00, 20.03, 3.52 -1344.00, 8.00, 19.81, 3.50 -1345.00, 8.00, 19.61, 3.50 -1346.00, 8.00, 19.62, 3.48 -1347.00, 8.00, 20.09, 3.49 -1348.00, 8.00, 20.59, 3.51 -1349.00, 8.00, 20.07, 3.48 -1350.00, 8.00, 18.09, 3.50 -1351.00, 8.00, 20.45, 3.50 -1352.00, 8.00, 20.59, 3.48 -1353.00, 8.00, 19.77, 3.49 -1354.00, 8.00, 19.86, 3.47 -1355.00, 8.00, 21.41, 3.48 -1356.00, 8.00, 18.99, 3.48 -1357.00, 8.00, 19.80, 3.49 -1358.00, 8.00, 20.85, 3.47 -1359.00, 8.00, 21.23, 3.48 -1360.00, 8.00, 20.04, 3.48 -1361.00, 8.00, 19.08, 3.50 -1362.00, 8.00, 18.35, 3.48 -1363.00, 8.00, 22.33, 3.49 -1364.00, 8.00, 17.93, 3.50 -1365.00, 8.00, 19.61, 3.48 -1366.00, 8.00, 19.44, 3.48 -1367.00, 8.00, 21.26, 3.50 -1368.00, 8.00, 19.85, 3.50 -1369.00, 8.00, 20.05, 3.48 -1370.00, 8.00, 21.09, 3.48 -1371.00, 8.00, 19.51, 3.49 -1372.00, 8.00, 20.87, 3.48 -1373.00, 8.00, 17.88, 3.49 -1374.00, 8.00, 19.64, 3.50 -1375.00, 8.00, 21.12, 3.48 -1376.00, 8.00, 19.82, 3.50 -1377.00, 8.00, 18.72, 3.48 -1378.00, 8.00, 20.76, 3.50 -1379.00, 8.00, 20.25, 3.49 -1380.00, 8.00, 20.18, 3.49 -1381.00, 8.00, 20.13, 3.46 -1382.00, 8.00, 20.90, 3.49 -1383.00, 8.00, 21.10, 3.50 -1384.00, 8.00, 20.40, 3.47 -1385.00, 8.00, 17.94, 3.47 -1386.00, 8.00, 21.05, 3.49 -1387.00, 8.00, 19.49, 3.49 -1388.00, 8.00, 18.23, 3.48 -1389.00, 8.00, 19.72, 3.48 -1390.00, 8.00, 18.10, 3.49 -1391.00, 8.00, 19.89, 3.49 -1392.00, 8.00, 19.72, 3.49 -1393.00, 8.00, 20.07, 3.48 -1394.00, 8.00, 19.94, 3.50 -1395.00, 8.00, 20.76, 3.50 -1396.00, 8.00, 21.57, 3.49 -1397.00, 8.00, 21.36, 3.49 -1398.00, 8.00, 17.80, 3.47 -1399.00, 8.00, 20.51, 3.48 -1400.00, 8.00, 20.74, 3.49 -1401.00, 8.00, 19.92, 3.47 -1402.00, 8.00, 21.92, 3.49 -1403.00, 8.00, 19.84, 3.50 -1404.00, 8.00, 19.66, 3.48 -1405.00, 8.00, 18.19, 3.47 -1406.00, 8.00, 19.09, 3.48 -1407.00, 8.00, 19.04, 3.48 -1408.00, 8.00, 18.40, 3.47 -1409.00, 8.00, 19.22, 3.46 -1410.00, 8.00, 20.75, 3.47 -1411.00, 8.00, 20.12, 3.49 -1412.00, 8.00, 18.61, 3.48 -1413.00, 8.00, 20.23, 3.49 -1414.00, 8.00, 18.67, 3.48 -1415.00, 8.00, 20.27, 3.49 -1416.00, 8.00, 20.45, 3.48 -1417.00, 8.00, 20.72, 3.48 -1418.00, 8.00, 20.43, 3.47 -1419.00, 8.00, 19.56, 3.49 -1420.00, 8.00, 21.29, 3.48 -1421.00, 8.00, 19.67, 3.48 -1422.00, 8.00, 20.45, 3.48 -1423.00, 8.00, 20.36, 3.47 -1424.00, 8.00, 19.80, 3.48 -1425.00, 8.00, 21.23, 3.49 -1426.00, 8.00, 19.64, 3.47 -1427.00, 8.00, 20.55, 3.47 -1428.00, 8.00, 19.73, 3.49 -1429.00, 8.00, 20.05, 3.48 -1430.00, 8.00, 20.47, 3.49 -1431.00, 8.00, 20.89, 3.48 -1432.00, 8.00, 21.76, 3.47 -1433.00, 8.00, 19.55, 3.48 -1434.00, 8.00, 20.33, 3.47 -1435.00, 8.00, 19.35, 3.48 -1436.00, 8.00, 20.25, 3.46 -1437.00, 8.00, 19.03, 3.49 -1438.00, 8.00, 19.12, 3.49 -1439.00, 8.00, 20.60, 3.48 -1440.00, 8.00, 19.97, 3.49 -1441.00, 8.00, 18.76, 3.48 -1442.00, 8.00, 20.40, 3.49 -1443.00, 8.00, 20.54, 3.46 -1444.00, 8.00, 19.91, 3.47 -1445.00, 8.00, 18.29, 3.47 -1446.00, 8.00, 20.83, 3.47 -1447.00, 8.00, 20.14, 3.50 -1448.00, 8.00, 19.34, 3.46 -1449.00, 8.00, 20.58, 3.45 -1450.00, 8.00, 20.60, 3.49 -1451.00, 8.00, 18.84, 3.46 -1452.00, 8.00, 20.58, 3.47 -1453.00, 8.00, 20.89, 3.47 -1454.00, 8.00, 18.27, 3.46 -1455.00, 8.00, 19.84, 3.47 -1456.00, 8.00, 19.29, 3.49 -1457.00, 8.00, 21.60, 3.47 -1458.00, 8.00, 18.86, 3.46 -1459.00, 8.00, 19.94, 3.49 -1460.00, 8.00, 20.54, 3.49 -1461.00, 8.00, 18.67, 3.48 -1462.00, 8.00, 19.93, 3.48 -1463.00, 8.00, 20.76, 3.49 -1464.00, 8.00, 19.49, 3.49 -1465.00, 8.00, 20.31, 3.47 -1466.00, 8.00, 21.56, 3.47 -1467.00, 8.00, 21.29, 3.46 -1468.00, 8.00, 20.73, 3.48 -1469.00, 8.00, 19.17, 3.46 -1470.00, 8.00, 20.38, 3.49 -1471.00, 8.00, 20.78, 3.48 -1472.00, 8.00, 20.71, 3.48 -1473.00, 8.00, 20.23, 3.46 -1474.00, 8.00, 20.08, 3.45 -1475.00, 8.00, 20.03, 3.48 -1476.00, 8.00, 22.09, 3.46 -1477.00, 8.00, 20.37, 3.46 -1478.00, 8.00, 18.73, 3.49 -1479.00, 8.00, 20.66, 3.48 -1480.00, 8.00, 19.25, 3.47 -1481.00, 8.00, 19.76, 3.48 -1482.00, 8.00, 20.59, 3.47 -1483.00, 8.00, 20.30, 3.47 -1484.00, 8.00, 20.28, 3.46 -1485.00, 8.00, 20.60, 3.47 -1486.00, 8.00, 20.39, 3.47 -1487.00, 8.00, 18.54, 3.47 -1488.00, 8.00, 22.58, 3.46 -1489.00, 8.00, 20.81, 3.46 -1490.00, 8.00, 19.40, 3.47 -1491.00, 8.00, 18.23, 3.46 -1492.00, 8.00, 20.01, 3.46 -1493.00, 8.00, 20.80, 3.47 -1494.00, 8.00, 20.31, 3.46 -1495.00, 8.00, 21.73, 3.48 -1496.00, 8.00, 19.05, 3.46 -1497.00, 8.00, 18.74, 3.48 -1498.00, 8.00, 20.25, 3.46 -1499.00, 8.00, 19.63, 3.47 -1500.00, 8.00, 20.14, 3.45 -1501.00, 8.00, 19.76, 3.48 -1502.00, 8.00, 20.58, 3.46 -1503.00, 8.00, 18.88, 3.46 -1504.00, 8.00, 19.83, 3.47 -1505.00, 8.00, 19.68, 3.46 -1506.00, 8.00, 17.28, 3.46 -1507.00, 8.00, 20.26, 3.46 -1508.00, 8.00, 19.54, 3.46 -1509.00, 8.00, 20.85, 3.46 -1510.00, 8.00, 19.14, 3.46 -1511.00, 8.00, 20.77, 3.48 -1512.00, 8.00, 19.66, 3.46 -1513.00, 8.00, 21.72, 3.47 -1514.00, 8.00, 21.81, 3.48 -1515.00, 8.00, 20.48, 3.48 -1516.00, 8.00, 20.49, 3.48 -1517.00, 8.00, 20.75, 3.47 -1518.00, 8.00, 19.96, 3.46 -1519.00, 8.00, 19.96, 3.47 -1520.00, 8.00, 20.36, 3.46 -1521.00, 8.00, 17.77, 3.49 -1522.00, 8.00, 19.51, 3.48 -1523.00, 8.00, 20.48, 3.47 -1524.00, 8.00, 21.23, 3.47 -1525.00, 8.00, 19.88, 3.45 -1526.00, 8.00, 19.74, 3.45 -1527.00, 8.00, 20.29, 3.48 -1528.00, 8.00, 21.02, 3.47 -1529.00, 8.00, 19.38, 3.46 -1530.00, 8.00, 18.72, 3.46 -1531.00, 8.00, 20.54, 3.44 -1532.00, 8.00, 18.80, 3.46 -1533.00, 8.00, 18.64, 3.47 -1534.00, 8.00, 20.48, 3.45 -1535.00, 8.00, 21.72, 3.44 -1536.00, 8.00, 17.62, 3.46 -1537.00, 8.00, 20.25, 3.46 -1538.00, 8.00, 19.75, 3.47 -1539.00, 8.00, 19.47, 3.47 -1540.00, 8.00, 21.21, 3.48 -1541.00, 8.00, 21.84, 3.46 -1542.00, 8.00, 20.85, 3.48 -1543.00, 8.00, 20.17, 3.46 -1544.00, 8.00, 21.08, 3.46 -1545.00, 8.00, 20.97, 3.50 -1546.00, 8.00, 18.55, 3.47 -1547.00, 8.00, 19.35, 3.46 -1548.00, 8.00, 22.29, 3.45 -1549.00, 8.00, 20.70, 3.48 -1550.00, 8.00, 18.15, 3.46 -1551.00, 8.00, 19.16, 3.47 -1552.00, 8.00, 21.05, 3.47 -1553.00, 8.00, 19.29, 3.45 -1554.00, 8.00, 19.35, 3.47 -1555.00, 8.00, 20.57, 3.48 -1556.00, 8.00, 19.82, 3.45 -1557.00, 8.00, 19.44, 3.45 -1558.00, 8.00, 20.06, 3.46 -1559.00, 8.00, 20.69, 3.46 -1560.00, 8.00, 20.69, 3.46 -1561.00, 8.00, 19.96, 3.45 -1562.00, 8.00, 20.61, 3.48 -1563.00, 8.00, 19.47, 3.46 -1564.00, 8.00, 19.35, 3.46 -1565.00, 8.00, 19.84, 3.45 -1566.00, 8.00, 19.15, 3.47 -1567.00, 8.00, 20.44, 3.48 -1568.00, 8.00, 19.55, 3.46 -1569.00, 8.00, 22.04, 3.46 -1570.00, 8.00, 19.85, 3.46 -1571.00, 8.00, 22.03, 3.47 -1572.00, 8.00, 20.92, 3.46 -1573.00, 8.00, 20.81, 3.45 -1574.00, 8.00, 21.07, 3.45 -1575.00, 8.00, 22.35, 3.47 -1576.00, 8.00, 19.67, 3.47 -1577.00, 8.00, 17.82, 3.44 -1578.00, 8.00, 19.19, 3.46 -1579.00, 8.00, 19.33, 3.48 -1580.00, 8.00, 20.19, 3.45 -1581.00, 8.00, 20.70, 3.45 -1582.00, 8.00, 19.61, 3.46 -1583.00, 8.00, 19.54, 3.46 -1584.00, 8.00, 20.35, 3.45 -1585.00, 8.00, 20.62, 3.46 -1586.00, 8.00, 21.20, 3.46 -1587.00, 8.00, 18.34, 3.46 -1588.00, 8.00, 19.39, 3.46 -1589.00, 8.00, 19.19, 3.45 -1590.00, 8.00, 18.48, 3.48 -1591.00, 8.00, 20.81, 3.46 -1592.00, 8.00, 20.10, 3.46 -1593.00, 8.00, 20.05, 3.45 -1594.00, 8.00, 19.98, 3.45 -1595.00, 8.00, 18.46, 3.46 -1596.00, 8.00, 18.35, 3.46 -1597.00, 8.00, 20.40, 3.46 -1598.00, 8.00, 19.52, 3.44 -1599.00, 8.00, 20.03, 3.46 -1600.00, 8.00, 20.39, 3.47 -1601.00, 8.00, 20.86, 3.47 -1602.00, 8.00, 20.12, 3.47 -1603.00, 8.00, 21.39, 3.45 -1604.00, 8.00, 21.34, 3.46 -1605.00, 8.00, 20.53, 3.46 -1606.00, 8.00, 20.59, 3.45 -1607.00, 8.00, 20.22, 3.44 -1608.00, 8.00, 18.92, 3.47 -1609.00, 8.00, 18.61, 3.45 -1610.00, 8.00, 16.83, 3.46 -1611.00, 8.00, 20.02, 3.46 -1612.00, 8.00, 20.24, 3.46 -1613.00, 8.00, 19.78, 3.47 -1614.00, 8.00, 17.98, 3.47 -1615.00, 8.00, 20.32, 3.47 -1616.00, 8.00, 19.10, 3.46 -1617.00, 8.00, 18.25, 3.45 -1618.00, 8.00, 18.84, 3.45 -1619.00, 8.00, 20.80, 3.46 -1620.00, 8.00, 20.01, 3.44 -1621.00, 8.00, 20.86, 3.45 -1622.00, 8.00, 18.92, 3.45 -1623.00, 8.00, 18.81, 3.45 -1624.00, 8.00, 20.03, 3.47 -1625.00, 8.00, 19.21, 3.44 -1626.00, 8.00, 17.85, 3.43 -1627.00, 8.00, 20.19, 3.44 -1628.00, 8.00, 20.92, 3.45 -1629.00, 8.00, 20.29, 3.43 -1630.00, 8.00, 20.45, 3.47 -1631.00, 8.00, 19.18, 3.44 -1632.00, 8.00, 20.72, 3.45 -1633.00, 8.00, 19.12, 3.45 -1634.00, 8.00, 19.06, 3.46 -1635.00, 8.00, 18.99, 3.46 -1636.00, 8.00, 19.19, 3.45 -1637.00, 8.00, 20.76, 3.46 -1638.00, 8.00, 18.88, 3.46 -1639.00, 8.00, 21.45, 3.45 -1640.00, 8.00, 20.60, 3.44 -1641.00, 8.00, 21.98, 3.46 -1642.00, 8.00, 21.16, 3.47 -1643.00, 8.00, 19.67, 3.45 -1644.00, 8.00, 20.47, 3.45 -1645.00, 8.00, 20.77, 3.44 -1646.00, 8.00, 18.46, 3.43 -1647.00, 8.00, 20.53, 3.46 -1648.00, 8.00, 22.13, 3.47 -1649.00, 8.00, 19.28, 3.45 -1650.00, 8.00, 19.43, 3.45 -1651.00, 8.00, 19.28, 3.44 -1652.00, 8.00, 20.10, 3.42 -1653.00, 8.00, 20.16, 3.43 -1654.00, 8.00, 20.17, 3.46 -1655.00, 8.00, 20.19, 3.46 -1656.00, 8.00, 19.56, 3.45 -1657.00, 8.00, 21.37, 3.45 -1658.00, 8.00, 19.71, 3.44 -1659.00, 8.00, 19.94, 3.45 -1660.00, 8.00, 21.48, 3.46 -1661.00, 8.00, 19.93, 3.44 -1662.00, 8.00, 20.64, 3.46 -1663.00, 8.00, 20.07, 3.46 -1664.00, 8.00, 18.70, 3.46 -1665.00, 8.00, 19.06, 3.47 -1666.00, 8.00, 21.68, 3.45 -1667.00, 8.00, 19.19, 3.45 -1668.00, 8.00, 20.96, 3.45 -1669.00, 8.00, 19.21, 3.46 -1670.00, 8.00, 20.59, 3.45 -1671.00, 8.00, 18.01, 3.43 -1672.00, 8.00, 19.54, 3.45 -1673.00, 8.00, 19.42, 3.44 -1674.00, 8.00, 18.80, 3.45 -1675.00, 8.00, 21.10, 3.45 -1676.00, 8.00, 19.95, 3.44 -1677.00, 8.00, 19.08, 3.43 -1678.00, 8.00, 20.58, 3.45 -1679.00, 8.00, 19.87, 3.46 -1680.00, 8.00, 19.40, 3.44 -1681.00, 8.00, 20.67, 3.45 -1682.00, 8.00, 20.04, 3.45 -1683.00, 8.00, 19.68, 3.44 -1684.00, 8.00, 20.13, 3.43 -1685.00, 8.00, 21.58, 3.46 -1686.00, 8.00, 18.83, 3.44 -1687.00, 8.00, 20.44, 3.46 -1688.00, 8.00, 20.08, 3.44 -1689.00, 8.00, 20.22, 3.45 -1690.00, 8.00, 20.27, 3.46 -1691.00, 8.00, 19.98, 3.43 -1692.00, 8.00, 20.06, 3.44 -1693.00, 8.00, 21.45, 3.43 -1694.00, 8.00, 19.67, 3.45 -1695.00, 8.00, 17.45, 3.45 -1696.00, 8.00, 20.25, 3.44 -1697.00, 8.00, 20.26, 3.45 -1698.00, 8.00, 22.08, 3.44 -1699.00, 8.00, 20.52, 3.44 -1700.00, 8.00, 21.18, 3.44 -1701.00, 8.00, 20.49, 3.44 -1702.00, 8.00, 21.03, 3.45 -1703.00, 8.00, 21.28, 3.44 -1704.00, 8.00, 18.69, 3.45 -1705.00, 8.00, 20.42, 3.44 -1706.00, 8.00, 16.64, 3.45 -1707.00, 8.00, 20.79, 3.46 -1708.00, 8.00, 20.43, 3.45 -1709.00, 8.00, 20.88, 3.43 -1710.00, 8.00, 18.24, 3.44 -1711.00, 8.00, 18.39, 3.45 -1712.00, 8.00, 20.70, 3.43 -1713.00, 8.00, 20.69, 3.47 -1714.00, 8.00, 20.47, 3.44 -1715.00, 8.00, 20.79, 3.46 -1716.00, 8.00, 20.69, 3.48 -1717.00, 8.00, 21.84, 3.43 -1718.00, 8.00, 20.81, 3.47 -1719.00, 8.00, 19.02, 3.45 -1720.00, 8.00, 20.96, 3.46 -1721.00, 8.00, 21.41, 3.47 -1722.00, 8.00, 19.56, 3.45 -1723.00, 8.00, 19.57, 3.45 -1724.00, 8.00, 21.99, 3.46 -1725.00, 8.00, 20.81, 3.44 -1726.00, 8.00, 19.52, 3.45 -1727.00, 8.00, 21.21, 3.45 -1728.00, 8.00, 20.77, 3.44 -1729.00, 8.00, 19.03, 3.46 -1730.00, 8.00, 18.96, 3.45 -1731.00, 8.00, 20.12, 3.46 -1732.00, 8.00, 19.69, 3.46 -1733.00, 8.00, 18.06, 3.44 -1734.00, 8.00, 19.54, 3.44 -1735.00, 8.00, 18.94, 3.45 -1736.00, 8.00, 20.79, 3.46 -1737.00, 8.00, 18.06, 3.45 -1738.00, 8.00, 21.16, 3.46 -1739.00, 8.00, 19.95, 3.45 -1740.00, 8.00, 21.04, 3.46 -1741.00, 8.00, 17.79, 3.46 -1742.00, 8.00, 21.00, 3.45 -1743.00, 8.00, 19.27, 3.48 -1744.00, 8.00, 19.73, 3.46 -1745.00, 8.00, 22.34, 3.45 -1746.00, 8.00, 22.01, 3.47 -1747.00, 8.00, 19.81, 3.46 -1748.00, 8.00, 18.47, 3.46 -1749.00, 8.00, 19.88, 3.44 -1750.00, 8.00, 19.53, 3.46 -1751.00, 8.00, 19.54, 3.44 -1752.00, 8.00, 19.54, 3.46 -1753.00, 8.00, 18.76, 3.45 -1754.00, 8.00, 19.94, 3.44 -1755.00, 8.00, 17.98, 3.45 -1756.00, 8.00, 19.32, 3.43 -1757.00, 8.00, 20.02, 3.42 -1758.00, 8.00, 20.82, 3.45 -1759.00, 8.00, 18.87, 3.46 -1760.00, 8.00, 19.26, 3.44 -1761.00, 8.00, 20.19, 3.44 -1762.00, 8.00, 18.83, 3.44 -1763.00, 8.00, 21.22, 3.44 -1764.00, 8.00, 20.84, 3.45 -1765.00, 8.00, 18.93, 3.45 -1766.00, 8.00, 19.60, 3.45 -1767.00, 8.00, 20.64, 3.45 -1768.00, 8.00, 19.28, 3.46 -1769.00, 8.00, 19.88, 3.44 -1770.00, 8.00, 19.28, 3.44 -1771.00, 8.00, 20.07, 3.43 -1772.00, 8.00, 18.40, 3.45 -1773.00, 8.00, 19.32, 3.45 -1774.00, 8.00, 17.52, 3.45 -1775.00, 8.00, 19.37, 3.45 -1776.00, 8.00, 20.15, 3.44 -1777.00, 8.00, 20.38, 3.44 -1778.00, 8.00, 20.65, 3.45 -1779.00, 8.00, 20.88, 3.47 -1780.00, 8.00, 19.72, 3.47 -1781.00, 8.00, 20.02, 3.45 -1782.00, 8.00, 20.96, 3.44 -1783.00, 8.00, 18.45, 3.45 -1784.00, 8.00, 18.93, 3.44 -1785.00, 8.00, 18.22, 3.44 -1786.00, 8.00, 20.33, 3.43 -1787.00, 8.00, 20.43, 3.44 -1788.00, 8.00, 20.47, 3.44 -1789.00, 8.00, 19.36, 3.44 -1790.00, 8.00, 20.14, 3.45 -1791.00, 8.00, 19.41, 3.44 -1792.00, 8.00, 19.71, 3.46 -1793.00, 8.00, 20.07, 3.45 -1794.00, 8.00, 19.90, 3.45 -1795.00, 8.00, 19.76, 3.45 -1796.00, 8.00, 19.59, 3.46 -1797.00, 8.00, 19.75, 3.45 -1798.00, 8.00, 19.14, 3.45 -1799.00, 8.00, 20.65, 3.45 -1800.00, 8.00, 19.35, 3.45 -1801.00, 8.00, 19.89, 3.44 -1802.00, 8.00, 19.19, 3.46 -1803.00, 8.00, 18.42, 3.44 -1804.00, 8.00, 20.48, 3.45 -1805.00, 8.00, 21.17, 3.47 -1806.00, 8.00, 20.30, 3.45 -1807.00, 8.00, 19.76, 3.44 -1808.00, 8.00, 19.29, 3.45 -1809.00, 8.00, 19.47, 3.44 -1810.00, 8.00, 20.45, 3.44 -1811.00, 8.00, 20.90, 3.42 -1812.00, 8.00, 18.38, 3.44 -1813.00, 8.00, 20.44, 3.44 -1814.00, 8.00, 18.49, 3.43 -1815.00, 8.00, 19.98, 3.43 -1816.00, 8.00, 20.58, 3.46 -1817.00, 8.00, 19.61, 3.46 -1818.00, 8.00, 21.63, 3.44 -1819.00, 8.00, 19.93, 3.43 -1820.00, 8.00, 19.83, 3.44 -1821.00, 8.00, 18.31, 3.43 -1822.00, 8.00, 22.27, 3.45 -1823.00, 8.00, 18.58, 3.45 -1824.00, 8.00, 20.31, 3.44 -1825.00, 8.00, 19.21, 3.45 -1826.00, 8.00, 18.91, 3.45 -1827.00, 8.00, 21.79, 3.44 -1828.00, 8.00, 20.75, 3.45 -1829.00, 8.00, 19.41, 3.46 -1830.00, 8.00, 20.04, 3.45 -1831.00, 8.00, 19.85, 3.44 -1832.00, 8.00, 19.55, 3.44 -1833.00, 8.00, 18.83, 3.42 -1834.00, 8.00, 19.53, 3.44 -1835.00, 8.00, 19.12, 3.45 -1836.00, 8.00, 20.79, 3.43 -1837.00, 8.00, 19.47, 3.46 -1838.00, 8.00, 19.23, 3.44 -1839.00, 8.00, 20.08, 3.43 -1840.00, 8.00, 19.07, 3.44 -1841.00, 8.00, 19.50, 3.45 -1842.00, 8.00, 19.55, 3.44 -1843.00, 8.00, 18.06, 3.45 -1844.00, 8.00, 18.03, 3.45 -1845.00, 8.00, 19.24, 3.44 -1846.00, 8.00, 21.17, 3.45 -1847.00, 8.00, 19.77, 3.43 -1848.00, 8.00, 18.57, 3.43 -1849.00, 8.00, 20.76, 3.43 -1850.00, 8.00, 19.62, 3.46 -1851.00, 8.00, 20.61, 3.44 -1852.00, 8.00, 20.26, 3.43 -1853.00, 8.00, 20.85, 3.44 -1854.00, 8.00, 19.48, 3.43 -1855.00, 8.00, 19.11, 3.45 -1856.00, 8.00, 20.43, 3.45 -1857.00, 8.00, 19.33, 3.44 -1858.00, 8.00, 19.03, 3.45 -1859.00, 8.00, 18.80, 3.45 -1860.00, 8.00, 19.38, 3.43 -1861.00, 8.00, 17.84, 3.46 -1862.00, 8.00, 19.47, 3.44 -1863.00, 8.00, 21.20, 3.45 -1864.00, 8.00, 21.00, 3.44 -1865.00, 8.00, 20.62, 3.45 -1866.00, 8.00, 20.07, 3.44 -1867.00, 8.00, 19.36, 3.47 -1868.00, 8.00, 20.60, 3.44 -1869.00, 8.00, 19.27, 3.45 -1870.00, 8.00, 18.67, 3.45 -1871.00, 8.00, 18.07, 3.43 -1872.00, 8.00, 19.59, 3.46 -1873.00, 8.00, 19.87, 3.45 -1874.00, 8.00, 19.25, 3.45 -1875.00, 8.00, 21.53, 3.46 -1876.00, 8.00, 20.40, 3.44 -1877.00, 8.00, 19.85, 3.45 -1878.00, 8.00, 19.52, 3.42 -1879.00, 8.00, 19.55, 3.45 -1880.00, 8.00, 20.79, 3.44 -1881.00, 8.00, 20.43, 3.45 -1882.00, 8.00, 20.28, 3.43 -1883.00, 8.00, 19.13, 3.44 -1884.00, 8.00, 19.72, 3.46 -1885.00, 8.00, 22.18, 3.44 -1886.00, 8.00, 19.39, 3.43 -1887.00, 8.00, 20.22, 3.44 -1888.00, 8.00, 19.08, 3.43 -1889.00, 8.00, 19.57, 3.42 -1890.00, 8.00, 20.51, 3.45 -1891.00, 8.00, 20.00, 3.45 -1892.00, 8.00, 20.61, 3.42 -1893.00, 8.00, 19.49, 3.43 -1894.00, 8.00, 21.35, 3.44 -1895.00, 8.00, 19.13, 3.45 -1896.00, 8.00, 20.48, 3.45 -1897.00, 8.00, 20.71, 3.45 -1898.00, 8.00, 19.55, 3.44 -1899.00, 8.00, 18.60, 3.44 -1900.00, 8.00, 19.70, 3.45 -1901.00, 8.00, 19.60, 3.43 -1902.00, 8.00, 18.83, 3.45 -1903.00, 8.00, 20.06, 3.45 -1904.00, 8.00, 20.12, 3.45 -1905.00, 8.00, 20.59, 3.43 -1906.00, 8.00, 20.17, 3.44 -1907.00, 8.00, 20.26, 3.44 -1908.00, 8.00, 19.87, 3.43 -1909.00, 8.00, 19.77, 3.44 -1910.00, 8.00, 21.23, 3.44 -1911.00, 8.00, 19.27, 3.43 -1912.00, 8.00, 20.33, 3.43 -1913.00, 8.00, 21.99, 3.43 -1914.00, 8.00, 20.54, 3.46 -1915.00, 8.00, 19.69, 3.45 -1916.00, 8.00, 20.59, 3.44 -1917.00, 8.00, 19.74, 3.45 -1918.00, 8.00, 20.53, 3.42 -1919.00, 8.00, 19.42, 3.46 -1920.00, 8.00, 20.48, 3.43 -1921.00, 8.00, 19.33, 3.45 -1922.00, 8.00, 19.68, 3.44 -1923.00, 8.00, 20.44, 3.44 -1924.00, 8.00, 19.14, 3.44 -1925.00, 8.00, 21.11, 3.45 -1926.00, 8.00, 20.17, 3.46 -1927.00, 8.00, 21.91, 3.46 -1928.00, 8.00, 18.17, 3.45 -1929.00, 8.00, 20.80, 3.43 -1930.00, 8.00, 18.82, 3.43 -1931.00, 8.00, 19.91, 3.44 -1932.00, 8.00, 20.77, 3.46 -1933.00, 8.00, 19.03, 3.45 -1934.00, 8.00, 21.51, 3.44 -1935.00, 8.00, 19.33, 3.44 -1936.00, 8.00, 20.58, 3.43 -1937.00, 8.00, 19.73, 3.45 -1938.00, 8.00, 19.45, 3.43 -1939.00, 8.00, 19.10, 3.43 -1940.00, 8.00, 20.39, 3.44 -1941.00, 8.00, 20.17, 3.45 -1942.00, 8.00, 21.93, 3.45 -1943.00, 8.00, 20.60, 3.46 -1944.00, 8.00, 20.66, 3.46 -1945.00, 8.00, 19.93, 3.44 -1946.00, 8.00, 20.79, 3.44 -1947.00, 8.00, 19.33, 3.45 -1948.00, 8.00, 20.42, 3.43 -1949.00, 8.00, 19.24, 3.44 -1950.00, 8.00, 18.32, 3.44 -1951.00, 8.00, 18.45, 3.42 -1952.00, 8.00, 21.05, 3.44 -1953.00, 8.00, 18.75, 3.44 -1954.00, 8.00, 19.84, 3.44 -1955.00, 8.00, 20.75, 3.43 -1956.00, 8.00, 20.12, 3.44 -1957.00, 8.00, 19.11, 3.43 -1958.00, 8.00, 21.00, 3.44 -1959.00, 8.00, 19.78, 3.45 -1960.00, 8.00, 20.14, 3.43 -1961.00, 8.00, 20.10, 3.45 -1962.00, 8.00, 19.69, 3.43 -1963.00, 8.00, 19.57, 3.44 -1964.00, 8.00, 18.22, 3.45 -1965.00, 8.00, 20.97, 3.44 -1966.00, 8.00, 19.78, 3.44 -1967.00, 8.00, 19.11, 3.46 -1968.00, 8.00, 19.42, 3.44 -1969.00, 8.00, 19.91, 3.43 -1970.00, 8.00, 20.06, 3.43 -1971.00, 8.00, 20.38, 3.46 -1972.00, 8.00, 19.11, 3.42 -1973.00, 8.00, 18.96, 3.42 -1974.00, 8.00, 19.49, 3.44 -1975.00, 8.00, 20.71, 3.43 -1976.00, 8.00, 20.82, 3.42 -1977.00, 8.00, 20.39, 3.41 -1978.00, 8.00, 19.53, 3.44 -1979.00, 8.00, 18.84, 3.42 -1980.00, 8.00, 18.04, 3.43 -1981.00, 8.00, 18.36, 3.43 -1982.00, 8.00, 19.37, 3.44 -1983.00, 8.00, 22.11, 3.43 -1984.00, 8.00, 20.51, 3.42 -1985.00, 8.00, 18.32, 3.44 -1986.00, 8.00, 17.28, 3.44 -1987.00, 8.00, 20.19, 3.44 -1988.00, 8.00, 20.12, 3.42 -1989.00, 8.00, 20.54, 3.42 -1990.00, 8.00, 18.30, 3.44 -1991.00, 8.00, 19.46, 3.43 -1992.00, 8.00, 18.80, 3.43 -1993.00, 8.00, 18.12, 3.43 -1994.00, 8.00, 19.12, 3.43 -1995.00, 8.00, 20.39, 3.44 -1996.00, 8.00, 19.40, 3.43 -1997.00, 8.00, 20.81, 3.44 -1998.00, 8.00, 19.50, 3.42 -1999.00, 8.00, 18.82, 3.44 -2000.00, 8.00, 19.91, 3.44 -2001.00, 8.00, 20.64, 3.43 -2002.00, 8.00, 20.92, 3.43 -2003.00, 8.00, 20.10, 3.43 -2004.00, 8.00, 19.55, 3.43 -2005.00, 8.00, 20.77, 3.44 -2006.00, 8.00, 19.46, 3.45 -2007.00, 8.00, 20.33, 3.43 -2008.00, 8.00, 19.56, 3.45 -2009.00, 8.00, 20.51, 3.42 -2010.00, 8.00, 21.96, 3.43 -2011.00, 8.00, 19.85, 3.43 -2012.00, 8.00, 20.72, 3.44 -2013.00, 8.00, 20.31, 3.44 -2014.00, 8.00, 20.20, 3.43 -2015.00, 8.00, 18.90, 3.43 -2016.00, 8.00, 19.63, 3.43 -2017.00, 8.00, 20.26, 3.44 -2018.00, 8.00, 19.81, 3.43 -2019.00, 8.00, 20.16, 3.43 -2020.00, 8.00, 20.71, 3.44 -2021.00, 8.00, 21.75, 3.43 -2022.00, 8.00, 19.97, 3.41 -2023.00, 8.00, 19.32, 3.45 -2024.00, 8.00, 20.83, 3.45 -2025.00, 8.00, 19.30, 3.42 -2026.00, 8.00, 19.64, 3.46 -2027.00, 8.00, 21.83, 3.42 -2028.00, 8.00, 19.14, 3.44 -2029.00, 8.00, 19.67, 3.42 -2030.00, 8.00, 19.80, 3.43 -2031.00, 8.00, 18.78, 3.42 -2032.00, 8.00, 18.74, 3.42 -2033.00, 8.00, 19.19, 3.43 -2034.00, 8.00, 18.90, 3.43 -2035.00, 8.00, 19.98, 3.42 -2036.00, 8.00, 19.86, 3.42 -2037.00, 8.00, 19.14, 3.44 -2038.00, 8.00, 20.11, 3.42 -2039.00, 8.00, 19.92, 3.42 -2040.00, 8.00, 19.15, 3.44 -2041.00, 8.00, 21.25, 3.43 -2042.00, 8.00, 18.69, 3.44 -2043.00, 8.00, 20.84, 3.40 -2044.00, 8.00, 21.12, 3.42 -2045.00, 8.00, 20.64, 3.44 -2046.00, 8.00, 19.66, 3.43 -2047.00, 8.00, 18.92, 3.42 -2048.00, 8.00, 19.88, 3.42 -2049.00, 8.00, 19.93, 3.42 -2050.00, 8.00, 18.78, 3.42 -2051.00, 8.00, 20.80, 3.43 -2052.00, 8.00, 19.37, 3.44 -2053.00, 8.00, 20.77, 3.43 -2054.00, 8.00, 20.32, 3.44 -2055.00, 8.00, 20.61, 3.43 -2056.00, 8.00, 19.58, 3.42 -2057.00, 8.00, 18.07, 3.42 -2058.00, 8.00, 20.64, 3.42 -2059.00, 8.00, 19.75, 3.43 -2060.00, 8.00, 19.21, 3.43 -2061.00, 8.00, 18.68, 3.43 -2062.00, 8.00, 19.79, 3.42 -2063.00, 8.00, 20.10, 3.43 -2064.00, 8.00, 19.40, 3.42 -2065.00, 8.00, 20.29, 3.44 -2066.00, 8.00, 19.23, 3.42 -2067.00, 8.00, 20.08, 3.44 -2068.00, 8.00, 20.60, 3.41 -2069.00, 8.00, 19.33, 3.43 -2070.00, 8.00, 20.97, 3.43 -2071.00, 8.00, 20.45, 3.42 -2072.00, 8.00, 19.74, 3.42 -2073.00, 8.00, 19.51, 3.42 -2074.00, 8.00, 17.60, 3.44 -2075.00, 8.00, 21.66, 3.42 -2076.00, 8.00, 20.99, 3.43 -2077.00, 8.00, 18.30, 3.41 -2078.00, 8.00, 20.89, 3.43 -2079.00, 8.00, 21.56, 3.41 -2080.00, 8.00, 21.12, 3.43 -2081.00, 8.00, 19.76, 3.42 -2082.00, 8.00, 19.20, 3.41 -2083.00, 8.00, 20.55, 3.43 -2084.00, 8.00, 20.31, 3.42 -2085.00, 8.00, 19.63, 3.41 -2086.00, 8.00, 19.97, 3.42 -2087.00, 8.00, 19.82, 3.42 -2088.00, 8.00, 18.70, 3.41 -2089.00, 8.00, 20.87, 3.41 -2090.00, 8.00, 21.25, 3.42 -2091.00, 8.00, 21.36, 3.40 -2092.00, 8.00, 19.88, 3.41 -2093.00, 8.00, 20.84, 3.44 -2094.00, 8.00, 20.75, 3.42 -2095.00, 8.00, 19.17, 3.40 -2096.00, 8.00, 21.91, 3.43 -2097.00, 8.00, 19.71, 3.42 -2098.00, 8.00, 18.99, 3.41 -2099.00, 8.00, 20.30, 3.43 -2100.00, 8.00, 20.26, 3.44 -2101.00, 8.00, 20.44, 3.41 -2102.00, 8.00, 19.03, 3.42 -2103.00, 8.00, 18.58, 3.42 -2104.00, 8.00, 19.17, 3.44 -2105.00, 8.00, 20.04, 3.42 -2106.00, 8.00, 18.08, 3.41 -2107.00, 8.00, 19.10, 3.43 -2108.00, 8.00, 21.21, 3.42 -2109.00, 8.00, 20.31, 3.42 -2110.00, 8.00, 19.96, 3.41 -2111.00, 8.00, 18.97, 3.42 -2112.00, 8.00, 20.52, 3.42 -2113.00, 8.00, 20.35, 3.43 -2114.00, 8.00, 19.48, 3.41 -2115.00, 8.00, 19.95, 3.42 -2116.00, 8.00, 20.06, 3.40 -2117.00, 8.00, 19.32, 3.42 -2118.00, 8.00, 18.89, 3.40 -2119.00, 8.00, 19.90, 3.42 -2120.00, 8.00, 20.66, 3.40 -2121.00, 8.00, 19.70, 3.41 -2122.00, 8.00, 18.94, 3.42 -2123.00, 8.00, 21.66, 3.42 -2124.00, 8.00, 20.95, 3.43 -2125.00, 8.00, 19.48, 3.43 -2126.00, 8.00, 19.08, 3.42 -2127.00, 8.00, 18.79, 3.41 -2128.00, 8.00, 19.92, 3.42 -2129.00, 8.00, 21.63, 3.41 -2130.00, 8.00, 21.49, 3.41 -2131.00, 8.00, 19.37, 3.42 -2132.00, 8.00, 21.53, 3.42 -2133.00, 8.00, 18.68, 3.42 -2134.00, 8.00, 21.55, 3.42 -2135.00, 8.00, 21.20, 3.41 -2136.00, 8.00, 18.66, 3.42 -2137.00, 8.00, 19.93, 3.40 -2138.00, 8.00, 21.42, 3.42 -2139.00, 8.00, 20.21, 3.42 -2140.00, 8.00, 21.61, 3.43 -2141.00, 8.00, 19.98, 3.41 -2142.00, 8.00, 18.80, 3.42 -2143.00, 8.00, 21.08, 3.42 -2144.00, 8.00, 19.54, 3.40 -2145.00, 8.00, 20.02, 3.42 -2146.00, 8.00, 20.80, 3.43 -2147.00, 8.00, 21.10, 3.40 -2148.00, 8.00, 18.90, 3.41 -2149.00, 8.00, 20.94, 3.40 -2150.00, 8.00, 18.69, 3.40 -2151.00, 8.00, 18.33, 3.41 -2152.00, 8.00, 20.12, 3.40 -2153.00, 8.00, 18.49, 3.41 -2154.00, 8.00, 20.10, 3.40 -2155.00, 8.00, 18.69, 3.39 -2156.00, 8.00, 21.06, 3.42 -2157.00, 8.00, 20.00, 3.41 -2158.00, 8.00, 20.01, 3.41 -2159.00, 8.00, 20.01, 3.42 -2160.00, 8.00, 19.61, 3.40 -2161.00, 8.00, 20.36, 3.40 -2162.00, 8.00, 20.10, 3.42 -2163.00, 8.00, 20.03, 3.41 -2164.00, 8.00, 21.11, 3.42 -2165.00, 8.00, 17.77, 3.41 -2166.00, 8.00, 20.08, 3.40 -2167.00, 8.00, 19.42, 3.39 -2168.00, 8.00, 18.45, 3.40 -2169.00, 8.00, 18.61, 3.42 -2170.00, 8.00, 19.31, 3.39 -2171.00, 8.00, 20.82, 3.39 -2172.00, 8.00, 19.26, 3.40 -2173.00, 8.00, 21.28, 3.41 -2174.00, 8.00, 20.22, 3.41 -2175.00, 8.00, 20.77, 3.41 -2176.00, 8.00, 20.92, 3.41 -2177.00, 8.00, 19.35, 3.39 -2178.00, 8.00, 17.06, 3.40 -2179.00, 8.00, 20.97, 3.40 -2180.00, 8.00, 19.67, 3.41 -2181.00, 8.00, 19.98, 3.38 -2182.00, 8.00, 18.54, 3.41 -2183.00, 8.00, 18.42, 3.41 -2184.00, 8.00, 19.37, 3.41 -2185.00, 8.00, 18.31, 3.40 -2186.00, 8.00, 19.71, 3.40 -2187.00, 8.00, 20.04, 3.41 -2188.00, 8.00, 18.89, 3.39 -2189.00, 8.00, 19.08, 3.40 -2190.00, 8.00, 21.48, 3.41 -2191.00, 8.00, 20.71, 3.40 -2192.00, 8.00, 20.16, 3.39 -2193.00, 8.00, 20.79, 3.42 -2194.00, 8.00, 20.47, 3.41 -2195.00, 8.00, 18.74, 3.41 -2196.00, 8.00, 19.13, 3.40 -2197.00, 8.00, 20.17, 3.40 -2198.00, 8.00, 20.53, 3.40 -2199.00, 8.00, 20.10, 3.41 -2200.00, 8.00, 18.68, 3.40 -2201.00, 8.00, 19.76, 3.39 -2202.00, 8.00, 19.10, 3.43 -2203.00, 8.00, 18.63, 3.40 -2204.00, 8.00, 19.92, 3.41 -2205.00, 8.00, 21.98, 3.40 -2206.00, 8.00, 19.99, 3.41 -2207.00, 8.00, 22.12, 3.40 -2208.00, 8.00, 20.10, 3.39 -2209.00, 8.00, 20.34, 3.39 -2210.00, 8.00, 21.35, 3.40 -2211.00, 8.00, 19.57, 3.40 -2212.00, 8.00, 17.59, 3.39 -2213.00, 8.00, 20.54, 3.39 -2214.00, 8.00, 21.48, 3.39 -2215.00, 8.00, 20.33, 3.40 -2216.00, 8.00, 19.95, 3.41 -2217.00, 8.00, 19.68, 3.38 -2218.00, 8.00, 19.04, 3.39 -2219.00, 8.00, 20.58, 3.39 -2220.00, 8.00, 19.80, 3.39 -2221.00, 8.00, 19.08, 3.41 -2222.00, 8.00, 20.32, 3.38 -2223.00, 8.00, 19.95, 3.40 -2224.00, 8.00, 18.93, 3.41 -2225.00, 8.00, 20.06, 3.39 -2226.00, 8.00, 18.28, 3.39 -2227.00, 8.00, 16.52, 3.39 -2228.00, 8.00, 18.93, 3.41 -2229.00, 8.00, 21.68, 3.38 -2230.00, 8.00, 19.47, 3.38 -2231.00, 8.00, 20.28, 3.38 -2232.00, 8.00, 18.52, 3.40 -2233.00, 8.00, 19.14, 3.38 -2234.00, 8.00, 19.98, 3.40 -2235.00, 8.00, 20.36, 3.39 -2236.00, 8.00, 20.25, 3.38 -2237.00, 8.00, 20.81, 3.38 -2238.00, 8.00, 20.31, 3.38 -2239.00, 8.00, 21.24, 3.40 -2240.00, 8.00, 19.50, 3.39 -2241.00, 8.00, 17.97, 3.39 -2242.00, 8.00, 19.68, 3.37 -2243.00, 8.00, 19.93, 3.39 -2244.00, 8.00, 18.91, 3.37 -2245.00, 8.00, 20.79, 3.40 -2246.00, 8.00, 19.76, 3.39 -2247.00, 8.00, 21.38, 3.39 -2248.00, 8.00, 20.12, 3.37 -2249.00, 8.00, 19.79, 3.40 -2250.00, 8.00, 20.02, 3.39 -2251.00, 8.00, 19.92, 3.39 -2252.00, 8.00, 20.44, 3.38 -2253.00, 8.00, 20.09, 3.38 -2254.00, 8.00, 20.28, 3.41 -2255.00, 8.00, 19.12, 3.39 -2256.00, 8.00, 19.62, 3.39 -2257.00, 8.00, 20.82, 3.38 -2258.00, 8.00, 21.36, 3.38 -2259.00, 8.00, 19.78, 3.39 -2260.00, 8.00, 20.29, 3.41 -2261.00, 8.00, 21.16, 3.40 -2262.00, 8.00, 18.64, 3.38 -2263.00, 8.00, 18.77, 3.41 -2264.00, 8.00, 17.86, 3.38 -2265.00, 8.00, 21.36, 3.37 -2266.00, 8.00, 19.30, 3.39 -2267.00, 8.00, 20.33, 3.39 -2268.00, 8.00, 21.02, 3.39 -2269.00, 8.00, 20.30, 3.39 -2270.00, 8.00, 19.16, 3.37 -2271.00, 8.00, 18.47, 3.39 -2272.00, 8.00, 19.98, 3.39 -2273.00, 8.00, 21.99, 3.40 -2274.00, 8.00, 20.56, 3.38 -2275.00, 8.00, 18.52, 3.39 -2276.00, 8.00, 21.78, 3.37 -2277.00, 8.00, 20.24, 3.39 -2278.00, 8.00, 20.27, 3.39 -2279.00, 8.00, 18.85, 3.40 -2280.00, 8.00, 19.12, 3.36 -2281.00, 8.00, 18.22, 3.40 -2282.00, 8.00, 18.27, 3.39 -2283.00, 8.00, 21.02, 3.37 -2284.00, 8.00, 18.98, 3.40 -2285.00, 8.00, 21.09, 3.38 -2286.00, 8.00, 20.42, 3.37 -2287.00, 8.00, 19.89, 3.38 -2288.00, 8.00, 19.51, 3.37 -2289.00, 8.00, 20.27, 3.38 -2290.00, 8.00, 19.85, 3.37 -2291.00, 8.00, 19.84, 3.38 -2292.00, 8.00, 20.26, 3.38 -2293.00, 8.00, 20.93, 3.38 -2294.00, 8.00, 19.55, 3.37 -2295.00, 8.00, 19.25, 3.38 -2296.00, 8.00, 19.29, 3.37 -2297.00, 8.00, 21.38, 3.38 -2298.00, 8.00, 20.14, 3.37 -2299.00, 8.00, 21.80, 3.38 -2300.00, 8.00, 18.68, 3.36 -2301.00, 8.00, 20.46, 3.37 -2302.00, 8.00, 21.83, 3.36 -2303.00, 8.00, 20.84, 3.37 -2304.00, 8.00, 20.10, 3.37 -2305.00, 8.00, 18.70, 3.36 -2306.00, 8.00, 18.69, 3.38 -2307.00, 8.00, 19.04, 3.36 -2308.00, 8.00, 19.80, 3.35 -2309.00, 8.00, 18.78, 3.37 -2310.00, 8.00, 18.45, 3.39 -2311.00, 8.00, 20.94, 3.36 -2312.00, 8.00, 21.62, 3.37 -2313.00, 8.00, 19.61, 3.37 -2314.00, 8.00, 19.19, 3.38 -2315.00, 8.00, 20.15, 3.38 -2316.00, 8.00, 20.97, 3.36 -2317.00, 8.00, 20.61, 3.35 -2318.00, 8.00, 19.65, 3.37 -2319.00, 8.00, 18.56, 3.36 -2320.00, 8.00, 19.44, 3.36 -2321.00, 8.00, 21.27, 3.37 -2322.00, 8.00, 20.03, 3.38 -2323.00, 8.00, 20.82, 3.36 -2324.00, 8.00, 18.83, 3.35 -2325.00, 8.00, 17.47, 3.38 -2326.00, 8.00, 17.68, 3.38 -2327.00, 8.00, 22.39, 3.37 -2328.00, 8.00, 20.83, 3.37 -2329.00, 8.00, 20.43, 3.38 -2330.00, 8.00, 19.98, 3.36 -2331.00, 8.00, 17.69, 3.38 -2332.00, 8.00, 19.61, 3.36 -2333.00, 8.00, 19.54, 3.38 -2334.00, 8.00, 18.95, 3.36 -2335.00, 8.00, 18.73, 3.37 -2336.00, 8.00, 20.40, 3.37 -2337.00, 8.00, 21.24, 3.36 -2338.00, 8.00, 20.26, 3.37 -2339.00, 8.00, 19.42, 3.36 -2340.00, 8.00, 20.52, 3.37 -2341.00, 8.00, 20.01, 3.37 -2342.00, 8.00, 19.97, 3.38 -2343.00, 8.00, 19.80, 3.37 -2344.00, 8.00, 21.33, 3.36 -2345.00, 8.00, 18.55, 3.37 -2346.00, 8.00, 20.23, 3.36 -2347.00, 8.00, 19.26, 3.36 -2348.00, 8.00, 20.67, 3.37 -2349.00, 8.00, 20.38, 3.36 -2350.00, 8.00, 20.84, 3.36 -2351.00, 8.00, 20.26, 3.36 -2352.00, 8.00, 20.26, 3.35 -2353.00, 8.00, 19.86, 3.37 -2354.00, 8.00, 19.90, 3.36 -2355.00, 8.00, 19.62, 3.36 -2356.00, 8.00, 21.18, 3.35 -2357.00, 8.00, 20.22, 3.34 -2358.00, 8.00, 21.74, 3.35 -2359.00, 8.00, 19.63, 3.37 -2360.00, 8.00, 20.75, 3.36 -2361.00, 8.00, 19.96, 3.36 -2362.00, 8.00, 21.30, 3.36 -2363.00, 8.00, 18.87, 3.36 -2364.00, 8.00, 20.16, 3.36 -2365.00, 8.00, 19.82, 3.36 -2366.00, 8.00, 19.93, 3.36 -2367.00, 8.00, 20.35, 3.36 -2368.00, 8.00, 19.80, 3.35 -2369.00, 8.00, 20.37, 3.35 -2370.00, 8.00, 18.55, 3.35 -2371.00, 8.00, 20.68, 3.36 -2372.00, 8.00, 23.02, 3.36 -2373.00, 8.00, 19.25, 3.36 -2374.00, 8.00, 19.96, 3.36 -2375.00, 8.00, 21.33, 3.36 -2376.00, 8.00, 19.45, 3.35 -2377.00, 8.00, 19.58, 3.34 -2378.00, 8.00, 20.74, 3.37 -2379.00, 8.00, 19.37, 3.36 -2380.00, 8.00, 19.63, 3.36 -2381.00, 8.00, 19.55, 3.35 -2382.00, 8.00, 20.00, 3.36 -2383.00, 8.00, 20.81, 3.35 -2384.00, 8.00, 21.35, 3.36 -2385.00, 8.00, 19.66, 3.36 -2386.00, 8.00, 19.52, 3.34 -2387.00, 8.00, 18.67, 3.35 -2388.00, 8.00, 20.18, 3.37 -2389.00, 8.00, 19.62, 3.35 -2390.00, 8.00, 19.23, 3.34 -2391.00, 8.00, 19.44, 3.36 -2392.00, 8.00, 19.76, 3.34 -2393.00, 8.00, 20.96, 3.38 -2394.00, 8.00, 20.40, 3.35 -2395.00, 8.00, 21.15, 3.34 -2396.00, 8.00, 19.71, 3.34 -2397.00, 8.00, 19.76, 3.36 -2398.00, 8.00, 18.79, 3.35 -2399.00, 8.00, 19.87, 3.34 -2400.00, 8.00, 18.86, 3.35 -2401.00, 8.00, 19.61, 3.35 -2402.00, 8.00, 18.77, 3.35 -2403.00, 8.00, 20.21, 3.36 -2404.00, 8.00, 19.24, 3.33 -2405.00, 8.00, 18.24, 3.36 -2406.00, 8.00, 20.13, 3.35 -2407.00, 8.00, 20.34, 3.35 -2408.00, 8.00, 20.81, 3.34 -2409.00, 8.00, 19.53, 3.34 -2410.00, 8.00, 20.75, 3.35 -2411.00, 8.00, 21.86, 3.34 -2412.00, 8.00, 20.37, 3.35 -2413.00, 8.00, 20.29, 3.33 -2414.00, 8.00, 20.01, 3.36 -2415.00, 8.00, 19.36, 3.35 -2416.00, 8.00, 19.94, 3.36 -2417.00, 8.00, 19.04, 3.34 -2418.00, 8.00, 17.62, 3.35 -2419.00, 8.00, 21.59, 3.36 -2420.00, 8.00, 19.96, 3.35 -2421.00, 8.00, 19.38, 3.35 -2422.00, 8.00, 21.35, 3.35 -2423.00, 8.00, 19.83, 3.35 -2424.00, 8.00, 19.35, 3.34 -2425.00, 8.00, 21.65, 3.36 -2426.00, 8.00, 21.82, 3.35 -2427.00, 8.00, 20.80, 3.36 -2428.00, 8.00, 21.42, 3.34 -2429.00, 8.00, 21.67, 3.36 -2430.00, 8.00, 19.44, 3.35 -2431.00, 8.00, 19.73, 3.35 -2432.00, 8.00, 17.97, 3.36 -2433.00, 8.00, 19.37, 3.34 -2434.00, 8.00, 18.10, 3.36 -2435.00, 8.00, 18.50, 3.35 -2436.00, 8.00, 18.64, 3.34 -2437.00, 8.00, 19.39, 3.34 -2438.00, 8.00, 19.10, 3.34 -2439.00, 8.00, 19.37, 3.34 -2440.00, 8.00, 19.03, 3.34 -2441.00, 8.00, 19.99, 3.34 -2442.00, 8.00, 21.84, 3.35 -2443.00, 8.00, 19.19, 3.34 -2444.00, 8.00, 20.62, 3.34 -2445.00, 8.00, 18.17, 3.33 -2446.00, 8.00, 20.96, 3.35 -2447.00, 8.00, 19.40, 3.34 -2448.00, 8.00, 21.85, 3.35 -2449.00, 8.00, 20.60, 3.34 -2450.00, 8.00, 21.03, 3.33 -2451.00, 8.00, 19.31, 3.37 -2452.00, 8.00, 21.75, 3.33 -2453.00, 8.00, 21.34, 3.33 -2454.00, 8.00, 19.63, 3.34 -2455.00, 8.00, 20.79, 3.34 -2456.00, 8.00, 20.76, 3.33 -2457.00, 8.00, 20.76, 3.33 -2458.00, 8.00, 20.96, 3.35 -2459.00, 8.00, 19.84, 3.34 -2460.00, 8.00, 21.77, 3.35 -2461.00, 8.00, 21.61, 3.33 -2462.00, 8.00, 19.16, 3.34 -2463.00, 8.00, 20.03, 3.34 -2464.00, 8.00, 19.23, 3.33 -2465.00, 8.00, 21.04, 3.35 -2466.00, 8.00, 20.42, 3.34 -2467.00, 8.00, 18.20, 3.33 -2468.00, 8.00, 20.35, 3.34 -2469.00, 8.00, 20.76, 3.35 -2470.00, 8.00, 19.75, 3.34 -2471.00, 8.00, 19.18, 3.35 -2472.00, 8.00, 19.66, 3.35 -2473.00, 8.00, 18.29, 3.34 -2474.00, 8.00, 20.14, 3.35 -2475.00, 8.00, 19.23, 3.34 -2476.00, 8.00, 22.37, 3.33 -2477.00, 8.00, 19.46, 3.33 -2478.00, 8.00, 20.28, 3.34 -2479.00, 8.00, 19.51, 3.33 -2480.00, 8.00, 20.41, 3.35 -2481.00, 8.00, 19.65, 3.34 -2482.00, 8.00, 21.84, 3.32 -2483.00, 8.00, 18.22, 3.34 -2484.00, 8.00, 18.56, 3.34 -2485.00, 8.00, 19.28, 3.33 -2486.00, 8.00, 19.89, 3.34 -2487.00, 8.00, 20.06, 3.35 -2488.00, 8.00, 18.77, 3.34 -2489.00, 8.00, 20.11, 3.34 -2490.00, 8.00, 18.83, 3.34 -2491.00, 8.00, 19.07, 3.33 -2492.00, 8.00, 19.84, 3.33 -2493.00, 8.00, 20.77, 3.34 -2494.00, 8.00, 21.37, 3.33 -2495.00, 8.00, 20.33, 3.33 -2496.00, 8.00, 19.56, 3.32 -2497.00, 8.00, 20.39, 3.34 -2498.00, 8.00, 18.56, 3.34 -2499.00, 8.00, 19.31, 3.33 -2500.00, 8.00, 19.56, 3.34 -2501.00, 8.00, 19.90, 3.32 -2502.00, 8.00, 18.98, 3.33 -2503.00, 8.00, 19.05, 3.32 -2504.00, 8.00, 19.37, 3.32 -2505.00, 8.00, 20.04, 3.34 -2506.00, 8.00, 18.92, 3.33 -2507.00, 8.00, 18.73, 3.32 -2508.00, 8.00, 22.69, 3.33 -2509.00, 8.00, 23.55, 3.34 -2510.00, 8.00, 19.91, 3.34 -2511.00, 8.00, 18.81, 3.34 -2512.00, 8.00, 19.51, 3.34 -2513.00, 8.00, 19.62, 3.34 -2514.00, 8.00, 19.59, 3.32 -2515.00, 8.00, 18.63, 3.37 -2516.00, 8.00, 20.37, 3.34 -2517.00, 8.00, 19.44, 3.32 -2518.00, 8.00, 19.27, 3.33 -2519.00, 8.00, 22.84, 3.33 -2520.00, 8.00, 18.30, 3.32 -2521.00, 8.00, 19.15, 3.33 -2522.00, 8.00, 20.49, 3.36 -2523.00, 8.00, 19.44, 3.33 -2524.00, 8.00, 18.50, 3.32 -2525.00, 8.00, 20.46, 3.32 -2526.00, 8.00, 20.38, 3.33 -2527.00, 8.00, 20.41, 3.33 -2528.00, 8.00, 19.06, 3.33 -2529.00, 8.00, 19.72, 3.34 -2530.00, 8.00, 18.54, 3.34 -2531.00, 8.00, 19.75, 3.34 -2532.00, 8.00, 20.33, 3.32 -2533.00, 8.00, 19.44, 3.32 -2534.00, 8.00, 20.58, 3.32 -2535.00, 8.00, 20.94, 3.32 -2536.00, 8.00, 19.12, 3.32 -2537.00, 8.00, 19.11, 3.32 -2538.00, 8.00, 19.42, 3.32 -2539.00, 8.00, 19.17, 3.34 -2540.00, 8.00, 19.22, 3.32 -2541.00, 8.00, 18.99, 3.31 -2542.00, 8.00, 21.22, 3.31 -2543.00, 8.00, 20.44, 3.32 -2544.00, 8.00, 21.92, 3.32 -2545.00, 8.00, 19.06, 3.33 -2546.00, 8.00, 18.95, 3.33 -2547.00, 8.00, 19.13, 3.32 -2548.00, 8.00, 20.17, 3.32 -2549.00, 8.00, 20.12, 3.31 -2550.00, 8.00, 19.88, 3.32 -2551.00, 8.00, 19.27, 3.33 -2552.00, 8.00, 20.46, 3.32 -2553.00, 8.00, 21.28, 3.33 -2554.00, 8.00, 19.60, 3.33 -2555.00, 8.00, 19.04, 3.33 -2556.00, 8.00, 20.40, 3.32 -2557.00, 8.00, 20.03, 3.32 -2558.00, 8.00, 19.96, 3.31 -2559.00, 8.00, 19.17, 3.31 -2560.00, 8.00, 20.03, 3.33 -2561.00, 8.00, 19.84, 3.33 -2562.00, 8.00, 18.97, 3.32 -2563.00, 8.00, 17.61, 3.33 -2564.00, 8.00, 18.42, 3.33 -2565.00, 8.00, 18.16, 3.33 -2566.00, 8.00, 20.00, 3.32 -2567.00, 8.00, 19.75, 3.32 -2568.00, 8.00, 19.36, 3.34 -2569.00, 8.00, 21.78, 3.29 -2570.00, 8.00, 19.67, 3.32 -2571.00, 8.00, 19.71, 3.31 -2572.00, 8.00, 19.45, 3.33 -2573.00, 8.00, 19.42, 3.31 -2574.00, 8.00, 19.44, 3.33 -2575.00, 8.00, 19.19, 3.31 -2576.00, 8.00, 20.20, 3.33 -2577.00, 8.00, 21.11, 3.30 -2578.00, 8.00, 21.06, 3.33 -2579.00, 8.00, 20.43, 3.32 -2580.00, 8.00, 20.34, 3.34 -2581.00, 8.00, 19.87, 3.32 -2582.00, 8.00, 18.50, 3.33 -2583.00, 8.00, 19.99, 3.33 -2584.00, 8.00, 21.56, 3.30 -2585.00, 8.00, 20.02, 3.32 -2586.00, 8.00, 20.70, 3.32 -2587.00, 8.00, 19.75, 3.30 -2588.00, 8.00, 19.85, 3.31 -2589.00, 8.00, 19.78, 3.33 -2590.00, 8.00, 19.47, 3.32 -2591.00, 8.00, 21.11, 3.33 -2592.00, 8.00, 20.74, 3.32 -2593.00, 8.00, 18.42, 3.33 -2594.00, 8.00, 20.50, 3.32 -2595.00, 8.00, 20.09, 3.32 -2596.00, 8.00, 18.33, 3.33 -2597.00, 8.00, 19.43, 3.31 -2598.00, 8.00, 19.08, 3.32 -2599.00, 8.00, 20.51, 3.32 -2600.00, 8.00, 20.67, 3.31 -2601.00, 8.00, 19.08, 3.31 -2602.00, 8.00, 20.17, 3.30 -2603.00, 8.00, 21.39, 3.30 -2604.00, 8.00, 19.97, 3.32 -2605.00, 8.00, 18.53, 3.29 -2606.00, 8.00, 18.94, 3.31 -2607.00, 8.00, 21.38, 3.32 -2608.00, 8.00, 21.01, 3.29 -2609.00, 8.00, 19.83, 3.31 -2610.00, 8.00, 20.42, 3.33 -2611.00, 8.00, 20.36, 3.31 -2612.00, 8.00, 20.67, 3.30 -2613.00, 8.00, 20.11, 3.30 -2614.00, 8.00, 20.39, 3.31 -2615.00, 8.00, 18.91, 3.30 -2616.00, 8.00, 18.50, 3.30 -2617.00, 8.00, 19.80, 3.31 -2618.00, 8.00, 18.52, 3.32 -2619.00, 8.00, 19.50, 3.33 -2620.00, 8.00, 20.61, 3.31 -2621.00, 8.00, 19.19, 3.31 -2622.00, 8.00, 21.80, 3.30 -2623.00, 8.00, 19.16, 3.29 -2624.00, 8.00, 18.41, 3.30 -2625.00, 8.00, 21.59, 3.30 -2626.00, 8.00, 20.25, 3.34 -2627.00, 8.00, 18.09, 3.30 -2628.00, 8.00, 22.02, 3.31 -2629.00, 8.00, 20.62, 3.30 -2630.00, 8.00, 19.55, 3.31 -2631.00, 8.00, 18.93, 3.29 -2632.00, 8.00, 18.26, 3.32 -2633.00, 8.00, 21.41, 3.31 -2634.00, 8.00, 20.52, 3.31 -2635.00, 8.00, 19.76, 3.30 -2636.00, 8.00, 19.53, 3.29 -2637.00, 8.00, 20.93, 3.31 -2638.00, 8.00, 19.47, 3.30 -2639.00, 8.00, 20.10, 3.30 -2640.00, 8.00, 20.61, 3.28 -2641.00, 8.00, 20.52, 3.32 -2642.00, 8.00, 19.57, 3.29 -2643.00, 8.00, 19.39, 3.29 -2644.00, 8.00, 20.78, 3.29 -2645.00, 8.00, 21.20, 3.29 -2646.00, 8.00, 20.26, 3.28 -2647.00, 8.00, 20.03, 3.31 -2648.00, 8.00, 18.97, 3.30 -2649.00, 8.00, 20.33, 3.30 -2650.00, 8.00, 20.00, 3.31 -2651.00, 8.00, 19.27, 3.30 -2652.00, 8.00, 18.56, 3.29 -2653.00, 8.00, 19.32, 3.29 -2654.00, 8.00, 19.28, 3.30 -2655.00, 8.00, 19.97, 3.29 -2656.00, 8.00, 19.72, 3.29 -2657.00, 8.00, 18.46, 3.30 -2658.00, 8.00, 20.21, 3.29 -2659.00, 8.00, 19.63, 3.29 -2660.00, 8.00, 18.37, 3.29 -2661.00, 8.00, 19.33, 3.28 -2662.00, 8.00, 19.64, 3.29 -2663.00, 8.00, 20.33, 3.28 -2664.00, 8.00, 20.36, 3.30 -2665.00, 8.00, 19.78, 3.27 -2666.00, 8.00, 20.06, 3.28 -2667.00, 8.00, 20.50, 3.28 -2668.00, 8.00, 18.56, 3.28 -2669.00, 8.00, 19.27, 3.28 -2670.00, 8.00, 20.34, 3.28 -2671.00, 8.00, 21.60, 3.30 -2672.00, 8.00, 19.89, 3.29 -2673.00, 8.00, 20.30, 3.28 -2674.00, 8.00, 19.99, 3.29 -2675.00, 8.00, 17.77, 3.28 -2676.00, 8.00, 21.21, 3.27 -2677.00, 8.00, 19.59, 3.29 -2678.00, 8.00, 20.64, 3.25 -2679.00, 8.00, 21.21, 3.28 -2680.00, 8.00, 19.92, 3.26 -2681.00, 8.00, 21.31, 3.30 -2682.00, 8.00, 19.15, 3.29 -2683.00, 8.00, 18.92, 3.27 -2684.00, 8.00, 19.63, 3.26 -2685.00, 8.00, 20.50, 3.28 -2686.00, 8.00, 20.66, 3.27 -2687.00, 8.00, 21.08, 3.27 -2688.00, 8.00, 18.76, 3.26 -2689.00, 8.00, 20.57, 3.26 -2690.00, 8.00, 20.59, 3.27 -2691.00, 8.00, 20.01, 3.28 -2692.00, 8.00, 20.69, 3.27 -2693.00, 8.00, 21.78, 3.26 -2694.00, 8.00, 19.81, 3.26 -2695.00, 8.00, 19.92, 3.26 -2696.00, 8.00, 20.89, 3.26 -2697.00, 8.00, 18.92, 3.27 -2698.00, 8.00, 18.00, 3.28 -2699.00, 8.00, 20.24, 3.26 -2700.00, 8.00, 20.77, 3.27 -2701.00, 8.00, 16.85, 3.26 -2702.00, 8.00, 19.42, 3.25 -2703.00, 8.00, 20.98, 3.25 -2704.00, 8.00, 21.65, 3.26 -2705.00, 8.00, 19.19, 3.26 -2706.00, 8.00, 19.39, 3.24 -2707.00, 8.00, 19.39, 3.25 -2708.00, 8.00, 20.47, 3.23 -2709.00, 8.00, 21.10, 3.27 -2710.00, 8.00, 20.12, 3.25 -2711.00, 8.00, 21.16, 3.26 -2712.00, 8.00, 17.85, 3.26 -2713.00, 8.00, 18.98, 3.23 -2714.00, 8.00, 20.48, 3.24 -2715.00, 8.00, 20.06, 3.24 -2716.00, 8.00, 20.01, 3.24 -2717.00, 8.00, 20.62, 3.23 -2718.00, 8.00, 20.81, 3.24 -2719.00, 8.00, 18.54, 3.25 -2720.00, 8.00, 20.59, 3.25 -2721.00, 8.00, 21.07, 3.23 -2722.00, 8.00, 17.94, 3.24 -2723.00, 8.00, 18.89, 3.23 -2724.00, 8.00, 19.38, 3.24 -2725.00, 8.00, 19.75, 3.22 -2726.00, 8.00, 20.74, 3.21 -2727.00, 8.00, 18.83, 3.24 -2728.00, 8.00, 20.48, 3.21 -2729.00, 8.00, 20.31, 3.23 -2730.00, 8.00, 19.95, 3.25 -2731.00, 8.00, 17.96, 3.22 -2732.00, 8.00, 20.53, 3.25 -2733.00, 8.00, 21.76, 3.22 -2734.00, 8.00, 18.90, 3.21 -2735.00, 8.00, 20.19, 3.21 -2736.00, 8.00, 19.63, 3.22 -2737.00, 8.00, 21.44, 3.23 -2738.00, 8.00, 19.99, 3.21 diff --git a/examples/eol_event.py b/examples/eol_event.py deleted file mode 100644 index 0e5c8e39..00000000 --- a/examples/eol_event.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -""" -This example demonstrates a use case where someone wants to predict the first event (i.e., End Of Life (EOL)) of a system. Many system models have multiple events that can occur. In some prognostics applications, users are not interested in predicting a specific event, and are instead interested in when the first event occurs, regardless of the event. This example demonstrates how to predict the first event of a system. - -Method: An instance of ThrownObject is used for this example. In this case it is trivial because the event 'falling' will always occur before 'impact', but for some other models that might not be true. The ThrownObject class is subclassed to add a new event 'EOL' which occurs if any other event occurs. The new model is then instantiated and used for prognostics like in basic_example. Prediction specifically specifies EOL as the event to be predicted. - -Results: - - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time the event 'EOL' is predicted to occur (with uncertainty) - iii) Histogram of the event 'EOL' -""" - -import matplotlib.pyplot as plt -from prog_models.models import ThrownObject -from prog_algs.predictors import MonteCarlo -from prog_algs.uncertain_data import ScalarData - -def run_example(): - # Step 1: Define subclass with EOL event - # Similar to the prog_models 'events' example, but with an EOL event - class ThrownObjectWithEOL(ThrownObject): - events = ThrownObject.events + ['EOL'] - - def event_state(self, x): - es = super().event_state(x) - # Add EOL Event (minimum event state) - es['EOL'] = min(list(es.values())) - return es - - def threshold_met(self, x): - t_met = super().threshold_met(x) - # Add EOL Event (if any events have occured) - t_met['EOL'] = any(list(t_met.values())) - return t_met - - # Step 2: Create instance of subclass - m = ThrownObjectWithEOL(process_noise=1) - - # Step 3: Setup for prediction - pred = MonteCarlo(m) - def future_loading(t=None, x=None): - return {} # No future loading for ThrownObject - state = ScalarData(m.initialize()) - - # Step 4: Predict to EOL event - pred_results = pred.predict(state, future_loading, events=['EOL'], dt=0.01, n_samples=50) - # In this case EOL is when the object starts falling - # But for some models where events aren't sequential, there might be a mixture of events in the EOL - - # Step 5: Plot results - pred_results.time_of_event.plot_hist() - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/horizon.py b/examples/horizon.py deleted file mode 100644 index bd5e034b..00000000 --- a/examples/horizon.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation and prediction with uncertainty given a Prognostics Model with a specific prediction horizon. This prediction horizon marks the end of the "time of interest" for the prediction. Often this represents the end of a mission or sufficiently in the future where the user is unconcerned with the events - -Method: An instance of the Thrown Object model in prog_models is created, and the prediction process is achieved in three steps: - 1) State estimation of the current state is performed using a chosen state_estimator, and samples are drawn from this estimate - 2) Prediction of future states (with uncertainty) and the times at which the event thresholds will be reached, within the prediction horizon. All events outside the horizon come back as None and are ignored in metrics - -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) -""" - -from prog_models.models.thrown_object import ThrownObject -from prog_algs import * -from pprint import pprint - -def run_example(): - # Step 1: Setup model & future loading - def future_loading(t, x = None): - return {} - m = ThrownObject(process_noise = 0.25, measurement_noise = 0.2) - initial_state = m.initialize() - - # Step 2: Demonstrating state estimator - print("\nPerforming State Estimation Step...") - - # Step 2a: Setup - NUM_SAMPLES = 1000 - filt = state_estimators.ParticleFilter(m, initial_state, num_particles = NUM_SAMPLES) - # VVV Uncomment this to use UKF State Estimator VVV - # filt = state_estimators.UnscentedKalmanFilter(batt, initial_state) - - # Step 2b: One step of state estimator - u = m.InputContainer({}) # No input for ThrownObject - filt.estimate(0.1, u, m.output(initial_state)) - - # Note: in a prognostic application the above state estimation - # step would be repeated each time there is new data. - # Here we're doing one step to demonstrate how the state estimator is used - - # Step 3: Demonstrating Predictor - print("\nPerforming Prediction Step...") - - # Step 3a: Setup Predictor - mc = predictors.MonteCarlo(m) - - # Step 3b: Perform a prediction - # THIS IS WHERE WE DIVERGE FROM THE THROWN_OBJECT_EXAMPLE - # Here we set a prediction horizon - # We're saying we are not interested in any events that occur after this time - PREDICTION_HORIZON = 7.75 - samples = filt.x # Since we're using a particle filter, which is also sample-based, we can directly use the samples, without changes - STEP_SIZE = 0.01 - mc_results = mc.predict(samples, future_loading, dt=STEP_SIZE, horizon = PREDICTION_HORIZON) - print("\nPredicted Time of Event:") - metrics = mc_results.time_of_event.metrics() - pprint(metrics) # Note this takes some time - mc_results.time_of_event.plot_hist(keys = 'impact') - mc_results.time_of_event.plot_hist(keys = 'falling') - - print("\nSamples where impact occurs before horizon: {:.2f}%".format(metrics['impact']['number of samples']/NUM_SAMPLES*100)) - - # Step 4: Show all plots - import matplotlib.pyplot as plt # For plotting - plt.show() - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/kalman_filter.py b/examples/kalman_filter.py deleted file mode 100644 index a914f8c2..00000000 --- a/examples/kalman_filter.py +++ /dev/null @@ -1,139 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example demonstrates use of the Kalman Filter State Estimator with a LinearModel. - -First, a linear model is defined. Then the KF State estimator is used with fake data to estimate state. -""" - -import numpy as np -from prog_models import LinearModel -from prog_algs.state_estimators import KalmanFilter - - -# Linear Model for an object thrown into the air -class ThrownObject(LinearModel): - """ - Model that similates an object thrown into the air without air resistance - - Events (2) - | falling: The object is falling - | impact: The object has hit the ground - - Inputs/Loading: (0) - - States: (2) - | x: Position in space (m) - | v: Velocity in space (m/s) - - Outputs/Measurements: (1) - | x: Position in space (m) - - Keyword Args - ------------ - process_noise : Optional, float or Dict[Srt, float] - Process noise (applied at dx/next_state). - Can be number (e.g., .2) applied to every state, a dictionary of values for each - state (e.g., {'x1': 0.2, 'x2': 0.3}), or a function (x) -> x - process_noise_dist : Optional, String - distribution for process noise (e.g., normal, uniform, triangular) - measurement_noise : Optional, float or Dict[Srt, float] - Measurement noise (applied in output eqn). - Can be number (e.g., .2) applied to every output, a dictionary of values for each - output (e.g., {'z1': 0.2, 'z2': 0.3}), or a function (z) -> z - measurement_noise_dist : Optional, String - distribution for measurement noise (e.g., normal, uniform, triangular) - g : Optional, float - Acceleration due to gravity (m/s^2). Default is 9.81 m/s^2 (standard gravity) - thrower_height : Optional, float - Height of the thrower (m). Default is 1.83 m - throwing_speed : Optional, float - Speed at which the ball is thrown (m/s). Default is 40 m/s - """ - - inputs = [] # no inputs, no way to control - states = [ - 'x', # Position (m) - 'v' # Velocity (m/s) - ] - outputs = [ - 'x' # Position (m) - ] - events = [ - 'impact' # Event- object has impacted ground - ] - - A = np.array([[0, 1], [0, 0]]) - E = np.array([[0], [-9.81]]) - C = np.array([[1, 0]]) - F = None # Will override method - - # The Default parameters. - # Overwritten by passing parameters dictionary into constructor - default_parameters = { - 'thrower_height': 1.83, # m - 'throwing_speed': 40, # m/s - 'g': -9.81 # Acceleration due to gravity in m/s^2 - } - - def initialize(self, u=None, z=None): - return self.StateContainer({ - 'x': self.parameters['thrower_height'], - # Thrown, so initial altitude is height of thrower - 'v': self.parameters['throwing_speed'] - # Velocity at which the ball is thrown - this guy is a professional baseball pitcher - }) - - # This is actually optional. Leaving thresholds_met empty will use the event state to define thresholds. - # Threshold is met when Event State == 0. - # However, this implementation is more efficient, so we included it - def threshold_met(self, x): - return { - 'falling': x['v'] < 0, - 'impact': x['x'] <= 0 - } - - def event_state(self, x): - x_max = x['x'] + np.square(x['v'])/(-self.parameters['g']*2) # Use speed and position to estimate maximum height - return { - 'falling': np.maximum(x['v']/self.parameters['throwing_speed'],0), # Throwing speed is max speed - 'impact': np.maximum(x['x']/x_max,0) if x['v'] < 0 else 1 # 1 until falling begins, then it's fraction of height - } - -def run_example(): - # Step 1: Instantiate the model - m = ThrownObject(process_noise = 0, measurement_noise = 0) - - # Step 2: Instantiate the Kalman Filter State Estimator - # Define the initial state to be slightly off of actual - x_guess = m.StateContainer({'x': 1.75, 'v': 35}) # Guess of initial state - # Note: actual is {'x': 1.83, 'v': 40} - kf = KalmanFilter(m, x_guess) - - # Step 3: Run the Kalman Filter State Estimator - # Here we're using simulated data from the thrown_object. - # In a real application you would be using sensor data from the system - dt = 0.01 # Time step (s) - print_freq = 50 # Print every print_freq'th iteration - x = m.initialize() - u = m.InputContainer({}) # No input for this model - - for i in range(500): - # Get simulated output (would be measured in a real application) - z = m.output(x) - - # Estimate New State - kf.estimate(i*dt, u, z) - x_est = kf.x.mean - - # Print Results - if i%print_freq == 0: # Print every print_freq'th iteration - print(f"t: {i*dt:.2f}\n\tEstimate: {x_est}\n\tTruth: {x}") - diff = {key: x_est[key] - x[key] for key in x.keys()} - print(f"\t Diff: {diff}") - - # Update Real state for next step - x = m.next_state(x, u, dt) - -if __name__ == '__main__': - run_example() diff --git a/examples/measurement_eqn_example.py b/examples/measurement_eqn_example.py deleted file mode 100644 index 6b9674e8..00000000 --- a/examples/measurement_eqn_example.py +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs a state estimation with uncertainty given a Prognostics Model for a system in which not all output values are measured. - -Method: An instance of the BatteryCircuit model in prog_models is created. We assume that we are only measuring one of the output values, and we define a subclass to remove the other output value. - Estimation of the current state is performed at various time steps, using the defined state_estimator. - -Results: - i) Estimate of the current state given various times - ii) Display of results, such as prior and posterior state estimate values and SOC -""" - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs import * - -def run_example(): - # Step 1: Subclass model with measurement equation - # In this case we're only measuring 'v' (i.e., removing temperature) - # To do this we're creating a new class that's subclassed from the complete model. - # To change the outputs we just have to override outputs (the list of keys) - class MyBattery(Battery): - outputs = ['v'] - - # Step 2: Setup model & future loading - batt = MyBattery() - loads = [ # Define loads here to accelerate prediction - batt.InputContainer({'i': 2}), - batt.InputContainer({'i': 1}), - batt.InputContainer({'i': 4}), - batt.InputContainer({'i': 2}), - batt.InputContainer({'i': 3}) - ] - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - return loads[0] - elif (t < 900): - return loads[1] - elif (t < 1800): - return loads[2] - elif (t < 3000): - return loads[3] - return loads[-1] - - x0 = batt.parameters['x0'] - - # Step 3: Use the updated model - filt = state_estimators.ParticleFilter(batt, x0) - - # Step 4: Run step and print results - print('Running state estimation step with only one of 2 outputs measured') - - # Print Prior - print("\nPrior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - # Estimate Step - # Note, only voltage was needed in the measurement step, since that is the only output we're measuring - t = 0.1 - load = future_loading(t) - filt.estimate(t, load, {'v': 3.915}) - - # Print Posterior - print("\nPosterior State:", filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - # Another Estimate Step - t = 0.2 - load = future_loading(t) - filt.estimate(t, load, {'v': 3.91}) - - # Print Posterior Again - print("\nPosterior State (t={}):".format(t), filt.x.mean) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - - # Note that the particle filter was still able to perform state estimation. - # The updated outputs can be used for any case where the measurement doesn't match the model outputs - # For example, when units are different, or when the measurement is some combination of the outputs - # These are a little more complicated, since they require an instance of the parent class. For example: - - parent = Battery() - - - class MyBattery(Battery): - outputs = ['tv'] # output is temperature * voltage (for some reason) - - def output(self, x): - parent.parameters = self.parameters # only needed if you expect to change parameters - z = parent.output(x) - return self.OutputContainer({'tv': z['v'] * z['t']}) - - batt = MyBattery() - filt = state_estimators.ParticleFilter(batt, x0) - - print('-----------------\n\nExample 2') - print("\nPrior State:", filt.x.mean) - print("\toutput: ", batt.output(filt.x.mean)) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - t = 0.1 - load = future_loading(t) - filt.estimate(t, load, {'tv': 80}) - print("\nPosterior State:", filt.x.mean) - print("\toutput: ", batt.output(filt.x.mean)) - print('\tSOC: ', batt.event_state(filt.x.mean)['EOD']) - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/new_state_estimator_example.py b/examples/new_state_estimator_example.py deleted file mode 100644 index 374d2cd7..00000000 --- a/examples/new_state_estimator_example.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -An example illustrating the creation of a new state estimator. - -In this example a basic state estimator is constructed by subclassing the StateEstimator class. This StateEstimator is then demonstrated with a ThrownObject model -""" - -from prog_algs.state_estimators import StateEstimator -from prog_algs.uncertain_data import ScalarData -import random - - -class BlindlyStumbleEstimator(StateEstimator): - """ - A new state estimator. This is not a very effective state estimator, but one that technically works. It blindly stumbles towards the correct state by randomly generating a new state each timestep and selecting the state that's most consistant with the measurements. - - I do not in any universe recommend using this state estimator for anything other then demonstrating a bad state estimator. It's intended as an example of creating a new state estimation algorithm. - - This state estimator was created by copying the state estimator template and filling out each function with the logic for this algorithm - """ - def __init__(self, model, x0, measurement = None): - """ - Initialize the state estimator - - Args: - model (PrognosticsModel): Model to be used in state estimation - x0 (dict): Initial State - """ - self.m = model - self.state = x0 - - def estimate(self, t, u, z): - """ - Update the state estimate - - Args: - t (Number): Time - u (dict): Inputs (load) for time t - z (dict): Measured output at time t - """ - # Generate new candidate state - x2 = {key : float(value) + 10*(random.random()-0.5) for (key,value) in self.state.items()} - - # Calculate outputs - z_est = self.m.output(t, self.state) - z_est2 = self.m.output(t, x2) - - # Now score them each by how close they are to the measured z - z_est_score = sum([abs(z_est[key] - z[key]) for key in self.m.outputs]) - z_est2_score = sum([abs(z_est2[key] - z[key]) for key in self.m.outputs]) - - # Now choose the closer one - if z_est2_score < z_est_score: - self.state = x2 - - @property - def x(self): - """ - Measured state - """ - return ScalarData(self.state) - -# Model used in example -class ThrownObject(): - """ - Model that similates an object thrown into the air without air resistance - """ - - inputs = [] # no inputs, no way to control - states = [ - 'x', # Position (m) - 'v' # Velocity (m/s) - ] - outputs = [ # Anything we can measure - 'x' # Position (m) - ] - events = [ - 'falling', # Event- object is falling - 'impact' # Event- object has impacted ground - ] - - # The Default parameters. Overwritten by passing parameters dictionary into constructor - parameters = { - 'thrower_height': 1.83, # m - 'throwing_speed': 40, # m/s - 'g': -9.81, # Acceleration due to gravity in m/s^2 - 'process_noise': 0.0 # amount of noise in each step - } - - def initialize(self, u = None, z = None): - self.max_x = 0.0 - return { - 'x': self.parameters['thrower_height'], # Thrown, so initial altitude is height of thrower - 'v': self.parameters['throwing_speed'] # Velocity at which the ball is thrown - this guy is an professional baseball pitcher - } - - def dx(self, t, x, u = None): - # apply_process_noise is used to add process noise to each step - return { - 'x': x['v'], - 'v': self.parameters['g'] # Acceleration of gravity - } - - def output(self, t, x): - return { - 'x': x['x'] - } - - def event_state(self, t, x): - self.max_x = max(self.max_x, x['x']) # Maximum altitude - return { - 'falling': max(x['v']/self.parameters['throwing_speed'],0), # Throwing speed is max speed - 'impact': max(x['x']/self.max_x,0) # 1 until falling begins, then it's fraction of height - } - -def run_example(): - # This example creates a new state estimator, instead of using the included algorihtms. - # The new state estimator was defined above and can now be used like the UKF or PF - - # First we define the model to be used with the state estimator - m = ThrownObject() - - # Lets pretend we have no idea what the state is, we'll provide an estimate of 0 - x0 = {key : 0 for key in m.states} - filt = BlindlyStumbleEstimator(m, x0) - - # Now lets simulate it forward and see what it looks like - dt = 0.1 - x = m.initialize() - print('t: {}. State: {} (Ground truth: {})'.format(0, filt.x.mean, x)) - for i in range(1, int(8.4/dt)): - # Update ground truth state - x = {key : x[key] + m.dx(i*dt, x)[key] * dt for key in m.states} - - # Run estimation step - filt.estimate(i*dt, None, m.output(i*dt, x)) - - # Print result - print('t: {}. State: {} (Ground truth: {})'.format(i*dt, filt.x.mean, x)) - - # The results probably should show that it is estimating the state with a significant delay - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/particle_filter_battery_example.py b/examples/particle_filter_battery_example.py deleted file mode 100644 index 68168e9a..00000000 --- a/examples/particle_filter_battery_example.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -In this example the BatteryElectroChemEOD model is used with a particle filter to estimate the state of the battery -""" - -import matplotlib.pyplot as plt -import numpy as np -from prog_algs import * -from prog_models.models import BatteryElectroChemEOD - -def run_example(): - ## Setup - # Save battery model - # Time increment - dt = 1 - # Process noise - Q_vars = { - 'tb': 1, - 'Vo': 0.01, - 'Vsn': 0.01, - 'Vsp': 0.01, - 'qnB': 1, - 'qnS': 1, - 'qpB': 1, - 'qpS': 1 - } - # Measurement noise - R_vars = { - 't': 2, - 'v': 0.02 - } - battery = BatteryElectroChemEOD(process_noise= Q_vars, - measurement_noise = R_vars, - dt = dt) - load = battery.InputContainer({"i": 1}) # Optimization - def future_loading(t, x=None): - return load - - # Simulate data until EOD - start_u = future_loading(0) - start_x = battery.initialize(start_u) - start_y = battery.output(start_x) - sim_results = battery.simulate_to_threshold(future_loading, start_y, save_freq = 1) - - # Run particle filter - all_particles = [] - n_times = int(np.round(np.random.uniform(len(sim_results.times)*.25,len(sim_results.times)*.45,1)))# Random current time - - for i in range(n_times): - if i == 0: - batt_pf = state_estimators.ParticleFilter(model = battery, x0 = sim_results.states[i], num_particles = 250) - else: - batt_pf.estimate(t = sim_results.times[i], u = sim_results.inputs[i], z = sim_results.outputs[i]) - all_particles.append(batt_pf.particles) - - # Mean of the particles - alpha = 0.05 - states_vsn = [s['tb'] for s in sim_results.states] - pf_mean = [{key: np.mean(ps[key]) for key in battery.states} for ps in all_particles] - pf_low = [{key: np.quantile(ps[key], alpha / 2.0) for key in battery.states} for ps in all_particles] - pf_upp = [{key: np.quantile(ps[key], 1.0 - alpha / 2.0) for key in battery.states} for ps in all_particles] - print("First State:", pf_mean[0]) - print("Current State:", pf_mean[-1]) - plt.plot(sim_results.times[:n_times],[p['tb'] for p in pf_mean],linewidth=0.7,color="blue") - plt.plot(sim_results.times[:n_times], states_vsn[:n_times],"--",linewidth=0.7,color="red") - plt.fill_between(sim_results.times[:n_times],[p['tb'] for p in pf_low],[p['tb'] for p in pf_upp],alpha=0.5,color="blue") - plt.show() - - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() \ No newline at end of file diff --git a/examples/playback.py b/examples/playback.py deleted file mode 100644 index 638baf78..00000000 --- a/examples/playback.py +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This example performs state estimation and prediction using playback data. - -Method: An instance of the BatteryCircuit model in prog_models is created, the state estimation is set up by defining a state_estimator, and the prediction method is set up by defining a predictor. - Prediction is then performed using playback data. For each data point: - 1) The necessary data is extracted (time, current load, output values) and corresponding values defined (t, i, and z) - 2) The current state estimate is performed and samples are drawn from this distribution - 3) Prediction performed to get future states (with uncertainty) and the times at which the event threshold will be reached - -Results: - i) Predicted future values (inputs, states, outputs, event_states) with uncertainty from prediction - ii) Time event is predicted to occur (with uncertainty) - iii) Various prediction metrics - iv) Figures illustrating results -""" - -import csv -import numpy as np -from prog_algs.predictors import ToEPredictionProfile -from prog_algs.uncertain_data.multivariate_normal_dist import MultivariateNormalDist - -from prog_models.models import BatteryCircuit as Battery -# VVV Uncomment this to use Electro Chemistry Model VVV -# from prog_models.models import BatteryElectroChem as Battery - -from prog_algs.state_estimators import UnscentedKalmanFilter as StateEstimator -# VVV Uncomment this to use UnscentedKalmanFilter instead VVV -# from prog_algs.state_estimators import ParticleFilter as StateEstimator - -from prog_algs.predictors import UnscentedTransformPredictor as Predictor -# VVV Uncomment this to use MonteCarloPredictor instead -# from prog_algs.predictors import MonteCarlo as Predictor - -# Constants -NUM_SAMPLES = 20 -NUM_PARTICLES = 1000 # For state estimator (if using ParticleFilter) -TIME_STEP = 1 -PREDICTION_UPDATE_FREQ = 50 # Number of steps between prediction update -PLOT = True -PROCESS_NOISE = 1e-4 # Percentage process noise -MEASUREMENT_NOISE = 1e-4 # Percentage measurement noise -X0_COV = 1 # Covariance percentage with initial state -GROUND_TRUTH = {'EOD':2780} -ALPHA = 0.05 -BETA = 0.90 -LAMBDA_VALUE = 1500 - -def run_example(): - # Setup Model - batt = Battery() - - # Initial state - x0 = batt.initialize() - batt.parameters['process_noise'] = {key: PROCESS_NOISE * value for key, value in x0.items()} - z0 = batt.output(x0) - batt.parameters['measurement_noise'] = {key: MEASUREMENT_NOISE * value for key, value in z0.items()} - x0 = MultivariateNormalDist(x0.keys(), list(x0.values()), np.diag([max(1e-9, X0_COV * abs(x)) for x in x0.values()])) - - # Setup State Estimation - filt = StateEstimator(batt, x0, num_particles = NUM_PARTICLES) - - # Setup Prediction - load = batt.InputContainer({'i': 2.35}) - def future_loading(t, x=None): - return load - Q = np.diag([batt.parameters['process_noise'][key] for key in batt.states]) - R = np.diag([batt.parameters['measurement_noise'][key] for key in batt.outputs]) - mc = Predictor(batt, Q = Q, R = R) - - # Run Playback - step = 0 - profile = ToEPredictionProfile() - - with open('examples/data_const_load.csv', 'r') as f: - reader = csv.reader(f) - next(reader) # Skip header - for row in reader: - step += 1 - print("{} s: {} W, {} C, {} V".format(*row)) - t = float(row[0]) - i = {'i': float(row[1])/float(row[3])} - z = {'t': float(row[2]), 'v': float(row[3])} - - # State Estimation Step - filt.estimate(t, i, z) - eod = batt.event_state(filt.x.mean)['EOD'] - print(" - Event State: ", eod) - - # Prediction Step (every PREDICTION_UPDATE_FREQ steps) - if (step%PREDICTION_UPDATE_FREQ == 0): - mc_results = mc.predict(filt.x, future_loading, t0 = t, n_samples=NUM_SAMPLES, dt=TIME_STEP) - metrics = mc_results.time_of_event.metrics() - print(' - ToE: {} (sigma: {})'.format(metrics['EOD']['mean'], metrics['EOD']['std'])) - profile.add_prediction(t, mc_results.time_of_event) - - # Calculating Prognostic Horizon once the loop completes - from prog_algs.uncertain_data.uncertain_data import UncertainData - from prog_algs.metrics import samples as metrics - - def criteria_eqn(tte : UncertainData, ground_truth_tte : dict) -> dict: - """ - Sample criteria equation for playback. - # UPDATE THIS CRITERIA EQN AND WHAT IS CALCULATED - - Args: - tte : UncertainData - Time to event in UncertainData format. - ground_truth_tte : dict - Dictionary of ground truth of time to event. - """ - - # Set an alpha value - bounds = {} - for key, value in ground_truth_tte.items(): - # Set bounds for precentage_in_bounds by adding/subtracting to the ground_truth - alpha_calc = value * ALPHA - bounds[key] = [value - alpha_calc, value + alpha_calc] # Construct bounds for all events - percentage_in_bounds = tte.percentage_in_bounds(bounds) - - # Verify if percentage in bounds for this ground truth meets beta distribution percentage limit - return {key: percentage_in_bounds[key] > BETA for key in percentage_in_bounds.keys()} - - # Generate plots for playback example - playback_plots = profile.plot(GROUND_TRUTH, ALPHA, True) - - # Calculate prognostic horizon with ground truth, and print - ph = profile.prognostic_horizon(criteria_eqn, GROUND_TRUTH) - print(f"Prognostic Horizon for 'EOD': {ph['EOD']}") - - # Calculate alpha lambda with ground truth, lambda, alpha, and beta, and print - al = profile.alpha_lambda(GROUND_TRUTH, LAMBDA_VALUE, ALPHA, BETA) - print(f"Alpha Lambda for 'EOD': {al['EOD']}") - - # Calculate cumulative relative accuracy with ground truth, and print - cra = profile.cumulative_relative_accuracy(GROUND_TRUTH) - print(f"Cumulative Relative Accuracy for 'EOD': {cra['EOD']}") - - input('Press any key to exit') - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/examples/predict_specific_event.py b/examples/predict_specific_event.py deleted file mode 100644 index 816a3c67..00000000 --- a/examples/predict_specific_event.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -In this example we are using the UTPredictor to predict a specific event, in this case impact. This will then ignore the other events which are not of interest. -""" - -from prog_algs import state_estimators, predictors -from prog_models.models.thrown_object import ThrownObject - -def run_example(): - ## Setup - m = ThrownObject() - initial_state = m.initialize() - load = m.InputContainer({}) # Optimization - create once - def future_loading(t, x = None): - return load - - ## State Estimation - perform a single ukf state estimate step - filt = state_estimators.UnscentedKalmanFilter(m, initial_state) - filt.estimate(0.1, {}, m.output(initial_state)) - - ## Prediction - Predict EOD given current state - # Setup prediction - pred = predictors.UnscentedTransformPredictor(m) - - # Predict with a step size of 0.1 - mc_results = pred.predict(filt.x, future_loading, dt=0.1, save_freq= 1, events=['impact']) - - # Print Results - for i, time in enumerate(mc_results.times): - print('\nt = {}'.format(time)) - print('\tu = {}'.format(mc_results.inputs.snapshot(i).mean)) - print('\tx = {}'.format(mc_results.states.snapshot(i).mean)) - print('\tz = {}'.format(mc_results.outputs.snapshot(i).mean)) - print('\tevent state = {}'.format(mc_results.states.snapshot(i).mean)) - - # Note only impact event is shown here - print('\nToE:', mc_results.time_of_event.mean) - -# This allows the module to be executed directly -if __name__ == '__main__': - run_example() diff --git a/forms/Corporate CLA.pdf b/forms/Corporate CLA.pdf deleted file mode 100644 index 5175701ec58ef371cba495c51bca58c696953a3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219343 zcmagFV_+rkwmul!wr$(Cla6iMw#`n`VaK*@b!^)&iw1cerxTjT3*lE zSTCu9h!`y+9UCm^?%tm{SSTh&HUb6$J3~uY9v*rb3tJNdM+;9AV**Bc83HCoPG%Nn zdilR6^r8eDtjvsT^l}8u^eW%)aBwm+(@PL&5q!T(z|6*`!^a0}Vr%@D6T$!efMsG~ z_>T+`6C*og69ofD8>erH!gkg!HnvU#tn>S=^h$Pie^ul7=N{#6hY>KbvC^w}*qhL+E18(m z|IqsO2?67`Pn?_`O$=;cq0Bc84UP2?^z{w(_31zoqS<@)r5H2-iCEJGN!mHWjWgkh zG*)`|-54liNq|i2{TCQg14kg(5k{S1X?DTT&18N6*U$CT4GWM6Q-#kP04IJmr!q1C z>ZAaond#%`-|_<|y-@oD00Trb!h8G;#J>gqJ0wod29D0|jwYtC46vl6qVi(@2@)(5 z8_R#fBTT@=$^O53n}GQ{3;yj7CUz!z=XD~QVP$_1)EyXGYyx}<-6uMI=J^JV)|RDWE7Y*a zU&_N46l1vu%f6RpOG8ut`PC5J?anpEt=ygt{-N;UYQ6`d+!~}aFg-ZcFnvW_8z^*OaKUs91+c3gAnWeX3GqVo$1`dd^vHjm zq?Xc?STs}L0P;o909&eYPDYBS_sP|nfe3e3W|2!t)(Ze0RN)+#gJyf;dBwvLHlkZI z`hTpAxU*oyF&`&kfq(LR7@6HiI6 zKtRjL!10~M1T5deZN&bi!S}1x31VhU>cwYnjKMu<8*t7hn z=>Js>|F%oe$k9&B&e7&OIT-&{M+UZL6e{FK3-i{X_Ble=jW=rN@9K7*er<%senis0 z?E_wy4=L$o4IHih*59{R{+@p0kh7zU$+yL_Ce8-N2F?cG75Wc91p_k^r|$~bewDi91IL}3@keI z;*NGM_J6@nnO?-i)xyX`NnD6tnO?=wz}Cs$z|q9k$m3tw@z0I_SZi!y@c+T=8#%uf z{%_NjOq}do9F0u=f~nZIF@MD{=`nme{vSR65{%!(zmV#iU?N~*{l~JuSD3$vf8pFW z!San^f0b9FS5f(Xp6#EzzLimMv@=pRan_>$?i}x!0>O^|4S*S zZ(7B`(CM#jf1&Vikp73?nf^x?_+Q{$%)-&>+b$-C|4wHHMi!Rue#7+LaQ?EBH?;iD z*8gBlMrO_eEhlVx;%&rNdlpJH&7ccW^4K!SiI7(@vj~w=6c&xeFt99Y@C%jX9}2H#RU3}E1P*ipZqH=*6na17cMDO62@N)`In zaS~;ID(7XN75F0%N!uxv-b#`e<^#c%LKrKT+MI*V#~`Ri?(YbYS7!@*x{tX#TZ_YF z4FNVZ&tv)Tf-!X`j4I-cDf$+32x3i+~JT6yAhW?~`CMx*lk?Shc%162b#U_-XDW=+CzBvOm&mu1ub`W zZ}bbWXj{9?7&rlwilM8_V%3^~X|k4Wpp+RYH6qE0_h6(1BA8C_YUO9_6;V!H4srDB zA?3-ng*MuB7Ho_RCQU1+pKdA!)#Chw-QdgT@dr_$rBdW{Gw z#r5(k!hosXiSqbp|F;k=%7L>qfoFeyFpn0C zkPf#&z77FT|5}t6D>qxg76=7SAX;s;w_@5Wi{b226TJzgS%M8ig?~o4{FK(tZIqMqrE^II zS9i4i;ZF?YV07GroX@uC`a(LEb z?V4A4qi_r%frR5M=A*6?@Y0~5Dk$>nmn|SzW!1=H_Q^PneR7$-7alhy5OoQLX-5~C z-Y;6~u^F>t3Q54{AYh6mgq~rt7*wvI>ytkOyr6ZtO25u*?c*k^?uXxFvNla(D&`(`uD<G}bRRhw)xFxK zb#QMz(zW{lSR#Ny@>);HC4^too1Xrt8N6?sa;OURJjbxXRv(Yjzu(8F?ccl~n_c*g zdmwp;mj=hB+G{t?;!#=^btWDExI4HnUsG@-1_!h)QAw9n55kk1+zDruH#V8LX9K%O6|TetCLK#$fbs@v zUFAt82= zvD%RQpLM9I0%m%}{k*o!+#Spv7(&)^Y&w3jzia#YyY!>Qd78|I2EBA?tbRq#k+PWT zi0_YH>L{F*+24PNIvBfgQrEy@2pYRx3b=y;iO=|42lH6BZq|7oSlQ$hhYgwS0R^2S zr2EJ-M9g0N=o@bt+;7k1Wj!7*;R3A9>qU}9E52rWO4~HR$UbXr-XE~s%mFH1aVLpM z(ECIBlYU}_>jH1^iKbiQ15=6)kSuW&zPYOD_oVlXB?zuysz>NvsRdbasT3U5V_E`( zWknEP#Olw$^;`+7>f|wxO&suyz8ul;c9$g&xK4U=v%}JKwHz95N)A{>Jk@nUt|~^S z(M&*DpJgP~xG8nVRiDeCwSmxw-2`R%S(}C_1i4MC2N9-L{jK?jLNx=T_(IO>)$;=n zTt8R=CffoAKwwWfe*iv-O69&fNtAwsAEOeTPpV8pawZl@aR5K7Uq*^rP(nz`x^gPO zvCB}ln?|(8@t>1AnwWCCX8`toLSi%tAT)*f$;c5m%^5E#h;AliX0pRST_LW{UX%YO zA~n8ZI^Ya)0`XIZw;XHBKjrsWAYO*8Z@7~cJkldkC|J((cszGD=#|>8pEImw;9Eos z=_m`a__`|xkO#$wUKgw?SLbSVO@xgt*E74Ezn4stRS6Cspk&2Ed{X>sy$IJ!3WIOF z3IR+C$#mKMNS{kkC}V%>>!8t_$j68|B(Hxso+csGsLQ&Fg?gi#U^K)rm&jO4!kcf| zQS!Wh#eeTa3LGDr+GX-CniC&2oEG%2UZOecdNCa0c*Y@QuGa>i{mBKh*vuRavKe1N z+N2jvxsH(n!hDW>_-1pyHXjgqNAG=?)5Cn9`6C3E*yh2#%~lXT(YR-?QURH;Q;ed! z_T=!~u?vy@c^0rl0Vd3>{iqu490c)CFh1!&Yg+z1%}eTW+6P?sOO z;74_N+nd+-uouhhWR%{0%R+JtozP)t*q7|k0Reia37#r_L?uJ=(+Q;q{w2QCS6Q>;|s%Es?84+uwX|ZACjQK|{a`HCSWe0Ge0hvqlDl?no_$DUipLWK zKA54va42n-e)4(!EF`GErgILM*n!lm<6@1aoC_{FFcNg`+W4F!`HZ#r!AJFou#r|c znu7U}1)zO^v-~j$tt094b0^vcf{&8|m~;nO>bP$~Sw2}twxD%Q0mX}xjv7wwNb>|t z`fAm^uXziy-%(n)%ujo-`p0MB9O${oQ|>z7oBPHEU>-5PoZ-FOjM8gb!IyAx9CDp6 z8*hQsXMu=npZZ{bPMhLa3b~=p^2$!xJYz@r89Qa*05&)ET>QKb8XW4#&JZ9q?JsNb~%yDX_lcPqzcQYC&r5x_eo9on;3=8+- z35lmW9HM_3Km4KemN(Gj_iF^cJP~~I#O0V~rwqMI!yQ0-eK5iZ7oca{uIC2;2=Iu2 zwu%Tl#I|_T;UGl^uk6D;Ry4VR@hn4TTL|$>jJw#Qe`PC4)pMu30kb3+!Oa!F-&?Vw z#^Pk=`2x)JbT_f3P8Y@HRUctcObVEj2ti1eV3rJ9Fj}iZqIz)WHh0}?1mQe>ZN2G! zcoh5NJYG>$^y$!-4&fTv9>QvlXRJb@oCCfGy__s(To}+1OKi(g5~T9Zl_BOU5+u}0 zl$22YY4^L{uZQ1(L3OWO733%jrIJ04$HSgoMr>yJN)J-hExjHCSiuLJmf{1h7^VZi z0CUKDzNhTzlDH1dn@1lTFWh3}x!i^iZdKkg#|}B=y!#>O^T(Fw1o26W3KrQs8EFYR zhKC`D$PYjg*IL)13txz8y5r@Ssr8orozq+rKEtJ6*EXVDrpPKkt>E-WhaZeSO{aXj zF+iKs<&wX%eZix_j&i4Q*ifAk`ms`1?XH|edx7u1f-v<-XfH0UiXYQ&Fw484h@YFB z?LYwOtE0J_g7WgZC)A^Qi&yo6G0+4Q#LU#RSc1>87&E*F;rIir%toSUn9?uTKb|1Ebx7@qc?cFI>b#gsl}{yUGEIN@!aP-M7ayn2?=iA z*c^%VkH|D+VyX5>uu-oj{}$Kxam3SOu!u@8k5JvJZ8Dgft$uucEl)h_=?3W)vccGl z&?})mHbCk){(HJ6KkN#NwmPkHS@3`}-ZMUYb(isL!sfkY~75p(OC)HFsuy zvupKLj+TMv%uw@(-1@CHnd+SNp;uLC0WPX^)uJt>q4X1IIp=ksT4pG+KW*B6qwpgZ z%zRzHkK(i~vH=b&moy#p@(&WQL-L28d`SphvRl6sg;E29NM)iMPha%*yO#jVobdSL4W%r&Ht@^g13_QF zLYudUm#-&&rBzDlE&n9jAF7XteKe~Dv0clV7kGK_l&71f+fa+tl*84?J;Z+YOVg!f ztIt5xc|#GXG?-iJER|j1cq0|dv-%VFY*O8eKwa!3V(09#+YgR1h~`E4tmO;1J-x$M zf1s!-yko*|&T%5AYI8xBQd>g|ywFp+-$fnAT1;nUX_q#Y`c*!MpohbT@Zu(tkNbAsMMwiRQLyg0HvogL#*+^PK4nS+Z6=a%thZqK zyVocI%I33XL1fZPVdtuNBz)}2?0mMZKd@>BDz&-`#L)mRkysC{AdYqiZ2H2ejmLrV)vDx=ZzuF@6f#Hf)WQq z1tK+JU4Gkz!~CZ?!syj*fY8!e{j5(ejm00yk9^e9+39(1=CZ#hp#h;E+%f1~!5(Uu zP%d&8(s*YUcJD`3$ymXV^eBG>yh&`g(d@V4x!1c2Tlc_BiEOby>>y=WjXt+zsGOT3Z*LRXj4; z$V~IRItJ-W?S3jvF`EFPjyK3^G1VhkH?cHr_6jVR$2oK7Ce@JSC>aHrb(8hBD_d@d)*dKkJb3lpqUH((pb;|K}` zW2-mKtVRL3%6;QC>yiw+abOgrd)>r)d{?(K9cr*t(Olt@o<3-!1|mw#u%@gF=$yr^ zz?=dv8NA=`M?{QM$oXV9RDm})7r5><9|awqYGfZ_l$)DimMNl4kLKzzDzY=LGf_-i ztsd0Q{5>mwssy6cq3KI6<)NdpG(yUzb84f~qW$K-LP22RJgk^x!aE;7>x)W)OUuno zh}2x&?0-^gVcD7bGf?uT&Jz0!Pld1BP>2Q-5nlkmfO?(ID;;0Qq|Ew>jToWHx;p8E ze0ZtC4sH`TE3vtpE>{0ede8bXYe`iMD7<2Y(|_&5^Px!Iz0ZcrSPay)%6-xl+sy^Q3WLC!ok>?yhP&|ZfJ|5 z9!6>j!d_QTSdgIveg)XgIuoo>awpK5FVQiS{XNqrExbsMqdqTYA_^4=xx)K|9Svyc zPggQ&txF4Y7?6CRXTi`#^CJ?R3d@#>di%V~AFSqsn<)E5eW-qk+3Xzyjc3g_SrvpB zM^8(jl7vRA?&kAE5S+oOk$%s+lq~rRJk?LMs<>D!WeA&7+oaFg4X;1SZG;tAtF&8? zCeT)@eC5(hj`As!_e&|J5x)*;vnJVuIy#nQi>o#P94p6| z3_Uik({72kiih@(xwIQ3&qxRgl;9bq2_W!63R=fvvklpZA%TGlZKvv&;0#)nDba#kQf(STamA*X{zg$>wgc zF>x8rN+pGb{(0)@H~{FuaLIZIhQqD9`8$Y1)mQZ7vPWmgJ9-Rq4<5#*9UL;&e+ZY3 zZX0_jmTztk$`NG3cH1e0g{@6-7=7`RLl-9*V2Vq0;qjfX3Rhjlam#r&{=@dw!#R|v zOTKG<(d5?YSdRW7Z1)DF`HR0iAknHcrFW`~6AB3lrO}_Dh9p%RuEBgE%XNk@MtLKX zhpxsz8hAUi9zCi43mJ{n(sY?sWGJX5BbC9tfc%~H9zL;~!4s%NvE+uUxON{O%s;(} ztjMBk2Mt{2?$0*GsD$Fld7aD(_l*alEkUIF&Fe2_D&0Jr9LL)A*zO}Oqu{nn;Y^QW zVX9RR>kgLC7QtW&BroD_*vU8K*o=cf29jo&aIGJlMv!tQR`%PopA7f$YE}|M#&HvS zkx?B$-YH`Awu1Z19IA6!Nr6x_b_Vw3IZeCRfI)jCR$fK5G^iq`zkFz7f>ol%4R54R zmoa~>uNX=z_vDDF$;k=L%$WN=G6T!|Cpu+pi~9iy>BVG&23Zs>?!E4V%vIC5A;C9N zeXW`p!2i}1>4%Q8JUMKxF2X0FR`N#99$X=cmUy8q0li*)3FC~*>d%~#$U2D>ejW*DbJCgov}V2dZ%MOp0HM~gBX|sSbI42 zfUl!!S{KD<-p}{p-&Hb9@QLia`9uY7FjV1g4?g(ysJ$6ejAp>4@%|fJ-48mBSq*pF zYycImz_^*~y4;5xGU;df1D~^Wl4#1^1trLXw&>WlF-m#w&i<{q!ZkUQt~9Dnj#vwR z-H7QK{zO`$@bH``H0QZ^Mtr8+D!L_Z?jvYJ%zhDaEzab2>}eXeNdm#K@;Ogs9^J^L zUmQFifx0tD0^-LJIPM=gH=1-3oD})9D9qt#S8(Y?*)qB-51(}d4TXM|hkIJCNI>Z# z?0%8?KRez`GUbCfv4Z86p(E+oS~t zD!1L7<0p8tyJ=kf{kPeXt|mKS^U8mQQn$lboh*VDdL^*Y4Ok8?P?D7{@|y2AS}!5O zCMfRrEb{Kd`ZuC9(goLo32+DW2hoK?`^^WTeVxM+G&k` zA29YwpLyQy3i*6A0^io^su&hO5`{Xyu9fMDwd&-Lq=2F1L}|}P9_hKQsNvk6gsW} zTT!0JSx_Df2@T_*2E4%w4vBzaoCRueUFYsFD_;Lzm2(Sz=Uv*fmD0UUGbfh8`FRz@ z8&HOKk&{LI3t}N9l2 z;v4D^9!PB^`uuchMlfWaz+glO#X}V@w(tNxR?7-60bz7`@X~}ev95?_@{H%wy{T4r zgNKG11E?6<#h^_#-T7fRivafIj>)`=UzU(;cqCgGg-J$2)?ji($dk5oki>Gg%Z^IR zknW6iMcbWlN$-Fb_G7|woASz}tPx%$8luP1rI~r95rU1s{2~DR{9*C}DPJW2bWcOp zlWAHz-DwG8QmRKtrGQ)Neu{M4+zi?3q;1&xuje(QY-R%?m_5S4s7zZwa0)9`Y47(i`t$xMIQwVZWasBa8rzd~$nKzhiRtv1kq!cu3JN3F=jjxv#_Fmc zO4>RfFMdPw3G0kYN4;2BcWkSfq;u?wY$i0(=K9MJH?c4^%sIpuy@$kFAh|qO2ZVZh z5-0cLOOWxBLG1aN#RWy`We@j2?_SN&ZgVcwsG{wiL|s>o$;bGh+yyjJDI(n+c-D+f zY-Kpya%j}x>1p4{OZ~J<%wueYBRu_lUT40Qo2#|IsdRI@@EClcm(1doJ#3?fbbk8d zl$k=C<=~`PP!45=IGq~e7laQt;!s=S^k_Yii*d5bM=0*RqwOc?7dF=KAA|OW5ak%r zLm07Pqq?tCGgI2!K9J??iWLfA-BH9?dLktS2GG}%Oz_iKKu8++F<;vAkO5U%YmC*R z$sJWrF!6cB)ie)bYaoM1pFf!bpiz_z(g$3!-3HDsuu%(ayDdBor!41_s zw3CCwd1xXpxolRv{;UPB^Oe{Hj*#6~WBtxW(x3i1-fe(|O~qsjJM&#lt;6KTIZeb_ z{*!>#v>c$NC+{eo1Dju_)p}?+nHs55LF5+9RUSsXj)t2~bDh+UoMju3mRpG2xqHCZ zdq-=rEG^i(goUz3g>*L{-e;o;b%j^a&0GgKf@)WH&IU^y%K;W%c5g-C60&Mz<+~dC zgLn$o_IC9OUF0JH8aSP5ny=nHDnzu36L(0$R@IuVylP_u$RLUicbzqEI-a+EOE8i2 z{l?JdW43SICv;pE172wRRhCO28%si_zjd>wsg+V>^oMpn-Fte-8-V1hQ`z~Ro#yQ?99YFC}Tu@x#zfHEbBfu zqFM(}6G?Z58vwpeZYDZVIvwL!RLCd^_VkuobSM@jHx4}0omA{nV<=iTDnMCc_*7Q9 z%r%2qOOme$`@V9Gb4-w_yC^yn`peNz#6lOi6n9Hh2LC^Lkkt*falTocm&EnwEm<%` z;KUq@Qrzq?UDFxY!Iy(7&)dk)fOt*R6Sl9=Pi$m7Zbk4uMtN?>^N;I!a?+E}>h-RG z&POQSF_Qa!xN=Rinb*5WJilS_b9*k&zEn)>BwK08hA}AFJCQ^SY#Drh52&Q@n?>k)xQnCzTTZ25h8f=U3G6j3tkAX|VL}>JgQ-P_Z=xbth=&6wJh3 zPC~^sliOv2q&l56ytm}7n>CZqnbMy_yUJ<2@>J<3UIL=7l6M*MPb>Yv%kxv6WxgT6 z#@sITc<`^doBu_oM>zl#As;q=PW35=h5=;a*6i77FV6 znND+a*4=@EqHulXm7GdMR#qEP)HH4A~cv})}3P5Zl=aF5DD0HkN1W}xk zWV*e*=wY&>>;OlJ5dj3HwqTVlxyt7m%Y(S6qIj6hB&oY50Xl#j<(bi;H!oFoXeJuG z@+!{;25TnE?%o`l8z}mZAUUE2OL8-{)Y|;|V_^@u{p)JF_q$lCbtsg)&0xeS0 zz{KpG$PIKiWCeg`okDrTP2xtH?ePY8Q@~0BiGgQr3$o`YP2FeTTHU6RNVbO zX#}v%M%n>zxLvj6w(t4fF!eUU|5XYNt}9{X+L+o*!fplCfQ{Vs(x!t4j5IW@lE&9i zV*AG;ytu`e-Rk0OSpMSlSvH2csL{ z5{s!>dT$tZ(nhw|fHxITCv&kktXtg63OH}afIrqfwvz#~`<1?-yAcfzrncEeF<9(u zsoAmHbqW!Ie6}Ld$%qc57=Wd~cufv5D7tzIey$5Ehirh5Wu=o*wCO;0C8ZfZCJIs> zZki>P@4no4DOx}F9K}I}x`S+-gYVExaw1r1MweGa*aJ(cA)GmYqY*;l>aDm~8=84( z4zr)jEXpf34I#K+wivQYkz6|u0|eD32`;)XHYr)s&_b{oRCq+$>k9kHYLC2jDTXX0 zuUKzpi{~e$(y?f_g|N+8ih0ob%ZTz_MMt0;we2oa2h!9`CHouhlRW6k0OQ3k>5k!! z{W3T`ATax9JhI@t8jDYG=&CK!0IDcwqOqEl>YPe$P}cYU%Re%ykOTogB&-{8MJxbC zeL->!99?*FJfkSnS~%&2%5o}pC;F~7ilrNN1!%htV1Vi3`8Oe)GStG1Y<`H+IPucc z(h`_y3;`4Rust;<|%q^%?AY@HmRIT0)cRPyuqK+IDwK zoBr3H3Isw3UH#@O5S|Sfrl5I(&TTb>N;~v&dz!#4iIKw@Woa+zO2DsACD1XJ{moZn zSZlQcraJ*4RGQDrMOH~DKs{Df+1G-4(@oX0Ilo+q1uzAfVq1%DL>Cpi*kH_!*OZm@ zKY^0y80b1g=h&c>ek=G!Sg|Moncm}hD|$7g0&9GvOO14D zB*4h7_8o$f?8^SPb8bvtno$Q6biDj`{YquNOo}+9sf?u}d$EfHq)*l*_he z!dE`d%-yV<9;uJ~22;Wr=-iOzlpv$HST*y(u~f~@_@VUZa(aJh#V`597xO&Aw>ktB zcOB~7XE`@Gkmwcj2VT6)SB|buiyjrXwu`hK~s6Il_+6ICUEejx7bnHd%i=sTh@}2_m;!KH({Rg`+9M*uag*ZkZYyW6LLW?F%Nfkv zjAhVarN(XLmtfeb3Z(d{-~f5GT|r7UTb&KHZ|m;%QE?7(bCooDkYkLS5+-(z>kt&cSb;r)OTj=bg?#sfTE8&P1e_YR#zGE_vEuL)w07Y{So9TKV&<%%i5#bH;|tg+m&*8F%_Kq7ZX|IXEnF zsV{Y}VG2uw!eHWg;)DJs>u$|c*w}h1MSRfJCCiPhpvbM)ifk~>b6*CwCg=PTIF>{X zqT2e+cy%lSQ)Df-(v&~>{sDi{Rr(4>ihaCChP-Vb06&4h`CWXh!HRGX3rRWbyEZXpjihD<6yoRsz17oJh zkNaUGt*f7_pr=pr=*f1j=msryUF#+8hOqB1?661+lg7F?_Grz(m={}MRlcaszKrCE zb^zF%EG(;;rZB3?!p-%HvQ8ZeL^)lN%9coz-dA8;sR2Jxtiy$)ZEFCsp3yRP&l}(c z212WiBpq!m+HIZ}mjz+$j`NKcf=7qxVgwd$;ujKL7*X$Qvst@&yLCllqNq+rss@r))kY4)9i(|q?0a63o-lvb#Y~el zZZ!ZbPkhFqb=af+NDW0GVpu^x>Fx2=Lz61IQflJ1I-t)7;&9AkD~0)UrSPRcEV2!c z#!LexcmgjzBch`F`9rQEXw^yD1qt`Q zg;8BsfK8YnX1r znGrXX_yisnkzMZGGCeBXE@^^~9J?qDOdxbm5s z%W$1i6--7n8=$INtB`|k?y~;yBM z+S}}+J4T%ACyV>VzL}M5bY|PWYRebAPL=BC9YuYV0dY)`zGQWU2#L$|TVamv)QuuV z?R@#2s}6D$haD=C6icG&FPi z@SCMi9EO2JGNKawE7cwt$QY!S;|ZRe<#D5qn+5s@8kXh+j%{`70}tu1GN!@EKJ02x z#RE+g1q5#NM^G}LHD$P|A|M}0HDbQYWkq2G?{)qL>@IRCUW&ApE$|*MoJ|+Ap%8sFi$0TidSGsf;=DVv z%+>Kx{9y)f4p&-fVH5a4*FI9T@Ce?Ay%=!qdGo-0m!~pdBxE|m zH7#c53St0z#<*27b}d|tB3?a6%1EgwTFCr`|MT>2hwo4Nu%*&xbt@&ZjgQdCB5`3X z2cWA?T%`c?wv=%XD|Y8&lw+i{zb>K%>W2r^R(F8kh2{WEE-b!IIbjl%>FxqGlso^J z&WPx18;D8}!3D!qOG6B$+KvZEc{xF>enYqo&j91CBwZ#qgz?lJITS_?&ZnqiJa-LI zxeoF%70w3TK(-_9dZdDghA6pVEkXC1RNC~;15=GEeWY^%BsZeQszcaWIuO$W>#}fT zYi29o07RPA1^$4-4;1&u(f$`Xj$FZZ2V}|mE^t+8{FRRlP2_>3pFbM{FrKD8M@1cu zP*7>!d0J9AvApNCa|98jh?C<6^M0s^vn5mE13sVAi-fQQ^r$D4i+Y!HDg1uG{#h2hSD%Rv z-bhATeO#a0xro+V@EuOPyJfc1@BcbZ?c=*6I+gX?+E?==AIItb*aL8@g|rNH;>+O$m3B(*YM5sISitoiat*`Awx{S(f^FZ3vO|6t6(1!^Qb+B%g>kgI^lz9?gBZ$Gfjd=W`r+#!PyF zIdP1DVQG={W~KOiCSeHMiW}JDeAJGtnw7~e8{$N-rHYDB0efz6n((qn z|0!>urk)YJ+}S~|t!XFTPPLNsOZ&9UM7^SEX3~GRF+gjRo8u${qV4>X0zlaM^mt?L z58IjpHnSxcqFSfITnJr)U&fCT7kGh6Nwq6jF*G04bt#3vJ0`C7$#~Z+;peJd0?xjC z(-3XBrK8HBLf`t@2n{rU6L$lh#ByqWftYtHgpo|jhx{1Phgpdr?Z2>)uYW;6Qa;{= zT8kRPbsn5B@^Z>1?fP;!ZlGr!(O;e-unCf>Fo~)9oM{1%QsW*7`I~8KjSE8F85gg~ z4Xl{{_1FIf%YU~({hwj^d*kSTV0n||+C3&DC3D>LG?QVoB&A#Zh6pe91$=u(sA3C--*193yxrKo3(#P{TC(Khp! z`1^?%sI|6B1S`VbD*U?9%OPkIWRkh?XD?VTF?_Y5!(zWoBhdLUfSy!vz^1*}378 zWYu#&#=aK4*v~HC2bZd8Ql>h!yh%CSaBh(~MF?jER{OR71aV~)p8e-)Z_#7r03mae zxF@Om*OqN zb$S`hjpe?>W17m+LuRofY>t^g0@p>lHn)haESmlmA?{T}BuD_KTbm+JrcKfGjKyO( zm5+E~?~0pd#9XsDL(6mOQz?UqRzIxJovbSG>_u_4B~Z-!9fkjd7uWruoBiB3CGZm; z-Ms2%DNwHcb73{6qk*9{E5xPpEL;P~A5ghIjf@!!+TZ&!y)TeL;IfNHo8@cREp*A9 zq3E5iBxDA5zG?nc1Cl98DqC;g!#r!C&VyQOC%(Br++^C0nE z?=;ZA%~(Qy-u4H5$f!IN|L_fwbtz%OaLHIQAHmeRmh}GT=$ZI7r#dOi=(4VEh&Np? z>EmOY=4{t{M`MYNG__s$rT>u_z#k|j6>J)>nmuh5jfA$5tt~hWh>vE8p}FxCGU0=c z{jDIMUOKssTFMy;c$Zvkow?Qih{)>OK^z0xdaNYP0~_BR6-vxOyt>6!pwQc7t|f4~ zpxnYi!iRko$EJ2T0}6Q9^8Ojm>;)&Hti#InSb7Rd=;~Yd{XstrR;dPn{fl{ubHxFw zl%k1?v&<0sw!Xk+oYv31s1wCq^(<}WJfO8^nV)Y+Ly~5adC;Q8mIymlLnIS8Gv*AD;OS6beOoo+T&4% zXJ>Lrr#c9#NerEfIYq0jj5~Ky&3-Qo6f7+q&hx})HR7r(u5iRH9PNch!JsF5ztP6ye=%TD#%Bq;ZTMK~mX5 z>{LfB6dgTt)RG}Xr;Taedu(Z0z?8MkKN;ePTzz4FooL_ag;n_775Xh+AEk568>P_9 z%Co%@>Qo>z9F{@O!wKiU;tf%S%t|DA@K%h3jgYo_)`5z41-*4}s^XWd*BRn)w;UW@ z6^h4&OC~S1+(ClMxD2%R$*Dccvq+Z-zy)P(dClbR)D$1Rnm0v(dTL|CoT9S@jF9wi z*X;kC_%Z%!OI^DQGI}P0t-cTBCsgV1S@J+!h22}$u7vz8#);mRSdASUE`$sSx_96Qy{UNPRA zTpx=(%6a7AR{zT_j$@?iN!k*g+nH^p)N@>qJjSzQ(s=zWJuG!WA~9|Sf5i(68e92x z&SEU^5rh32PJ*)B2*Bkkg9L%7Z#l*R^-J7 z2Lkn7Q|SOKbiCwGVqqsVaBB7hhPCJnc8eGncdt=6w|7qa+Y&!fJTnZ5EqxZw^+ugsQ>M3Jn*2u4R;0qWf%;RrJ_v|V{VbwmA#f6tE;^A7Omoy9V243(i z#+(HclT7cD02~ct3<7w#AnXY+R_4F`ZU?~?OFo`|bRYb@xWiTIgj3F{|JF&-_@W=O zq0d=GnrH(pG1G2({=$iQwJi7)R`}guw+}J}^ubi}r8F%tW=~f1wkz9`dC((_l&`R- zG;!zucHPXLb@J4;)^p|zM&&?YzPmz{YTtO>R46e_XxYaRZ*Lq^Ex%E20+cG~T*-&_ z>pCC$O6v0S^rq{X(15)VA98ND&{RiAFfq^U77S~M?d=h&Rglm^)x&V`+dC4HfQ=`J zsy#@UvEswCA@O$B<~D5jZTaGW2@H%r}1bwLpF0_&0eajXX)LRDd185i#n~@)G1w4dnJSL^=_gT}oK0O0ZbFxC?Mn`C?xtEPF%Y|!b*I~%}w-}!qI&E!) zPf(jP5IZVRMYXuVCVsvK13AG|s-S01giwp~$_t}@6QdUAFaVBD`ytnkCx9dZrF3R% z2EZ8Mmh6P%AwVB3AE?2&_V8ty62oy4T=O|O3m2RVgwde~e{?2E2tX!^cl4CM>=f8X z-&lY2Vl%DVvO!Vc^Op+)lk)4)UUH23&OK0bdf(x@Y$BT>;H3>#CEbkX)sE5M+thGt z@7bKm;(%C_A9utlmDCe3SwAztu4;0=1muorPoN)s)Qvy&HJB zC`eqVvy8AMP`o*@Ga9q|h4PV&%^!;e+bRNm-ew5TuQ5Vs(L;w!(*DN9INQsw`&pdy zK&+;zTgDueTtHx6y2d^~U_jHpXJ_51GYb~^z*JQsVk;DzDp=Xm#Wq(VMJkFFn@lA6 zSnJQdL*I5WD)iT`*Q9i0?4!5RoLNQktY=}?cu5&iLAE0+k(2gFFS#p3NZ~FNUb(1mFj8|S*7O}hRa1a4UBCjE z{kb^XS}!IWnZ(oD&bo(xbXxrzunF_@jI}-U=H`mZSO6_5xMA&R;2y`Mn>Gcw_i(oG zOhUX{TF$Ii)f4g!)8TOG(JBwjc8PzP=QG8-qEsO_7F8Dwh_Ar&KmPimrkLSG9(|sT zmH*5dH3hySPOL>gX&EbnIcKvXwj`n6eNK_@t-pAHsvxB`f!*_^*6_w4=G+iUB@VKU zn>v54|FR0zQ2V%tZfj$RuCMo;3VM4-NtZ%jT+d61pYyl(Z6gpDV?20uE_?$z ziiTeCprWtUeCyC(cAfXdl3y~BQ)^_{8LZx*PVB_|Jv%SXM&6F%JaE|6Rtbt`WN=Xy>k>KAAbp7@9pcZ*OQY+Y8G2S_XP)-LSLSlA#L zfB<7-|FdBZ0=@z8mj8u;S!F;Ay7eZo^`zRLd)ytApG)?(>yec8J3`Rlj9xWj?}V^A zw_fA3tqu>`eH!dP_TOajKX_69r)ls%P4PF1U$PE)>2V@+pow$K(_7yQ-@u~kuGKlk ze8zg1Lq4mv!; zno&llfjMp3oa>duvVApTbUM&b^mLb!w^}RYYNDG6yAUBmAsY^}gBJ3jpd?4`Kna~H ziuiSxtks2~d__=B`>3_}JWP(MBY%NtL5`kFmN-+>(K+aXhB8{>I@t39YM7n?hGEvB z+|beuj&B!g?D9kKE%gwn;U+bPu`1ts3u~C?M;K+%{*VovkI{F$a`*Y= z`q|A6qAqAkKU7DR1@^7l`(z)MAfsMh#awU|yCbYKG*$T%Y7t@?%D91mg|vxlJ?YYz zqC)TevTA^7Q?@v6yLuxQ3ZNCYa$LveWcKat{I}JT%M(5(nxl~@h^(;$E!cO1l*|fd z-$mcW?TGfW0A3%SECL6@-z)Ygd5+-JvaLD)Nh8nk`0HvJc2gtQV`50=c0cf{29l%z z;qBL~tt*$StHf-U;d$emc0Y*1S!4m`EBJ!W8dWdPm7U^Gz}SLX(lwp-GaWES|3qOO zO##P0P!tpNx{uEV#t_V_U|xx0x50mWZV<6O9<)D+MC+JSGH7k`Qr~rEyPbH-twP&* zLl5qc+=y`X+HB+K(=qwT+gnmd26%W>?gF@P=Vj@=hPbZ9KB&TmmZ@8;p@Cs$;K_N`zE zVFyKMAt0WgKYmW3^mJf(j5^dupqnfDTs>vkHC=qy8@+P_jI3nIp6Gnu!^=Hx%Q0rD zLmHcPI(#|WRX;>Jf8_YtIqctn4S|w!$nW3bL=a*+&{j+W`NqaN< zo;O-3+R;1&wcK&y%(pk#Gqld{cbO4zWwIY@@7>CseO)zLH(~2jz=uZQ&dirjtO#=6 zmS9HD4!+{`$sKQy+0H&oM0f<0VsQ_%F(8}?OOS5CAT0`|fttJ*PcJkSwe?(m!ce+T zXfj7WmYKJtE_bX~qGC(}OqEucRKAVPRaBi`UA-7e9koMi{m{FMf;X+MyG0X+W zB#_*7=S+5%ofBw)9LZA2%t@nbXkx@(vLO%pvLDfPU;1kYlijDLpBEPAN*tJY6eAj& zE7YsWV9W_<+R@_x!Cyz{&kU6!D}wVa7+AcE40j33>Ocy$aqAg%FuoBgp$oA?x}E=<4E_)P z>Hp_+IFK$@;}-x|UHM3JufQ!URO`;Nyj7BGYcOAJ>aK~nQ=b-2_*|F-(RdW4s7C}|7qi6XJoPy)$(lrNncc-N#dcWgJ5+DJkJh0l z4dHv_M&{1K0K6+S5810eoY(cy4o)_XOU(DRY>BmT0F$fx8QaLuns_6P%fO7MD&6DJ zSoMAX7$xFFDgB#jqf+>4{-Ym|x-dLqHg&GBU{6+>pP962M)!3j3UY~M&9pMmAt`%g zv7|sOXw1DjlOG1m;LJw~85BJ3-FoP(5vi5?$Yg}f&S96?-!-3Ty1XZU?FTHedHdZn zCeEN#l~pNASXyv`*kR~+KxV252kMdb5&t#VEjisgxO{3nfLL;g4;s6Ch~XyG#Fv-X zu(5;Hj6sAiNr(;K7;dek+>Xnd)Rekw3&OTL`{v4B1{PpydI3}jQ1{o6=}Wp}+;f?@ zjn-CC$!ux&Q7q?G${>UoTZ9>!c5=?beuPZSUXoL!To*dYy7Nj0-zN&{I(wUTOo*-9 z?5exZCrgBnS-+DD5GQ>8Bm7k-kQ2Idmh1=3$Ffc9;bfSerdFEaUj!qhcaIiDchC2~eM zvoqbg7KW^q>cV{FXEtwQJ)W%h!)S)@CpFeX*svLxS=m#OCH^k1%_r%??88NnkDvqv zE(I%Wa&8uFEJAF289f};G}vG4)U)yI*%~k^CTdA|P#F%3^J5Bc@QED-@Dpp;K_3I` ziC_v2eV0Ev%nyTRi9u-d$=r6jr7V!`xlq;yK=ZEuxFXGQp?&$vF?5PzPTW}9-xPoM zN^fYCt|XRl)7P^K2E>xABD*!A|hU@(yFG$%yTc- z%a~k(E8V?G+tVNLSm)jHyJ@H!)3)B{Bf?0^uu{t<(gn>0$D7&Jp`t3ahN68K&VjDD z&cmAS6k0Zorknq;PF*;;PP%?;p65g<3`t#b@pYpUoHd)=r+mjo`QidC4 z){vTtK8c4Rg{Kqf997z{uKbK42g(Z@XpD&w`Pb0ZC>z%TnCNqo5W21YNYVAcM+b&8OZ&0xVY`GlM9;%J1+JBS9{{hYYzsn*c z!+$JzeJHFQF2TbLNRW^E0>Z(cm_7Rc2~=AUB9rJ)hSdW7nklT_GN_}Ys`Xzl5xCSd zsI+6IjYEZl00T(MwRu7AdbHATrBgnNZGos~jp2)Rdf=6vC}dreKT!e>Ez#yFDr~0U zKc?Sr{F5OBaHXfb0%;Mi>pUhewnuUii-Q{OsPr{=)U2!$BdcTp&CDHi^P~j7PtMCP zWM*n95p|6))D}~Nk^-(pjuDxEyZ;hO*Y?atC+IG@J66%EuD9~DVkb;1$SxGN?e<;V z;qJYig!@cITX@dsB-T$MowR(qRRv42k$vt+Wu3<+Qiu z@~(6RpM_XWvJ^Wz8GQnL2a6=MHVb9bi?L6EvYc1;te6lZ6jLw>F2x))qH@!%#Rdul z*q!Zvz?X2?*dikV8@%0;7a_yd`j#T zP8+I>;fEH6LfW|f7>qnRbV3>|d@s0#**d&{i6W$Md`(;~-nwd%PiB)7CeAal(Np5? zl1Zfa8N_P}_?^77<;mfiJejnvYxjt8`dI(&H+MMr*GPQma>8&+iQmcsySiWgodaPX zTJ9i4D=8YIIp3PuVk}-8^l)u5V!<0}Q#ng<72C+cbygu~73QvHS#X|a6vGgQ6N#sW ztik+4O!7CPOul_;UotI9^-8i?(a^9U&f+iCL=|?#)NkeBTFku*l*&T(tE!C-%t2bx zidHlL|D2jaOk};k%E~s@=|XJGUXN#D<|{T2iEGHs9S;b!>kGwuJG!0~-zthC*CYBk zm`~y{77g0fbf#aAQr)%pURp(JWYCc%Z7)#1JcqSrfjdUQ2JT8ugghB zP!gz%r_jPByH+=cO2*PWo4QaB@^p-XC{&~2bbly|)S8z?Fvan<{ZRVE0_?wd^q%Ktx*Aw} z(sRQ3E8Krq=-rYl!!tJnjY8Uch4`?m9nm*ut$OOg>epIzL`n345d=FQbOu#>Mp3-I zp*ARK4Ve|uF0M7GXPrxH*C`0uWUpSaBV=`)L_*5FsxC734ai3h(=yu*nM7>Ke5X1O z<-Tw!;8u)H-LAPXaf0jquF*mi>)uE)s(usHU+l}D%DG11Vicf@PrMBbENLaFdFIlw zjT^!WSG2d9N}gQ0;o}!%5dAk<`VZvi|Fdaj;rPFkyy@n{vC!a_V42oBqewD?8ATU{ zyvGtezB*aNho_-0fSO)97=$qHuuhtm_Lv#5&;N2L^Z%K5`F}0D{sW6L{%^i3BLOP| z+kf8TdnM~eF0X@mh>-G43>yL{n^4qdusQ8v4U8)JAkuhbs#<>CSa^LNdwVN@gt{f9 z>E--)ix=r*VhjL1e~BIO@)649P136loq{4uY+pgAI!62+3Z*uPgc!XTrSMY0vsHNB zx6{M*l<0$ufa~=K;+5^ePwZ-pWh>T6R<+!=2!<)9+=F<}9KcD=XN|V+dYY6nJaODm zP}EL!Xr7M|Qj3fgyX+HvUtiwabhrSN5Qm{nYaqZpL(eMB0wd31Zrzl&39LZZ;`pol z

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

oEceDeTbHNp6 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

Vids_es7CR933%i6tI5Cm{mKPD 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

c4 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

0Q7TU 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

t_MF2dX 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�xnC?Yo)|eU^d`7_ zXF^8ZjE>PG^fUbbPBVXi{cKF?yqB&4r&1tnx6&Ht%(1DKkD{Pu|8u>u;e>Ki@EU7m z31&Hbl1{XgVa$0*K>_>4=^$a5-uG_BxaQ)3aLyA9ExhfNXG?<`T%UlGmiu{(vcU-e zYn6DcH1Qkd+{xRz{g^)0_)NcETig>oF-^;BiiQ6n+{6PFs<@|b0|bPz4p;OL)l~#) z@wEoP;hIr(13Ys{L>j~*)DL`s@8`rzKT=40RtGj7*r=ThbCS3T^rLIn9A44rj{j8m zygfz3R*oq$rYX0&9hlC7!;#i+GWW&mLk`-~4@74Z4r;=GEL!N90z z8pf6XB+qC>{+RHWeZ7mk&KBa?xfz-}v96>n`{FU9v2RBH5I*s_wT(NM%1?SVLMCN9 zDzu}H+BHPY@4q8vl=CL-mGlYA$9@~QzB81gr6bHkDgBHziyf7G{@CP6ryhjRI&37} zX1OJmZw>W32vPmH`8E>mp##STxgoOJxQ}yZ^vTMId{ls+Ukc=B5BFgqY=_|GC_1;Y zGEL3|1mRD$5pRc+<%ZaUN71T>4yKYGO2gneC3i2Ht38aXf9BPO>F4?hj~YSTa{ubX z?PzR_C$v(_6vVD*e7x5Ftw8GZD}JXXU}X9I3YHfPf8OW$O^+6bwpox|=&YVBZM_#3 ziHF`QY(x5ck15}X91`?}L=F)bt!^W777ngzDZ0_<663GkxMrS+wc~0eN4po5v`Ox5j=>do#q#lk30DFJIqWJwP&}J=SIP&nO5*~WWMLzC{OXI_D z4=bNg$_#5pw-T$7cO}LHMOSWfRG_UuEGmh!UL8jEq=)hct?Uj#U^$Sq(!Qb!Z6&$> z2M14~QL0#vc`j-XT{Mw-PY*N@_sI$>O}w#G@7<)hE`%9dl+^15?{x-fW`7W;`1~b} zW*K89O1%t}WKn^R2zN@A`YQ|HTyXb=mp$Py$`LU9m-|CFe32vydO-@xfL|;^1=hn2 zKapzWj$89?k⁡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 diff --git a/license.pdf b/license.pdf deleted file mode 100644 index 4947abed095d4dfc7fe2980bcec78639aa57651c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94305 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 diff --git a/predictor_template.py b/predictor_template.py deleted file mode 100644 index df000dfc..00000000 --- a/predictor_template.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from copy import deepcopy - -from prog_algs.predictors import Predictor, Prediction, PredictionResults -# Replace the following with whatever form of UncertainData you would like to use to represent ToE -from prog_algs.uncertain_data import ScalarData - - -class TemplatePredictor(Predictor): - """ - Template class for performing model-based prediction - """ - - # REPLACE THE FOLLOWING LIST WITH CONFIGURED PARAMETERS - default_parameters = { # Default Parameters, used as config for UKF - 'Example Parameter': 0.0 - } - - def __init__(self, model, **kwargs): - """ - Constructor (optional) - """ - super().__init__(model, **kwargs) - # ADD PARAMETER CHECKS HERE - # e.g., self.parameters['some_value'] < 0 - - # INITIALIZE PREDICTOR - - def predict(self, state, future_loading_eqn, **kwargs): - """ - Perform a single prediction - - Parameters - ---------- - state : UncertainData - Estimate of the state at the time of prediction, reprecented by UncertainData - future_loading_eqn : function (t, x) -> z - Function to generate an estimate of loading at future time t and state z - options : dict, optional - Dictionary of any additional configuration values. See default parameters, above - - Returns (namedtuple) - ------- - times : List[float] - Times for each savepoint such that inputs.snapshot(i), states.snapshot(i), outputs.snapshot(i), and event_states.snapshot(i) are all at times[i] - inputs : Prediction - Inputs at each savepoint such that inputs.snapshot(i) is the input distribution (type UncertainData) at times[i] - states : Prediction - States at each savepoint such that states.snapshot(i) is the state distribution (type UncertainData) at times[i] - outputs : Prediction - Outputs at each savepoint such that outputs.snapshot(i) is the output distribution (type UncertainData) at times[i] - event_states : Prediction - Event states at each savepoint such that event_states.snapshot(i) is the event state distribution (type UncertainData) at times[i] - time_of_event : UncertainData - Distribution of predicted Time of Event (ToE) for each predicted event, represented by some subclass of UncertaintData (e.g., MultivariateNormalDist) - """ - params = deepcopy(self.parameters) # copy default parameters - params.update(kwargs) - - # PERFORM PREDICTION HERE, REPLACE THE FOLLOWING LISTS - - # Times of each savepoint (specified by savepts and save_freq) - times = [] # array of float (e.g., [0.0, 0.5, 1.0, ...]) - - # Inputs, State, Outputs, and Event States at each savepoint are stored by type Prediction - # Replace [] with estimates of the appropriate property in the form of a subclass of UncertainData (e.g, ScalarData) - inputs = Prediction(times, []) - states = Prediction(times, []) - outputs = Prediction(times, []) - event_states = Prediction(times, []) - - # Time of event is represented by some type of UncertainData (e.g., MultivariateNormalDist) - time_of_event = ScalarData({'event1': 748, 'event2': 300}) - # Save the final state when each event occurs like this, with each final state represented by an UncertainData object (e.g., MultivariateNormalDist) - # time_of_event.final_state = {'event1': ScalarData({'state1': 10, 'state2': 20}), 'event2': ScalarData({'state1': 12, 'state2': 18})} - - return PredictionResults( - times, - inputs, - states, - outputs, - event_states, - time_of_event - ) diff --git a/scripts/test_copyright.py b/scripts/test_copyright.py deleted file mode 100644 index cb268f83..00000000 --- a/scripts/test_copyright.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the -# National Aeronautics and Space Administration. All Rights Reserved. - -import os -COPYRIGHT_TAG = "Copyright © 2021 United States Government as represented by the Administrator" # String to check file lines for - -def check_copyright(directory : str, invalid_files : list) -> bool: - result = True - - for filename in os.listdir(directory): - path = os.path.join(directory, filename) - - # If path is subdirectory, recursively check files/subdirectories within - if os.path.isdir(path): - result = result and check_copyright(path, invalid_files) - # If path is a file, ensure it is of type py and check for copyright - elif os.path.isfile(path) and path[-2:] == "py": - file = open(path, 'r') - copyright_met = False - # Iterate over lines in file, check each line against COPYRIGHT_TAG - for line in file: - if COPYRIGHT_TAG in line: # File contains copyright, skip rest of lines - file.close() - copyright_met = True - if copyright_met: - break - if not copyright_met: - result = False - invalid_files.append(path) - file.close() - - return result - -def main(): - print("\n\nTesting Files for Copyright Information") - - root = '../prog_algs' - invalid_files = [] - copyright_confirmed = check_copyright(root, invalid_files) - - if not copyright_confirmed: - raise Exception(f"Failed test\nFiles missing copyright information: {invalid_files}") - -if __name__ == '__main__': - main() diff --git a/setup.py b/setup.py deleted file mode 100644 index cea3c002..00000000 --- a/setup.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from setuptools import setup, find_packages -import pathlib - -here = pathlib.Path(__file__).parent.resolve() - -# Get the long description from the README file -long_description = (here / 'README.md').read_text(encoding='utf-8') - -setup( - name = 'prog_algs', - version = '1.5.0', - description = "The NASA Prognostics Algorithm Package is a framework for model-based prognostics (computation of remaining useful life) of engineering systems. It includes algorithms for state estimation and prediction, including uncertainty propagation. The algorithms use prognostic models (see prog_models) to perform estimation and prediction. The package enables rapid development of prognostics solutions for given models of components and systems. Algorithms can be swapped for comparative studies and evaluations", - long_description=long_description, - long_description_content_type='text/markdown', - url = 'https://nasa.github.io/progpy/prog_algs_guide.html', - author = 'Christopher Teubert', - author_email = 'christopher.a.teubert@nasa.gov', - classifiers = [ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Science/Research', - 'Intended Audience :: Developers', - 'Intended Audience :: Manufacturing', - 'Topic :: Scientific/Engineering', - 'Topic :: Scientific/Engineering :: Artificial Intelligence', - 'Topic :: Scientific/Engineering :: Physics', - 'License :: Other/Proprietary License ', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3 :: Only' - ], - keywords = ['prognostics', 'diagnostics', 'fault detection', 'fdir', 'prognostics and health management', 'PHM', 'health management', 'ivhm'], - package_dir = {"":"src"}, - packages = find_packages(where = 'src'), - python_requires='>=3.7, <3.12', - install_requires = [ - 'numpy', - 'scipy', - 'filterpy', - 'matplotlib', - 'prog_models>=1.5.0' - ], - license = 'NOSA', - project_urls={ # Optional - 'Bug Reports': 'https://github.com/nasa/prog_algs/issues', - 'Docs': 'https://nasa.github.io/progpy/prog_algs_guide.html', - 'Organization': 'https://www.nasa.gov/content/diagnostics-prognostics', - 'Source': 'https://github.com/nasa/prog_algs', - } -) diff --git a/src/prog_algs/__init__.py b/src/prog_algs/__init__.py deleted file mode 100644 index dd5420db..00000000 --- a/src/prog_algs/__init__.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -__all__ = ['predictors', 'uncertain_data', 'state_estimators', 'run_prog_playback', 'metrics'] -from . import predictors, state_estimators, uncertain_data - -import warnings - -__version__ = '1.5.0' - -def run_prog_playback(obs, pred, future_loading, output_measurements, **kwargs): - warnings.warn("Depreciated in 1.2.0, will be removed in a future release.", DeprecationWarning) - config = {# Defaults - 'predict_rate': 0, # Default- predict every step - 'num_samples': 10, - 'predict_config': {} - } - config.update(kwargs) - - next_predict = output_measurements[0][0] + config['predict_rate'] - times = [] - inputs = [] - states = [] - outputs = [] - event_states = [] - toes = [] - index = 0 - for (t, measurement) in output_measurements: - obs.estimate(t, future_loading(t), measurement) - if t >= next_predict: - pred_results = pred.predict(obs.x.sample(config['num_samples']), future_loading, **config['predict_config']) - times.append(pred_results.times) - inputs.append(pred_results.inputs) - states.append(pred_results.states) - outputs.append(pred_results.outputs) - event_states.append(pred_results.event_states) - toes.append(pred_results.time_of_event) - index += 1 - next_predict += config['predict_rate'] - return predictors.PredictionResults( - times, - inputs, - states, - outputs, - event_states, - toes - ) diff --git a/src/prog_algs/metrics/__init__.py b/src/prog_algs/metrics/__init__.py deleted file mode 100644 index 4c39fe28..00000000 --- a/src/prog_algs/metrics/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from . import samples -from .toe_metrics import prob_success -from .uncertain_data_metrics import calc_metrics -from .toe_profile_metrics import alpha_lambda, prognostic_horizon, cumulative_relative_accuracy, monotonicity - -__all__ = ['alpha_lambda', 'calc_metrics', 'prob_success', 'prognostic_horizon', 'cumulative_relative_accuracy', 'monotonicity'] diff --git a/src/prog_algs/metrics/samples.py b/src/prog_algs/metrics/samples.py deleted file mode 100644 index bd276cd8..00000000 --- a/src/prog_algs/metrics/samples.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -# This file is kept for backwards compatability -from numpy import mean, sqrt -from warnings import warn - -from .uncertain_data_metrics import calc_metrics as eol_metrics -from .toe_metrics import prob_success -from .toe_profile_metrics import alpha_lambda - -def mean_square_error(values: list, ground_truth: float) -> float: - """Mean Square Error - Args: - values (List[float]): Times of Event (ToE) for a single event, output from predictor - ground_truth (float): Ground truth ToE - Returns: - float: mean square error of ToE predictions - """ - return sum([(mean(x) - ground_truth)**2 for x in values])/len(values) - -def root_mean_square_error(values, ground_truth): - """Root Mean Square Error - Args: - values (List[float]): Times of Event (ToE) for a single event, output from predictor - ground_truth (float): Ground truth ToE - Returns: - float: root mean square error of ToE predictions - """ - return sqrt(sum([(mean(x) - ground_truth)**2 for x in values])/len(values)) - -def percentage_in_bounds(toe: list, bounds: tuple) -> float: - """Calculate percentage of ToE dist is within specified bounds - - Args: - toe (List[float]): Times of Event (ToE) for a single event, output from predictor - bounds ((float, float)): Lower and upper bounds - - Returns: - float: Percentage within bounds (where 1 = 100%) - """ - warn('percentage_in_bounds has been deprecated in favor of UncertainData.percentage_in_bounds(bounds). This function will be removed in a future release') - return sum([x < bounds[1] and x > bounds[0] for x in toe])/ len(toe) diff --git a/src/prog_algs/metrics/toe_metrics.py b/src/prog_algs/metrics/toe_metrics.py deleted file mode 100644 index 836b70f7..00000000 --- a/src/prog_algs/metrics/toe_metrics.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This file includes functions for calculating metrics specific to Time of Event (ToE) from a single event or multiple events given the same time of prediction -""" -from typing import Iterable -from numpy import isscalar - -from ..uncertain_data import UncertainData, UnweightedSamples - -def prob_success(toe: UncertainData, time: float, **kwargs) -> float: - """Calculate probability of success - i.e., probability that event will not occur within a given time (i.e., success) - - Args: - toe (UncertainData or list[float]): Times of event for a single event (array[float]) or multiple events, output from predictor - time (float): time for calculation - **kwargs (optional): Configuration parameters. Supported parameters include: - * n_samples (int): Number of samples to use for calculating metrics (if ToE is not UnweightedSamples). Defaults to 10,000. - * keys (list of strings, optional): Keys to calculate metrics for. Defaults to all keys. - - Returns: - float: Probability of success - - Example: - :: - - # ToE estimate distribution is returned from a predictor's predict method - result = predictor.predict(...) - toe = result.time_of_event - - from prog_algs.metrics import prob_success - now = 10 # Current time - p_success = prob_success(toe, now) - p_success = prob_success(toe, now, n_samples = 100) # Can also specify number of samples - p_success = prob_success(toe, now, keys = ['event1']) # Can specify specific keys to consider - """ - params = { - 'n_samples': 10000, # Default - } - params.update(kwargs) - - if isinstance(toe, UncertainData): - # Default to all keys - keys = params.setdefault('keys', toe.keys()) - if isinstance(keys, str): - keys = [keys] - - if isinstance(toe, UnweightedSamples): - samples = toe - else: - # Some other distribution besides unweighted samples - # Generate Samples - samples = toe.sample(params['n_samples']) - - # If unweighted_samples, calculate metrics for each key - return {key: prob_success(samples.key(key), - time, - **kwargs) for key in keys} - elif isinstance(toe, Iterable): - if len(toe) == 0: - raise ValueError('Time of Event must not be empty') - # Is list or array - if isscalar(toe[0]) or toe[0] is None: - # list of numbers - this is the case that we can calculate - pass - elif isinstance(toe[0], dict): - # list of dicts - Supported for backwards compatabilities - toe = UnweightedSamples(toe) - return prob_success(toe, time, **kwargs) - else: - raise TypeError("ToE must be type Uncertain Data or array of dicts, was {}".format(type(toe))) - else: - raise TypeError("ToE must be type Uncertain Data or array of dicts, was {}".format(type(toe))) - - return sum([e is None or e > time for e in toe])/len(toe) diff --git a/src/prog_algs/metrics/toe_profile_metrics.py b/src/prog_algs/metrics/toe_profile_metrics.py deleted file mode 100644 index b39439e3..00000000 --- a/src/prog_algs/metrics/toe_profile_metrics.py +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This file includes functions for calculating metrics given a Time of Event (ToE) profile (i.e., ToE's calculated at different times of prediction resulting from running prognostics multiple times, e.g., on playback data). The metrics calculated here are specific to multiple ToE estimates (e.g. alpha-lambda metric) -""" -from numpy import sign -from collections import defaultdict -from typing import Callable, Dict - -from ..predictors import ToEPredictionProfile - -def alpha_lambda(toe_profile: ToEPredictionProfile, ground_truth: dict, lambda_value: float, alpha: float, beta: float, **kwargs) -> dict: - """ - Compute alpha lambda metric, a common metric in prognostics. Alpha-Lambda is met if alpha % of the Time to Event (TtE) distribution is within beta % of the ground truth at prediction time lambda. - - Args: - toe_profile (ToEPredictionProfile): A profile of predictions, the combination of multiple predictions - ground_truth (dict): Ground Truth time of event for each event (e.g., {'event1': 748, 'event2', 2233, ...}) - lambda_value (float): Prediction time at or after which metric is evaluated. Evaluation occurs at this time (if a prediction exists) or the next prediction following. - alpha (float): percentage bounds around time to event (where 0.2 allows 20% error TtE) - beta (float): portion of prediction that must be within those bounds - kwargs (optional): configuration arguments. Accepted args include: - * keys (list[string], optional): list of keys to use. If not provided, all keys are used. - - Returns: - dict: dictionary containing key value pairs for each key and whether the alpha-lambda was met. - """ - params = { - 'print': False - } - params.update(kwargs) - - for (t_prediction, toe) in toe_profile.items(): - if (t_prediction >= lambda_value): - # If keys not provided, use all - keys = params.setdefault('keys', toe.keys()) - - bounds = {key : [gt - alpha*(gt-t_prediction), gt + alpha*(gt-t_prediction)] for key, gt in ground_truth.items()} - pib = toe.percentage_in_bounds(bounds) - result = {key: pib[key] >= beta for key in keys} - if params['print']: - for key in keys: - print('\n', key) - print('\ttoe:', toe.key(key)) - print('\tBounds: [{} - {}]({}%)'.format(bounds[key][0], bounds[key][1], pib[key])) - return result - -def prognostic_horizon(toe_profile: ToEPredictionProfile, criteria_eqn: Callable, ground_truth: dict, **kwargs) -> dict: - """ - Compute prognostic horizon metric, defined as the difference between a time ti, when the predictions meet specified performance criteria, and the time corresponding to the true Time of Event (ToE), for each event. - PH = ToE - ti - Args: - toe_profile (ToEPredictionProfile): A profile of predictions, the combination of multiple predictions - criteria_eqn (Callable function): A function (tte: UncertainData, ground_truth_tte: dict[str, float]) -> dict[str, bool] calculating whether a prediction in ToEPredictionProfile meets some criteria. \n - | Args: - | * tte (UncertainData): A single prediction of Time of Event (ToE) - | * ground truth tte (dict[str, float]): Ground truth passed into prognostics_horizon - | Returns: Map of event names to boolean representing if the event has been met. - | e.g., {'event1': True, 'event2': False} - ground_truth (dict): Dictionary containing ground truth; specified as key, value pairs for event and its value. E.g, {'event1': 47.3, 'event2': 52.1, 'event3': 46.1} - kwargs (optional): configuration arguments. Accepted args include: - * print (bool): Boolean specifying whether the prognostic horizon metric should be printed. - - Returns: - dict: Dictionary containing prognostic horizon calculations (value) for each event (key). e.g., {'event1': 12.3, 'event2': 15.1} - """ - params = { - 'print': False - } - params.update(kwargs) - - ph_result = {k:None for k in ground_truth.keys()} # False means not yet met; will be either a numerical value or None if met - for (t_prediction, toe) in toe_profile.items(): - # Convert to TtE for toe and ground_truth - tte = toe - t_prediction - ground_truth_tte = {} - ground_truth_tte = {k:v-t_prediction for k,v in ground_truth.items()} - # Pass to criteria_eqn - criteria_eqn_dict = criteria_eqn(tte, ground_truth_tte) # -> dict[event_names as str, bool] - for k,v in criteria_eqn_dict.items(): - if v and (ph_result[k] == None): - ph_calc = ground_truth[k] - t_prediction - if ph_calc > 0: - ph_result[k] = ph_calc # PH = EOL - ti # ground truth is a dictionary {'EOD': 3005.2} should be ph_result[k] = g_truth[key] - t_prediction - if (all(v != None for v in ph_result.values())): - # Return PH once all criteria are met - return ph_result - # Return PH when criteria not met for at least one event key - return ph_result - -def cumulative_relative_accuracy(toe_profile: ToEPredictionProfile, ground_truth: dict, **kwargs) -> Dict[str, float]: - """ - Compute cumulative relative accuracy for a given profile, defined as the normalized sum of relative prediction accuracies at specific time instances. - - CRA = Σ(RA)/N for each event - Where Σ is summation of all relative accuracies for a given profile and N is the total count of profiles (Journal Prognostics Health Management, Saxena et al.) - Args: - toe_profile (ToEPredictionProfile): A profile of predictions, the combination of multiple predictions - ground_truth (dict): Dictionary containing ground truth; specified as key, value pairs for event and its value. E.g, {'event1': 47.3, 'event2': 52.1, 'event3': 46.1} - kwargs (optional): configuration arguments. Accepted args include: - - Returns: - dict: Dictionary containing cumulative relative accuracy (value) for each event (key). e.g., {'event1': 12.3, 'event2': 15.1} - """ - ra_sums = defaultdict(int) - for uncertaindata in toe_profile.values(): - for event,value in uncertaindata.relative_accuracy(ground_truth).items(): - ra_sums[event] += value - return {event:ra_sum/len(toe_profile) for event, ra_sum in ra_sums.items()} - -def monotonicity(toe_profile: ToEPredictionProfile, **kwargs) -> Dict[str, float]: - """Calculate monotonicty for a prediction profile. - Given a prediction profile, for each prediction: go through all predicted events and compare those to the next one. - Calculates monotonicity for each prediction key using its associated mean value in UncertainData. - - monotonoicity = |Σsign(i+1 - i) / N-1| - Where N is number of measurements and sign indicates sign of calculation. - Coble, J., et. al. (2021). Identifying Optimal Prognostic Parameters from Data: A Genetic Algorithms Approach. Annual Conference of the PHM Society. - http://www.papers.phmsociety.org/index.php/phmconf/article/view/1404 - Baptistia, M., et. al. (2022). Relation between prognostics predictor evaluation metrics and local interpretability SHAP values. Aritifical Intelligence, Volume 306. - https://www.sciencedirect.com/science/article/pii/S0004370222000078 - - Args: - toe_profile (ToEPredictionProfile): A profile of predictions, the combination of multiple predictions - Returns: - dict (str, float): Dictionary where keys represent an event and values are float representing its respective monotonicitiy value between [0, 1]. - """ - result = dict() - by_event = defaultdict(list) - for time,uncertaindata in toe_profile.items(): - # Collect and organize mean values for each event in the individual prediction v - for event,value in uncertaindata.mean.items(): - by_event[event].append(value - time) - # For each event of this prediction v, calculate monotonicity using formula - for key,l in by_event.items(): - mono_sum = [] - for i in range(len(l)-1): - mono_sum.append(sign(l[i+1] - l[i])) - result[key] = abs(sum(mono_sum) / (len(l)-1)) - return result diff --git a/src/prog_algs/metrics/uncertain_data_metrics.py b/src/prog_algs/metrics/uncertain_data_metrics.py deleted file mode 100644 index c85938ab..00000000 --- a/src/prog_algs/metrics/uncertain_data_metrics.py +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -""" -This file includes functions for calculating general metrics (i.e. mean, std, percentiles, etc.) on any distribution of type UncertainData (e.g. states, event_states, an EOL distribution, etc.) -""" -from typing import Iterable, Union -from numpy import isscalar, mean, std, array -from scipy import stats -from warnings import warn - -from ..uncertain_data import UncertainData, UnweightedSamples - -def calc_metrics(data: UncertainData, ground_truth: Union[float, dict] = None, **kwargs) -> dict: - """Calculate all time of event metrics - - Args: - data (array[float] or UncertainData): data from a single event - ground_truth (float, optional): Ground truth value. Defaults to None. dict when data is of type UncertainData. - **kwargs (optional): Configuration parameters. Supported parameters include: - * n_samples (int): Number of samples to use for calculating metrics (if data is not UnweightedSamples). Defaults to 10,000. - * keys (list of strings, optional): Keys to calculate metrics for. Defaults to all keys. - - Returns: - dict: collection of metrics - """ - params = { - 'n_samples': 10000, # Default is enough to get every percentile - } - params.update(kwargs) - - if isinstance(data, UncertainData): - # Default to all keys - keys = params.setdefault('keys', data.keys()) - if isinstance(keys, str): - keys = [keys] - - if ground_truth and isscalar(ground_truth): - # If ground truth is scalar, create dict (expected below) - ground_truth = {key: ground_truth for key in keys} - - if isinstance(data, UnweightedSamples): - samples = data - else: - # Some other distribution besides unweighted samples - # Generate Samples - samples = data.sample(params['n_samples']) - - # If unweighted_samples, calculate metrics for each key - result = {key: calc_metrics(samples.key(key), - ground_truth if not ground_truth else ground_truth[key], # If ground_truth is a dict, use key - **kwargs) for key in keys} - - # Set values specific to distribution - for key in keys: - result[key]['mean'] = data.mean[key] - result[key]['median'] = data.median[key] - result[key]['percentiles']['50'] = data.median[key] - - return result - elif isinstance(data, Iterable): - if len(data) == 0: - raise ValueError('Data must not be empty') - # Is list or array - if isscalar(data[0]) or data[0] is None: - # list of numbers - this is the case that we can calculate - pass - elif isinstance(data[0], dict): - # list of dicts - Supported for backwards compatabilities - data = UnweightedSamples(data) - return calc_metrics(data, ground_truth, **kwargs) - else: - raise TypeError("Data must be type Uncertain Data or array of dicts, was {}".format(type(data))) - else: - raise TypeError("Data must be type Uncertain Data or array of dicts, was {}".format(type(data))) - - # If we get here then Data is a list of numbers- calculate metrics for numbers - data_abridged = array([d for d in data if d is not None]) # Must be array - if len(data_abridged) == 0: - raise ValueError('All samples were none') - if len(data_abridged) < len(data): - warn("Some samples were None, resulting metrics only consider non-None samples. Note: in some cases, this will bias the metrics.") - data_abridged.sort() - m = mean(data_abridged) - median = data_abridged[int(len(data_abridged)/2)] - metrics = { - 'min': data_abridged[0], - 'percentiles': { - '0.01': data_abridged[int(len(data_abridged)/10000)] if len(data_abridged) >= 10000 else None, - '0.1': data_abridged[int(len(data_abridged)/1000)] if len(data_abridged) >= 1000 else None, - '1': data_abridged[int(len(data_abridged)/100)] if len(data_abridged) >= 100 else None, - '10': data_abridged[int(len(data_abridged)/10)] if len(data_abridged) >= 10 else None, - '25': data_abridged[int(len(data_abridged)/4)] if len(data_abridged) >= 4 else None, - '50': median, - '75': data_abridged[int(3*len(data_abridged)/4)] if len(data_abridged) >= 4 else None, - }, - 'median': median, - 'mean': m, - 'std': std(data_abridged), - 'max': data_abridged[-1], - 'median absolute deviation': sum([abs(x - median) for x in data_abridged])/len(data_abridged), - 'mean absolute deviation': sum([abs(x - m) for x in data_abridged])/len(data_abridged), - 'number of samples': len(data_abridged) - } - - if ground_truth is not None: - # Metrics comparing to ground truth - metrics['mean absolute error'] = sum([abs(x - ground_truth) for x in data_abridged])/len(data_abridged) - metrics['mean absolute percentage error'] = metrics['mean absolute error']/ ground_truth - metrics['relative accuracy'] = 1 - abs(ground_truth - metrics['mean'])/ground_truth - metrics['ground truth percentile'] = stats.percentileofscore(data_abridged, ground_truth) - - return metrics diff --git a/src/prog_algs/predictors/__init__.py b/src/prog_algs/predictors/__init__.py deleted file mode 100644 index 29642d4d..00000000 --- a/src/prog_algs/predictors/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from .monte_carlo import MonteCarlo -from .predictor import Predictor -from .prediction import Prediction, UnweightedSamplesPrediction, PredictionResults -from .toe_prediction_profile import ToEPredictionProfile -from .unscented_transform import UnscentedTransformPredictor - -# For naming consistancy -# Unfortunately, prog_algs was released with inconsistent naming (UnscentedTransformPredictor vs MonteCarlo). -# For naming consistency and to avoid confusion, we created aliases for the two classes. -# They can be called by the name of the method (e.g., UnscentedTranform) or with 'predictor' at the end (e.g., UnscentedTransformPredictor). -UnscentedTransform = UnscentedTransformPredictor -MonteCarloPredictor = MonteCarlo - -__all__ = ['predictor', 'monte_carlo', 'unscented_transform', 'MonteCarlo', 'Predictor', 'Prediction', 'UnweightedSamplesPrediction', 'ToEPredictionProfile', 'UnscentedTransformPredictor', 'UnscentedTransform', 'MonteCarloPredictor'] diff --git a/src/prog_algs/predictors/monte_carlo.py b/src/prog_algs/predictors/monte_carlo.py deleted file mode 100644 index 8a1bd125..00000000 --- a/src/prog_algs/predictors/monte_carlo.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from copy import deepcopy -from typing import Callable -from prog_models.sim_result import SimResult, LazySimResult -from prog_algs.uncertain_data import UnweightedSamples, UncertainData - -from .prediction import UnweightedSamplesPrediction, PredictionResults -from .predictor import Predictor - - -class MonteCarlo(Predictor): - """ - Class for performing a monte-carlo model-based prediction. - - A Predictor using the monte carlo algorithm. The provided initial states are simulated until either a specified time horizon is met, or the threshold for all simulated events is reached for all samples. A provided future loading equation is used to compute the inputs to the system at any given time point. - - The following configuration parameters are supported (as kwargs in constructor or as parameters in predict method): - - Configuration Parameters - ------------------------------ - t0 : float - Initial time at which prediction begins, e.g., 0 - dt : float - Simulation step size (s), e.g., 0.1 - events : list[str] - Events to predict (subset of model.events) e.g., ['event1', 'event2'] - horizon : float - Prediction horizon (s) - n_samples : int - Number of samples to use. If not specified, a default value is used. If state is type UnweightedSamples and n_samples is not provided, the provided unweighted samples will be used directly. - save_freq : float - Frequency at which results are saved (s) - save_pts : list[float] - Any additional savepoints (s) e.g., [10.1, 22.5] - """ - - default_parameters = { - 'n_samples': 100 # Default number of samples to use, if none specified - } - - def predict(self, state: UncertainData, future_loading_eqn: Callable, **kwargs) -> PredictionResults: - if isinstance(state, dict) or isinstance(state, self.model.StateContainer): - from prog_algs.uncertain_data import ScalarData - state = ScalarData(state, _type = self.model.StateContainer) - elif isinstance(state, UncertainData): - state._type = self.model.StateContainer - else: - raise TypeError("state must be UncertainData, dict, or StateContainer") - - params = deepcopy(self.parameters) # copy parameters - params.update(kwargs) # update for specific run - params['print'] = False - params['progress'] = False - - if len(params['events']) == 0 and 'horizon' not in params: - raise ValueError("If specifying no event (i.e., simulate to time), must specify horizon") - - # Sample from state if n_samples specified or state is not UnweightedSamples - if not isinstance(state, UnweightedSamples) or len(state) != params['n_samples']: - state = state.sample(params['n_samples']) - - es_eqn = self.model.event_state - tm_eqn = self.model.threshold_met - simulate_to_threshold = self.model.simulate_to_threshold - - time_of_event_all = [] - last_states = [] - times_all = [] - inputs_all = [] - states_all = [] - outputs_all = [] - event_states_all = [] - - # Perform prediction - t0 = params.get('t0', 0) - for x in state: - first_output = self.model.output(x) - - time_of_event = {} - last_state = {} - - params['t0'] = t0 - params['x'] = x - - if 'save_freq' in params and not isinstance(params['save_freq'], tuple): - params['save_freq'] = (params['t0'], params['save_freq']) - - if len(params['events']) == 0: # Predict to time - (times, inputs, states, outputs, event_states) = simulate_to_threshold(future_loading_eqn, - first_output, - threshold_keys = [], - **params - ) - else: - events_remaining = params['events'].copy() - - times = [] - inputs = SimResult(_copy = False) - states = SimResult(_copy = False) - outputs = LazySimResult(fcn = self.model.output, _copy = False) - event_states = LazySimResult(fcn = es_eqn, _copy = False) - - # Non-vectorized prediction - while len(events_remaining) > 0: # Still events to predict - (t, u, xi, z, es) = simulate_to_threshold(future_loading_eqn, - first_output, - threshold_keys = events_remaining, - **params - ) - - # Add results - times.extend(t) - inputs.extend(u) - states.extend(xi) - outputs.extend(z, _copy = False) - event_states.extend(es, _copy = False) - - # Get which event occurs - t_met = tm_eqn(states[-1]) - t_met = {key: t_met[key] for key in events_remaining} # Only look at remaining keys - - try: - event = list(t_met.keys())[list(t_met.values()).index(True)] - except ValueError: - # no event has occured - hit horizon - for event in events_remaining: - time_of_event[event] = None - last_state[event] = None - break - - # An event has occured - time_of_event[event] = times[-1] - events_remaining.remove(event) # No longer an event to predect to - - # Remove last state (event) - params['t0'] = times.pop() - inputs.pop() - params['x'] = states.pop() - last_state[event] = params['x'].copy() - outputs.pop() - event_states.pop() - - # Add to "all" structures - if len(times) > len(times_all): # Keep longest - times_all = times - inputs_all.append(inputs) - states_all.append(states) - outputs_all.append(outputs) - event_states_all.append(event_states) - time_of_event_all.append(time_of_event) - last_states.append(last_state) - - inputs_all = UnweightedSamplesPrediction(times_all, inputs_all) - states_all = UnweightedSamplesPrediction(times_all, states_all) - outputs_all = UnweightedSamplesPrediction(times_all, outputs_all) - event_states_all = UnweightedSamplesPrediction(times_all, event_states_all) - time_of_event = UnweightedSamples(time_of_event_all) - - # Transform final states: - time_of_event.final_state = { - key: UnweightedSamples([sample[key] for sample in last_states], _type = self.model.StateContainer) for key in time_of_event.keys() - } - - return PredictionResults( - times_all, - inputs_all, - states_all, - outputs_all, - event_states_all, - time_of_event - ) diff --git a/src/prog_algs/predictors/prediction.py b/src/prog_algs/predictors/prediction.py deleted file mode 100644 index 6fb55697..00000000 --- a/src/prog_algs/predictors/prediction.py +++ /dev/null @@ -1,171 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from collections import UserList, defaultdict, namedtuple -from typing import Dict, List -from numpy import sign -from warnings import warn - -from ..uncertain_data import UnweightedSamples, UncertainData - -PredictionResults = namedtuple('PredictionResults', ["times", "inputs", "states", "outputs", "event_states", "time_of_event"]) - - -class Prediction(): - """ - Class for the result of a prediction. Is returned by the predict method of a predictor. - - Args: - times (list[float]): - Times for each data point where times[n] corresponds to data[n] - data (list[UncertainData]): - Data points for each time in times - """ - - def __init__(self, times : list, data : list): - self.times = times - self.data = data - - def __eq__(self, other: "Prediction") -> bool: - """Compare 2 Predictions - - Args: - other (Prediction): - - Returns: - bool: If the two Predictions are equal - """ - return self.times == other.times and self.data == other.data - - def snapshot(self, time_index: int) -> UncertainData: - """Get all samples from a specific timestep - - Args: - index (int): - Timestep (index number from times) - - Returns: - UncertainData: Distribution for time corresponding to times[timestep] - """ - return self.data[time_index] - - @property - def mean(self) -> List[dict]: - """Estimate of the mean value of the prediction at each time - - Returns: - list[dict]: - Mean value of the prediction at each time where mean[n] corresponds to the mean value of the prediction at time times[n].\n - The mean value at each time is a dictionary. \n - e.g., [{'state1': 1.2, 'state2': 1.3, ...}, ...] - - Example: - mean_value = data.mean - """ - return [dist.mean for dist in self.data] - - def time(self, index: int): - warn("Deprecated. Please use prediction.times[index] instead.") - return self.times[index] - - def monotonicity(self) -> Dict[str, float]: - """Calculate monotonicty for a single prediction. - Given a single prediction, for each event: go through all predicted states and compare those to the next one. - Calculates monotonicity for each event key using its associated mean value in UncertainData. - - :math:`monotonoicity = \| \Sigma \dfrac{sign(i+1 - i)}{N-1}\|` - - Where N is number of measurements and sign indicates sign of calculation [0]_ [1]_. - - Returns: - dict (str, float): Value between [0, 1] indicating monotonicity of a given event for the Prediction. - - References: - .. [0] Coble, J., et. al. (2021). Identifying Optimal Prognostic Parameters from Data: A Genetic Algorithms Approach. Annual Conference of the PHM Society. http://www.papers.phmsociety.org/index.php/phmconf/article/view/1404 - .. [1] Baptistia, M., et. al. (2022). Relation between prognostics predictor evaluation metrics and local interpretability SHAP values. Aritifical Intelligence, Volume 306. https://www.sciencedirect.com/science/article/pii/S0004370222000078 - - """ - # Collect and organize mean values for each event - by_event = defaultdict(list) - for uncertaindata in self.data: - for key,value in uncertaindata.mean.items(): - by_event[key].append(value) - - # For each event, calculate monotonicity using formula - result = {} - for key,l in by_event.items(): - mono_sum = [] - for i in range(len(l)-1): - mono_sum.append(sign(l[i+1] - l[i])) - result[key] = abs(sum(mono_sum) / (len(l)-1)) - return result - -class UnweightedSamplesPrediction(Prediction, UserList): - """ - Immutable data class for the result of a prediction, where the predictions are stored as UnweightedSamples. Is returned from the predict method of a sample based prediction class (e.g., MonteCarlo). Objects of this class can be iterated and accessed like a list (e.g., prediction[0]), where prediction[n] represents a profile for sample n. - - Args: - times (list[float]): - Times for each data point where times[n] corresponds to data[:][n] - data (list[SimResult]): - Data points where data[n] is a SimResult for sample n - """ - - def __init__(self, times: list, data: list): - super(UnweightedSamplesPrediction, self).__init__(times, data) - self.__transformed = False # If transform has been calculated - - def __calculate_tranform(self): - """ - Calculate tranform of the data from data[sample_id][time_id] to data[time_id][sample_id]. Result is cached as self.__transform and is used in methods which look at a snapshot for a specific time - """ - # Lazy calculation of tranform - only if needed - # Note: prediction stops when event is reached, so for the length of all will not be the same. - # If the prediction doesn't go this far, then the value is set to None - self.__transform = [UnweightedSamples([sample[time_index] if len(sample) > time_index else None for sample in self.data]) for time_index in range(len(self.times))] - self.__transformed = True - - def __str__(self) -> str: - return "UnweightedSamplesPrediction with {} savepoints".format(len(self.times)) - - @property - def mean(self) -> list: - if not self.__transformed: - self.__calculate_tranform() - return [dist.mean for dist in self.__transform] - - def sample(self, sample_id: int): - warn("Deprecated. Please use prediction[sample_id] instead.") - return self[sample_id] - - def snapshot(self, time_index: int) -> UnweightedSamples: - """Get all samples from a specific timestep - - Args: - index (int): Timestep (index number from times) - - Returns: - UnweightedSamples: Samples for time corresponding to times[timestep] - """ - if not self.__transformed: - self.__calculate_tranform() - return self.__transform[time_index] - - def __not_implemented(self, *args, **kw): - """ - This function is not implemented. Calling this will raise an error. Is is only included to make the class immutable. - - Raises: - ValueError: - """ - raise ValueError("UnweightedSamplesPrediction is immutable (i.e., read only)") - - append = __not_implemented - extend = __not_implemented - clear = __not_implemented - reverse = __not_implemented - remove = __not_implemented - insert = __not_implemented - pop = __not_implemented - __setitem__ = __not_implemented - __setslice__ = __not_implemented - __delitem__ = __not_implemented diff --git a/src/prog_algs/predictors/predictor.py b/src/prog_algs/predictors/predictor.py deleted file mode 100644 index 2fc06c5a..00000000 --- a/src/prog_algs/predictors/predictor.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from abc import ABC, abstractmethod -from copy import deepcopy -from typing import Callable - -from prog_algs.predictors.prediction import PredictionResults -from ..uncertain_data import UncertainData - - -class Predictor(ABC): - """ - Interface class for predictors - - Abstract base class for creating predictors that perform prediction. Predictor subclasses must implement this interface. Equivilant to "Predictors" in NASA's Matlab Prognostics Algorithm Library - - Parameters - ---------- - model : PrognosticsModel - See: :py:mod:`prog_models` package\n - A prognostics model to be used in prediction - kwargs : optional, keyword arguments - """ - default_parameters = {} - - def __init__(self, model, **kwargs): - if not hasattr(model, 'output'): - raise NotImplementedError("model must have `output` method") - if not hasattr(model, 'next_state'): - raise NotImplementedError("model must have `next_state` method") - if not hasattr(model, 'inputs'): - raise NotImplementedError("model must have `inputs` property") - if not hasattr(model, 'outputs'): - raise NotImplementedError("model must have `outputs` property") - if not hasattr(model, 'states'): - raise NotImplementedError("model must have `states` property") - if not hasattr(model, 'simulate_to_threshold'): - raise NotImplementedError("model must have `simulate_to_threshold` property") - self.model = model - - self.parameters = deepcopy(self.default_parameters) - self.parameters['events'] = self.model.events.copy() # Events to predict to - self.parameters.update(kwargs) - - @abstractmethod - def predict(self, state: UncertainData, future_loading_eqn: Callable, **kwargs) -> PredictionResults: - """ - Perform a single prediction - - Parameters - ---------- - state : UncertainData - Distribution representing current state of the system - future_loading_eqn : function (t, x) -> z - Function to generate an estimate of loading at future time t, and state x - - Return - ---------- - result from prediction, including: NameTuple - * times (List[float]): Times for each savepoint such that inputs.snapshot(i), states.snapshot(i), outputs.snapshot(i), and event_states.snapshot(i) are all at times[i] - * inputs (Prediction): Inputs at each savepoint such that inputs.snapshot(i) is the input distribution (type UncertainData) at times[i] - * states (Prediction): States at each savepoint such that states.snapshot(i) is the state distribution (type UncertainData) at times[i] - * outputs (Prediction): Outputs at each savepoint such that outputs.snapshot(i) is the output distribution (type UncertainData) at times[i] - * event_states (Prediction): Event states at each savepoint such that event_states.snapshot(i) is the event state distribution (type UncertainData) at times[i] - * time_of_event (UncertainData): Distribution of predicted Time of Event (ToE) for each predicted event, represented by some subclass of UncertaintData (e.g., MultivariateNormalDist) - """ - pass diff --git a/src/prog_algs/predictors/toe_prediction_profile.py b/src/prog_algs/predictors/toe_prediction_profile.py deleted file mode 100644 index 43106978..00000000 --- a/src/prog_algs/predictors/toe_prediction_profile.py +++ /dev/null @@ -1,189 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -import matplotlib.pyplot as plt -from collections import UserDict -from typing import Dict -import numpy as np - -from prog_algs.uncertain_data import UncertainData - -class ToEPredictionProfile(UserDict): - """ - Data structure for storing the result of multiple predictions, including time of prediction. This data structure can be treated as a dictionary of time of prediction to Time of Event (ToE) prediction. Iteration of this data structure is in order of increasing time of prediction - """ - def add_prediction(self, time_of_prediction: float, toe_prediction: UncertainData): - """Add a single prediction to the profile - - Args: - time_of_prediction (float): Time that the prediction was made - toe_prediction (UncertainData): Distribution of predicted ToEs - """ - self[time_of_prediction] = toe_prediction - - # Functions below are defined to ensure that any iteration is in order of increasing time of prediction - def __iter__(self): - return iter(sorted(super(ToEPredictionProfile, self).__iter__())) - - def items(self): - """ - Get iterators for the items (time_of_prediction, toe_prediction) of the prediction profile - """ - return iter((k, self[k]) for k in self) - - def keys(self): - """ - Get iterator for the keys (i.e., time_of_prediction) of the prediction profile - """ - return sorted(super(ToEPredictionProfile, self).keys()) - - def values(self): - """ - Get iterator for the values (i.e., toe_prediction) of the prediction profile - """ - return [self[k] for k in self.keys()] - - def alpha_lambda(self, ground_truth: Dict[str, float], lambda_value: float, alpha: float, beta: float, **kwargs) -> Dict[str, bool]: - """Calculate Alpha lambda metric for the prediction profile - - Args: - ground_truth (dict[str, float]): - Ground Truth time of event for each event (e.g., {'event1': 748, 'event2', 2233, ...}) - lambda_value (float): - Prediction time at or after which metric is evaluated. Evaluation occurs at this time (if a prediction exists) or the next prediction following. - alpha (float): - percentage bounds around time to event (where 0.2 allows 20% error TtE) - beta (float): - portion of prediction that must be within those bounds - - Keyword Args: - keys (list[str], optional): - list of keys to use. If not provided, all keys are used. - print (bool, optional) - If True, print the results to the screen. Default is False. - - Returns: - dict[str, bool]: If alpha lambda was met for each key (e.g., {'event1': True, 'event2', False, ...}) - """ - from ..metrics import alpha_lambda - return alpha_lambda(self, ground_truth, lambda_value, alpha, beta, **kwargs) - - def prognostic_horizon(self, criteria_eqn, ground_truth, **kwargs) -> Dict[str, float]: - """ - Compute prognostic horizon metric, defined as the difference between a time ti, when the predictions meet specified performance criteria, and the time corresponding to the true Time of Event (ToE), for each event. - - :math:`PH = ToE - ti` - - Args: - toe_profile (ToEPredictionProfile): A profile of predictions, the combination of multiple predictions - criteria_eqn (Callable function): A function (toe: UncertainData, ground_truth: dict[str, float]) -> dict[str, bool] calculating whether a prediction in ToEPredictionProfile meets some criteria. \n - | Args: - | * toe (UncertainData): A single prediction of Time of Event (ToE) - | * ground truth (dict[str, float]): Ground truth passed into prognostics_horizon - | Returns: Map of event names to boolean representing if the event has been met. - | e.g., {'event1': True, 'event2': False} - ground_truth (dict): Dictionary containing ground truth; specified as key, value pairs for event and its value. E.g, {'event1': 47.3, 'event2': 52.1, 'event3': 46.1} - - Keyword Args: - print (bool): - Boolean specifying whether the prognostic horizon metric should be printed. - - Returns: - dict: Dictionary containing prognostic horizon calculations (value) for each event (key). e.g., {'event1': 12.3, 'event2': 15.1} - """ - from ..metrics import prognostic_horizon - return prognostic_horizon(self, criteria_eqn, ground_truth, **kwargs) - - def cumulative_relative_accuracy(self, ground_truth, **kwargs) -> Dict[str, float]: - r""" - Compute cumulative relative accuracy for a given profile, defined as the normalized sum of relative prediction accuracies at specific time instances. - - :math:`CRA = \Sigma \left( \dfrac{RA}{N} \right)` for each event - - Where :math:`\Sigma` is summation of all relative accuracies for a given profile and N is the total count of profiles [0]_ - - Args: - ground_truth (dict): Dictionary containing ground truth; specified as key, value pairs for event and its value. E.g, {'event1': 47.3, 'event2': 52.1, 'event3': 46.1} - - Returns: - dict: Dictionary containing cumulative relative accuracy (value) for each event (key). e.g., {'event1': 12.3, 'event2': 15.1} - - References: - .. [0] Journal Prognostics Health Management, Saxena et al. - """ - from ..metrics import cumulative_relative_accuracy - return cumulative_relative_accuracy(self, ground_truth, **kwargs) - - def monotonicity(self, **kwargs) -> Dict[str, float]: - r"""Calculate monotonicty for a prediction profile. - Given a prediction profile, for each prediction: go through all predicted states and compare those to the next one. - Calculates monotonicity for each prediction key using its associated mean value in :py:class:`prog_algs.uncertain_data.UncertainData`. - - :math:`monotonoicity = \|\Sigma \left( \dfrac{sign(i+1 - i)}{N-1} \right) \|` - - Where N is number of measurements and sign indicates sign of calculation. [0]_ [1]_ - - Args: - toe_profile (ToEPredictionProfile): A profile of predictions, the combination of multiple predictions - - Returns: - dict (str, dict): Dictionary where keys represent a profile and dict is a subdictionary representing an event and its respective monotonicitiy value between [0, 1]. - - References: - .. [1] Coble, J., et. al. (2021). Identifying Optimal Prognostic Parameters from Data: A Genetic Algorithms Approach. Annual Conference of the PHM Society. http://www.papers.phmsociety.org/index.php/phmconf/article/view/1404 - .. [2] Baptistia, M., et. al. (2022). Relation between prognostics predictor evaluation metrics and local interpretability SHAP values. Aritifical Intelligence, Volume 306. https://www.sciencedirect.com/science/article/pii/S0004370222000078 - """ - from ..metrics import monotonicity - return monotonicity(self, **kwargs) - - def plot(self, ground_truth: dict = None , alpha: float = None, show: bool = True) -> dict: # use ground truth, alpha if given, - """Produce an alpha-beta plot depicting the TtE distribution by time of prediction for each event. - - Args: - ground_truth (dict): - Optional dictionary argument containing event and its respective ground truth value; none by default and plotted if specified - alpha (float): - Optional alpha value; none by default and plotted if specified - show (bool): - Optional bool value; specify whether to display generated plots. Default is true - - Returns: - dict[str, Figure] : - Collection of generated matplotlib figures for each event in profile\n - e.g., {'event1': Fig, 'event2': Fig} - - Example: - :: - - gt = {'event1': 3442, 'event2': 175} # Ground Truth - figs = profile.plot(gt) # Figure with ground truth line - figs = profile.plot(gt, alpha = 0.2) # Figure with ground truth line and 20% alpha bounds - figs = profile.plot(gt, alpha = 0.2, show=False) # Dont display figure - """ - result_figs = {} - for t,v in self.items(): - raw_samples = v.sample(100) # sample distribution (red scatter plot) - for key in v.keys(): - if key not in result_figs: - # Prepare Figure for Plot - fig_window = plt.figure() # Create new figure for this event key - fig_sub = fig_window.subplots() - fig_sub.grid() - fig_sub.set_title(f"{key} Event") - fig_sub.set_xlabel('Time of Prediction (s)') # time to prediction - fig_sub.set_ylabel('Time to Event (s)') # time to event - result_figs[key] = fig_window - # Create scatter plot for this event - samples = [e[key]-t for e in raw_samples] - result_figs[key].get_axes()[0].scatter([t]*len(samples), samples, color='red') # Adding single distribution of estimates - - if ground_truth: # If ground_truth is specified, add ground_truth to each event plot (green line) - for key, val in ground_truth.items(): - gt_x = range(int(val)) - gt_y = range(int(val), 0, -1) - result_figs[key].get_axes()[0].plot(gt_x, gt_y, color='green') - if alpha: # if ground_truth and alpha are specified, add alpha bounds (faded green highlight) - result_figs[key].get_axes()[0].fill_between(gt_x, np.array(gt_y)*(1-alpha), np.array(gt_y)*(1+alpha), color='green', alpha=0.2) - result_figs[key].get_axes()[0].set_xlim(0, val+1) - - if show: # Optionally not display plots and just return plot objects - plt.show() - return result_figs diff --git a/src/prog_algs/predictors/unscented_transform.py b/src/prog_algs/predictors/unscented_transform.py deleted file mode 100644 index b1b52be6..00000000 --- a/src/prog_algs/predictors/unscented_transform.py +++ /dev/null @@ -1,283 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from copy import deepcopy -from filterpy import kalman -from numpy import diag, array, transpose, isnan -from typing import Callable - -from .prediction import Prediction, UnweightedSamplesPrediction, PredictionResults -from .predictor import Predictor -from prog_algs.uncertain_data import MultivariateNormalDist, UncertainData, ScalarData - - -class LazyUTPrediction(Prediction): - def __init__(self, state_prediction, sigma_fcn : Callable, ut_fcn : Callable, transform_fcn : Callable): - self.times = state_prediction.times - self.__states = state_prediction - self.__data = None - self.__sigma_fcn = sigma_fcn - self.__transform = transform_fcn - self.__ut_fcn = ut_fcn - - @property - def data(self): - if self.__data == None: - self.__data = [] - # For each timepoint - for i in range(len(self.times)): - x = self.__states.snapshot(i) - - # Get Sigma points - keys = x.keys() - mean = [x.mean[key] for key in keys] # Maintain ordering - covar = x.cov - sigma_pts = self.__sigma_fcn.sigma_points(mean, covar) - - # Apply Tranformation (e.g., output, event_state) - sigma_pt_tranformed = [ - self.__transform({key: value for key, value in zip(keys, sigma_pt)}) - for sigma_pt in sigma_pts - ] - # result is [sigma_pt][ -> output/event_state (dict)] - - transformed_keys = sigma_pt_tranformed[0].keys() - - # Flatten - sigma_pt_tranformed = array([array(list(sigma_pt.values())) for sigma_pt in sigma_pt_tranformed]) # map -> array - - # Apply Unscented Transform to form output distribution - mean, cov = self.__ut_fcn(sigma_pt_tranformed, self.__sigma_fcn.Wm, self.__sigma_fcn.Wc) - self.__data.append(MultivariateNormalDist(transformed_keys, mean, cov)) - - return self.__data - - -class UnscentedTransformPredictor(Predictor): - """ - Class for performing model-based prediction using an unscented transform. - - This class defines logic for performing model-based state prediction using sigma points and an unscented transform. The Unscented Transform Predictor propagates the sigma-points in the state-space in time domain until the event threshold is met. The step at which the i-th sigma point reaches the threshold is the step at which the i-th sigma point will be placed along the time dimension. By repeating the procedure for all sigma-points, we obtain the sigma-points defining the distribution of the time of event (ToE); for example, the End Of Life (EOL) event. The provided future loading equation is used to compute the inputs to the system at any given time point. - - The following configuration parameters are supported (as kwargs in constructor or as parameters in predict method): - - Configuration Parameters - ------------------------------ - alpha, beta, kappa: float - UKF Scaling parameters. See: https://en.wikipedia.org/wiki/Kalman_filter#Unscented_Kalman_filter - Q: np.array - Process noise covariance matrix [nStates x nStates] - t0 : float - Initial time at which prediction begins, e.g., 0 - dt : float - Simulation step size (s), e.g., 0.1 - events : list[str] - Events to predict (subset of model.events) e.g., ['event1', 'event2'] - horizon : float - Prediction horizon (s) - save_freq : float - Frequency at which results are saved (s) - save_pts : list[float] - Any additional savepoints (s) e.g., [10.1, 22.5] - - Note - ---- - The resulting sigma-points along the time dimension are used to compute mean and covariance of the event time (ToE), under the hypothesis that the ToE distribution would also be well represented by a Gaussian. This is a strong assumption that likely cannot be satisfied for real systems with strong non-linear state propagation or nonlinear ToE curves. Therefore, the user should be cautious and verify that modeling the event time using a Gaussian distribution is satisfactory. - """ - default_parameters = { - 'alpha': 1, - 'beta': 0, - 'kappa': -1, - 't0': 0, - 'dt': 0.5, - 'horizon': 1e99, - 'save_pts': [], - 'save_freq': 1e99 - } - - def __init__(self, model, **kwargs): - super().__init__(model, **kwargs) - - self.model = model - self.__input = None # Input at an individual step. Note, this needs to be a member to pass between state_transition and predict - - # setup UKF - num_states = model.n_states - num_measurements = model.n_outputs - - if 'Q' not in self.parameters: - # Default - self.parameters['Q'] = diag([1.0e-8 for _ in range(num_states)]) - - def measure(x): - x = model.StateContainer(x) - z = model.output(x) - return model.OutputContainer(z) - - def state_transition(x, dt): - x = model.StateContainer(x) - x = model.next_state(x, self.__input, dt) - x = model.apply_limits(x) - return array(list(x.values())) - - self.sigma_points = kalman.MerweScaledSigmaPoints(num_states, alpha=self.parameters['alpha'], beta=self.parameters['beta'], kappa=self.parameters['kappa']) - self.filter = kalman.UnscentedKalmanFilter(num_states, num_measurements, self.parameters['dt'], measure, state_transition, self.sigma_points) - self.filter.Q = self.parameters['Q'] - - def predict(self, state, future_loading_eqn: Callable, **kwargs) -> PredictionResults: - """ - Perform a single prediction - - Parameters - ---------- - state (UncertaintData): Distribution of states - future_loading_eqn : function (t, x={}) -> z - Function to generate an estimate of loading at future time t - options (optional, kwargs): configuration options\n - Any additional configuration values. Note: These parameters can also be specified in the predictor constructor. The following configuration parameters are supported: \n - * alpha, beta, kappa: UKF Scaling parameters - * t0: Starting time (s) - * dt : Step size (s) - * horizon : Prediction horizon (s) - * events : List of events to be predicted (subset of model.events, default is all events) - - Returns (PredictionResults) - ------- - times: [number] - Times for each simulated point in format times[index] - inputs: [[dict]] - Future input (from future_loading_eqn) for each sample and time in times - where inputs[sample_id][index] corresponds to time times[sample_id][index] - states: [[dict]] - Estimated states for each sample and time in times - where states[sample_id][index] corresponds to time times[sample_id][index] - outputs: [[dict]] - Estimated outputs for each sample and time in times - where outputs[sample_id][index] corresponds to time times[sample_id][index] - event_states: [[dict]] - Estimated event state (e.g., SOH), between 1-0 where 0 is event occurance, for each sample and time in times - where event_states[sample_id][index] corresponds to time times[sample_id][index] - time_of_event: UncertainData - Estimated time where a predicted event will occur for each sample. Note: Mean and Covariance Matrix will both - be nan if every sigma point doesnt reach threshold within horizon - Also, includes member final_state (time_of_event.final_state) which is the state at the last time step. - time_of_event.final_state is a dict of the form {'state_name': state_value}, is equal to None if event does not occur within horizon - """ - if isinstance(state, dict) or isinstance(state, self.model.StateContainer) or isinstance(state, ScalarData): - raise TypeError("state must be a distribution (e.g., MultivariateNormalDist, UnweightedSamples), not scalar") - elif isinstance(state, UncertainData): - state._type = self.model.StateContainer - else: - raise TypeError("state must be UncertainData, dict, or StateContainer") - - params = deepcopy(self.parameters) # copy parameters - params.update(kwargs) # update for specific run - - if len(params['events']) == 0 and 'horizon' not in params: - raise ValueError("If specifying no event (i.e., simulate to time), must specify horizon") - - # Optimizations - events_to_predict = params['events'] - dt = params['dt'] - model = self.model - filt = self.filter - sigma_points = self.sigma_points - n_points = sigma_points.num_sigmas() - threshold_met = model.threshold_met - StateContainer = model.StateContainer - - # Update State - self.__state_keys = state_keys = state.mean.keys() # Used to maintain ordering as we strip keys and return - filt.x = [x for x in state.mean.values()] - filt.P = state.cov - - # Setup first states - t = params['t0'] - save_pt_index = 0 - ToE = {key: [float('nan') for i in range(n_points)] for key in events_to_predict} # Keep track of final ToE values - last_state = {key: [None for i in range(n_points)] for key in events_to_predict} # Keep track of final state values - - times = [] - inputs = [] - states = [] - save_freq = params['save_freq'] - next_save = t + save_freq - save_pts = params['save_pts'] - save_pts.append(1e99) # Add last endpoint - def update_all(): - times.append(t) - inputs.append(deepcopy(self.__input)) # Avoid optimization where u is not copied - x_dict = MultivariateNormalDist(self.__state_keys, filt.x, filt.P, _type = self.model.StateContainer) - states.append(x_dict) # Avoid optimization where x is not copied - - # Simulation - self.__input = future_loading_eqn(t, state.mean) - update_all() # First State - while t < params['horizon']: - # Iterate through time - t += dt - mean_state = StateContainer({key: x for (key, x) in zip(state_keys, filt.x)}) - self.__input = future_loading_eqn(t, mean_state) - filt.predict(dt=dt) - - # Record States - if (t >= next_save): - next_save += save_freq - update_all() - if (t >= save_pts[save_pt_index]): - save_pt_index += 1 - update_all() - - # Check that any sigma point has hit event - points = sigma_points.sigma_points(filt.x, filt.P) - all_failed = True - for i, point in zip(range(n_points), points): - # x = StateContainer({key: x for (key, x) in zip(state_keys, point)}) - x = StateContainer(point) - t_met = threshold_met(x) - - # Check Thresholds - for key in events_to_predict: - if t_met[key]: - if isnan(ToE[key][i]): - # First time event has been reached - ToE[key][i] = t - last_state[key][i] = x.copy() - else: - all_failed = False # This event for this sigma point hasn't been met yet - if all_failed: - # If all events have been reched for every sigma point - break - - # Prepare Results - pts = array([[e for e in ToE[key]] for key in ToE.keys()]) - pts = transpose(pts) - mean, cov = kalman.unscented_transform(pts, sigma_points.Wm, sigma_points.Wc) - - # Transform final state into {event_name: MultivariateNormalDist} - final_state = {} - for event_key in last_state.keys(): - if any([last_state_i is None for last_state_i in last_state[event_key]]): - # If any sigma point has not met the event threshold - final_state[event_key] = None - continue - last_state_pts = array([[last_state_i[state_key] for state_key in state_keys] for last_state_i in last_state[event_key]]) - # last_state_pts = transpose(last_state_pts) - last_state_mean, last_state_cov = kalman.unscented_transform(last_state_pts, sigma_points.Wm, sigma_points.Wc) - final_state[event_key] = MultivariateNormalDist(state_keys, last_state_mean, last_state_cov, _type = self.model.StateContainer) - - # At this point only time of event, inputs, and state are calculated - inputs_prediction = UnweightedSamplesPrediction(times, [inputs]) - state_prediction = Prediction(times, states) - output_prediction = LazyUTPrediction(state_prediction, sigma_points, kalman.unscented_transform, model.output) - event_state_prediction = LazyUTPrediction(state_prediction, sigma_points, kalman.unscented_transform, model.event_state) - time_of_event = MultivariateNormalDist(ToE.keys(), mean, cov) - time_of_event.final_state = final_state - return PredictionResults( - times, - inputs_prediction, - state_prediction, - output_prediction, - event_state_prediction, - time_of_event - ) - \ No newline at end of file diff --git a/src/prog_algs/state_estimators/__init__.py b/src/prog_algs/state_estimators/__init__.py deleted file mode 100644 index 4c034066..00000000 --- a/src/prog_algs/state_estimators/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from .kalman_filter import KalmanFilter -from .particle_filter import ParticleFilter -from .state_estimator import StateEstimator -from .unscented_kalman_filter import UnscentedKalmanFilter -__all__ = ['KalmanFilter', 'state_estimator', 'StateEstimator', 'unscented_kalman_filter', 'UnscentedKalmanFilter', 'particle_filter', 'ParticleFilter'] diff --git a/src/prog_algs/state_estimators/kalman_filter.py b/src/prog_algs/state_estimators/kalman_filter.py deleted file mode 100644 index 417ab45c..00000000 --- a/src/prog_algs/state_estimators/kalman_filter.py +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from copy import deepcopy -from filterpy import kalman -import numpy as np -from warnings import warn - -from prog_models import LinearModel - -from . import state_estimator -from ..uncertain_data import MultivariateNormalDist, UncertainData - -class KalmanFilter(state_estimator.StateEstimator): - """ - A Kalman Filter (KF) for state estimation - - This class defines the logic for performing a kalman filter with a LinearModel (see Prognostics Model Package). This filter uses measurement data with noise to generate a state estimate and covariance matrix. - - The supported configuration parameters (keyword arguments) for UKF construction are described below: - - Args: - model (PrognosticsModel): - A prognostics model to be used in state estimation - See: Prognostics Model Package - x0 (UncertainData, model.StateContainer, or dict): - Initial (starting) state, with keys defined by model.states \n - e.g., x = ScalarData({'abc': 332.1, 'def': 221.003}) given states = ['abc', 'def'] - - Keyword Args: - alpha (float, optional): - KF Scaling parameter. An alpha > 1 turns this into a fading memory filter. - t0 (float, optional): - Starting time (s) - dt (float, optional): - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - Q (list[list[float]], optional): - Kalman Process Noise Matrix - R (list[list[float]], optional): - Kalman Measurement Noise Matrix - """ - default_parameters = { - 'alpha': 1, - 't0': -1e-10, - 'dt': 1 - } - - def __init__(self, model, x0, **kwargs): - # Note: Measurement equation kept in constructor to keep it consistent with other state estimators. This way measurement equation can be provided as an ordered argument, and will just be ignored here - if not isinstance(model, LinearModel): - raise Exception('Kalman Filter only supports Linear Models (i.e., models derived from prog_models.LinearModel)') - - super().__init__(model, x0, **kwargs) - - self.x0 = x0 - - if 'Q' not in self.parameters: - self.parameters['Q'] = np.diag([1.0e-3 for i in x0.keys()]) - if 'R' not in self.parameters: - # Size of what's being measured (not output) - # This is determined by running the measure function on the first state - self.parameters['R'] = np.diag([1.0e-3 for i in range(model.n_outputs)]) - - num_states = len(x0.keys()) - num_inputs = model.n_inputs + 1 - num_measurements = model.n_outputs - F = deepcopy(model.A) - B = deepcopy(model.B) - if np.size(B) == 0: - # If B is empty, replace with E. - # Append wont work if B is empty - B = deepcopy(model.E) - else: - B = np.append(B, deepcopy(model.E), 1) - - self.filter = kalman.KalmanFilter(num_states, num_measurements, num_inputs) - - self.__state_keys = list(x0.keys()) - if isinstance(x0, dict) or isinstance(x0, model.StateContainer): - warn("Warning: Use UncertainData type if estimating filtering with uncertain data.") - self.filter.x = np.array([[x0[key]] for key in model.states]) # x0.keys() - self.filter.P = self.parameters['Q'] / 10 - elif isinstance(x0, UncertainData): - x_mean = x0.mean - self.filter.x = np.array([[x_mean[key]] for key in model.states]) - - # Reorder covariance to be in same order as model.states - mapping = {i: list(x0.keys()).index(key) for i, key in enumerate(model.states)} - cov = x0.cov # Set covariance in case it has been calculated - mapped_cov = [[cov[mapping[i]][mapping[j]] for j in range(len(cov))] for i in range(len(cov))] # Set covariance based on mapping - self.filter.P = np.array(mapped_cov) - else: - raise TypeError("TypeError: x0 initial state must be of type {{dict, UncertainData}}") - - self.filter.Q = self.parameters['Q'] - self.filter.R = self.parameters['R'] - self.filter.F = F - self.filter.B = B - - def estimate(self, t: float, u, z, **kwargs): - """ - Perform one state estimation step (i.e., update the state estimate) - - Parameters - ---------- - t : double - Current timestamp in seconds (≥ 0.0) - e.g., t = 3.4 - u : dict - Measured inputs, with keys defined by model.inputs. - e.g., u = {'i':3.2} given inputs = ['i'] - z : dict - Measured outputs, with keys defined by model.outputs. - e.g., z = {'t':12.4, 'v':3.3} given inputs = ['t', 'v'] - - Keyword Arguments - ----------------- - dt : float, optional - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - """ - assert t > self.t, "New time must be greater than previous" - dt = kwargs.get('dt', self.parameters['dt']) - dt = min(t - self.t, dt) # Ensure dt is not larger than the maximum time step - # Create u array, ensuring order of model.inputs. And reshaping to (n,1), n can be 0. - inputs = np.array([u[key] for key in self.model.inputs]).reshape((-1,1)) - - # Add row of ones (to account for constant E term) - if np.size(inputs) == 0: - inputs = np.array([[1]]) - else: - inputs = np.append(inputs, [[1]], 0) - - # Update equations - # prog_models is dx = Ax + Bu + E - # kalman_models is x' = Fx + Bu, where x' is the next state - # Therefore we need to add the diagnol matrix 1 to A to convert - # And A and B should be multiplied by the time step - B = np.multiply(self.filter.B, dt) - F = np.multiply(self.filter.F, dt) + np.diag([1]* self.model.n_states) - - # Predict - while self.t < t : - self.filter.predict(u = inputs, B = B, F = F) - self.t += dt - - # Create z array, ensuring order of model.outputs - outputs = np.array([z[key] for key in self.model.outputs]) - - # Subtract D from outputs - # This is done because prog_models expects the form: - # z = Cx + D - # While kalman expects - # z = Cx - outputs = outputs - self.model.D - - self.filter.update(outputs, H=self.model.C) - - @property - def x(self) -> MultivariateNormalDist: - """ - Getter for property 'x', the current estimated state. - - Example - ------- - state = observer.x - """ - return MultivariateNormalDist(self.model.states, self.filter.x.ravel(), self.filter.P, _type = self.model.StateContainer) diff --git a/src/prog_algs/state_estimators/particle_filter.py b/src/prog_algs/state_estimators/particle_filter.py deleted file mode 100644 index d85ad773..00000000 --- a/src/prog_algs/state_estimators/particle_filter.py +++ /dev/null @@ -1,204 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from filterpy.monte_carlo import residual_resample -import numpy as np -from numpy import array, empty, take, exp, max, take, float64 -from scipy.stats import norm -from warnings import warn - -from prog_models.utils.containers import DictLikeMatrixWrapper - -from . import state_estimator -from ..uncertain_data import UnweightedSamples, ScalarData, UncertainData - - -class ParticleFilter(state_estimator.StateEstimator): - """ - Estimates state using a Particle Filter (PF) algorithm. - - This class defines logic for a PF using a Prognostics Model (see Prognostics Model Package). This filter uses measurement data with noise to estimate the state of the system using a particles. At each step, particles are predicted forward (with noise). Particles are resampled with replacement from the existing particles according to how well the particles match the observed measurements. - - The supported configuration parameters (keyword arguments) for UKF construction are described below: - - Args: - model (PrognosticsModel): - A prognostics model to be used in state estimation - See: Prognostics Model Package - x0 (UncertainData, model.StateContainer, or dict): - Initial (starting) state, with keys defined by model.states \n - e.g., x = ScalarData({'abc': 332.1, 'def': 221.003}) given states = ['abc', 'def'] - - Keyword Args: - t0 (float, optional): - Starting time (s) - dt (float, optional): - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - num_particles (int, optional): - Number of particles in particle filter - resample_fcn (function, optional): - Resampling function ([weights]) -> [indexes] e.g., filterpy.monte_carlo.residual_resample - """ - default_parameters = { - 't0': -1e-99, # practically 0, but allowing for a 0 first estimate - 'num_particles': None, - 'resample_fcn': residual_resample, - } - - def __init__(self, model, x0, **kwargs): - super().__init__(model, x0, **kwargs) - - self._measure = model.output - - # Build array inplace - if isinstance(x0, DictLikeMatrixWrapper) or isinstance(x0, dict): - x0 = ScalarData(x0) - elif not isinstance(x0, UncertainData): - raise TypeError(f"x0 must be of type UncertainData or StateContainer, was {type(x0)}.") - - if self.parameters['num_particles'] is None and isinstance(x0, UnweightedSamples): - sample_gen = x0 # Directly use samples passed in - self.parameters['num_particles'] = len(x0) - else: - if self.parameters['num_particles'] is None: - # Default to 100 particles - self.parameters['num_particles'] = 100 - else: - # Added to avoid float/int issues - self.parameters['num_particles'] = int(self.parameters['num_particles']) - sample_gen = x0.sample(self.parameters['num_particles']) - samples = [array(sample_gen.key(k), dtype=float64) for k in x0.keys()] - - self.particles = model.StateContainer(array(samples, dtype=float64)) - - if 'R' in self.parameters: - # For backwards compatibility - warn("'R' is deprecated. Use 'measurement_noise' instead.", DeprecationWarning) - self.parameters['measurement_noise'] = self.parameters['R'] - elif 'measurement_noise' not in self.parameters: - self.parameters['measurement_noise'] = {key: 0.0 for key in model.outputs} - - def __str__(self): - return "{} State Estimator".format(self.__class__) - - def estimate(self, t : float, u, z, dt = None): - """ - Perform one state estimation step (i.e., update the state estimate, filt.x) - - Args - ---------- - t : float - Current timestamp in seconds (≥ 0.0) - e.g., t = 3.4 - u : InputContainer - Measured inputs, with keys defined by model.inputs. - e.g., u = m.InputContainer({'i':3.2}) given inputs = ['i'] - z : OutputContainer - Measured outputs, with keys defined by model.outputs. - e.g., z = m.OutputContainer({'t':12.4, 'v':3.3}) given outputs = ['t', 'v'] - - Keyword Args - ------------ - dt : float, optional - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - - Note - ---- - This method updates the state estimate stored in filt.x, but doesn't return the updated estimate. Call filt.x to get the updated estimate. - """ - assert t > self.t, "New time must be greater than previous" - if dt is None: - dt = min(t - self.t, self.parameters['dt']) - - # Check Types - if isinstance(u, dict): - u = self.model.InputContainer(u) - if isinstance(z, dict): - z = self.model.OutputContainer(z) - - # Optimization - particles = self.particles - next_state = self.model.next_state - apply_process_noise = self.model.apply_process_noise - apply_limits = self.model.apply_limits - output = self._measure - # apply_measurement_noise = self.model.apply_measurement_noise - noise_params = self.parameters['measurement_noise'] - num_particles = self.parameters['num_particles'] - # Check which output keys are present (i.e., output of measurement function) - measurement_keys = output(self.model.StateContainer({key: particles[key][0] for key in particles.keys()})).keys() - zPredicted = {key: empty(num_particles) for key in measurement_keys} - - if self.model.is_vectorized: - # Propagate particles state - while self.t < t: - dt_i = min(dt, t-self.t) - particles = apply_process_noise(next_state(particles, u, dt_i), dt_i) - self.particles = apply_limits(particles) - self.t += dt_i - - # Get particle measurements - zPredicted = output(self.particles) - else: - # Propagate and calculate weights - for i in range(num_particles): - t_i = self.t # Used to mark time for each particle - x = self.model.StateContainer({key: particles[key][i] for key in particles.keys()}) - while t_i < t: - dt_i = min(dt, t-t_i) - x = next_state(x, u, dt_i) - x = apply_process_noise(x, dt_i) - x = apply_limits(x) - t_i += dt_i - for key in particles.keys(): - self.particles[key][i] = x[key] - z = output(x) - for key in measurement_keys: - zPredicted[key][i] = z[key] - self.t = t - - # Calculate pdf values - pdfs = array([norm(zPredicted[key], noise_params[key]).logpdf(z[key]) - for key in zPredicted.keys()]) - - # Calculate log weights - log_weights = pdfs.sum(0) - - # Scale - # We subtract the max log weights for numerical stability. - # Sometimes log weights can be a large negative value - # when you exponentiate that value the computer will round the result to 0 for most of the weights (sometimes all of them) - # this causes problems when trying to sample from the particles. - # We shift them up by the max log weight (essentially making the max log weight 0) to help avoid that problem. - # When we normalize the weights by dividing by the sum of all the weights, that constant cancels out. - max_log_weight = max(log_weights) - scaled_weights = log_weights - max_log_weight - - # Convert to weights - unnorm_weights = exp(scaled_weights) - - # Normalize - total_weight = sum(unnorm_weights) - self.weights = unnorm_weights / total_weight - - # Resample indices - indexes = self.parameters['resample_fcn'](self.weights) - - # Resampled particles - samples = [take(self.particles[state], indexes) - for state in self.particles.keys()] - - # Particles as a dictionary - self.particles = self.model.StateContainer(array(samples)) - - @property - def x(self) -> UnweightedSamples: - """ - Getter for property 'x', the current estimated state. - - Example - ------- - state = observer.x - """ - return UnweightedSamples(self.particles, _type = self.model.StateContainer) diff --git a/src/prog_algs/state_estimators/state_estimator.py b/src/prog_algs/state_estimators/state_estimator.py deleted file mode 100644 index 75cac51f..00000000 --- a/src/prog_algs/state_estimators/state_estimator.py +++ /dev/null @@ -1,113 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from abc import ABC, abstractmethod, abstractproperty -from copy import deepcopy - -from ..uncertain_data import UncertainData - - -class StateEstimator(ABC): - """ - Interface class for state estimators - - Abstract base class for creating state estimators that perform state estimation. Subclasses must implement this interface. Equivalent to "Observers" in NASA's Matlab Prognostics Algorithm Library - - Args: - model (PrognosticsModel): - A prognostics model to be used in state estimation - See: Prognostics Model Package - x0 (UncertainData, model.StateContainer, or dict): - Initial (starting) state, with keys defined by model.states \n - e.g., x = ScalarData({'abc': 332.1, 'def': 221.003}) given states = ['abc', 'def'] - - Keyword Args: - t0 (float): - Initial time at which prediction begins, e.g., 0 - dt (float): - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - **kwargs: - See state-estimator specific documentation for specific keyword arguments. - """ - - default_parameters = { - 't0': -1e-10, - 'dt': float('inf') - } - - def __init__(self, model, x0, **kwargs): - # Check model - if not hasattr(model, 'output'): - raise NotImplementedError("model must have `output` method") - if not hasattr(model, 'next_state'): - raise NotImplementedError("model must have `next_state` method") - if not hasattr(model, 'outputs'): - raise NotImplementedError("model must have `outputs` property") - if not hasattr(model, 'states'): - raise NotImplementedError("model must have `states` property") - self.model = model - - # Check x0 - for key in model.states: - if key not in x0: - raise KeyError("x0 missing state `{}`".format(key)) - - # Process kwargs (configuration) - self.parameters = deepcopy(StateEstimator.default_parameters) - self.parameters.update(self.default_parameters) - self.parameters.update(kwargs) - - if isinstance(self.parameters['t0'], int): - self.parameters['t0'] = float(self.parameters['t0']) - if isinstance(self.parameters['dt'], int): - self.parameters['dt'] = float(self.parameters['dt']) - - if not isinstance(self.parameters['t0'], float): - raise TypeError(f"t0 must be float, was {type(self.parameters['t0'])}") - if not isinstance(self.parameters['dt'], float): - raise TypeError(f"dt must be float, was {type(self.parameters['dt'])}") - if self.parameters['dt'] <= 0: - raise ValueError(f"dt must be positive, was {self.parameters['dt']}") - - self.t = self.parameters['t0'] # Initial Time - - @abstractmethod - def estimate(self, t: float, u, z, **kwargs) -> None: - """ - Perform one state estimation step (i.e., update the state estimate, filt.x) - - Args - ---------- - t : float - Current timestamp in seconds (≥ 0.0) - e.g., t = 3.4 - u : InputContainer - Measured inputs, with keys defined by model.inputs. - e.g., u = m.InputContainer({'i':3.2}) given inputs = ['i'] - z : OutputContainer - Measured outputs, with keys defined by model.outputs. - e.g., z = m.OutputContainer({'t':12.4, 'v':3.3}) given outputs = ['t', 'v'] - - Keyword Args - ------------- - dt : float, optional - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - **kwargs: - See state-estimator specific documentation for specific keyword arguments. - - Note - ---- - This method updates the state estimate stored in filt.x, but doesn't return the updated estimate. Call filt.x to get the updated estimate. - """ - - @property - @abstractproperty - def x(self) -> UncertainData: - """ - The current estimated state. - - Example - ------- - state = filt.x - """ diff --git a/src/prog_algs/state_estimators/unscented_kalman_filter.py b/src/prog_algs/state_estimators/unscented_kalman_filter.py deleted file mode 100644 index 38c34eea..00000000 --- a/src/prog_algs/state_estimators/unscented_kalman_filter.py +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from filterpy import kalman -from numpy import diag, array -from warnings import warn - -from prog_algs.state_estimators import state_estimator -from prog_algs.uncertain_data import MultivariateNormalDist, UncertainData - -class UnscentedKalmanFilter(state_estimator.StateEstimator): - """ - An Unscented Kalman Filter (UKF) for state estimation - - This class defines logic for performing an unscented kalman filter with a Prognostics Model (see Prognostics Model Package). This filter uses measurement data with noise to generate a state estimate and covariance matrix. - - The supported configuration parameters (keyword arguments) for UKF construction are described below: - - Args: - model (PrognosticsModel): - A prognostics model to be used in state estimation - See: Prognostics Model Package - x0 (UncertainData, model.StateContainer, or dict): - Initial (starting) state, with keys defined by model.states \n - e.g., x = ScalarData({'abc': 332.1, 'def': 221.003}) given states = ['abc', 'def'] - - Keyword Args: - alpha (float, optional): - UKF Scaling parameter - beta (float, optional): - UKF Scaling parameter - kappa (float, optional): - UKF Scaling parameter - t0 (float, optional): - Starting time (s) - dt (float, optional): - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - Q (list[list[float]], optional): - Process Noise Matrix - R (list[list[float]], optional): - Measurement Noise Matrix - """ - default_parameters = { - 'alpha': 1, - 'beta': 0, - 'kappa': -1, - } - - def __init__(self, model, x0, **kwargs): - super().__init__(model, x0, **kwargs) - - self.__input = None - self.x0 = x0 - # Saving for reduce pickling - - def measure(x): - x = model.StateContainer({key: value for (key, value) in zip(x0.keys(), x)}) - R_err = model.parameters['measurement_noise'].copy() - model.parameters['measurement_noise'] = dict.fromkeys(R_err, 0) - z = model.output(x) - model.parameters['measurement_noise'] = R_err - return array(list(z.values())).ravel() - - if 'Q' not in self.parameters: - self.parameters['Q'] = diag([1.0e-3 for _ in x0.keys()]) - - def state_transition(x, dt): - x = model.StateContainer({key: value for (key, value) in zip(x0.keys(), x)}) - Q_err = model.parameters['process_noise'].copy() - model.parameters['process_noise'] = dict.fromkeys(Q_err, 0) - x = model.next_state(x, self.__input, dt) - return array(list(x.values())).ravel() - - num_states = len(x0.keys()) - num_measurements = model.n_outputs - points = kalman.MerweScaledSigmaPoints(num_states, alpha=self.parameters['alpha'], beta=self.parameters['beta'], kappa=self.parameters['kappa']) - self.filter = kalman.UnscentedKalmanFilter(num_states, num_measurements, self.parameters['dt'], measure, state_transition, points) - - if isinstance(x0, dict) or isinstance(x0, model.StateContainer): - warn("Use UncertainData type if estimating filtering with uncertain data.") - self.filter.x = array(list(x0.values())) - self.filter.P = self.parameters['Q'] / 10 - elif isinstance(x0, UncertainData): - x_mean = x0.mean - self.filter.x = array(list(x_mean.values())) - self.filter.P = x0.cov - else: - raise TypeError("TypeError: x0 initial state must be of type {{dict, UncertainData}}") - - if 'R' not in self.parameters: - # Size of what's being measured (not output) - # This is determined by running the measure function on the first state - self.parameters['R'] = diag([1.0e-3 for i in range(len(measure(self.filter.x)))]) - self.filter.Q = self.parameters['Q'] - self.filter.R = self.parameters['R'] - - def estimate(self, t: float, u, z, **kwargs): - """ - Perform one state estimation step (i.e., update the state estimate) - - Parameters - ---------- - t : double - Current timestamp in seconds (≥ 0.0) - e.g., t = 3.4 - u : dict - Measured inputs, with keys defined by model.inputs. - e.g., u = {'i':3.2} given inputs = ['i'] - z : dict - Measured outputs, with keys defined by model.outputs. - e.g., z = {'t':12.4, 'v':3.3} given inputs = ['t', 'v'] - - Keyword Args - ------------ - dt : float, optional - Maximum timestep for prediction in seconds. By default, the timestep dt is the difference between the last and current call of .estimate(). Some models are unstable at larger dt. Setting a smaller dt will force the model to take smaller steps; resulting in multiple prediction steps for each estimate step. Default is the parameters['dt'] - e.g., dt = 1e-2 - """ - assert t > self.t, "New time must be greater than previous" - dt = kwargs.get('dt', self.parameters['dt']) - dt = min(t - self.t, dt) - self.__input = u - while self.t < t: - self.filter.predict(dt=dt) - self.t += dt - self.filter.update(array(list(z.values()))) - - @property - def x(self) -> MultivariateNormalDist: - """ - Getter for property 'x', the current estimated state. - - Example - ------- - state = observer.x - """ - return MultivariateNormalDist(self.x0.keys(), self.filter.x, self.filter.P, _type=self.model.StateContainer) diff --git a/src/prog_algs/uncertain_data/__init__.py b/src/prog_algs/uncertain_data/__init__.py deleted file mode 100644 index 42b58be8..00000000 --- a/src/prog_algs/uncertain_data/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from .uncertain_data import UncertainData -from .unweighted_samples import UnweightedSamples -from .scalar_data import ScalarData -from .multivariate_normal_dist import MultivariateNormalDist - -__all__ = ['UncertainData', 'UnweightedSamples', 'ScalarData', 'MultivariateNormalDist'] diff --git a/src/prog_algs/uncertain_data/multivariate_normal_dist.py b/src/prog_algs/uncertain_data/multivariate_normal_dist.py deleted file mode 100644 index 793ea111..00000000 --- a/src/prog_algs/uncertain_data/multivariate_normal_dist.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from numpy import array -from numpy.random import multivariate_normal - -from . import UncertainData, UnweightedSamples - - -class MultivariateNormalDist(UncertainData): - """ - Data represented by a multivariate normal distribution with mean and covariance matrix - - Args: - labels (list[str]): Labels for states, in order of mean values - mean (array[float]): Mean values for state in the same order as labels - covar (array[array[float]]): Covariance matrix for state - """ - def __init__(self, labels, mean: array, covar : array, _type = dict): - self.__labels = list(labels) - self.__mean = array(list(mean)) - self.__covar = array(list(covar)) - super().__init__(_type) - - def __reduce__(self): - return (MultivariateNormalDist, (self.__labels, self.__mean, self.__covar)) - - def __eq__(self, other: "MultivariateNormalDist") -> bool: - return isinstance(other, MultivariateNormalDist) and self.keys() == other.keys() and self.mean == other.mean and (self.cov == other.cov).all() - - def __add__(self, other: int) -> "UncertainData": - if other == 0: - return self - return MultivariateNormalDist(self.__labels, array([i+other for i in self.__mean]), self.__covar) - - def __radd__(self, other: int) -> "UncertainData": - return self.__add__(other) - - def __iadd__(self, other: int) -> "UncertainData": - if not isinstance(other, (int, float)): - raise TypeError(f" unsupported operand type(s) for +: '{type(other)}' and '{type(self.__mean[0])}'") - if other != 0: - self.__mean = array([i+other for i in self.__mean]) - return self - - def __sub__(self, other: int) -> "UncertainData": - if other == 0: - return self - return MultivariateNormalDist(self.__labels, array([i-other for i in self.__mean]), self.__covar) - - def __rsub__(self, other: int) -> "UncertainData": - return self.__sub__(other) - - def __isub__(self, other: int) -> "UncertainData": - if not isinstance(other, (int, float)): - raise TypeError(f" unsupported operand type(s) for -: '{type(other)}' and '{type(self.__mean[0])}'") - if other != 0: - self.__mean = array([i-other for i in self.__mean]) - return self - - def sample(self, num_samples: int = 1) -> UnweightedSamples: - if len(self.__mean) != len(self.__labels): - raise Exception("labels must be provided for each value") - - samples = multivariate_normal(self.__mean, self.__covar, num_samples) - samples = [{key: value for (key, value) in zip(self.__labels, x)} for x in samples] - return UnweightedSamples(samples, _type = self._type) - - def keys(self) -> list: - return self.__labels - - @property - def median(self) -> float: - # For normal distribution medain = mean - return self.mean - - @property - def mean(self) -> dict: - return self._type({key: value for (key, value) in zip(self.__labels, self.__mean)}) - - def __str__(self) -> str: - return 'MultivariateNormalDist(mean: {}, covar: {})'.format(self.__mean, self.__covar) - - @property - def cov(self) -> array: - return self.__covar diff --git a/src/prog_algs/uncertain_data/scalar_data.py b/src/prog_algs/uncertain_data/scalar_data.py deleted file mode 100644 index 6dfb207d..00000000 --- a/src/prog_algs/uncertain_data/scalar_data.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from typing import Union -from numpy import array - -from . import UncertainData, UnweightedSamples - - -class ScalarData(UncertainData): - """ - Data without uncertainty- single value - - Args: - state (dict or Container): Single state in the form of dict or model.*Container (InputContainer, OutputContainer, Statecontainer) representing states and respective values. - """ - def __init__(self, state, _type=dict): - self.__state = state - super().__init__(_type) - - def __reduce__(self): - return (ScalarData, (self.__state, )) - - def __eq__(self, other: "ScalarData") -> bool: - return isinstance(other, ScalarData) and other.mean == self.__state - - def __add__(self, other: int) -> "UncertainData": - if other == 0: - return self - new_state = dict() - for k,v in self.__state.items(): - new_state[k] = v + other - return ScalarData(new_state) - - def __radd__(self, other: int) -> "UncertainData": - return self.__add__(other) - - def __iadd__(self, other: int) -> "UncertainData": - if other != 0: - for k in self.__state.keys(): - self.__state[k] += other - return self - - def __sub__(self, other: int) -> "UncertainData": - new_state = dict() - for k,v in self.__state.items(): - new_state[k] = v - other - return ScalarData(new_state) - - def __rsub__(self, other: int) -> "UncertainData": - return self.__sub__(other) - - def __isub__(self, other: int) -> "UncertainData": - if other != 0: - for k in self.__state.keys(): - self.__state[k] -= other - return self - - @property - def median(self) -> dict: - return self.mean - - @property - def mean(self) -> dict: - return self._type(self.__state) - - @property - def cov(self) -> array: - return [[0 for _ in range(len(self.__state))] for _ in range(len(self.__state))] - - def keys(self): - return self.__state.keys() - - def sample(self, num_samples : int = 1) -> UnweightedSamples: - return UnweightedSamples([self.__state] * num_samples, _type = self._type) - - def __str__(self) -> str: - return 'ScalarData({})'.format(self.__state) - - def percentage_in_bounds(self, bounds: Union[list, dict]) -> dict: - if isinstance(bounds, list): - bounds = {key: bounds for key in self.keys()} - if not isinstance(bounds, dict) and all([isinstance(b, list) for b in bounds]): - raise TypeError("Bounds must be list [lower, upper] or dict (key: [lower, upper]), was {}".format(type(bounds))) - return {key: (1 if bounds[key][0] < x and bounds[key][1] > x else 0) for (key, x) in self.__state.items()} diff --git a/src/prog_algs/uncertain_data/uncertain_data.py b/src/prog_algs/uncertain_data/uncertain_data.py deleted file mode 100644 index baea862d..00000000 --- a/src/prog_algs/uncertain_data/uncertain_data.py +++ /dev/null @@ -1,283 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from abc import ABC, abstractmethod, abstractproperty -from collections import defaultdict -from matplotlib.figure import Figure -from numpy import array - -from ..utils.table import print_table_recursive -from ..visualize import plot_scatter, plot_hist -from prog_models.utils.containers import DictLikeMatrixWrapper - - -class UncertainData(ABC): - """ - Abstract base class for data with uncertainty. Any new uncertainty type must implement this class - """ - - def __init__(self, _type=dict): - self._type = _type - - @abstractmethod - def sample(self, nSamples: int = 1): - """Generate samples from data - - Args: - nSamples (int, optional): Number of samples to generate. Defaults to 1. - - Returns: - samples (UnweightedSamples): Array of nSamples samples - - Example: - :: - - samples = data.samples(100) - """ - - @property - @abstractproperty - def median(self) -> dict: - """The median of the UncertainData distribution or samples - - Returns: - dict[str, float]: Median value. e.g., {'key1': 23.2, ...} - - Example: - :: - - median_value = data.median - """ - - @property - @abstractproperty - def mean(self) -> dict: - """The mean of the UncertainData distribution or samples - - Returns: - dict[str, float]: Mean value. e.g., {'key1': 23.2, ...} - - Example: - :: - - mean_value = data.mean - """ - - @property - @abstractproperty - def cov(self) -> array: - """The covariance matrix of the UncertiantyData distribution or samples in order of keys (i.e., cov[1][1] is the standard deviation for key keys()[1]) - - Returns: - np.array[np.array[float]]: Covariance matrix - - Example: - :: - - covariance_matrix = data.cov - """ - - def relative_accuracy(self, ground_truth: dict) -> dict: - """The relative accuracy is how close the mean of the distribution is to the ground truth, on relative terms - - :math:`RA = 1 - \dfrac{\| r-p \|}{r}` - - Where r is ground truth and p is mean of predicted distribution [0]_ - - Returns: - dict[str, float]: Relative accuracy for each event where value is relative accuracy between [0,1] - - Example: - :: - - ra = data.relative_accuracy({'key1': 22, 'key2': 57}) - - References: - .. [0] Prognostics: The Science of Making Predictions (Goebel et al, 239) - """ - # if this check isn't here, goes to divide by zero check and raises AttributeError instead of TypeError. Keep? There are unittests checking for type - if not (isinstance(ground_truth, dict) or isinstance(ground_truth, DictLikeMatrixWrapper)): - raise TypeError("Ground truth must be passed as a dictionary or *.container argument.") - if not all(ground_truth.values()): - raise ZeroDivisionError("Ground truth values must be non-zero in calculating relative accuracy.") - return {k:1 - (abs(ground_truth[k] - v)/ground_truth[k]) for k,v in self.mean.items()} - - @abstractmethod - def keys(self): - """Get the keys for the property represented - - Returns: - list[str]: keys - - Example: - :: - - keys = data.keys() - """ - - def __contains__(self, key): - return key in self.keys() - - def percentage_in_bounds(self, bounds: tuple, keys: list = None, n_samples: int = 1000) -> dict: - """Calculate percentage of dist is within specified bounds - - Args: - bounds (tuple[float, float] or dict): Lower and upper bounds. \n - if tuple: (lower, upper)\n - if dict: {key: (lower, upper), ...} - keys (list[str], optional): UncertainData keys to consider when calculating. Defaults to all keys. - n_samples (int, optional): Number of samples to use when calculating - - Returns: - dict: Percentage within bounds for each key in keys (where 0.5 = 50%). e.g., {'key1': 1, 'key2': 0.75} - - Example: - :: - - data.percentage_in_bounds((1025, 1075)) - data.percentage_in_bounds({'key1': (1025, 1075), 'key2': (2520, 2675)}) - data.percentage_in_bounds((1025, 1075), keys=['key1', 'key3']) - """ - return self.sample(n_samples).percentage_in_bounds(bounds, keys=keys) - - def metrics(self, **kwargs) -> dict: - """Calculate Metrics for this dist - - Keyword Args: - ground_truth (int or dict, optional): Ground truth value. Defaults to None. - n_samples (int, optional): Number of samples to use for calculating metrics (if not UnweightedSamples) - keys (list[str], optional): Keys to calculate metrics for. Defaults to all keys. - - Returns: - dict: Dictionary of metrics - - Example: - :: - - print(data.metrics()) - m = data.metrics(ground_truth={'key1': 200, 'key2': 350}) - m = data.metrics(keys=['key1', 'key3']) - """ - from ..metrics import calc_metrics - return calc_metrics(self, **kwargs) - - def plot_scatter(self, fig : Figure = None, keys : list = None, num_samples : int = 100, **kwargs) -> Figure: - """ - Produce a scatter plot - - Args: - fig (Figure, optional): Existing figure previously used to plot states. If passed a figure argument additional data will be added to the plot. Defaults to creating new figure - keys (list[str], optional): Keys to plot. Defaults to all keys. - num_samples (int, optional): Number of samples to plot. Defaults to 100 - **kwargs (optional): Additional keyword arguments passed to scatter function. - - Returns: - Figure - - Example: - :: - - m = [5, 7, 3] - c = [[0.3, 0.5, 0.1], [0.6, 0.7, 1e-9], [1e-9, 1e-10, 1]] - d = MultivariateNormalDist(['a', 'b', 'c'], m, c) - d.plot_scatter() # With 100 samples - states.plot_scatter(num_samples=5) # Specifying the number of samples to plot - states.plot_scatter(keys=['a', 'b']) # only plot those keys - """ - if keys is None: - keys = self.keys() - samples = self.sample(num_samples) - return plot_scatter(samples, fig=fig, keys=keys, **kwargs) - - def plot_hist(self, fig = None, keys = None, num_samples = 100, **kwargs): - """ - Create a histogram - - Args: - fig (MatPlotLib Figure, optional): Existing histogram figure to be overritten. Defaults to create new figure. - num_samples (int, optional): Number of samples to plot. Defaults to 100 - keys (list(String), optional): Keys to be plotted. Defaults to None. - - Example: - :: - - m = [5, 7, 3] - c = [[0.3, 0.5, 0.1], [0.6, 0.7, 1e-9], [1e-9, 1e-10, 1]] - d = MultivariateNormalDist(['a', 'b', 'c'], m, c) - d.plot_hist() # With 100 samples - states.plot_hist(num_samples=20) # Specifying the number of samples to plot - states.plot_hist(keys=['a', 'b']) # only plot those keys - """ - if keys is None: - keys = self.keys() - samples = self.sample(num_samples) - return plot_hist(samples, fig=fig, keys=keys, **kwargs) - - def describe(self, title : str = "UncertainData Metrics", print : bool = True) -> defaultdict: - """ - Print and view basic statistical information about this UncertainData object in a text-based printed table. - - Args: - title : str - Title of the table, printed before data rows. - print : bool = True - Optional argument specifying whether to print or not; default true. - - Returns: - defaultdict - Dictionary of lists used to print metrics. - - Example: - :: - - data.describe() - """ - recursive_metrics_table = print_table_recursive(self.metrics(), title, print) - return recursive_metrics_table - - @abstractmethod - def __add__(self, other : int) -> "UncertainData": - """Overriding __add__ (+ operator) for UncertainData. - - Args: - other (int): Integer value to be applied to class where appropriate. - """ - - @abstractmethod - def __radd__(self, other : int) -> "UncertainData": - """Overriding __radd__ (+ operator right) for UncertainData. - - Args: - other (int): Integer value to be applied to class where appropriate. - """ - - @abstractmethod - def __iadd__(self, other : int) -> "UncertainData": - """Overriding __iadd__ (+= operator) for UncertainData. - - Args: - other (int): Integer value to be applied to class where appropriate. - """ - - @abstractmethod - def __sub__(self, other : int) -> "UncertainData": - """Overriding __sub__ (- operator) for UncertainData. - - Args: - other (int): Integer value to be applied to class where appropriate. - """ - - @abstractmethod - def __rsub__(self, other : int) -> "UncertainData": - """Overriding __rsub__ (- operator right) for UncertainData. - - Args: - other (int): Integer value to be applied to class where appropriate. - """ - - @abstractmethod - def __isub__(self, other : int) -> "UncertainData": - """Overriding __isub__ (-= operator) for UncertainData. - - Args: - other (int): Integer value to be applied to class where appropriate. - """ diff --git a/src/prog_algs/uncertain_data/unweighted_samples.py b/src/prog_algs/uncertain_data/unweighted_samples.py deleted file mode 100644 index 353d7267..00000000 --- a/src/prog_algs/uncertain_data/unweighted_samples.py +++ /dev/null @@ -1,180 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from collections import UserList -from collections.abc import Iterable -from numpy import array, cov, random -from warnings import warn - -from prog_models.utils.containers import DictLikeMatrixWrapper - -from . import UncertainData - - -class UnweightedSamples(UncertainData, UserList): - """ - Uncertain Data represented by a set of samples. Objects of this class can be treated like a list where samples[n] returns the nth sample (Dict). - - Args: - samples (array, dict, or model.*Container, optional): array of samples. Defaults to empty array.\n - If dict, must be of the form of {key: [value, ...], ...}\n - If list, must be of the form of [{key: value, ...}, ...]\n - If InputContainer, OutputContainer, or StateContainer, must be of the form of *Container({'key': value, ...}) - """ - def __init__(self, samples: list = [], _type=dict): - super().__init__(_type) - if isinstance(samples, dict) or isinstance(samples, DictLikeMatrixWrapper): - # Is in form of {key: [value, ...], ...} - # Convert to array of samples - if len(samples.keys()) == 0: - self.data = [] # is empty - return - n_samples = len(list(samples.values())[0]) # Number of samples - self.data = [{key: value[i] for key, value in samples.items()} for i in range(n_samples)] - elif isinstance(samples, Iterable): - # is in form of [{key: value, ...}, ...] - self.data = samples - else: - raise ValueError('Invalid input. Must be list or dict, was {}'.format(type(samples))) - - def __eq__(self, other): - return isinstance(other, UnweightedSamples) and self.data == other.data - - def __getitem__(self, n): - datem = self.data[n] - return self._type(datem) if datem is not None else None - - def __add__(self, other: int) -> "UncertainData": - if other == 0: - return self - result = [] - for i in range(len(self.data)): - new_dict = {} - for k,v in self.data[i].items(): - new_dict[k] = v + other - result.append(new_dict) - return UnweightedSamples(result) - - def __radd__(self, other: int) -> "UncertainData": - return self.__add__(other) - - def __iadd__(self, other: int) -> "UncertainData": - if other != 0: - for i in range(len(self.data)): - for k,v in self.data[i].items(): - self.data[i][k] += other - return self - - def __sub__(self, other: int) -> "UncertainData": - if other == 0: - return self - result = [] - for i in range(len(self.data)): - new_dict = {} - for k,v in self.data[i].items(): - new_dict[k] = v - other - result.append(new_dict) - return UnweightedSamples(result) - - def __rsub__(self, other: int) -> "UncertainData": - return self.__sub__(other) - - def __isub__(self, other: int) -> "UncertainData": - if other != 0: - for i in range(len(self.data)): - for k,v in self.data[i].items(): - self.data[i][k] -= other - return self - - def __reduce__(self): - return (UnweightedSamples, (self.data, )) - - def sample(self, num_samples: int = 1, replace: bool = True) -> "UnweightedSamples": - # Completely random resample - indices = random.choice(len(self.data), int(num_samples), replace=replace) - return UnweightedSamples([self.data[i] for i in indices], _type=self._type) - - def keys(self) -> list: - if len(self.data) == 0: - return [] # is empty - for sample in self: - if sample is not None: - return sample.keys() - return [] # Every element is none - - def key(self, key) -> list: - """Return samples for given key - - Args: - key (str): key - - Returns: - list: list of values for given key - """ - return [sample[key] for sample in self.data if sample is not None] - - @property - def median(self) -> dict: - # Calculate Geometric median of all samples - min_value = float('inf') - none_flag = False - for i, datem in enumerate(self.data): - if datem is None: - continue - p1 = array([d for d in datem.values() if d is not None]) - if not none_flag and len(p1) < len(datem): - none_flag = True - warn("Some samples were None, resulting median is of all non-None samples. Note: in some cases, this will bias the median result.") - total_dist = sum( - sum((p1 - array([di for di in d.values() if di is not None]))**2) # Distance between 2 points - for d in self.data if d is not None) # For each point - if total_dist < min_value: - min_index = i - min_value = total_dist - return self._type(self[min_index]) - - @property - def mean(self) -> dict: - mean = {} - for key in self.keys(): - values = array([x[key] for x in self.data if x is not None and x[key] is not None]) - if len(values) < len(self.data): - warn("Some samples were None, resulting mean is of all non-None samples. Note: in some cases, this will bias the mean result.") - mean[key] = values.mean() - return self._type(mean) - - @property - def cov(self) -> dict: - if len(self.data) == 0: - return [[]] - unlabeled_samples = array([[x[key] for x in self.data if x is not None and x[key] is not None] for key in self.keys()]) - if len(unlabeled_samples) < len(self.data): - warn("Some samples were None, resulting covariance is of all non-None samples. Note: in some cases, this will bias the covariance result.") - return cov(unlabeled_samples) - - def __str__(self): - return 'UnweightedSamples({})'.format(self.data) - - @property - def size(self) -> int: - """Get the number of samples. Note: kept for backwards compatibility, prefer using len() instead. - - Returns: - int: Number of samples - """ - return len(self) - - def percentage_in_bounds(self, bounds, keys: list = None) -> dict: - if not keys: - keys = self.keys() - if isinstance(keys, str): - keys = [keys] - if isinstance(bounds, list): - bounds = {key: bounds for key in self.keys()} - if not isinstance(bounds, dict) or all([isinstance(b, list) and len(b) == 2 for b in bounds]): - raise TypeError("Bounds must be list [lower, upper] or dict (key: [lower, upper]), was {}".format(type(bounds))) - n_elements = len(self.data) - return {key: sum([x is not None and x < bounds[key][1] and x > bounds[key][0] for x in self.key(key)])/n_elements for key in keys} - - def raw_samples(self): - warn("raw_samples is deprecated and will be removed in the future.") - return self.data diff --git a/src/prog_algs/utils/__init__.py b/src/prog_algs/utils/__init__.py deleted file mode 100644 index d84bee52..00000000 --- a/src/prog_algs/utils/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the -# National Aeronautics and Space Administration. All Rights Reserved. - -from .table import print_table_recursive - diff --git a/src/prog_algs/utils/table.py b/src/prog_algs/utils/table.py deleted file mode 100644 index 76bf8831..00000000 --- a/src/prog_algs/utils/table.py +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the -# National Aeronautics and Space Administration. All Rights Reserved. - -from collections import defaultdict -from typing import Union - -MAX_COLUMN_WIDTH = 5 # numerical value will actually be min MAX_COLUMN_WIDTH-2 due to allocating spaces - -def print_table_recursive(input_dict : dict, title : str, print_bool : bool = True) -> defaultdict: - """ - Prints a table where keys are column headers and values are items in a row. - Returns the table formatted as a dictionary of tables represented by a list of str. - - Arguments - --------- - input_dict : dict - A dictionary of keys and values to print out in a table. Values can be dictionaries. - title : str - Title of the table, printed before data rows. - print_flag : bool = True - An optional boolean value determining whether the generated table is printed. - """ - row_list = _print_table_recursive_helper([], input_dict, title)[:-7] - sub_tables = defaultdict(list) - new_sub_table = [] - for row in row_list: - new_sub_table.append(row) - if len(new_sub_table) == 7: - if sub_tables[len(new_sub_table[0])]: - sub_tables[len(new_sub_table[0])].extend([new_sub_table[5], new_sub_table[6]]) - else: - sub_tables[len(new_sub_table[0])].extend(new_sub_table) - new_sub_table = [] - - if print_bool: - for k in sorted(sub_tables.keys(), reverse=True): - print(*sub_tables[k], sep='\n') - return sub_tables - -def _set_width(max_width : int, input_value : Union[float, int]) -> str: - if input_value < (10**max_width): - ndigits = len(str(input_value)) - return f"{input_value:^{ndigits}.{max_width-ndigits}f}" - else: - scientific_input = f"{input_value:e}" - split_e = scientific_input.split("e+") - num_space = max_width - len(str(split_e[1])) - 2 - split_e[0] = str(split_e[0])[:num_space] - return f"{split_e[0]}e+{split_e[1]}" - # using this approach because e+ can't be formatted with f"{x:{some_width}g}" - # what happens if we have 9.999999e+100 but are limited to 5? - # the exponent itself will occupy 5, leaving no space for the numbers in front - -def _print_table_recursive_helper(table_prog : list, input_dict : dict, title : str, key : str = None) -> list: - """ - Helper function to recursively build subtables as a list of str. - - Arguments - --------- - table_prog : list - A list of the table built so far. List of strings, where each string is a printable representation of a row. - input_dict : dict - A dictionary of keys and values to print out in a table. Values can be dictionaries. - title : str - Title of the table, printed before data rows. - key : str = None - Key for a value row, identifying what event the values belong to. - """ - col_name_row = "| key |" - value_row = f"| {str(key):^3} |" - for k,v in input_dict.items(): - if isinstance(v, dict): - if key != None: - to_pass = key - _print_table_recursive_helper(table_prog, v, f"{title} {k}", to_pass) - else: - to_pass = k - _print_table_recursive_helper(table_prog, v, f"{title}", to_pass) - else: - col_len = len(max(str(k), str(v))) + 2 - col_name_row += f"{str(k):^{col_len}}|" - if isinstance(v, (int, float)): - adj_width = _set_width(MAX_COLUMN_WIDTH-2, v) - value_row += f"{adj_width:^{col_len}}|" - else: - value_row += f"{str(v):^{col_len}}|" - - break_row = "+{}+".format((len(col_name_row)-2)*'-') - title_row = f"+{title:^{len(break_row)-2}}+".title() - table_prog.extend([break_row, title_row, break_row, col_name_row, break_row, value_row, break_row]) - - return table_prog - diff --git a/src/prog_algs/visualize/__init__.py b/src/prog_algs/visualize/__init__.py deleted file mode 100644 index d37a5535..00000000 --- a/src/prog_algs/visualize/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from .plot_scatter import plot_scatter -from .plot_hist import plot_hist -__all__ = ['plot_scatter', 'plot_hist'] diff --git a/src/prog_algs/visualize/plot_hist.py b/src/prog_algs/visualize/plot_hist.py deleted file mode 100644 index 267a5511..00000000 --- a/src/prog_algs/visualize/plot_hist.py +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from matplotlib.figure import Figure -import matplotlib.pyplot as plt -from numpy import array -from typing import List - -def plot_hist(samples : array, fig : Figure = None, keys : List[str] = None, **kwargs) -> Figure: - """Create a histogram - - Args: - samples (Array(Dict)): A set of samples (e.g., states or eol estimates) - fig (MatPlotLib Figure, optional): Existing histogram figure to be overritten. Defaults to create new figure. - keys (List[String], optional): Keys to be plotted. Defaults to All. - """ - - # Input checks - if len(samples) <= 0: - raise Exception('Must include atleast one sample to plot') - - if keys is not None: - if isinstance(keys, str): - keys = [keys] - try: - iter(keys) - except TypeError: - raise TypeError("Keys should be a list of strings (e.g., ['state1', 'state2'], was {}".format(type(keys))) - - for key in keys: - if key not in samples[0].keys(): - raise TypeError("Key {} was not present in samples (keys: {})".format(key, list(samples[0].keys()))) - else: - keys = samples[0].keys() - keys = list(keys) - - # Handle input - parameters = { # defaults - 'legend': True - } - parameters.update(kwargs) - - if fig is None: - # If no figure provided, create one - fig = plt.figure() - ax = fig.add_subplot(111) - else: - ax = fig.axes[0] - - # Plot - for key in keys: - ax.hist([sample[key] for sample in samples if sample[key] is not None], label=key, **kwargs) - - # Set legend - if parameters['legend']: - ax.legend().remove() # Remove any existing legend - prevents "ghost effect" - ax.legend(loc='upper right') - - return fig diff --git a/src/prog_algs/visualize/plot_scatter.py b/src/prog_algs/visualize/plot_scatter.py deleted file mode 100644 index cab22872..00000000 --- a/src/prog_algs/visualize/plot_scatter.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -from matplotlib.collections import PathCollection -from matplotlib.figure import Figure -import matplotlib.pyplot as plt -from math import sqrt -from typing import List - -def plot_scatter(samples : List[dict], fig : Figure = None, keys : List[str] = None, legend : str = 'auto', **kwargs) -> Figure: - """ - Produce a scatter plot for a given list of states - - Args: - samples ([dict]): Non-empty list of states where each element is a dictionary containing a single sample - fig (Figure, optional): Existing figure previously used to plot states. If passed a figure argument additional data will be added to the plot. Defaults to creating new figure - keys (list of strings, optional): Keys to plot. Defaults to all keys. - legend (optional): When the legend should be shown, options: - False: Dont show legend - "auto": Show legend automatically if more than one data set - True: Always show legend - **kwargs (optional): Additional keyword arguments passed to scatter function. Includes those supported by scatter - - Returns: - Figure - - Example: - states = UnweightedSamples([1, 2, 3, 4, 5]) - plot_scatter(states.sample(100)) # With 100 samples - plot_scatter(states.sample(100), keys=['state1', 'state2']) # only plot those keys - """ - # Input checks - if len(samples) <= 0: - raise Exception('Must include atleast one sample to plot') - - if keys is not None: - try: - iter(keys) - except TypeError: - raise TypeError("Keys should be a list of strings (e.g., ['state1', 'state2'], was {}".format(type(keys))) - - # Handle input - parameters = { # defaults - 'alpha': 0.5 - } - parameters.update(kwargs) - - if keys is None: - keys = samples[0].keys() - keys = list(keys) - - n = len(keys) - if n < 2: - raise Exception("At least 2 states required for scatter, got {}".format(n)) - - if fig is None: - # If no figure provided, create one - fig = plt.figure() - axes = [[fig.add_subplot(n-1, n-1, 1 + i + j*(n-1)) for i in range(n-1)] for j in range(n-1)] - else: - # Check size of axes - if len(fig.axes) != (n-1)*(n-1): - raise Exception("Cannot use existing figure - Existing figure graphs {} states, data includes {} states".format(sqrt(len(fig.axes))+1, n)) - - # Unpack axes - axes = [[fig.axes[i + j*(n-1)] for i in range(n-1)] for j in range(n-1)] - - for i in range(n-1): - # For each column - x_key = keys[i] - - # Set labels on extremes - axes[-1][i].set_xlabel(x_key) # Bottom row - axes[i][0].set_ylabel(keys[i+1]) # Left column - - # plot - for j in range(i, n-1): - # for each row - y_key = keys[j+1] - x1 = [x[x_key] for x in samples if x is not None] - x2 = [x[y_key] for x in samples if x is not None] - axes[j][i].scatter(x1, x2, **parameters) - - # Hide axes not used in plots - for j in range(0, i): - axes[j][i].set_visible(False) - - # Set legend - if legend == 'auto' or legend: - labels = [thing.get_label() for thing in axes[0][0].get_children() - if isinstance(thing, PathCollection)] - if legend == 'auto' and len(labels) > 0 or legend: - fig.legend().remove() # Remove any existing legend - prevents "ghost effect" - fig.legend(labels=labels, loc='upper right') - - return fig diff --git a/state_estimator_template.py b/state_estimator_template.py deleted file mode 100644 index 9aec63c6..00000000 --- a/state_estimator_template.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from prog_algs import state_estimators -# Replace the following with whatever form of UncertainData you would like to use to represent state -from prog_algs.uncertain_data import UncertainData, ScalarData - - -class TemplateStateEstimator(state_estimators.StateEstimator): - """ - Template for State Estimator - """ - # REPLACE THE FOLLOWING LIST WITH CONFIGURED PARAMETERS - default_parameters = { # Default Parameters, used as config - 'Example Parameter': 0.0, - 't0' : 0.0 # Initial timestamp - } - - def __init__(self, model, x0, **kwargs): - """ - Constructor (optional) - """ - super().__init__(model, x0, **kwargs) - # ADD PARAMETER CHECKS HERE - # e.g., self.parameters['some_value'] < 0 - - # ADD ANY STATE ESTIMATOR INITIALIZATION LOGIC - - def estimate(self, t, u, z) -> None: - """ - Perform one state estimation step (i.e., update the state estimate) - - Parameters - ---------- - t : double - Current timestamp in seconds (≥ 0.0) - e.g., t = 3.4 - u : dict - Applied inputs, with keys defined by model.inputs. - e.g., u = {'i':3.2} given inputs = ['i'] - z : dict - Measured outputs, with keys defined by model.outputs. - e.g., z = {'t':12.4, 'v':3.3} given inputs = ['t', 'v'] - """ - # REPLACE WITH UPDATE STATE ESTIMATION - - # Note, returns none. State is accessed using the property state_estimator.x - - @property - def x(self) -> UncertainData: - """ - Getter for property 'x', the current estimated state. - - Example - ------- - state = observer.x - """ - # REPLACE THE FOLLOWING WITH THE LOGIC TO CONSTRUCT/RETURN THE STATE - - # Here we're using ScalarData, but the state could be represented by any other type of UncertainData (e.g., MultivariateNormalDist) - x = ScalarData(self.model.StateContainer({key: 0.0 for key in self.model.states})) - - return x diff --git a/test_requirements.txt b/test_requirements.txt deleted file mode 100644 index e1396156..00000000 --- a/test_requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -ipython>=8.10.0 -ipykernel>=6.21.2 -testbook>=0.4.2 -. \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index 22e6d337..00000000 --- a/tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -__all__ = ['test_examples', 'test_integration', 'test_metrics', 'test_predictors', 'test_state_estimators', 'test_uncertain_data', 'test_visualize', 'test_tutorials', 'test_manual'] diff --git a/tests/__main__.py b/tests/__main__.py deleted file mode 100644 index d38fc221..00000000 --- a/tests/__main__.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from .test_state_estimators import run_tests as state_est_main -from .test_predictors import run_tests as pred_main -from .test_uncertain_data import run_tests as udata_main -from .test_examples import main as examples_main -from .test_metrics import run_tests as metrics_main -from .test_visualize import run_tests as visualize_main -from .test_tutorials import run_tests as tutorials_main - -import unittest -import sys -from examples import basic_example -from io import StringIO -from timeit import timeit -from unittest.mock import patch - -def run_basic_ex(): - _stdout = sys.stdout - sys.stdout = StringIO() - with patch('matplotlib.pyplot') as p: - basic_example.run_example() - - # Reset stdout - sys.stdout = _stdout - -if __name__ == '__main__': - l = unittest.TestLoader() - - try: - print("\nExample Runtime: ", timeit(run_basic_ex, number=3)) - except Exception: - print("\nFailed benchmarking") - was_successful = False - - was_successful = True - try: - state_est_main() - except Exception: - was_successful = False - - try: - pred_main() - except Exception: - was_successful = False - - try: - udata_main() - except Exception: - was_successful = False - - try: - visualize_main() - except Exception: - was_successful = False - - try: - examples_main() - except Exception: - was_successful = False - - try: - metrics_main() - except Exception: - was_successful = False - - try: - tutorials_main() - except Exception: - was_successful = False - - if not was_successful: - raise Exception('Tests Failed') diff --git a/tests/benchmark.py b/tests/benchmark.py deleted file mode 100644 index a9778489..00000000 --- a/tests/benchmark.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -import time -from io import StringIO -import sys - -FORMAT_STR = '{:40s}' -CLOCK = time.process_time - -if __name__ == "__main__": - print(FORMAT_STR.format('import main'), end='') - t = CLOCK() - from prog_algs import * - t2 = CLOCK() - print(t2-t) - - from prog_models.models import BatteryElectroChemEOD as Battery - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - R_vars = { - 't': 2, - 'v': 0.02 - } - batt = Battery(measurement_noise = R_vars) - initial_state = batt.parameters['x0'] - - print('PF') - print(FORMAT_STR.format(' Initialize'), end='') - temp_out = StringIO() - sys.stdout = temp_out - sys.stderr = temp_out - t = CLOCK() - filt = state_estimators.ParticleFilter(batt, initial_state) - t2 = CLOCK() - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - print(t2-t) - - print(FORMAT_STR.format(' Step'), end='') - example_measurements = {'t': 32.2, 'v': 3.915} - t = 0.1 - t = CLOCK() - filt.estimate(t, future_loading(t), example_measurements) - t2 = CLOCK() - print(t2-t) - - print('UKF') - print(FORMAT_STR.format(' Initialize '), end='') - temp_out = StringIO() - sys.stdout = temp_out - sys.stderr = temp_out - t = CLOCK() - filt = state_estimators.UnscentedKalmanFilter(batt, initial_state) - t2 = CLOCK() - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - print(t2-t) - - # print(FORMAT_STR.format(' Step'), end='') - # example_measurements = {'t': 32.2, 'v': 3.915} - # t = 0.1 - # temp_out = StringIO() - # sys.stdout = temp_out - # sys.stderr = temp_out - # t = CLOCK() - # filt.estimate(t, future_loading(t), example_measurements) - # t2 = CLOCK() - # sys.stdout = sys.__stdout__ - # sys.stderr = sys.__stderr__ - # print(t2-t) - - print(FORMAT_STR.format('Plot Results'), end='') - t = CLOCK() - filt.x.plot_scatter(label='prior') - t2 = CLOCK() - print(t2-t) - - print('MC') - print(FORMAT_STR.format(' Initialize '), end='') - t = CLOCK() - mc = predictors.MonteCarlo(batt) - t2 = CLOCK() - print(t2-t) - - print(FORMAT_STR.format(' Prediction'), end='') - NUM_SAMPLES = 5 - STEP_SIZE = 0.1 - t = CLOCK() - mc_results = mc.predict(batt.initialize(), future_loading, n_samples = NUM_SAMPLES, dt=STEP_SIZE) - t2 = CLOCK() - print(t2-t) - - print(FORMAT_STR.format('Metrics'), end='') - t = CLOCK() - mc_results.time_of_event.percentage_in_bounds([3005.2, 3005.6]) - mc_results.time_of_event.metrics(ground_truth=3005.25) - t2 = CLOCK() - print(t2-t) - - print(FORMAT_STR.format('Plot Scatter'), end='') - t = CLOCK() - fig = mc_results.states.snapshot(0).plot_scatter(label = "t={} s".format(int(mc_results.times[0]))) # 0 - quarter_index = int(len(mc_results.times)/4) - mc_results.states.snapshot(quarter_index).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index]))) # 25% - mc_results.states.snapshot(quarter_index*2).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*2]))) # 50% - mc_results.states.snapshot(quarter_index*3).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[quarter_index*3]))) # 75% - mc_results.states.snapshot(-1).plot_scatter(fig = fig, label = "t={} s".format(int(mc_results.times[-1]))) # 100% - t2 = CLOCK() - print(t2-t) - - print(FORMAT_STR.format('Plot Hist'), end='') - t = CLOCK() - mc_results.time_of_event.plot_hist() - t2 = CLOCK() - print(t2-t) diff --git a/tests/test_examples.py b/tests/test_examples.py deleted file mode 100644 index 87fd03f5..00000000 --- a/tests/test_examples.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -# This ensures that the directory containing examples is in the python search directories - -from importlib import import_module -from io import StringIO -from matplotlib import pyplot as plt -from os.path import dirname, join -import pkgutil -import sys -import unittest -from unittest.mock import patch - -sys.path.append(join(dirname(__file__), "..")) # puts examples in path -from examples import * - -skipped_examples = ['playback'] - -def make_test_function(example): - def test(self): - ex = import_module("examples." + example) - - with patch('matplotlib.pyplot.show'): - ex.run_example() - return test - - -class TestExamples(unittest.TestCase): - def setUp(self): - # set stdout (so it wont print) - self._stdout = sys.stdout - sys.stdout = StringIO() - - def tearDown(self): - # reset stdout - sys.stdout = self._stdout - -# This allows the module to be executed directly -def run_tests(): - unittest.main() - -def main(): - # Create tests for each example - for _, name, _ in pkgutil.iter_modules(['examples']): - if name in skipped_examples: - continue - test_func = make_test_function(name) - setattr(TestExamples, 'test_{0}'.format(name), test_func) - - - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Examples") - with patch('matplotlib.pyplot.show'): - result = runner.run(l.loadTestsFromTestCase(TestExamples)).wasSuccessful() - - plt.close('all') - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - main() diff --git a/tests/test_manual.py b/tests/test_manual.py deleted file mode 100644 index e5f5a23a..00000000 --- a/tests/test_manual.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -from matplotlib import pyplot as plt -import sys -import unittest -from unittest.mock import patch - -""" -This file includes tests that are too long to be run as part of the automated tests. Instead, these tests are run manually as part of the release process. -""" - -class TestManual(unittest.TestCase): - # Test playback example - def test_playback_example(self): - from examples import playback - playback.run_example() - -# This allows the module to be executed directly -def run_tests(): - unittest.main() - -def main(): - # This ensures that the directory containing ProgModelTemplate is in the python search directory - from os.path import dirname, join - sys.path.append(join(dirname(__file__), "..")) - - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Manual") - - with patch('matplotlib.pyplot.show'): - result = runner.run(l.loadTestsFromTestCase(TestManual)).wasSuccessful() - plt.close('all') - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - main() - diff --git a/tests/test_metrics.py b/tests/test_metrics.py deleted file mode 100644 index 560576a6..00000000 --- a/tests/test_metrics.py +++ /dev/null @@ -1,546 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -import unittest -from prog_algs import uncertain_data -from prog_algs.metrics import prob_success -from prog_algs.metrics import calc_metrics as toe_metrics -from prog_algs.uncertain_data import UncertainData, UnweightedSamples, MultivariateNormalDist, ScalarData - - -class TestMetrics(unittest.TestCase): - def test_toe_metrics_prev_name(self): - # This is kept for backwards compatability - from prog_algs.metrics import samples - self.assertIs(samples.eol_metrics, toe_metrics) - self.assertIs(samples.prob_success, prob_success) - - def test_toe_metrics_list_dict(self): - # This is kept for backwards compatability - - # Common checks - def check_metrics(metrics): - # True for all keys - for key in keys: - self.assertAlmostEqual(metrics[key]['min'], 0) - for percentile in ['0.01', '0.1', '1']: - # Not enough samples for these - self.assertIsNone(metrics[key]['percentiles'][percentile]) - - # Key specific - self.assertAlmostEqual(metrics['a']['percentiles']['10'], 1) - self.assertAlmostEqual(metrics['a']['percentiles']['25'], 2) - self.assertAlmostEqual(metrics['a']['mean'], 4.5) - self.assertAlmostEqual(metrics['a']['percentiles']['50'], 5) - self.assertAlmostEqual(metrics['a']['percentiles']['75'], 7) - self.assertAlmostEqual(metrics['a']['mean absolute deviation'], 2.5) - self.assertAlmostEqual(metrics['a']['max'], 9) - self.assertAlmostEqual(metrics['a']['std'], 2.8722813232690143) - self.assertAlmostEqual(metrics['b']['percentiles']['10'], 1.1) - self.assertAlmostEqual(metrics['b']['percentiles']['25'], 2.2) - self.assertAlmostEqual(metrics['b']['mean'], 4.95) - self.assertAlmostEqual(metrics['b']['percentiles']['50'], 5.5) - self.assertAlmostEqual(metrics['b']['percentiles']['75'], 7.7) - self.assertAlmostEqual(metrics['b']['mean absolute deviation'], 2.75) - self.assertAlmostEqual(metrics['b']['max'], 9.9) - self.assertAlmostEqual(metrics['b']['std'], 3.159509455595916) - self.assertAlmostEqual(metrics['c']['percentiles']['10'], 0.04) - self.assertAlmostEqual(metrics['c']['percentiles']['25'], 0.16) - self.assertAlmostEqual(metrics['c']['mean'], 1.14) - self.assertAlmostEqual(metrics['c']['percentiles']['50'], 1.0) - self.assertAlmostEqual(metrics['c']['percentiles']['75'], 1.96) - self.assertAlmostEqual(metrics['c']['mean absolute deviation'], 0.928) - self.assertAlmostEqual(metrics['c']['max'], 3.24) - self.assertAlmostEqual(metrics['c']['std'], 1.074094967868298) - - u_samples = [{'a': i, 'b': i*1.1, 'c': (i/5)**2} for i in range(10)] - keys = ['a', 'b', 'c'] - metrics = toe_metrics(u_samples) - - check_metrics(metrics) - for key in keys: - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertNotIn(key2, metrics[key]) - - metrics = toe_metrics(u_samples, 5.0) - check_metrics(metrics) - for key in keys: - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertIn(key2, metrics[key]) - self.assertAlmostEqual(metrics['a']['mean absolute error'], 2.5) - self.assertAlmostEqual(metrics['b']['mean absolute error'], 2.75) - self.assertAlmostEqual(metrics['c']['mean absolute error'], 3.86) - - metrics = toe_metrics(u_samples, ground_truth = {'a': 5.0, 'b': 4.5, 'c': 1.5}) - check_metrics(metrics) - for key in keys: - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertIn(key2, metrics[key]) - self.assertAlmostEqual(metrics['a']['mean absolute error'], 2.5) - self.assertAlmostEqual(metrics['b']['mean absolute error'], 2.75) - self.assertAlmostEqual(metrics['c']['mean absolute error'], 1.012) - - # Empty Sample Set - try: - toe_metrics([]) - except ValueError: - pass - - def test_toe_metrics_mvnd(self): - # Common checks - def check_metrics(metrics): - mean_dict = {key: value for (key, value) in zip(keys, mean)} - for key in keys: - self.assertAlmostEqual(metrics[key]['mean'], mean_dict[key]) - self.assertAlmostEqual(metrics[key]['median'], mean_dict[key]) - self.assertAlmostEqual(metrics[key]['percentiles']['50'], mean_dict[key]) - self.assertAlmostEqual(metrics[key]['std'], 1, 1) - mean = [10, 11, 12] - keys = ['a', 'b', 'c'] - covar = [ - [1, 0.1, 0.1], - [0.1, 1, 0.1], - [0.1, 0.1, 1]] - dist = MultivariateNormalDist(keys, mean, covar) - metrics = toe_metrics(dist) - dist.metrics() - check_metrics(metrics) - - metrics = toe_metrics(dist, 11) - dist.metrics(ground_truth=11) - check_metrics(metrics) - self.assertAlmostEqual(metrics['a']['ground truth percentile'], 84.3, -1) - self.assertAlmostEqual(metrics['b']['ground truth percentile'], 50, -1) - self.assertAlmostEqual(metrics['c']['ground truth percentile'], 15.4, -1) - - # P(success) - p_success = prob_success(dist, 11) - self.assertAlmostEqual(p_success['a'], 0.1575, 1) - self.assertAlmostEqual(p_success['b'], 0.5, 1) - self.assertAlmostEqual(p_success['c'], 0.8425, 1) - - def test_toe_metrics_scalar(self): - # Common checks - def check_metrics(metrics): - for key in scalar.keys(): - self.assertAlmostEqual(metrics[key]['min'], data[key]) - for value in metrics[key]['percentiles'].values(): - self.assertAlmostEqual(value, data[key]) - self.assertAlmostEqual(metrics[key]['mean'], data[key]) - self.assertAlmostEqual(metrics[key]['median'], data[key]) - self.assertAlmostEqual(metrics[key]['max'], data[key]) - self.assertAlmostEqual(metrics[key]['std'], 0) - self.assertAlmostEqual(metrics[key]['mean absolute deviation'], 0) - - data = { - 'a': 10, - 'b': 11, - 'c': 12 - } - scalar = ScalarData(data) - metrics = toe_metrics(scalar) - self.assertDictEqual(scalar.metrics(), metrics) - check_metrics(metrics) - - # Check with ground truth - metrics = toe_metrics(scalar, 11) - self.assertDictEqual(scalar.metrics(ground_truth=11), metrics) - check_metrics(metrics) - for key in data.keys(): - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertIn(key2, metrics[key]) - self.assertAlmostEqual(metrics['a']['mean absolute error'], 1) - self.assertAlmostEqual(metrics['b']['mean absolute error'], 0) - self.assertAlmostEqual(metrics['c']['mean absolute error'], 1) - - # Check with limited samples - metrics = toe_metrics(scalar, n_samples = 1000) - self.assertDictEqual(scalar.metrics(n_samples = 1000), metrics) - for key in scalar.keys(): - self.assertIsNone(metrics[key]['percentiles']['0.01']) - metrics[key]['percentiles']['0.01'] = data[key] # Fill so we can check everything else below - check_metrics(metrics) - - # Check broken samples - try: - toe_metrics(scalar, n_samples = 'abc') - except TypeError: - pass - - try: - toe_metrics(scalar, n_samples = []) - except TypeError: - pass - - # P(success) - p_success = prob_success(scalar, 11) - self.assertAlmostEqual(p_success['a'], 0) # After all samples - self.assertAlmostEqual(p_success['b'], 0) # Exactly equal - self.assertAlmostEqual(p_success['c'], 1) # Before all samples - - def test_toe_metrics_specific_keys(self): - data = { - 'a': 10, - 'b': 11, - 'c': 12 - } - scalar = ScalarData(data) - metrics = scalar.metrics(keys = ['a', 'b']) - self.assertNotIn('c', metrics) - self.assertIn('a', metrics) - self.assertIn('b', metrics) - - # Check P(MS) - p_success = prob_success(scalar, 11, keys = ['a', 'c']) - self.assertNotIn('b', p_success) - self.assertIn('a', p_success) - self.assertIn('c', p_success) - - def test_toe_metrics_u_samples(self): - # Common checks - def check_metrics(metrics): - # True for all keys - for key in u_samples.keys(): - self.assertAlmostEqual(metrics[key]['min'], 0) - for percentile in ['0.01', '0.1', '1']: - # Not enough samples for these - self.assertIsNone(metrics[key]['percentiles'][percentile]) - - # Key specific - self.assertAlmostEqual(metrics['a']['percentiles']['10'], 1) - self.assertAlmostEqual(metrics['a']['percentiles']['25'], 2) - self.assertAlmostEqual(metrics['a']['mean'], 4.5) - self.assertAlmostEqual(metrics['a']['percentiles']['50'], 5) - self.assertAlmostEqual(metrics['a']['percentiles']['75'], 7) - self.assertAlmostEqual(metrics['a']['mean absolute deviation'], 2.5) - self.assertAlmostEqual(metrics['a']['max'], 9) - self.assertAlmostEqual(metrics['a']['std'], 2.8722813232690143) - self.assertAlmostEqual(metrics['b']['percentiles']['10'], 1.1) - self.assertAlmostEqual(metrics['b']['percentiles']['25'], 2.2) - self.assertAlmostEqual(metrics['b']['mean'], 4.95) - self.assertAlmostEqual(metrics['b']['percentiles']['50'], 5.5) - self.assertAlmostEqual(metrics['b']['percentiles']['75'], 7.7) - self.assertAlmostEqual(metrics['b']['mean absolute deviation'], 2.75) - self.assertAlmostEqual(metrics['b']['max'], 9.9) - self.assertAlmostEqual(metrics['b']['std'], 3.159509455595916) - self.assertAlmostEqual(metrics['c']['percentiles']['10'], 0.04) - self.assertAlmostEqual(metrics['c']['percentiles']['25'], 0.16) - self.assertAlmostEqual(metrics['c']['mean'], 1.14) - self.assertAlmostEqual(metrics['c']['percentiles']['50'], 1.0) - self.assertAlmostEqual(metrics['c']['percentiles']['75'], 1.96) - self.assertAlmostEqual(metrics['c']['mean absolute deviation'], 0.928) - self.assertAlmostEqual(metrics['c']['max'], 3.24) - self.assertAlmostEqual(metrics['c']['std'], 1.074094967868298) - - data = [{'a': i, 'b': i*1.1, 'c': (i/5)**2} for i in range(10)] - u_samples = UnweightedSamples(data) - metrics = toe_metrics(u_samples) - self.assertDictEqual(u_samples.metrics(), metrics) - - check_metrics(metrics) - for key in u_samples.keys(): - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertNotIn(key2, metrics[key]) - - metrics = toe_metrics(u_samples, 5.0) - self.assertDictEqual(u_samples.metrics(ground_truth=5.0), metrics) - check_metrics(metrics) - for key in u_samples.keys(): - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertIn(key2, metrics[key]) - self.assertAlmostEqual(metrics['a']['mean absolute error'], 2.5) - self.assertAlmostEqual(metrics['b']['mean absolute error'], 2.75) - self.assertAlmostEqual(metrics['c']['mean absolute error'], 3.86) - - ground_truth = {'a': 5.0, 'b': 4.5, 'c': 1.5} - metrics = toe_metrics(u_samples, ground_truth = ground_truth) - self.assertDictEqual(u_samples.metrics(ground_truth = ground_truth), metrics) - check_metrics(metrics) - for key in u_samples.keys(): - for key2 in ['mean absolute percentage error', 'relative accuracy', 'ground truth percentile']: - self.assertIn(key2, metrics[key]) - self.assertAlmostEqual(metrics['a']['mean absolute error'], 2.5) - self.assertAlmostEqual(metrics['b']['mean absolute error'], 2.75) - self.assertAlmostEqual(metrics['c']['mean absolute error'], 1.012) - - # Empty Sample Set - try: - toe_metrics(UnweightedSamples([])) - except ValueError: - pass - - # P(success) - p_success = prob_success(u_samples, 5.0) - self.assertAlmostEqual(p_success['a'], 0.4) - self.assertAlmostEqual(p_success['b'], 0.5) - self.assertAlmostEqual(p_success['c'], 0) - - def test_toe_metrics_ground_truth(self): - # Wrong type - try: - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth='abc') - except TypeError: - pass - - # Below samples - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth=0) - - # At sample - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth=1) - - # Above samples - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth=2) - - # NaN - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth=float('nan')) - - # Inf - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth=float('inf')) - - # -Inf - toe_metrics(UnweightedSamples([{'a': 1.0}]), ground_truth=-float('inf')) - - def test_toe_profile_metrics(self): - from prog_algs.predictors import ToEPredictionProfile - profile = ToEPredictionProfile() # Empty profile - for i in range(10): - # a will shift upward from 0-19 to 9-28 - # b is always a-1 - # c is always a * 2, and will therefore always have twice the spread - data = [{'a': j, 'b': j -1 , 'c': (j-4.5) * 2 + 4.5} for j in range(i, i+20)] - profile.add_prediction( - 10-i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - - from prog_algs.metrics import alpha_lambda - - # Test 1: Ground truth at median - ground_truth = {'a': 9.0, 'b': 8.0, 'c': 18.0} - lambda_value = 8 # Almost at prediction - alpha = 0.5 - beta = 0.05 # 5% is really bad - metrics = alpha_lambda(profile, ground_truth, lambda_value, alpha, beta) - # Result at t=8 - # a - # toe: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] - # Bounds: [8.5 - 9.5](0.05%) - # b - # toe: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - # Bounds: [8.0 - 8.0](0.0%) - # c - # toe: [-0.5, 1.5, 3.5, 5.5, 7.5, 9.5, 11.5, 13.5, 15.5, 17.5, 19.5, 21.5, 23.5, 25.5, 27.5, 29.5, 31.5, 33.5, 35.5, 37.5] - # Bounds: [13.0 - 23.0](0.25%) - # {'a': True, 'b': False, 'c': True} - self.assertTrue(metrics['a']) - self.assertFalse(metrics['b']) - self.assertTrue(metrics['c']) - - # Now lets do it at t=5 - lambda_value = 5 - metrics = alpha_lambda(profile, ground_truth, lambda_value, alpha, beta) - # Here all should be true - # a - # toe: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24] - # Bounds: [7.0 - 11.0](0.15%) - # b - # toe: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] - # Bounds: [6.5 - 9.5](0.15%) - # c - # toe: [5.5, 7.5, 9.5, 11.5, 13.5, 15.5, 17.5, 19.5, 21.5, 23.5, 25.5, 27.5, 29.5, 31.5, 33.5, 35.5, 37.5, 39.5, 41.5, 43.5] - # Bounds: [11.5 - 24.5](0.3%) - # {'a': True, 'b': True, 'c': True} - self.assertTrue(metrics['a']) - self.assertTrue(metrics['b']) - self.assertTrue(metrics['c']) - self.assertDictEqual(metrics, profile.alpha_lambda(ground_truth, lambda_value, alpha, beta)) - - # Now lets try specifying only keys a and b - metrics = alpha_lambda(profile, ground_truth, lambda_value, alpha, beta, keys=['a', 'b']) - self.assertIn('a', metrics) - self.assertIn('b', metrics) - self.assertNotIn('c', metrics) - - def test_toe_profile_metrics(self): - from prog_algs.predictors import ToEPredictionProfile - profile = ToEPredictionProfile() # Empty profile - for i in range(10): - # a will shift upward from 0-19 to 9-28 - # b is always a-1 - # c is always a * 2, and will therefore always have twice the spread - data = [{'a': j, 'b': j -1 , 'c': (j-4.5) * 2 + 4.5} for j in range(i, i+20)] - profile.add_prediction( - 10-i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - - from prog_algs.metrics import alpha_lambda - - # Test 1: Ground truth at median - ground_truth = {'a': 9.0, 'b': 8.0, 'c': 18.0} - lambda_value = 8 # Almost at prediction - alpha = 0.5 - beta = 0.05 # 5% is really bad - metrics = alpha_lambda(profile, ground_truth, lambda_value, alpha, beta) - - # Test pickling ToEPredictionProfile - import pickle - pickle.dump(profile, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(profile, pickle_converted_result) - # Test pickling alpha_lambda result - pickle.dump(metrics, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(metrics, pickle_converted_result) - - def test_toe_profile_prognostic_horizon(self): - from prog_algs.predictors import ToEPredictionProfile - profile = ToEPredictionProfile() # Empty profile - # Define test sample ground truth - GROUND_TRUTH = {'a': 9.0, 'b': 8.0, 'c': 18.0} - # Create rudimentary criteria equation - def criteria_eqn(tte : UncertainData, ground_truth_tte : dict) -> dict: - """ - Sample criteria equation for unittesting. - - Args: - tte : UncertainData - Time to event in UncertainData format. - ground_truth_tte : dict - Dictionary of ground truth of time to event. - """ - result = {} - for key, value in ground_truth_tte.items(): - result[key] = abs(tte.mean[key] - value) < 0.6 - return result - from prog_algs.metrics import prognostic_horizon - # Prognostic horizon metric testing - # Test 0: Empty profile (should return None for all) - self.assertDictEqual(prognostic_horizon(profile, criteria_eqn, GROUND_TRUTH), {'a': None, 'b': None, 'c': None}) - - # Loading profile - for i in range(10): - # a will shift upward from 0-19 to 9-28 - # b is always a-1 - # c is always a * 2, and will therefore always have twice the spread - data = [{'a': j, 'b': j -1 , 'c': (j-4.5) * 2 + 4.5} for j in range(i, i+20)] - profile.add_prediction( - 10-i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - # Test 1: simple 1 criteria met - self.assertDictEqual(prognostic_horizon(profile, criteria_eqn, GROUND_TRUTH), {'a': None, 'b': None, 'c': 10.0}) - # Test 2: all criteria are met at different times - GROUND_TRUTH = {'a': 10.0, 'b': 10.0, 'c': 18.0} # Adjust ground truth to match 3 criteria - self.assertDictEqual(prognostic_horizon(profile, criteria_eqn, GROUND_TRUTH), {'a': 1.0, 'b': 2.0, 'c': 10.0}) - # Test 3: 2 criteria are met at once (at 10.0) - GROUND_TRUTH = {'a': 9.0, 'b': 14.0, 'c': 18.0} - self.assertDictEqual(prognostic_horizon(profile, criteria_eqn, GROUND_TRUTH), {'a': None, 'b': 10.0, 'c': 10.0}) - # Test 4: at least one criteria is met at beginning of the prediction - GROUND_TRUTH = {'a': 10, 'b': 8.0, 'c': 10.0} - self.assertDictEqual(prognostic_horizon(profile, criteria_eqn, GROUND_TRUTH), {'a': 1.0, 'b': None, 'c': None}) - # Test 5: criteria not met for any - GROUND_TRUTH = {'a': 9.0, 'b': 8.0, 'c': 8.0} - self.assertDictEqual(prognostic_horizon(profile, criteria_eqn, GROUND_TRUTH), {'a': None, 'b': None, 'c': None}) - - def test_toe_profile_cumulative_relative_accuracy(self): - from prog_algs.predictors import ToEPredictionProfile - profile = ToEPredictionProfile() # Empty profile - # Loading profile - for i in range(10): - data = [{'a': j, 'b': j -1 , 'c': (j-4.5) * 2 + 4.5} for j in range(i, i+20)] - profile.add_prediction( - 10-i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - # Test positive floats ground truth - GROUND_TRUTH = {'a': 9.0, 'b': 8.0, 'c': 18.0} - self.assertEqual(profile.cumulative_relative_accuracy(GROUND_TRUTH), {'a': 0.4444444444444445, 'b': 0.375, 'c': 0.6388888888888888}) - # Test negative floats ground truth - GROUND_TRUTH = {'a': -9.0, 'b': -8.0, 'c': -18.0} - self.assertEqual(profile.cumulative_relative_accuracy(GROUND_TRUTH), {'a': 3.555555555555556, 'b': 3.625, 'c': 3.305555555555556}) - # Test ground truth values of 0; already caught by relative_accuracy - with self.assertRaises(ZeroDivisionError): - GROUND_TRUTH = {'a': 0, 'b': 0, 'c': 0} - raise_error = profile.cumulative_relative_accuracy(GROUND_TRUTH) - # Test ground truth in invalid input types; already caught by relative_accuracy - with self.assertRaises(TypeError): - GROUND_TRUTH = [] - raise_error = profile.cumulative_relative_accuracy(GROUND_TRUTH) - - def test_toe_profile_monotonicity(self): - from prog_algs.predictors import ToEPredictionProfile - - # Test monotonically increasing and decreasing - profile = ToEPredictionProfile() # Empty profile - for i in range(10): - data = [{'a': 1+i/10, 'b': 2-i/5} for i in range(10)] - profile.add_prediction( - i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - self.assertDictEqual(profile.monotonicity(), {'a': 1.0, 'b': 1.0}) - - # Test no monotonicity - profile = ToEPredictionProfile() # Empty profile - for i in range(0,11): - data = [{'a': i + i*(i%2-0.5), 'b': i + i*(i%2-0.5)}]*10 - profile.add_prediction( - i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - self.assertDictEqual(profile.monotonicity(), {'a': 0.0, 'b': 0.0}) - - # Test monotonicity between range [0,1] - profile = ToEPredictionProfile() # Empty profile - for i in range(11): - data = [{'a': i+i*(i%3-0.5), 'b': i+i*(i%3-0.5)}] * 10 - profile.add_prediction( - i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - self.assertDictEqual(profile.monotonicity(), {'a': 0.4, 'b': 0.4}) - - # Test mixed - profile = ToEPredictionProfile() # Empty profile - for i in range(11): - data = [{'a': i+i*(i%3-0.5), 'b': i + i*(i%2-0.5), 'c': 1+i/10}] * 10 - profile.add_prediction( - i, # Time (reverse so data is decreasing) - UnweightedSamples(data) # ToE Prediction - ) - self.assertDictEqual(profile.monotonicity(), {'a': 0.4, 'b': 0.0, 'c': 1.0}) - - # Test MultivariateNormalDist - profile = ToEPredictionProfile() # Empty profile - covar = [[0.1, 0.01], [0.01, 0.1]] - for i in range(11): - data = [{'a': i, 'b': i*(i%3+5)}] * 11 - profile.add_prediction( - i, # Time (reverse so data is decreasing) - MultivariateNormalDist(data[i].keys(), data[i].values(), covar) # ToE Prediction - ) - self.assertDictEqual(profile.monotonicity(), {'a': 0.0, 'b': 0.5}) - - # Test ScalarData - profile = ToEPredictionProfile() # Empty profile - for i in range(11): - data = {'a': i+i*(i%3-0.5), 'b': i+i*(i%3-0.5)} - profile.add_prediction( - i, # Time (reverse so data is decreasing) - ScalarData(data) # ToE Prediction - ) - self.assertDictEqual(profile.monotonicity(), {'a': 0.4, 'b': 0.4}) - - -# This allows the module to be executed directly -def run_tests(): - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Metrics") - result = runner.run(l.loadTestsFromTestCase(TestMetrics)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() diff --git a/tests/test_predictors.py b/tests/test_predictors.py deleted file mode 100644 index 34a1d1eb..00000000 --- a/tests/test_predictors.py +++ /dev/null @@ -1,423 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -import numpy as np -import pickle -import sys -import unittest - -from prog_models import PrognosticsModel -from prog_algs.predictors import UnscentedTransformPredictor, MonteCarlo, ToEPredictionProfile -from prog_algs.uncertain_data import MultivariateNormalDist, UnweightedSamples, ScalarData -from prog_models.models import BatteryCircuit, ThrownObject -from prog_algs.state_estimators import UnscentedKalmanFilter -from prog_algs.predictors.prediction import UnweightedSamplesPrediction, Prediction -from prog_algs.metrics import samples - -# This ensures that the directory containing predictor_template is in the Python search directory -from os.path import dirname, join -sys.path.append(join(dirname(__file__), "..")) - - -class MockProgModel(PrognosticsModel): - states = ['a', 'b', 'c', 't'] - inputs = ['i1', 'i2'] - outputs = ['o1'] - events = ['e1', 'e2'] - default_parameters = { - 'p1': 1.2, - } - - def initialize(self, u = {}, z = {}): - return {'a': 1, 'b': 5, 'c': -3.2, 't': 0} - - def next_state(self, x, u, dt): - x['a']+= u['i1']*dt - x['c']-= u['i2'] - x['t']+= dt - return x - - def output(self, x): - return {'o1': x['a'] + x['b'] + x['c']} - - def event_state(self, x): - t = x['t'] - return { - 'e1': max(1-t/5.0,0), - 'e2': max(1-t/15.0,0) - } - - def threshold_met(self, x): - return {key : value < 1e-6 for (key, value) in self.event_state(x).items()} - - -class TestPredictors(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls._m = ThrownObject(process_noise = 0, measurement_noise = 0) - def future_loading(t, x= None): - return cls._m.InputContainer({}) - cls._s = cls._m.generate_surrogate([future_loading], states = ['v'], dt = 0.1, save_freq = 0.1, threshold_keys='impact') - - def test_pred_template(self): - from predictor_template import TemplatePredictor - m = MockProgModel() - pred = TemplatePredictor(m) - - def test_UTP_ThrownObject(self): - m = ThrownObject() - pred = UnscentedTransformPredictor(m) - samples = MultivariateNormalDist(['x', 'v'], [1.83, 40], [[0.1, 0.01], [0.01, 0.1]]) - def future_loading(t, x={}): - return {} - - mc_results = pred.predict(samples, future_loading, dt=0.01, save_freq=1) - self.assertAlmostEqual(mc_results.time_of_event.mean['impact'], 8.21, 0) - self.assertAlmostEqual(mc_results.time_of_event.mean['falling'], 4.15, 0) - # self.assertAlmostEqual(mc_results.times[-1], 9, 1) # Saving every second, last time should be around the 1s after impact event (because one of the sigma points fails afterwards) - - def test_UTP_ThrownObject_One_Event(self): - # Test thrown object, similar to test_UKP_ThrownObject, but with only the 'falling' event - m = ThrownObject() - pred = UnscentedTransformPredictor(m) - samples = MultivariateNormalDist(['x', 'v'], [1.83, 40], [[0.1, 0.01], [0.01, 0.1]]) - def future_loading(t, x={}): - return {} - - mc_results = pred.predict(samples, future_loading, dt=0.01, events=['falling'], save_freq=1) - self.assertAlmostEqual(mc_results.time_of_event.mean['falling'], 3.8, 0) - self.assertTrue('impact' not in mc_results.time_of_event.mean) - self.assertAlmostEqual(mc_results.times[-1], 3, 1) # Saving every second, last time should be around the nearest 1s before falling event - - def test_UKP_Battery(self): - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - - batt = BatteryCircuit() - - ## State Estimation - perform a single ukf state estimate step - filt = UnscentedKalmanFilter(batt, batt.parameters['x0']) - - example_measurements = {'t': 32.2, 'v': 3.915} - t = 0.1 - filt.estimate(t, future_loading(t), example_measurements) - - ## Prediction - Predict EOD given current state - # Setup prediction - ut = UnscentedTransformPredictor(batt) - - # Predict with a step size of 0.1 - mc_results = ut.predict(filt.x, future_loading, dt=0.1) - self.assertAlmostEqual(mc_results.time_of_event.mean['EOD'], 3004, -2) - - # Test Metrics - s = mc_results.time_of_event.sample(100).key('EOD') - samples.eol_metrics(s) # Kept for backwards compatibility - - def test_MC(self): - m = ThrownObject() - mc = MonteCarlo(m) - def future_loading(t = None, x = None): - return {} - - mc.predict(m.initialize(), future_loading, dt=0.2, num_samples=3, save_freq=1) - - def test_prediction_mvnormaldist(self): - times = list(range(10)) - covar = [[0.1, 0.01], [0.01, 0.1]] - means = [{'a': 1+i/10, 'b': 2-i/5} for i in range(10)] - states = [MultivariateNormalDist(means[i].keys(), means[i].values(), covar) for i in range(10)] - p = Prediction(times, states) - - self.assertEqual(p.mean, means) - self.assertEqual(p.snapshot(0), states[0]) - self.assertEqual(p.snapshot(-1), states[-1]) - self.assertEqual(p.time(0), times[0]) - self.assertEqual(p.times[0], times[0]) - self.assertEqual(p.time(-1), times[-1]) - self.assertEqual(p.times[-1], times[-1]) - - # Out of range - try: - tmp = p.time(10) - self.fail() - except Exception: - pass - - def test_prediction_uwsamples(self): - times = list(range(10)) - states = [UnweightedSamples([{'a': i} for i in range(10)]), - UnweightedSamples([{'a': i} for i in range(1, 11)]), - UnweightedSamples([{'a': i} for i in range(-1, 9)])] - p = UnweightedSamplesPrediction(times, states) - - self.assertEqual(p[0], states[0]) - self.assertEqual(p.sample(0), states[0]) - self.assertEqual(p.sample(-1), states[-1]) - self.assertEqual(p.snapshot(0), UnweightedSamples([{'a': 0}, {'a': 1}, {'a': -1}])) - self.assertEqual(p.snapshot(-1), UnweightedSamples([{'a': 9}, {'a': 10}, {'a': 8}])) - self.assertEqual(p.time(0), times[0]) - self.assertEqual(p.times[0], times[0]) - self.assertEqual(p.time(-1), times[-1]) - - # Out of range - try: - tmp = p[10] - self.fail() - except Exception: - pass - - try: - tmp = p.sample(10) - self.fail() - except Exception: - pass - - try: - tmp = p.time(10) - self.fail() - except Exception: - pass - - # Bad type - try: - tmp = p.sample('abc') - self.fail() - except Exception: - pass - - def test_prediction_profile(self): - profile = ToEPredictionProfile() - self.assertEqual(len(profile), 0) - - profile.add_prediction(0, ScalarData({'a': 1, 'b': 2, 'c': -3.2})) - profile.add_prediction(1, ScalarData({'a': 1.1, 'b': 2.2, 'c': -3.1})) - profile.add_prediction(0.5, ScalarData({'a': 1.05, 'b': 2.1, 'c': -3.15})) - self.assertEqual(len(profile), 3) - for (t_p, t_p_real) in zip(profile.keys(), [0, 0.5, 1]): - self.assertAlmostEqual(t_p, t_p_real) - - profile[0.75] = ScalarData({'a': 1.075, 'b': 2.15, 'c': -3.125}) - self.assertEqual(len(profile), 4) - for (t_p, t_p_real) in zip(profile.keys(), [0, 0.5, 0.75, 1]): - self.assertAlmostEqual(t_p, t_p_real) - self.assertEqual(profile[0.75], ScalarData({'a': 1.075, 'b': 2.15, 'c': -3.125})) - - del profile[0.5] - self.assertEqual(len(profile), 3) - for (t_p, t_p_real) in zip(profile.keys(), [0, 0.75, 1]): - self.assertAlmostEqual(t_p, t_p_real) - for ((t_p, toe), t_p_real) in zip(profile.items(), [0, 0.75, 1]): - self.assertAlmostEqual(t_p, t_p_real) - try: - tmp = profile[0.5] - # 0.5 doesn't exist anymore - except Exception: - pass - - def test_pickle_UTP_ThrownObject_pickle_result(self): # PREDICTION TEST - m = ThrownObject() - pred = UnscentedTransformPredictor(m) - samples = MultivariateNormalDist(['x', 'v'], [1.83, 40], [[0.1, 0.01], [0.01, 0.1]]) - def future_loading(t, x={}): - return {} - - mc_results = pred.predict(samples, future_loading, dt=0.01, save_freq=1) - pickle.dump(mc_results, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(mc_results, pickle_converted_result) - - def test_UTP_ThrownObject_One_Event_pickle_result(self): # PREDICTION TEST - # Test thrown object, similar to test_UKP_ThrownObject, but with only the 'falling' event - m = ThrownObject() - pred = UnscentedTransformPredictor(m) - samples = MultivariateNormalDist(['x', 'v'], [1.83, 40], [[0.1, 0.01], [0.01, 0.1]]) - def future_loading(t, x={}): - return {} - - mc_results = pred.predict(samples, future_loading, dt=0.01, events=['falling'], save_freq=1) - pickle.dump(mc_results, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(mc_results, pickle_converted_result) - - def test_UKP_Battery_pickle_result(self): - def future_loading(t, x = None): - # Variable (piece-wise) future loading scheme - if (t < 600): - i = 2 - elif (t < 900): - i = 1 - elif (t < 1800): - i = 4 - elif (t < 3000): - i = 2 - else: - i = 3 - return {'i': i} - - batt = BatteryCircuit() - - ## State Estimation - perform a single ukf state estimate step - filt = UnscentedKalmanFilter(batt, batt.parameters['x0']) - - example_measurements = {'t': 32.2, 'v': 3.915} - t = 0.1 - filt.estimate(t, future_loading(t), example_measurements) - - ## Prediction - Predict EOD given current state - # Setup prediction - ut = UnscentedTransformPredictor(batt) - - # Predict with a step size of 0.1 - mc_results = ut.predict(filt.x, future_loading, dt=0.1) - pickle.dump(mc_results, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(mc_results, pickle_converted_result) - - def test_pickle_prediction_mvnormaldist(self): - times = list(range(10)) - covar = [[0.1, 0.01], [0.01, 0.1]] - means = [{'a': 1+i/10, 'b': 2-i/5} for i in range(10)] - states = [MultivariateNormalDist(means[i].keys(), means[i].values(), covar) for i in range(10)] - p = Prediction(times, states) - - p2 = pickle.loads(pickle.dumps(p)) - self.assertEqual(p2, p) - - def test_pickle_prediction_uwsamples(self): - times = list(range(10)) - states = [UnweightedSamples(list(range(10))), - UnweightedSamples(list(range(1, 11))), - UnweightedSamples(list(range(-1, 9)))] - p = UnweightedSamplesPrediction(times, states) - - p2 = pickle.loads(pickle.dumps(p)) - self.assertEqual(p2, p) - - def test_pickle_prediction_profile(self): - profile = ToEPredictionProfile() - self.assertEqual(len(profile), 0) - - profile.add_prediction(0, ScalarData({'a': 1, 'b': 2, 'c': -3.2})) - profile.add_prediction(1, ScalarData({'a': 1.1, 'b': 2.2, 'c': -3.1})) - profile.add_prediction(0.5, ScalarData({'a': 1.05, 'b': 2.1, 'c': -3.15})) - self.assertEqual(len(profile), 3) - - p2 = pickle.loads(pickle.dumps(profile)) - self.assertEqual(p2, profile) - - # Testing LazyUTPrediction - def test_pickle_UTP_ThrownObject(self): - m = ThrownObject() - pred = UnscentedTransformPredictor(m) - samples = MultivariateNormalDist(['x', 'v'], [1.83, 40], [[0.1, 0.01], [0.01, 0.1]]) - def future_loading(t, x={}): - return {} - mc_results = pred.predict(samples, future_loading, dt=0.01, save_freq=1) - # LazyUTPrediction objects from pre - pred_op = mc_results.outputs - pred_es = mc_results.event_states - - pickle.dump(pred_op, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(pred_op, pickle_converted_result) - - pickle.dump(pred_es, open('predictor_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('predictor_test.pkl', 'rb')) - self.assertEqual(pred_es, pickle_converted_result) - - def test_profile_plot(self): - profile = ToEPredictionProfile() - profile.add_prediction(0, ScalarData({'a': 1, 'b': 2, 'c': -3.2})) - profile.add_prediction(1, ScalarData({'a': 1.1, 'b': 2.2, 'c': -3.1})) - profile.add_prediction(0.5, ScalarData({'a': 1.05, 'b': 2.1, 'c': -3.15})) - - # No ground truth or alpha provided - no_gt_alpha_plots = profile.plot(show=True) - - # Ground truth provided, no alpha provided - sample_gt = {'a': 1.075, 'b': 2.15, 'c': -3.125} - gt_no_alpha_plots = profile.plot(ground_truth=sample_gt, show=True) - - # Ground truth and alpha provided - sample_alpha = 0.50 - gt_and_alpha_plots = profile.plot(ground_truth=sample_gt, alpha=sample_alpha, show=True) - - def test_prediction_monotonicity(self): - times = list(range(10)) - covar = [[0.1, 0.01], [0.01, 0.1]] - - # Test monotonically increasing and decreasing - means = [{'a': 1+i/10, 'b': 2-i/5} for i in range(10)] - states = [MultivariateNormalDist(means[i].keys(), means[i].values(), covar) for i in range(10)] - p = Prediction(times, states) - self.assertDictEqual(p.monotonicity(), {'a': 1.0, 'b': 1.0}) - - # Test no monotonicity - means = [{'a': i*(i%2-1), 'b': i*(i%2-1)} for i in range(10)] - states = [MultivariateNormalDist(means[i].keys(), means[i].values(), covar) for i in range(10)] - p = Prediction(times, states) - self.assertDictEqual(p.monotonicity(), {'a': 0.0, 'b': 0.0}) - - # Test monotonicity between range [0,1] - means = [{'a': i*(i%3-1), 'b': i*(i%3-1)} for i in range(10)] - states = [MultivariateNormalDist(means[i].keys(), means[i].values(), covar) for i in range(10)] - p = Prediction(times, states) - self.assertDictEqual(p.monotonicity(), {'a': 0.2222222222222222, 'b': 0.2222222222222222}) - - # Test mixed - means = [{'a': i, 'b': i*(i%3+5)} for i in range(10)] - states = [MultivariateNormalDist(means[i].keys(), means[i].values(), covar) for i in range(10)] - p = Prediction(times, states) - self.assertDictEqual(p.monotonicity(), {'a': 1, 'b': 0.5555555555555556}) - - # Test Scalar - samples = [{'a': 1+i/10, 'b': 2-i/5, 'c': i*(i%2-1), 'd': i*(i%3-1)} for i in range(10)] - states = [ScalarData(samples[i]) for i in range(10)] - p = Prediction(times, states) - self.assertDictEqual(p.monotonicity(), {'a': 1, 'b': 1, 'c': 0, 'd': 0.2222222222222222}) - - # Test UnweightedSamples - samples = [{'a': 1+i/10, 'b': 2-i/5, 'c': i*(i%2-1), 'd': i*(i%3-1)} for i in range(10)] - states = [UnweightedSamples([samples[i]]) for i in range(10)] - p = Prediction(times, states) - self.assertDictEqual(p.monotonicity(), {'a': 1, 'b': 1, 'c': 0, 'd': 0.2222222222222222}) - - def _test_surrogate_pred(self, Predictor, **kwargs): - s = self._s - p = Predictor(s, **kwargs) - def future_loading(t, x= None): - return s.InputContainer({}) - x0 = s.initialize() - x0 = MultivariateNormalDist(x0.keys(), x0.values(), np.diag([1e-8 * xi for xi in x0.values()])) - result = p.predict(x0, future_loading, horizon = 50, dt = 0.1) - - def test_utp_surrogate(self): - self._test_surrogate_pred(UnscentedTransformPredictor, Q = np.diag([1e-3, 1e-3, 1e-7, 1e-7])) - - def test_mc_surrogate(self): - self._test_surrogate_pred(MonteCarlo) - -# This allows the module to be executed directly -def run_tests(): - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Predictor") - from unittest.mock import patch - with patch('matplotlib.pyplot.show') as p: - result = runner.run(l.loadTestsFromTestCase(TestPredictors)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() diff --git a/tests/test_state_estimators.py b/tests/test_state_estimators.py deleted file mode 100644 index a9f18d9a..00000000 --- a/tests/test_state_estimators.py +++ /dev/null @@ -1,577 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. -import unittest -import numpy as np -import random - -from prog_models import PrognosticsModel, LinearModel -from prog_models.models import ThrownObject, BatteryElectroChem, PneumaticValveBase -from prog_algs.state_estimators import ParticleFilter, KalmanFilter, UnscentedKalmanFilter -from prog_algs.uncertain_data import ScalarData, MultivariateNormalDist, UnweightedSamples - -def equal_cov(pair1, pair2): - """ - Compare 2 covariance matricies, considering the order - - Args: - pair1 (tuple[list, array[array[float]]]): - keys (list[str]): Labels for keys - covar (array[array[float]]): Covariance matrix - pair2 (tuple[list, array[array[float]]]): - keys (list[str]): Labels for keys - covar (array[array[float]]): Covariance matrix - """ - (keys1, cov1) = pair1 - (keys2, cov2) = pair2 - mapping = {i: keys2.index(key) for i, key in enumerate(keys1)} - return all([cov1[i][j] == cov2[mapping[i]][mapping[j]] for i in range(len(keys1)) for j in range(len(keys1))]) - - -class MockProgModel(PrognosticsModel): - states = ['a', 'b', 'c', 't'] - inputs = ['i1', 'i2'] - outputs = ['o1'] - events = ['e1', 'e2'] - default_parameters = { - 'p1': 1.2, - } - - def initialize(self, u = {}, z = {}): - return {'a': 1, 'b': 5, 'c': -3.2, 't': 0} - - def next_state(self, x, u, dt): - x['a']+= u['i1']*dt - x['c']-= u['i2'] - x['t']+= dt - return x - - def output(self, x): - return {'o1': x['a'] + x['b'] + x['c']} - - def event_state(self, x): - t = x['t'] - return { - 'e1': max(1-t/5.0,0), - 'e2': max(1-t/15.0,0) - } - - def threshold_met(self, x): - return {key : value < 1e-6 for (key, value) in self.event_state(x).items()} - - -class MockProgModel2(MockProgModel): - outputs = ['o1', 'o2'] - def output(self, x): - return self.OutputContainer({ - 'o1': x['a'] + x['b'] + x['c'], - 'o2': 7 - }) - - -class TestStateEstimators(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls._m_mock = MockProgModel() - cls._m = ThrownObject() - def future_loading(t, x= None): - return cls._m.InputContainer({}) - cls._future_loading = future_loading - cls._s = cls._m.generate_surrogate([future_loading], states = ['v'], dt = 0.1, save_freq = 0.1) - - def test_state_est_template(self): - from state_estimator_template import TemplateStateEstimator - se = TemplateStateEstimator(self._m_mock, {'a': 0.0, 'b': 0.0, 'c': 0.0, 't':0.0}) - - def __test_state_est(self, filt, m): - x = m.initialize() - - self.assertTrue(all(key in filt.x.mean for key in m.states)) - - # run for a while - dt = 0.2 - u = m.InputContainer({}) - last_time = 0 - for i in range(500): - # Get simulated output (would be measured in a real application) - x = m.next_state(x, u, dt) - z = m.output(x) - - # Estimate New State every few steps - if i % 8 == 0: - # This is to test dt - # Without dt, this would fail - last_time = (i+1)*dt - filt.estimate((i+1)*dt, u, z, dt=dt) - - if last_time != (i+1)*dt: - # Final estimate - filt.estimate((i+1)*dt, u, z, dt=dt) - - # Check results - make sure it converged - x_est = filt.x.mean - for key in m.states: - # should be close to right - self.assertAlmostEqual(x_est[key], x[key], delta=0.4) - - def test_UKF(self): - m = ThrownObject(process_noise=5e-2, measurement_noise=5e-2) - x_guess = {'x': 1.75, 'v': 35} # Guess of initial state, actual is {'x': 1.83, 'v': 40} - - filt = UnscentedKalmanFilter(m, x_guess) - self.__test_state_est(filt, m) - - m = ThrownObject(process_noise=5e-2, measurement_noise=5e-2) - - # Test UnscentedKalmanFilter ScalarData - x_scalar = ScalarData({'x': 1.75, 'v': 35}) - filt_scalar = UnscentedKalmanFilter(m, x_scalar) - mean1 = filt_scalar.x.mean - mean2 = x_scalar.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_scalar.keys()), x_scalar.cov), - (list(filt_scalar.x.keys()), filt_scalar.x.cov))) - - # Test UnscentedKalmanFilter MultivariateNormalDist - x_mvnd = MultivariateNormalDist(['x', 'v'], np.array([2, 10]), np.array([[1, 0], [0, 1]])) - filt_mvnd = UnscentedKalmanFilter(m, x_mvnd) - mean1 = filt_mvnd.x.mean - mean2 = x_mvnd.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_mvnd.keys()), x_mvnd.cov), - (list(filt_mvnd.x.keys()), filt_mvnd.x.cov))) - - # Now with a different order - x_mvnd = MultivariateNormalDist(['v', 'x'], np.array([10, 2]), np.array([[1, 0], [0, 2]])) - filt_mvnd = UnscentedKalmanFilter(m, x_mvnd) - mean1 = filt_mvnd.x.mean - mean2 = x_mvnd.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_mvnd.keys()), x_mvnd.cov), - (list(filt_mvnd.x.keys()), filt_mvnd.x.cov)), "Covs are not equal for multivariate in different order") - - # Test UnscentedKalmanFilter UnweightedSamples - x_us = UnweightedSamples([{'x': 1, 'v':2}, {'x': 3, 'v':-2}]) - filt_us = UnscentedKalmanFilter(m, x_us) - mean1 = filt_us.x.mean - mean2 = x_us.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_us.keys()), x_us.cov), - (list(filt_us.x.keys()), filt_us.x.cov))) - - with self.assertRaises(Exception): - # Not linear model - UnscentedKalmanFilter(BatteryElectroChem, {}) - - with self.assertRaises(Exception): - # Missing states - UnscentedKalmanFilter(ThrownObject, {}) - - def __incorrect_input_tests(self, filter): - class IncompleteModel: - outputs = [] - states = ['a', 'b'] - def next_state(self): - pass - def output(self): - pass - m = IncompleteModel() - x0 = {'a': 0, 'c': 2} - # Missing Key 'b' - with self.assertRaises(KeyError): - filter(m, x0) - - class IncompleteModel: - states = ['a', 'b'] - def next_state(self): - pass - def output(self): - pass - m = IncompleteModel() - x0 = {'a': 0, 'b': 2} - with self.assertRaises(NotImplementedError): - filter(m, x0) - - class IncompleteModel: - outputs = [] - def next_state(self): - pass - def output(self): - pass - m = IncompleteModel() - x0 = {'a': 0, 'b': 2} - with self.assertRaises(NotImplementedError): - filter(m, x0) - - class IncompleteModel: - outputs = [] - states = ['a', 'b'] - def output(self): - pass - m = IncompleteModel() - x0 = {'a': 0, 'b': 2} - with self.assertRaises(NotImplementedError): - filter(m, x0) - class IncompleteModel: - outputs = [] - states = ['a', 'b'] - def next_state(self): - pass - m = IncompleteModel() - x0 = {'a': 0, 'b': 2} - with self.assertRaises(NotImplementedError): - filter(m, x0) - - def test_UKF_incorrect_input(self): - self.__incorrect_input_tests(UnscentedKalmanFilter) - - def test_PF_limit_check(self): - class OneInputOneOutputOneEventLM(LinearModel): - inputs = ['u1'] - states = ['x1'] - outputs = ['x1+1'] - events = ['x1 == 10'] - - A = np.array([[0]]) - B = np.array([[1]]) - C = np.array([[1]]) - D = np.array([[1]]) - F = np.array([[-0.1]]) - G = np.array([[1]]) - - default_parameters = { - 'process_noise': 0.1, - 'measurement_noise': 0.1, - 'x0': { - 'x1': 0 - } - } - - m = OneInputOneOutputOneEventLM() - pf = ParticleFilter(m, {'x1': 10}, num_particles = 5) - - # Without state limits - pf.estimate(1, {'u1': 1}, {'x1+1': 12}) - self.assertAlmostEqual(pf.x.mean['x1'], 11, delta=0.2) - - # With state limits - OneInputOneOutputOneEventLM.state_limits = { - 'x1': (0, 10) - } - pf.estimate(2, {'u1': 1}, {'x1+1': 13}) - self.assertLessEqual(pf.x.mean['x1'], 10) # Limited to 10 now - - def test_PF_step(self): - m = PneumaticValveBase() - - # Generate data - cycle_time = 20 - def future_loading(t, x=None): - t = t % cycle_time - if t < cycle_time/2: - return m.InputContainer({ - 'pL': 3.5e5, - 'pR': 2.0e5, - # Open Valve - 'uTop': False, - 'uBot': True - }) - return m.InputContainer({ - 'pL': 3.5e5, - 'pR': 2.0e5, - # Close Valve - 'uTop': True, - 'uBot': False - }) - - config = { - 'dt': 0.01, - 'save_freq': 1, - } - simulated_results = m.simulate_to(10, future_loading, **config) - - # Setup PF - x0 = m.initialize(future_loading(0)) - filt = ParticleFilter(m, x0, num_particles = 100) - t=0 - for u, z in zip(simulated_results.inputs, simulated_results.outputs): - filt.estimate(t, u, z, dt = 3) - t += config['save_freq'] - - def test_PF(self): - m = ThrownObject(process_noise={'x': 0.75, 'v': 0.75}, measurement_noise=1) - x_guess = {'x': 1.75, 'v': 38.5} # Guess of initial state, actual is {'x': 1.83, 'v': 40} - - filt = ParticleFilter(m, x_guess, num_particles = 1000, measurement_noise = {'x': 1}) - self.__test_state_est(filt, m) - - # Test ParticleFilter ScalarData - x_scalar = ScalarData({'x': 1.75, 'v': 38.5}) - filt_scalar = ParticleFilter(m, x_scalar, num_particles = 20) # Sample count does not affect ScalarData testing - mean1 = filt_scalar.x.mean - mean2 = x_scalar.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue((filt_scalar.x.cov == x_scalar.cov).all()) - - # Test ParticleFilter MultivariateNormalDist - x_mvnd = MultivariateNormalDist(['x', 'v'], np.array([2, 10]), np.array([[1, 0], [0, 1]])) - filt_mvnd = ParticleFilter(m, x_mvnd, num_particles = 100000) - for k, v in filt_mvnd.x.mean.items(): - self.assertAlmostEqual(v, x_mvnd.mean[k], delta = 0.01) - for i in range(len(filt_mvnd.x.cov)): - for j in range(len(filt_mvnd.x.cov[i])): - self.assertAlmostEqual(filt_mvnd.x.cov[i][j], x_mvnd.cov[i][j], delta=0.1) - - # Test ParticleFilter UnweightedSamples - uw_input = [] - x_bounds, v_bounds, x0_samples = 5, 5, 10000 - for i in range(x0_samples): - uw_input.append({'x': random.randrange(-x_bounds, x_bounds), 'v': random.randrange(-v_bounds, v_bounds)}) - x_us = UnweightedSamples(uw_input) - filt_us = ParticleFilter(m, x_us, num_particles = 100000) - for k, v in filt_us.x.mean.items(): - self.assertAlmostEqual(v, x_us.mean[k], delta=0.025) - for i in range(len(filt_us.x.cov)): - for j in range(len(filt_us.x.cov[i])): - self.assertAlmostEqual(filt_us.x.cov[i][j], x_us.cov[i][j], delta=0.1) - - # Test x0 if-else Control - # Case 0: isinstance(x0, UncertainData) - x_scalar = ScalarData({'x': 1.75, 'v': 38.5}) # Testing with ScalarData - filt_scalar = ParticleFilter(m, x_scalar, num_particles = 20) # Sample count does not affect ScalarData testing - mean1 = filt_scalar.x.mean - mean2 = x_scalar.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue((filt_scalar.x.cov == x_scalar.cov).all()) - - def test_PF_incorrect_input(self): - self.__incorrect_input_tests(ParticleFilter) - - def _test_state_est_surrogate(self, StateEst): - m = self._m - s = self._s - - # Setup ParticleFilter - x0 = s.initialize() - filt = StateEst(s, x0) - - # Test - x0 = m.initialize() - x = m.next_state(x0, {}, 0.1) - filt.estimate(0.1, s.InputContainer({}), m.output(x)) - self.assertIsInstance(filt.x.mean, s.StateContainer) - # mean = filt.x.mean - # self.assertAlmostEqual(mean['x'], x['x'], delta=10) - # self.assertAlmostEqual(mean['v'], x['v'], delta=1) - # es = m.event_state(x) - # for key in es.keys(): - # self.assertAlmostEqual(mean[key], es[key], delta=0.2) - - def test_PF_Surrogate(self): - self._test_state_est_surrogate(ParticleFilter) - - def test_UKF_Surrogate(self): - self._test_state_est_surrogate(UnscentedKalmanFilter) - - def test_KF_Surrogate(self): - self._test_state_est_surrogate(KalmanFilter) - - def test_KF(self): - class ThrownObject(LinearModel): - inputs = [] # no inputs, no way to control - states = ['x', 'v'] - outputs = ['x'] - events = ['falling', 'impact'] - - A = np.array([[0, 1], [0, 0]]) - E = np.array([[0], [-9.81]]) - C = np.array([[1, 0]]) - F = None # Will override method - - default_parameters = { - 'thrower_height': 1.83, - 'throwing_speed': 40, - 'g': -9.81 - } - - def initialize(self, u=None, z=None): - return self.StateContainer({ - 'x': self.parameters['thrower_height'], - 'v': self.parameters['throwing_speed'] - }) - - def threshold_met(self, x): - return { - 'falling': x['v'] < 0, - 'impact': x['x'] <= 0 - } - - def event_state(self, x): - x_max = x['x'] + np.square(x['v'])/(-self.parameters['g']*2) # Use speed and position to estimate maximum height - return { - 'falling': np.maximum(x['v']/self.parameters['throwing_speed'],0), # Throwing speed is max speed - 'impact': np.maximum(x['x']/x_max,0) if x['v'] < 0 else 1 # 1 until falling begins, then it's fraction of height - } - - m = ThrownObject(process_noise=5e-2, measurement_noise=5e-2) - x_guess = {'x': 1.75, 'v': 35} # Guess of initial state, actual is {'x': 1.83, 'v': 40} - - filt = KalmanFilter(m, x_guess) - - self.__test_state_est(filt, m) - - m = ThrownObject(process_noise=5e-2, measurement_noise=5e-2) - - # Test KalmanFilter ScalarData - x_scalar = ScalarData({'x': 1.75, 'v': 35}) - filt_scalar = KalmanFilter(m, x_scalar) - mean1 = filt_scalar.x.mean - mean2 = x_scalar.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_scalar.keys()), x_scalar.cov), - (list(filt_scalar.x.keys()), filt_scalar.x.cov))) - - # Test KalmanFilter MultivariateNormalDist - x_mvnd = MultivariateNormalDist(['x', 'v'], np.array([2, 10]), np.array([[1, 0], [0, 1]])) - filt_mvnd = KalmanFilter(m, x_mvnd) - mean1 = filt_mvnd.x.mean - mean2 = x_mvnd.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_mvnd.keys()), x_mvnd.cov), - (list(filt_mvnd.x.keys()), filt_mvnd.x.cov))) - - # Now with a different order - x_mvnd = MultivariateNormalDist(['v', 'x'], np.array([10, 2]), np.array([[1, 0], [0, 2]])) - filt_mvnd = KalmanFilter(m, x_mvnd) - mean1 = filt_mvnd.x.mean - mean2 = x_mvnd.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_mvnd.keys()), x_mvnd.cov), - (list(filt_mvnd.x.keys()), filt_mvnd.x.cov)), "Covs are not equal for multivariate in different order") - - # Test KalmanFilter UnweightedSamples - x_us = UnweightedSamples([{'x': 1, 'v':2}, {'x': 3, 'v':-2}]) - filt_us = KalmanFilter(m, x_us) - mean1 = filt_us.x.mean - mean2 = x_us.mean - self.assertSetEqual(set(mean1.keys()), set(mean2.keys())) - for k in mean1.keys(): - self.assertEqual(mean1[k], mean2[k]) - self.assertTrue( - equal_cov( - (list(x_us.keys()), x_us.cov), - (list(filt_us.x.keys()), filt_us.x.cov))) - - with self.assertRaises(Exception): - # Not linear model - KalmanFilter(BatteryElectroChem, {}) - - with self.assertRaises(Exception): - # Missing states - KalmanFilter(ThrownObject, {}) - - def test_KF_descending(self): - # Example introduced by @CuiiGen in https://github.com/nasa/prog_algs/issues/220 - class Descending(LinearModel): - inputs = ['u'] - states = ['x'] - outputs = ['x'] - events = ['zero'] - A = np.array([[0]]) - B = np.array([[0]]) - E = np.array([[-1]]) - C = np.array([[1]]) - D = np.array([[0]]) - F = None - default_parameters = { - 'x0': { - 'x': 10 - }, - 'process_noise': 0, - 'measurement_noise': 5 - } - - def initialize(self, u=None, z=None): - return self.StateContainer(self.default_parameters['x0']) - - def threshold_met(self, x): - return { - 'zero': x['x'] <= 0 - } - - def event_state(self, x): - return { - 'zero': x['x'] > 0 - } - - m = Descending() - - def future_loading(t, x=None): - return m.InputContainer({'u': 1}) - - config = { - 'dt': 0.01, - 'save_freq': 0.01, - 'threshold_keys': 'zero' - } - simulation_result = m.simulate_to_threshold(future_loading, **config) - - states = simulation_result.states - outputs = simulation_result.outputs - inputs = simulation_result.inputs - states.plot() - outputs.plot() - - x0 = MultivariateNormalDist(['x'], [0], [[0.01]]) - kf = KalmanFilter(m, x0) - times = simulation_result.times - for t, u, z in zip(times, inputs.data, outputs.data): - kf.estimate(t, u, z) - -# This allows the module to be executed directly -def run_tests(): - # This ensures that the directory containing StateEstimatorTemplate is in the python search directory - import sys - from os.path import dirname, join - sys.path.append(join(dirname(__file__), "..")) - - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting State Estimators") - result = runner.run(l.loadTestsFromTestCase(TestStateEstimators)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() diff --git a/tests/test_templates.py b/tests/test_templates.py deleted file mode 100644 index 72d2d3d8..00000000 --- a/tests/test_templates.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -import unittest - - -class TestTemplates(unittest.TestCase): - pass - -# This allows the module to be executed directly -def run_tests(): - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Templates") - result = runner.run(l.loadTestsFromTestCase(TestTemplates)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() diff --git a/tests/test_tutorials.py b/tests/test_tutorials.py deleted file mode 100644 index cd5bb9cc..00000000 --- a/tests/test_tutorials.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -import unittest -from testbook import testbook - -class TestTutorials(unittest.TestCase): - def test_tutorial_ipynb(self): - with testbook('./tutorial.ipynb', execute=True) as tb: - self.assertEqual(tb.__class__.__name__, "TestbookNotebookClient") - - -def run_tests(): - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Tutorials") - result = runner.run(l.loadTestsFromTestCase(TestTutorials)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() - \ No newline at end of file diff --git a/tests/test_uncertain_data.py b/tests/test_uncertain_data.py deleted file mode 100644 index 8b6ab2de..00000000 --- a/tests/test_uncertain_data.py +++ /dev/null @@ -1,573 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -import unittest -from prog_algs.uncertain_data import UnweightedSamples, MultivariateNormalDist, ScalarData -from numpy import array - - -class TestUncertainData(unittest.TestCase): - def test_unweightedsamples(self): - empty_samples = UnweightedSamples() - self.assertEqual(empty_samples.size, 0) - try: - empty_samples.sample() - self.fail() # Cant sample from 0 samples - except ValueError: - pass - - empty_samples.append({'a': 1, 'b': 2}) - self.assertEqual(empty_samples.size, 1) - self.assertDictEqual(empty_samples.mean, {'a': 1, 'b': 2}) - samples = empty_samples.sample() - self.assertDictEqual(samples[0], {'a': 1, 'b': 2}) - self.assertEqual(samples.size, 1) - - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - self.assertDictEqual(s.mean, {'a': 2, 'b': 0}) - self.assertEqual(s.size, 2) - samples = s.sample(10) - self.assertEqual(samples.size, 10) - del s[0] - self.assertEqual(s.size, 1) - k = s.keys() - self.assertEqual(len(s.raw_samples()), 1) - s[0] = {'a': 2, 'b': 10} - self.assertDictEqual(s[0], {'a': 2, 'b': 10}) - for i in range(50): - s.append({'a': i, 'b': 9}) - covar = s.cov - self.assertEqual(len(covar), 2) - self.assertEqual(len(covar[0]), 2) - - # Test median value - data = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 1, 'b': 4}, {'a': 2, 'b': 3}, {'a': 3, 'b': 1}] - data = UnweightedSamples(data) - self.assertEqual(data.median, {'a': 2, 'b': 3}) - - # Test percentage in bounds - self.assertEqual(data.percentage_in_bounds([0, 2.5]), - {'a':0.6, 'b': 0.4}) - self.assertEqual(data.percentage_in_bounds({'a': [0, 2.5], 'b': [0, 1.5]}), - {'a':0.6, 'b': 0.2}) - - def test_multivariatenormaldist(self): - try: - dist = MultivariateNormalDist() - self.fail() - except Exception: - pass - - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - self.assertDictEqual(dist.mean, {'a': 2, 'b':10}) - self.assertDictEqual(dist.median, {'a': 2, 'b':10}) - self.assertEqual(dist.sample().size, 1) - self.assertEqual(dist.sample(10).size, 10) - self.assertTrue((dist.cov == array([[1, 0], [0, 1]])).all()) - dist.percentage_in_bounds([0, 10]) - - def test_scalardist(self): - data = {'a': 12, 'b': 14} - d = ScalarData(data) - self.assertEqual(d.mean, data) - self.assertEqual(d.median, data) - self.assertListEqual(list(d.sample(10)), [data]*10) - self.assertEqual(d.percentage_in_bounds([13, 20]), {'a': 0, 'b': 1}) - self.assertEqual(d.percentage_in_bounds([0, 10]), {'a': 0, 'b': 0}) - self.assertEqual(d.percentage_in_bounds([0, 20]), {'a': 1, 'b': 1}) - - def test_pickle_unweightedsamples(self): - data = {'a': 12, 'b': 14} - d = ScalarData(data) - import pickle # try pickle'ing - pickle.dump(d, open('data_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('data_test.pkl', 'rb')) - self.assertEqual(d, pickle_converted_result) - - def test_pickle_unweightedsamples(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - import pickle # try pickle'ing - pickle.dump(s, open('data_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('data_test.pkl', 'rb')) - self.assertEqual(s, pickle_converted_result) - - def test_pickle_multivariatenormaldist(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - import pickle # try pickle'ing - pickle.dump(dist, open('data_test.pkl', 'wb')) - pickle_converted_result = pickle.load(open('data_test.pkl', 'rb')) - self.assertEqual(dist, pickle_converted_result) - - def test_unweighted_samples_describe(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - table_list = s.describe() - - def test_scalardata_add_override(self): - data = {'a': 12, 'b': 14} - d = ScalarData(data) - - # Testing __add__ override - mod_d = d + 0 - for k in d.keys(): - self.assertEqual(d.mean[k], mod_d.mean[k]) - mod_d = d + 5 - for k in d.keys(): - self.assertEqual(d.mean[k]+5, mod_d.mean[k]) - mod_d = d + -5 - for k in d.keys(): - self.assertEqual(d.mean[k]-5, mod_d.mean[k]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = d + [] - mod_d = d + {} - mod_d = d + "test" - # Also works with floats - mod_d = d + 5.5 - for k in d.keys(): - self.assertEqual(d.mean[k]+5.5, mod_d.mean[k]) - - def test_scalardata_radd_override(self): - data = {'a': 12, 'b': 14} - d = ScalarData(data) - - # Testing __radd__ override - mod_d = 0 + d - for k in d.keys(): - self.assertEqual(d.mean[k], mod_d.mean[k]) - mod_d = 5 + d - for k in d.keys(): - self.assertEqual(d.mean[k]+5, mod_d.mean[k]) - mod_d = -5 + d - for k in d.keys(): - self.assertEqual(d.mean[k]-5, mod_d.mean[k]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = [] + d - mod_d = {} + d - mod_d = "test" + d - # Also works with floats - mod_d = 5.5 + d - for k in d.keys(): - self.assertEqual(d.mean[k]+5.5, mod_d.mean[k]) - - def test_scalardata_iadd_override(self): - data = {'a': 12, 'b': 14} - data_copy = {'a': 12, 'b': 14} - d = ScalarData(data) - - # Testing __iadd__ override - d += 0 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k]) - d += 5 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k]+5) - d += -5 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k]) - with self.assertRaises(TypeError): - # Test adding invalid type - d += [] - d += {} - d += "test" - # Also works with floats - d += 5.5 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k] + 5.5) - - def test_scalardata_sub_override(self): - data = {'a': 12, 'b': 14} - d = ScalarData(data) - - # Testing __sub__ override - mod_d = d - 0 - for k in d.keys(): - self.assertEqual(d.mean[k], mod_d.mean[k]) - mod_d = d - 5 - for k in d.keys(): - self.assertEqual(d.mean[k]-5, mod_d.mean[k]) - mod_d = d - -5 - for k in d.keys(): - self.assertEqual(d.mean[k]+5, mod_d.mean[k]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = d - [] - mod_d = d - {} - mod_d = d - "test" - # Also works with floats - mod_d = d - 5.5 - for k in d.keys(): - self.assertEqual(d.mean[k]-5.5, mod_d.mean[k]) - - def test_scalardata_rsub_override(self): - data = {'a': 12, 'b': 14} - d = ScalarData(data) - - # Testing __rsub__ override - mod_d = 0 - d - for k in d.keys(): - self.assertEqual(d.mean[k], mod_d.mean[k]) - mod_d = 5 - d - for k in d.keys(): - self.assertEqual(d.mean[k]-5, mod_d.mean[k]) - mod_d = -5 - d - for k in d.keys(): - self.assertEqual(d.mean[k]+5, mod_d.mean[k]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = [] - d - mod_d = {} - d - mod_d = "test" - d - # Also works with floats - mod_d = 5.5 - d - for k in d.keys(): - self.assertEqual(d.mean[k]-5.5, mod_d.mean[k]) - - def test_scalardata_isub_override(self): - data = {'a': 12, 'b': 14} - data_copy = {'a': 12, 'b': 14} - d = ScalarData(data) - - # Testing __isub__ override - d -= 0 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k]) - d -= 5 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k]-5) - d -= -5 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k]) - with self.assertRaises(TypeError): - # Test adding invalid type - d -= [] - d -= {} - d -= "test" - # Also works with floats - d -= 5.5 - for k in d.keys(): - self.assertEqual(d.mean[k], data_copy[k] - 5.5) - - def test_unweightedsamples_add_override(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - - # Testing __add__ override - mod_d = s + 0 - self.assertEqual(mod_d.data, [{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - mod_d = s + 5 - self.assertEqual(mod_d.data, [{'a': 6, 'b':7}, {'a': 8, 'b':3}]) - mod_d = s + -5 - self.assertEqual(mod_d.data, [{'a': -4, 'b':-3}, {'a': -2, 'b':-7}]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = s + [] - mod_d = s + {} - mod_d = s + "test" - # Also works with floats - mod_d = s + 5.5 - self.assertEqual(mod_d.data, [{'a': 6.5, 'b':7.5}, {'a': 8.5, 'b':3.5}]) - - def test_unweightedsamples_radd_override(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - - # Testing __radd__ override - mod_d = 0 + s - self.assertEqual(mod_d.data, [{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - mod_d = 5 + s - self.assertEqual(mod_d.data, [{'a': 6, 'b':7}, {'a': 8, 'b':3}]) - mod_d = -5 + s - self.assertEqual(mod_d.data, [{'a': -4, 'b':-3}, {'a': -2, 'b':-7}]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = [] + s - mod_d = {} + s - mod_d = "test" + s - # Also works with floats - mod_d = 5.5 + s - self.assertEqual(mod_d.data, [{'a': 6.5, 'b':7.5}, {'a': 8.5, 'b':3.5}]) - - def test_unweightedsamples_iadd_override(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - - # Testing __iadd__ override - s += 0 - self.assertEqual(s.data, [{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - s += 5 - self.assertEqual(s.data, [{'a': 6, 'b':7}, {'a': 8, 'b':3}]) - s += -5 - self.assertEqual(s.data, [{'a': 1, 'b': 2}, {'a': 3, 'b': -2}]) - with self.assertRaises(TypeError): - # Test adding invalid type - s += [] - s += {} - s += "test" - # Also works with floats - s += 5.5 - self.assertEqual(s.data, [{'a': 6.5, 'b': 7.5}, {'a': 8.5, 'b': 3.5}]) - - def test_unweightedsamples_sub_override(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - - # Testing __sub__ override - mod_d = s - 0 - self.assertEqual(mod_d.data, [{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - mod_d = s - -5 - self.assertEqual(mod_d.data, [{'a': 6, 'b':7}, {'a': 8, 'b':3}]) - mod_d = s - 5 - self.assertEqual(mod_d.data, [{'a': -4, 'b':-3}, {'a': -2, 'b':-7}]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = s + [] - mod_d = s + {} - mod_d = s + "test" - # Also works with floats - mod_d = s - 5.5 - self.assertEqual(mod_d.data, [{'a': -4.5, 'b': -3.5}, {'a': -2.5, 'b': -7.5}]) - - def test_unweightedsamples_rsub_override(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - - # Testing __rsub__ override - mod_d = 0 - s - self.assertEqual(mod_d.data, [{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - mod_d = -5 - s - self.assertEqual(mod_d.data, [{'a': 6, 'b':7}, {'a': 8, 'b':3}]) - mod_d = 5 - s - self.assertEqual(mod_d.data, [{'a': -4, 'b':-3}, {'a': -2, 'b':-7}]) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = [] - s - mod_d = {} - s - mod_d = "test" - s - # Also works with floats - mod_d = 5.5 - s - self.assertEqual(mod_d.data, [{'a': -4.5, 'b': -3.5}, {'a': -2.5, 'b': -7.5}]) - - def test_unweightedsamples_isub_override(self): - s = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - - # Testing __isub__ override - s -= 0 - self.assertEqual(s.data, [{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - s -= 5 - self.assertEqual(s.data, [{'a': -4, 'b': -3}, {'a': -2, 'b': -7}]) - s -= -5 - self.assertEqual(s.data, [{'a': 1, 'b': 2}, {'a': 3, 'b': -2}]) - with self.assertRaises(TypeError): - # Test adding invalid type - s -= [] - s -= {} - s -= "test" - # Also works with floats - s -= 5.5 - self.assertEqual(s.data, [{'a': -4.5, 'b': -3.5}, {'a': -2.5, 'b': -7.5}]) - - def test_MultivariateNormalDist_add_override(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - - mod_d = dist + 0 - self.assertEqual(mod_d.mean, {'a': 2, 'b': 10}) - mod_d = dist + 5 - self.assertEqual(mod_d.mean, {'a': 7, 'b': 15}) - mod_d = dist + -5 - self.assertEqual(mod_d.mean, {'a': -3, 'b': 5}) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = dist + [] - mod_d = dist + {} - mod_d = dist + "test" - # Also works with floats - mod_d = dist + 5.5 - self.assertEqual(mod_d.mean, {'a': 7.5, 'b': 15.5}) - - # Ensure covariance has not changed - from numpy.testing import assert_array_equal - mod_d = dist + 5 - assert_array_equal(mod_d.cov, dist.cov) - - def test_MultivariateNormalDist_radd_override(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - - mod_d = 0 + dist - self.assertEqual(mod_d.mean, {'a': 2, 'b': 10}) - mod_d = 5 + dist - self.assertEqual(mod_d.mean, {'a': 7, 'b': 15}) - mod_d = -5 + dist - self.assertEqual(mod_d.mean, {'a': -3, 'b': 5}) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = [] + dist - mod_d = {} + dist - mod_d = "test" + dist - # Also works with floats - mod_d = 5.5 + dist - self.assertEqual(mod_d.mean, {'a': 7.5, 'b': 15.5}) - - # Ensure covariance has not changed - from numpy.testing import assert_array_equal - mod_d = 5 + dist - assert_array_equal(mod_d.cov, dist.cov) - - def test_MultivariateNormalDist_iadd_override(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - from numpy import copy - dist_save = copy(dist.cov) - - dist += 0 - self.assertEqual(dist.mean, {'a': 2, 'b': 10}) - dist += 5 - self.assertEqual(dist.mean, {'a': 7, 'b': 15}) - dist += -5 - self.assertEqual(dist.mean, {'a': 2, 'b': 10}) - with self.assertRaises(TypeError): - # Test adding invalid type - dist += [] - dist += {} - dist += "test" - # Also works with floats - dist += 5.5 - self.assertEqual(dist.mean, {'a': 7.5, 'b': 15.5}) - - # Ensure covariance has not changed - from numpy.testing import assert_array_equal - dist += 5 - assert_array_equal(dist.cov, dist_save) - - def test_MultivariateNormalDist_sub_override(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - - mod_d = dist - 0 - self.assertEqual(mod_d.mean, {'a': 2, 'b': 10}) - mod_d = dist - -5 - self.assertEqual(mod_d.mean, {'a': 7, 'b': 15}) - mod_d = dist - 5 - self.assertEqual(mod_d.mean, {'a': -3, 'b': 5}) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = dist - [] - mod_d = dist - {} - mod_d = dist - "test" - # Also works with floats - mod_d = dist - 5.5 - self.assertEqual(mod_d.mean, {'a': -3.5, 'b': 4.5}) - - # Ensure covariance has not changed - from numpy.testing import assert_array_equal - mod_d = dist - 5 - assert_array_equal(mod_d.cov, dist.cov) - - def test_MultivariateNormalDist_rsub_override(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - - mod_d = 0 - dist - self.assertEqual(mod_d.mean, {'a': 2, 'b': 10}) - mod_d = -5 - dist - self.assertEqual(mod_d.mean, {'a': 7, 'b': 15}) - mod_d = 5 - dist - self.assertEqual(mod_d.mean, {'a': -3, 'b': 5}) - with self.assertRaises(TypeError): - # Test adding invalid type - mod_d = [] - dist - mod_d = {} - dist - mod_d = "test" - dist - # Also works with floats - mod_d = 5.5 - dist - self.assertEqual(mod_d.mean, {'a': -3.5, 'b': 4.5}) - - # Ensure covariance has not changed - from numpy.testing import assert_array_equal - mod_d = 5 - dist - assert_array_equal(mod_d.cov, dist.cov) - - def test_MultivariateNormalDist_isub_override(self): - dist = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - from numpy import copy - dist_save = copy(dist.cov) - - dist -= 0 - self.assertEqual(dist.mean, {'a': 2, 'b': 10}) - dist -= 5 - self.assertEqual(dist.mean, {'a': -3, 'b': 5}) - dist -= -5 - self.assertEqual(dist.mean, {'a': 2, 'b': 10}) - with self.assertRaises(TypeError): - # Test adding invalid type - dist -= [] - dist -= {} - dist -= "test" - # Also works with floats - dist -= 5.5 - self.assertEqual(dist.mean, {'a': -3.5, 'b': 4.5}) - - # Ensure covariance has not changed - from numpy.testing import assert_array_equal - dist -= 5 - assert_array_equal(dist.cov, dist_save) - - def test_relative_accuracy(self): - # Testing for ScalarData - d = ScalarData({'a': 12, 'b': 14}) - gt_std = {'a': 14, 'b': 16} - gt_neg = {'a': -14, 'b': -16} - ra_std = d.relative_accuracy(gt_std) - ra_neg = d.relative_accuracy(gt_neg) - self.assertDictEqual(ra_std, {'a': 0.8571428571428572, 'b': 0.875}) - self.assertDictEqual(ra_neg, {'a': 2.857142857142857, 'b': 2.875}) - with self.assertRaises(ZeroDivisionError): # Passing in ground truth of 0 leads to divide by 0 error - gt_zero = {'a': 0, 'b': 0} - ra_zero = d.relative_accuracy(gt_zero) - with self.assertRaises(TypeError): # Passing in non-dict arg - ra_err_list = d.relative_accuracy([]) - ra_err_str = d.relative_accuracy("") - ra_err_int = d.relative_accuracy(1) - ra_err_float = d.relative_accuracy(0.1) - ra_err_set = d.relative_accuracy(set()) - - # Testing for UnweightedSamples - d = UnweightedSamples([{'a': 1, 'b':2}, {'a': 3, 'b':-2}]) - gt_std = {'a': 5, 'b': 4} - gt_neg = {'a': -5, 'b': -3} - ra_std = d.relative_accuracy(gt_std) - ra_neg = d.relative_accuracy(gt_neg) - self.assertDictEqual(ra_std, {'a': 0.4, 'b': 0.0}) - self.assertDictEqual(ra_neg, {'a': 2.4, 'b': 2.0}) - with self.assertRaises(ZeroDivisionError): # Hits -inf and nan; maybe because 0/0? - gt_zero = {'a': 0, 'b': 0} - ra_zero = d.relative_accuracy(gt_zero) - with self.assertRaises(TypeError): # Passing in non-dict arg - ra_err_list = d.relative_accuracy([]) - ra_err_str = d.relative_accuracy("") - ra_err_int = d.relative_accuracy(1) - ra_err_float = d.relative_accuracy(0.1) - ra_err_set = d.relative_accuracy(set()) - - # Testing for MultivariateNormalDist - d = MultivariateNormalDist(['a', 'b'], array([2, 10]), array([[1, 0], [0, 1]])) - gt_std = {'a': 3, 'b': 3} - gt_neg = {'a': -3, 'b': -3} - ra_std = d.relative_accuracy(gt_std) - ra_neg = d.relative_accuracy(gt_neg) - self.assertDictEqual(ra_std, {'a': 0.6666666666666667, 'b': -1.3333333333333335}) - self.assertDictEqual(ra_neg, {'a': 2.666666666666667, 'b': 5.333333333333333}) - with self.assertRaises(ZeroDivisionError): # Hits -inf and nan; maybe because 0/0? - gt_zero = {'a': 0, 'b': 0} - ra_zero = d.relative_accuracy(gt_zero) - with self.assertRaises(TypeError): # Passing in non-dict arg - ra_err_list = d.relative_accuracy([]) - ra_err_str = d.relative_accuracy("") - ra_err_int = d.relative_accuracy(1) - ra_err_float = d.relative_accuracy(0.1) - ra_err_set = d.relative_accuracy(set()) - - -# This allows the module to be executed directly -def run_tests(): - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Uncertain Data") - result = runner.run(l.loadTestsFromTestCase(TestUncertainData)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() diff --git a/tests/test_visualize.py b/tests/test_visualize.py deleted file mode 100644 index caad35c1..00000000 --- a/tests/test_visualize.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. - -import unittest -from prog_algs.visualize import plot_scatter - - -class TestVisualize(unittest.TestCase): - def test_scatter(self): - # Nominal - data = [{'x': 1, 'y': 2, 'z': 3}, {'x': 1.5, 'y': 2.2, 'z': -1}, {'x': 0.9, 'y': 2.1, 'z': 7}] - fig = plot_scatter(data) - fig = plot_scatter(data, fig=fig) # Add to figure - plot_scatter(data, fig=fig, keys=['x', 'y', 'z']) # All keys - plot_scatter(data, keys=['y', 'z']) # Subset of keys - - # Incorrect keys - try: - plot_scatter(data, keys=7) # Not iterable - self.fail() - except Exception: - pass - - try: - plot_scatter(data, keys=['x', 'i']) # Not present - self.fail() - except Exception: - pass - - # Changing number of keys - fig = plot_scatter(data) - try: - plot_scatter(data, fig=fig, keys=['y', 'z']) # Different number of keys - self.fail() - except Exception: - pass - - # Too few keys - try: - plot_scatter(data, keys=['y']) # Only one key - self.fail() - except Exception: - pass - -# This allows the module to be executed directly -def run_tests(): - l = unittest.TestLoader() - runner = unittest.TextTestRunner() - print("\n\nTesting Visualize") - result = runner.run(l.loadTestsFromTestCase(TestVisualize)).wasSuccessful() - - if not result: - raise Exception("Failed test") - -if __name__ == '__main__': - run_tests() \ No newline at end of file diff --git a/tutorial.ipynb b/tutorial.ipynb deleted file mode 100644 index b9934b17..00000000 --- a/tutorial.ipynb +++ /dev/null @@ -1,620 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Welcome to the Prognostics Algorithms Package Tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The goal of this notebook is to instruct the user on how to use and extend the NASA Python Prognostics Algorithms Package. \n", - "\n", - "First some background. The Prognostics Algorithms Package (`prog_algs`) contains tools for performing prognostics (event prediction) using the Prognostics Models Package. `prog_algs` also includes tools for analyzing the performance of prognostics algorithms. \n", - "\n", - "A few definitions:\n", - "* state estimation: The process of estimating the (possibly hidden) state of a system given sensor information on observable states\n", - "* prediction: The process of predicting the evolution of a system state with time and the occurrence of events. \n", - "\n", - "The `prog_algs` package has the following primary subpackages\n", - "* `prog_algs.state_estimators` - Tools for performing state estimation\n", - "* `prog_algs.predictors` - Tools for performing prediction\n", - "* `prog_algs.uncertain_data` - Tools for representing data with uncertainty\n", - "\n", - "In addition to the `prog_algs` package, this repo includes examples showing how to use the package (see `examples/`), a template for implementing a new state estimator (`state_estimator_template`), a template for implementing a new predictor (`predictor_template`), documentation (), and this tutorial (`tutorial.ipynb`).\n", - "\n", - "Before you start, install `prog_algs` using pip:\n", - "\n", - " `pip install prog_algs`\n", - "\n", - "or, to use the pre-release, close from GitHub and checkout the dev branch. Then run the following command:\n", - " `pip install -e .`\n", - "\n", - "Now let's get started with some examples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## UncertainData - Representing a Distribution" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Uncertainty is sometimes present in data used for performing state estimations or making predictions.\n", - "\n", - "In `prog_algs`, data with uncertainty is represented using classes inheriting from `UncertainData`:\n", - "* `prog_algs.uncertain_data.MultivariateNormalDist` - Data represented by a multivariate normal distribution with mean and covariance matrix\n", - "* `prog_algs.uncertain_data.ScalarData` - Data without uncertainty, a single value\n", - "* `prog_algs.uncertain_data.UnweightedSamples` - Data represented by a set of unweighted samples. Objects of this class can be treated like a list where samples[n] returns the nth sample (Dict)\n", - "\n", - "To begin using `UncertainData`, import the type that best portrays the data. In this simple demonstration, we import the `UnweightedSamples` data type. See for full details on the available `UncertainData` types." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.uncertain_data import UnweightedSamples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With `UnweightedSamples` imported, construct an object with samples. This object can be initialized using either a dictionary, list, or model.*Container type from prog_models (e.g., StateContainer). Let's try creating an object using a dictionary. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "samples = UnweightedSamples([{'x': 1, 'v':2}, {'x': 3, 'v':-2}])\n", - "print(samples)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Given an integer value, addition and subtraction can be performed on the `UncertainData` classes to adjust the distribution by a scalar amount." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "samples = samples + 5\n", - "print(samples)\n", - "samples -= 3\n", - "print(samples)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also sample from any `UncertainData` distribution using the `sample` method. In this case it resamples from the existing samples" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(samples.sample()) # A single sample\n", - "print(samples.sample(10)) # 10 samples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see the keys present using the `.keys()` method:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(samples.keys())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "and the data corresponding to a specific key can be retrieved using `.key()`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(samples.key('x'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Various properties are available to quantify the `UncertainData` distribution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('mean', samples.mean)\n", - "print('median', samples.median)\n", - "print('covariance', samples.cov)\n", - "print('size', samples.size)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These `UncertainData` classes are used throughout the prog_algs package to represent data with uncertainty, as described in the following sections." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## State Estimation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "State estimation is the process of estimating the system state given sensor data and a model. Typically, this is done repeatedly as new sensor data is available.\n", - "\n", - "In `prog_algs` a State Estimator is used to estimate the system state. \n", - "\n", - "To start, import the needed packages. Here we will import the `BatteryCircuit` model and the `UnscentedKalmanFilter` state estimator. See for more details on the available state estimators.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_models.models import BatteryCircuit\n", - "from prog_algs.state_estimators import UnscentedKalmanFilter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we construct and initialize the model. \n", - "\n", - "We use the resulting model and initial state to construct the state estimator. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "m = BatteryCircuit()\n", - "x0 = m.initialize()\n", - "\n", - "# Turn into a distribution - this represents uncertainty in the initial state\n", - "from prog_algs.uncertain_data import MultivariateNormalDist\n", - "from numpy import diag\n", - "INITIAL_UNCERT = 0.05 # Uncertainty in initial state (%)\n", - "# Construct covariance matrix (making sure each value is positive)\n", - "cov = diag([max(abs(INITIAL_UNCERT * value), 1e-9) for value in x0.values()])\n", - "x0 = MultivariateNormalDist(x0.keys(), x0.values(), cov)\n", - "\n", - "# Construct State estimator\n", - "est = UnscentedKalmanFilter(m, x0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can use the estimator to estimate the system state." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Prior State:\", est.x.mean)\n", - "print('\\tSOC: ', m.event_state(est.x.mean)['EOD'])\n", - "fig = est.x.plot_scatter(label='prior')\n", - "\n", - "t = 0.1\n", - "u = m.InputContainer({'i': 2})\n", - "example_measurements = m.OutputContainer({'t': 32.2, 'v': 3.915})\n", - "est.estimate(t, u, example_measurements)\n", - "\n", - "print(\"Posterior State:\", est.x.mean)\n", - "print('\\tSOC: ', m.event_state(est.x.mean)['EOD'])\n", - "est.x.plot_scatter(fig= fig, label='posterior')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As mentioned previously, this step is typically repeated when there's new data. filt.x may not be accessed every time the estimate is updated, only when it's needed." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prediction Example" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Prediction is the practice of using a state estimation, a model, and estimates of future loading to predict future states and when an event will occur.\n", - "\n", - "First we will import a predictor. In this case, we will use the MonteCarlo Predictor, but see documentation for a full list of predictors and their configuration parameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.predictors import MonteCarlo" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we initialize it using the model from the above example" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mc = MonteCarlo(m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let's define future loading and the first state. The first state is the output of the state estimator, and the future loading scheme is a simple piecewise function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "x = est.x # The state estimate\n", - "\n", - "def future_loading(t, x={}):\n", - " # Variable (piece-wise) future loading scheme \n", - " if (t < 600):\n", - " i = 2\n", - " elif (t < 900):\n", - " i = 1\n", - " elif (t < 1800):\n", - " i = 4\n", - " elif (t < 3000):\n", - " i = 2\n", - " else:\n", - " i = 3\n", - " return m.InputContainer({'i': i})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's use the constructed mc predictor to perform a single prediction. Here we're setting dt to 0.25. Note this may take up to a minute" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mc_results = mc.predict(x, future_loading, dt=0.25, n_samples=20)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The predict function returns predictions of future inputs, states, outputs, and event_states at each save point. For sample-based predictors like the monte carlo, these can be accessed like an array with the format `[sample #][time]` so that `mc_results.states[m][n]` corresponds to the state for sample `m` at time `mc_results.times[m][n]`. Alternately, use the method `snapshot` to get a single point in time. e.g., \n", - "\n", - " `state = mc_results.states.snapshot(3)`\n", - "\n", - "In this case the state snapshot corresponds to time `mc_results.times[3]`. The snapshot method returns type UncertainData. \n", - "\n", - "The `predict` method also returns Time of Event (ToE) as a type UncertainData, representing the predicted time of event (for each event predicted), with uncertainty.\n", - "\n", - "Next, let's use the metrics package to analyze the ToE" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"\\nEOD Predictions (s):\")\n", - "print('\\tPortion between 3005.2 and 3005.6: ', mc_results.time_of_event.percentage_in_bounds([3005.2, 3005.6]))\n", - "print('\\tAssuming ground truth 3005.25: ', mc_results.time_of_event.metrics(ground_truth = 3005.25))\n", - "from prog_algs.metrics import prob_success \n", - "print('\\tP(Success) if mission ends at 3005.25: ', prob_success(mc_results.time_of_event, 3005.25))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These analysis methods applied to ToE can also be applied to anything of type UncertainData (e.g., state snapshot). \n", - "\n", - "You can also visualize the results in a variety of different ways. For example, state transition" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig = mc_results.states.snapshot(0).plot_scatter(label = \"t={:.0f}\".format(int(mc_results.times[0])))\n", - "for i in range(1, 4):\n", - " index = int(len(mc_results.times)/4*i)\n", - " mc_results.states.snapshot(index).plot_scatter(fig=fig, label = \"t={:.0f}\".format(mc_results.times[index]))\n", - "mc_results.states.snapshot(-1).plot_scatter(fig = fig, label = \"t={:.0f}\".format(int(mc_results.times[-1])))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or time of event (ToE)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fig = mc_results.time_of_event.plot_hist()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note, for this event, there is only one event (End of Discharge). Many models have multiple events that can be predicted. For these models, ToE for each event is returned and can be analyzed.\n", - "\n", - "Alternately, a specific event (or events) can be specified for prediction. See `examples.predict_specific_event` for more details." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Frequently the prediction step is run periodically, less often than the state estimator step" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Extending - Adding a new state estimator" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "New state estimators can be created by extending the state_estimator interface. As an example lets use a really dumb state estimator that adds random noise each step - and accepts the state that is closest. \n", - "\n", - "First thing we need to do is import the StateEstimator parent class" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.state_estimators.state_estimator import StateEstimator" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we select how state will be represented. In this case there's no uncertainty- it's just one state, so we represent it as a scaler. Import the appropriate class" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from prog_algs.uncertain_data import ScalarData" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we construct the class, implementing the functions of the state estimator template (`state_estimator_template.py`)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import random \n", - "\n", - "class BlindlyStumbleEstimator(StateEstimator):\n", - " def __init__(self, model, x0):\n", - " self.m = model\n", - " self.state = x0\n", - "\n", - " def estimate(self, t, u, z):\n", - " # Generate new candidate state\n", - " x2 = {key : float(value) + 10*(random.random()-0.5) for (key,value) in self.state.items()}\n", - "\n", - " # Calculate outputs\n", - " z_est = self.m.output(self.state)\n", - " z_est2 = self.m.output(x2)\n", - "\n", - " # Now score them each by how close they are to the measured z\n", - " z_est_score = sum([abs(z_est[key] - z[key]) for key in self.m.outputs])\n", - " z_est2_score = sum([abs(z_est2[key] - z[key]) for key in self.m.outputs])\n", - "\n", - " # Now choose the closer one\n", - " if z_est2_score < z_est_score: \n", - " self.state = x2\n", - "\n", - " @property\n", - " def x(self):\n", - " return ScalarData(self.state)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Great, now let's try it out using the model from earlier. with an initial state of all 0s. It should slowly converge towards the correct state" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "x0 = {key: 0 for key in m.states}\n", - "se = BlindlyStumbleEstimator(m, x0)\n", - "\n", - "for i in range(25):\n", - " u = m.InputContainer({'i': 0})\n", - " z = m.OutputContainer({'t': 18.95, 'v': 4.183})\n", - " se.estimate(i, u, z)\n", - " print(se.x.mean)\n", - " print(\"\\tcorrect: {'tb': 18.95, 'qb': 7856.3254, 'qcp': 0, 'qcs': 0}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Extending - Adding a new Predictor" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Like the example above with StateEstimators, Predictors can be extended by subclassing the Predictor class. Copy `predictor_template.py` as a starting point." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Conclusion\n", - "This is just the basics, there's much more to learn. Please see the documentation at and the examples in the `examples/` folder for more details on how to use the package, including:\n", - "* `examples.basic_example` : A basic Example using prog_algs for Prognostics \n", - "* `examples.basic_example_battery` : A basic Example using prog_algs for Prognostics, using the more complex battery model\n", - "* `examples.eol_event` : An example where a model has multiple events, but the user is only interested in predicting the time when the first event occurs (whatever it is).\n", - "* `examples.measurement_eqn_example` : An example where not every output is measured or measurements are not in the same format as outputs, so a measurement equation is defined to translate between outputs and what's measured. \n", - "* `examples.new_state_estimator_example` : An example of extending StateEstimator to create a new state estimator class\n", - "* `examples.playback` : A full example performing prognostics using playback data.\n", - "* `examples.predict_specific_event` : An example where the model has multiple events, but the user is only interested in predicting a specific event (or events).\n", - "\n", - "Thank you for trying out this tutorial. Open an issue on github () or email Chris Teubert (christopher.a.teubert@nasa.gov) with any questions or issues." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Copyright © 2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.8.9 64-bit", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.9" - }, - "metadata": { - "interpreter": { - "hash": "ff94885aa2d97705a9dae03869c2058fa855d1acd9df351499300343e2e591a2" - } - }, - "orig_nbformat": 2, - "vscode": { - "interpreter": { - "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}

jyF3gF|mfRF~e_pYM+;h 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�lkLhVQFH8&*41(MXyiHZ8b>#%U#L}HT$ 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�I%Eazs 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