diff --git a/.codecov.yml b/.codecov.yml index 86671410..4af5eb24 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,2 +1,14 @@ -fixes: - - ".*/site-packages/::src/" +coverage: + status: + project: # more options at https://docs.codecov.com/docs/commit-status + default: + target: auto # use the coverage from the base commit, fail if coverage is lower + threshold: 0% # allow the coverage to drop by + +comment: + layout: " diff, flags, files" + behavior: default + require_changes: false + require_base: false # [true :: must have a base report to post] + require_head: false # [true :: must have a head report to post] + hide_project_coverage: false # [true :: only show coverage on the git diff aka patch coverage] diff --git a/.codespell/ignore_lines.txt b/.codespell/ignore_lines.txt new file mode 100644 index 00000000..07fa7c8c --- /dev/null +++ b/.codespell/ignore_lines.txt @@ -0,0 +1,2 @@ +;; Please include filenames and explanations for each ignored line. +;; See https://docs.openverse.org/meta/codespell.html for docs. diff --git a/.codespell/ignore_words.txt b/.codespell/ignore_words.txt new file mode 100644 index 00000000..f91947db --- /dev/null +++ b/.codespell/ignore_words.txt @@ -0,0 +1,27 @@ +;; Please include explanations for each ignored word (lowercase). +;; See https://docs.openverse.org/meta/codespell.html for docs. + +;; abbreviation for "materials" often used in a journal title +mater + +;; Frobenius norm used in np.linalg.norm +fro + +;; class name within distutils module +ccompiler + +;; dum as a C variable +dum + +;; gaus used for gaussian +gaus + +;; structure file format +DISCUS + +;; Periodic table elements +Te +Nd + +;; Ois +Ois diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index d0a0d16d..00000000 --- a/.coveragerc +++ /dev/null @@ -1,22 +0,0 @@ -# Configuration of the coverage.py tool for reporting test coverage. - -[report] -# RE patterns for lines to be excluded from consideration. -exclude_lines = - ## Have to re-enable the standard pragma - pragma: no cover - ## Don't complain if tests don't hit defensive assertion code: - raise AssertionError - raise NotImplementedError - ^[ ]*assert False - - ## Don't complain if non-runnable code isn't run: - ^[ ]*@unittest.skip\b - ^[ ]{4}unittest.main() - if __name__ == .__main__.: - - -[run] -omit = - ## exclude debug.py from codecov report - */tests/debug.py diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..a5105116 --- /dev/null +++ b/.flake8 @@ -0,0 +1,13 @@ +# As of now, flake8 does not natively support configuration via pyproject.toml +# https://github.com/microsoft/vscode-flake8/issues/135 +[flake8] +exclude = + .git, + __pycache__, + build, + dist, + docs/source/conf.py +max-line-length = 115 +# Ignore some style 'errors' produced while formatting by 'black' +# https://black.readthedocs.io/en/stable/guides/using_black_with_other_tools.html#labels-why-pycodestyle-warnings +extend-ignore = E203 diff --git a/.gitarchive.cfg b/.gitarchive.cfg deleted file mode 100644 index 95e1448c..00000000 --- a/.gitarchive.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[DEFAULT] -commit = $Format:%H$ -date = $Format:%ci$ -timestamp = $Format:%ct$ -refnames = $Format:%D$ diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 9d58a8cd..00000000 --- a/.gitattributes +++ /dev/null @@ -1,7 +0,0 @@ -/.gitattributes export-ignore -/.gitignore export-ignore -/.travis.yml export-ignore -/conda-recipe/ export-ignore -/devutils export-ignore -.gitarchive.cfg export-subst -*.bat text eol=crlf diff --git a/.github/ISSUE_TEMPLATE/bug_feature.md b/.github/ISSUE_TEMPLATE/bug_feature.md new file mode 100644 index 00000000..b3454deb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_feature.md @@ -0,0 +1,16 @@ +--- +name: Bug Report or Feature Request +about: Report a bug or suggest a new feature! +title: "" +labels: "" +assignees: "" +--- + +### Problem + + + +### Proposed solution diff --git a/.github/ISSUE_TEMPLATE/release_checklist.md b/.github/ISSUE_TEMPLATE/release_checklist.md new file mode 100644 index 00000000..56c5fca3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/release_checklist.md @@ -0,0 +1,47 @@ +--- +name: Release +about: Checklist and communication channel for PyPI and GitHub release +title: "Ready for PyPI/GitHub release" +labels: "release" +assignees: "" +--- + +### PyPI/GitHub rc-release preparation checklist: + +- [ ] All PRs/issues attached to the release are merged. +- [ ] All the badges on the README are passing. +- [ ] License information is verified as correct. If you are unsure, please comment below. +- [ ] Locally rendered documentation contains all appropriate pages, tutorials, and other human-written text is up-to-date with any changes in the code. +- [ ] All API references are included. To check this, run `conda install scikit-package` and then `package build api-doc`. Review any edits made by rerendering the docs locally. +- [ ] Installation instructions in the README, documentation, and the website are updated. +- [ ] Successfully run any tutorial examples or do functional testing with the latest Python version. +- [ ] Grammar and writing quality are checked (no typos). +- [ ] Install `pip install build twine`, run `python -m build` and `twine check dist/*` to ensure that the package can be built and is correctly formatted for PyPI release. +- [ ] Dispatch matrix testing to test the release on all Python versions and systems. If you do not have permission to run this workflow, tag the maintainer and say `@maintainer, please dispatch matrix testing workflow`. + +Please tag the maintainer (e.g., @username) in the comment here when you are ready for the PyPI/GitHub release. Include any additional comments necessary, such as version information and details about the pre-release here: + +### PyPI/GitHub full-release preparation checklist: + +- [ ] Create a new conda environment and install the rc from PyPI (`pip install ==??`) +- [ ] License information on PyPI is correct. +- [ ] Docs are deployed successfully to `https:///`. +- [ ] Successfully run all tests, tutorial examples or do functional testing. + +Please let the maintainer know that all checks are done and the package is ready for full release. + +### conda-forge release preparation checklist: + + + +- [ ] Ensure that the full release has appeared on PyPI successfully. +- [ ] New package dependencies listed in `conda.txt` and `tests.txt` are added to `meta.yaml` in the feedstock. +- [ ] Close any open issues on the feedstock. Reach out to the maintainer if you have questions. +- [ ] Tag the maintainer for conda-forge release. + +### Post-release checklist + + + +- [ ] Run tutorial examples and conduct functional testing using the installation guide in the README. Attach screenshots/results as comments. +- [ ] Documentation (README, tutorials, API references, and websites) is deployed without broken links or missing figures. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 00000000..1099d862 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,15 @@ +### What problem does this PR address? + + + +### What should the reviewer(s) do? + + + + diff --git a/.github/workflows/build-and-publish-docs-on-dispatch.yml b/.github/workflows/build-and-publish-docs-on-dispatch.yml new file mode 100644 index 00000000..406f5514 --- /dev/null +++ b/.github/workflows/build-and-publish-docs-on-dispatch.yml @@ -0,0 +1,18 @@ +name: Build and Publish Docs on Dispatch + +on: + workflow_dispatch: + +jobs: + get-python-version: + uses: scikit-package/release-scripts/.github/workflows/_get-python-version-latest.yml@v0 + with: + python_version: 0 + + docs: + uses: scikit-package/release-scripts/.github/workflows/_release-docs.yml@v0 + with: + project: diffpy.pdffit2 + c_extension: true + headless: false + python_version: ${{ fromJSON(needs.get-python-version.outputs.latest_python_version) }} diff --git a/.github/workflows/build-wheel-release-upload.yml b/.github/workflows/build-wheel-release-upload.yml new file mode 100644 index 00000000..28358806 --- /dev/null +++ b/.github/workflows/build-wheel-release-upload.yml @@ -0,0 +1,76 @@ +name: Build Wheel and Release + +# Trigger on tag push or manual dispatch. +# Tag and release privilege are verified inside the reusable workflow. +on: + workflow_dispatch: + push: + tags: + - "*" + +# ── Release modality ────────────────────────────────────────────────────────── +# Three options are provided below. Only ONE job should be active at a time. +# To switch: comment out the active job and uncomment your preferred option, +# then commit the change to main before tagging a release. +# ───────────────────────────────────────────────────────────────────────────── + +jobs: + # Option 1 (default): Release to GitHub, publish to PyPI, and deploy docs. + # + # The wheel is uploaded to PyPI so users can install with `pip install`. + # A GitHub release is created with the changelog as the release body, and + # the Sphinx documentation is rebuilt and deployed to GitHub Pages. + # + # Choose this for open-source packages distributed via PyPI and/or + # conda-forge where broad public availability is the goal. + build-release: + uses: scikit-package/release-scripts/.github/workflows/_build-wheel-release-upload.yml@v0 + with: + project: diffpy.pdffit2 + c_extension: true + maintainer_github_username: sbillinge + secrets: + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + PAT_TOKEN: ${{ secrets.PAT_TOKEN }} + + # Option 2: Release to GitHub and deploy docs, without publishing to PyPI. + # + # A GitHub release is created and the Sphinx docs are deployed, but the + # wheel is not uploaded to PyPI. The source code remains publicly visible + # on GitHub and can be installed directly from there. + # + # Choose this when the package is public but you prefer to keep it off the + # default pip index — for example, if you distribute via conda-forge only, + # or if the package is not yet ready for a permanent PyPI presence. + # + # To use: comment out Option 1 above and uncomment the lines below. + # build-release-no-pypi: + # uses: scikit-package/release-scripts/.github/workflows/_build-release-github-no-pypi.yml@v0 + # with: + # project: diffpy.pdffit2 + # c_extension: true + # maintainer_github_username: sbillinge + # secrets: + # PAT_TOKEN: ${{ secrets.PAT_TOKEN }} + + # Option 3: Release to GitHub with wheel, license, and instructions bundled + # as a downloadable zip attached to the GitHub release asset. + # + # The wheel is built and packaged together with INSTRUCTIONS.txt and the + # LICENSE file into a zip that is attached directly to the GitHub release. + # Users with access to the (private) repo download the zip, follow the + # instructions inside, and install locally with pip. No PyPI or conda-forge + # upload occurs, and no docs are deployed. + # + # Choose this for private or restricted packages where distribution must be + # controlled: only users with repo access can download the release asset, + # making the GitHub release itself the distribution channel. + # + # To use: comment out Option 1 above and uncomment the lines below. + # build-release-private: + # uses: scikit-package/release-scripts/.github/workflows/_build-release-github-private-pure.yml@v0 + # with: + # project: diffpy.pdffit2 + # maintainer_github_username: sbillinge + # secrets: + # PAT_TOKEN: ${{ secrets.PAT_TOKEN }} diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index 82adbdc8..00000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: build and upload - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - build: - strategy: - max-parallel: 4 - matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] - os: [ubuntu-latest, macos-latest, windows-latest] - - runs-on: ${{ matrix.os }} - steps: - - name: Check-out repository - uses: actions/checkout@v2 - - - name: set up conda - uses: s-weigand/setup-conda@v1 - with: - update-conda: true - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - run: | - conda install -c conda-forge twine - conda install -c conda-forge wheel - conda install -c conda-forge setuptools - conda install -c conda-forge pip - conda install -c conda-forge gsl - - - name: Build wheels - run: | - python setup.py sdist bdist_wheel - - - name: Run tests - run: | - conda install -c conda-forge numpy - python setup.py install - python conda-recipe/run_test.py - - - name: Upload Artifacts GitHub releases - uses: ncipollo/release-action@v1 - with: - draft: false - prerelease: true - allowUpdates: true - replacesArtifacts: true - token: ${{ secrets.GITHUB_TOKEN }} - artifacts: ${{ github.workspace }}/dist/*.whl - tag: 1.4.1 - body: This is an alpha build of the pdffit2 library (1.4.2) - - # This step will upload tagged commits to pypi. - # The pypi token must be added to GH secrets - # - # - name: Publish package - # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') - # uses: pypa/gh-action-pypi-publish@release/v1 - # with: - # password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/check-news-item.yml b/.github/workflows/check-news-item.yml new file mode 100644 index 00000000..32130bee --- /dev/null +++ b/.github/workflows/check-news-item.yml @@ -0,0 +1,12 @@ +name: Check for News + +on: + pull_request_target: + branches: + - main # GitHub does not evaluate expressions in trigger filters; edit this value if your base branch is not main + +jobs: + check-news-item: + uses: scikit-package/release-scripts/.github/workflows/_check-news-item.yml@v0 + with: + project: diffpy.pdffit2 diff --git a/.github/workflows/matrix-and-codecov-on-merge-to-main.yml b/.github/workflows/matrix-and-codecov-on-merge-to-main.yml new file mode 100644 index 00000000..16e00724 --- /dev/null +++ b/.github/workflows/matrix-and-codecov-on-merge-to-main.yml @@ -0,0 +1,21 @@ +name: CI + +on: + push: + branches: + - main + release: + types: + - prereleased + - published + workflow_dispatch: + +jobs: + matrix-coverage: + uses: scikit-package/release-scripts/.github/workflows/_matrix-and-codecov-on-merge-to-main.yml@v0 + with: + project: diffpy.pdffit2 + c_extension: true + headless: false + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/matrix-and-codecov.yml b/.github/workflows/matrix-and-codecov.yml new file mode 100644 index 00000000..4a5a830d --- /dev/null +++ b/.github/workflows/matrix-and-codecov.yml @@ -0,0 +1,21 @@ +name: Matrix and Codecov + +on: + # push: + # branches: + # - main + release: + types: + - prereleased + - published + workflow_dispatch: + +jobs: + matrix-coverage: + uses: scikit-package/release-scripts/.github/workflows/_matrix-and-codecov-on-merge-to-main.yml@v0 + with: + project: diffpy.pdffit2 + c_extension: true + headless: false + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/publish-docs-on-release.yml b/.github/workflows/publish-docs-on-release.yml new file mode 100644 index 00000000..4af0c50e --- /dev/null +++ b/.github/workflows/publish-docs-on-release.yml @@ -0,0 +1,12 @@ +name: Deploy Documentation on Release + +on: + workflow_dispatch: + +jobs: + docs: + uses: scikit-package/release-scripts/.github/workflows/_publish-docs-on-release.yml@v0 + with: + project: diffpy.pdffit2 + c_extension: true + headless: false diff --git a/.github/workflows/tests-on-pr.yml b/.github/workflows/tests-on-pr.yml new file mode 100644 index 00000000..b0489e02 --- /dev/null +++ b/.github/workflows/tests-on-pr.yml @@ -0,0 +1,15 @@ +name: Tests on PR + +on: + pull_request: + workflow_dispatch: + +jobs: + tests-on-pr: + uses: scikit-package/release-scripts/.github/workflows/_tests-on-pr.yml@v0 + with: + project: diffpy.pdffit2 + c_extension: true + headless: false + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index 7a8f6d5b..099e2948 100644 --- a/.gitignore +++ b/.gitignore @@ -1,45 +1,93 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ *.py[cod] +*$py.class # C extensions *.so -# Packages -*.egg -*.egg-info -*.eggs -dist -build -eggs -parts -bin -var -sdist -temp -develop-eggs +# Distribution / packaging +.Python +env/ +build/ +_build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +venv/ +*.egg-info/ .installed.cfg -lib -lib64 -tags +*.egg +bin/ +temp/ +tags/ errors.err +# 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 MANIFEST # Unit test / coverage reports +htmlcov/ +.tox/ .coverage -.tox +.coverage.* +.cache nosetests.xml -/libpdffit2/tests/alltests +coverage.xml +*,cover +.hypothesis/ # Translations *.mo +*.pot # Mr Developer .mr.developer.cfg .project .pydevproject -# version information -setup.cfg -/diffpy/pdffit2/version.cfg +# Django stuff: +*.log + +# Sphinx documentation +docs/build/ +docs/source/generated/ + +# pytest +.pytest_cache/ + +# PyBuilder +target/ + +# Editor files +# mac +.DS_Store +*~ + +# vim +*.swp +*.swo + +# pycharm +.idea/ + +# VSCode +.vscode/ + +# Ipython Notebook +.ipynb_checkpoints diff --git a/.isort.cfg b/.isort.cfg new file mode 100644 index 00000000..7ce0fb1f --- /dev/null +++ b/.isort.cfg @@ -0,0 +1,5 @@ +[settings] +# Keep import statement below line_length character limit +line_length = 115 +multi_line_output = 3 +include_trailing_comma = True diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..0e4a84d1 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,66 @@ +default_language_version: + python: python3 +ci: + autofix_commit_msg: | + [pre-commit.ci] auto fixes from pre-commit hooks + autofix_prs: true + autoupdate_branch: "pre-commit-autoupdate" + autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate" + autoupdate_schedule: monthly + skip: [no-commit-to-branch] + submodules: false +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-case-conflict + - id: check-merge-conflict + - id: check-toml + - id: check-added-large-files + - repo: https://github.com/psf/black + rev: 24.4.2 + hooks: + - id: black + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 + - repo: https://github.com/pycqa/isort + rev: 5.13.2 + hooks: + - id: isort + args: ["--profile", "black"] + - repo: https://github.com/kynan/nbstripout + rev: 0.7.1 + hooks: + - id: nbstripout + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: no-commit-to-branch + name: Prevent Commit to Main Branch + args: ["--branch", "main"] + stages: [pre-commit] + - repo: https://github.com/codespell-project/codespell + rev: v2.3.0 + hooks: + - id: codespell + additional_dependencies: + - tomli + # prettier - multi formatter for .json, .yml, and .md files + - repo: https://github.com/pre-commit/mirrors-prettier + rev: f12edd9c7be1c20cfa42420fd0e6df71e42b51ea # frozen: v4.0.0-alpha.8 + hooks: + - id: prettier + additional_dependencies: + - "prettier@^3.2.4" + # docformatter - PEP 257 compliant docstring formatter + - repo: https://github.com/s-weigand/docformatter + rev: 5757c5190d95e5449f102ace83df92e7d3b06c6c + hooks: + - id: docformatter + additional_dependencies: [tomli] + args: [--in-place, --config, ./pyproject.toml] diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..aaa88895 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,13 @@ +version: 2 + +build: + os: "ubuntu-22.04" + tools: + python: "latest" + +python: + install: + - requirements: requirements/docs.txt + +sphinx: + configuration: docs/source/conf.py diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d5979526..00000000 --- a/.travis.yml +++ /dev/null @@ -1,108 +0,0 @@ -dist: xenial -language: generic - -os: - - linux - - osx - -env: - - MYUSEMC=true MYPYTHON_VERSION=2.7 - - MYUSEMC=true MYPYTHON_VERSION=3.7 - - MYUSEMC=true MYPYTHON_VERSION=3.8 - - MYUSEMC=true MYPYTHON_VERSION=3.9 - - MYUSEMC=true MYPYTHON_VERSION=3.10 - - MYUSEMC=true MYPYTHON_VERSION=3.11 - - MYUSEMC=true MYPYTHON_VERSION=3.12 - - MYUSEMC=false - -matrix: - exclude: - - os: osx - env: MYUSEMC=false - -git: - depth: 999999 - -branches: - except: - - /^v[0-9]/ - - -before_install: - - MYNAME=diffpy.pdffit2 - - MYCOMMIT="$(git rev-parse HEAD)" - - umask 022 - - git fetch origin --tags - - if ${MYUSEMC}; then - NOAPT=true; NOMC=false; - else - NOAPT=false; NOMC=true; - MYPIPFLAGS="--user"; - fi - - MYMCREPO=https://repo.anaconda.com/miniconda - - case ${TRAVIS_OS_NAME} in - linux) - MYMCBUNDLE=Miniconda3-latest-Linux-x86_64.sh ;; - osx) - MYMCBUNDLE=Miniconda3-latest-MacOSX-x86_64.sh ;; - *) - echo "Unsupported operating system." >&2; - exit 2 ;; - esac - - MYRUNDIR=${PWD}/build/rundir - - - mkdir -p ~/pkgs - - mkdir -p ${MYRUNDIR} - - cp .coveragerc ${MYRUNDIR}/ - - - $NOMC || pushd ~/pkgs - - $NOMC || wget --timestamping ${MYMCREPO}/${MYMCBUNDLE} - - $NOMC || test -x ~/mc/bin/conda || bash ${MYMCBUNDLE} -b -f -p ~/mc - - $NOMC || popd - - $NOMC || source ~/mc/bin/activate base - - $NOMC || conda update --yes conda - - $NOMC || conda install --yes conda-build conda-verify jinja2 - # avoid warnings from setup.py - - $NOMC || conda install --yes gsl - - $NOMC || conda create --name=testenv --yes python=${MYPYTHON_VERSION} coverage - - $NOMC || conda config --add channels diffpy - - - $NOAPT || test "${TRAVIS_OS_NAME}" = "linux" || exit $? - - $NOAPT || PATH="$(echo "$PATH" | sed 's,:/opt/pyenv/[^:]*,,g')" - - $NOAPT || test "$(which python)" = "/usr/bin/python" || ( - which python; exit 1) - - $NOAPT || sudo apt-get update -qq - - $NOAPT || sudo apt-get install -y - build-essential libgsl0-dev python-dev - python-numpy python-setuptools python-pip - - $NOAPT || devutils/makesdist - - $NOAPT || MYTARBUNDLE="$(ls -t "${PWD}"/dist/*.tar.gz | head -1)" - - -install: - - $NOMC || conda build --python=${MYPYTHON_VERSION} conda-recipe - - $NOMC || conda render --python=${MYPYTHON_VERSION} --output conda-recipe | - sed 's,.*/,,; s/[.]tar[.]bz2$//; s/-/=/g' > /tmp/mypackage.txt - - $NOMC || source activate testenv - - $NOMC || conda install --yes --use-local --file=/tmp/mypackage.txt - - - $NOAPT || pip install $MYPIPFLAGS coverage - # TODO - restore pip install once it works. - # - $NOAPT || pip install $MYPIPFLAGS "${MYTARBUNDLE}" - - $NOAPT || easy_install --user "${MYTARBUNDLE}" - - - cd ${MYRUNDIR} - - MYGIT_REV=$(python -c "import ${MYNAME}.version as v; print(v.__git_commit__)") - - if [[ "${MYCOMMIT}" != "${MYGIT_REV}" ]]; then - echo "Version mismatch ${MYCOMMIT} vs ${MYGIT_REV}."; - exit 1; - fi - - -script: - - coverage run --source ${MYNAME} -m ${MYNAME}.tests.rundeps - - -after_success: - - pip install $MYPIPFLAGS codecov - - codecov diff --git a/AUTHORS.txt b/AUTHORS.rst similarity index 79% rename from AUTHORS.txt rename to AUTHORS.rst index 2c1d7f81..21affc26 100644 --- a/AUTHORS.txt +++ b/AUTHORS.rst @@ -1,3 +1,10 @@ +Authors +======= + +Billinge Group and community contributors. + +---- + This code was derived from the first PDFFIT program by Thomas Proffen. The sources were converted to C++ by Jacques Bloch and then extensively hacked, extended and purged from most glaring bugs by Chris Farrow and Pavol Juhas. @@ -6,22 +13,17 @@ python modules for structure investigations from diffraction data. The DiffPy team is located in the Billinge-group at the Applied Physics and Applied Mathematics Department of the Columbia University in New York. -Currently the team consists of +Previous significant contributors to this code were - Simon Billinge - Pavol Juhas - Chris Farrow - Emil Bozin - Wenduo Zhou - Peng Tian - Timur Dykhne + Pavol Juhas, Chris Farrow, Jacques Bloch, Wenduo Zhou -Please see the header of each source file for a detailed list of +Please see the github contributions and the header of each source file +for a detailed list of contributors. This is an open-source project and we hope and expect that the list of contributors will expand with time. Many thanks to all current and future contributors! -For more information on the DiffPy project email sb2896@columbia.edu +For more information on the DiffPy project email sbillinge@ucsb.edu DiffPy was initiated as part of the Distributed Data Analysis of Neutron Scattering Experiments (DANSE) project, funded by the National Science @@ -30,7 +32,8 @@ found at http://danse.us. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the NSF. -Acknowledgments: +Acknowledgments +--------------- We are truly grateful to all the people who have contributed, in all different ways, to this project: Thomas Proffen, Xiangyun Qiu, Pete @@ -45,3 +48,10 @@ especially HyunJeong Kim and Ahmad Masadeh for enthusiastic testing and feature requests; Last but not least, our long suffering family members, and the whole coffee and tea industries at large, without whom none of this would have been possible. + + +Contributors +------------ + +For a list of contributors, visit +https://github.com/diffpy/diffpy.pdffit2/graphs/contributors diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index b77944e4..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,17 +0,0 @@ -# Release notes - -No notable functional changes from 1.4.1 - -## Version 1.4.2 – 2023-12-09 - -### Added - -- Support for Python 3.11, 3.12 - -### Changed - -### Deprecated - -### Removed - -### Fixed diff --git a/CHANGELOG.rst b/CHANGELOG.rst new file mode 100644 index 00000000..feba9007 --- /dev/null +++ b/CHANGELOG.rst @@ -0,0 +1,96 @@ +============= +Release notes +============= + +.. current developments + +1.6.0 +===== + + +1.5.2 +===== + +**Added:** + +* Add gsl to conda requirements. + +**Changed:** + +* Remove mac static GSL linking; always link to shared GSL. +* Change doc to docs for skpkg standard. + +**Fixed:** + +* Fix misspelled words in source code comments. +* Migrate documentation to `scikit-package 0.1.0` standards, including a mock import for API rendering. +* Add ``libsblas.dll`` to build pypi wheel in windows. + + +1.5.1 +===== + +**Fixed:** + +* Fixed `SystemError` and `MemoryError` for `redirect_stdout` on Windows with Python 3.13. + +**Removed:** + +* Removed `restore_stdout` function and wrapper. + + +1.5.0 +===== + +**Added:** + +* Python 3.11, 3.12 support +* Option to skip printing of introductory information when initializing the `PdfFit` class. +* Added additional runtime linker flags in `CustomBuildExt.run` to embed the `RPATH` flags for the built extensions. +* Support for retrieving GSL configuration from `CONDA_PREFIX`/ `GSL_PATH` on all platforms. +* Separate installation instruction for macOS (Arm64) in READEM +* Added `restore_stdout` function and wrapper. +* Added Python 3.13 support. + +**Changed:** + +* Changed setup.py to lazy evaluate gsl installation. +* Documentation brought up to date +* Merged the GSL configuration logic in `setup.py`. +* Changed `pytest` `capture_output` fixture. Now automatically restores `sys.stdout`. + +**Fixed:** + +* remove older conda-recipe files +* moved the tests directory from src to the root using conftest.py. +* fixed a circular import bug during " pip install ." in GitHub CI. +* renamed .py files under tests to snake_case. +* add PyPI packages under pip.txt +* re-cookiecutter to group's package standard +* Fix missing `__date__`, use PyPI release date. +* Fixed `SystemError` when running `pytest` on Windows with Python 3.13. + +**Removed:** + +* Python <= 3.10 support +* Six dependency and py2 support + + +1.4.2 +===== + +**Added:** + +* Support for Python 3.11, 3.12 + +**Changed:** + +* No notable functional changes from 1.4.1 + +1.4.4rc0 +======== + +**Fixed:** + +* Code linted to group flake8 standards +* Package structure moved to diffpy standard structure diff --git a/CODE-OF-CONDUCT.rst b/CODE-OF-CONDUCT.rst new file mode 100644 index 00000000..25fafe27 --- /dev/null +++ b/CODE-OF-CONDUCT.rst @@ -0,0 +1,133 @@ +===================================== + Contributor Covenant Code of Conduct +===================================== + +Our Pledge +---------- + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socioeconomic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +Our Standards +------------- + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +Enforcement Responsibilities +---------------------------- + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +Scope +----- + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official email address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +Enforcement +----------- + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +sbillinge@ucsb.edu. All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +Enforcement Guidelines +---------------------- + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +1. Correction +**************** + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +2. Warning +************* + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +3. Temporary Ban +****************** + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +4. Permanent Ban +****************** + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +Attribution +----------- + +This Code of Conduct is adapted from the `Contributor Covenant `_. + +Community Impact Guidelines were inspired by `Mozilla's code of conduct enforcement ladder `_. + +For answers to common questions about this code of conduct, see the `FAQ `_. `Translations are available `_ diff --git a/LICENSE.rst b/LICENSE.rst new file mode 100644 index 00000000..725077f9 --- /dev/null +++ b/LICENSE.rst @@ -0,0 +1,46 @@ +License +####### + +This program is part of the DiffPy and DANSE open-source projects +and is available subject to the conditions and terms laid out below. + +If you use this program to do productive scientific research that leads +to publication, we ask that you acknowledge use of the program by citing +the following paper in your publication: + + C. L. Farrow, P. Juhás, J. W. Liu, D. Bryndin, E. S. Božin, J. Bloch, Th. Proffen + and S. J. L. Billinge, PDFfit2 and PDFgui: computer programs for studying nanostructure + in crystals (https://stacks.iop.org/0953-8984/19/335219), *J. Phys.: Condens. Matter*, 19, 335219 (2007) + +Copyright 2006-2007, Board of Trustees of Michigan State University, +Copyright 2008-2026, Board of Trustees of Columbia University in the +city of New York. (Copyright holder indicated in each source file). + +For more information please visit the project web-page: + http://www.diffpy.org/ +or email Prof. Simon Billinge at sb2896@columbia.edu + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 3949fdf0..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,50 +0,0 @@ -This program is part of the DiffPy and DANSE open-source projects -and is available subject to the conditions and terms laid out below. - -If you use this program to do productive scientific research that leads -to publication, we ask that you acknowledge use of the program by citing -the following paper in your publication: - - C. L. Farrow, P. Juhas, J. W. Liu, D. Bryndin, E. S. Bozin, - J. Bloch, Th. Proffen and S. J. L. Billinge, PDFfit2 and - PDFgui: computer programs for studying nanostructure in - crystals, J. Phys.: Condens. Matter 19, 335219 (2007) - -Copyright 2006-2007, Board of Trustees of Michigan State University, -Copyright 2008-2019, Board of Trustees of Columbia University in the -city of New York. (Copyright holder indicated in each source file). - -For more information please visit the project web-page: - http://www.diffpy.org/ -or email Prof. Simon Billinge at sb2896@columbia.edu - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER "AS IS". COPYRIGHT HOLDER -EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES AND CONDITIONS, EITHER -EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY, TITLE, FITNESS, ADEQUACY OR SUITABILITY -FOR A PARTICULAR PURPOSE, AND ANY WARRANTIES OF FREEDOM FROM -INFRINGEMENT OF ANY DOMESTIC OR FOREIGN PATENT, COPYRIGHTS, TRADE -SECRETS OR OTHER PROPRIETARY RIGHTS OF ANY PARTY. IN NO EVENT SHALL -COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE OR RELATING TO THIS AGREEMENT, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/MANIFEST.in b/MANIFEST.in index 1b41a5df..f1a78eec 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,20 +1,12 @@ -recursive-include diffpy * -recursive-exclude diffpy *.py[co] *.so -recursive-include libpdffit2 *.[ch]* -recursive-include pdffit2module *.[ch]* -recursive-include examples * -include AUTHORS.txt LICENSE*.txt README* -include Makefile -prune libpdffit2/tests -global-exclude .gitattributes .gitignore .gitarchive.cfg -global-exclude .DS_Store +graft src +graft tests +graft requirements -# Avoid user content in setup.cfg to make distribution reproducible. -exclude setup.cfg +include AUTHORS.rst LICENSE*.rst README.rst -# Exclude git-tracked files spuriously added by setuptools_scm -exclude .coveragerc -exclude .travis* -prune conda-recipe -prune devutils -prune doc +# Exclude all bytecode files and __pycache__ directories +global-exclude *.py[cod] # Exclude all .pyc, .pyo, and .pyd files. +global-exclude .DS_Store # Exclude Mac filesystem artifacts. +global-exclude __pycache__ # Exclude Python cache directories. +global-exclude .git* # Exclude git files and directories. +global-exclude .idea # Exclude PyCharm project settings. diff --git a/Makefile b/Makefile deleted file mode 100644 index dffbb2ca..00000000 --- a/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -######################################################################## -# This Makefile should be used only for debugging purposes and is -# intended for strong-hearted developers. End users should use the -# setup.py script instead. -# -# Variables: -# -# DEBUG when defined, compile with debug options -# USESHARED when defined, link with shared gsl library -# PYTHON_INCLUDE path to Python include files used for compilation -# -######################################################################## - -ifndef PYTHON_INCLUDE -PYTHON_INCLUDE := $(shell python -c \ - 'from distutils import sysconfig; print(sysconfig.get_python_inc())') -endif - -######################################################################## - -INCLUDE = \ - -I$(PYTHON_INCLUDE) \ - -Ilibpdffit2 \ - -Ipdffit2module \ - -Ibuild -I. \ - $(GSL_INCLUDE) - -GSL_INCLUDE = $(shell gsl-config --cflags) - -GSL_LIBS_CONFIG = $(shell gsl-config --libs-without-cblas) -ifdef USESHARED -GSL_LIBS = $(GSL_LIBS_CONFIG) -else -GSL_LIBS = $(subst -L,,$(filter -L%, $(GSL_LIBS_CONFIG)))/libgsl.a -endif - -ifneq (,$(findstring darwin,$(OSTYPE))) -LDFLAGS = -bundle -undefined dynamic_lookup -else -LDFLAGS = -shared -endif - -COMMONFLAGS = -std=c++11 -Wall -Wno-write-strings -fPIC -OPTIMFLAGS = -O3 -funroll-loops -ffast-math $(COMMONFLAGS) -DEBUGFLAGS = -g $(COMMONFLAGS) - -ifdef DEBUG -CPPFLAGS = $(DEBUGFLAGS) $(INCLUDE) $(DEFINES) -else -CPPFLAGS = $(OPTIMFLAGS) $(INCLUDE) $(DEFINES) -endif - -PYTHON_XY := $(shell python -c 'import sys; print(sys.version[:3])') -BDIR := build/$(PYTHON_XY) - -.PHONY: all module clean test - -all: module - -module: $(BDIR)/pdffit2module.so - @test $< -ef diffpy/pdffit2/pdffit2.so || \ - ln -vf $< diffpy/pdffit2/pdffit2.so - -clean: - rm -rf -- build/$(PYTHON_XY) diffpy/pdffit2/pdffit2.so - -test: module - python -m diffpy.pdffit2.tests.run - -OBJS = \ - $(BDIR)/bindings.o \ - $(BDIR)/misc.o \ - $(BDIR)/pdffit2module.o \ - $(BDIR)/pyexceptions.o \ - $(BDIR)/Atom.o \ - $(BDIR)/LocalPeriodicTable.o \ - $(BDIR)/OutputStreams.o \ - $(BDIR)/PeriodicTable.o \ - $(BDIR)/PointsInSphere.o \ - $(BDIR)/StringUtils.o \ - $(BDIR)/fit.o \ - $(BDIR)/gaussj.o \ - $(BDIR)/metric.o \ - $(BDIR)/nrutil.o \ - $(BDIR)/output.o \ - $(BDIR)/parser.o \ - $(BDIR)/pdf.o \ - $(BDIR)/pdffit.o \ - $(BDIR)/pdflsmin.o \ - $(BDIR)/scatlen.o \ - $(BDIR)/stru.o \ - - -$(BDIR): - mkdir -p $@ - -$(BDIR)/pdffit2module.so: $(BDIR) $(OBJS) - $(CXX) -o $@ $(LDFLAGS) $(OBJS) $(GSL_LIBS) - -$(BDIR)/%.o : libpdffit2/%.cc - $(CXX) -c $(CPPFLAGS) -o $@ $< - -$(BDIR)/%.o : pdffit2module/%.cc - $(CXX) -c $(CPPFLAGS) -o $@ $< - -# End of file diff --git a/README.rst b/README.rst index bef2a4ce..f308a906 100644 --- a/README.rst +++ b/README.rst @@ -1,22 +1,56 @@ -.. image:: https://travis-ci.org/diffpy/diffpy.pdffit2.svg?branch=master - :target: https://travis-ci.org/diffpy/diffpy.pdffit2 +|Icon| |title|_ +=============== -.. image:: https://codecov.io/gh/diffpy/diffpy.pdffit2/branch/master/graph/badge.svg - :target: https://codecov.io/gh/diffpy/diffpy.pdffit2 +.. |title| replace:: diffpy.pdffit2 +.. _title: https://diffpy.github.io/diffpy.pdffit2 +.. |Icon| image:: https://avatars.githubusercontent.com/diffpy + :target: https://diffpy.github.io/diffpy.pdffit2 + :height: 100px -PDFfit2 -======================================================================== +|PyPI| |Forge| |PythonVersion| |PR| -Real space structure refinement to atomic pair distribution function. +|CI| |Codecov| |Black| |Tracking| -The diffpy.pdffit2 package provides functions for calculation and -refinement of atomic Pair Distribution Function (PDF) from crystal -structure model. It is used as a computational engine by PDFgui. All -refinements possible in PDFgui can be done with diffpy.pdffit2, +.. |Black| image:: https://img.shields.io/badge/code_style-black-black + :target: https://github.com/psf/black + +.. |CI| image:: https://github.com/diffpy/diffpy.pdffit2/actions/workflows/matrix-and-codecov-on-merge-to-main.yml/badge.svg + :target: https://github.com/diffpy/diffpy.pdffit2/actions/workflows/matrix-and-codecov-on-merge-to-main.yml + +.. |Codecov| image:: https://codecov.io/gh/diffpy/diffpy.pdffit2/branch/main/graph/badge.svg + :target: https://codecov.io/gh/diffpy/diffpy.pdffit2 + +.. |Forge| image:: https://img.shields.io/conda/vn/conda-forge/diffpy.pdffit2 + :target: https://anaconda.org/conda-forge/diffpy.pdffit2 + +.. |PR| image:: https://img.shields.io/badge/PR-Welcome-29ab47ff + :target: https://github.com/diffpy/diffpy.pdffit2/pulls + +.. |PyPI| image:: https://img.shields.io/pypi/v/diffpy.pdffit2 + :target: https://pypi.org/project/diffpy.pdffit2/ + +.. |PythonVersion| image:: https://img.shields.io/pypi/pyversions/diffpy.pdffit2 + :target: https://pypi.org/project/diffpy.pdffit2/ + +.. |Tracking| image:: https://img.shields.io/badge/issue_tracking-github-blue + :target: https://github.com/diffpy/diffpy.pdffit2/issues + +PDFfit2 - real space structure refinement of the atomic pair distribution function + +The diffpy.pdffit2 package provides functions for the calculation and +refinement of atomic Pair Distribution Functions (PDF) from crystal +structure models. It is used as a computational engine by PDFgui. All +refinements possible in PDFgui can be done by writing python scripts +directly with diffpy.pdffit2, although less conveniently and with a fair knowledge of Python. -The package includes an extension for the interactive `IPython -`__ shell, which tries to mimic the old PDFFIT +However, we recommend using `diffpy-cmi +`_ for carrying +out more advanced, python-scripted refinements of nanostructure. + +The PDFfit2 package includes an extension for the interactive `IPython +`_ shell, these days commonly used within +Jupyter notebooks, which tries to mimic the old PDFFIT program. To start IPython with this extension and also with plotting functions enabled, use :: @@ -31,64 +65,77 @@ To learn more about diffpy.pdffit2 library, see the examples directory included in this distribution or the API documentation at http://www.diffpy.org/doc/pdffit2. +For more information about the diffpy.pdffit2 library, please consult our `online documentation `_. + +Citation +-------- + +If you use diffpy.pdffit2 in a scientific publication, we would like you to cite the following paper: + + C. L. Farrow, P. Juhás, J. W. Liu, D. Bryndin, E. S. Božin, J. Bloch, Th. Proffen + and S. J. L. Billinge, PDFfit2 and PDFgui: computer programs for studying nanostructure + in crystals (https://stacks.iop.org/0953-8984/19/335219), *J. Phys.: Condens. Matter*, 19, 335219 (2007) + +Installation +------------ + +diffpy.pdffit2 supports Python 3.12, 3.13, and 3.14. -REQUIREMENTS ------------------------------------------------------------------------- +Windows, macOS (non-Arm64), Linux +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -diffpy.pdffit2 requires Python 3.7 or later or 2.7 and -the following external software: +The preferred method is to use `Miniconda Python +`_ +and install from the "conda-forge" channel of Conda packages. -* ``setuptools`` - software distribution tools for Python -* ``python-dev`` - header files for interfacing Python with C -* ``GSL`` - GNU Scientific Library for C -* ``g++`` - GNU C++ compiler -* ``diffpy.structure`` - simple storage and manipulation of atomic - structures, https://github.com/diffpy/diffpy.structure +To add "conda-forge" to the conda channels, run the following in a terminal. :: -We recommend to use `Anaconda Python `_ -as it allows to install all software dependencies together with -PDFfit2. For other Python distributions it is necessary to -install the required software separately. As an example, on Ubuntu -Linux some of the required software can be installed using :: + conda config --add channels conda-forge - sudo apt-get install \ - python-setuptools python-dev libgsl0-dev build-essential +We want to install our packages in a suitable conda environment. +The following creates and activates a new environment named ``diffpy.pdffit2_env`` :: + conda create -n diffpy.pdffit2_env diffpy.pdffit2 + conda activate diffpy.pdffit2_env -INSTALLATION ------------------------------------------------------------------------- +To confirm that the installation was successful, type :: -The preferred method is to use Anaconda Python and install from the -"conda-forge" channel of Anaconda packages :: + python -c "import diffpy.pdffit2; print(diffpy.pdffit2.__version__)" - conda install -c conda-forge diffpy.pdffit2 +macOS (Arm64) +~~~~~~~~~~~~~ -If you don't use Anaconda or prefer to install from sources, make -sure the required software is in place and run :: +Create a new conda environment ``diffpy.pdffit2_env``: :: - python setup.py install + conda create -n diffpy.pdffit2_env python=3.13 -By default the files get installed to standard system directories, -which may require the use of ``sudo`` for write permissions. If -administrator (root) access is not available, consult the output from -``python setup.py install --help`` for options to install as a regular -user to other locations. The installation integrity can be -verified by changing to the HOME directory and running :: +Activate the environment: :: - python -m diffpy.pdffit2.tests.rundeps + conda activate diffpy.pdffit2_env -Anaconda Python allows to later update PDFfit2 using :: +Install pdffit2 using ``pip`` to download and install the latest version from `Python Package Index `_: :: - conda update diffpy.pdffit2 + pip install diffpy.pdffit2 -With other Python distributions use the easy_install program to -upgraded to the latest version :: +If you prefer to install from sources, after installing the dependencies, obtain the source archive from +`GitHub `_. Once installed, ``cd`` into your ``diffpy.pdffit2`` directory +and run the following :: - easy_install --upgrade diffpy.pdffit2 + pip install . -DEVELOPMENT ------------------------------------------------------------------------- +You can type the following command to verify the installation is successful. :: + + python -c "import diffpy.pdffit2; print(diffpy.pdffit2.__version__)" + + +Getting Started +--------------- + +You may consult our `online documentation `_ for tutorials and API references. + +Support and Contribute +---------------------- PDFfit2 is not developed anymore and is only maintained due to its status of a sole computational engine for PDFgui. We don't expect any @@ -99,12 +146,41 @@ at https://github.com/diffpy/diffpy.pdffit2. For an actively developed codes for PDF simulations see the DiffPy-CMI framework at http://www.diffpy.org. +---- + +`Diffpy user group `_ is the discussion forum for general questions and discussions about the use of diffpy.pdffit2. Please join the diffpy.pdffit2 users community by joining the Google group. The diffpy.pdffit2 project welcomes your expertise and enthusiasm! + +If you see a bug or want to request a feature, please `report it as an issue `_ and/or `submit a fix as a PR `_. You can also post it to the `Diffpy user group `_. + +Feel free to fork the project and contribute. To install diffpy.pdffit2 +in a development mode, with its sources being directly used by Python +rather than copied to a package directory, use the following in the root +directory :: + + pip install -e . + +To ensure code quality and to prevent accidental commits into the default branch, please set up the use of our pre-commit +hooks. + +1. Install pre-commit in your working environment by running ``conda install pre-commit``. + +2. Initialize pre-commit (one time only) ``pre-commit install``. + +Thereafter your code will be linted by black and isort and checked against flake8 before you can commit. +If it fails by black or isort, just rerun and it should pass (black and isort will modify the files so should +pass after they are modified). If the flake8 test fails please see the error messages and fix them manually before +trying to commit again. + +Improvements and fixes are always appreciated. + +Before contributing, please read our `Code of Conduct `_. -CONTACTS ------------------------------------------------------------------------- +Contact +------- -For more information on diffpy.pdffit2 please visit the project web-page: +For more information on diffpy.pdffit2 please visit the project `web-page `_ or email Simon Billinge at sb2896@columbia.edu. -http://www.diffpy.org/ +Acknowledgements +---------------- -or email Prof. Simon Billinge at sb2896@columbia.edu. +``diffpy.pdffit2`` is built and maintained with `scikit-package `_. diff --git a/conda-recipe/bld.bat b/conda-recipe/bld.bat deleted file mode 100644 index 3038f794..00000000 --- a/conda-recipe/bld.bat +++ /dev/null @@ -1,7 +0,0 @@ -%PYTHON% -m easy_install --no-deps . -if errorlevel 1 exit 1 - -:: Add more build steps here, if they are necessary. - -:: See http://docs.continuum.io/conda/build.html -:: for a list of environment variables that are set during the build process. diff --git a/conda-recipe/build.sh b/conda-recipe/build.sh deleted file mode 100644 index 70ddaf82..00000000 --- a/conda-recipe/build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Produce stripped binaries on Linux. -if [[ "$(uname)" == Linux ]]; then - # conda-build does not set LDFLAGS on Linux. - export LDFLAGS="-s" -fi - -# allow use of default SDK on travis -if [[ "$(id -un)" == travis ]]; then - unset CONDA_BUILD_SYSROOT -# print informative message if SDK is not installed -elif [[ "$(uname)" == Darwin ]]; then - if [[ ! -e $CONDA_BUILD_SYSROOT ]]; then - echo "Please install macOS SDK to $CONDA_BUILD_SYSROOT" - exit 2 - fi -fi - -$PYTHON -m easy_install --no-deps . - -# Add more build steps here, if they are necessary. - -# See http://docs.continuum.io/conda/build.html -# for a list of environment variables that are set during the build process. diff --git a/conda-recipe/conda_build_config.yaml b/conda-recipe/conda_build_config.yaml deleted file mode 100644 index 4244b05c..00000000 --- a/conda-recipe/conda_build_config.yaml +++ /dev/null @@ -1,11 +0,0 @@ -python: - - 3.12 - - 3.11 - - 3.10 - - 3.9 - - 3.8 - - 3.7 - - 2.7 - -gsl: - - 2.4 diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml deleted file mode 100644 index 9296ff4e..00000000 --- a/conda-recipe/meta.yaml +++ /dev/null @@ -1,60 +0,0 @@ -{% set setupdata = load_setup_py_data() %} - -package: - name: diffpy.pdffit2 - version: {{ setupdata['version'] }} - -source: - # git_url: https://github.com/diffpy/diffpy.pdffit2.git - git_url: .. - -build: - preserve_egg_dir: True - - # If this is a new build for the same version, increment the build - # number. If you do not include this key, it defaults to 0. - number: 0 - -requirements: - build: - - {{ compiler('cxx') }} # [py3k or not win] - - gsl {{ gsl }} - host: - - python {{ python }} - - pip - - setuptools - - run: - - python - - setuptools - - six - - diffpy.structure >=3 - -test: - # Python imports - imports: - - diffpy - - diffpy.pdffit2 - - diffpy.pdffit2.ipy_ext - - diffpy.pdffit2.tests - - # commands: - # You can put test commands to be run here. Use this to test that the - # entry points work. - - - # You can also put a file called run_test.py in the recipe that will be run - # at test time. - - # requires: - # Put any additional test requirements here. For example - # - nose - -about: - home: https://github.com/diffpy/diffpy.pdffit2 - summary: PDFfit2 - real space structure refinement program - license: Modified BSD License - license_file: LICENSE.txt - -# See http://docs.continuum.io/conda/build.html -# for more information about meta.yaml. diff --git a/conda-recipe/run_test.py b/conda-recipe/run_test.py deleted file mode 100644 index f7099645..00000000 --- a/conda-recipe/run_test.py +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env python - -import diffpy.pdffit2.tests -assert diffpy.pdffit2.tests.test().wasSuccessful() diff --git a/cookiecutter.json b/cookiecutter.json new file mode 100644 index 00000000..8cf6acc5 --- /dev/null +++ b/cookiecutter.json @@ -0,0 +1,20 @@ +{ + "author_names": "Simon Billinge", + "author_emails": "sbillinge@ucsb.edu", + "maintainer_names": "Simon Billinge", + "maintainer_emails": "sbillinge@ucsb.edu", + "maintainer_github_usernames": "sbillinge", + "contributors": "Pavol Juhas, Chris Farrow, Simon Billinge, Billinge Group members", + "license_holders": "The Trustees of Columbia University in the City of New York", + "project_name": "diffpy.pdffit2", + "github_username_or_orgname": "diffpy", + "github_repo_name": "diffpy.pdffit2", + "conda_pypi_package_dist_name": "diffpy.pdffit2", + "package_dir_name": "diffpy.pdffit2", + "project_short_description": "PDFfit2 - real space structure refinement program.", + "project_keywords": "PDF, structure refinement", + "minimum_supported_python_version": "3.12", + "maximum_supported_python_version": "3.14", + "project_needs_c_code_compiled": "Yes", + "project_has_gui_tests": "No" +} diff --git a/devutils/makesdist b/devutils/makesdist deleted file mode 100755 index 6aaae616..00000000 --- a/devutils/makesdist +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python - -'''Create source distribution tar.gz archive, where each file belongs -to a root user and modification time is set to the git commit time. -''' - -import sys -import os -import subprocess -import glob -import tarfile -import gzip - -BASEDIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) -sys.path.insert(0, BASEDIR) - -from setup import versiondata, FALLBACK_VERSION -timestamp = versiondata.getint('DEFAULT', 'timestamp') - -vfb = versiondata.get('DEFAULT', 'version').split('.post')[0] + '.post0' -emsg = "Invalid FALLBACK_VERSION. Expected %r got %r." -assert vfb == FALLBACK_VERSION, emsg % (vfb, FALLBACK_VERSION) - -def inform(s): - sys.stdout.write(s) - sys.stdout.flush() - return - -inform('Run "setup.py sdist --formats=tar" ') -cmd_sdist = [sys.executable] + 'setup.py sdist --formats=tar'.split() -ec = subprocess.call(cmd_sdist, cwd=BASEDIR, stdout=open(os.devnull, 'w')) -if ec: sys.exit(ec) -inform("[done]\n") - -tarname = max(glob.glob(BASEDIR + '/dist/*.tar'), key=os.path.getmtime) - -tfin = tarfile.open(tarname) -fpout = gzip.GzipFile(tarname + '.gz', 'w', mtime=0) -tfout = tarfile.open(fileobj=fpout, mode='w') - -def fixtarinfo(tinfo): - tinfo.uid = tinfo.gid = 0 - tinfo.uname = tinfo.gname = 'root' - tinfo.mtime = timestamp - tinfo.mode &= ~0o022 - return tinfo - -inform('Filter %s --> %s.gz ' % (2 * (os.path.basename(tarname),))) -for ti in tfin: - tfout.addfile(fixtarinfo(ti), tfin.extractfile(ti)) - -tfin.close() -os.remove(tarname) -inform("[done]\n") diff --git a/diffpy/__init__.py b/diffpy/__init__.py deleted file mode 100644 index 1a099c09..00000000 --- a/diffpy/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2008 trustees of the Michigan State University. -# All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - - -"""diffpy - tools for structure analysis by diffraction. - -Blank namespace package. -""" - - -from pkgutil import extend_path -__path__ = extend_path(__path__, __name__) - - -# End of file diff --git a/diffpy/pdffit2/__init__.py b/diffpy/pdffit2/__init__.py deleted file mode 100644 index 0f33c5c4..00000000 --- a/diffpy/pdffit2/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# pdffit2 by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2006 trustees of the Michigan State University. -# All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - -"""PDFfit2 - real space structure refinement program. -Classes: - PdfFit -Routines: - redirect_stdout -""" - - -from diffpy.pdffit2.version import __version__, __date__ -from diffpy.pdffit2.pdffit import PdfFit -from diffpy.pdffit2.output import redirect_stdout -from diffpy.pdffit2.pdffit2 import is_element - -# silence pyflakes checker -assert __version__ or True -assert __date__ or True -assert all((PdfFit, redirect_stdout, is_element)) - -# End of file diff --git a/diffpy/pdffit2/tests/ExceptionsTest.py b/diffpy/pdffit2/tests/ExceptionsTest.py deleted file mode 100644 index a1b800a0..00000000 --- a/diffpy/pdffit2/tests/ExceptionsTest.py +++ /dev/null @@ -1,866 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# pdffit2 by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2006 trustees of the Michigan State University. -# All rights reserved. -# -# File coded by: Chris Farrow -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - - -import unittest - -from diffpy.pdffit2 import PdfFit -from diffpy.pdffit2 import pdffit2 -from diffpy.pdffit2.tests.pdffit2testutils import datafile - - -class read_structExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_IOError(self): - """raise IOError when structure file does not exist""" - self.assertRaises(IOError, self.P.read_struct, "Nofile.stru") - - def test_structureError(self): - """raise pdffit2.structureError when structure is malformed""" - self.assertRaises(pdffit2.structureError, self.P.read_struct, - datafile("badNi.stru")) - - def test_structureErrorZeroVolume(self): - """raise pdffit2.structureError when unit cell volume is negative""" - #I don't know how to test for this, but it's in the library code - self.assertRaises(pdffit2.structureError, - self.P.read_struct, datafile("badNiZeroVolume.stru")) - -class read_dataExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_IOError(self): - """raise IOError when data file does not exist""" - self.assertRaises(IOError, self.P.read_data, "Nofile.dat", - 'X', 25.0, 0.5) - - def test_dataError(self): - """raise pdffit2.dataError when data has improper spacing""" - self.assertRaises(pdffit2.dataError, self.P.read_data, - datafile("badNi.dat"), 'X', 25.0, 0.5) - -class read_data_listsExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.r_data = [0.1, 0.2] - self.Gr_data = [1, 2, 3] - self.qmax = 10 - self.qdamp = 0.5 - - def tearDown(self): - del self.P - - def test_ValueError1(self): - """raise ValueError when lists are of different length""" - self.assertRaises(ValueError, self.P.read_data_lists, 'X', self.qmax, - self.qdamp, self.r_data, self.Gr_data) - - def test_ValueError2(self): - """raise ValueError when qmax < 0""" - self.assertRaises(ValueError, self.P.read_data_lists, 'X', -self.qmax, - self.qdamp, self.r_data, self.Gr_data) - - def test_ValueError3(self): - """raise ValueError when qdamp < 0""" - self.assertRaises(ValueError, self.P.read_data_lists, 'X', self.qmax, - -self.qdamp, self.r_data, self.Gr_data) - - def test_dataError(self): - """raise pdffit2.dataError when data has improper spacing""" - r_data = [0.1, 0.52, 0.2] - self.assertRaises(pdffit2.dataError, self.P.read_data_lists, 'X', self.qmax, - self.qdamp, r_data, self.Gr_data) - - -class pdfrangeExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.iset = 1 - self.rmin = 4.0 - self.rmax = 10.0 - - def tearDown(self): - del self.P - - def test_ValueError1(self): - """raise ValueError when iset does not exist""" - self.assertRaises(ValueError, self.P.pdfrange, self.iset, self.rmin, - self.rmax) - - def test_ValueError2(self): - """raise ValueError when rmax < rmin""" - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.5) - self.assertRaises(ValueError, self.P.pdfrange, self.iset, self.rmax, - self.rmin) - - def test_ValueError3(self): - """raise ValueError when range outside of data""" - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.5) - self.assertRaises(ValueError, self.P.pdfrange, self.iset, -self.rmin, - self.rmax) - - -class allocExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.qmax = 25 - self.qdamp = 0.5 - self.rmin = 4.0 - self.rmax = 10.0 - self.bin = 100 - - def tearDown(self): - del self.P - - def test_ValueError1(self): - """raise ValueError when qmax < 0""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', -self.qmax, self.qdamp, - self.rmin, self.rmax, self.bin) - - def test_ValueError2(self): - """raise ValueError when qdamp < 0""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', self.qmax, -self.qdamp, - self.rmin, self.rmax, self.bin) - - def test_ValueError3(self): - """raise ValueError when rmin < 0""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', self.qmax, self.qdamp, - -self.rmin, self.rmax, self.bin) - - def test_ValueError4(self): - """raise ValueError when rmax < 0""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', self.qmax, self.qdamp, - self.rmin, -self.rmax, self.bin) - - def test_ValueError5(self): - """raise ValueError when bin < 0""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', self.qmax, self.qdamp, - self.rmin, self.rmax, -self.bin) - - def test_ValueError6(self): - """raise ValueError when rmax < rmin""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', self.qmax, self.qdamp, - self.rmax, self.rmin, self.bin) - - def test_ValueError7(self): - """raise ValueError when qdamp < 0""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.alloc, 'X', self.qmax, self.qdamp, - self.rmin, self.rmax, -self.bin) - - -class calcExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.P.read_struct(datafile("Ni.stru")) - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when no space has been allocated""" - self.assertRaises(pdffit2.unassignedError, self.P.calc) - -# PJ 2006-03-06 -# -# test_calculationError raised exception, because for Qmax=0.5, rmax would -# increase to 4010A and this would throw exception when the size of bnd array -# would exceed MAXBND limit. However, bnd vector can now grow, thus rmax -# is not limited and the following test would hang indefinitely. - -# def test_calculationError(self): -# """raise pdffit2.calculationError when calculation cannot be done""" -# self.P.alloc('X', 0.01, 0.5, 2, 10, 100) -# self.assertRaises(pdffit2.calculationError, self.P.calc) - - -#class refineExceptions(unittest.TestCase): - #I'm not sure how to test these - -# def setUp(self): -# self.P = PdfFit() -# -# def test_calculationError(self): -# """raise pdffit2.calculationError when model pdf can't be calculated""" -# #self.assertRaises(pdffit2.calculationError, self.P.calc) -# -# def test_constraintError(self): -# """raise pdffit2.constraintError for bad constraint(s)""" -# #self.assertRaises(pdffit2.constraintError, self.P.calc) - - -#class refine_stepExceptions(unittest.TestCase): - #I'm not sure how to test these - -# def setUp(self): -# self.P = PdfFit() -# -# def test_calculationError(self): -# """raise pdffit2.calculationError when model pdf can't be calculated""" -# #self.assertRaises(pdffit2.calculationError, self.P.calc) -# -# def test_constraintError(self): -# """raise pdffit2.constraintError for bad constraint(s)""" -# #self.assertRaises(pdffit2.constraintError, self.P.calc) - - -class save_pdfExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.strufile = "temp.pdf" - - def tearDown(self): - del self.P - - def test_IOError(self): - """raise IOError when structure cannot be saved""" - self.P.read_struct(datafile("Ni.stru")) - self.P.alloc('X', 30.0, 0.05, 2, 10, 100) - self.P.calc() - self.assertRaises(IOError, self.P.save_pdf, 1, - "nodir183160/"+self.strufile) - - def test_unassignedError(self): - """raise pdffit2.unassignedError when structure is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.save_pdf, 1, - self.strufile) - - -class save_difExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.strufile = "temp.dif" - - def tearDown(self): - del self.P - - def test_IOError(self): - """raise IOError when dif cannot be saved""" - self.P.read_struct(datafile("Ni.stru")) - self.P.alloc('X', 30.0, 0.05, 2, 10, 100) - self.P.calc() - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.5) - self.assertRaises(IOError, self.P.save_dif, 1, - "nodir183160/"+self.strufile) - - def test_unassignedError(self): - """raise pdffit2.unassignedError when structure is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.save_dif, 1, - self.strufile) - - -class save_resExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.resfile = "temp.res" - - def tearDown(self): - del self.P - - def test_IOError(self): - """raise IOError when residual file cannot be saved""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 30.0, 0.0) - self.P.constrain(self.P.lat(1), 1) - self.P.setpar(1, 3.0) - self.P.pdfrange(1,2.0,10.0) - self.P.refine_step() - self.assertRaises(IOError, self.P.save_res, - "nodir183160/"+self.resfile) - - def test_unassignedError(self): - """raise pdffit2.unassignedError when structure is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.save_res, - self.resfile) - - -class save_structExceptions(unittest.TestCase): - #Same code as show_struct - - def setUp(self): - self.P = PdfFit() - self.strufile = "temp.stru" - - def tearDown(self): - del self.P - - def test_IOError(self): - """raise IOError when structure cannot be saved""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(IOError, self.P.save_struct, 1, - "nodir183160/"+self.strufile) - - def test_unassignedError(self): - """raise pdffit2.unassignedError when structure is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.save_struct, 1, - self.strufile) - - -class constrainExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.par = 1 - return - - def tearDown(self): - self.P = None - return - - def test_constraintError(self): - """raise constraintError when constraint is bad""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.P.constrain('x(1)', 'junk+@1') - self.P.setpar(1, 0.01) - self.assertRaises(pdffit2.constraintError, self.P.calc) - self.assertRaises(pdffit2.constraintError, self.P.refine) - return - - def test_unassignedError(self): - """raise pdffit2.unassignedError when variable is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.constrain, self.P.x(1), - self.par) - return - - def test_ValueError(self): - """raise ValueError when a variable index does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.constrain, self.P.x(6), - self.par) - return - - def test_constrainNonRefVar(self): - "raise constraintError when attempting to constrain non-refinables" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(pdffit2.constraintError, - self.P.constrain, 'rcut', '@7') - self.assertRaises(pdffit2.constraintError, - self.P.constrain, 'rcut', 13) - self.assertRaises(pdffit2.constraintError, - self.P.constrain, 'stepcut', '@17') - return - - - -class setvarExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.val = 3.0 - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when variable is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.setvar, self.P.lat(1), - self.val) - - def test_ValueError(self): - """raise ValueError when a variable index does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.setvar, self.P.lat(7), - self.val) - - -class getvarExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when variable is undefined""" - self.assertRaises(pdffit2.unassignedError, self.P.getvar, - self.P.pscale()) - - def test_ValueError(self): - """raise ValueError when a variable index does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(ValueError, self.P.getvar, self.P.lat(7)) - - -class getRExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.getR) - - -class getpdf_fitExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.getpdf_fit) - - -class getpdf_obsExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.getpdf_obs) - - -class getpdf_diffExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.getpdf_diff) - - -class get_atomsExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.get_atoms) - - -class getparExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError1(self): - """raise pdffit2.unassignedError when parameter does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.getpar, 1) - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when parameter does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.P.constrain(self.P.lat(1), 2) - self.assertRaises(pdffit2.unassignedError, self.P.getpar, 1) - - -class pselExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.ip = 1 - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) - - -class pdeselExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.ip = 1 - - def tearDown(self): - del self.P - - def test_unassignedError1(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) - - -class selectAtomTypeExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.iset = 1 - self.i = 1 - - def tearDown(self): - del self.P - - def test_unassignedError1(self): - """raise pdffit2.unassignedError when set does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.selectAtomType, - self.iset, 'i', 'Ni', True) - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when set does not exist""" - self.P.read_struct(datafile("Ni.stru")) - # selectAtomType should pass with one phase defined - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.P.selectAtomType(self.iset, 'i', 'Ni', True) - self.P.selectAtomType(self.iset, 'j', 'Ni', False) - # but fail for phase 2 which is not present - self.assertRaises(pdffit2.unassignedError, self.P.selectAtomType, - 2, 'i', 'Ca', True) - - def test_ijcharValueError(self): - """raise ValueError when ijchar is neither 'i' nor 'j'""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.P.selectAtomType(self.iset, 'i', 'Ni', True) - self.P.selectAtomType(self.iset, 'j', 'Ni', True) - self.assertRaises(ValueError, self.P.selectAtomType, - self.iset, 'k', 'Ni', True) - - -class selectAtomIndexExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.iset = 1 - self.i = 1 - - def tearDown(self): - del self.P - - def test_unassignedError1(self): - """raise pdffit2.unassignedError when set does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.selectAtomIndex, - self.iset, 'i', self.i, True) - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when set does not exist""" - self.P.read_struct(datafile("Ni.stru")) - # pass for phase 1 - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.P.selectAtomIndex(self.iset, 'i', 1, True) - self.P.selectAtomIndex(self.iset, 'i', 2, False) - # fail for phase 2 - self.assertRaises(pdffit2.unassignedError, self.P.selectAtomIndex, - 2, 'i', 1, True) - - def test_ValueError(self): - """raise ValueError when selected atom does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(ValueError, self.P.selectAtomIndex, - self.iset, 'i', 6, True) - - -class selectAllExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.iset = 1 - self.i = 1 - - def tearDown(self): - del self.P - - def test_unassignedError1(self): - """raise pdffit2.unassignedError when set does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.selectAll, - self.iset, 'i') - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when set does not exist""" - self.P.read_struct(datafile("Ni.stru")) - # fail when there is no dataset - self.assertRaises(pdffit2.unassignedError, self.P.selectAll, - self.iset, 'i') - # pass with dataset - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.P.selectAll(self.iset, 'i') - self.P.selectAll(self.iset, 'j') - # fail for phase 2 - self.assertRaises(pdffit2.unassignedError, self.P.selectAll, 2, 'i') - self.assertRaises(pdffit2.unassignedError, self.P.selectAll, 2, 'j') - - -class selectNoneExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.iset = 1 - self.i = 1 - - def tearDown(self): - del self.P - - def test_unassignedError1(self): - """raise pdffit2.unassignedError when set does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.selectNone, - self.iset, 'i') - - def test_unassignedError2(self): - """raise pdffit2.unassignedError when set does not exist""" - self.P.read_struct(datafile("Ni.stru")) - # fail when there is no dataset - self.assertRaises(pdffit2.unassignedError, self.P.selectNone, - self.iset, 'i') - # pass with dataset - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.P.selectNone(self.iset, 'i') - self.P.selectNone(self.iset, 'j') - # fail for phase 2 - self.assertRaises(pdffit2.unassignedError, self.P.selectNone, 2, 'i') - self.assertRaises(pdffit2.unassignedError, self.P.selectNone, 2, 'j') - - -class bangExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.a1 = 1 - self.a2 = 2 - self.a3 = 3 - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.bang, self.a1, - self.a2, self.a3) - - def test_ValueError1(self): - """raise ValueError when selected atom(s) does not exist""" - self.P.read_struct(datafile('Ni.stru')) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(ValueError, self.P.bang, 0, - self.a2, self.a3) - - def test_ValueError2(self): - """raise ValueError when selected atom(s) does not exist""" - self.P.read_struct(datafile('Ni.stru')) - self.assertRaises(ValueError, self.P.bang, self.a1, - -1, self.a3) - - def test_ValueError3(self): - """raise ValueError when selected atom(s) does not exist""" - self.P.read_struct(datafile('Ni.stru')) - self.assertRaises(ValueError, self.P.bang, self.a1, - self.a2, 6) - - -class blenExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - self.a1 = 1 - self.a2 = 2 - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when no data exists""" - self.assertRaises(pdffit2.unassignedError, self.P.blen, self.a1, - self.a2) - - def test_ValueError1(self): - """raise ValueError when selected atom(s) does not exist""" - self.P.read_struct(datafile('Ni.stru')) - self.assertRaises(ValueError, self.P.blen, 0, self.a2) - - def test_ValueError2(self): - """raise ValueError when selected atom(s) does not exist""" - self.P.read_struct(datafile('Ni.stru')) - self.assertRaises(ValueError, self.P.blen, self.a1, 6) - - def test_ValueError3(self): - """raise ValueError when selected atom(s) does not exist""" - self.P.read_struct(datafile('Ni.stru')) - self.assertRaises(ValueError, self.P.blen, 0, 6) - - -class show_scatExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.show_scat, 'X') - - -#class set_scatExceptions(unittest.TestCase): - #I'm not sure how to use this function - -# def setUp(self): -# self.P = PdfFit() -# -# def test_unassignedError1(self): -# """raise pdffit2.unassignedError when phase does not exist""" -# #self.assertRaises(pdffit2.constraintError, self.P.calc) -# -# def test_unassignedError2(self): -# """raise pdffit2.unassignedError when phase does not exist""" -# #self.assertRaises(pdffit2.constraintError, self.P.calc) -# -# def test_ValueError(self): -# """raise pdffit2.unassignedError when selected atom does not exist""" -# #self.assertRaises(pdffit2.constraintError, self.P.calc) - - -class num_atomsExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when no atoms exist""" - self.assertRaises(pdffit2.unassignedError, self.P.num_atoms) - -class fixparExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when parameter does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(pdffit2.unassignedError, self.P.fixpar, 1) - - -class freeparExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when parameter does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(pdffit2.unassignedError, self.P.freepar, 1) - - -class setphaseExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when phase does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(pdffit2.unassignedError, self.P.setphase, 2) - - -class setdataExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data set does not exist""" - self.P.read_struct(datafile("Ni.stru")) - self.P.read_data(datafile("Ni.dat"), 'X', 25.0, 0.0) - self.assertRaises(pdffit2.unassignedError, self.P.setdata, 2) - -class getcrwExceptions(unittest.TestCase): - - def setUp(self): - self.P = PdfFit() - - def tearDown(self): - del self.P - - def test_unassignedError(self): - """raise pdffit2.unassignedError when data does not exist""" - self.assertRaises(pdffit2.unassignedError, self.P.getcrw) - - - -#main -if __name__ == '__main__': - #suite = unittest.makeSuite(num_atomsExceptions) - #unittest.TextTestRunner(verbosity=3).run(suite) - #testcase = calcExceptions('test_unassignedError') - #unittest.TextTestRunner(verbosity=3).run(testcase) - unittest.main() - -# End of file diff --git a/diffpy/pdffit2/tests/TestPdfFit.py b/diffpy/pdffit2/tests/TestPdfFit.py deleted file mode 100644 index 90f1ad7c..00000000 --- a/diffpy/pdffit2/tests/TestPdfFit.py +++ /dev/null @@ -1,787 +0,0 @@ -#!/usr/bin/env python - -"""Unit tests for PdfFit.py -""" - - -import unittest - -from diffpy.structure import loadStructure - -from diffpy.pdffit2 import PdfFit -from diffpy.pdffit2 import pdffit2 -from diffpy.pdffit2.tests.pdffit2testutils import datafile, capture_output - -# ---------------------------------------------------------------------------- - -class TestPdfFit(unittest.TestCase): - - places = 6 - - def setUp(self): - self.P = PdfFit() - return - - def tearDown(self): - del self.P - return - - def test__exportAll(self): - "check PdfFit._exportAll()" - ns = {} - self.P._exportAll(ns) - self.assertEqual('ALL', ns['ALL']) - self.assertEqual('FSQR', ns['FSQR']) - self.assertEqual('N', ns['N']) - self.assertIs('N', ns['N']) - self.assertIs(self.P.lat, ns['lat']) - self.assertEqual(self.P.reset, ns['reset']) - return - -# def test_intro(self): -# """check PdfFit.intro() -# """ -# return - - def test_add_structure(self): - """check PdfFit.add_structure() - """ - ni = loadStructure(datafile('Ni.stru')) - self.P.add_structure(ni) - self.assertEqual(4, self.P.num_atoms()) - return - -# def test_read_struct(self): -# """check PdfFit.read_struct() -# """ -# return -# -# def test_read_struct_string(self): -# """check PdfFit.read_struct_string() -# """ -# return -# -# def test_read_data(self): -# """check PdfFit.read_data() -# """ -# return - - def test_read_data_string(self): - """check PdfFit.read_data_string() - """ - pf = self.P - with open(datafile('300K.gr')) as fp: - s = fp.read() - self.assertEqual([], pf.data_files) - pf.read_data_string(s, 'N', 32, 0.03, 'lmo') - self.assertEqual(1, len(pf.data_files)) - gobs = pf.getpdf_obs() - self.assertEqual(2000, len(gobs)) - self.assertEqual(0.384, gobs[-1]) - self.assertEqual(0.03, pf.getvar('qdamp')) - return - -# def test_read_data_lists(self): -# """check PdfFit.read_data_lists() -# """ -# return -# -# def test_pdfrange(self): -# """check PdfFit.pdfrange() -# """ -# return -# -# def test_reset(self): -# """check PdfFit.reset() -# """ -# return - - def test_alloc(self): - """check PdfFit.alloc() - """ - # alloc and read_struct can be called in any order. - self.P.alloc('X', 25, 0.0, 0.01, 10, 1000) - # without a structure calculated PDF is all zero - self.P.calc() - Gzero = self.P.getpdf_fit() - self.assertEqual(1000*[0.0], Gzero) - self.P.read_struct(datafile('Ni.stru')) - self.P.calc() - # check r-values - r = self.P.getR() - self.assertEqual(1000, len(r)) - for i in range(1000): - self.assertAlmostEqual(0.01*(i + 1), r[i], self.places) - Gfit_alloc_read = self.P.getpdf_fit() - # now try the other order - self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 25, 0.0, 0.01, 10, 1000) - self.P.calc() - Gfit_read_alloc = self.P.getpdf_fit() - # and they should be the same - self.assertEqual(Gfit_read_alloc, Gfit_alloc_read) - return - -# def test_calc(self): -# """check PdfFit.calc() -# """ -# return -# -# def test_refine(self): -# """check PdfFit.refine() -# """ -# return -# -# def test_refine_step(self): -# """check PdfFit.refine_step() -# """ -# return -# -# def test_save_pdf(self): -# """check PdfFit.save_pdf() -# """ -# return -# -# def test_save_pdf_string(self): -# """check PdfFit.save_pdf_string() -# """ -# return -# -# def test_save_dif(self): -# """check PdfFit.save_dif() -# """ -# return -# -# def test_save_dif_string(self): -# """check PdfFit.save_dif_string() -# """ -# return -# -# def test_save_res(self): -# """check PdfFit.save_res() -# """ -# return -# -# def test_save_res_string(self): -# """check PdfFit.save_res_string() -# """ -# return - - def test_get_structure(self): - """check PdfFit.get_structure() - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - stru1 = self.P.get_structure(1) - self.assertEqual(4, len(stru1)) - self.assertEqual('Ni', stru1[0].element) - stru2 = self.P.get_structure(2) - self.assertEqual(56, len(stru2)) - self.assertEqual('Ti', stru2[-1].element) - return - -# def test_save_struct(self): -# """check PdfFit.save_struct() -# """ -# return -# -# def test_save_struct_string(self): -# """check PdfFit.save_struct_string() -# """ -# return -# -# def test_show_struct(self): -# """check PdfFit.show_struct() -# """ -# return -# -# def test_constrain(self): -# """check PdfFit.constrain() -# """ -# return - - def test_setpar(self): - """check PdfFit.setpar() - """ - pf = self.P - pf.read_struct(datafile('Ni.stru')) - pf.setpar(1, 'lat(1)') - self.assertEqual(3.52, pf.getpar(1)) - pf.setpar(1, 4.0) - self.assertEqual(4, pf.getpar(1)) - pf.setpar(1, pf.lat('a')) - self.assertEqual(3.52, pf.getpar(1)) - return - - def test_setvar(self): - """check PdfFit.setvar() - """ - pf = self.P - pf.read_struct(datafile('Ni.stru')) - pf.setvar(pf.delta1, 1.2) - self.assertEqual(1.2, pf.getvar(pf.delta1)) - pf.setvar('delta1', 1.7) - self.assertEqual(1.7, pf.getvar('delta1')) - return - -# def test_getvar(self): -# """check PdfFit.getvar() -# """ -# return -# -# def test_getrw(self): -# """check PdfFit.getrw() -# """ -# return -# -# def test_getR(self): -# """check PdfFit.getR() -# """ -# return -# -# def test_getpdf_fit(self): -# """check PdfFit.getpdf_fit() -# """ -# return -# -# def test_getpdf_obs(self): -# """check PdfFit.getpdf_obs() -# """ -# return -# -# def test_getpdf_diff(self): -# """check PdfFit.getpdf_diff() -# """ -# return - - def test_get_atoms(self): - """check PdfFit.get_atoms() - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.setphase(1) - a1 = self.P.get_atoms() - a2 = self.P.get_atoms(2) - self.assertEqual(4*['NI'], a1) - self.assertEqual(8*['PB']+24*['O']+8*['SC']+8*['W']+8*['TI'], a2) - return - - def test_get_atom_types(self): - """check PdfFit.get_atom_types() - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.setphase(1) - atp1 = self.P.get_atom_types() - atp2 = self.P.get_atom_types(2) - self.assertEqual(['NI'], atp1) - self.assertEqual(['PB', 'O', 'SC', 'W', 'TI'], atp2) - return - - def test_num_phases(self): - """check PdfFit.num_phases() - """ - self.assertEqual(0, self.P.num_phases()) - self.P.read_struct(datafile('Ni.stru')) - self.assertEqual(1, self.P.num_phases()) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.assertEqual(2, self.P.num_phases()) - self.P.reset() - self.assertEqual(0, self.P.num_phases()) - return - - def test_num_datasets(self): - """check PdfFit.num_datasets() - """ - self.assertEqual(0, self.P.num_datasets()) - self.P.read_data(datafile('Ni.dat'), 'X', 25.0, 0.5) - self.assertEqual(1, self.P.num_datasets()) - # failed data should not increase num_datasets - try: - self.P.read_data(datafile('badNi.dat')) - except: - pass - self.assertEqual(1, self.P.num_datasets()) - # alloc should increase number of datasets - # alloc requires a loaded structure - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 30.0, 0.05, 2, 10, 100) - self.assertEqual(2, self.P.num_datasets()) - self.P.reset() - self.assertEqual(0, self.P.num_datasets()) - return - - def test_getcrw(self): - """check PdfFit.getcrw() - """ - import numpy - self.assertEqual(0, self.P.num_datasets()) - # Setting qmax=0 so that partial crw are not disturbed by - # termination ripples. - self.P.read_data(datafile('Ni.dat'), 'X', 0.0, 0.0) - # crw is empty before data refinement - self.assertEqual([], self.P.getcrw()) - self.P.read_struct(datafile('Ni.stru')) - self.P.pdfrange(1, 2, 19) - self.P.refine() - crw19 = numpy.array(self.P.getcrw()) - self.assertTrue(numpy.all(crw19 >= 0.0)) - # check that crw19 is non decreasing - self.assertTrue(numpy.all(numpy.diff(crw19) >= 0.0)) - # check that crw19 and getrw give the same value - rw19 = crw19[-1] - self.assertAlmostEqual(self.P.getrw(), rw19, self.places) - # renormalize cumulative Rw and compare with Rw at r=15 - Gobs19 = numpy.array(self.P.getpdf_obs()) - Gnorm19 = numpy.sqrt(numpy.sum(Gobs19**2)) - r = numpy.array(self.P.getR()) - idx = numpy.nonzero(r <= 15)[0] - Gnorm15 = numpy.sqrt(numpy.sum(Gobs19[idx]**2)) - i15 = idx[-1] - rw15 = crw19[i15] * Gnorm19 / Gnorm15 - self.P.pdfrange(1, 2, r[i15] + 1e-5) - self.P.refine() - self.assertAlmostEqual(self.P.getrw(), rw15, self.places) - return - - def test_getcrw_two_datasets(self): - """check that getcrw() and getrw() are consistent for two datasets. - """ - self.P.read_data(datafile('Ni.dat'), 'X', 25.0, 0.0) - self.P.pdfrange(1, 2, 8) - self.P.read_data(datafile('300K.gr'), 'N', 32.0, 0.0) - self.P.pdfrange(2, 1, 11) - self.P.read_struct(datafile('Ni.stru')) - # mess lattice parameters to have comparable Rw contributions - self.P.setvar('lat(1)', 3) - self.P.setvar('lat(2)', 3) - self.P.setvar('lat(3)', 3) - self.P.refine() - rwtot = self.P.getrw() - self.assertTrue(rwtot > 0.0) - self.P.setdata(1) - rw1 = self.P.getcrw()[-1] - self.P.setdata(2) - rw2 = self.P.getcrw()[-1] - self.assertAlmostEqual(rwtot**2, rw1**2 + rw2**2, self.places) - return - -# def test_getpar(self): -# """check PdfFit.getpar() -# """ -# return - - def test_fixpar(self): - """check PdfFit.fixpar() - """ - self.P.fixpar('all') - self.assertRaises(TypeError, self.P.fixpar, 'x') - return - - def test_freepar(self): - """check PdfFit.freepar() - """ - self.P.freepar('all') - self.assertRaises(TypeError, self.P.freepar, 'x') - return - -# def test_setphase(self): -# """check PdfFit.setphase() -# """ -# return -# -# def test_setdata(self): -# """check PdfFit.setdata() -# """ -# return -# - def test_psel(self): - """check PdfFit.psel() - """ - def doalloc(): - self.P.alloc('X', 30.0, 0.05, 2, 10, 100) - return - self.assertRaises(pdffit2.unassignedError, self.P.psel, 0) - self.assertRaises(pdffit2.unassignedError, self.P.psel, 1) - self.P.read_struct(datafile('Ni.stru')) - doalloc() - self.P.calc() - G1 = self.P.getpdf_fit() - self.P.reset() - self.P.read_struct(datafile('PbScW25TiO3.stru')) - doalloc() - self.P.calc() - G2 = self.P.getpdf_fit() - self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - doalloc() - self.P.pdesel('ALL') - self.P.psel(1) - self.P.calc() - self.assertEqual(G1, self.P.getpdf_fit()) - self.P.pdesel('ALL') - self.P.psel(2) - self.P.calc() - self.assertEqual(G2, self.P.getpdf_fit()) - self.P.psel('ALL') - self.P.calc() - Gall = self.P.getpdf_fit() - dGmax = max([abs(g1 + g2 - gall) - for g1, g2, gall in zip(G1, G2, Gall)]) - self.assertAlmostEqual(0, dGmax, self.places) - self.assertRaises(pdffit2.unassignedError, self.P.psel, 10) - self.assertRaises(pdffit2.unassignedError, self.P.psel, 0) - self.assertRaises(pdffit2.unassignedError, self.P.psel, -100) - return - - def test_pdesel(self): - """check PdfFit.pdesel() - """ - def doalloc(): - self.P.alloc('X', 30.0, 0.05, 2, 10, 100) - return - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 0) - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 1) - self.P.read_struct(datafile('Ni.stru')) - doalloc() - self.P.calc() - G1 = self.P.getpdf_fit() - self.P.reset() - self.P.read_struct(datafile('PbScW25TiO3.stru')) - doalloc() - self.P.calc() - G2 = self.P.getpdf_fit() - self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - doalloc() - self.P.psel('ALL') - self.P.pdesel(2) - self.P.calc() - self.assertEqual(G1, self.P.getpdf_fit()) - self.P.psel('ALL') - self.P.pdesel(1) - self.P.calc() - self.assertEqual(G2, self.P.getpdf_fit()) - self.P.pdesel('ALL') - self.P.calc() - G0 = self.P.getpdf_fit() - self.assertEqual([0.0]*len(G0), G0) - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 10) - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 0) - self.assertRaises(pdffit2.unassignedError, self.P.pdesel, -100) - return -# -# def test_selectAtomType(self): -# """check PdfFit.selectAtomType() -# """ -# return -# -# def test_selectAtomIndex(self): -# """check PdfFit.selectAtomIndex() -# """ -# return -# -# def test_selectAll(self): -# """check PdfFit.selectAll() -# """ -# return -# -# def test_selectNone(self): -# """check PdfFit.selectNone() -# """ -# return - - def test_bond_angle(self): - """check PdfFit.bond_angle() - """ - self.P.read_struct(datafile('Ni.stru')) - a, e = self.P.bond_angle(1, 2, 3) - self.assertAlmostEqual(60.0, a, self.places) - self.assertRaises(ValueError, self.P.bond_angle, 0, 1, 2) - self.assertRaises(ValueError, self.P.bond_angle, 1, 2, 7) - return - - def test_bang(self): - "check PdfFit.bang() function" - self.P.read_struct(datafile('Ni.stru')) - out = capture_output(self.P.bang, 1, 2, 3).strip() - self.assertTrue(out.endswith('60 degrees')) - self.assertTrue(out.startswith('NI (#1) - NI (#2) - NI (#3)')) - return - - def test_bond_length_atoms(self): - """check PdfFit.bond_length_atoms() - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - dij, ddij = self.P.bond_length_atoms(1, 5) - self.assertAlmostEqual(4.03635, dij, self.places) - self.P.setphase(1) - self.assertRaises(ValueError, self.P.bond_length_atoms, 1, 5) - return - - def test_bond_length_types(self): - """check PdfFit.bond_length_types() - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - dPbO = self.P.bond_length_types('Pb', 'O', 0.1, 3.0) - # check if keys are present - self.assertTrue('dij' in dPbO) - self.assertTrue('ddij' in dPbO) - self.assertTrue('ij0' in dPbO) - self.assertTrue('ij1' in dPbO) - # check if they have the same length - npts = len(dPbO['dij']) - self.assertEqual(npts, len(dPbO['ddij'])) - self.assertEqual(npts, len(dPbO['ij0'])) - self.assertEqual(npts, len(dPbO['ij1'])) - # 8 Pb atoms have coordination 12 in perovskite structure - self.assertEqual(8*12, len(dPbO['dij'])) - self.P.setphase(1) - dfcc = self.P.bond_length_types('ALL', 'ALL', 0.1, 2.6) - # 4 Ni atoms with coordination 12 - self.assertEqual(4*12, len(dfcc['dij'])) - # invalid element - self.assertRaises(ValueError, self.P.bond_length_types, 'Ni', 'Nix', 0.1, 5.0) - # check indices ij0 - allij0 = sum(dfcc['ij0'], tuple()) - self.assertEqual(0, min(allij0)) - self.assertEqual(3, max(allij0)) - # check indices ij1 - allij1 = sum(dfcc['ij1'], tuple()) - self.assertEqual(1, min(allij1)) - self.assertEqual(4, max(allij1)) - # check index values - ij0check = [(i1 - 1, j1 - 1) for i1, j1 in dfcc['ij1']] - self.assertEqual(ij0check, dfcc['ij0']) - # test valid element which is not present in the structure - dnone = self.P.bond_length_types('Ni', 'Au', 0.1, 5.0) - self.assertEqual(0, len(dnone['dij'])) - self.assertEqual(0, len(dnone['ddij'])) - self.assertEqual(0, len(dnone['ij0'])) - self.assertEqual(0, len(dnone['ij1'])) - return - - def test_blen(self): - """check PdfFit.blen() - """ - self.P.read_struct(datafile('PbScW25TiO3.stru')) - blen = self.P.blen - o = capture_output(blen, 1, 5).strip() - self.assertTrue(o.endswith('4.03635 A')) - self.assertTrue('PB (#1)' in o) - self.assertTrue('PB (#5)' in o) - self.assertRaises(ValueError, blen, 1, 99) - self.assertRaises(ValueError, blen, 0, 1) - o1 = capture_output(blen, 1, 1, 0.1, 1) - self.assertTrue('No pairs found' in o1) - o2 = capture_output(blen, 1, 50, 0.1, 1) - self.assertEqual('', o2) - o3 = capture_output(blen, 'Sc', 'O', 0.5, 2.3).strip() - self.assertEqual(1 + 48, len(o3.split('\n'))) - self.assertEqual(6, o3.count("SC (#33)")) - self.assertEqual(2, o3.count("O (#9)")) - self.assertRaises(TypeError, blen, "Sc", "O", 0.5) - return - -# def test_show_scat(self): -# """check PdfFit.show_scat() -# """ -# return -# -# def test_get_scat_string(self): -# """check PdfFit.get_scat_string() -# """ -# return - - def test_get_scat(self): - """check PdfFit.get_scat() - """ - # x-ray scattering factors - fPb = self.P.get_scat('X', 'Pb') - self.assertEqual(82.0, fPb) - fTi = self.P.get_scat('X', 'tI') - self.assertEqual(22.0, fTi) - # neutron scattering lengths - bPb = self.P.get_scat('N', 'PB') - self.assertAlmostEqual(9.401, bPb, 3) - bTi = self.P.get_scat('N', 'ti') - self.assertAlmostEqual(-3.370, bTi, 3) - # exceptions - self.assertRaises(ValueError, self.P.get_scat, 'N', 'zz') - self.assertRaises(ValueError, self.P.get_scat, 'Z', 'Ti') - return - - def test_set_scat(self): - """check PdfFit.set_scat() - """ - # raises exception when no phase exists - self.assertRaises(pdffit2.unassignedError, - self.P.set_scat, 'N', 'Ti', -11) - # check if it is local to phase - fPb = self.P.get_scat('X', 'Pb') - bPb = self.P.get_scat('N', 'Pb') - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.set_scat('X', 'Pb', 142) - self.assertEqual(142, self.P.get_scat('X', 'Pb')) - self.assertEqual(bPb, self.P.get_scat('N', 'Pb')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.assertEqual(fPb, self.P.get_scat('X', 'Pb')) - self.P.setphase(1) - self.assertEqual(142, self.P.get_scat('X', 'Pb')) - self.P.setphase(2) - self.assertEqual(fPb, self.P.get_scat('X', 'Pb')) - # check exception for invalid inputs - self.assertRaises(ValueError, self.P.set_scat, 'Z', 'C', 123) - self.assertRaises(ValueError, self.P.set_scat, 'X', 'ZZ', 123) - return - - def test_reset_scat(self): - """check PdfFit.reset_scat() - """ - # raises exception when no phase exists - self.assertRaises(pdffit2.unassignedError, self.P.reset_scat, 'Ti') - # check if it is local to phase - fPb = self.P.get_scat('X', 'Pb') - bPb = self.P.get_scat('N', 'Pb') - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.set_scat('X', 'Pb', 142) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.set_scat('N', 'Pb', -17) - self.P.setphase(1) - self.assertNotEqual(fPb, self.P.get_scat('X', 'Pb')) - self.P.reset_scat('Pb') - self.assertEqual(fPb, self.P.get_scat('X', 'Pb')) - self.P.setphase(2) - self.assertNotEqual(bPb, self.P.get_scat('N', 'Pb')) - self.P.reset_scat('Pb') - self.assertEqual(bPb, self.P.get_scat('N', 'Pb')) - # check exception for invalid inputs - self.assertRaises(ValueError, self.P.reset_scat, 'Zz') - return - - def test_num_atoms(self): - """check PdfFit.num_atoms() - """ - self.P.read_struct(datafile('Ni.stru')) - self.assertEqual(4, self.P.num_atoms()) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.assertEqual(56, self.P.num_atoms()) - self.P.setphase(1) - self.assertEqual(4, self.P.num_atoms()) - self.P.setphase(2) - self.assertEqual(56, self.P.num_atoms()) - return - - def test_lat(self): - """check PdfFit.lat() - """ - pf = self.P - pf.read_struct(datafile('Ni.stru')) - for i in ('a', 'b', 'c', 1, 2, 3): - self.assertEqual(3.52, pf.getvar(pf.lat(i))) - for i in ('alpha', 'beta', 'gamma', 4, 5, 6): - self.assertEqual(90, pf.getvar(pf.lat(i))) - return - - def test_xyz(self): - """check PdfFit.x() PdfFit.y(), PdfFit.z() - """ - pf = self.P - pf.read_struct(datafile('Ni.stru')) - self.assertEqual(0.5, pf.getvar(pf.x(3))) - self.assertEqual(0, pf.getvar(pf.y(3))) - self.assertEqual(0.5, pf.getvar(pf.z(3))) - return - - def test_uij(self): - """check PdfFit.uij() - """ - ni = loadStructure(datafile('Ni.stru')) - ni[2].anisotropy = True - ni[2].U11, ni[2].U22, ni[2].U33 = 1, 2, 3 - ni[2].U12, ni[2].U13, ni[2].U23 = 4, 5, 6 - pf = self.P - pf.add_structure(ni) - self.assertEqual(1, pf.getvar(pf.u11(3))) - self.assertEqual(2, pf.getvar(pf.u22(3))) - self.assertEqual(3, pf.getvar(pf.u33(3))) - self.assertEqual(4, pf.getvar(pf.u12(3))) - self.assertEqual(5, pf.getvar(pf.u13(3))) - self.assertEqual(6, pf.getvar(pf.u23(3))) - return - - def test_occ(self): - """check PdfFit.occ() - """ - pf = self.P - pf.read_struct(datafile('Ni.stru')) - for i in range(1, 5): - self.assertEqual(1, pf.getvar(pf.occ(i))) - return - -# def test_pscale(self): -# """check PdfFit.pscale() -# """ -# return -# -# def test_pscale(self): -# """check PdfFit.pscale() -# """ -# return -# -# def test_sratio(self): -# """check PdfFit.sratio() -# """ -# return -# -# def test_delta1(self): -# """check PdfFit.delta1() -# """ -# return -# -# def test_delta2(self): -# """check PdfFit.delta2() -# """ -# return -# -# def test_dscale(self): -# """check PdfFit.dscale() -# """ -# return -# -# def test_qdamp(self): -# """check PdfFit.qdamp() -# """ -# return -# -# def test_qbroad(self): -# """check PdfFit.qbroad() -# """ -# return -# -# def test_rcut(self): -# """check PdfFit.rcut() -# """ -# return -# -# def test___init__(self): -# """check PdfFit.__init__() -# """ -# return -# -# def test__PdfFit__getRef(self): -# """check PdfFit._PdfFit__getRef() -# """ -# return - -# End of class TestPdfFit - -if __name__ == '__main__': - unittest.main() - -# End of file diff --git a/diffpy/pdffit2/tests/TestPhaseFractions.py b/diffpy/pdffit2/tests/TestPhaseFractions.py deleted file mode 100644 index aa3b27e6..00000000 --- a/diffpy/pdffit2/tests/TestPhaseFractions.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python - -"""Unit tests for phase fraction calculations. -""" - - -import unittest - -from diffpy.pdffit2 import PdfFit -from diffpy.pdffit2.tests.pdffit2testutils import datafile - -############################################################################## -class TestPhaseFractions(unittest.TestCase): - - places = 4 - - def setUp(self): - self.P = PdfFit() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.alloc('N', 0.0, 0.05, 0.1, 10, 200) - return - - def tearDown(self): - del self.P - return - - def test_xray_fractions(self): - """test_xray_fractions -- check phase fractions in x-ray dataset. - """ - self.P.setdata(1) - ph = self.P.phase_fractions() - bb1 = 28**2 - bb2 = ((8*82 + 24*8 + 4*21 + 2*74 + 2*22) / 40.0)**2 - self.assertAlmostEqual(1.0, sum(ph['atom']), self.places) - self.assertAlmostEqual(1.0, sum(ph['cell']), self.places) - self.assertAlmostEqual(1.0, sum(ph['mass']), self.places) - self.assertAlmostEqual(bb2/bb1, - ph['atom'][0]/ph['atom'][1], self.places) - self.assertAlmostEqual(bb2/bb1 * 40.0/4.0, - ph['cell'][0]/ph['cell'][1], self.places) - mavg1 = 58.69 - mavg2 = (8*207.19 + 24*15.994 + 4*44.956 + 2*183.85 + 2*47.90)/40.0 - self.assertAlmostEqual(bb2/bb1 * mavg1/mavg2, - ph['mass'][0]/ph['mass'][1], self.places) - self.assertEqual(0.0, sum(ph['stdatom'])) - self.assertEqual(0.0, sum(ph['stdcell'])) - self.assertEqual(0.0, sum(ph['stdmass'])) - self.P.setphase(1) - self.P.setvar('pscale', 2.0) - ph2 = self.P.phase_fractions() - self.assertAlmostEqual(1.0, sum(ph2['atom']), self.places) - self.assertAlmostEqual(1.0, sum(ph2['cell']), self.places) - self.assertAlmostEqual(1.0, sum(ph2['mass']), self.places) - self.assertAlmostEqual(2.0, ph2['atom'][0]/ph2['atom'][1] / - (ph['atom'][0]/ph['atom'][1]), self.places) - self.assertAlmostEqual(2.0, ph2['cell'][0]/ph2['cell'][1] / - (ph['cell'][0]/ph['cell'][1]), self.places) - self.assertAlmostEqual(2.0, ph2['mass'][0]/ph2['mass'][1] / - (ph['mass'][0]/ph['mass'][1]), self.places) - return - - def test_neutron_fractions(self): - """test_neutron_fractions -- check phase fractions in neutron dataset. - """ - self.P.setdata(2) - ph = self.P.phase_fractions() - bb1 = 10.31**2 - bPb = 9.4012 - bO = 5.8054 - bSc = 12.11 - bW = 4.75518 - bTi = -3.37013 - bb2 = ((8*bPb + 24*bO + 4*bSc + 2*bW + 2*bTi) / 40.0)**2 - self.assertAlmostEqual(1.0, sum(ph['atom']), self.places) - self.assertAlmostEqual(1.0, sum(ph['cell']), self.places) - self.assertAlmostEqual(1.0, sum(ph['mass']), self.places) - self.assertAlmostEqual(bb2/bb1, - ph['atom'][0]/ph['atom'][1], self.places) - self.assertAlmostEqual(bb2/bb1 * 40.0/4.0, - ph['cell'][0]/ph['cell'][1], self.places) - mavg1 = 58.69 - mavg2 = (8*207.19 + 24*15.994 + 4*44.956 + 2*183.85 + 2*47.90)/40.0 - self.assertAlmostEqual(bb2/bb1 * mavg1/mavg2, - ph['mass'][0]/ph['mass'][1], self.places) - self.assertEqual(0.0, sum(ph['stdatom'])) - self.assertEqual(0.0, sum(ph['stdcell'])) - self.assertEqual(0.0, sum(ph['stdmass'])) - self.P.setphase(1) - self.P.setvar('pscale', 2.0) - ph2 = self.P.phase_fractions() - self.assertAlmostEqual(1.0, sum(ph2['atom']), self.places) - self.assertAlmostEqual(1.0, sum(ph2['cell']), self.places) - self.assertAlmostEqual(1.0, sum(ph2['mass']), self.places) - self.assertAlmostEqual(2.0, ph2['atom'][0]/ph2['atom'][1] / - (ph['atom'][0]/ph['atom'][1]), self.places) - self.assertAlmostEqual(2.0, ph2['cell'][0]/ph2['cell'][1] / - (ph['cell'][0]/ph['cell'][1]), self.places) - self.assertAlmostEqual(2.0, ph2['mass'][0]/ph2['mass'][1] / - (ph['mass'][0]/ph['mass'][1]), self.places) - return - -# End of class TestSphereEnvelope - -if __name__ == '__main__': - unittest.main() - -# End of file diff --git a/diffpy/pdffit2/tests/__init__.py b/diffpy/pdffit2/tests/__init__.py deleted file mode 100644 index 4a21417c..00000000 --- a/diffpy/pdffit2/tests/__init__.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy.pdffit2 by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2012 Trustees of the Columbia University -# in the City of New York. All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - -"""Unit tests for the diffpy.pdffit2 package. -""" - -import unittest - -def testsuite(pattern=''): - '''Create a unit tests suite for the diffpy.pdffit2 package. - - Parameters - ---------- - pattern : str, optional - Regular expression pattern for selecting test cases. - Select all tests when empty. Ignore the pattern when - any of unit test modules fails to import. - - Returns - ------- - suite : `unittest.TestSuite` - The TestSuite object containing the matching tests. - ''' - import re - from os.path import dirname - from itertools import chain - from pkg_resources import resource_filename - loader = unittest.defaultTestLoader - thisdir = resource_filename(__name__, '') - depth = __name__.count('.') + 1 - topdir = thisdir - for i in range(depth): - topdir = dirname(topdir) - suite_all = loader.discover(thisdir, pattern='*Test*.py', - top_level_dir=topdir) - # always filter the suite by pattern to test-cover the selection code. - suite = unittest.TestSuite() - rx = re.compile(pattern) - tsuites = list(chain.from_iterable(suite_all)) - tsok = all(isinstance(ts, unittest.TestSuite) for ts in tsuites) - if not tsok: # pragma: no cover - return suite_all - tcases = chain.from_iterable(tsuites) - for tc in tcases: - tcwords = tc.id().split('.') - shortname = '.'.join(tcwords[-3:]) - if rx.search(shortname): - suite.addTest(tc) - # verify all tests are found for an empty pattern. - assert pattern or suite_all.countTestCases() == suite.countTestCases() - return suite - - -def test(): - '''Execute all unit tests for the diffpy.pdffit2 package. - - Returns - ------- - result : `unittest.TestResult` - ''' - suite = testsuite() - runner = unittest.TextTestRunner() - result = runner.run(suite) - return result - - -def testdeps(): - '''Execute all unit tests for diffpy.pdffit2 and its dependencies. - - Returns - ------- - result : `unittest.TestResult` - ''' - from importlib import import_module - modulenames = ''' - diffpy.pdffit2.tests - diffpy.structure.tests - '''.split() - suite = unittest.TestSuite() - for mname in modulenames: - mod = import_module(mname) - suite.addTests(mod.testsuite()) - runner = unittest.TextTestRunner() - result = runner.run(suite) - return result - - -# End of file diff --git a/diffpy/pdffit2/tests/debug.py b/diffpy/pdffit2/tests/debug.py deleted file mode 100644 index be6e48e4..00000000 --- a/diffpy/pdffit2/tests/debug.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy.pdffit2 Complex Modeling Initiative -# (c) 2016 Brookhaven Science Associates, -# Brookhaven National Laboratory. -# All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - - -"""\ -Convenience module for debugging the unit tests using - -python -m diffpy.pdffit2.tests.debug - -Exceptions raised by failed tests or other errors are not caught. -""" - - -if __name__ == '__main__': - import sys - from diffpy.pdffit2.tests import testsuite - pattern = sys.argv[1] if len(sys.argv) > 1 else '' - suite = testsuite(pattern) - suite.debug() - - -# End of file diff --git a/diffpy/pdffit2/tests/pdffit2testutils.py b/diffpy/pdffit2/tests/pdffit2testutils.py deleted file mode 100644 index 18dabf11..00000000 --- a/diffpy/pdffit2/tests/pdffit2testutils.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy.srreal by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2010 Trustees of the Columbia University -# in the City of New York. All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - -"""Helper routines for running other unit tests. -Import of this module suppresses the chatty output from the C++ extension. -""" - - -import os.path -import six -import diffpy.pdffit2 - -# silence the C++ engine output -diffpy.pdffit2.redirect_stdout(open(os.path.devnull, 'w')) - -# path variables -thisfile = locals().get('__file__', 'file.py') -tests_dir = os.path.dirname(os.path.abspath(thisfile)) -testdata_dir = os.path.join(tests_dir, 'testdata') - -def datafile(filename): - """prepend testdata_dir to filename. - """ - return os.path.join(testdata_dir, filename) - - -def capture_output(f, *args, **kwargs): - """Capture output from pdffit2 engine produced in function call. - """ - savestdout = diffpy.pdffit2.output.stdout - fp = six.StringIO() - diffpy.pdffit2.redirect_stdout(fp) - try: - f(*args, **kwargs) - finally: - diffpy.pdffit2.redirect_stdout(savestdout) - return fp.getvalue() - -# End of file diff --git a/diffpy/pdffit2/tests/run.py b/diffpy/pdffit2/tests/run.py deleted file mode 100644 index 8519454c..00000000 --- a/diffpy/pdffit2/tests/run.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy.pdffit2 by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2012 Trustees of the Columbia University -# in the City of New York. All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - -"""Convenience module for executing all unit tests with - -python -m diffpy.pdffit2.tests.run -""" - - -if __name__ == '__main__': - import sys - # show warnings by default - if not sys.warnoptions: - import os, warnings - warnings.simplefilter("default") - # also affect subprocesses - os.environ["PYTHONWARNINGS"] = "default" - from diffpy.pdffit2.tests import test - # produce zero exit code for a successful test - sys.exit(not test().wasSuccessful()) - -# End of file diff --git a/diffpy/pdffit2/tests/rundeps.py b/diffpy/pdffit2/tests/rundeps.py deleted file mode 100644 index 9e3c5ee9..00000000 --- a/diffpy/pdffit2/tests/rundeps.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy.pdffit2 by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2012 Trustees of the Columbia University -# in the City of New York. All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - -"""Convenience module for executing unit tests for all pdffit2 dependencies - -python -m diffpy.pdffit2.tests.rundeps -""" - - -if __name__ == '__main__': - import sys - from diffpy.pdffit2.tests import testdeps - # produce zero exit code for a successful test - sys.exit(not testdeps().wasSuccessful()) - -# End of file diff --git a/diffpy/pdffit2/version.py b/diffpy/pdffit2/version.py deleted file mode 100644 index e77b09d0..00000000 --- a/diffpy/pdffit2/version.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# pdffit2 by DANSE Diffraction group -# Simon J. L. Billinge -# (c) 2008 trustees of the Michigan State University. -# All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## - -""" -Definition of __version__, __date__, __timestamp__, __git_commit__. - -Notes ------ -Variable `__gitsha__` is deprecated as of version 1.2. -Use `__git_commit__` instead. -""" - -__all__ = ['__date__', '__git_commit__', '__timestamp__', '__version__'] - -import os.path - -from pkg_resources import resource_filename - - -# obtain version information from the version.cfg file -cp = dict(version='', date='', commit='', timestamp='0') -fcfg = resource_filename(__name__, 'version.cfg') -if not os.path.isfile(fcfg): # pragma: no cover - from warnings import warn - warn('Package metadata not found, execute "./setup.py egg_info".') - fcfg = os.devnull -with open(fcfg) as fp: - kwords = [[w.strip() for w in line.split(' = ', 1)] - for line in fp if line[:1].isalpha() and ' = ' in line] -assert all(w[0] in cp for w in kwords), "received unrecognized keyword" -cp.update(kwords) - -__version__ = cp['version'] -__date__ = cp['date'] -__git_commit__ = cp['commit'] -__timestamp__ = int(cp['timestamp']) - -# TODO remove deprecated __gitsha__ in version 1.3. -__gitsha__ = __git_commit__ - -del cp, fcfg, fp, kwords - -# End of file diff --git a/doc/epydoc/Makefile b/doc/epydoc/Makefile deleted file mode 100644 index 756095f5..00000000 --- a/doc/epydoc/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -PKGNAME = diffpy.pdffit2 -OUTPUT = html -WEBDOCDIR = login.cacr.caltech.edu:/cacr/home/proj/danse/docs.danse.us/docroot/diffraction - - -all: - epydoc --config=epydoc.cfg --output=$(OUTPUT) \ - --name=$(PKGNAME) $(PKGNAME) - - -clean: - /bin/rm -rf $(OUTPUT) - - -publish: - rsync -e /usr/bin/ssh -va --chmod=a+rwx,o-w,Dg+s,Fa-x \ - $(OUTPUT)/ $(WEBDOCDIR)/$(PKGNAME) diff --git a/doc/epydoc/epydoc.cfg b/doc/epydoc/epydoc.cfg deleted file mode 100644 index dddbcd90..00000000 --- a/doc/epydoc/epydoc.cfg +++ /dev/null @@ -1,54 +0,0 @@ -[epydoc] - -# docformat -# The default markup language for docstrings, for modules that do -# not define __docformat__. Defaults to epytext. -docformat: plaintext - -# The type of output that should be generated. Should be one -# of: html, text, latex, dvi, ps, pdf. -output: html - -# An integer indicating how verbose epydoc should be. The default -# value is 0; negative values will supress warnings and errors; -# positive values will give more verbose output. -verbosity: 0 - -# A boolean value indicating that Epydoc should show a tracaback -# in case of unexpected error. By default don't show tracebacks -debug: 0 - -# If True, don't try to use colors or cursor control when doing -# textual output. The default False assumes a rich text prompt -simple-term: 1 - -# The format for showing inheritance objects. -# It should be one of: 'grouped', 'listed', 'included'. -inheritance: grouped - -# Whether or not to inclue private variables. (Even if included, -# private variables will be hidden by default.) -private: yes - -# Whether or not to list each module's imports. -imports: yes - -# Whether or not to include syntax highlighted source code in -# the output (HTML only). -sourcecode: yes - -# Whether or not to includea a page with Epydoc log, containing -# effective option at the time of generation and the reported logs. -include-log: no - -### Output options - -# The documented project's name. -#name: diffpy.FIXME - -# The CSS stylesheet for HTML output. Can be the name of a builtin -# stylesheet, or the name of a file. -css: white - -# The documented project's URL. -url: http://www.diffpy.org/ diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..ef016bb8 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,194 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build +BASENAME = $(subst .,,$(subst $() $(),,diffpy.pdffit2)) + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/$(BASENAME).qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/$(BASENAME).qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/$(BASENAME)" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/$(BASENAME)" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +# Manual publishing to the gh-pages branch + +GITREPOPATH = $(shell cd $(CURDIR) && git rev-parse --git-dir) +GITREMOTE = origin +GITREMOTEURL = $(shell git config --get remote.$(GITREMOTE).url) +GITLASTCOMMIT = $(shell git rev-parse --short HEAD) + +publish: + @test -d build/html || \ + ( echo >&2 "Run 'make html' first!"; false ) + git show-ref --verify --quiet refs/heads/gh-pages || \ + git branch --track gh-pages $(GITREMOTE)/gh-pages + test -d build/gh-pages || \ + git clone -s -b gh-pages $(GITREPOPATH) build/gh-pages + cd build/gh-pages && \ + git pull $(GITREMOTEURL) gh-pages + rsync -acv --delete --exclude=.git --exclude=.rsync-exclude \ + --exclude-from=build/gh-pages/.rsync-exclude \ + --link-dest=$(CURDIR)/build/html build/html/ build/gh-pages/ + cd build/gh-pages && \ + git add --all . && \ + git diff --cached --quiet || \ + git commit -m "Sync with the source at $(GITLASTCOMMIT)." + cd build/gh-pages && \ + git push origin gh-pages diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..ac53d5bd --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build +set SPHINXPROJ=PackagingScientificPython + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/docs/source/_static/.placeholder b/docs/source/_static/.placeholder new file mode 100644 index 00000000..e69de29b diff --git a/docs/source/api/diffpy.pdffit2.rst b/docs/source/api/diffpy.pdffit2.rst new file mode 100644 index 00000000..9bbc4637 --- /dev/null +++ b/docs/source/api/diffpy.pdffit2.rst @@ -0,0 +1,38 @@ +:tocdepth: -1 + +|title| +======= + +.. |title| replace:: diffpy.pdffit2 package + +.. automodule:: diffpy.pdffit2 + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +diffpy.pdffit2.output module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. automodule:: diffpy.pdffit2.output + :members: + :undoc-members: + :show-inheritance: + +diffpy.pdffit2.pdffit module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. automodule:: diffpy.pdffit2.pdffit + :members: + :undoc-members: + :show-inheritance: + +diffpy.pdffit2.ipy_ext module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. automodule:: diffpy.pdffit2.ipy_ext + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..9de6b62e --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# diffpy.pdffit2 documentation build configuration file, created by # noqa: E501 +# sphinx-quickstart on Thu Jan 30 15:49:41 2014. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import time +from importlib.metadata import version +from pathlib import Path + +# Attempt to import the version dynamically from GitHub tag. +try: + fullversion = version("diffpy.pdffit2") +except Exception: + fullversion = "No version found. The correct version will appear in the released version." # noqa: E501 + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use Path().resolve() to make it absolute, like shown here. # noqa: E501 +# sys.path.insert(0, str(Path(".").resolve())) +sys.path.insert(0, str(Path("../..").resolve())) +sys.path.insert(0, str(Path("../../src").resolve())) + +# abbreviations +ab_authors = ( + "Pavol Juhas, Chris Farrow, Simon Billinge, Billinge Group members" +) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.napoleon", + "sphinx.ext.todo", + "sphinx.ext.viewcode", + "sphinx.ext.intersphinx", + "sphinx_rtd_theme", + "sphinx_copybutton", + "m2r2", +] + +autodoc_mock_imports = [ + "diffpy.pdffit2.pdffit2", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = [".rst", ".md"] + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "diffpy.pdffit2" +copyright = "%Y, The Trustees of Columbia University in the City of New York" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. + +# The short X.Y version. +version = "".join(fullversion.split(".post")[:1]) +# The full version, including alpha/beta/rc tags. +release = fullversion + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +today = time.strftime("%B %d, %Y", time.localtime()) +year = today.split()[-1] +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' +# substitute YEAR in the copyright string +copyright = copyright.replace("%Y", year) + +# For sphinx_copybutton extension. +# Do not copy "$" for shell commands in code-blocks. +copybutton_prompt_text = r"^\$ " +copybutton_prompt_is_regexp = True + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ["build"] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# A list of ignored prefixes for module index sorting. +modindex_common_prefix = ["diffpy.pdffit2"] + +# Display all warnings for missing links. +nitpicky = True + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_rtd_theme" + +html_context = { + "display_github": True, + "github_user": "diffpy", + "github_repo": "diffpy.pdffit2", + "github_version": "main", + "conf_py_path": "/docs/source/", +} + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +html_theme_options = { + "navigation_with_keys": "true", +} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_domain_indices = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Output file base name for HTML help builder. +basename = "diffpy.pdffit2".replace(" ", "").replace(".", "") +htmlhelp_basename = basename + "doc" + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # 'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + "index", + "diffpy.pdffit2.tex", + "diffpy.pdffit2 Documentation", + ab_authors, + "manual", + ), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + "index", + "diffpy.pdffit2", + "diffpy.pdffit2 Documentation", + ab_authors, + 1, + ) +] + +# If true, show URL addresses after external links. +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + "index", + "diffpy.pdffit2", + "diffpy.pdffit2 Documentation", + ab_authors, + "diffpy.pdffit2", + "One line description of project.", + "Miscellaneous", + ), +] + +# Documents to append as an appendix to all manuals. +# texinfo_appendices = [] + +# If false, no module index is generated. +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# texinfo_no_detailmenu = False + + +# Example configuration for intersphinx: refer to the Python standard library. +# intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/docs/source/examples.rst b/docs/source/examples.rst new file mode 100644 index 00000000..7b1eb62b --- /dev/null +++ b/docs/source/examples.rst @@ -0,0 +1,185 @@ +.. _examples: + +Examples +######## + +Welcome! This guide offers several examples to help you effectively utilize this package. + +Files needed: + + 1. :download:`Ni-xray.gr ` - experimental X-ray PDF data + 2. :download:`Ni.stru ` - Ni f.c.c. structure in PDFfit format + +====================================== +Example 1: Calculate PDF of FCC nickel +====================================== + +The first example shows how to calculate the PDF for FCC nickel and save the resulting data +to a file and plot it using matplotlib. + +1. Import the ``PdfFit`` class from the ``diffpy.pdffit2`` module + +.. code-block:: python + + from diffpy.pdffit2 import PdfFit + +2. Create a PDF calculator object and assign it to the variable ``P``. +Make sure the ``Ni.stru`` file is in the same directory as the script (or specify +the relative path to where it resides) +and you are currently in this directory. Then use ``read_struct`` to read the structure +file, ``alloc`` to configure the PDF +calculation, and then use ``calc`` to carry out the the calculation. + +.. code-block:: python + + # create new PDF calculator object + P = PdfFit() + + # load structure file in PDFFIT or DISCUS format + P.read_struct("Ni.stru") + + radiation_type = "X" # x-rays + qmax = 30.0 # Q-cutoff used in PDF calculation in 1/A + qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay + rmin = 0.01 # minimum r-value + rmax = 30.0 # maximum r-value + npts = 3000 # number of points in the r-grid + + # allocate and configure PDF calculation + P.alloc(radiation_type, qmax, qdamp, rmin, rmax, npts) + P.calc() + +3. Save the calculated PDF. + +.. code-block:: python + + P.save_pdf(1, "Ni_calculation.cgr") + +4. We can also plot it using matplotlib + +.. code-block:: python + + import matplotlib.pyplot as plt + + # obtain list of r-points and corresponding G values + r = P.getR() + G = P.getpdf_fit() + + plt.plot(r, G) + plt.xlabel("r (Å)") + plt.ylabel("G (Å$^{-2}$)") + plt.title("x-ray PDF of nickel simulated at Qmax = %g" % qmax) + + # display plot window, this must be the last command in the script + plt.show() + +The scripts used in this example can be +downloaded :download:`here `. + +======================================= +Example 2: Performing simple refinement +======================================= + +The second example shows how to perform a simple refinement of the Ni structure to +the experimental x-ray PDF. The example uses the same data files as the first example. + +1. Import the PdfFit class from the diffpy.pdffit2 module + +.. code-block:: python + + from diffpy.pdffit2 import PdfFit + +2. Create a PDF calculator object and assign it to the variable ``pf``. +Load the experimental x-ray PDF data using ``read_data`` and also load +the nickel structure file. + +.. code-block:: python + + # Create new PDF calculator object. + pf = PdfFit() + + # Load experimental x-ray PDF data + qmax = 30.0 # Q-cutoff used in PDF calculation in 1/A + qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay + pf.read_data("Ni-xray.gr", "X", qmax, qdamp) + + # Load nickel structure, must be in PDFFIT or DISCUS format + pf.read_struct("Ni.stru") + +3. Configure the refinement, assigning structural parameters to variables. For more +information on how to do this correctly, please read the PDFgui documentation. +Set initial values for the variables using ``setpar``. +Finally, you can configure the range over which to refine (``pdfrange``) and +run the refinement (``refine``). + +.. code-block:: python + + # Refine lattice parameters a, b, c. + # Make them all equal to parameter @1. + pf.constrain(pf.lat(1), "@1") + pf.constrain(pf.lat(2), "@1") + pf.constrain(pf.lat(3), "@1") + # set initial value of parameter @1 + pf.setpar(1, pf.lat(1)) + + # Refine phase scale factor. Right side can have formulas. + pf.constrain("pscale", "@20 * 2") + pf.setpar(20, pf.getvar(pf.pscale) / 2.0) + + # Refine PDF damping due to instrument Q-resolution. + # Left side can be also passed as a reference to PdfFit object + pf.constrain(pf.qdamp, "@21") + pf.setpar(21, 0.03) + + # Refine sharpening factor for correlated motion of close atoms. + pf.constrain(pf.delta2, 22) + pf.setpar(22, 0.0003) + + # Set all temperature factors isotropic and equal to @4 + for idx in range(1, 5): + pf.constrain(pf.u11(idx), "@4") + pf.constrain(pf.u22(idx), "@4") + pf.constrain(pf.u33(idx), "@4") + pf.setpar(4, pf.u11(1)) + + # Refine all parameters + pf.pdfrange(1, 1.5, 19.99) + pf.refine() + +4. Save the refined result. ``save_struct`` saves the new, refined, structure to a +``.stru`` format file. ``save_res`` saves the outputs in a structured text file. + +.. code-block:: python + + pf.save_pdf(1, "Ni_refinement.fgr") + pf.save_struct(1, "Ni_refinement.rstr") + pf.save_res("Ni_refinement.res") + +5. We can also plot it using matplotlib + +.. code-block:: python + + import matplotlib.pyplot as plt + import numpy + + # obtain data from PdfFit calculator object + r = pf.getR() + Gobs = pf.getpdf_obs() + Gfit = pf.getpdf_fit() + + # calculate difference curve + Gdiff = numpy.array(Gobs) - numpy.array(Gfit) + Gdiff_baseline = -10 + + plt.plot(r, Gobs, "ko") + plt.plot(r, Gfit, "b-") + plt.plot(r, Gdiff + Gdiff_baseline, "r-") + + plt.xlabel("r (Å)") + plt.ylabel("G (Å$^{-2}$)") + plt.title("Fit of nickel to x-ray experimental PDF") + + # display plot window, this must be the last command in the script + plt.show() + +The scripts can be downloaded from :download:`here `. diff --git a/examples/Ni-xray.gr b/docs/source/examples/Ni-xray.gr similarity index 93% rename from examples/Ni-xray.gr rename to docs/source/examples/Ni-xray.gr index 14193844..76b7a94f 100644 --- a/examples/Ni-xray.gr +++ b/docs/source/examples/Ni-xray.gr @@ -26,7 +26,7 @@ sambkgfile= num_sambkgs=1 confile= num_cons=1 conbkgfile= num_conbkgs=1 det# used xcol detcol deterrcol xmin xmax add_det mul_det add_bkg mul_bkg add_con mul_con add_conbkg mul_conbkg - 0 1 0 1 3 0.00000 35.0000 0.00000 1.00000 0.00000 0.998691 0.00000 1.00000 0.00000 1.00000 + 0 1 0 1 3 0.00000 35.0000 0.00000 1.00000 0.00000 0.998691 0.00000 1.00000 0.00000 1.00000 ##### Experiment_Setup title=Ni at 300K with MAR345 Image Plate at 6-ID-DAPS Synchrotron @@ -128,2007 +128,2007 @@ gropttype=OptFq miscdatatype=AtomASF ##### start data #F Ni_2-8.chi.gr #D Tue Feb 8 11:46:14 2005 -#C +#C #S 1 G(r) -#D +#D #L r G(r) d_r d_Gr - 1.000000e-02 -7.734561e-02 -1.381170e-02 3.134926e-02 - 2.000000e-02 -1.596764e-01 -2.762339e-02 6.045792e-02 - 3.000000e-02 -2.516875e-01 -4.143509e-02 8.526468e-02 - 4.000000e-02 -3.575096e-01 -5.524679e-02 1.040541e-01 - 5.000000e-02 -4.804651e-01 -6.905849e-02 1.155991e-01 - 6.000000e-02 -6.228668e-01 -8.287018e-02 1.192732e-01 - 7.000000e-02 -7.858705e-01 -9.668188e-02 1.151330e-01 - 8.000000e-02 -9.693874e-01 -1.104936e-01 1.039918e-01 - 9.000000e-02 -1.172061e+00 -1.243053e-01 8.755577e-02 - 1.000000e-01 -1.391306e+00 -1.381170e-01 6.884717e-02 - 1.100000e-01 -1.623409e+00 -1.519287e-01 5.341991e-02 - 1.200000e-01 -1.863680e+00 -1.657404e-01 4.979434e-02 - 1.300000e-01 -2.106649e+00 -1.795521e-01 6.017895e-02 - 1.400000e-01 -2.346295e+00 -1.933638e-01 7.640497e-02 - 1.500000e-01 -2.576293e+00 -2.071755e-01 9.161881e-02 - 1.600000e-01 -2.790268e+00 -2.209872e-01 1.024655e-01 - 1.700000e-01 -2.982047e+00 -2.347989e-01 1.074539e-01 - 1.800000e-01 -3.145891e+00 -2.486105e-01 1.062389e-01 - 1.900000e-01 -3.276707e+00 -2.624222e-01 9.942805e-02 - 2.000000e-01 -3.370223e+00 -2.762339e-01 8.860376e-02 - 2.100000e-01 -3.423130e+00 -2.900456e-01 7.650761e-02 - 2.200000e-01 -3.433181e+00 -3.038573e-01 6.719764e-02 - 2.300000e-01 -3.399254e+00 -3.176690e-01 6.493149e-02 - 2.400000e-01 -3.321377e+00 -3.314807e-01 7.061632e-02 - 2.500000e-01 -3.200715e+00 -3.452924e-01 8.074527e-02 - 2.600000e-01 -3.039527e+00 -3.591041e-01 9.101665e-02 - 2.700000e-01 -2.841094e+00 -3.729158e-01 9.850821e-02 - 2.800000e-01 -2.609626e+00 -3.867275e-01 1.017102e-01 - 2.900000e-01 -2.350147e+00 -4.005392e-01 1.002266e-01 - 3.000000e-01 -2.068363e+00 -4.143509e-01 9.462396e-02 - 3.100000e-01 -1.770519e+00 -4.281626e-01 8.640470e-02 - 3.200000e-01 -1.463237e+00 -4.419743e-01 7.800773e-02 - 3.300000e-01 -1.153355e+00 -4.557860e-01 7.249483e-02 - 3.400000e-01 -8.477479e-01 -4.695977e-01 7.224522e-02 - 3.500000e-01 -5.531450e-01 -4.834094e-01 7.713224e-02 - 3.600000e-01 -2.759477e-01 -4.972211e-01 8.467203e-02 - 3.700000e-01 -2.204310e-02 -5.110328e-01 9.195493e-02 - 3.800000e-01 2.033757e-01 -5.248445e-01 9.686320e-02 - 3.900000e-01 3.959788e-01 -5.386562e-01 9.828977e-02 - 4.000000e-01 5.524508e-01 -5.524679e-01 9.606310e-02 - 4.100000e-01 6.706182e-01 -5.662796e-01 9.087598e-02 - 4.200000e-01 7.495432e-01 -5.800913e-01 8.423689e-02 - 4.300000e-01 7.895774e-01 -5.939030e-01 7.831796e-02 - 4.400000e-01 7.923692e-01 -6.077147e-01 7.538431e-02 - 4.500000e-01 7.608195e-01 -6.215264e-01 7.662821e-02 - 4.600000e-01 6.989824e-01 -6.353381e-01 8.131523e-02 - 4.700000e-01 6.119129e-01 -6.491498e-01 8.737928e-02 - 4.800000e-01 5.054623e-01 -6.629615e-01 9.267455e-02 - 4.900000e-01 3.860302e-01 -6.767732e-01 9.569092e-02 - 5.000000e-01 2.602819e-01 -6.905849e-01 9.573000e-02 - 5.100000e-01 1.348438e-01 -7.043966e-01 9.289354e-02 - 5.200000e-01 1.599279e-02 -7.182083e-01 8.803723e-02 - 5.300000e-01 -9.064421e-02 -7.320200e-01 8.267435e-02 - 5.400000e-01 -1.803637e-01 -7.458316e-01 7.868367e-02 - 5.500000e-01 -2.496148e-01 -7.596433e-01 7.762463e-02 - 5.600000e-01 -2.961697e-01 -7.734550e-01 7.986113e-02 - 5.700000e-01 -3.192238e-01 -7.872667e-01 8.433275e-02 - 5.800000e-01 -3.194177e-01 -8.010784e-01 8.926692e-02 - 5.900000e-01 -2.987769e-01 -8.148901e-01 9.303294e-02 - 6.000000e-01 -2.605717e-01 -8.287018e-01 9.458206e-02 - 6.100000e-01 -2.091040e-01 -8.425135e-01 9.356811e-02 - 6.200000e-01 -1.494329e-01 -8.563252e-01 9.034444e-02 - 6.300000e-01 -8.705466e-02 -8.701369e-01 8.590452e-02 - 6.400000e-01 -2.755745e-02 -8.839486e-01 8.171553e-02 - 6.500000e-01 2.372868e-02 -8.977603e-01 7.931299e-02 - 6.600000e-01 6.206366e-02 -9.115720e-01 7.962749e-02 - 6.700000e-01 8.359014e-02 -9.253837e-01 8.244920e-02 - 6.800000e-01 8.556789e-02 -9.391954e-01 8.658046e-02 - 6.900000e-01 6.653458e-02 -9.530071e-01 9.051104e-02 - 7.000000e-01 2.638255e-02 -9.668188e-01 9.300732e-02 - 7.100000e-01 -3.365350e-02 -9.806305e-01 9.339048e-02 - 7.200000e-01 -1.110967e-01 -9.944422e-01 9.161189e-02 - 7.300000e-01 -2.024086e-01 -1.008254e+00 8.823550e-02 - 7.400000e-01 -3.032383e-01 -1.022066e+00 8.434109e-02 - 7.500000e-01 -4.087215e-01 -1.035877e+00 8.127899e-02 - 7.600000e-01 -5.138097e-01 -1.049689e+00 8.019975e-02 - 7.700000e-01 -6.136058e-01 -1.063501e+00 8.149425e-02 - 7.800000e-01 -7.036833e-01 -1.077312e+00 8.457797e-02 - 7.900000e-01 -7.803670e-01 -1.091124e+00 8.824255e-02 - 8.000000e-01 -8.409562e-01 -1.104936e+00 9.123004e-02 - 8.100000e-01 -8.838756e-01 -1.118747e+00 9.263856e-02 - 8.200000e-01 -9.087437e-01 -1.132559e+00 9.209884e-02 - 8.300000e-01 -9.163567e-01 -1.146371e+00 8.981209e-02 - 8.400000e-01 -9.085893e-01 -1.160183e+00 8.650416e-02 - 8.500000e-01 -8.882216e-01 -1.173994e+00 8.327654e-02 - 8.600000e-01 -8.587063e-01 -1.187806e+00 8.129051e-02 - 8.700000e-01 -8.238944e-01 -1.201618e+00 8.129498e-02 - 8.800000e-01 -7.877398e-01 -1.215429e+00 8.324441e-02 - 8.900000e-01 -7.540061e-01 -1.229241e+00 8.633665e-02 - 9.000000e-01 -7.259969e-01 -1.243053e+00 8.943578e-02 - 9.100000e-01 -7.063286e-01 -1.256864e+00 9.152907e-02 - 9.200000e-01 -6.967632e-01 -1.270676e+00 9.200378e-02 - 9.300000e-01 -6.981108e-01 -1.284488e+00 9.075509e-02 - 9.400000e-01 -7.102095e-01 -1.298300e+00 8.818933e-02 - 9.500000e-01 -7.319798e-01 -1.312111e+00 8.513983e-02 - 9.600000e-01 -7.615502e-01 -1.325923e+00 8.266016e-02 - 9.700000e-01 -7.964408e-01 -1.339735e+00 8.166394e-02 - 9.800000e-01 -8.337897e-01 -1.353546e+00 8.251468e-02 - 9.900000e-01 -8.706036e-01 -1.367358e+00 8.484194e-02 - 1.000000e-00 -9.040117e-01 -1.381170e+00 8.774748e-02 - 1.010000e+00 -9.315033e-01 -1.394981e+00 9.021996e-02 - 1.020000e+00 -9.511296e-01 -1.408793e+00 9.148261e-02 - 1.030000e+00 -9.616553e-01 -1.422605e+00 9.117828e-02 - 1.040000e+00 -9.626475e-01 -1.436417e+00 8.942710e-02 - 1.050000e+00 -9.544971e-01 -1.450228e+00 8.679399e-02 - 1.060000e+00 -9.383712e-01 -1.464040e+00 8.415952e-02 - 1.070000e+00 -9.161027e-01 -1.477852e+00 8.246149e-02 - 1.080000e+00 -8.900263e-01 -1.491663e+00 8.233013e-02 - 1.090000e+00 -8.627749e-01 -1.505475e+00 8.378993e-02 - 1.100000e+00 -8.370557e-01 -1.519287e+00 8.625490e-02 - 1.110000e+00 -8.154227e-01 -1.533098e+00 8.882170e-02 - 1.120000e+00 -8.000647e-01 -1.546910e+00 9.063428e-02 - 1.130000e+00 -7.926282e-01 -1.560722e+00 9.113887e-02 - 1.140000e+00 -7.940862e-01 -1.574533e+00 9.020245e-02 - 1.150000e+00 -8.046667e-01 -1.588345e+00 8.812929e-02 - 1.160000e+00 -8.238427e-01 -1.602157e+00 8.559113e-02 - 1.170000e+00 -8.503875e-01 -1.615969e+00 8.345275e-02 - 1.180000e+00 -8.824866e-01 -1.629780e+00 8.248185e-02 - 1.190000e+00 -9.178991e-01 -1.643592e+00 8.302436e-02 - 1.200000e+00 -9.541530e-01 -1.657404e+00 8.484068e-02 - 1.210000e+00 -9.887581e-01 -1.671215e+00 8.723378e-02 - 1.220000e+00 -1.019420e+00 -1.685027e+00 8.936506e-02 - 1.230000e+00 -1.044233e+00 -1.698839e+00 9.055378e-02 - 1.240000e+00 -1.061845e+00 -1.712650e+00 9.045794e-02 - 1.250000e+00 -1.071566e+00 -1.726462e+00 8.914106e-02 - 1.260000e+00 -1.073431e+00 -1.740274e+00 8.704942e-02 - 1.270000e+00 -1.068188e+00 -1.754086e+00 8.489959e-02 - 1.280000e+00 -1.057242e+00 -1.767897e+00 8.346229e-02 - 1.290000e+00 -1.042527e+00 -1.781709e+00 8.327095e-02 - 1.300000e+00 -1.026351e+00 -1.795521e+00 8.438368e-02 - 1.310000e+00 -1.011191e+00 -1.809332e+00 8.636090e-02 - 1.320000e+00 -9.994919e-01 -1.823144e+00 8.847613e-02 - 1.330000e+00 -9.934586e-01 -1.836956e+00 9.000844e-02 - 1.340000e+00 -9.948682e-01 -1.850767e+00 9.047021e-02 - 1.350000e+00 -1.004922e+00 -1.864579e+00 8.972635e-02 - 1.360000e+00 -1.024143e+00 -1.878391e+00 8.801881e-02 - 1.370000e+00 -1.052329e+00 -1.892203e+00 8.590676e-02 - 1.380000e+00 -1.088569e+00 -1.906014e+00 8.411382e-02 - 1.390000e+00 -1.131312e+00 -1.919826e+00 8.328369e-02 - 1.400000e+00 -1.178493e+00 -1.933638e+00 8.371558e-02 - 1.410000e+00 -1.227697e+00 -1.947449e+00 8.522786e-02 - 1.420000e+00 -1.276352e+00 -1.961261e+00 8.724927e-02 - 1.430000e+00 -1.321931e+00 -1.975073e+00 8.906920e-02 - 1.440000e+00 -1.362151e+00 -1.988884e+00 9.009276e-02 - 1.450000e+00 -1.395148e+00 -2.002696e+00 9.000846e-02 - 1.460000e+00 -1.419612e+00 -2.016508e+00 8.885776e-02 - 1.470000e+00 -1.434881e+00 -2.030319e+00 8.702023e-02 - 1.480000e+00 -1.440976e+00 -2.044131e+00 8.511516e-02 - 1.490000e+00 -1.438578e+00 -2.057943e+00 8.381334e-02 - 1.500000e+00 -1.428952e+00 -2.071755e+00 8.358812e-02 - 1.510000e+00 -1.413823e+00 -2.085566e+00 8.451113e-02 - 1.520000e+00 -1.395219e+00 -2.099378e+00 8.622309e-02 - 1.530000e+00 -1.375288e+00 -2.113190e+00 8.810063e-02 - 1.540000e+00 -1.356109e+00 -2.127001e+00 8.950526e-02 - 1.550000e+00 -1.339521e+00 -2.140813e+00 8.998983e-02 - 1.560000e+00 -1.326967e+00 -2.154625e+00 8.941412e-02 - 1.570000e+00 -1.319389e+00 -2.168436e+00 8.797326e-02 - 1.580000e+00 -1.317160e+00 -2.182248e+00 8.614643e-02 - 1.590000e+00 -1.320081e+00 -2.196060e+00 8.456224e-02 - 1.600000e+00 -1.327421e+00 -2.209872e+00 8.378773e-02 - 1.610000e+00 -1.338016e+00 -2.223683e+00 8.410190e-02 - 1.620000e+00 -1.350401e+00 -2.237495e+00 8.537324e-02 - 1.630000e+00 -1.362974e+00 -2.251307e+00 8.712414e-02 - 1.640000e+00 -1.374170e+00 -2.265118e+00 8.873653e-02 - 1.650000e+00 -1.382635e+00 -2.278930e+00 8.967598e-02 - 1.660000e+00 -1.387368e+00 -2.292742e+00 8.964903e-02 - 1.670000e+00 -1.387843e+00 -2.306553e+00 8.867411e-02 - 1.680000e+00 -1.384077e+00 -2.320365e+00 8.707293e-02 - 1.690000e+00 -1.376637e+00 -2.334177e+00 8.538419e-02 - 1.700000e+00 -1.366606e+00 -2.347989e+00 8.419842e-02 - 1.710000e+00 -1.355480e+00 -2.361800e+00 8.394229e-02 - 1.720000e+00 -1.345031e+00 -2.375612e+00 8.470005e-02 - 1.730000e+00 -1.337123e+00 -2.389424e+00 8.617890e-02 - 1.740000e+00 -1.333527e+00 -2.403235e+00 8.784186e-02 - 1.750000e+00 -1.335716e+00 -2.417047e+00 8.912123e-02 - 1.760000e+00 -1.344696e+00 -2.430859e+00 8.960623e-02 - 1.770000e+00 -1.360861e+00 -2.444670e+00 8.915473e-02 - 1.780000e+00 -1.383901e+00 -2.458482e+00 8.792463e-02 - 1.790000e+00 -1.412776e+00 -2.472294e+00 8.633026e-02 - 1.800000e+00 -1.445754e+00 -2.486105e+00 8.492298e-02 - 1.810000e+00 -1.480514e+00 -2.499917e+00 8.420620e-02 - 1.820000e+00 -1.514312e+00 -2.513729e+00 8.443860e-02 - 1.830000e+00 -1.544202e+00 -2.527541e+00 8.552365e-02 - 1.840000e+00 -1.567278e+00 -2.541352e+00 8.705601e-02 - 1.850000e+00 -1.580939e+00 -2.555164e+00 8.849338e-02 - 1.860000e+00 -1.583140e+00 -2.568976e+00 8.935436e-02 - 1.870000e+00 -1.572609e+00 -2.582787e+00 8.936496e-02 - 1.880000e+00 -1.549013e+00 -2.596599e+00 8.852906e-02 - 1.890000e+00 -1.513057e+00 -2.610411e+00 8.712423e-02 - 1.900000e+00 -1.466490e+00 -2.624222e+00 8.562504e-02 - 1.910000e+00 -1.412034e+00 -2.638034e+00 8.455578e-02 - 1.920000e+00 -1.353220e+00 -2.651846e+00 8.430059e-02 - 1.930000e+00 -1.294150e+00 -2.665658e+00 8.494598e-02 - 1.940000e+00 -1.239192e+00 -2.679469e+00 8.624521e-02 - 1.950000e+00 -1.192639e+00 -2.693281e+00 8.772760e-02 - 1.960000e+00 -1.158358e+00 -2.707093e+00 8.888395e-02 - 1.970000e+00 -1.139441e+00 -2.720904e+00 8.933725e-02 - 1.980000e+00 -1.137915e+00 -2.734716e+00 8.894918e-02 - 1.990000e+00 -1.154511e+00 -2.748528e+00 8.785320e-02 - 2.000000e+00 -1.188531e+00 -2.762339e+00 8.641699e-02 - 2.010000e+00 -1.237823e+00 -2.776151e+00 8.513478e-02 - 2.020000e+00 -1.298870e+00 -2.789963e+00 8.446166e-02 - 2.030000e+00 -1.366998e+00 -2.803775e+00 8.463800e-02 - 2.040000e+00 -1.436686e+00 -2.817586e+00 8.558855e-02 - 2.050000e+00 -1.501962e+00 -2.831398e+00 8.695755e-02 - 2.060000e+00 -1.556856e+00 -2.845210e+00 8.825708e-02 - 2.070000e+00 -1.595879e+00 -2.859021e+00 8.904528e-02 - 2.080000e+00 -1.614491e+00 -2.872833e+00 8.906364e-02 - 2.090000e+00 -1.609514e+00 -2.886645e+00 8.830655e-02 - 2.100000e+00 -1.579460e+00 -2.900456e+00 8.702107e-02 - 2.110000e+00 -1.524741e+00 -2.914268e+00 8.563829e-02 - 2.120000e+00 -1.447736e+00 -2.928080e+00 8.463963e-02 - 2.130000e+00 -1.352693e+00 -2.941891e+00 8.438444e-02 - 2.140000e+00 -1.245484e+00 -2.955703e+00 8.496517e-02 - 2.150000e+00 -1.133191e+00 -2.969515e+00 8.616936e-02 - 2.160000e+00 -1.023574e+00 -2.983327e+00 8.757206e-02 - 2.170000e+00 -9.244251e-01 -2.997138e+00 8.870195e-02 - 2.180000e+00 -8.428719e-01 -3.010950e+00 8.920000e-02 - 2.190000e+00 -7.846657e-01 -3.024762e+00 8.892219e-02 - 2.200000e+00 -7.535071e-01 -3.038573e+00 8.797447e-02 - 2.210000e+00 -7.504647e-01 -3.052385e+00 8.668116e-02 - 2.220000e+00 -7.735306e-01 -3.066197e+00 8.548894e-02 - 2.230000e+00 -8.173576e-01 -3.080008e+00 8.481846e-02 - 2.240000e+00 -8.732071e-01 -3.093820e+00 8.490579e-02 - 2.250000e+00 -9.291271e-01 -3.107632e+00 8.570642e-02 - 2.260000e+00 -9.703641e-01 -3.121444e+00 8.691730e-02 - 2.270000e+00 -9.799987e-01 -3.135255e+00 8.810312e-02 - 2.280000e+00 -9.397761e-01 -3.149067e+00 8.885701e-02 - 2.290000e+00 -8.310933e-01 -3.162879e+00 8.893019e-02 - 2.300000e+00 -6.360900e-01 -3.176690e+00 8.830113e-02 - 2.310000e+00 -3.387799e-01 -3.190502e+00 8.717917e-02 - 2.320000e+00 7.384109e-02 -3.204314e+00 8.594395e-02 - 2.330000e+00 6.107803e-01 -3.218125e+00 8.502589e-02 - 2.340000e+00 1.276191e+00 -3.231937e+00 8.475268e-02 - 2.350000e+00 2.068731e+00 -3.245749e+00 8.521931e-02 - 2.360000e+00 2.981181e+00 -3.259561e+00 8.624936e-02 - 2.370000e+00 4.000357e+00 -3.273372e+00 8.747046e-02 - 2.380000e+00 5.107337e+00 -3.287184e+00 8.845949e-02 - 2.390000e+00 6.277992e+00 -3.300996e+00 8.888735e-02 - 2.400000e+00 7.483803e+00 -3.314807e+00 8.861696e-02 - 2.410000e+00 8.692939e+00 -3.328619e+00 8.773945e-02 - 2.420000e+00 9.871525e+00 -3.342431e+00 8.654753e-02 - 2.430000e+00 1.098505e+01 -3.356242e+00 8.544831e-02 - 2.440000e+00 1.199985e+01 -3.370054e+00 8.482790e-02 - 2.450000e+00 1.288455e+01 -3.383866e+00 8.490680e-02 - 2.460000e+00 1.361146e+01 -3.397678e+00 8.565094e-02 - 2.470000e+00 1.415774e+01 -3.411489e+00 8.678792e-02 - 2.480000e+00 1.450644e+01 -3.425301e+00 8.791879e-02 - 2.490000e+00 1.464718e+01 -3.439113e+00 8.866444e-02 - 2.500000e+00 1.457658e+01 -3.452924e+00 8.878714e-02 - 2.510000e+00 1.429830e+01 -3.466736e+00 8.825730e-02 - 2.520000e+00 1.382281e+01 -3.480548e+00 8.725920e-02 - 2.530000e+00 1.316686e+01 -3.494359e+00 8.613645e-02 - 2.540000e+00 1.235258e+01 -3.508171e+00 8.528323e-02 - 2.550000e+00 1.140650e+01 -3.521983e+00 8.500491e-02 - 2.560000e+00 1.035826e+01 -3.535794e+00 8.539895e-02 - 2.570000e+00 9.239323e+00 -3.549606e+00 8.631613e-02 - 2.580000e+00 8.081607e+00 -3.563418e+00 8.742391e-02 - 2.590000e+00 6.916163e+00 -3.577230e+00 8.833600e-02 - 2.600000e+00 5.771973e+00 -3.591041e+00 8.874584e-02 - 2.610000e+00 4.674897e+00 -3.604853e+00 8.852008e-02 - 2.620000e+00 3.646830e+00 -3.618665e+00 8.773500e-02 - 2.630000e+00 2.705100e+00 -3.632476e+00 8.665363e-02 - 2.640000e+00 1.862122e+00 -3.646288e+00 8.564608e-02 - 2.650000e+00 1.125307e+00 -3.660100e+00 8.506583e-02 - 2.660000e+00 4.972252e-01 -3.673911e+00 8.511794e-02 - 2.670000e+00 -2.400927e-02 -3.687723e+00 8.577693e-02 - 2.680000e+00 -4.441723e-01 -3.701535e+00 8.679855e-02 - 2.690000e+00 -7.722150e-01 -3.715347e+00 8.781860e-02 - 2.700000e+00 -1.019459e+00 -3.729158e+00 8.848654e-02 - 2.710000e+00 -1.198748e+00 -3.742970e+00 8.857941e-02 - 2.720000e+00 -1.323610e+00 -3.756782e+00 8.806668e-02 - 2.730000e+00 -1.407472e+00 -3.770593e+00 8.711793e-02 - 2.740000e+00 -1.462967e+00 -3.784405e+00 8.605324e-02 - 2.750000e+00 -1.501372e+00 -3.798217e+00 8.524228e-02 - 2.760000e+00 -1.532185e+00 -3.812028e+00 8.497442e-02 - 2.770000e+00 -1.562860e+00 -3.825840e+00 8.534686e-02 - 2.780000e+00 -1.598702e+00 -3.839652e+00 8.622582e-02 - 2.790000e+00 -1.642903e+00 -3.853464e+00 8.730239e-02 - 2.800000e+00 -1.696711e+00 -3.867275e+00 8.821161e-02 - 2.810000e+00 -1.759700e+00 -3.881087e+00 8.865812e-02 - 2.820000e+00 -1.830120e+00 -3.894899e+00 8.850613e-02 - 2.830000e+00 -1.905285e+00 -3.908710e+00 8.781616e-02 - 2.840000e+00 -1.981979e+00 -3.922522e+00 8.682582e-02 - 2.850000e+00 -2.056843e+00 -3.936334e+00 8.587719e-02 - 2.860000e+00 -2.126718e+00 -3.950145e+00 8.530316e-02 - 2.870000e+00 -2.188935e+00 -3.963957e+00 8.530532e-02 - 2.880000e+00 -2.241518e+00 -3.977769e+00 8.587504e-02 - 2.890000e+00 -2.283314e+00 -3.991580e+00 8.679888e-02 - 2.900000e+00 -2.314031e+00 -4.005392e+00 8.774513e-02 - 2.910000e+00 -2.334204e+00 -4.019204e+00 8.838627e-02 - 2.920000e+00 -2.345096e+00 -4.033016e+00 8.850696e-02 - 2.930000e+00 -2.348533e+00 -4.046827e+00 8.806776e-02 - 2.940000e+00 -2.346723e+00 -4.060639e+00 8.721507e-02 - 2.950000e+00 -2.342043e+00 -4.074451e+00 8.623706e-02 - 2.960000e+00 -2.336835e+00 -4.088262e+00 8.547181e-02 - 2.970000e+00 -2.333219e+00 -4.102074e+00 8.518872e-02 - 2.980000e+00 -2.332935e+00 -4.115886e+00 8.548554e-02 - 2.990000e+00 -2.337236e+00 -4.129697e+00 8.624986e-02 - 3.000000e+00 -2.346817e+00 -4.143509e+00 8.720597e-02 - 3.010000e+00 -2.361806e+00 -4.157321e+00 8.802122e-02 - 3.020000e+00 -2.381792e+00 -4.171133e+00 8.842215e-02 - 3.030000e+00 -2.405909e+00 -4.184944e+00 8.828001e-02 - 3.040000e+00 -2.432939e+00 -4.198756e+00 8.764730e-02 - 3.050000e+00 -2.461444e+00 -4.212568e+00 8.674126e-02 - 3.060000e+00 -2.489911e+00 -4.226379e+00 8.587672e-02 - 3.070000e+00 -2.516886e+00 -4.240191e+00 8.536071e-02 - 3.080000e+00 -2.541103e+00 -4.254003e+00 8.537964e-02 - 3.090000e+00 -2.561584e+00 -4.267814e+00 8.592621e-02 - 3.100000e+00 -2.577712e+00 -4.281626e+00 8.680329e-02 - 3.110000e+00 -2.589266e+00 -4.295438e+00 8.770250e-02 - 3.120000e+00 -2.596420e+00 -4.309250e+00 8.831725e-02 - 3.130000e+00 -2.599709e+00 -4.323061e+00 8.844402e-02 - 3.140000e+00 -2.599957e+00 -4.336873e+00 8.804325e-02 - 3.150000e+00 -2.598188e+00 -4.350685e+00 8.724975e-02 - 3.160000e+00 -2.595516e+00 -4.364496e+00 8.633174e-02 - 3.170000e+00 -2.593021e+00 -4.378308e+00 8.560513e-02 - 3.180000e+00 -2.591636e+00 -4.392120e+00 8.532290e-02 - 3.190000e+00 -2.592035e+00 -4.405931e+00 8.557901e-02 - 3.200000e+00 -2.594543e+00 -4.419743e+00 8.627157e-02 - 3.210000e+00 -2.599066e+00 -4.433555e+00 8.714478e-02 - 3.220000e+00 -2.605049e+00 -4.447366e+00 8.788730e-02 - 3.230000e+00 -2.611468e+00 -4.461178e+00 8.824143e-02 - 3.240000e+00 -2.616842e+00 -4.474990e+00 8.808516e-02 - 3.250000e+00 -2.619286e+00 -4.488802e+00 8.746838e-02 - 3.260000e+00 -2.616581e+00 -4.502613e+00 8.659820e-02 - 3.270000e+00 -2.606259e+00 -4.516425e+00 8.577550e-02 - 3.280000e+00 -2.585719e+00 -4.530237e+00 8.529449e-02 - 3.290000e+00 -2.552333e+00 -4.544048e+00 8.533489e-02 - 3.300000e+00 -2.503569e+00 -4.557860e+00 8.589126e-02 - 3.310000e+00 -2.437100e+00 -4.571672e+00 8.677526e-02 - 3.320000e+00 -2.350917e+00 -4.585483e+00 8.768926e-02 - 3.330000e+00 -2.243420e+00 -4.599295e+00 8.833407e-02 - 3.340000e+00 -2.113503e+00 -4.613107e+00 8.850678e-02 - 3.350000e+00 -1.960618e+00 -4.626919e+00 8.816083e-02 - 3.360000e+00 -1.784825e+00 -4.640730e+00 8.741788e-02 - 3.370000e+00 -1.586825e+00 -4.654542e+00 8.653083e-02 - 3.380000e+00 -1.367979e+00 -4.668354e+00 8.580368e-02 - 3.390000e+00 -1.130302e+00 -4.682165e+00 8.548686e-02 - 3.400000e+00 -8.764571e-01 -4.695977e+00 8.568406e-02 - 3.410000e+00 -6.097196e-01 -4.709789e+00 8.631281e-02 - 3.420000e+00 -3.339377e-01 -4.723600e+00 8.713910e-02 - 3.430000e+00 -5.347346e-02 -4.737412e+00 8.786787e-02 - 3.440000e+00 2.268704e-01 -4.751224e+00 8.824708e-02 - 3.450000e+00 5.019383e-01 -4.765036e+00 8.814830e-02 - 3.460000e+00 7.663258e-01 -4.778847e+00 8.760434e-02 - 3.470000e+00 1.014500e+00 -4.792659e+00 8.679847e-02 - 3.480000e+00 1.240932e+00 -4.806471e+00 8.600717e-02 - 3.490000e+00 1.440250e+00 -4.820282e+00 8.550784e-02 - 3.500000e+00 1.607392e+00 -4.834094e+00 8.547816e-02 - 3.510000e+00 1.737778e+00 -4.847906e+00 8.592753e-02 - 3.520000e+00 1.827471e+00 -4.861717e+00 8.669413e-02 - 3.530000e+00 1.873343e+00 -4.875529e+00 8.750884e-02 - 3.540000e+00 1.873221e+00 -4.889341e+00 8.809407e-02 - 3.550000e+00 1.826015e+00 -4.903152e+00 8.825661e-02 - 3.560000e+00 1.731819e+00 -4.916964e+00 8.794676e-02 - 3.570000e+00 1.591965e+00 -4.930776e+00 8.727197e-02 - 3.580000e+00 1.409047e+00 -4.944588e+00 8.646361e-02 - 3.590000e+00 1.186882e+00 -4.958399e+00 8.580261e-02 - 3.600000e+00 9.304277e-01 -4.972211e+00 8.552186e-02 - 3.610000e+00 6.456414e-01 -4.986023e+00 8.571906e-02 - 3.620000e+00 3.392945e-01 -4.999834e+00 8.631881e-02 - 3.630000e+00 1.873856e-02 -5.013646e+00 8.710326e-02 - 3.640000e+00 -3.083619e-01 -5.027458e+00 8.779520e-02 - 3.650000e+00 -6.343206e-01 -5.041269e+00 8.815575e-02 - 3.660000e+00 -9.517301e-01 -5.055081e+00 8.806124e-02 - 3.670000e+00 -1.253756e+00 -5.068893e+00 8.754045e-02 - 3.680000e+00 -1.534413e+00 -5.082705e+00 8.676573e-02 - 3.690000e+00 -1.788795e+00 -5.096516e+00 8.599990e-02 - 3.700000e+00 -2.013266e+00 -5.110328e+00 8.550922e-02 - 3.710000e+00 -2.205580e+00 -5.124140e+00 8.546775e-02 - 3.720000e+00 -2.364928e+00 -5.137951e+00 8.589091e-02 - 3.730000e+00 -2.491921e+00 -5.151763e+00 8.663012e-02 - 3.740000e+00 -2.588479e+00 -5.165575e+00 8.743106e-02 - 3.750000e+00 -2.657671e+00 -5.179386e+00 8.802674e-02 - 3.760000e+00 -2.703479e+00 -5.193198e+00 8.822663e-02 - 3.770000e+00 -2.730520e+00 -5.207010e+00 8.797479e-02 - 3.780000e+00 -2.743737e+00 -5.220822e+00 8.736478e-02 - 3.790000e+00 -2.748083e+00 -5.234633e+00 8.660995e-02 - 3.800000e+00 -2.748209e+00 -5.248445e+00 8.597450e-02 - 3.810000e+00 -2.748188e+00 -5.262257e+00 8.568213e-02 - 3.820000e+00 -2.751276e+00 -5.276068e+00 8.583325e-02 - 3.830000e+00 -2.759752e+00 -5.289880e+00 8.636683e-02 - 3.840000e+00 -2.774817e+00 -5.303692e+00 8.708555e-02 - 3.850000e+00 -2.796588e+00 -5.317503e+00 8.773157e-02 - 3.860000e+00 -2.824158e+00 -5.331315e+00 8.807818e-02 - 3.870000e+00 -2.855748e+00 -5.345127e+00 8.800391e-02 - 3.880000e+00 -2.888908e+00 -5.358939e+00 8.752973e-02 - 3.890000e+00 -2.920779e+00 -5.372750e+00 8.681247e-02 - 3.900000e+00 -2.948371e+00 -5.386562e+00 8.609591e-02 - 3.910000e+00 -2.968861e+00 -5.400374e+00 8.562970e-02 - 3.920000e+00 -2.979857e+00 -5.414185e+00 8.557964e-02 - 3.930000e+00 -2.979632e+00 -5.427997e+00 8.596450e-02 - 3.940000e+00 -2.967290e+00 -5.441809e+00 8.664908e-02 - 3.950000e+00 -2.942857e+00 -5.455620e+00 8.739672e-02 - 3.960000e+00 -2.907272e+00 -5.469432e+00 8.795581e-02 - 3.970000e+00 -2.862300e+00 -5.483244e+00 8.814437e-02 - 3.980000e+00 -2.810334e+00 -5.497055e+00 8.790624e-02 - 3.990000e+00 -2.754132e+00 -5.510867e+00 8.732687e-02 - 4.000000e+00 -2.696475e+00 -5.524679e+00 8.660621e-02 - 4.010000e+00 -2.639789e+00 -5.538491e+00 8.599417e-02 - 4.020000e+00 -2.585754e+00 -5.552302e+00 8.570445e-02 - 4.030000e+00 -2.534926e+00 -5.566114e+00 8.583588e-02 - 4.040000e+00 -2.486404e+00 -5.579926e+00 8.633496e-02 - 4.050000e+00 -2.437580e+00 -5.593737e+00 8.701785e-02 - 4.060000e+00 -2.383991e+00 -5.607549e+00 8.764065e-02 - 4.070000e+00 -2.319291e+00 -5.621361e+00 8.798621e-02 - 4.080000e+00 -2.235371e+00 -5.635172e+00 8.793541e-02 - 4.090000e+00 -2.122615e+00 -5.648984e+00 8.750393e-02 - 4.100000e+00 -1.970297e+00 -5.662796e+00 8.683711e-02 - 4.110000e+00 -1.767102e+00 -5.676608e+00 8.616432e-02 - 4.120000e+00 -1.501749e+00 -5.690419e+00 8.572243e-02 - 4.130000e+00 -1.163683e+00 -5.704231e+00 8.567084e-02 - 4.140000e+00 -7.438005e-01 -5.718043e+00 8.603091e-02 - 4.150000e+00 -2.351580e-01 -5.731854e+00 8.667774e-02 - 4.160000e+00 3.663656e-01 -5.745666e+00 8.738832e-02 - 4.170000e+00 1.061510e+00 -5.759478e+00 8.792278e-02 - 4.180000e+00 1.847208e+00 -5.773289e+00 8.810524e-02 - 4.190000e+00 2.716329e+00 -5.787101e+00 8.787868e-02 - 4.200000e+00 3.657618e+00 -5.800913e+00 8.732138e-02 - 4.210000e+00 4.655841e+00 -5.814725e+00 8.662233e-02 - 4.220000e+00 5.692133e+00 -5.828536e+00 8.602054e-02 - 4.230000e+00 6.744555e+00 -5.842348e+00 8.572319e-02 - 4.240000e+00 7.788825e+00 -5.856160e+00 8.583002e-02 - 4.250000e+00 8.799190e+00 -5.869971e+00 8.629595e-02 - 4.260000e+00 9.749408e+00 -5.883783e+00 8.694977e-02 - 4.270000e+00 1.061379e+01 -5.897595e+00 8.755959e-02 - 4.280000e+00 1.136822e+01 -5.911406e+00 8.791545e-02 - 4.290000e+00 1.199120e+01 -5.925218e+00 8.789847e-02 - 4.300000e+00 1.246467e+01 -5.939030e+00 8.751740e-02 - 4.310000e+00 1.277484e+01 -5.952841e+00 8.690514e-02 - 4.320000e+00 1.291270e+01 -5.966653e+00 8.627632e-02 - 4.330000e+00 1.287439e+01 -5.980465e+00 8.585518e-02 - 4.340000e+00 1.266135e+01 -5.994277e+00 8.579510e-02 - 4.350000e+00 1.228021e+01 -6.008088e+00 8.612033e-02 - 4.360000e+00 1.174245e+01 -6.021900e+00 8.671645e-02 - 4.370000e+00 1.106387e+01 -6.035712e+00 8.737418e-02 - 4.380000e+00 1.026392e+01 -6.049523e+00 8.786556e-02 - 4.390000e+00 9.364814e+00 -6.063335e+00 8.802129e-02 - 4.400000e+00 8.390613e+00 -6.077147e+00 8.778446e-02 - 4.410000e+00 7.366263e+00 -6.090958e+00 8.722793e-02 - 4.420000e+00 6.316617e+00 -6.104770e+00 8.653223e-02 - 4.430000e+00 5.265521e+00 -6.118582e+00 8.592841e-02 - 4.440000e+00 4.234999e+00 -6.132394e+00 8.561983e-02 - 4.450000e+00 3.244559e+00 -6.146205e+00 8.570877e-02 - 4.460000e+00 2.310668e+00 -6.160017e+00 8.615855e-02 - 4.470000e+00 1.446384e+00 -6.173829e+00 8.680890e-02 - 4.480000e+00 6.611823e-01 -6.187640e+00 8.743706e-02 - 4.490000e+00 -3.905441e-02 -6.201452e+00 8.783681e-02 - 4.500000e+00 -6.518808e-01 -6.215264e+00 8.788586e-02 - 4.510000e+00 -1.177993e+00 -6.229075e+00 8.758252e-02 - 4.520000e+00 -1.620823e+00 -6.242887e+00 8.704418e-02 - 4.530000e+00 -1.986045e+00 -6.256699e+00 8.646856e-02 - 4.540000e+00 -2.281044e+00 -6.270511e+00 8.606669e-02 - 4.550000e+00 -2.514362e+00 -6.284322e+00 8.598740e-02 - 4.560000e+00 -2.695158e+00 -6.298134e+00 8.626153e-02 - 4.570000e+00 -2.832719e+00 -6.311946e+00 8.679056e-02 - 4.580000e+00 -2.936024e+00 -6.325757e+00 8.738503e-02 - 4.590000e+00 -3.013391e+00 -6.339569e+00 8.783451e-02 - 4.600000e+00 -3.072212e+00 -6.353381e+00 8.798044e-02 - 4.610000e+00 -3.118767e+00 -6.367192e+00 8.776777e-02 - 4.620000e+00 -3.158134e+00 -6.381004e+00 8.726241e-02 - 4.630000e+00 -3.194163e+00 -6.394816e+00 8.663102e-02 - 4.640000e+00 -3.229516e+00 -6.408627e+00 8.608727e-02 - 4.650000e+00 -3.265756e+00 -6.422439e+00 8.581849e-02 - 4.660000e+00 -3.303465e+00 -6.436251e+00 8.591708e-02 - 4.670000e+00 -3.342377e+00 -6.450063e+00 8.634536e-02 - 4.680000e+00 -3.381515e+00 -6.463874e+00 8.695011e-02 - 4.690000e+00 -3.419326e+00 -6.477686e+00 8.751985e-02 - 4.700000e+00 -3.453792e+00 -6.491498e+00 8.785941e-02 - 4.710000e+00 -3.482530e+00 -6.505309e+00 8.785407e-02 - 4.720000e+00 -3.502873e+00 -6.519121e+00 8.750507e-02 - 4.730000e+00 -3.511939e+00 -6.532933e+00 8.692868e-02 - 4.740000e+00 -3.506682e+00 -6.546744e+00 8.631937e-02 - 4.750000e+00 -3.483957e+00 -6.560556e+00 8.588540e-02 - 4.760000e+00 -3.440576e+00 -6.574368e+00 8.577557e-02 - 4.770000e+00 -3.373385e+00 -6.588180e+00 8.602434e-02 - 4.780000e+00 -3.279357e+00 -6.601991e+00 8.653953e-02 - 4.790000e+00 -3.155710e+00 -6.615803e+00 8.713833e-02 - 4.800000e+00 -3.000036e+00 -6.629615e+00 8.761468e-02 - 4.810000e+00 -2.810458e+00 -6.643426e+00 8.781026e-02 - 4.820000e+00 -2.585794e+00 -6.657238e+00 8.766528e-02 - 4.830000e+00 -2.325724e+00 -6.671050e+00 8.723634e-02 - 4.840000e+00 -2.030943e+00 -6.684861e+00 8.667774e-02 - 4.850000e+00 -1.703304e+00 -6.698673e+00 8.619059e-02 - 4.860000e+00 -1.345909e+00 -6.712485e+00 8.595303e-02 - 4.870000e+00 -9.631702e-01 -6.726297e+00 8.605479e-02 - 4.880000e+00 -5.608041e-01 -6.740108e+00 8.646303e-02 - 4.890000e+00 -1.457638e-01 -6.753920e+00 8.703493e-02 - 4.900000e+00 2.738950e-01 -6.767732e+00 8.757120e-02 - 4.910000e+00 6.892164e-01 -6.781543e+00 8.788676e-02 - 4.920000e+00 1.090608e+00 -6.795355e+00 8.787244e-02 - 4.930000e+00 1.468155e+00 -6.809167e+00 8.752974e-02 - 4.940000e+00 1.811980e+00 -6.822978e+00 8.697063e-02 - 4.950000e+00 2.112617e+00 -6.836790e+00 8.638246e-02 - 4.960000e+00 2.361395e+00 -6.850602e+00 8.596608e-02 - 4.970000e+00 2.550801e+00 -6.864413e+00 8.586518e-02 - 4.980000e+00 2.674816e+00 -6.878225e+00 8.611303e-02 - 4.990000e+00 2.729185e+00 -6.892037e+00 8.661999e-02 - 5.000000e+00 2.711627e+00 -6.905849e+00 8.720766e-02 - 5.010000e+00 2.621959e+00 -6.919660e+00 8.767376e-02 - 5.020000e+00 2.462128e+00 -6.933472e+00 8.786104e-02 - 5.030000e+00 2.236157e+00 -6.947284e+00 8.770755e-02 - 5.040000e+00 1.949990e+00 -6.961095e+00 8.726511e-02 - 5.050000e+00 1.611265e+00 -6.974907e+00 8.668269e-02 - 5.060000e+00 1.229002e+00 -6.988719e+00 8.615816e-02 - 5.070000e+00 8.132488e-01 -7.002530e+00 8.587099e-02 - 5.080000e+00 3.746712e-01 -7.016342e+00 8.591790e-02 - 5.090000e+00 -7.586038e-02 -7.030154e+00 8.627722e-02 - 5.100000e+00 -5.276906e-01 -7.043966e+00 8.681827e-02 - 5.110000e+00 -9.707736e-01 -7.057777e+00 8.735105e-02 - 5.120000e+00 -1.396027e+00 -7.071589e+00 8.769425e-02 - 5.130000e+00 -1.795627e+00 -7.085401e+00 8.773588e-02 - 5.140000e+00 -2.163237e+00 -7.099212e+00 8.746834e-02 - 5.150000e+00 -2.494151e+00 -7.113024e+00 8.698983e-02 - 5.160000e+00 -2.785361e+00 -7.126836e+00 8.647198e-02 - 5.170000e+00 -3.035536e+00 -7.140647e+00 8.610178e-02 - 5.180000e+00 -3.244924e+00 -7.154459e+00 8.601496e-02 - 5.190000e+00 -3.415178e+00 -7.168271e+00 8.624523e-02 - 5.200000e+00 -3.549129e+00 -7.182083e+00 8.671154e-02 - 5.210000e+00 -3.650505e+00 -7.195894e+00 8.724892e-02 - 5.220000e+00 -3.723620e+00 -7.209706e+00 8.766895e-02 - 5.230000e+00 -3.773049e+00 -7.223518e+00 8.782505e-02 - 5.240000e+00 -3.803304e+00 -7.237329e+00 8.766071e-02 - 5.250000e+00 -3.818524e+00 -7.251141e+00 8.722768e-02 - 5.260000e+00 -3.822194e+00 -7.264953e+00 8.667016e-02 - 5.270000e+00 -3.816918e+00 -7.278764e+00 8.617831e-02 - 5.280000e+00 -3.804229e+00 -7.292576e+00 8.592329e-02 - 5.290000e+00 -3.784477e+00 -7.306388e+00 8.599517e-02 - 5.300000e+00 -3.756772e+00 -7.320200e+00 8.636886e-02 - 5.310000e+00 -3.718998e+00 -7.334011e+00 8.691337e-02 - 5.320000e+00 -3.667897e+00 -7.347823e+00 8.744021e-02 - 5.330000e+00 -3.599214e+00 -7.361635e+00 8.776965e-02 - 5.340000e+00 -3.507905e+00 -7.375446e+00 8.779011e-02 - 5.350000e+00 -3.388388e+00 -7.389258e+00 8.749321e-02 - 5.360000e+00 -3.234838e+00 -7.403070e+00 8.697617e-02 - 5.370000e+00 -3.041515e+00 -7.416881e+00 8.641121e-02 - 5.380000e+00 -2.803099e+00 -7.430693e+00 8.598917e-02 - 5.390000e+00 -2.515036e+00 -7.444505e+00 8.585342e-02 - 5.400000e+00 -2.173860e+00 -7.458316e+00 8.604798e-02 - 5.410000e+00 -1.777503e+00 -7.472128e+00 8.650183e-02 - 5.420000e+00 -1.325552e+00 -7.485940e+00 8.705661e-02 - 5.430000e+00 -8.194596e-01 -7.499752e+00 8.752478e-02 - 5.440000e+00 -2.626892e-01 -7.513563e+00 8.775421e-02 - 5.450000e+00 3.392176e-01 -7.527375e+00 8.767696e-02 - 5.460000e+00 9.786512e-01 -7.541187e+00 8.732932e-02 - 5.470000e+00 1.646031e+00 -7.554998e+00 8.683885e-02 - 5.480000e+00 2.329988e+00 -7.568810e+00 8.638176e-02 - 5.490000e+00 3.017633e+00 -7.582622e+00 8.612218e-02 - 5.500000e+00 3.694900e+00 -7.596433e+00 8.615289e-02 - 5.510000e+00 4.346958e+00 -7.610245e+00 8.646102e-02 - 5.520000e+00 4.958674e+00 -7.624057e+00 8.693372e-02 - 5.530000e+00 5.515119e+00 -7.637869e+00 8.740100e-02 - 5.540000e+00 6.002084e+00 -7.651680e+00 8.769710e-02 - 5.550000e+00 6.406594e+00 -7.665492e+00 8.771699e-02 - 5.560000e+00 6.717406e+00 -7.679304e+00 8.745053e-02 - 5.570000e+00 6.925442e+00 -7.693115e+00 8.698579e-02 - 5.580000e+00 7.024169e+00 -7.706927e+00 8.648066e-02 - 5.590000e+00 7.009884e+00 -7.720739e+00 8.610998e-02 - 5.600000e+00 6.881897e+00 -7.734550e+00 8.600369e-02 - 5.610000e+00 6.642601e+00 -7.748362e+00 8.619864e-02 - 5.620000e+00 6.297426e+00 -7.762174e+00 8.662450e-02 - 5.630000e+00 5.854665e+00 -7.775986e+00 8.713015e-02 - 5.640000e+00 5.325193e+00 -7.789797e+00 8.753878e-02 - 5.650000e+00 4.722072e+00 -7.803609e+00 8.770900e-02 - 5.660000e+00 4.060080e+00 -7.817421e+00 8.758144e-02 - 5.670000e+00 3.355160e+00 -7.831232e+00 8.719768e-02 - 5.680000e+00 2.623839e+00 -7.845044e+00 8.668744e-02 - 5.690000e+00 1.882618e+00 -7.858856e+00 8.622663e-02 - 5.700000e+00 1.147384e+00 -7.872667e+00 8.597749e-02 - 5.710000e+00 4.328576e-01 -7.886479e+00 8.603025e-02 - 5.720000e+00 -2.478914e-01 -7.900291e+00 8.636931e-02 - 5.730000e+00 -8.838435e-01 -7.914102e+00 8.687907e-02 - 5.740000e+00 -1.466320e+00 -7.927914e+00 8.738655e-02 - 5.750000e+00 -1.989158e+00 -7.941726e+00 8.772229e-02 - 5.760000e+00 -2.448757e+00 -7.955538e+00 8.777674e-02 - 5.770000e+00 -2.844007e+00 -7.969349e+00 8.753466e-02 - 5.780000e+00 -3.176100e+00 -7.983161e+00 8.707946e-02 - 5.790000e+00 -3.448233e+00 -7.996973e+00 8.656641e-02 - 5.800000e+00 -3.665236e+00 -8.010784e+00 8.617139e-02 - 5.810000e+00 -3.833133e+00 -8.024596e+00 8.602990e-02 - 5.820000e+00 -3.958675e+00 -8.038408e+00 8.618804e-02 - 5.830000e+00 -4.048865e+00 -8.052219e+00 8.658593e-02 - 5.840000e+00 -4.110503e+00 -8.066031e+00 8.708082e-02 - 5.850000e+00 -4.149782e+00 -8.079843e+00 8.749955e-02 - 5.860000e+00 -4.171953e+00 -8.093655e+00 8.769861e-02 - 5.870000e+00 -4.181080e+00 -8.107466e+00 8.761101e-02 - 5.880000e+00 -4.179890e+00 -8.121278e+00 8.726695e-02 - 5.890000e+00 -4.169735e+00 -8.135090e+00 8.678365e-02 - 5.900000e+00 -4.150654e+00 -8.148901e+00 8.632682e-02 - 5.910000e+00 -4.121538e+00 -8.162713e+00 8.605422e-02 - 5.920000e+00 -4.080373e+00 -8.176525e+00 8.605936e-02 - 5.930000e+00 -4.024548e+00 -8.190336e+00 8.633734e-02 - 5.940000e+00 -3.951214e+00 -8.204148e+00 8.678737e-02 - 5.950000e+00 -3.857649e+00 -8.217960e+00 8.725091e-02 - 5.960000e+00 -3.741620e+00 -8.231772e+00 8.756870e-02 - 5.970000e+00 -3.601711e+00 -8.245583e+00 8.763482e-02 - 5.980000e+00 -3.437595e+00 -8.259395e+00 8.743080e-02 - 5.990000e+00 -3.250224e+00 -8.273207e+00 8.703087e-02 - 6.000000e+00 -3.041939e+00 -8.287018e+00 8.657745e-02 - 6.010000e+00 -2.816474e+00 -8.300830e+00 8.623311e-02 - 6.020000e+00 -2.578867e+00 -8.314642e+00 8.612316e-02 - 6.030000e+00 -2.335272e+00 -8.328453e+00 8.628953e-02 - 6.040000e+00 -2.092693e+00 -8.342265e+00 8.667500e-02 - 6.050000e+00 -1.858648e+00 -8.356077e+00 8.714473e-02 - 6.060000e+00 -1.640791e+00 -8.369888e+00 8.753548e-02 - 6.070000e+00 -1.446513e+00 -8.383700e+00 8.771242e-02 - 6.080000e+00 -1.282544e+00 -8.397512e+00 8.761380e-02 - 6.090000e+00 -1.154595e+00 -8.411324e+00 8.727067e-02 - 6.100000e+00 -1.067042e+00 -8.425135e+00 8.679705e-02 - 6.110000e+00 -1.022691e+00 -8.438947e+00 8.635272e-02 - 6.120000e+00 -1.022633e+00 -8.452759e+00 8.608880e-02 - 6.130000e+00 -1.066192e+00 -8.466570e+00 8.609374e-02 - 6.140000e+00 -1.150981e+00 -8.480382e+00 8.636059e-02 - 6.150000e+00 -1.273047e+00 -8.494194e+00 8.678994e-02 - 6.160000e+00 -1.427113e+00 -8.508005e+00 8.722702e-02 - 6.170000e+00 -1.606882e+00 -8.521817e+00 8.751718e-02 - 6.180000e+00 -1.805393e+00 -8.535629e+00 8.755858e-02 - 6.190000e+00 -2.015408e+00 -8.549441e+00 8.733548e-02 - 6.200000e+00 -2.229787e+00 -8.563252e+00 8.692355e-02 - 6.210000e+00 -2.441843e+00 -8.577064e+00 8.646565e-02 - 6.220000e+00 -2.645638e+00 -8.590876e+00 8.612434e-02 - 6.230000e+00 -2.836214e+00 -8.604687e+00 8.602490e-02 - 6.240000e+00 -3.009722e+00 -8.618499e+00 8.620926e-02 - 6.250000e+00 -3.163462e+00 -8.632311e+00 8.661987e-02 - 6.260000e+00 -3.295813e+00 -8.646122e+00 8.712074e-02 - 6.270000e+00 -3.406071e+00 -8.659934e+00 8.754630e-02 - 6.280000e+00 -3.494195e+00 -8.673746e+00 8.775802e-02 - 6.290000e+00 -3.560494e+00 -8.687558e+00 8.768946e-02 - 6.300000e+00 -3.605266e+00 -8.701369e+00 8.736689e-02 - 6.310000e+00 -3.628425e+00 -8.715181e+00 8.690065e-02 - 6.320000e+00 -3.629147e+00 -8.728993e+00 8.644948e-02 - 6.330000e+00 -3.605564e+00 -8.742804e+00 8.616701e-02 - 6.340000e+00 -3.554534e+00 -8.756616e+00 8.614766e-02 - 6.350000e+00 -3.471511e+00 -8.770428e+00 8.639233e-02 - 6.360000e+00 -3.350547e+00 -8.784239e+00 8.680872e-02 - 6.370000e+00 -3.184410e+00 -8.798051e+00 8.724599e-02 - 6.380000e+00 -2.964853e+00 -8.811863e+00 8.754876e-02 - 6.390000e+00 -2.683002e+00 -8.825674e+00 8.760987e-02 - 6.400000e+00 -2.329863e+00 -8.839486e+00 8.740504e-02 - 6.410000e+00 -1.896913e+00 -8.853298e+00 8.700040e-02 - 6.420000e+00 -1.376751e+00 -8.867110e+00 8.653120e-02 - 6.430000e+00 -7.637666e-01 -8.880921e+00 8.615719e-02 - 6.440000e+00 -5.478658e-02 -8.894733e+00 8.600743e-02 - 6.450000e+00 7.503419e-01 -8.908545e+00 8.613388e-02 - 6.460000e+00 1.648275e+00 -8.922356e+00 8.649247e-02 - 6.470000e+00 2.631839e+00 -8.936168e+00 8.696004e-02 - 6.480000e+00 3.689864e+00 -8.949980e+00 8.737928e-02 - 6.490000e+00 4.807217e+00 -8.963791e+00 8.761334e-02 - 6.500000e+00 5.965040e+00 -8.977603e+00 8.759051e-02 - 6.510000e+00 7.141184e+00 -8.991415e+00 8.732628e-02 - 6.520000e+00 8.310844e+00 -9.005227e+00 8.691727e-02 - 6.530000e+00 9.447355e+00 -9.019038e+00 8.650892e-02 - 6.540000e+00 1.052313e+01 -9.032850e+00 8.624585e-02 - 6.550000e+00 1.151068e+01 -9.046662e+00 8.622056e-02 - 6.560000e+00 1.238368e+01 -9.060473e+00 8.643989e-02 - 6.570000e+00 1.311803e+01 -9.074285e+00 8.682322e-02 - 6.580000e+00 1.369284e+01 -9.088097e+00 8.723311e-02 - 6.590000e+00 1.409131e+01 -9.101908e+00 8.752513e-02 - 6.600000e+00 1.430143e+01 -9.115720e+00 8.759756e-02 - 6.610000e+00 1.431653e+01 -9.129532e+00 8.742490e-02 - 6.620000e+00 1.413553e+01 -9.143344e+00 8.706581e-02 - 6.630000e+00 1.376303e+01 -9.157155e+00 8.664383e-02 - 6.640000e+00 1.320907e+01 -9.170967e+00 8.630586e-02 - 6.650000e+00 1.248876e+01 -9.184779e+00 8.617074e-02 - 6.660000e+00 1.162158e+01 -9.198590e+00 8.628606e-02 - 6.670000e+00 1.063063e+01 -9.212402e+00 8.661044e-02 - 6.680000e+00 9.541615e+00 -9.226214e+00 8.702918e-02 - 6.690000e+00 8.381888e+00 -9.240025e+00 8.739620e-02 - 6.700000e+00 7.179331e+00 -9.253837e+00 8.758517e-02 - 6.710000e+00 5.961341e+00 -9.267649e+00 8.753185e-02 - 6.720000e+00 4.753851e+00 -9.281461e+00 8.725476e-02 - 6.730000e+00 3.580485e+00 -9.295272e+00 8.684917e-02 - 6.740000e+00 2.461850e+00 -9.309084e+00 8.645577e-02 - 6.750000e+00 1.415025e+00 -9.322896e+00 8.621269e-02 - 6.760000e+00 4.532287e-01 -9.336707e+00 8.620624e-02 - 6.770000e+00 -4.142968e-01 -9.350519e+00 8.643915e-02 - 6.780000e+00 -1.182223e+00 -9.364331e+00 8.682945e-02 - 6.790000e+00 -1.848891e+00 -9.378142e+00 8.724072e-02 - 6.800000e+00 -2.415919e+00 -9.391954e+00 8.753056e-02 - 6.810000e+00 -2.887703e+00 -9.405766e+00 8.759901e-02 - 6.820000e+00 -3.270830e+00 -9.419577e+00 8.742103e-02 - 6.830000e+00 -3.573468e+00 -9.433389e+00 8.705433e-02 - 6.840000e+00 -3.804748e+00 -9.447201e+00 8.662072e-02 - 6.850000e+00 -3.974192e+00 -9.461013e+00 8.626564e-02 - 6.860000e+00 -4.091203e+00 -9.474824e+00 8.610804e-02 - 6.870000e+00 -4.164653e+00 -9.488636e+00 8.619781e-02 - 6.880000e+00 -4.202570e+00 -9.502448e+00 8.649787e-02 - 6.890000e+00 -4.211947e+00 -9.516259e+00 8.689872e-02 - 6.900000e+00 -4.198652e+00 -9.530071e+00 8.725885e-02 - 6.910000e+00 -4.167450e+00 -9.543883e+00 8.745463e-02 - 6.920000e+00 -4.122095e+00 -9.557694e+00 8.742188e-02 - 6.930000e+00 -4.065505e+00 -9.571506e+00 8.717653e-02 - 6.940000e+00 -3.999959e+00 -9.585318e+00 8.680901e-02 - 6.950000e+00 -3.927327e+00 -9.599130e+00 8.645406e-02 - 6.960000e+00 -3.849278e+00 -9.612941e+00 8.624413e-02 - 6.970000e+00 -3.767473e+00 -9.626753e+00 8.626168e-02 - 6.980000e+00 -3.683709e+00 -9.640565e+00 8.650827e-02 - 6.990000e+00 -3.600007e+00 -9.654376e+00 8.690351e-02 - 7.000000e+00 -3.518647e+00 -9.668188e+00 8.731419e-02 - 7.010000e+00 -3.442143e+00 -9.682000e+00 8.760140e-02 - 7.020000e+00 -3.373162e+00 -9.695811e+00 8.766765e-02 - 7.030000e+00 -3.314405e+00 -9.709623e+00 8.748867e-02 - 7.040000e+00 -3.268464e+00 -9.723435e+00 8.712136e-02 - 7.050000e+00 -3.237658e+00 -9.737247e+00 8.668565e-02 - 7.060000e+00 -3.223883e+00 -9.751058e+00 8.632511e-02 - 7.070000e+00 -3.228470e+00 -9.764870e+00 8.615774e-02 - 7.080000e+00 -3.252079e+00 -9.778682e+00 8.623406e-02 - 7.090000e+00 -3.294630e+00 -9.792493e+00 8.651903e-02 - 7.100000e+00 -3.355279e+00 -9.806305e+00 8.690579e-02 - 7.110000e+00 -3.432434e+00 -9.820117e+00 8.725504e-02 - 7.120000e+00 -3.523812e+00 -9.833928e+00 8.744407e-02 - 7.130000e+00 -3.626529e+00 -9.847740e+00 8.740803e-02 - 7.140000e+00 -3.737210e+00 -9.861552e+00 8.716079e-02 - 7.150000e+00 -3.852113e+00 -9.875363e+00 8.679014e-02 - 7.160000e+00 -3.967249e+00 -9.889175e+00 8.642857e-02 - 7.170000e+00 -4.078489e+00 -9.902987e+00 8.620775e-02 - 7.180000e+00 -4.181658e+00 -9.916799e+00 8.621132e-02 - 7.190000e+00 -4.272592e+00 -9.930610e+00 8.644384e-02 - 7.200000e+00 -4.347178e+00 -9.944422e+00 8.682872e-02 - 7.210000e+00 -4.401366e+00 -9.958234e+00 8.723616e-02 - 7.220000e+00 -4.431155e+00 -9.972045e+00 8.752910e-02 - 7.230000e+00 -4.432579e+00 -9.985857e+00 8.760985e-02 - 7.240000e+00 -4.401686e+00 -9.999669e+00 8.745203e-02 - 7.250000e+00 -4.334534e+00 -1.001348e+01 8.710905e-02 - 7.260000e+00 -4.227210e+00 -1.002729e+01 8.669701e-02 - 7.270000e+00 -4.075886e+00 -1.004110e+01 8.635634e-02 - 7.280000e+00 -3.876916e+00 -1.005492e+01 8.620357e-02 - 7.290000e+00 -3.626982e+00 -1.006873e+01 8.628964e-02 - 7.300000e+00 -3.323282e+00 -1.008254e+01 8.658147e-02 - 7.310000e+00 -2.963758e+00 -1.009635e+01 8.697451e-02 - 7.320000e+00 -2.547353e+00 -1.011016e+01 8.733096e-02 - 7.330000e+00 -2.074275e+00 -1.012397e+01 8.752789e-02 - 7.340000e+00 -1.546259e+00 -1.013779e+01 8.749837e-02 - 7.350000e+00 -9.667883e-01 -1.015160e+01 8.725294e-02 - 7.360000e+00 -3.412800e-01 -1.016541e+01 8.687595e-02 - 7.370000e+00 3.228177e-01 -1.017922e+01 8.649780e-02 - 7.380000e+00 1.016010e+00 -1.019303e+01 8.625065e-02 - 7.390000e+00 1.726847e+00 -1.020684e+01 8.622171e-02 - 7.400000e+00 2.442125e+00 -1.022066e+01 8.642147e-02 - 7.410000e+00 3.147204e+00 -1.023447e+01 8.677992e-02 - 7.420000e+00 3.826419e+00 -1.024828e+01 8.717238e-02 - 7.430000e+00 4.463596e+00 -1.026209e+01 8.746396e-02 - 7.440000e+00 5.042623e+00 -1.027590e+01 8.755554e-02 - 7.450000e+00 5.548071e+00 -1.028971e+01 8.741620e-02 - 7.460000e+00 5.965823e+00 -1.030353e+01 8.709278e-02 - 7.470000e+00 6.283678e+00 -1.031734e+01 8.669456e-02 - 7.480000e+00 6.491899e+00 -1.033115e+01 8.635679e-02 - 7.490000e+00 6.583679e+00 -1.034496e+01 8.619412e-02 - 7.500000e+00 6.555482e+00 -1.035877e+01 8.625962e-02 - 7.510000e+00 6.407260e+00 -1.037258e+01 8.652573e-02 - 7.520000e+00 6.142512e+00 -1.038640e+01 8.689495e-02 - 7.530000e+00 5.768195e+00 -1.040021e+01 8.723582e-02 - 7.540000e+00 5.294482e+00 -1.041402e+01 8.742941e-02 - 7.550000e+00 4.734383e+00 -1.042783e+01 8.740958e-02 - 7.560000e+00 4.103251e+00 -1.044164e+01 8.718460e-02 - 7.570000e+00 3.418196e+00 -1.045545e+01 8.683440e-02 - 7.580000e+00 2.697439e+00 -1.046927e+01 8.648406e-02 - 7.590000e+00 1.959645e+00 -1.048308e+01 8.626112e-02 - 7.600000e+00 1.223256e+00 -1.049689e+01 8.625008e-02 - 7.610000e+00 5.058789e-01 -1.051070e+01 8.646118e-02 - 7.620000e+00 -1.762705e-01 -1.052451e+01 8.682625e-02 - 7.630000e+00 -8.088206e-01 -1.053832e+01 8.722328e-02 - 7.640000e+00 -1.379593e+00 -1.055214e+01 8.751959e-02 - 7.650000e+00 -1.878834e+00 -1.056595e+01 8.761687e-02 - 7.660000e+00 -2.299321e+00 -1.057976e+01 8.748327e-02 - 7.670000e+00 -2.636371e+00 -1.059357e+01 8.716352e-02 - 7.680000e+00 -2.887729e+00 -1.060738e+01 8.676455e-02 - 7.690000e+00 -3.053399e+00 -1.062120e+01 8.642026e-02 - 7.700000e+00 -3.135390e+00 -1.063501e+01 8.624582e-02 - 7.710000e+00 -3.137448e+00 -1.064882e+01 8.629701e-02 - 7.720000e+00 -3.064754e+00 -1.066263e+01 8.655023e-02 - 7.730000e+00 -2.923640e+00 -1.067644e+01 8.691194e-02 - 7.740000e+00 -2.721321e+00 -1.069025e+01 8.725297e-02 - 7.750000e+00 -2.465665e+00 -1.070407e+01 8.745415e-02 - 7.760000e+00 -2.165005e+00 -1.071788e+01 8.744637e-02 - 7.770000e+00 -1.827993e+00 -1.073169e+01 8.723295e-02 - 7.780000e+00 -1.463495e+00 -1.074550e+01 8.688815e-02 - 7.790000e+00 -1.080518e+00 -1.075931e+01 8.653246e-02 - 7.800000e+00 -6.881554e-01 -1.077312e+01 8.629153e-02 - 7.810000e+00 -2.955460e-01 -1.078694e+01 8.625170e-02 - 7.820000e+00 8.818105e-02 -1.080075e+01 8.642853e-02 - 7.830000e+00 4.539747e-01 -1.081456e+01 8.676105e-02 - 7.840000e+00 7.929615e-01 -1.082837e+01 8.713417e-02 - 7.850000e+00 1.096579e+00 -1.084218e+01 8.741985e-02 - 7.860000e+00 1.356747e+00 -1.085599e+01 8.752100e-02 - 7.870000e+00 1.566073e+00 -1.086981e+01 8.740354e-02 - 7.880000e+00 1.718081e+00 -1.088362e+01 8.710728e-02 - 7.890000e+00 1.807461e+00 -1.089743e+01 8.673292e-02 - 7.900000e+00 1.830310e+00 -1.091124e+01 8.640862e-02 - 7.910000e+00 1.784361e+00 -1.092505e+01 8.624595e-02 - 7.920000e+00 1.669172e+00 -1.093886e+01 8.630016e-02 - 7.930000e+00 1.486265e+00 -1.095268e+01 8.655020e-02 - 7.940000e+00 1.239192e+00 -1.096649e+01 8.690681e-02 - 7.950000e+00 9.335295e-01 -1.098030e+01 8.724518e-02 - 7.960000e+00 5.767748e-01 -1.099411e+01 8.744885e-02 - 7.970000e+00 1.781685e-01 -1.100792e+01 8.744896e-02 - 7.980000e+00 -2.515741e-01 -1.102173e+01 8.724661e-02 - 7.990000e+00 -7.006017e-01 -1.103555e+01 8.691219e-02 - 8.000000e+00 -1.156323e+00 -1.104936e+01 8.656200e-02 - 8.010000e+00 -1.605844e+00 -1.106317e+01 8.631875e-02 - 8.020000e+00 -2.036420e+00 -1.107698e+01 8.626827e-02 - 8.030000e+00 -2.435906e+00 -1.109079e+01 8.642838e-02 - 8.040000e+00 -2.793178e+00 -1.110460e+01 8.674233e-02 - 8.050000e+00 -3.098512e+00 -1.111842e+01 8.709977e-02 - 8.060000e+00 -3.343890e+00 -1.113223e+01 8.737617e-02 - 8.070000e+00 -3.523241e+00 -1.114604e+01 8.747575e-02 - 8.080000e+00 -3.632589e+00 -1.115985e+01 8.736322e-02 - 8.090000e+00 -3.670114e+00 -1.117366e+01 8.707518e-02 - 8.100000e+00 -3.636133e+00 -1.118747e+01 8.670830e-02 - 8.110000e+00 -3.532999e+00 -1.120129e+01 8.638727e-02 - 8.120000e+00 -3.364936e+00 -1.121510e+01 8.622217e-02 - 8.130000e+00 -3.137818e+00 -1.122891e+01 8.626941e-02 - 8.140000e+00 -2.858915e+00 -1.124272e+01 8.651148e-02 - 8.150000e+00 -2.536611e+00 -1.125653e+01 8.686382e-02 - 8.160000e+00 -2.180124e+00 -1.127034e+01 8.720573e-02 - 8.170000e+00 -1.799223e+00 -1.128416e+01 8.742290e-02 - 8.180000e+00 -1.403965e+00 -1.129797e+01 8.744584e-02 - 8.190000e+00 -1.004458e+00 -1.131178e+01 8.727231e-02 - 8.200000e+00 -6.106442e-01 -1.132559e+01 8.696732e-02 - 8.210000e+00 -2.321136e-01 -1.133940e+01 8.664116e-02 - 8.220000e+00 1.220572e-01 -1.135322e+01 8.641148e-02 - 8.230000e+00 4.434491e-01 -1.136703e+01 8.636156e-02 - 8.240000e+00 7.244291e-01 -1.138084e+01 8.650989e-02 - 8.250000e+00 9.582697e-01 -1.139465e+01 8.680331e-02 - 8.260000e+00 1.139265e+00 -1.140846e+01 8.713658e-02 - 8.270000e+00 1.262844e+00 -1.142227e+01 8.739024e-02 - 8.280000e+00 1.325686e+00 -1.143609e+01 8.747210e-02 - 8.290000e+00 1.325830e+00 -1.144990e+01 8.734839e-02 - 8.300000e+00 1.262779e+00 -1.146371e+01 8.705530e-02 - 8.310000e+00 1.137587e+00 -1.147752e+01 8.668776e-02 - 8.320000e+00 9.529220e-01 -1.149133e+01 8.636844e-02 - 8.330000e+00 7.130975e-01 -1.150514e+01 8.620594e-02 - 8.340000e+00 4.240556e-01 -1.151896e+01 8.625642e-02 - 8.350000e+00 9.329779e-02 -1.153277e+01 8.650321e-02 - 8.360000e+00 -2.702450e-01 -1.154658e+01 8.686301e-02 - 8.370000e+00 -6.564063e-01 -1.156039e+01 8.721593e-02 - 8.380000e+00 -1.054043e+00 -1.157420e+01 8.744716e-02 - 8.390000e+00 -1.451351e+00 -1.158801e+01 8.748512e-02 - 8.400000e+00 -1.836238e+00 -1.160183e+01 8.732405e-02 - 8.410000e+00 -2.196723e+00 -1.161564e+01 8.702498e-02 - 8.420000e+00 -2.521366e+00 -1.162945e+01 8.669490e-02 - 8.430000e+00 -2.799690e+00 -1.164326e+01 8.645018e-02 - 8.440000e+00 -3.022590e+00 -1.165707e+01 8.637573e-02 - 8.450000e+00 -3.182695e+00 -1.167088e+01 8.649456e-02 - 8.460000e+00 -3.274671e+00 -1.168470e+01 8.675976e-02 - 8.470000e+00 -3.295447e+00 -1.169851e+01 8.707235e-02 - 8.480000e+00 -3.244348e+00 -1.171232e+01 8.731743e-02 - 8.490000e+00 -3.123134e+00 -1.172613e+01 8.740456e-02 - 8.500000e+00 -2.935929e+00 -1.173994e+01 8.729860e-02 - 8.510000e+00 -2.689061e+00 -1.175375e+01 8.703170e-02 - 8.520000e+00 -2.390808e+00 -1.176757e+01 8.669304e-02 - 8.530000e+00 -2.051063e+00 -1.178138e+01 8.639925e-02 - 8.540000e+00 -1.680950e+00 -1.179519e+01 8.625415e-02 - 8.550000e+00 -1.292393e+00 -1.180900e+01 8.631147e-02 - 8.560000e+00 -8.976655e-01 -1.182281e+01 8.655493e-02 - 8.570000e+00 -5.089507e-01 -1.183662e+01 8.690379e-02 - 8.580000e+00 -1.379157e-01 -1.185044e+01 8.724170e-02 - 8.590000e+00 2.046711e-01 -1.186425e+01 8.745698e-02 - 8.600000e+00 5.092724e-01 -1.187806e+01 8.747997e-02 - 8.610000e+00 7.678529e-01 -1.189187e+01 8.730537e-02 - 8.620000e+00 9.740860e-01 -1.190568e+01 8.699360e-02 - 8.630000e+00 1.123495e+00 -1.191949e+01 8.665084e-02 - 8.640000e+00 1.213531e+00 -1.193331e+01 8.639336e-02 - 8.650000e+00 1.243602e+00 -1.194712e+01 8.630718e-02 - 8.660000e+00 1.215045e+00 -1.196093e+01 8.641768e-02 - 8.670000e+00 1.131068e+00 -1.197474e+01 8.668092e-02 - 8.680000e+00 9.966652e-01 -1.198855e+01 8.700042e-02 - 8.690000e+00 8.184972e-01 -1.200236e+01 8.726226e-02 - 8.700000e+00 6.047687e-01 -1.201618e+01 8.737496e-02 - 8.710000e+00 3.650812e-01 -1.202999e+01 8.730014e-02 - 8.720000e+00 1.102728e-01 -1.204380e+01 8.706510e-02 - 8.730000e+00 -1.477617e-01 -1.205761e+01 8.675349e-02 - 8.740000e+00 -3.962768e-01 -1.207142e+01 8.647706e-02 - 8.750000e+00 -6.219127e-01 -1.208524e+01 8.633674e-02 - 8.760000e+00 -8.109697e-01 -1.209905e+01 8.638627e-02 - 8.770000e+00 -9.497260e-01 -1.211286e+01 8.661224e-02 - 8.780000e+00 -1.024799e+00 -1.212667e+01 8.693873e-02 - 8.790000e+00 -1.023552e+00 -1.214048e+01 8.725461e-02 - 8.800000e+00 -9.345354e-01 -1.215429e+01 8.745244e-02 - 8.810000e+00 -7.479563e-01 -1.216811e+01 8.746492e-02 - 8.820000e+00 -4.561570e-01 -1.218192e+01 8.728703e-02 - 8.830000e+00 -5.408176e-02 -1.219573e+01 8.697780e-02 - 8.840000e+00 4.602920e-01 -1.220954e+01 8.664106e-02 - 8.850000e+00 1.085586e+00 -1.222335e+01 8.639072e-02 - 8.860000e+00 1.816743e+00 -1.223716e+01 8.631117e-02 - 8.870000e+00 2.644869e+00 -1.225098e+01 8.642725e-02 - 8.880000e+00 3.557207e+00 -1.226479e+01 8.669538e-02 - 8.890000e+00 4.537280e+00 -1.227860e+01 8.701972e-02 - 8.900000e+00 5.565186e+00 -1.229241e+01 8.728657e-02 - 8.910000e+00 6.618072e+00 -1.230622e+01 8.740369e-02 - 8.920000e+00 7.670763e+00 -1.232003e+01 8.733101e-02 - 8.930000e+00 8.696530e+00 -1.233385e+01 8.709356e-02 - 8.940000e+00 9.667974e+00 -1.234766e+01 8.677302e-02 - 8.950000e+00 1.055799e+01 -1.236147e+01 8.648046e-02 - 8.960000e+00 1.134075e+01 -1.237528e+01 8.631808e-02 - 8.970000e+00 1.199270e+01 -1.238909e+01 8.634303e-02 - 8.980000e+00 1.249350e+01 -1.240290e+01 8.654665e-02 - 8.990000e+00 1.282679e+01 -1.241672e+01 8.685784e-02 - 9.000000e+00 1.298090e+01 -1.243053e+01 8.716892e-02 - 9.010000e+00 1.294932e+01 -1.244434e+01 8.737363e-02 - 9.020000e+00 1.273097e+01 -1.245815e+01 8.740326e-02 - 9.030000e+00 1.233022e+01 -1.247196e+01 8.724920e-02 - 9.040000e+00 1.175672e+01 -1.248577e+01 8.696564e-02 - 9.050000e+00 1.102496e+01 -1.249959e+01 8.665154e-02 - 9.060000e+00 1.015368e+01 -1.251340e+01 8.641715e-02 - 9.070000e+00 9.165054e+00 -1.252721e+01 8.634552e-02 - 9.080000e+00 8.083764e+00 -1.254102e+01 8.646260e-02 - 9.090000e+00 6.936027e+00 -1.255483e+01 8.672781e-02 - 9.100000e+00 5.748546e+00 -1.256864e+01 8.704891e-02 - 9.110000e+00 4.547501e+00 -1.258246e+01 8.731494e-02 - 9.120000e+00 3.357612e+00 -1.259627e+01 8.743453e-02 - 9.130000e+00 2.201315e+00 -1.261008e+01 8.736635e-02 - 9.140000e+00 1.098084e+00 -1.262389e+01 8.713241e-02 - 9.150000e+00 6.393724e-02 -1.263770e+01 8.681078e-02 - 9.160000e+00 -8.888679e-01 -1.265151e+01 8.650957e-02 - 9.170000e+00 -1.751948e+00 -1.266533e+01 8.633011e-02 - 9.180000e+00 -2.520712e+00 -1.267914e+01 8.633136e-02 - 9.190000e+00 -3.194120e+00 -1.269295e+01 8.650901e-02 - 9.200000e+00 -3.774287e+00 -1.270676e+01 8.679761e-02 - 9.210000e+00 -4.265986e+00 -1.272057e+01 8.709484e-02 - 9.220000e+00 -4.676078e+00 -1.273438e+01 8.729798e-02 - 9.230000e+00 -5.012897e+00 -1.274820e+01 8.733918e-02 - 9.240000e+00 -5.285654e+00 -1.276201e+01 8.720785e-02 - 9.250000e+00 -5.503858e+00 -1.277582e+01 8.695382e-02 - 9.260000e+00 -5.676820e+00 -1.278963e+01 8.667035e-02 - 9.270000e+00 -5.813222e+00 -1.280344e+01 8.646195e-02 - 9.280000e+00 -5.920798e+00 -1.281725e+01 8.640730e-02 - 9.290000e+00 -6.006108e+00 -1.283107e+01 8.653038e-02 - 9.300000e+00 -6.074419e+00 -1.284488e+01 8.679133e-02 - 9.310000e+00 -6.129667e+00 -1.285869e+01 8.710062e-02 - 9.320000e+00 -6.174503e+00 -1.287250e+01 8.735094e-02 - 9.330000e+00 -6.210392e+00 -1.288631e+01 8.745438e-02 - 9.340000e+00 -6.237755e+00 -1.290013e+01 8.737209e-02 - 9.350000e+00 -6.256124e+00 -1.291394e+01 8.712738e-02 - 9.360000e+00 -6.264304e+00 -1.292775e+01 8.679863e-02 - 9.370000e+00 -6.260523e+00 -1.294156e+01 8.649375e-02 - 9.380000e+00 -6.242561e+00 -1.295537e+01 8.631371e-02 - 9.390000e+00 -6.207852e+00 -1.296918e+01 8.631735e-02 - 9.400000e+00 -6.153565e+00 -1.298300e+01 8.650032e-02 - 9.410000e+00 -6.076659e+00 -1.299681e+01 8.679699e-02 - 9.420000e+00 -5.973936e+00 -1.301062e+01 8.710424e-02 - 9.430000e+00 -5.842086e+00 -1.302443e+01 8.731774e-02 - 9.440000e+00 -5.677740e+00 -1.303824e+01 8.736720e-02 - 9.450000e+00 -5.477554e+00 -1.305205e+01 8.723917e-02 - 9.460000e+00 -5.238312e+00 -1.306587e+01 8.698093e-02 - 9.470000e+00 -4.957070e+00 -1.307968e+01 8.668442e-02 - 9.480000e+00 -4.631329e+00 -1.309349e+01 8.645490e-02 - 9.490000e+00 -4.259246e+00 -1.310730e+01 8.637421e-02 - 9.500000e+00 -3.839860e+00 -1.312111e+01 8.647142e-02 - 9.510000e+00 -3.373332e+00 -1.313492e+01 8.671246e-02 - 9.520000e+00 -2.861170e+00 -1.314874e+01 8.701277e-02 - 9.530000e+00 -2.306436e+00 -1.316255e+01 8.726783e-02 - 9.540000e+00 -1.713899e+00 -1.317636e+01 8.738967e-02 - 9.550000e+00 -1.090124e+00 -1.319017e+01 8.733651e-02 - 9.560000e+00 -4.434820e-01 -1.320398e+01 8.712656e-02 - 9.570000e+00 2.159325e-01 -1.321779e+01 8.683195e-02 - 9.580000e+00 8.764886e-01 -1.323161e+01 8.655460e-02 - 9.590000e+00 1.525300e+00 -1.324542e+01 8.639119e-02 - 9.600000e+00 2.148600e+00 -1.325923e+01 8.639887e-02 - 9.610000e+00 2.732200e+00 -1.327304e+01 8.657453e-02 - 9.620000e+00 3.262001e+00 -1.328685e+01 8.685595e-02 - 9.630000e+00 3.724542e+00 -1.330066e+01 8.714429e-02 - 9.640000e+00 4.107565e+00 -1.331448e+01 8.733899e-02 - 9.650000e+00 4.400543e+00 -1.332829e+01 8.737213e-02 - 9.660000e+00 4.595165e+00 -1.334210e+01 8.723101e-02 - 9.670000e+00 4.685740e+00 -1.335591e+01 8.696239e-02 - 9.680000e+00 4.669497e+00 -1.336972e+01 8.665720e-02 - 9.690000e+00 4.546759e+00 -1.338353e+01 8.642001e-02 - 9.700000e+00 4.320990e+00 -1.339735e+01 8.633296e-02 - 9.710000e+00 3.998700e+00 -1.341116e+01 8.642649e-02 - 9.720000e+00 3.589214e+00 -1.342497e+01 8.666849e-02 - 9.730000e+00 3.104320e+00 -1.343878e+01 8.697614e-02 - 9.740000e+00 2.557813e+00 -1.345259e+01 8.724548e-02 - 9.750000e+00 1.964951e+00 -1.346640e+01 8.738734e-02 - 9.760000e+00 1.341861e+00 -1.348022e+01 8.735698e-02 - 9.770000e+00 7.049174e-01 -1.349403e+01 8.716823e-02 - 9.780000e+00 7.012748e-02 -1.350784e+01 8.688841e-02 - 9.790000e+00 -5.474493e-01 -1.352165e+01 8.661543e-02 - 9.800000e+00 -1.134219e+00 -1.353546e+01 8.644403e-02 - 9.810000e+00 -1.678491e+00 -1.354927e+01 8.643230e-02 - 9.820000e+00 -2.170806e+00 -1.356309e+01 8.658090e-02 - 9.830000e+00 -2.604164e+00 -1.357690e+01 8.683326e-02 - 9.840000e+00 -2.974131e+00 -1.359071e+01 8.709657e-02 - 9.850000e+00 -3.278823e+00 -1.360452e+01 8.727520e-02 - 9.860000e+00 -3.518798e+00 -1.361833e+01 8.730399e-02 - 9.870000e+00 -3.696842e+00 -1.363215e+01 8.717051e-02 - 9.880000e+00 -3.817675e+00 -1.364596e+01 8.691943e-02 - 9.890000e+00 -3.887602e+00 -1.365977e+01 8.663786e-02 - 9.900000e+00 -3.914115e+00 -1.367358e+01 8.642579e-02 - 9.910000e+00 -3.905480e+00 -1.368739e+01 8.636104e-02 - 9.920000e+00 -3.870320e+00 -1.370120e+01 8.647090e-02 - 9.930000e+00 -3.817203e+00 -1.371502e+01 8.672179e-02 - 9.940000e+00 -3.754274e+00 -1.372883e+01 8.703094e-02 - 9.950000e+00 -3.688918e+00 -1.374264e+01 8.729552e-02 - 9.960000e+00 -3.627475e+00 -1.375645e+01 8.742791e-02 - 9.970000e+00 -3.575013e+00 -1.377026e+01 8.738488e-02 - 9.980000e+00 -3.535158e+00 -1.378407e+01 8.718164e-02 - 9.990000e+00 -3.509989e+00 -1.379789e+01 8.688691e-02 - 1.000000e+01 -3.499993e+00 -1.381170e+01 8.660026e-02 - 1.001000e+01 -3.504072e+00 -1.382551e+01 8.641841e-02 - 1.002000e+01 -3.519616e+00 -1.383932e+01 8.640157e-02 - 1.003000e+01 -3.542627e+00 -1.385313e+01 8.655216e-02 - 1.004000e+01 -3.567881e+00 -1.386694e+01 8.681427e-02 - 1.005000e+01 -3.589155e+00 -1.388076e+01 8.709419e-02 - 1.006000e+01 -3.599469e+00 -1.389457e+01 8.729364e-02 - 1.007000e+01 -3.591385e+00 -1.390838e+01 8.734331e-02 - 1.008000e+01 -3.557318e+00 -1.392219e+01 8.722578e-02 - 1.009000e+01 -3.489873e+00 -1.393600e+01 8.698092e-02 - 1.010000e+01 -3.382189e+00 -1.394981e+01 8.669241e-02 - 1.011000e+01 -3.228289e+00 -1.396363e+01 8.645935e-02 - 1.012000e+01 -3.023408e+00 -1.397744e+01 8.636177e-02 - 1.013000e+01 -2.764303e+00 -1.399125e+01 8.643218e-02 - 1.014000e+01 -2.449523e+00 -1.400506e+01 8.664393e-02 - 1.015000e+01 -2.079619e+00 -1.401887e+01 8.692128e-02 - 1.016000e+01 -1.657294e+00 -1.403268e+01 8.716681e-02 - 1.017000e+01 -1.187470e+00 -1.404650e+01 8.729563e-02 - 1.018000e+01 -6.772696e-01 -1.406031e+01 8.726425e-02 - 1.019000e+01 -1.358937e-01 -1.407412e+01 8.708504e-02 - 1.020000e+01 4.255869e-01 -1.408793e+01 8.682200e-02 - 1.021000e+01 9.945439e-01 -1.410174e+01 8.656929e-02 - 1.022000e+01 1.557189e+00 -1.411555e+01 8.641868e-02 - 1.023000e+01 2.099047e+00 -1.412937e+01 8.642691e-02 - 1.024000e+01 2.605490e+00 -1.414318e+01 8.659488e-02 - 1.025000e+01 3.062306e+00 -1.415699e+01 8.686709e-02 - 1.026000e+01 3.456283e+00 -1.417080e+01 8.715138e-02 - 1.027000e+01 3.775775e+00 -1.418461e+01 8.735130e-02 - 1.028000e+01 4.011229e+00 -1.419842e+01 8.739897e-02 - 1.029000e+01 4.155640e+00 -1.421224e+01 8.727770e-02 - 1.030000e+01 4.204914e+00 -1.422605e+01 8.702751e-02 - 1.031000e+01 4.158113e+00 -1.423986e+01 8.673214e-02 - 1.032000e+01 4.017568e+00 -1.425367e+01 8.649118e-02 - 1.033000e+01 3.788855e+00 -1.426748e+01 8.638585e-02 - 1.034000e+01 3.480622e+00 -1.428129e+01 8.645047e-02 - 1.035000e+01 3.104278e+00 -1.429511e+01 8.666030e-02 - 1.036000e+01 2.673553e+00 -1.430892e+01 8.694084e-02 - 1.037000e+01 2.203951e+00 -1.432273e+01 8.719458e-02 - 1.038000e+01 1.712118e+00 -1.433654e+01 8.733498e-02 - 1.039000e+01 1.215153e+00 -1.435035e+01 8.731546e-02 - 1.040000e+01 7.298949e-01 -1.436417e+01 8.714454e-02 - 1.041000e+01 2.722260e-01 -1.437798e+01 8.688261e-02 - 1.042000e+01 -1.435834e-01 -1.439179e+01 8.662157e-02 - 1.043000e+01 -5.054535e-01 -1.440560e+01 8.645317e-02 - 1.044000e+01 -8.039674e-01 -1.441941e+01 8.643676e-02 - 1.045000e+01 -1.032717e+00 -1.443322e+01 8.657798e-02 - 1.046000e+01 -1.188507e+00 -1.444704e+01 8.682686e-02 - 1.047000e+01 -1.271401e+00 -1.446085e+01 8.709613e-02 - 1.048000e+01 -1.284622e+00 -1.447466e+01 8.729218e-02 - 1.049000e+01 -1.234299e+00 -1.448847e+01 8.734732e-02 - 1.050000e+01 -1.129080e+00 -1.450228e+01 8.724243e-02 - 1.051000e+01 -9.796357e-01 -1.451609e+01 8.701305e-02 - 1.052000e+01 -7.980667e-01 -1.452991e+01 8.673757e-02 - 1.053000e+01 -5.972583e-01 -1.454372e+01 8.651054e-02 - 1.054000e+01 -3.902032e-01 -1.455753e+01 8.640985e-02 - 1.055000e+01 -1.893300e-01 -1.457134e+01 8.646890e-02 - 1.056000e+01 -5.868969e-03 -1.458515e+01 8.666457e-02 - 1.057000e+01 1.507162e-01 -1.459896e+01 8.692576e-02 - 1.058000e+01 2.732033e-01 -1.461278e+01 8.715906e-02 - 1.059000e+01 3.569721e-01 -1.462659e+01 8.728155e-02 - 1.060000e+01 4.002350e-01 -1.464040e+01 8.724917e-02 - 1.061000e+01 4.041267e-01 -1.465421e+01 8.707157e-02 - 1.062000e+01 3.726514e-01 -1.466802e+01 8.680913e-02 - 1.063000e+01 3.124882e-01 -1.468183e+01 8.655297e-02 - 1.064000e+01 2.326669e-01 -1.469565e+01 8.639387e-02 - 1.065000e+01 1.441274e-01 -1.470946e+01 8.639026e-02 - 1.066000e+01 5.918253e-02 -1.472327e+01 8.654709e-02 - 1.067000e+01 -9.089408e-03 -1.473708e+01 8.681372e-02 - 1.068000e+01 -4.749838e-02 -1.475089e+01 8.710195e-02 - 1.069000e+01 -4.341128e-02 -1.476470e+01 8.731675e-02 - 1.070000e+01 1.459279e-02 -1.477852e+01 8.738842e-02 - 1.071000e+01 1.361100e-01 -1.479233e+01 8.729542e-02 - 1.072000e+01 3.283693e-01 -1.480614e+01 8.707112e-02 - 1.073000e+01 5.957845e-01 -1.481995e+01 8.679261e-02 - 1.074000e+01 9.396214e-01 -1.483376e+01 8.655478e-02 - 1.075000e+01 1.357797e+00 -1.484757e+01 8.643778e-02 - 1.076000e+01 1.844820e+00 -1.486139e+01 8.647898e-02 - 1.077000e+01 2.391879e+00 -1.487520e+01 8.665995e-02 - 1.078000e+01 2.987079e+00 -1.488901e+01 8.691370e-02 - 1.079000e+01 3.615810e+00 -1.490282e+01 8.714917e-02 - 1.080000e+01 4.261249e+00 -1.491663e+01 8.728329e-02 - 1.081000e+01 4.904966e+00 -1.493044e+01 8.726934e-02 - 1.082000e+01 5.527609e+00 -1.494426e+01 8.711234e-02 - 1.083000e+01 6.109646e+00 -1.495807e+01 8.686715e-02 - 1.084000e+01 6.632134e+00 -1.497188e+01 8.661987e-02 - 1.085000e+01 7.077476e+00 -1.498569e+01 8.645806e-02 - 1.086000e+01 7.430133e+00 -1.499950e+01 8.643983e-02 - 1.087000e+01 7.677269e+00 -1.501331e+01 8.657274e-02 - 1.088000e+01 7.809287e+00 -1.502713e+01 8.681111e-02 - 1.089000e+01 7.820243e+00 -1.504094e+01 8.707253e-02 - 1.090000e+01 7.708102e+00 -1.505475e+01 8.726713e-02 - 1.091000e+01 7.474844e+00 -1.506856e+01 8.732861e-02 - 1.092000e+01 7.126393e+00 -1.508237e+01 8.723654e-02 - 1.093000e+01 6.672383e+00 -1.509619e+01 8.702312e-02 - 1.094000e+01 6.125769e+00 -1.511000e+01 8.676251e-02 - 1.095000e+01 5.502291e+00 -1.512381e+01 8.654572e-02 - 1.096000e+01 4.819826e+00 -1.513762e+01 8.644903e-02 - 1.097000e+01 4.097651e+00 -1.515143e+01 8.650673e-02 - 1.098000e+01 3.355657e+00 -1.516524e+01 8.669867e-02 - 1.099000e+01 2.613538e+00 -1.517906e+01 8.695747e-02 - 1.100000e+01 1.890007e+00 -1.519287e+01 8.719265e-02 - 1.101000e+01 1.202072e+00 -1.520668e+01 8.732212e-02 - 1.102000e+01 5.644048e-01 -1.522049e+01 8.730016e-02 - 1.103000e+01 -1.117578e-02 -1.523430e+01 8.713260e-02 - 1.104000e+01 -5.160635e-01 -1.524811e+01 8.687511e-02 - 1.105000e+01 -9.450700e-01 -1.526193e+01 8.661474e-02 - 1.106000e+01 -1.296459e+00 -1.527574e+01 8.644044e-02 - 1.107000e+01 -1.571811e+00 -1.528955e+01 8.641206e-02 - 1.108000e+01 -1.775734e+00 -1.530336e+01 8.653895e-02 - 1.109000e+01 -1.915430e+00 -1.531717e+01 8.677666e-02 - 1.110000e+01 -2.000150e+00 -1.533098e+01 8.704302e-02 - 1.111000e+01 -2.040561e+00 -1.534480e+01 8.724705e-02 - 1.112000e+01 -2.048072e+00 -1.535861e+01 8.732011e-02 - 1.113000e+01 -2.034146e+00 -1.537242e+01 8.723861e-02 - 1.114000e+01 -2.009629e+00 -1.538623e+01 8.703151e-02 - 1.115000e+01 -1.984157e+00 -1.540004e+01 8.677052e-02 - 1.116000e+01 -1.965642e+00 -1.541385e+01 8.654577e-02 - 1.117000e+01 -1.959882e+00 -1.542767e+01 8.643477e-02 - 1.118000e+01 -1.970309e+00 -1.544148e+01 8.647500e-02 - 1.119000e+01 -1.997881e+00 -1.545529e+01 8.665064e-02 - 1.120000e+01 -2.041129e+00 -1.546910e+01 8.689860e-02 - 1.121000e+01 -2.096343e+00 -1.548291e+01 8.713137e-02 - 1.122000e+01 -2.157899e+00 -1.549672e+01 8.726780e-02 - 1.123000e+01 -2.218678e+00 -1.551054e+01 8.726082e-02 - 1.124000e+01 -2.270590e+00 -1.552435e+01 8.711302e-02 - 1.125000e+01 -2.305135e+00 -1.553816e+01 8.687573e-02 - 1.126000e+01 -2.313987e+00 -1.555197e+01 8.663170e-02 - 1.127000e+01 -2.289573e+00 -1.556578e+01 8.646671e-02 - 1.128000e+01 -2.225594e+00 -1.557959e+01 8.643942e-02 - 1.129000e+01 -2.117479e+00 -1.559341e+01 8.656027e-02 - 1.130000e+01 -1.962742e+00 -1.560722e+01 8.678773e-02 - 1.131000e+01 -1.761217e+00 -1.562103e+01 8.704332e-02 - 1.132000e+01 -1.515167e+00 -1.563484e+01 8.723945e-02 - 1.133000e+01 -1.229262e+00 -1.564865e+01 8.730965e-02 - 1.134000e+01 -9.104208e-01 -1.566246e+01 8.723088e-02 - 1.135000e+01 -5.675403e-01 -1.567628e+01 8.703110e-02 - 1.136000e+01 -2.111127e-01 -1.569009e+01 8.677987e-02 - 1.137000e+01 1.472366e-01 -1.570390e+01 8.656488e-02 - 1.138000e+01 4.952728e-01 -1.571771e+01 8.646148e-02 - 1.139000e+01 8.207056e-01 -1.573152e+01 8.650596e-02 - 1.140000e+01 1.111748e+00 -1.574533e+01 8.668240e-02 - 1.141000e+01 1.357647e+00 -1.575915e+01 8.692850e-02 - 1.142000e+01 1.549171e+00 -1.577296e+01 8.715797e-02 - 1.143000e+01 1.679013e+00 -1.578677e+01 8.729070e-02 - 1.144000e+01 1.742111e+00 -1.580058e+01 8.728018e-02 - 1.145000e+01 1.735857e+00 -1.581439e+01 8.712905e-02 - 1.146000e+01 1.660190e+00 -1.582820e+01 8.688833e-02 - 1.147000e+01 1.517580e+00 -1.584202e+01 8.664048e-02 - 1.148000e+01 1.312886e+00 -1.585583e+01 8.647135e-02 - 1.149000e+01 1.053117e+00 -1.586964e+01 8.644017e-02 - 1.150000e+01 7.471025e-01 -1.588345e+01 8.655827e-02 - 1.151000e+01 4.050765e-01 -1.589726e+01 8.678499e-02 - 1.152000e+01 3.822206e-02 -1.591108e+01 8.704223e-02 - 1.153000e+01 -3.418258e-01 -1.592489e+01 8.724198e-02 - 1.154000e+01 -7.234805e-01 -1.593870e+01 8.731646e-02 - 1.155000e+01 -1.095689e+00 -1.595251e+01 8.724078e-02 - 1.156000e+01 -1.448379e+00 -1.596632e+01 8.704099e-02 - 1.157000e+01 -1.772845e+00 -1.598013e+01 8.678539e-02 - 1.158000e+01 -2.062066e+00 -1.599395e+01 8.656163e-02 - 1.159000e+01 -2.310919e+00 -1.600776e+01 8.644656e-02 - 1.160000e+01 -2.516314e+00 -1.602157e+01 8.647927e-02 - 1.161000e+01 -2.677205e+00 -1.603538e+01 8.664723e-02 - 1.162000e+01 -2.794523e+00 -1.604919e+01 8.689108e-02 - 1.163000e+01 -2.870991e+00 -1.606300e+01 8.712607e-02 - 1.164000e+01 -2.910869e+00 -1.607682e+01 8.727177e-02 - 1.165000e+01 -2.919626e+00 -1.609063e+01 8.727937e-02 - 1.166000e+01 -2.903548e+00 -1.610444e+01 8.714783e-02 - 1.167000e+01 -2.869334e+00 -1.611825e+01 8.692387e-02 - 1.168000e+01 -2.823663e+00 -1.613206e+01 8.668616e-02 - 1.169000e+01 -2.772784e+00 -1.614587e+01 8.651824e-02 - 1.170000e+01 -2.722144e+00 -1.615969e+01 8.647921e-02 - 1.171000e+01 -2.676059e+00 -1.617350e+01 8.658254e-02 - 1.172000e+01 -2.637473e+00 -1.618731e+01 8.679125e-02 - 1.173000e+01 -2.607795e+00 -1.620112e+01 8.703142e-02 - 1.174000e+01 -2.586832e+00 -1.621493e+01 8.721852e-02 - 1.175000e+01 -2.572831e+00 -1.622874e+01 8.728674e-02 - 1.176000e+01 -2.562607e+00 -1.624256e+01 8.721136e-02 - 1.177000e+01 -2.551775e+00 -1.625637e+01 8.701698e-02 - 1.178000e+01 -2.535058e+00 -1.627018e+01 8.676945e-02 - 1.179000e+01 -2.506656e+00 -1.628399e+01 8.655367e-02 - 1.180000e+01 -2.460660e+00 -1.629780e+01 8.644429e-02 - 1.181000e+01 -2.391487e+00 -1.631161e+01 8.647926e-02 - 1.182000e+01 -2.294308e+00 -1.632543e+01 8.664617e-02 - 1.183000e+01 -2.165445e+00 -1.633924e+01 8.688672e-02 - 1.184000e+01 -2.002710e+00 -1.635305e+01 8.711760e-02 - 1.185000e+01 -1.805678e+00 -1.636686e+01 8.725964e-02 - 1.186000e+01 -1.575853e+00 -1.638067e+01 8.726476e-02 - 1.187000e+01 -1.316743e+00 -1.639448e+01 8.713197e-02 - 1.188000e+01 -1.033807e+00 -1.640830e+01 8.690762e-02 - 1.189000e+01 -7.343041e-01 -1.642211e+01 8.666991e-02 - 1.190000e+01 -4.270274e-01 -1.643592e+01 8.650215e-02 - 1.191000e+01 -1.219464e-01 -1.644973e+01 8.646365e-02 - 1.192000e+01 1.702256e-01 -1.646354e+01 8.656845e-02 - 1.193000e+01 4.385179e-01 -1.647735e+01 8.678025e-02 - 1.194000e+01 6.722155e-01 -1.649117e+01 8.702549e-02 - 1.195000e+01 8.613718e-01 -1.650498e+01 8.721939e-02 - 1.196000e+01 9.972917e-01 -1.651879e+01 8.729525e-02 - 1.197000e+01 1.072960e+00 -1.653260e+01 8.722691e-02 - 1.198000e+01 1.083388e+00 -1.654641e+01 8.703750e-02 - 1.199000e+01 1.025863e+00 -1.656022e+01 8.679182e-02 - 1.200000e+01 9.000883e-01 -1.657404e+01 8.657464e-02 - 1.201000e+01 7.081926e-01 -1.658785e+01 8.646157e-02 - 1.202000e+01 4.546330e-01 -1.660166e+01 8.649249e-02 - 1.203000e+01 1.459752e-01 -1.661547e+01 8.665720e-02 - 1.204000e+01 -2.094234e-01 -1.662928e+01 8.689918e-02 - 1.205000e+01 -6.018116e-01 -1.664310e+01 8.713577e-02 - 1.206000e+01 -1.020500e+00 -1.665691e+01 8.728698e-02 - 1.207000e+01 -1.454349e+00 -1.667072e+01 8.730257e-02 - 1.208000e+01 -1.892254e+00 -1.668453e+01 8.717861e-02 - 1.209000e+01 -2.323611e+00 -1.669834e+01 8.695856e-02 - 1.210000e+01 -2.738726e+00 -1.671215e+01 8.671861e-02 - 1.211000e+01 -3.129152e+00 -1.672597e+01 8.654174e-02 - 1.212000e+01 -3.487930e+00 -1.673978e+01 8.648877e-02 - 1.213000e+01 -3.809734e+00 -1.675359e+01 8.657682e-02 - 1.214000e+01 -4.090900e+00 -1.676740e+01 8.677324e-02 - 1.215000e+01 -4.329355e+00 -1.678121e+01 8.700753e-02 - 1.216000e+01 -4.524443e+00 -1.679502e+01 8.719647e-02 - 1.217000e+01 -4.676680e+00 -1.680884e+01 8.727295e-02 - 1.218000e+01 -4.787434e+00 -1.682265e+01 8.720863e-02 - 1.219000e+01 -4.858581e+00 -1.683646e+01 8.702334e-02 - 1.220000e+01 -4.892147e+00 -1.685027e+01 8.677848e-02 - 1.221000e+01 -4.889964e+00 -1.686408e+01 8.655639e-02 - 1.222000e+01 -4.853374e+00 -1.687789e+01 8.643217e-02 - 1.223000e+01 -4.782995e+00 -1.689171e+01 8.644725e-02 - 1.224000e+01 -4.678572e+00 -1.690552e+01 8.659482e-02 - 1.225000e+01 -4.538928e+00 -1.691933e+01 8.682247e-02 - 1.226000e+01 -4.362009e+00 -1.693314e+01 8.705119e-02 - 1.227000e+01 -4.145042e+00 -1.694695e+01 8.720315e-02 - 1.228000e+01 -3.884773e+00 -1.696076e+01 8.722833e-02 - 1.229000e+01 -3.577793e+00 -1.697458e+01 8.712105e-02 - 1.230000e+01 -3.220920e+00 -1.698839e+01 8.692162e-02 - 1.231000e+01 -2.811608e+00 -1.700220e+01 8.670249e-02 - 1.232000e+01 -2.348369e+00 -1.701601e+01 8.654327e-02 - 1.233000e+01 -1.831168e+00 -1.702982e+01 8.650268e-02 - 1.234000e+01 -1.261761e+00 -1.704363e+01 8.659741e-02 - 1.235000e+01 -6.439623e-01 -1.705745e+01 8.679596e-02 - 1.236000e+01 1.619533e-02 -1.707126e+01 8.702998e-02 - 1.237000e+01 7.104125e-01 -1.708507e+01 8.721853e-02 - 1.238000e+01 1.428205e+00 -1.709888e+01 8.729621e-02 - 1.239000e+01 2.157113e+00 -1.711269e+01 8.723538e-02 - 1.240000e+01 2.883035e+00 -1.712650e+01 8.705554e-02 - 1.241000e+01 3.590672e+00 -1.714032e+01 8.681702e-02 - 1.242000e+01 4.264062e+00 -1.715413e+01 8.660088e-02 - 1.243000e+01 4.887185e+00 -1.716794e+01 8.648117e-02 - 1.244000e+01 5.444599e+00 -1.718175e+01 8.649889e-02 - 1.245000e+01 5.922081e+00 -1.719556e+01 8.664741e-02 - 1.246000e+01 6.307240e+00 -1.720937e+01 8.687486e-02 - 1.247000e+01 6.590063e+00 -1.722319e+01 8.710268e-02 - 1.248000e+01 6.763375e+00 -1.723700e+01 8.725305e-02 - 1.249000e+01 6.823174e+00 -1.725081e+01 8.727533e-02 - 1.250000e+01 6.768833e+00 -1.726462e+01 8.716280e-02 - 1.251000e+01 6.603155e+00 -1.727843e+01 8.695464e-02 - 1.252000e+01 6.332272e+00 -1.729224e+01 8.672268e-02 - 1.253000e+01 5.965397e+00 -1.730606e+01 8.654691e-02 - 1.254000e+01 5.514443e+00 -1.731987e+01 8.648757e-02 - 1.255000e+01 4.993524e+00 -1.733368e+01 8.656378e-02 - 1.256000e+01 4.418364e+00 -1.734749e+01 8.674682e-02 - 1.257000e+01 3.805654e+00 -1.736130e+01 8.697064e-02 - 1.258000e+01 3.172377e+00 -1.737512e+01 8.715550e-02 - 1.259000e+01 2.535149e+00 -1.738893e+01 8.723579e-02 - 1.260000e+01 1.909600e+00 -1.740274e+01 8.718240e-02 - 1.261000e+01 1.309839e+00 -1.741655e+01 8.701253e-02 - 1.262000e+01 7.480110e-01 -1.743036e+01 8.678406e-02 - 1.263000e+01 2.339870e-01 -1.744417e+01 8.657617e-02 - 1.264000e+01 -2.248141e-01 -1.745799e+01 8.646206e-02 - 1.265000e+01 -6.234624e-01 -1.747180e+01 8.648318e-02 - 1.266000e+01 -9.594159e-01 -1.748561e+01 8.663426e-02 - 1.267000e+01 -1.232294e+00 -1.749942e+01 8.686518e-02 - 1.268000e+01 -1.443546e+00 -1.751323e+01 8.709868e-02 - 1.269000e+01 -1.596039e+00 -1.752704e+01 8.725726e-02 - 1.270000e+01 -1.693595e+00 -1.754086e+01 8.728943e-02 - 1.271000e+01 -1.740512e+00 -1.755467e+01 8.718665e-02 - 1.272000e+01 -1.741106e+00 -1.756848e+01 8.698587e-02 - 1.273000e+01 -1.699295e+00 -1.758229e+01 8.675708e-02 - 1.274000e+01 -1.618267e+00 -1.759610e+01 8.657944e-02 - 1.275000e+01 -1.500248e+00 -1.760991e+01 8.651388e-02 - 1.276000e+01 -1.346380e+00 -1.762373e+01 8.658162e-02 - 1.277000e+01 -1.156738e+00 -1.763754e+01 8.675681e-02 - 1.278000e+01 -9.304549e-01 -1.765135e+01 8.697617e-02 - 1.279000e+01 -6.659689e-01 -1.766516e+01 8.716167e-02 - 1.280000e+01 -3.613674e-01 -1.767897e+01 8.724787e-02 - 1.281000e+01 -1.479615e-02 -1.769278e+01 8.720413e-02 - 1.282000e+01 3.750883e-01 -1.770660e+01 8.704486e-02 - 1.283000e+01 8.086627e-01 -1.772041e+01 8.682463e-02 - 1.284000e+01 1.284911e+00 -1.773422e+01 8.661965e-02 - 1.285000e+01 1.801066e+00 -1.774803e+01 8.650142e-02 - 1.286000e+01 2.352344e+00 -1.776184e+01 8.651145e-02 - 1.287000e+01 2.931804e+00 -1.777565e+01 8.664630e-02 - 1.288000e+01 3.530348e+00 -1.778947e+01 8.685881e-02 - 1.289000e+01 4.136866e+00 -1.780328e+01 8.707494e-02 - 1.290000e+01 4.738538e+00 -1.781709e+01 8.721979e-02 - 1.291000e+01 5.321262e+00 -1.783090e+01 8.724332e-02 - 1.292000e+01 5.870205e+00 -1.784471e+01 8.713713e-02 - 1.293000e+01 6.370443e+00 -1.785852e+01 8.693730e-02 - 1.294000e+01 6.807651e+00 -1.787234e+01 8.671240e-02 - 1.295000e+01 7.168799e+00 -1.788615e+01 8.654021e-02 - 1.296000e+01 7.442828e+00 -1.789996e+01 8.648076e-02 - 1.297000e+01 7.621238e+00 -1.791377e+01 8.655504e-02 - 1.298000e+01 7.698580e+00 -1.792758e+01 8.673754e-02 - 1.299000e+01 7.672791e+00 -1.794139e+01 8.696542e-02 - 1.300000e+01 7.545364e+00 -1.795521e+01 8.716080e-02 - 1.301000e+01 7.321336e+00 -1.796902e+01 8.725769e-02 - 1.302000e+01 7.009091e+00 -1.798283e+01 8.722421e-02 - 1.303000e+01 6.619978e+00 -1.799664e+01 8.707300e-02 - 1.304000e+01 6.167776e+00 -1.801045e+01 8.685689e-02 - 1.305000e+01 5.668028e+00 -1.802426e+01 8.665092e-02 - 1.306000e+01 5.137281e+00 -1.803808e+01 8.652655e-02 - 1.307000e+01 4.592276e+00 -1.805189e+01 8.652657e-02 - 1.308000e+01 4.049143e+00 -1.806570e+01 8.664985e-02 - 1.309000e+01 3.522635e+00 -1.807951e+01 8.685195e-02 - 1.310000e+01 3.025452e+00 -1.809332e+01 8.706123e-02 - 1.311000e+01 2.567700e+00 -1.810714e+01 8.720411e-02 - 1.312000e+01 2.156499e+00 -1.812095e+01 8.723055e-02 - 1.313000e+01 1.795783e+00 -1.813476e+01 8.713085e-02 - 1.314000e+01 1.486275e+00 -1.814857e+01 8.693898e-02 - 1.315000e+01 1.225663e+00 -1.816238e+01 8.672112e-02 - 1.316000e+01 1.008933e+00 -1.817619e+01 8.655317e-02 - 1.317000e+01 8.288618e-01 -1.819001e+01 8.649430e-02 - 1.318000e+01 6.766120e-01 -1.820382e+01 8.656584e-02 - 1.319000e+01 5.424062e-01 -1.821763e+01 8.674359e-02 - 1.320000e+01 4.162247e-01 -1.823144e+01 8.696646e-02 - 1.321000e+01 2.884859e-01 -1.824525e+01 8.715806e-02 - 1.322000e+01 1.506670e-01 -1.825906e+01 8.725317e-02 - 1.323000e+01 -4.176142e-03 -1.827288e+01 8.721970e-02 - 1.324000e+01 -1.810185e-01 -1.828669e+01 8.706934e-02 - 1.325000e+01 -3.826260e-01 -1.830050e+01 8.685354e-02 - 1.326000e+01 -6.094786e-01 -1.831431e+01 8.664622e-02 - 1.327000e+01 -8.598531e-01 -1.832812e+01 8.651835e-02 - 1.328000e+01 -1.130056e+00 -1.834193e+01 8.651319e-02 - 1.329000e+01 -1.414786e+00 -1.835575e+01 8.663091e-02 - 1.330000e+01 -1.707590e+00 -1.836956e+01 8.682878e-02 - 1.331000e+01 -2.001388e+00 -1.838337e+01 8.703661e-02 - 1.332000e+01 -2.289020e+00 -1.839718e+01 8.718159e-02 - 1.333000e+01 -2.563773e+00 -1.841099e+01 8.721341e-02 - 1.334000e+01 -2.819863e+00 -1.842480e+01 8.712116e-02 - 1.335000e+01 -3.052826e+00 -1.843862e+01 8.693697e-02 - 1.336000e+01 -3.259805e+00 -1.845243e+01 8.672516e-02 - 1.337000e+01 -3.439707e+00 -1.846624e+01 8.656022e-02 - 1.338000e+01 -3.593226e+00 -1.848005e+01 8.650086e-02 - 1.339000e+01 -3.722743e+00 -1.849386e+01 8.656903e-02 - 1.340000e+01 -3.832096e+00 -1.850767e+01 8.674195e-02 - 1.341000e+01 -3.926265e+00 -1.852149e+01 8.696027e-02 - 1.342000e+01 -4.010981e+00 -1.853530e+01 8.714905e-02 - 1.343000e+01 -4.092286e+00 -1.854911e+01 8.724376e-02 - 1.344000e+01 -4.176105e+00 -1.856292e+01 8.721219e-02 - 1.345000e+01 -4.267821e+00 -1.857673e+01 8.706518e-02 - 1.346000e+01 -4.371916e+00 -1.859054e+01 8.685304e-02 - 1.347000e+01 -4.491687e+00 -1.860436e+01 8.664868e-02 - 1.348000e+01 -4.629050e+00 -1.861817e+01 8.652270e-02 - 1.349000e+01 -4.784448e+00 -1.863198e+01 8.651870e-02 - 1.350000e+01 -4.956864e+00 -1.864579e+01 8.663784e-02 - 1.351000e+01 -5.143928e+00 -1.865960e+01 8.683855e-02 - 1.352000e+01 -5.342101e+00 -1.867341e+01 8.705148e-02 - 1.353000e+01 -5.546924e+00 -1.868723e+01 8.720391e-02 - 1.354000e+01 -5.753306e+00 -1.870104e+01 8.724463e-02 - 1.355000e+01 -5.955817e+00 -1.871485e+01 8.716110e-02 - 1.356000e+01 -6.148971e+00 -1.872866e+01 8.698342e-02 - 1.357000e+01 -6.327478e+00 -1.874247e+01 8.677405e-02 - 1.358000e+01 -6.486436e+00 -1.875628e+01 8.660648e-02 - 1.359000e+01 -6.621461e+00 -1.877010e+01 8.653958e-02 - 1.360000e+01 -6.728749e+00 -1.878391e+01 8.659674e-02 - 1.361000e+01 -6.805065e+00 -1.879772e+01 8.675746e-02 - 1.362000e+01 -6.847679e+00 -1.881153e+01 8.696484e-02 - 1.363000e+01 -6.854252e+00 -1.882534e+01 8.714585e-02 - 1.364000e+01 -6.822699e+00 -1.883915e+01 8.723680e-02 - 1.365000e+01 -6.751047e+00 -1.885297e+01 8.720513e-02 - 1.366000e+01 -6.637312e+00 -1.886678e+01 8.706033e-02 - 1.367000e+01 -6.479411e+00 -1.888059e+01 8.685082e-02 - 1.368000e+01 -6.275138e+00 -1.889440e+01 8.664769e-02 - 1.369000e+01 -6.022197e+00 -1.890821e+01 8.652037e-02 - 1.370000e+01 -5.718318e+00 -1.892203e+01 8.651225e-02 - 1.371000e+01 -5.361436e+00 -1.893584e+01 8.662527e-02 - 1.372000e+01 -4.949941e+00 -1.894965e+01 8.681930e-02 - 1.373000e+01 -4.482964e+00 -1.896346e+01 8.702647e-02 - 1.374000e+01 -3.960701e+00 -1.897727e+01 8.717513e-02 - 1.375000e+01 -3.384724e+00 -1.899108e+01 8.721440e-02 - 1.376000e+01 -2.758268e+00 -1.900490e+01 8.713130e-02 - 1.377000e+01 -2.086466e+00 -1.901871e+01 8.695496e-02 - 1.378000e+01 -1.376492e+00 -1.903252e+01 8.674677e-02 - 1.379000e+01 -6.376060e-01 -1.904633e+01 8.657948e-02 - 1.380000e+01 1.189154e-01 -1.906014e+01 8.651187e-02 - 1.381000e+01 8.799825e-01 -1.907395e+01 8.656795e-02 - 1.382000e+01 1.631013e+00 -1.908777e+01 8.672833e-02 - 1.383000e+01 2.356368e+00 -1.910158e+01 8.693729e-02 - 1.384000e+01 3.039881e+00 -1.911539e+01 8.712256e-02 - 1.385000e+01 3.665462e+00 -1.912920e+01 8.722057e-02 - 1.386000e+01 4.217727e+00 -1.914301e+01 8.719805e-02 - 1.387000e+01 4.682640e+00 -1.915682e+01 8.706323e-02 - 1.388000e+01 5.048115e+00 -1.917064e+01 8.686301e-02 - 1.389000e+01 5.304554e+00 -1.918445e+01 8.666718e-02 - 1.390000e+01 5.445279e+00 -1.919826e+01 8.654443e-02 - 1.391000e+01 5.466843e+00 -1.921207e+01 8.653820e-02 - 1.392000e+01 5.369194e+00 -1.922588e+01 8.665117e-02 - 1.393000e+01 5.155694e+00 -1.923969e+01 8.684424e-02 - 1.394000e+01 4.832977e+00 -1.925351e+01 8.705052e-02 - 1.395000e+01 4.410678e+00 -1.926732e+01 8.719880e-02 - 1.396000e+01 3.901022e+00 -1.928113e+01 8.723803e-02 - 1.397000e+01 3.318331e+00 -1.929494e+01 8.715449e-02 - 1.398000e+01 2.678455e+00 -1.930875e+01 8.697640e-02 - 1.399000e+01 1.998167e+00 -1.932256e+01 8.676445e-02 - 1.400000e+01 1.294562e+00 -1.933638e+01 8.659131e-02 - 1.401000e+01 5.844846e-01 -1.935019e+01 8.651647e-02 - 1.402000e+01 -1.159802e-01 -1.936400e+01 8.656534e-02 - 1.403000e+01 -7.919358e-01 -1.937781e+01 8.672021e-02 - 1.404000e+01 -1.430003e+00 -1.939162e+01 8.692668e-02 - 1.405000e+01 -2.018545e+00 -1.940543e+01 8.711310e-02 - 1.406000e+01 -2.547779e+00 -1.941925e+01 8.721543e-02 - 1.407000e+01 -3.009802e+00 -1.943306e+01 8.719908e-02 - 1.408000e+01 -3.398520e+00 -1.944687e+01 8.707031e-02 - 1.409000e+01 -3.709518e+00 -1.946068e+01 8.687410e-02 - 1.410000e+01 -3.939893e+00 -1.947449e+01 8.667883e-02 - 1.411000e+01 -4.088053e+00 -1.948830e+01 8.655280e-02 - 1.412000e+01 -4.153539e+00 -1.950212e+01 8.654022e-02 - 1.413000e+01 -4.136856e+00 -1.951593e+01 8.664544e-02 - 1.414000e+01 -4.039348e+00 -1.952974e+01 8.683144e-02 - 1.415000e+01 -3.863122e+00 -1.954355e+01 8.703311e-02 - 1.416000e+01 -3.611024e+00 -1.955736e+01 8.718022e-02 - 1.417000e+01 -3.286660e+00 -1.957117e+01 8.722168e-02 - 1.418000e+01 -2.894460e+00 -1.958499e+01 8.714281e-02 - 1.419000e+01 -2.439767e+00 -1.959880e+01 8.697027e-02 - 1.420000e+01 -1.928925e+00 -1.961261e+01 8.676321e-02 - 1.421000e+01 -1.369369e+00 -1.962642e+01 8.659313e-02 - 1.422000e+01 -7.696641e-01 -1.964023e+01 8.651919e-02 - 1.423000e+01 -1.395087e-01 -1.965405e+01 8.656721e-02 - 1.424000e+01 5.103362e-01 -1.966786e+01 8.672041e-02 - 1.425000e+01 1.168189e+00 -1.968167e+01 8.692539e-02 - 1.426000e+01 1.821671e+00 -1.969548e+01 8.711108e-02 - 1.427000e+01 2.457998e+00 -1.970929e+01 8.721334e-02 - 1.428000e+01 3.064343e+00 -1.972310e+01 8.719685e-02 - 1.429000e+01 3.628244e+00 -1.973692e+01 8.706682e-02 - 1.430000e+01 4.138038e+00 -1.975073e+01 8.686730e-02 - 1.431000e+01 4.583296e+00 -1.976454e+01 8.666640e-02 - 1.432000e+01 4.955240e+00 -1.977835e+01 8.653308e-02 - 1.433000e+01 5.247099e+00 -1.979216e+01 8.651313e-02 - 1.434000e+01 5.454396e+00 -1.980597e+01 8.661301e-02 - 1.435000e+01 5.575138e+00 -1.981979e+01 8.679766e-02 - 1.436000e+01 5.609900e+00 -1.983360e+01 8.700313e-02 - 1.437000e+01 5.561781e+00 -1.984741e+01 8.715912e-02 - 1.438000e+01 5.436253e+00 -1.986122e+01 8.721313e-02 - 1.439000e+01 5.240895e+00 -1.987503e+01 8.714810e-02 - 1.440000e+01 4.985026e+00 -1.988884e+01 8.698788e-02 - 1.441000e+01 4.679273e+00 -1.990266e+01 8.678910e-02 - 1.442000e+01 4.335075e+00 -1.991647e+01 8.662183e-02 - 1.443000e+01 3.964178e+00 -1.993028e+01 8.654520e-02 - 1.444000e+01 3.578123e+00 -1.994409e+01 8.658651e-02 - 1.445000e+01 3.187783e+00 -1.995790e+01 8.673150e-02 - 1.446000e+01 2.802954e+00 -1.997171e+01 8.692952e-02 - 1.447000e+01 2.432023e+00 -1.998553e+01 8.711160e-02 - 1.448000e+01 2.081747e+00 -1.999934e+01 8.721460e-02 - 1.449000e+01 1.757120e+00 -2.001315e+01 8.720277e-02 - 1.450000e+01 1.461361e+00 -2.002696e+01 8.707979e-02 - 1.451000e+01 1.195997e+00 -2.004077e+01 8.688753e-02 - 1.452000e+01 9.610290e-01 -2.005458e+01 8.669200e-02 - 1.453000e+01 7.551803e-01 -2.006840e+01 8.656071e-02 - 1.454000e+01 5.761841e-01 -2.008221e+01 8.653907e-02 - 1.455000e+01 4.211026e-01 -2.009602e+01 8.663426e-02 - 1.456000e+01 2.866464e-01 -2.010983e+01 8.681266e-02 - 1.457000e+01 1.694743e-01 -2.012364e+01 8.701187e-02 - 1.458000e+01 6.645185e-02 -2.013745e+01 8.716272e-02 - 1.459000e+01 -2.514443e-02 -2.015127e+01 8.721308e-02 - 1.460000e+01 -1.074894e-01 -2.016508e+01 8.714545e-02 - 1.461000e+01 -1.821416e-01 -2.017889e+01 8.698281e-02 - 1.462000e+01 -2.500448e-01 -2.019270e+01 8.678086e-02 - 1.463000e+01 -3.115920e-01 -2.020651e+01 8.660920e-02 - 1.464000e+01 -3.667410e-01 -2.022032e+01 8.652729e-02 - 1.465000e+01 -4.151668e-01 -2.023414e+01 8.656352e-02 - 1.466000e+01 -4.564340e-01 -2.024795e+01 8.670512e-02 - 1.467000e+01 -4.901719e-01 -2.026176e+01 8.690285e-02 - 1.468000e+01 -5.162349e-01 -2.027557e+01 8.708850e-02 - 1.469000e+01 -5.348347e-01 -2.028938e+01 8.719871e-02 - 1.470000e+01 -5.466305e-01 -2.030319e+01 8.719651e-02 - 1.471000e+01 -5.527720e-01 -2.031701e+01 8.708366e-02 - 1.472000e+01 -5.548896e-01 -2.033082e+01 8.689996e-02 - 1.473000e+01 -5.550346e-01 -2.034463e+01 8.670973e-02 - 1.474000e+01 -5.555731e-01 -2.035844e+01 8.657974e-02 - 1.475000e+01 -5.590439e-01 -2.037225e+01 8.655587e-02 - 1.476000e+01 -5.679911e-01 -2.038607e+01 8.664678e-02 - 1.477000e+01 -5.847853e-01 -2.039988e+01 8.682083e-02 - 1.478000e+01 -6.114465e-01 -2.041369e+01 8.701749e-02 - 1.479000e+01 -6.494827e-01 -2.042750e+01 8.716862e-02 - 1.480000e+01 -6.997548e-01 -2.044131e+01 8.722207e-02 - 1.481000e+01 -7.623785e-01 -2.045512e+01 8.715926e-02 - 1.482000e+01 -8.366678e-01 -2.046894e+01 8.700137e-02 - 1.483000e+01 -9.211228e-01 -2.048275e+01 8.680223e-02 - 1.484000e+01 -1.013463e+00 -2.049656e+01 8.663007e-02 - 1.485000e+01 -1.110697e+00 -2.051037e+01 8.654393e-02 - 1.486000e+01 -1.209235e+00 -2.052418e+01 8.657293e-02 - 1.487000e+01 -1.305011e+00 -2.053799e+01 8.670590e-02 - 1.488000e+01 -1.393638e+00 -2.055181e+01 8.689546e-02 - 1.489000e+01 -1.470557e+00 -2.056562e+01 8.707496e-02 - 1.490000e+01 -1.531186e+00 -2.057943e+01 8.718178e-02 - 1.491000e+01 -1.571064e+00 -2.059324e+01 8.717868e-02 - 1.492000e+01 -1.585969e+00 -2.060705e+01 8.706638e-02 - 1.493000e+01 -1.572029e+00 -2.062086e+01 8.688319e-02 - 1.494000e+01 -1.525798e+00 -2.063468e+01 8.669216e-02 - 1.495000e+01 -1.444329e+00 -2.064849e+01 8.655945e-02 - 1.496000e+01 -1.325218e+00 -2.066230e+01 8.653123e-02 - 1.497000e+01 -1.166644e+00 -2.067611e+01 8.661736e-02 - 1.498000e+01 -9.674051e-01 -2.068992e+01 8.678785e-02 - 1.499000e+01 -7.269469e-01 -2.070373e+01 8.698363e-02 - 1.500000e+01 -4.454000e-01 -2.071755e+01 8.713743e-02 - 1.501000e+01 -1.236221e-01 -2.073136e+01 8.719695e-02 - 1.502000e+01 2.367538e-01 -2.074517e+01 8.714255e-02 - 1.503000e+01 6.332650e-01 -2.075898e+01 8.699371e-02 - 1.504000e+01 1.062564e+00 -2.077279e+01 8.680245e-02 - 1.505000e+01 1.520368e+00 -2.078660e+01 8.663558e-02 - 1.506000e+01 2.001423e+00 -2.080042e+01 8.655162e-02 - 1.507000e+01 2.499483e+00 -2.081423e+01 8.658014e-02 - 1.508000e+01 3.007331e+00 -2.082804e+01 8.671129e-02 - 1.509000e+01 3.516827e+00 -2.084185e+01 8.689934e-02 - 1.510000e+01 4.019008e+00 -2.085566e+01 8.707903e-02 - 1.511000e+01 4.504236e+00 -2.086947e+01 8.718840e-02 - 1.512000e+01 4.962400e+00 -2.088329e+01 8.719001e-02 - 1.513000e+01 5.383163e+00 -2.089710e+01 8.708351e-02 - 1.514000e+01 5.756255e+00 -2.091091e+01 8.690578e-02 - 1.515000e+01 6.071799e+00 -2.092472e+01 8.671843e-02 - 1.516000e+01 6.320652e+00 -2.093853e+01 8.658676e-02 - 1.517000e+01 6.494763e+00 -2.095234e+01 8.655692e-02 - 1.518000e+01 6.587501e+00 -2.096616e+01 8.663953e-02 - 1.519000e+01 6.593970e+00 -2.097997e+01 8.680590e-02 - 1.520000e+01 6.511261e+00 -2.099378e+01 8.699829e-02 - 1.521000e+01 6.338644e+00 -2.100759e+01 8.715026e-02 - 1.522000e+01 6.077686e+00 -2.102140e+01 8.720959e-02 - 1.523000e+01 5.732276e+00 -2.103521e+01 8.715597e-02 - 1.524000e+01 5.308559e+00 -2.104903e+01 8.700773e-02 - 1.525000e+01 4.814774e+00 -2.106284e+01 8.681567e-02 - 1.526000e+01 4.261014e+00 -2.107665e+01 8.664582e-02 - 1.527000e+01 3.658895e+00 -2.109046e+01 8.655666e-02 - 1.528000e+01 3.021173e+00 -2.110427e+01 8.657858e-02 - 1.529000e+01 2.361305e+00 -2.111808e+01 8.670310e-02 - 1.530000e+01 1.692992e+00 -2.113190e+01 8.688598e-02 - 1.531000e+01 1.029719e+00 -2.114571e+01 8.706302e-02 - 1.532000e+01 3.843055e-01 -2.115952e+01 8.717253e-02 - 1.533000e+01 -2.314983e-01 -2.117333e+01 8.717646e-02 - 1.534000e+01 -8.073607e-01 -2.118714e+01 8.707316e-02 - 1.535000e+01 -1.334647e+00 -2.120096e+01 8.689792e-02 - 1.536000e+01 -1.806617e+00 -2.121477e+01 8.671103e-02 - 1.537000e+01 -2.218534e+00 -2.122858e+01 8.657716e-02 - 1.538000e+01 -2.567686e+00 -2.124239e+01 8.654282e-02 - 1.539000e+01 -2.853326e+00 -2.125620e+01 8.661987e-02 - 1.540000e+01 -3.076533e+00 -2.127001e+01 8.678136e-02 - 1.541000e+01 -3.240015e+00 -2.128383e+01 8.697121e-02 - 1.542000e+01 -3.347861e+00 -2.129764e+01 8.712405e-02 - 1.543000e+01 -3.405258e+00 -2.131145e+01 8.718786e-02 - 1.544000e+01 -3.418200e+00 -2.132526e+01 8.714159e-02 - 1.545000e+01 -3.393192e+00 -2.133907e+01 8.700214e-02 - 1.546000e+01 -3.336974e+00 -2.135288e+01 8.681863e-02 - 1.547000e+01 -3.256275e+00 -2.136670e+01 8.665566e-02 - 1.548000e+01 -3.157593e+00 -2.138051e+01 8.657086e-02 - 1.549000e+01 -3.047040e+00 -2.139432e+01 8.659456e-02 - 1.550000e+01 -2.930208e+00 -2.140813e+01 8.671892e-02 - 1.551000e+01 -2.812102e+00 -2.142194e+01 8.690064e-02 - 1.552000e+01 -2.697099e+00 -2.143575e+01 8.707639e-02 - 1.553000e+01 -2.588949e+00 -2.144957e+01 8.718490e-02 - 1.554000e+01 -2.490803e+00 -2.146338e+01 8.718799e-02 - 1.555000e+01 -2.405253e+00 -2.147719e+01 8.708347e-02 - 1.556000e+01 -2.334388e+00 -2.149100e+01 8.690596e-02 - 1.557000e+01 -2.279846e+00 -2.150481e+01 8.671539e-02 - 1.558000e+01 -2.242860e+00 -2.151862e+01 8.657662e-02 - 1.559000e+01 -2.224294e+00 -2.153244e+01 8.653701e-02 - 1.560000e+01 -2.224665e+00 -2.154625e+01 8.660975e-02 - 1.561000e+01 -2.244148e+00 -2.156006e+01 8.676924e-02 - 1.562000e+01 -2.282567e+00 -2.157387e+01 8.696030e-02 - 1.563000e+01 -2.339377e+00 -2.158768e+01 8.711762e-02 - 1.564000e+01 -2.413641e+00 -2.160149e+01 8.718828e-02 - 1.565000e+01 -2.504009e+00 -2.161531e+01 8.714959e-02 - 1.566000e+01 -2.608694e+00 -2.162912e+01 8.701652e-02 - 1.567000e+01 -2.725478e+00 -2.164293e+01 8.683646e-02 - 1.568000e+01 -2.851718e+00 -2.165674e+01 8.667307e-02 - 1.569000e+01 -2.984382e+00 -2.167055e+01 8.658420e-02 - 1.570000e+01 -3.120107e+00 -2.168436e+01 8.660152e-02 - 1.571000e+01 -3.255281e+00 -2.169818e+01 8.671925e-02 - 1.572000e+01 -3.386141e+00 -2.171199e+01 8.689629e-02 - 1.573000e+01 -3.508893e+00 -2.172580e+01 8.707088e-02 - 1.574000e+01 -3.619842e+00 -2.173961e+01 8.718225e-02 - 1.575000e+01 -3.715524e+00 -2.175342e+01 8.719152e-02 - 1.576000e+01 -3.792840e+00 -2.176723e+01 8.709476e-02 - 1.577000e+01 -3.849176e+00 -2.178105e+01 8.692438e-02 - 1.578000e+01 -3.882504e+00 -2.179486e+01 8.673815e-02 - 1.579000e+01 -3.891464e+00 -2.180867e+01 8.659954e-02 - 1.580000e+01 -3.875416e+00 -2.182248e+01 8.655563e-02 - 1.581000e+01 -3.834455e+00 -2.183629e+01 8.662049e-02 - 1.582000e+01 -3.769399e+00 -2.185010e+01 8.677023e-02 - 1.583000e+01 -3.681745e+00 -2.186392e+01 8.695160e-02 - 1.584000e+01 -3.573588e+00 -2.187773e+01 8.710090e-02 - 1.585000e+01 -3.447530e+00 -2.189154e+01 8.716604e-02 - 1.586000e+01 -3.306553e+00 -2.190535e+01 8.712429e-02 - 1.587000e+01 -3.153896e+00 -2.191916e+01 8.698994e-02 - 1.588000e+01 -2.992916e+00 -2.193298e+01 8.680943e-02 - 1.589000e+01 -2.826957e+00 -2.194679e+01 8.664565e-02 - 1.590000e+01 -2.659230e+00 -2.196060e+01 8.655622e-02 - 1.591000e+01 -2.492706e+00 -2.197441e+01 8.657323e-02 - 1.592000e+01 -2.330024e+00 -2.198822e+01 8.669178e-02 - 1.593000e+01 -2.173434e+00 -2.200203e+01 8.687175e-02 - 1.594000e+01 -2.024744e+00 -2.201585e+01 8.705200e-02 - 1.595000e+01 -1.885313e+00 -2.202966e+01 8.717166e-02 - 1.596000e+01 -1.756044e+00 -2.204347e+01 8.719096e-02 - 1.597000e+01 -1.637404e+00 -2.205728e+01 8.710449e-02 - 1.598000e+01 -1.529458e+00 -2.207109e+01 8.694291e-02 - 1.599000e+01 -1.431911e+00 -2.208490e+01 8.676253e-02 - 1.600000e+01 -1.344145e+00 -2.209872e+01 8.662605e-02 - 1.601000e+01 -1.265271e+00 -2.211253e+01 8.658077e-02 - 1.602000e+01 -1.194158e+00 -2.212634e+01 8.664190e-02 - 1.603000e+01 -1.129475e+00 -2.214015e+01 8.678723e-02 - 1.604000e+01 -1.069708e+00 -2.215396e+01 8.696517e-02 - 1.605000e+01 -1.013175e+00 -2.216777e+01 8.711310e-02 - 1.606000e+01 -9.580365e-01 -2.218159e+01 8.717913e-02 - 1.607000e+01 -9.022976e-01 -2.219540e+01 8.713980e-02 - 1.608000e+01 -8.438092e-01 -2.220921e+01 8.700803e-02 - 1.609000e+01 -7.802728e-01 -2.222302e+01 8.682870e-02 - 1.610000e+01 -7.092517e-01 -2.223683e+01 8.666351e-02 - 1.611000e+01 -6.281935e-01 -2.225064e+01 8.656967e-02 - 1.612000e+01 -5.344664e-01 -2.226446e+01 8.657978e-02 - 1.613000e+01 -4.254127e-01 -2.227827e+01 8.669028e-02 - 1.614000e+01 -2.984207e-01 -2.229208e+01 8.686268e-02 - 1.615000e+01 -1.510139e-01 -2.230589e+01 8.703726e-02 - 1.616000e+01 1.904334e-02 -2.231970e+01 8.715393e-02 - 1.617000e+01 2.136275e-01 -2.233351e+01 8.717286e-02 - 1.618000e+01 4.341297e-01 -2.234733e+01 8.708780e-02 - 1.619000e+01 6.813283e-01 -2.236114e+01 8.692818e-02 - 1.620000e+01 9.552663e-01 -2.237495e+01 8.674911e-02 - 1.621000e+01 1.255142e+00 -2.238876e+01 8.661257e-02 - 1.622000e+01 1.579220e+00 -2.240257e+01 8.656588e-02 - 1.623000e+01 1.924770e+00 -2.241638e+01 8.662499e-02 - 1.624000e+01 2.288039e+00 -2.243020e+01 8.676888e-02 - 1.625000e+01 2.664263e+00 -2.244401e+01 8.694708e-02 - 1.626000e+01 3.047722e+00 -2.245782e+01 8.709763e-02 - 1.627000e+01 3.431836e+00 -2.247163e+01 8.716854e-02 - 1.628000e+01 3.809304e+00 -2.248544e+01 8.713550e-02 - 1.629000e+01 4.172289e+00 -2.249925e+01 8.701008e-02 - 1.630000e+01 4.512626e+00 -2.251307e+01 8.683574e-02 - 1.631000e+01 4.822073e+00 -2.252688e+01 8.667314e-02 - 1.632000e+01 5.092568e+00 -2.254069e+01 8.657922e-02 - 1.633000e+01 5.316504e+00 -2.255450e+01 8.658719e-02 - 1.634000e+01 5.487003e+00 -2.256831e+01 8.669477e-02 - 1.635000e+01 5.598176e+00 -2.258212e+01 8.686500e-02 - 1.636000e+01 5.645362e+00 -2.259594e+01 8.703936e-02 - 1.637000e+01 5.625337e+00 -2.260975e+01 8.715825e-02 - 1.638000e+01 5.536483e+00 -2.262356e+01 8.718141e-02 - 1.639000e+01 5.378903e+00 -2.263737e+01 8.710144e-02 - 1.640000e+01 5.154495e+00 -2.265118e+01 8.694617e-02 - 1.641000e+01 4.866954e+00 -2.266500e+01 8.676927e-02 - 1.642000e+01 4.521731e+00 -2.267881e+01 8.663185e-02 - 1.643000e+01 4.125925e+00 -2.269262e+01 8.658129e-02 - 1.644000e+01 3.688121e+00 -2.270643e+01 8.663452e-02 - 1.645000e+01 3.218184e+00 -2.272024e+01 8.677209e-02 - 1.646000e+01 2.727006e+00 -2.273405e+01 8.694519e-02 - 1.647000e+01 2.226214e+00 -2.274787e+01 8.709303e-02 - 1.648000e+01 1.727859e+00 -2.276168e+01 8.716397e-02 - 1.649000e+01 1.244083e+00 -2.277549e+01 8.713314e-02 - 1.650000e+01 7.867764e-01 -2.278930e+01 8.701083e-02 - 1.651000e+01 3.672473e-01 -2.280311e+01 8.683899e-02 - 1.652000e+01 -4.106897e-03 -2.281692e+01 8.667696e-02 - 1.653000e+01 -3.180983e-01 -2.283074e+01 8.658105e-02 - 1.654000e+01 -5.670198e-01 -2.284455e+01 8.658475e-02 - 1.655000e+01 -7.448772e-01 -2.285836e+01 8.668684e-02 - 1.656000e+01 -8.475763e-01 -2.287217e+01 8.685183e-02 - 1.657000e+01 -8.730600e-01 -2.288598e+01 8.702265e-02 - 1.658000e+01 -8.213907e-01 -2.289979e+01 8.714060e-02 - 1.659000e+01 -6.947757e-01 -2.291361e+01 8.716553e-02 - 1.660000e+01 -4.975349e-01 -2.292742e+01 8.708940e-02 - 1.661000e+01 -2.360089e-01 -2.294123e+01 8.693890e-02 - 1.662000e+01 8.158785e-02 -2.295504e+01 8.676641e-02 - 1.663000e+01 4.453688e-01 -2.296885e+01 8.663207e-02 - 1.664000e+01 8.440257e-01 -2.298266e+01 8.658288e-02 - 1.665000e+01 1.265123e+00 -2.299648e+01 8.663604e-02 - 1.666000e+01 1.695427e+00 -2.301029e+01 8.677288e-02 - 1.667000e+01 2.121268e+00 -2.302410e+01 8.694556e-02 - 1.668000e+01 2.528916e+00 -2.303791e+01 8.709395e-02 - 1.669000e+01 2.904967e+00 -2.305172e+01 8.716660e-02 - 1.670000e+01 3.236733e+00 -2.306553e+01 8.713823e-02 - 1.671000e+01 3.512608e+00 -2.307935e+01 8.701830e-02 - 1.672000e+01 3.722423e+00 -2.309316e+01 8.684779e-02 - 1.673000e+01 3.857756e+00 -2.310697e+01 8.668536e-02 - 1.674000e+01 3.912201e+00 -2.312078e+01 8.658717e-02 - 1.675000e+01 3.881580e+00 -2.313459e+01 8.658725e-02 - 1.676000e+01 3.764095e+00 -2.314840e+01 8.668542e-02 - 1.677000e+01 3.560410e+00 -2.316222e+01 8.684746e-02 - 1.678000e+01 3.273652e+00 -2.317603e+01 8.701727e-02 - 1.679000e+01 2.909355e+00 -2.318984e+01 8.713655e-02 - 1.680000e+01 2.475305e+00 -2.320365e+01 8.716485e-02 - 1.681000e+01 1.981337e+00 -2.321746e+01 8.709319e-02 - 1.682000e+01 1.439047e+00 -2.323127e+01 8.694702e-02 - 1.683000e+01 8.614615e-01 -2.324509e+01 8.677753e-02 - 1.684000e+01 2.626474e-01 -2.325890e+01 8.664413e-02 - 1.685000e+01 -3.427034e-01 -2.327271e+01 8.659376e-02 - 1.686000e+01 -9.397152e-01 -2.328652e+01 8.664432e-02 - 1.687000e+01 -1.513775e+00 -2.330033e+01 8.677822e-02 - 1.688000e+01 -2.050971e+00 -2.331414e+01 8.694875e-02 - 1.689000e+01 -2.538503e+00 -2.332796e+01 8.709653e-02 - 1.690000e+01 -2.965063e+00 -2.334177e+01 8.717022e-02 - 1.691000e+01 -3.321160e+00 -2.335558e+01 8.714398e-02 - 1.692000e+01 -3.599382e+00 -2.336939e+01 8.702621e-02 - 1.693000e+01 -3.794593e+00 -2.338320e+01 8.685672e-02 - 1.694000e+01 -3.904057e+00 -2.339702e+01 8.669324e-02 - 1.695000e+01 -3.927475e+00 -2.341083e+01 8.659162e-02 - 1.696000e+01 -3.866950e+00 -2.342464e+01 8.658630e-02 - 1.697000e+01 -3.726880e+00 -2.343845e+01 8.667811e-02 - 1.698000e+01 -3.513775e+00 -2.345226e+01 8.683405e-02 - 1.699000e+01 -3.236015e+00 -2.346607e+01 8.699912e-02 - 1.700000e+01 -2.903556e+00 -2.347989e+01 8.711559e-02 - 1.701000e+01 -2.527597e+00 -2.349370e+01 8.714296e-02 - 1.702000e+01 -2.120218e+00 -2.350751e+01 8.707167e-02 - 1.703000e+01 -1.694000e+00 -2.352132e+01 8.692631e-02 - 1.704000e+01 -1.261644e+00 -2.353513e+01 8.675731e-02 - 1.705000e+01 -8.356002e-01 -2.354894e+01 8.662374e-02 - 1.706000e+01 -4.277182e-01 -2.356276e+01 8.657281e-02 - 1.707000e+01 -4.892143e-02 -2.357657e+01 8.662316e-02 - 1.708000e+01 2.910743e-01 -2.359038e+01 8.675822e-02 - 1.709000e+01 5.840006e-01 -2.360419e+01 8.693214e-02 - 1.710000e+01 8.232263e-01 -2.361800e+01 8.708590e-02 - 1.711000e+01 1.003896e+00 -2.363181e+01 8.716778e-02 - 1.712000e+01 1.123014e+00 -2.364563e+01 8.715096e-02 - 1.713000e+01 1.179478e+00 -2.365944e+01 8.704241e-02 - 1.714000e+01 1.174056e+00 -2.367325e+01 8.688049e-02 - 1.715000e+01 1.109323e+00 -2.368706e+01 8.672189e-02 - 1.716000e+01 9.895443e-01 -2.370087e+01 8.662208e-02 - 1.717000e+01 8.205209e-01 -2.371468e+01 8.661594e-02 - 1.718000e+01 6.094028e-01 -2.372850e+01 8.670535e-02 - 1.719000e+01 3.644659e-01 -2.374231e+01 8.685859e-02 - 1.720000e+01 9.486754e-02 -2.375612e+01 8.702171e-02 - 1.721000e+01 -1.896189e-01 -2.376993e+01 8.713742e-02 - 1.722000e+01 -4.788820e-01 -2.378374e+01 8.716496e-02 - 1.723000e+01 -7.627576e-01 -2.379755e+01 8.709387e-02 - 1.724000e+01 -1.031315e+00 -2.381137e+01 8.694759e-02 - 1.725000e+01 -1.275137e+00 -2.382518e+01 8.677555e-02 - 1.726000e+01 -1.485587e+00 -2.383899e+01 8.663639e-02 - 1.727000e+01 -1.655059e+00 -2.385280e+01 8.657763e-02 - 1.728000e+01 -1.777198e+00 -2.386661e+01 8.661901e-02 - 1.729000e+01 -1.847091e+00 -2.388042e+01 8.674544e-02 - 1.730000e+01 -1.861422e+00 -2.389424e+01 8.691249e-02 - 1.731000e+01 -1.818574e+00 -2.390805e+01 8.706206e-02 - 1.732000e+01 -1.718697e+00 -2.392186e+01 8.714263e-02 - 1.733000e+01 -1.563709e+00 -2.393567e+01 8.712675e-02 - 1.734000e+01 -1.357258e+00 -2.394948e+01 8.702031e-02 - 1.735000e+01 -1.104620e+00 -2.396329e+01 8.686045e-02 - 1.736000e+01 -8.125520e-01 -2.397711e+01 8.670292e-02 - 1.737000e+01 -4.890906e-01 -2.399092e+01 8.660293e-02 - 1.738000e+01 -1.433124e-01 -2.400473e+01 8.659576e-02 - 1.739000e+01 2.149441e-01 -2.401854e+01 8.668431e-02 - 1.740000e+01 5.753838e-01 -2.403235e+01 8.683806e-02 - 1.741000e+01 9.275768e-01 -2.404616e+01 8.700392e-02 - 1.742000e+01 1.261287e+00 -2.405998e+01 8.712489e-02 - 1.743000e+01 1.566793e+00 -2.407379e+01 8.715968e-02 - 1.744000e+01 1.835197e+00 -2.408760e+01 8.709670e-02 - 1.745000e+01 2.058695e+00 -2.410141e+01 8.695786e-02 - 1.746000e+01 2.230823e+00 -2.411522e+01 8.679122e-02 - 1.747000e+01 2.346639e+00 -2.412903e+01 8.665454e-02 - 1.748000e+01 2.402862e+00 -2.414285e+01 8.659530e-02 - 1.749000e+01 2.397953e+00 -2.415666e+01 8.663394e-02 - 1.750000e+01 2.332120e+00 -2.417047e+01 8.675670e-02 - 1.751000e+01 2.207283e+00 -2.418428e+01 8.692050e-02 - 1.752000e+01 2.026962e+00 -2.419809e+01 8.706826e-02 - 1.753000e+01 1.796122e+00 -2.421191e+01 8.714880e-02 - 1.754000e+01 1.520973e+00 -2.422572e+01 8.713429e-02 - 1.755000e+01 1.208728e+00 -2.423953e+01 8.702966e-02 - 1.756000e+01 8.673386e-01 -2.425334e+01 8.687089e-02 - 1.757000e+01 5.052165e-01 -2.426715e+01 8.671285e-02 - 1.758000e+01 1.309496e-01 -2.428096e+01 8.661037e-02 - 1.759000e+01 -2.469724e-01 -2.429478e+01 8.659908e-02 - 1.760000e+01 -6.204145e-01 -2.430859e+01 8.668283e-02 - 1.761000e+01 -9.818255e-01 -2.432240e+01 8.683227e-02 - 1.762000e+01 -1.324432e+00 -2.433621e+01 8.699534e-02 - 1.763000e+01 -1.642390e+00 -2.435002e+01 8.711552e-02 - 1.764000e+01 -1.930898e+00 -2.436383e+01 8.715136e-02 - 1.765000e+01 -2.186256e+00 -2.437765e+01 8.709049e-02 - 1.766000e+01 -2.405888e+00 -2.439146e+01 8.695380e-02 - 1.767000e+01 -2.588317e+00 -2.440527e+01 8.678836e-02 - 1.768000e+01 -2.733104e+00 -2.441908e+01 8.665140e-02 - 1.769000e+01 -2.840752e+00 -2.443289e+01 8.659050e-02 - 1.770000e+01 -2.912593e+00 -2.444670e+01 8.662688e-02 - 1.771000e+01 -2.950643e+00 -2.446052e+01 8.674783e-02 - 1.772000e+01 -2.957458e+00 -2.447433e+01 8.691132e-02 - 1.773000e+01 -2.935981e+00 -2.448814e+01 8.706087e-02 - 1.774000e+01 -2.889393e+00 -2.450195e+01 8.714520e-02 - 1.775000e+01 -2.820974e+00 -2.451576e+01 8.713574e-02 - 1.776000e+01 -2.733977e+00 -2.452957e+01 8.703622e-02 - 1.777000e+01 -2.631524e+00 -2.454339e+01 8.688139e-02 - 1.778000e+01 -2.516520e+00 -2.455720e+01 8.672516e-02 - 1.779000e+01 -2.391589e+00 -2.457101e+01 8.662212e-02 - 1.780000e+01 -2.259035e+00 -2.458482e+01 8.660840e-02 - 1.781000e+01 -2.120827e+00 -2.459863e+01 8.668891e-02 - 1.782000e+01 -1.978597e+00 -2.461244e+01 8.683560e-02 - 1.783000e+01 -1.833662e+00 -2.462626e+01 8.699740e-02 - 1.784000e+01 -1.687057e+00 -2.464007e+01 8.711823e-02 - 1.785000e+01 -1.539578e+00 -2.465388e+01 8.715627e-02 - 1.786000e+01 -1.391838e+00 -2.466769e+01 8.709820e-02 - 1.787000e+01 -1.244314e+00 -2.468150e+01 8.696366e-02 - 1.788000e+01 -1.097405e+00 -2.469531e+01 8.679860e-02 - 1.789000e+01 -9.514796e-01 -2.470913e+01 8.665973e-02 - 1.790000e+01 -8.069198e-01 -2.472294e+01 8.659487e-02 - 1.791000e+01 -6.641559e-01 -2.473675e+01 8.662618e-02 - 1.792000e+01 -5.236915e-01 -2.475056e+01 8.674239e-02 - 1.793000e+01 -3.861179e-01 -2.476437e+01 8.690283e-02 - 1.794000e+01 -2.521187e-01 -2.477818e+01 8.705183e-02 - 1.795000e+01 -1.224641e-01 -2.479200e+01 8.713817e-02 - 1.796000e+01 2.002381e-03 -2.480581e+01 8.713247e-02 - 1.797000e+01 1.203851e-01 -2.481962e+01 8.703715e-02 - 1.798000e+01 2.317610e-01 -2.483343e+01 8.688545e-02 - 1.799000e+01 3.352080e-01 -2.484724e+01 8.673017e-02 - 1.800000e+01 4.298322e-01 -2.486105e+01 8.662547e-02 - 1.801000e+01 5.147948e-01 -2.487487e+01 8.660800e-02 - 1.802000e+01 5.893341e-01 -2.488868e+01 8.668387e-02 - 1.803000e+01 6.527827e-01 -2.490249e+01 8.682659e-02 - 1.804000e+01 7.045791e-01 -2.491630e+01 8.698645e-02 - 1.805000e+01 7.442724e-01 -2.493011e+01 8.710806e-02 - 1.806000e+01 7.715211e-01 -2.494393e+01 8.714944e-02 - 1.807000e+01 7.860873e-01 -2.495774e+01 8.709627e-02 - 1.808000e+01 7.878271e-01 -2.497155e+01 8.696669e-02 - 1.809000e+01 7.766795e-01 -2.498536e+01 8.680515e-02 - 1.810000e+01 7.526563e-01 -2.499917e+01 8.666724e-02 - 1.811000e+01 7.158358e-01 -2.501298e+01 8.660047e-02 - 1.812000e+01 6.663611e-01 -2.502680e+01 8.662762e-02 - 1.813000e+01 6.044479e-01 -2.504061e+01 8.673865e-02 - 1.814000e+01 5.303998e-01 -2.505442e+01 8.689440e-02 - 1.815000e+01 4.446352e-01 -2.506823e+01 8.704050e-02 - 1.816000e+01 3.477236e-01 -2.508204e+01 8.712634e-02 - 1.817000e+01 2.404307e-01 -2.509585e+01 8.712243e-02 - 1.818000e+01 1.237700e-01 -2.510967e+01 8.703037e-02 - 1.819000e+01 -9.416308e-04 -2.512348e+01 8.688225e-02 - 1.820000e+01 -1.320299e-01 -2.513729e+01 8.672973e-02 - 1.821000e+01 -2.674146e-01 -2.515110e+01 8.662628e-02 - 1.822000e+01 -4.045726e-01 -2.516491e+01 8.660846e-02 - 1.823000e+01 -5.405171e-01 -2.517872e+01 8.668296e-02 - 1.824000e+01 -6.717992e-01 -2.519254e+01 8.682420e-02 - 1.825000e+01 -7.945361e-01 -2.520635e+01 8.698340e-02 - 1.826000e+01 -9.044691e-01 -2.522016e+01 8.710574e-02 - 1.827000e+01 -9.970535e-01 -2.523397e+01 8.714922e-02 - 1.828000e+01 -1.067581e+00 -2.524778e+01 8.709899e-02 - 1.829000e+01 -1.111334e+00 -2.526159e+01 8.697229e-02 - 1.830000e+01 -1.123760e+00 -2.527541e+01 8.681263e-02 - 1.831000e+01 -1.100680e+00 -2.528922e+01 8.667502e-02 - 1.832000e+01 -1.038493e+00 -2.530303e+01 8.660692e-02 - 1.833000e+01 -9.343971e-01 -2.531684e+01 8.663167e-02 - 1.834000e+01 -7.865948e-01 -2.533065e+01 8.674018e-02 - 1.835000e+01 -5.944846e-01 -2.534446e+01 8.689429e-02 - 1.836000e+01 -3.588183e-01 -2.535828e+01 8.704028e-02 - 1.837000e+01 -8.181862e-02 -2.537209e+01 8.712763e-02 - 1.838000e+01 2.327552e-01 -2.538590e+01 8.712632e-02 - 1.839000e+01 5.796003e-01 -2.539971e+01 8.703698e-02 - 1.840000e+01 9.519272e-01 -2.541352e+01 8.689062e-02 - 1.841000e+01 1.341585e+00 -2.542733e+01 8.673808e-02 - 1.842000e+01 1.739249e+00 -2.544115e+01 8.663261e-02 - 1.843000e+01 2.134674e+00 -2.545496e+01 8.661124e-02 - 1.844000e+01 2.517002e+00 -2.546877e+01 8.668172e-02 - 1.845000e+01 2.875107e+00 -2.548258e+01 8.681972e-02 - 1.846000e+01 3.197976e+00 -2.549639e+01 8.697754e-02 - 1.847000e+01 3.475105e+00 -2.551020e+01 8.710080e-02 - 1.848000e+01 3.696893e+00 -2.552402e+01 8.714724e-02 - 1.849000e+01 3.855011e+00 -2.553783e+01 8.710102e-02 - 1.850000e+01 3.942748e+00 -2.555164e+01 8.697805e-02 - 1.851000e+01 3.955291e+00 -2.556545e+01 8.682055e-02 - 1.852000e+01 3.889955e+00 -2.557926e+01 8.668268e-02 - 1.853000e+01 3.746327e+00 -2.559307e+01 8.661186e-02 - 1.854000e+01 3.526329e+00 -2.560689e+01 8.663212e-02 - 1.855000e+01 3.234200e+00 -2.562070e+01 8.673571e-02 - 1.856000e+01 2.876383e+00 -2.563451e+01 8.688589e-02 - 1.857000e+01 2.461332e+00 -2.564832e+01 8.703003e-02 - 1.858000e+01 1.999250e+00 -2.566213e+01 8.711799e-02 - 1.859000e+01 1.501751e+00 -2.567595e+01 8.711936e-02 - 1.860000e+01 9.814823e-01 -2.568976e+01 8.703370e-02 - 1.861000e+01 4.517027e-01 -2.570357e+01 8.689062e-02 - 1.862000e+01 -7.414835e-02 -2.571738e+01 8.673974e-02 - 1.863000e+01 -5.828892e-01 -2.573119e+01 8.663363e-02 - 1.864000e+01 -1.062014e+00 -2.574500e+01 8.660942e-02 - 1.865000e+01 -1.500081e+00 -2.575882e+01 8.667576e-02 - 1.866000e+01 -1.887051e+00 -2.577263e+01 8.680969e-02 - 1.867000e+01 -2.214570e+00 -2.578644e+01 8.696490e-02 - 1.868000e+01 -2.476187e+00 -2.580025e+01 8.708798e-02 - 1.869000e+01 -2.667493e+00 -2.581406e+01 8.713694e-02 - 1.870000e+01 -2.786196e+00 -2.582787e+01 8.709541e-02 - 1.871000e+01 -2.832105e+00 -2.584169e+01 8.697819e-02 - 1.872000e+01 -2.807064e+00 -2.585550e+01 8.682608e-02 - 1.873000e+01 -2.714802e+00 -2.586931e+01 8.669201e-02 - 1.874000e+01 -2.560741e+00 -2.588312e+01 8.662265e-02 - 1.875000e+01 -2.351752e+00 -2.589693e+01 8.664204e-02 - 1.876000e+01 -2.095870e+00 -2.591074e+01 8.674305e-02 - 1.877000e+01 -1.802001e+00 -2.592456e+01 8.689001e-02 - 1.878000e+01 -1.479602e+00 -2.593837e+01 8.703136e-02 - 1.879000e+01 -1.138366e+00 -2.595218e+01 8.711776e-02 - 1.880000e+01 -7.879214e-01 -2.596599e+01 8.711906e-02 - 1.881000e+01 -4.375466e-01 -2.597980e+01 8.703452e-02 - 1.882000e+01 -9.591223e-02 -2.599361e+01 8.689316e-02 - 1.883000e+01 2.291400e-01 -2.600743e+01 8.674382e-02 - 1.884000e+01 5.307793e-01 -2.602124e+01 8.663848e-02 - 1.885000e+01 8.033258e-01 -2.603505e+01 8.661408e-02 - 1.886000e+01 1.042344e+00 -2.604886e+01 8.667944e-02 - 1.887000e+01 1.244694e+00 -2.606267e+01 8.681211e-02 - 1.888000e+01 1.408534e+00 -2.607648e+01 8.696633e-02 - 1.889000e+01 1.533284e+00 -2.609030e+01 8.708914e-02 - 1.890000e+01 1.619555e+00 -2.610411e+01 8.713861e-02 - 1.891000e+01 1.669032e+00 -2.611792e+01 8.709817e-02 - 1.892000e+01 1.684341e+00 -2.613173e+01 8.698215e-02 - 1.893000e+01 1.668888e+00 -2.614554e+01 8.683088e-02 - 1.894000e+01 1.626680e+00 -2.615935e+01 8.669698e-02 - 1.895000e+01 1.562134e+00 -2.617317e+01 8.662709e-02 - 1.896000e+01 1.479893e+00 -2.618698e+01 8.664556e-02 - 1.897000e+01 1.384630e+00 -2.620079e+01 8.674573e-02 - 1.898000e+01 1.280880e+00 -2.621460e+01 8.689237e-02 - 1.899000e+01 1.172869e+00 -2.622841e+01 8.703415e-02 - 1.900000e+01 1.064382e+00 -2.624222e+01 8.712155e-02 - 1.901000e+01 9.586432e-01 -2.625604e+01 8.712391e-02 - 1.902000e+01 8.582358e-01 -2.626985e+01 8.703982e-02 - 1.903000e+01 7.650479e-01 -2.628366e+01 8.689764e-02 - 1.904000e+01 6.802536e-01 -2.629747e+01 8.674590e-02 - 1.905000e+01 6.043264e-01 -2.631128e+01 8.663675e-02 - 1.906000e+01 5.370840e-01 -2.632509e+01 8.660775e-02 - 1.907000e+01 4.777607e-01 -2.633891e+01 8.666869e-02 - 1.908000e+01 4.251049e-01 -2.635272e+01 8.679810e-02 - 1.909000e+01 3.774942e-01 -2.636653e+01 8.695090e-02 - 1.910000e+01 3.330653e-01 -2.638034e+01 8.707426e-02 - 1.911000e+01 2.898492e-01 -2.639415e+01 8.712585e-02 - 1.912000e+01 2.459072e-01 -2.640797e+01 8.708827e-02 - 1.913000e+01 1.994612e-01 -2.642178e+01 8.697485e-02 - 1.914000e+01 1.490112e-01 -2.643559e+01 8.682517e-02 - 1.915000e+01 9.343576e-02 -2.644940e+01 8.669150e-02 - 1.916000e+01 3.207130e-02 -2.646321e+01 8.662080e-02 - 1.917000e+01 -3.523389e-02 -2.647702e+01 8.663819e-02 - 1.918000e+01 -1.080916e-01 -2.649084e+01 8.673807e-02 - 1.919000e+01 -1.855728e-01 -2.650465e+01 8.688609e-02 - 1.920000e+01 -2.662331e-01 -2.651846e+01 8.703131e-02 - 1.921000e+01 -3.481626e-01 -2.653227e+01 8.712394e-02 - 1.922000e+01 -4.290574e-01 -2.654608e+01 8.713244e-02 - 1.923000e+01 -5.063087e-01 -2.655989e+01 8.705411e-02 - 1.924000e+01 -5.771067e-01 -2.657371e+01 8.691603e-02 - 1.925000e+01 -6.385529e-01 -2.658752e+01 8.676580e-02 - 1.926000e+01 -6.877780e-01 -2.660133e+01 8.665529e-02 - 1.927000e+01 -7.220605e-01 -2.661514e+01 8.662258e-02 - 1.928000e+01 -7.389414e-01 -2.662895e+01 8.667855e-02 - 1.929000e+01 -7.363326e-01 -2.664276e+01 8.680308e-02 - 1.930000e+01 -7.126151e-01 -2.665658e+01 8.695223e-02 - 1.931000e+01 -6.667246e-01 -2.667039e+01 8.707374e-02 - 1.932000e+01 -5.982225e-01 -2.668420e+01 8.712516e-02 - 1.933000e+01 -5.073506e-01 -2.669801e+01 8.708834e-02 - 1.934000e+01 -3.950681e-01 -2.671182e+01 8.697554e-02 - 1.935000e+01 -2.630694e-01 -2.672563e+01 8.682530e-02 - 1.936000e+01 -1.137826e-01 -2.673945e+01 8.668935e-02 - 1.937000e+01 4.965341e-02 -2.675326e+01 8.661471e-02 - 1.938000e+01 2.234330e-01 -2.676707e+01 8.662727e-02 - 1.939000e+01 4.031503e-01 -2.678088e+01 8.672263e-02 - 1.940000e+01 5.838880e-01 -2.679469e+01 8.686764e-02 - 1.941000e+01 7.603286e-01 -2.680850e+01 8.701220e-02 - 1.942000e+01 9.268876e-01 -2.682232e+01 8.710673e-02 - 1.943000e+01 1.077867e+00 -2.683613e+01 8.711916e-02 - 1.944000e+01 1.207627e+00 -2.684994e+01 8.704579e-02 - 1.945000e+01 1.310772e+00 -2.686375e+01 8.691245e-02 - 1.946000e+01 1.382344e+00 -2.687756e+01 8.676570e-02 - 1.947000e+01 1.418029e+00 -2.689137e+01 8.665689e-02 - 1.948000e+01 1.414343e+00 -2.690519e+01 8.662421e-02 - 1.949000e+01 1.368829e+00 -2.691900e+01 8.667927e-02 - 1.950000e+01 1.280213e+00 -2.693281e+01 8.680296e-02 - 1.951000e+01 1.148547e+00 -2.694662e+01 8.695227e-02 - 1.952000e+01 9.753031e-01 -2.696043e+01 8.707545e-02 - 1.953000e+01 7.634311e-01 -2.697424e+01 8.712995e-02 - 1.954000e+01 5.173547e-01 -2.698806e+01 8.709697e-02 - 1.955000e+01 2.429157e-01 -2.700187e+01 8.698780e-02 - 1.956000e+01 -5.274497e-02 -2.701568e+01 8.684001e-02 - 1.957000e+01 -3.613665e-01 -2.702949e+01 8.670468e-02 - 1.958000e+01 -6.738055e-01 -2.704330e+01 8.662878e-02 - 1.959000e+01 -9.803250e-01 -2.705711e+01 8.663873e-02 - 1.960000e+01 -1.270927e+00 -2.707093e+01 8.673105e-02 - 1.961000e+01 -1.535714e+00 -2.708474e+01 8.687359e-02 - 1.962000e+01 -1.765271e+00 -2.709855e+01 8.701693e-02 - 1.963000e+01 -1.951044e+00 -2.711236e+01 8.711161e-02 - 1.964000e+01 -2.085707e+00 -2.712617e+01 8.712512e-02 - 1.965000e+01 -2.163487e+00 -2.713998e+01 8.705289e-02 - 1.966000e+01 -2.180452e+00 -2.715380e+01 8.691976e-02 - 1.967000e+01 -2.134721e+00 -2.716761e+01 8.677159e-02 - 1.968000e+01 -2.026606e+00 -2.718142e+01 8.665955e-02 - 1.969000e+01 -1.858664e+00 -2.719523e+01 8.662232e-02 - 1.970000e+01 -1.635658e+00 -2.720904e+01 8.667250e-02 - 1.971000e+01 -1.364429e+00 -2.722286e+01 8.679216e-02 - 1.972000e+01 -1.053676e+00 -2.723667e+01 8.693928e-02 - 1.973000e+01 -7.136597e-01 -2.725048e+01 8.706254e-02 - 1.974000e+01 -3.558338e-01 -2.726429e+01 8.711913e-02 - 1.975000e+01 7.572895e-03 -2.727810e+01 8.708940e-02 - 1.976000e+01 3.640104e-01 -2.729191e+01 8.698344e-02 - 1.977000e+01 7.010758e-01 -2.730573e+01 8.683771e-02 - 1.978000e+01 1.006975e+00 -2.731954e+01 8.670262e-02 - 1.979000e+01 1.270958e+00 -2.733335e+01 8.662514e-02 - 1.980000e+01 1.483711e+00 -2.734716e+01 8.663239e-02 - 1.981000e+01 1.637679e+00 -2.736097e+01 8.672204e-02 - 1.982000e+01 1.727326e+00 -2.737478e+01 8.686318e-02 - 1.983000e+01 1.749294e+00 -2.738860e+01 8.700723e-02 - 1.984000e+01 1.702483e+00 -2.740241e+01 8.710492e-02 - 1.985000e+01 1.588034e+00 -2.741622e+01 8.712322e-02 - 1.986000e+01 1.409227e+00 -2.743003e+01 8.705644e-02 - 1.987000e+01 1.171294e+00 -2.744384e+01 8.692811e-02 - 1.988000e+01 8.811625e-01 -2.745765e+01 8.678293e-02 - 1.989000e+01 5.471485e-01 -2.747147e+01 8.667148e-02 - 1.990000e+01 1.786013e-01 -2.748528e+01 8.663257e-02 - 1.991000e+01 -2.144701e-01 -2.749909e+01 8.667962e-02 - 1.992000e+01 -6.217781e-01 -2.751290e+01 8.679592e-02 - 1.993000e+01 -1.033127e+00 -2.752671e+01 8.694062e-02 - 1.994000e+01 -1.438757e+00 -2.754052e+01 8.706314e-02 - 1.995000e+01 -1.829651e+00 -2.755434e+01 8.712079e-02 - 1.996000e+01 -2.197791e+00 -2.756815e+01 8.709333e-02 - 1.997000e+01 -2.536358e+00 -2.758196e+01 8.698987e-02 - 1.998000e+01 -2.839868e+00 -2.759577e+01 8.684575e-02 - 1.999000e+01 -3.104253e+00 -2.760958e+01 8.671056e-02 - 2.000000e+01 -3.326870e+00 -2.762339e+01 8.663104e-02 + 1.000000e-02 -7.734561e-02 -1.381170e-02 3.134926e-02 + 2.000000e-02 -1.596764e-01 -2.762339e-02 6.045792e-02 + 3.000000e-02 -2.516875e-01 -4.143509e-02 8.526468e-02 + 4.000000e-02 -3.575096e-01 -5.524679e-02 1.040541e-01 + 5.000000e-02 -4.804651e-01 -6.905849e-02 1.155991e-01 + 6.000000e-02 -6.228668e-01 -8.287018e-02 1.192732e-01 + 7.000000e-02 -7.858705e-01 -9.668188e-02 1.151330e-01 + 8.000000e-02 -9.693874e-01 -1.104936e-01 1.039918e-01 + 9.000000e-02 -1.172061e+00 -1.243053e-01 8.755577e-02 + 1.000000e-01 -1.391306e+00 -1.381170e-01 6.884717e-02 + 1.100000e-01 -1.623409e+00 -1.519287e-01 5.341991e-02 + 1.200000e-01 -1.863680e+00 -1.657404e-01 4.979434e-02 + 1.300000e-01 -2.106649e+00 -1.795521e-01 6.017895e-02 + 1.400000e-01 -2.346295e+00 -1.933638e-01 7.640497e-02 + 1.500000e-01 -2.576293e+00 -2.071755e-01 9.161881e-02 + 1.600000e-01 -2.790268e+00 -2.209872e-01 1.024655e-01 + 1.700000e-01 -2.982047e+00 -2.347989e-01 1.074539e-01 + 1.800000e-01 -3.145891e+00 -2.486105e-01 1.062389e-01 + 1.900000e-01 -3.276707e+00 -2.624222e-01 9.942805e-02 + 2.000000e-01 -3.370223e+00 -2.762339e-01 8.860376e-02 + 2.100000e-01 -3.423130e+00 -2.900456e-01 7.650761e-02 + 2.200000e-01 -3.433181e+00 -3.038573e-01 6.719764e-02 + 2.300000e-01 -3.399254e+00 -3.176690e-01 6.493149e-02 + 2.400000e-01 -3.321377e+00 -3.314807e-01 7.061632e-02 + 2.500000e-01 -3.200715e+00 -3.452924e-01 8.074527e-02 + 2.600000e-01 -3.039527e+00 -3.591041e-01 9.101665e-02 + 2.700000e-01 -2.841094e+00 -3.729158e-01 9.850821e-02 + 2.800000e-01 -2.609626e+00 -3.867275e-01 1.017102e-01 + 2.900000e-01 -2.350147e+00 -4.005392e-01 1.002266e-01 + 3.000000e-01 -2.068363e+00 -4.143509e-01 9.462396e-02 + 3.100000e-01 -1.770519e+00 -4.281626e-01 8.640470e-02 + 3.200000e-01 -1.463237e+00 -4.419743e-01 7.800773e-02 + 3.300000e-01 -1.153355e+00 -4.557860e-01 7.249483e-02 + 3.400000e-01 -8.477479e-01 -4.695977e-01 7.224522e-02 + 3.500000e-01 -5.531450e-01 -4.834094e-01 7.713224e-02 + 3.600000e-01 -2.759477e-01 -4.972211e-01 8.467203e-02 + 3.700000e-01 -2.204310e-02 -5.110328e-01 9.195493e-02 + 3.800000e-01 2.033757e-01 -5.248445e-01 9.686320e-02 + 3.900000e-01 3.959788e-01 -5.386562e-01 9.828977e-02 + 4.000000e-01 5.524508e-01 -5.524679e-01 9.606310e-02 + 4.100000e-01 6.706182e-01 -5.662796e-01 9.087598e-02 + 4.200000e-01 7.495432e-01 -5.800913e-01 8.423689e-02 + 4.300000e-01 7.895774e-01 -5.939030e-01 7.831796e-02 + 4.400000e-01 7.923692e-01 -6.077147e-01 7.538431e-02 + 4.500000e-01 7.608195e-01 -6.215264e-01 7.662821e-02 + 4.600000e-01 6.989824e-01 -6.353381e-01 8.131523e-02 + 4.700000e-01 6.119129e-01 -6.491498e-01 8.737928e-02 + 4.800000e-01 5.054623e-01 -6.629615e-01 9.267455e-02 + 4.900000e-01 3.860302e-01 -6.767732e-01 9.569092e-02 + 5.000000e-01 2.602819e-01 -6.905849e-01 9.573000e-02 + 5.100000e-01 1.348438e-01 -7.043966e-01 9.289354e-02 + 5.200000e-01 1.599279e-02 -7.182083e-01 8.803723e-02 + 5.300000e-01 -9.064421e-02 -7.320200e-01 8.267435e-02 + 5.400000e-01 -1.803637e-01 -7.458316e-01 7.868367e-02 + 5.500000e-01 -2.496148e-01 -7.596433e-01 7.762463e-02 + 5.600000e-01 -2.961697e-01 -7.734550e-01 7.986113e-02 + 5.700000e-01 -3.192238e-01 -7.872667e-01 8.433275e-02 + 5.800000e-01 -3.194177e-01 -8.010784e-01 8.926692e-02 + 5.900000e-01 -2.987769e-01 -8.148901e-01 9.303294e-02 + 6.000000e-01 -2.605717e-01 -8.287018e-01 9.458206e-02 + 6.100000e-01 -2.091040e-01 -8.425135e-01 9.356811e-02 + 6.200000e-01 -1.494329e-01 -8.563252e-01 9.034444e-02 + 6.300000e-01 -8.705466e-02 -8.701369e-01 8.590452e-02 + 6.400000e-01 -2.755745e-02 -8.839486e-01 8.171553e-02 + 6.500000e-01 2.372868e-02 -8.977603e-01 7.931299e-02 + 6.600000e-01 6.206366e-02 -9.115720e-01 7.962749e-02 + 6.700000e-01 8.359014e-02 -9.253837e-01 8.244920e-02 + 6.800000e-01 8.556789e-02 -9.391954e-01 8.658046e-02 + 6.900000e-01 6.653458e-02 -9.530071e-01 9.051104e-02 + 7.000000e-01 2.638255e-02 -9.668188e-01 9.300732e-02 + 7.100000e-01 -3.365350e-02 -9.806305e-01 9.339048e-02 + 7.200000e-01 -1.110967e-01 -9.944422e-01 9.161189e-02 + 7.300000e-01 -2.024086e-01 -1.008254e+00 8.823550e-02 + 7.400000e-01 -3.032383e-01 -1.022066e+00 8.434109e-02 + 7.500000e-01 -4.087215e-01 -1.035877e+00 8.127899e-02 + 7.600000e-01 -5.138097e-01 -1.049689e+00 8.019975e-02 + 7.700000e-01 -6.136058e-01 -1.063501e+00 8.149425e-02 + 7.800000e-01 -7.036833e-01 -1.077312e+00 8.457797e-02 + 7.900000e-01 -7.803670e-01 -1.091124e+00 8.824255e-02 + 8.000000e-01 -8.409562e-01 -1.104936e+00 9.123004e-02 + 8.100000e-01 -8.838756e-01 -1.118747e+00 9.263856e-02 + 8.200000e-01 -9.087437e-01 -1.132559e+00 9.209884e-02 + 8.300000e-01 -9.163567e-01 -1.146371e+00 8.981209e-02 + 8.400000e-01 -9.085893e-01 -1.160183e+00 8.650416e-02 + 8.500000e-01 -8.882216e-01 -1.173994e+00 8.327654e-02 + 8.600000e-01 -8.587063e-01 -1.187806e+00 8.129051e-02 + 8.700000e-01 -8.238944e-01 -1.201618e+00 8.129498e-02 + 8.800000e-01 -7.877398e-01 -1.215429e+00 8.324441e-02 + 8.900000e-01 -7.540061e-01 -1.229241e+00 8.633665e-02 + 9.000000e-01 -7.259969e-01 -1.243053e+00 8.943578e-02 + 9.100000e-01 -7.063286e-01 -1.256864e+00 9.152907e-02 + 9.200000e-01 -6.967632e-01 -1.270676e+00 9.200378e-02 + 9.300000e-01 -6.981108e-01 -1.284488e+00 9.075509e-02 + 9.400000e-01 -7.102095e-01 -1.298300e+00 8.818933e-02 + 9.500000e-01 -7.319798e-01 -1.312111e+00 8.513983e-02 + 9.600000e-01 -7.615502e-01 -1.325923e+00 8.266016e-02 + 9.700000e-01 -7.964408e-01 -1.339735e+00 8.166394e-02 + 9.800000e-01 -8.337897e-01 -1.353546e+00 8.251468e-02 + 9.900000e-01 -8.706036e-01 -1.367358e+00 8.484194e-02 + 1.000000e-00 -9.040117e-01 -1.381170e+00 8.774748e-02 + 1.010000e+00 -9.315033e-01 -1.394981e+00 9.021996e-02 + 1.020000e+00 -9.511296e-01 -1.408793e+00 9.148261e-02 + 1.030000e+00 -9.616553e-01 -1.422605e+00 9.117828e-02 + 1.040000e+00 -9.626475e-01 -1.436417e+00 8.942710e-02 + 1.050000e+00 -9.544971e-01 -1.450228e+00 8.679399e-02 + 1.060000e+00 -9.383712e-01 -1.464040e+00 8.415952e-02 + 1.070000e+00 -9.161027e-01 -1.477852e+00 8.246149e-02 + 1.080000e+00 -8.900263e-01 -1.491663e+00 8.233013e-02 + 1.090000e+00 -8.627749e-01 -1.505475e+00 8.378993e-02 + 1.100000e+00 -8.370557e-01 -1.519287e+00 8.625490e-02 + 1.110000e+00 -8.154227e-01 -1.533098e+00 8.882170e-02 + 1.120000e+00 -8.000647e-01 -1.546910e+00 9.063428e-02 + 1.130000e+00 -7.926282e-01 -1.560722e+00 9.113887e-02 + 1.140000e+00 -7.940862e-01 -1.574533e+00 9.020245e-02 + 1.150000e+00 -8.046667e-01 -1.588345e+00 8.812929e-02 + 1.160000e+00 -8.238427e-01 -1.602157e+00 8.559113e-02 + 1.170000e+00 -8.503875e-01 -1.615969e+00 8.345275e-02 + 1.180000e+00 -8.824866e-01 -1.629780e+00 8.248185e-02 + 1.190000e+00 -9.178991e-01 -1.643592e+00 8.302436e-02 + 1.200000e+00 -9.541530e-01 -1.657404e+00 8.484068e-02 + 1.210000e+00 -9.887581e-01 -1.671215e+00 8.723378e-02 + 1.220000e+00 -1.019420e+00 -1.685027e+00 8.936506e-02 + 1.230000e+00 -1.044233e+00 -1.698839e+00 9.055378e-02 + 1.240000e+00 -1.061845e+00 -1.712650e+00 9.045794e-02 + 1.250000e+00 -1.071566e+00 -1.726462e+00 8.914106e-02 + 1.260000e+00 -1.073431e+00 -1.740274e+00 8.704942e-02 + 1.270000e+00 -1.068188e+00 -1.754086e+00 8.489959e-02 + 1.280000e+00 -1.057242e+00 -1.767897e+00 8.346229e-02 + 1.290000e+00 -1.042527e+00 -1.781709e+00 8.327095e-02 + 1.300000e+00 -1.026351e+00 -1.795521e+00 8.438368e-02 + 1.310000e+00 -1.011191e+00 -1.809332e+00 8.636090e-02 + 1.320000e+00 -9.994919e-01 -1.823144e+00 8.847613e-02 + 1.330000e+00 -9.934586e-01 -1.836956e+00 9.000844e-02 + 1.340000e+00 -9.948682e-01 -1.850767e+00 9.047021e-02 + 1.350000e+00 -1.004922e+00 -1.864579e+00 8.972635e-02 + 1.360000e+00 -1.024143e+00 -1.878391e+00 8.801881e-02 + 1.370000e+00 -1.052329e+00 -1.892203e+00 8.590676e-02 + 1.380000e+00 -1.088569e+00 -1.906014e+00 8.411382e-02 + 1.390000e+00 -1.131312e+00 -1.919826e+00 8.328369e-02 + 1.400000e+00 -1.178493e+00 -1.933638e+00 8.371558e-02 + 1.410000e+00 -1.227697e+00 -1.947449e+00 8.522786e-02 + 1.420000e+00 -1.276352e+00 -1.961261e+00 8.724927e-02 + 1.430000e+00 -1.321931e+00 -1.975073e+00 8.906920e-02 + 1.440000e+00 -1.362151e+00 -1.988884e+00 9.009276e-02 + 1.450000e+00 -1.395148e+00 -2.002696e+00 9.000846e-02 + 1.460000e+00 -1.419612e+00 -2.016508e+00 8.885776e-02 + 1.470000e+00 -1.434881e+00 -2.030319e+00 8.702023e-02 + 1.480000e+00 -1.440976e+00 -2.044131e+00 8.511516e-02 + 1.490000e+00 -1.438578e+00 -2.057943e+00 8.381334e-02 + 1.500000e+00 -1.428952e+00 -2.071755e+00 8.358812e-02 + 1.510000e+00 -1.413823e+00 -2.085566e+00 8.451113e-02 + 1.520000e+00 -1.395219e+00 -2.099378e+00 8.622309e-02 + 1.530000e+00 -1.375288e+00 -2.113190e+00 8.810063e-02 + 1.540000e+00 -1.356109e+00 -2.127001e+00 8.950526e-02 + 1.550000e+00 -1.339521e+00 -2.140813e+00 8.998983e-02 + 1.560000e+00 -1.326967e+00 -2.154625e+00 8.941412e-02 + 1.570000e+00 -1.319389e+00 -2.168436e+00 8.797326e-02 + 1.580000e+00 -1.317160e+00 -2.182248e+00 8.614643e-02 + 1.590000e+00 -1.320081e+00 -2.196060e+00 8.456224e-02 + 1.600000e+00 -1.327421e+00 -2.209872e+00 8.378773e-02 + 1.610000e+00 -1.338016e+00 -2.223683e+00 8.410190e-02 + 1.620000e+00 -1.350401e+00 -2.237495e+00 8.537324e-02 + 1.630000e+00 -1.362974e+00 -2.251307e+00 8.712414e-02 + 1.640000e+00 -1.374170e+00 -2.265118e+00 8.873653e-02 + 1.650000e+00 -1.382635e+00 -2.278930e+00 8.967598e-02 + 1.660000e+00 -1.387368e+00 -2.292742e+00 8.964903e-02 + 1.670000e+00 -1.387843e+00 -2.306553e+00 8.867411e-02 + 1.680000e+00 -1.384077e+00 -2.320365e+00 8.707293e-02 + 1.690000e+00 -1.376637e+00 -2.334177e+00 8.538419e-02 + 1.700000e+00 -1.366606e+00 -2.347989e+00 8.419842e-02 + 1.710000e+00 -1.355480e+00 -2.361800e+00 8.394229e-02 + 1.720000e+00 -1.345031e+00 -2.375612e+00 8.470005e-02 + 1.730000e+00 -1.337123e+00 -2.389424e+00 8.617890e-02 + 1.740000e+00 -1.333527e+00 -2.403235e+00 8.784186e-02 + 1.750000e+00 -1.335716e+00 -2.417047e+00 8.912123e-02 + 1.760000e+00 -1.344696e+00 -2.430859e+00 8.960623e-02 + 1.770000e+00 -1.360861e+00 -2.444670e+00 8.915473e-02 + 1.780000e+00 -1.383901e+00 -2.458482e+00 8.792463e-02 + 1.790000e+00 -1.412776e+00 -2.472294e+00 8.633026e-02 + 1.800000e+00 -1.445754e+00 -2.486105e+00 8.492298e-02 + 1.810000e+00 -1.480514e+00 -2.499917e+00 8.420620e-02 + 1.820000e+00 -1.514312e+00 -2.513729e+00 8.443860e-02 + 1.830000e+00 -1.544202e+00 -2.527541e+00 8.552365e-02 + 1.840000e+00 -1.567278e+00 -2.541352e+00 8.705601e-02 + 1.850000e+00 -1.580939e+00 -2.555164e+00 8.849338e-02 + 1.860000e+00 -1.583140e+00 -2.568976e+00 8.935436e-02 + 1.870000e+00 -1.572609e+00 -2.582787e+00 8.936496e-02 + 1.880000e+00 -1.549013e+00 -2.596599e+00 8.852906e-02 + 1.890000e+00 -1.513057e+00 -2.610411e+00 8.712423e-02 + 1.900000e+00 -1.466490e+00 -2.624222e+00 8.562504e-02 + 1.910000e+00 -1.412034e+00 -2.638034e+00 8.455578e-02 + 1.920000e+00 -1.353220e+00 -2.651846e+00 8.430059e-02 + 1.930000e+00 -1.294150e+00 -2.665658e+00 8.494598e-02 + 1.940000e+00 -1.239192e+00 -2.679469e+00 8.624521e-02 + 1.950000e+00 -1.192639e+00 -2.693281e+00 8.772760e-02 + 1.960000e+00 -1.158358e+00 -2.707093e+00 8.888395e-02 + 1.970000e+00 -1.139441e+00 -2.720904e+00 8.933725e-02 + 1.980000e+00 -1.137915e+00 -2.734716e+00 8.894918e-02 + 1.990000e+00 -1.154511e+00 -2.748528e+00 8.785320e-02 + 2.000000e+00 -1.188531e+00 -2.762339e+00 8.641699e-02 + 2.010000e+00 -1.237823e+00 -2.776151e+00 8.513478e-02 + 2.020000e+00 -1.298870e+00 -2.789963e+00 8.446166e-02 + 2.030000e+00 -1.366998e+00 -2.803775e+00 8.463800e-02 + 2.040000e+00 -1.436686e+00 -2.817586e+00 8.558855e-02 + 2.050000e+00 -1.501962e+00 -2.831398e+00 8.695755e-02 + 2.060000e+00 -1.556856e+00 -2.845210e+00 8.825708e-02 + 2.070000e+00 -1.595879e+00 -2.859021e+00 8.904528e-02 + 2.080000e+00 -1.614491e+00 -2.872833e+00 8.906364e-02 + 2.090000e+00 -1.609514e+00 -2.886645e+00 8.830655e-02 + 2.100000e+00 -1.579460e+00 -2.900456e+00 8.702107e-02 + 2.110000e+00 -1.524741e+00 -2.914268e+00 8.563829e-02 + 2.120000e+00 -1.447736e+00 -2.928080e+00 8.463963e-02 + 2.130000e+00 -1.352693e+00 -2.941891e+00 8.438444e-02 + 2.140000e+00 -1.245484e+00 -2.955703e+00 8.496517e-02 + 2.150000e+00 -1.133191e+00 -2.969515e+00 8.616936e-02 + 2.160000e+00 -1.023574e+00 -2.983327e+00 8.757206e-02 + 2.170000e+00 -9.244251e-01 -2.997138e+00 8.870195e-02 + 2.180000e+00 -8.428719e-01 -3.010950e+00 8.920000e-02 + 2.190000e+00 -7.846657e-01 -3.024762e+00 8.892219e-02 + 2.200000e+00 -7.535071e-01 -3.038573e+00 8.797447e-02 + 2.210000e+00 -7.504647e-01 -3.052385e+00 8.668116e-02 + 2.220000e+00 -7.735306e-01 -3.066197e+00 8.548894e-02 + 2.230000e+00 -8.173576e-01 -3.080008e+00 8.481846e-02 + 2.240000e+00 -8.732071e-01 -3.093820e+00 8.490579e-02 + 2.250000e+00 -9.291271e-01 -3.107632e+00 8.570642e-02 + 2.260000e+00 -9.703641e-01 -3.121444e+00 8.691730e-02 + 2.270000e+00 -9.799987e-01 -3.135255e+00 8.810312e-02 + 2.280000e+00 -9.397761e-01 -3.149067e+00 8.885701e-02 + 2.290000e+00 -8.310933e-01 -3.162879e+00 8.893019e-02 + 2.300000e+00 -6.360900e-01 -3.176690e+00 8.830113e-02 + 2.310000e+00 -3.387799e-01 -3.190502e+00 8.717917e-02 + 2.320000e+00 7.384109e-02 -3.204314e+00 8.594395e-02 + 2.330000e+00 6.107803e-01 -3.218125e+00 8.502589e-02 + 2.340000e+00 1.276191e+00 -3.231937e+00 8.475268e-02 + 2.350000e+00 2.068731e+00 -3.245749e+00 8.521931e-02 + 2.360000e+00 2.981181e+00 -3.259561e+00 8.624936e-02 + 2.370000e+00 4.000357e+00 -3.273372e+00 8.747046e-02 + 2.380000e+00 5.107337e+00 -3.287184e+00 8.845949e-02 + 2.390000e+00 6.277992e+00 -3.300996e+00 8.888735e-02 + 2.400000e+00 7.483803e+00 -3.314807e+00 8.861696e-02 + 2.410000e+00 8.692939e+00 -3.328619e+00 8.773945e-02 + 2.420000e+00 9.871525e+00 -3.342431e+00 8.654753e-02 + 2.430000e+00 1.098505e+01 -3.356242e+00 8.544831e-02 + 2.440000e+00 1.199985e+01 -3.370054e+00 8.482790e-02 + 2.450000e+00 1.288455e+01 -3.383866e+00 8.490680e-02 + 2.460000e+00 1.361146e+01 -3.397678e+00 8.565094e-02 + 2.470000e+00 1.415774e+01 -3.411489e+00 8.678792e-02 + 2.480000e+00 1.450644e+01 -3.425301e+00 8.791879e-02 + 2.490000e+00 1.464718e+01 -3.439113e+00 8.866444e-02 + 2.500000e+00 1.457658e+01 -3.452924e+00 8.878714e-02 + 2.510000e+00 1.429830e+01 -3.466736e+00 8.825730e-02 + 2.520000e+00 1.382281e+01 -3.480548e+00 8.725920e-02 + 2.530000e+00 1.316686e+01 -3.494359e+00 8.613645e-02 + 2.540000e+00 1.235258e+01 -3.508171e+00 8.528323e-02 + 2.550000e+00 1.140650e+01 -3.521983e+00 8.500491e-02 + 2.560000e+00 1.035826e+01 -3.535794e+00 8.539895e-02 + 2.570000e+00 9.239323e+00 -3.549606e+00 8.631613e-02 + 2.580000e+00 8.081607e+00 -3.563418e+00 8.742391e-02 + 2.590000e+00 6.916163e+00 -3.577230e+00 8.833600e-02 + 2.600000e+00 5.771973e+00 -3.591041e+00 8.874584e-02 + 2.610000e+00 4.674897e+00 -3.604853e+00 8.852008e-02 + 2.620000e+00 3.646830e+00 -3.618665e+00 8.773500e-02 + 2.630000e+00 2.705100e+00 -3.632476e+00 8.665363e-02 + 2.640000e+00 1.862122e+00 -3.646288e+00 8.564608e-02 + 2.650000e+00 1.125307e+00 -3.660100e+00 8.506583e-02 + 2.660000e+00 4.972252e-01 -3.673911e+00 8.511794e-02 + 2.670000e+00 -2.400927e-02 -3.687723e+00 8.577693e-02 + 2.680000e+00 -4.441723e-01 -3.701535e+00 8.679855e-02 + 2.690000e+00 -7.722150e-01 -3.715347e+00 8.781860e-02 + 2.700000e+00 -1.019459e+00 -3.729158e+00 8.848654e-02 + 2.710000e+00 -1.198748e+00 -3.742970e+00 8.857941e-02 + 2.720000e+00 -1.323610e+00 -3.756782e+00 8.806668e-02 + 2.730000e+00 -1.407472e+00 -3.770593e+00 8.711793e-02 + 2.740000e+00 -1.462967e+00 -3.784405e+00 8.605324e-02 + 2.750000e+00 -1.501372e+00 -3.798217e+00 8.524228e-02 + 2.760000e+00 -1.532185e+00 -3.812028e+00 8.497442e-02 + 2.770000e+00 -1.562860e+00 -3.825840e+00 8.534686e-02 + 2.780000e+00 -1.598702e+00 -3.839652e+00 8.622582e-02 + 2.790000e+00 -1.642903e+00 -3.853464e+00 8.730239e-02 + 2.800000e+00 -1.696711e+00 -3.867275e+00 8.821161e-02 + 2.810000e+00 -1.759700e+00 -3.881087e+00 8.865812e-02 + 2.820000e+00 -1.830120e+00 -3.894899e+00 8.850613e-02 + 2.830000e+00 -1.905285e+00 -3.908710e+00 8.781616e-02 + 2.840000e+00 -1.981979e+00 -3.922522e+00 8.682582e-02 + 2.850000e+00 -2.056843e+00 -3.936334e+00 8.587719e-02 + 2.860000e+00 -2.126718e+00 -3.950145e+00 8.530316e-02 + 2.870000e+00 -2.188935e+00 -3.963957e+00 8.530532e-02 + 2.880000e+00 -2.241518e+00 -3.977769e+00 8.587504e-02 + 2.890000e+00 -2.283314e+00 -3.991580e+00 8.679888e-02 + 2.900000e+00 -2.314031e+00 -4.005392e+00 8.774513e-02 + 2.910000e+00 -2.334204e+00 -4.019204e+00 8.838627e-02 + 2.920000e+00 -2.345096e+00 -4.033016e+00 8.850696e-02 + 2.930000e+00 -2.348533e+00 -4.046827e+00 8.806776e-02 + 2.940000e+00 -2.346723e+00 -4.060639e+00 8.721507e-02 + 2.950000e+00 -2.342043e+00 -4.074451e+00 8.623706e-02 + 2.960000e+00 -2.336835e+00 -4.088262e+00 8.547181e-02 + 2.970000e+00 -2.333219e+00 -4.102074e+00 8.518872e-02 + 2.980000e+00 -2.332935e+00 -4.115886e+00 8.548554e-02 + 2.990000e+00 -2.337236e+00 -4.129697e+00 8.624986e-02 + 3.000000e+00 -2.346817e+00 -4.143509e+00 8.720597e-02 + 3.010000e+00 -2.361806e+00 -4.157321e+00 8.802122e-02 + 3.020000e+00 -2.381792e+00 -4.171133e+00 8.842215e-02 + 3.030000e+00 -2.405909e+00 -4.184944e+00 8.828001e-02 + 3.040000e+00 -2.432939e+00 -4.198756e+00 8.764730e-02 + 3.050000e+00 -2.461444e+00 -4.212568e+00 8.674126e-02 + 3.060000e+00 -2.489911e+00 -4.226379e+00 8.587672e-02 + 3.070000e+00 -2.516886e+00 -4.240191e+00 8.536071e-02 + 3.080000e+00 -2.541103e+00 -4.254003e+00 8.537964e-02 + 3.090000e+00 -2.561584e+00 -4.267814e+00 8.592621e-02 + 3.100000e+00 -2.577712e+00 -4.281626e+00 8.680329e-02 + 3.110000e+00 -2.589266e+00 -4.295438e+00 8.770250e-02 + 3.120000e+00 -2.596420e+00 -4.309250e+00 8.831725e-02 + 3.130000e+00 -2.599709e+00 -4.323061e+00 8.844402e-02 + 3.140000e+00 -2.599957e+00 -4.336873e+00 8.804325e-02 + 3.150000e+00 -2.598188e+00 -4.350685e+00 8.724975e-02 + 3.160000e+00 -2.595516e+00 -4.364496e+00 8.633174e-02 + 3.170000e+00 -2.593021e+00 -4.378308e+00 8.560513e-02 + 3.180000e+00 -2.591636e+00 -4.392120e+00 8.532290e-02 + 3.190000e+00 -2.592035e+00 -4.405931e+00 8.557901e-02 + 3.200000e+00 -2.594543e+00 -4.419743e+00 8.627157e-02 + 3.210000e+00 -2.599066e+00 -4.433555e+00 8.714478e-02 + 3.220000e+00 -2.605049e+00 -4.447366e+00 8.788730e-02 + 3.230000e+00 -2.611468e+00 -4.461178e+00 8.824143e-02 + 3.240000e+00 -2.616842e+00 -4.474990e+00 8.808516e-02 + 3.250000e+00 -2.619286e+00 -4.488802e+00 8.746838e-02 + 3.260000e+00 -2.616581e+00 -4.502613e+00 8.659820e-02 + 3.270000e+00 -2.606259e+00 -4.516425e+00 8.577550e-02 + 3.280000e+00 -2.585719e+00 -4.530237e+00 8.529449e-02 + 3.290000e+00 -2.552333e+00 -4.544048e+00 8.533489e-02 + 3.300000e+00 -2.503569e+00 -4.557860e+00 8.589126e-02 + 3.310000e+00 -2.437100e+00 -4.571672e+00 8.677526e-02 + 3.320000e+00 -2.350917e+00 -4.585483e+00 8.768926e-02 + 3.330000e+00 -2.243420e+00 -4.599295e+00 8.833407e-02 + 3.340000e+00 -2.113503e+00 -4.613107e+00 8.850678e-02 + 3.350000e+00 -1.960618e+00 -4.626919e+00 8.816083e-02 + 3.360000e+00 -1.784825e+00 -4.640730e+00 8.741788e-02 + 3.370000e+00 -1.586825e+00 -4.654542e+00 8.653083e-02 + 3.380000e+00 -1.367979e+00 -4.668354e+00 8.580368e-02 + 3.390000e+00 -1.130302e+00 -4.682165e+00 8.548686e-02 + 3.400000e+00 -8.764571e-01 -4.695977e+00 8.568406e-02 + 3.410000e+00 -6.097196e-01 -4.709789e+00 8.631281e-02 + 3.420000e+00 -3.339377e-01 -4.723600e+00 8.713910e-02 + 3.430000e+00 -5.347346e-02 -4.737412e+00 8.786787e-02 + 3.440000e+00 2.268704e-01 -4.751224e+00 8.824708e-02 + 3.450000e+00 5.019383e-01 -4.765036e+00 8.814830e-02 + 3.460000e+00 7.663258e-01 -4.778847e+00 8.760434e-02 + 3.470000e+00 1.014500e+00 -4.792659e+00 8.679847e-02 + 3.480000e+00 1.240932e+00 -4.806471e+00 8.600717e-02 + 3.490000e+00 1.440250e+00 -4.820282e+00 8.550784e-02 + 3.500000e+00 1.607392e+00 -4.834094e+00 8.547816e-02 + 3.510000e+00 1.737778e+00 -4.847906e+00 8.592753e-02 + 3.520000e+00 1.827471e+00 -4.861717e+00 8.669413e-02 + 3.530000e+00 1.873343e+00 -4.875529e+00 8.750884e-02 + 3.540000e+00 1.873221e+00 -4.889341e+00 8.809407e-02 + 3.550000e+00 1.826015e+00 -4.903152e+00 8.825661e-02 + 3.560000e+00 1.731819e+00 -4.916964e+00 8.794676e-02 + 3.570000e+00 1.591965e+00 -4.930776e+00 8.727197e-02 + 3.580000e+00 1.409047e+00 -4.944588e+00 8.646361e-02 + 3.590000e+00 1.186882e+00 -4.958399e+00 8.580261e-02 + 3.600000e+00 9.304277e-01 -4.972211e+00 8.552186e-02 + 3.610000e+00 6.456414e-01 -4.986023e+00 8.571906e-02 + 3.620000e+00 3.392945e-01 -4.999834e+00 8.631881e-02 + 3.630000e+00 1.873856e-02 -5.013646e+00 8.710326e-02 + 3.640000e+00 -3.083619e-01 -5.027458e+00 8.779520e-02 + 3.650000e+00 -6.343206e-01 -5.041269e+00 8.815575e-02 + 3.660000e+00 -9.517301e-01 -5.055081e+00 8.806124e-02 + 3.670000e+00 -1.253756e+00 -5.068893e+00 8.754045e-02 + 3.680000e+00 -1.534413e+00 -5.082705e+00 8.676573e-02 + 3.690000e+00 -1.788795e+00 -5.096516e+00 8.599990e-02 + 3.700000e+00 -2.013266e+00 -5.110328e+00 8.550922e-02 + 3.710000e+00 -2.205580e+00 -5.124140e+00 8.546775e-02 + 3.720000e+00 -2.364928e+00 -5.137951e+00 8.589091e-02 + 3.730000e+00 -2.491921e+00 -5.151763e+00 8.663012e-02 + 3.740000e+00 -2.588479e+00 -5.165575e+00 8.743106e-02 + 3.750000e+00 -2.657671e+00 -5.179386e+00 8.802674e-02 + 3.760000e+00 -2.703479e+00 -5.193198e+00 8.822663e-02 + 3.770000e+00 -2.730520e+00 -5.207010e+00 8.797479e-02 + 3.780000e+00 -2.743737e+00 -5.220822e+00 8.736478e-02 + 3.790000e+00 -2.748083e+00 -5.234633e+00 8.660995e-02 + 3.800000e+00 -2.748209e+00 -5.248445e+00 8.597450e-02 + 3.810000e+00 -2.748188e+00 -5.262257e+00 8.568213e-02 + 3.820000e+00 -2.751276e+00 -5.276068e+00 8.583325e-02 + 3.830000e+00 -2.759752e+00 -5.289880e+00 8.636683e-02 + 3.840000e+00 -2.774817e+00 -5.303692e+00 8.708555e-02 + 3.850000e+00 -2.796588e+00 -5.317503e+00 8.773157e-02 + 3.860000e+00 -2.824158e+00 -5.331315e+00 8.807818e-02 + 3.870000e+00 -2.855748e+00 -5.345127e+00 8.800391e-02 + 3.880000e+00 -2.888908e+00 -5.358939e+00 8.752973e-02 + 3.890000e+00 -2.920779e+00 -5.372750e+00 8.681247e-02 + 3.900000e+00 -2.948371e+00 -5.386562e+00 8.609591e-02 + 3.910000e+00 -2.968861e+00 -5.400374e+00 8.562970e-02 + 3.920000e+00 -2.979857e+00 -5.414185e+00 8.557964e-02 + 3.930000e+00 -2.979632e+00 -5.427997e+00 8.596450e-02 + 3.940000e+00 -2.967290e+00 -5.441809e+00 8.664908e-02 + 3.950000e+00 -2.942857e+00 -5.455620e+00 8.739672e-02 + 3.960000e+00 -2.907272e+00 -5.469432e+00 8.795581e-02 + 3.970000e+00 -2.862300e+00 -5.483244e+00 8.814437e-02 + 3.980000e+00 -2.810334e+00 -5.497055e+00 8.790624e-02 + 3.990000e+00 -2.754132e+00 -5.510867e+00 8.732687e-02 + 4.000000e+00 -2.696475e+00 -5.524679e+00 8.660621e-02 + 4.010000e+00 -2.639789e+00 -5.538491e+00 8.599417e-02 + 4.020000e+00 -2.585754e+00 -5.552302e+00 8.570445e-02 + 4.030000e+00 -2.534926e+00 -5.566114e+00 8.583588e-02 + 4.040000e+00 -2.486404e+00 -5.579926e+00 8.633496e-02 + 4.050000e+00 -2.437580e+00 -5.593737e+00 8.701785e-02 + 4.060000e+00 -2.383991e+00 -5.607549e+00 8.764065e-02 + 4.070000e+00 -2.319291e+00 -5.621361e+00 8.798621e-02 + 4.080000e+00 -2.235371e+00 -5.635172e+00 8.793541e-02 + 4.090000e+00 -2.122615e+00 -5.648984e+00 8.750393e-02 + 4.100000e+00 -1.970297e+00 -5.662796e+00 8.683711e-02 + 4.110000e+00 -1.767102e+00 -5.676608e+00 8.616432e-02 + 4.120000e+00 -1.501749e+00 -5.690419e+00 8.572243e-02 + 4.130000e+00 -1.163683e+00 -5.704231e+00 8.567084e-02 + 4.140000e+00 -7.438005e-01 -5.718043e+00 8.603091e-02 + 4.150000e+00 -2.351580e-01 -5.731854e+00 8.667774e-02 + 4.160000e+00 3.663656e-01 -5.745666e+00 8.738832e-02 + 4.170000e+00 1.061510e+00 -5.759478e+00 8.792278e-02 + 4.180000e+00 1.847208e+00 -5.773289e+00 8.810524e-02 + 4.190000e+00 2.716329e+00 -5.787101e+00 8.787868e-02 + 4.200000e+00 3.657618e+00 -5.800913e+00 8.732138e-02 + 4.210000e+00 4.655841e+00 -5.814725e+00 8.662233e-02 + 4.220000e+00 5.692133e+00 -5.828536e+00 8.602054e-02 + 4.230000e+00 6.744555e+00 -5.842348e+00 8.572319e-02 + 4.240000e+00 7.788825e+00 -5.856160e+00 8.583002e-02 + 4.250000e+00 8.799190e+00 -5.869971e+00 8.629595e-02 + 4.260000e+00 9.749408e+00 -5.883783e+00 8.694977e-02 + 4.270000e+00 1.061379e+01 -5.897595e+00 8.755959e-02 + 4.280000e+00 1.136822e+01 -5.911406e+00 8.791545e-02 + 4.290000e+00 1.199120e+01 -5.925218e+00 8.789847e-02 + 4.300000e+00 1.246467e+01 -5.939030e+00 8.751740e-02 + 4.310000e+00 1.277484e+01 -5.952841e+00 8.690514e-02 + 4.320000e+00 1.291270e+01 -5.966653e+00 8.627632e-02 + 4.330000e+00 1.287439e+01 -5.980465e+00 8.585518e-02 + 4.340000e+00 1.266135e+01 -5.994277e+00 8.579510e-02 + 4.350000e+00 1.228021e+01 -6.008088e+00 8.612033e-02 + 4.360000e+00 1.174245e+01 -6.021900e+00 8.671645e-02 + 4.370000e+00 1.106387e+01 -6.035712e+00 8.737418e-02 + 4.380000e+00 1.026392e+01 -6.049523e+00 8.786556e-02 + 4.390000e+00 9.364814e+00 -6.063335e+00 8.802129e-02 + 4.400000e+00 8.390613e+00 -6.077147e+00 8.778446e-02 + 4.410000e+00 7.366263e+00 -6.090958e+00 8.722793e-02 + 4.420000e+00 6.316617e+00 -6.104770e+00 8.653223e-02 + 4.430000e+00 5.265521e+00 -6.118582e+00 8.592841e-02 + 4.440000e+00 4.234999e+00 -6.132394e+00 8.561983e-02 + 4.450000e+00 3.244559e+00 -6.146205e+00 8.570877e-02 + 4.460000e+00 2.310668e+00 -6.160017e+00 8.615855e-02 + 4.470000e+00 1.446384e+00 -6.173829e+00 8.680890e-02 + 4.480000e+00 6.611823e-01 -6.187640e+00 8.743706e-02 + 4.490000e+00 -3.905441e-02 -6.201452e+00 8.783681e-02 + 4.500000e+00 -6.518808e-01 -6.215264e+00 8.788586e-02 + 4.510000e+00 -1.177993e+00 -6.229075e+00 8.758252e-02 + 4.520000e+00 -1.620823e+00 -6.242887e+00 8.704418e-02 + 4.530000e+00 -1.986045e+00 -6.256699e+00 8.646856e-02 + 4.540000e+00 -2.281044e+00 -6.270511e+00 8.606669e-02 + 4.550000e+00 -2.514362e+00 -6.284322e+00 8.598740e-02 + 4.560000e+00 -2.695158e+00 -6.298134e+00 8.626153e-02 + 4.570000e+00 -2.832719e+00 -6.311946e+00 8.679056e-02 + 4.580000e+00 -2.936024e+00 -6.325757e+00 8.738503e-02 + 4.590000e+00 -3.013391e+00 -6.339569e+00 8.783451e-02 + 4.600000e+00 -3.072212e+00 -6.353381e+00 8.798044e-02 + 4.610000e+00 -3.118767e+00 -6.367192e+00 8.776777e-02 + 4.620000e+00 -3.158134e+00 -6.381004e+00 8.726241e-02 + 4.630000e+00 -3.194163e+00 -6.394816e+00 8.663102e-02 + 4.640000e+00 -3.229516e+00 -6.408627e+00 8.608727e-02 + 4.650000e+00 -3.265756e+00 -6.422439e+00 8.581849e-02 + 4.660000e+00 -3.303465e+00 -6.436251e+00 8.591708e-02 + 4.670000e+00 -3.342377e+00 -6.450063e+00 8.634536e-02 + 4.680000e+00 -3.381515e+00 -6.463874e+00 8.695011e-02 + 4.690000e+00 -3.419326e+00 -6.477686e+00 8.751985e-02 + 4.700000e+00 -3.453792e+00 -6.491498e+00 8.785941e-02 + 4.710000e+00 -3.482530e+00 -6.505309e+00 8.785407e-02 + 4.720000e+00 -3.502873e+00 -6.519121e+00 8.750507e-02 + 4.730000e+00 -3.511939e+00 -6.532933e+00 8.692868e-02 + 4.740000e+00 -3.506682e+00 -6.546744e+00 8.631937e-02 + 4.750000e+00 -3.483957e+00 -6.560556e+00 8.588540e-02 + 4.760000e+00 -3.440576e+00 -6.574368e+00 8.577557e-02 + 4.770000e+00 -3.373385e+00 -6.588180e+00 8.602434e-02 + 4.780000e+00 -3.279357e+00 -6.601991e+00 8.653953e-02 + 4.790000e+00 -3.155710e+00 -6.615803e+00 8.713833e-02 + 4.800000e+00 -3.000036e+00 -6.629615e+00 8.761468e-02 + 4.810000e+00 -2.810458e+00 -6.643426e+00 8.781026e-02 + 4.820000e+00 -2.585794e+00 -6.657238e+00 8.766528e-02 + 4.830000e+00 -2.325724e+00 -6.671050e+00 8.723634e-02 + 4.840000e+00 -2.030943e+00 -6.684861e+00 8.667774e-02 + 4.850000e+00 -1.703304e+00 -6.698673e+00 8.619059e-02 + 4.860000e+00 -1.345909e+00 -6.712485e+00 8.595303e-02 + 4.870000e+00 -9.631702e-01 -6.726297e+00 8.605479e-02 + 4.880000e+00 -5.608041e-01 -6.740108e+00 8.646303e-02 + 4.890000e+00 -1.457638e-01 -6.753920e+00 8.703493e-02 + 4.900000e+00 2.738950e-01 -6.767732e+00 8.757120e-02 + 4.910000e+00 6.892164e-01 -6.781543e+00 8.788676e-02 + 4.920000e+00 1.090608e+00 -6.795355e+00 8.787244e-02 + 4.930000e+00 1.468155e+00 -6.809167e+00 8.752974e-02 + 4.940000e+00 1.811980e+00 -6.822978e+00 8.697063e-02 + 4.950000e+00 2.112617e+00 -6.836790e+00 8.638246e-02 + 4.960000e+00 2.361395e+00 -6.850602e+00 8.596608e-02 + 4.970000e+00 2.550801e+00 -6.864413e+00 8.586518e-02 + 4.980000e+00 2.674816e+00 -6.878225e+00 8.611303e-02 + 4.990000e+00 2.729185e+00 -6.892037e+00 8.661999e-02 + 5.000000e+00 2.711627e+00 -6.905849e+00 8.720766e-02 + 5.010000e+00 2.621959e+00 -6.919660e+00 8.767376e-02 + 5.020000e+00 2.462128e+00 -6.933472e+00 8.786104e-02 + 5.030000e+00 2.236157e+00 -6.947284e+00 8.770755e-02 + 5.040000e+00 1.949990e+00 -6.961095e+00 8.726511e-02 + 5.050000e+00 1.611265e+00 -6.974907e+00 8.668269e-02 + 5.060000e+00 1.229002e+00 -6.988719e+00 8.615816e-02 + 5.070000e+00 8.132488e-01 -7.002530e+00 8.587099e-02 + 5.080000e+00 3.746712e-01 -7.016342e+00 8.591790e-02 + 5.090000e+00 -7.586038e-02 -7.030154e+00 8.627722e-02 + 5.100000e+00 -5.276906e-01 -7.043966e+00 8.681827e-02 + 5.110000e+00 -9.707736e-01 -7.057777e+00 8.735105e-02 + 5.120000e+00 -1.396027e+00 -7.071589e+00 8.769425e-02 + 5.130000e+00 -1.795627e+00 -7.085401e+00 8.773588e-02 + 5.140000e+00 -2.163237e+00 -7.099212e+00 8.746834e-02 + 5.150000e+00 -2.494151e+00 -7.113024e+00 8.698983e-02 + 5.160000e+00 -2.785361e+00 -7.126836e+00 8.647198e-02 + 5.170000e+00 -3.035536e+00 -7.140647e+00 8.610178e-02 + 5.180000e+00 -3.244924e+00 -7.154459e+00 8.601496e-02 + 5.190000e+00 -3.415178e+00 -7.168271e+00 8.624523e-02 + 5.200000e+00 -3.549129e+00 -7.182083e+00 8.671154e-02 + 5.210000e+00 -3.650505e+00 -7.195894e+00 8.724892e-02 + 5.220000e+00 -3.723620e+00 -7.209706e+00 8.766895e-02 + 5.230000e+00 -3.773049e+00 -7.223518e+00 8.782505e-02 + 5.240000e+00 -3.803304e+00 -7.237329e+00 8.766071e-02 + 5.250000e+00 -3.818524e+00 -7.251141e+00 8.722768e-02 + 5.260000e+00 -3.822194e+00 -7.264953e+00 8.667016e-02 + 5.270000e+00 -3.816918e+00 -7.278764e+00 8.617831e-02 + 5.280000e+00 -3.804229e+00 -7.292576e+00 8.592329e-02 + 5.290000e+00 -3.784477e+00 -7.306388e+00 8.599517e-02 + 5.300000e+00 -3.756772e+00 -7.320200e+00 8.636886e-02 + 5.310000e+00 -3.718998e+00 -7.334011e+00 8.691337e-02 + 5.320000e+00 -3.667897e+00 -7.347823e+00 8.744021e-02 + 5.330000e+00 -3.599214e+00 -7.361635e+00 8.776965e-02 + 5.340000e+00 -3.507905e+00 -7.375446e+00 8.779011e-02 + 5.350000e+00 -3.388388e+00 -7.389258e+00 8.749321e-02 + 5.360000e+00 -3.234838e+00 -7.403070e+00 8.697617e-02 + 5.370000e+00 -3.041515e+00 -7.416881e+00 8.641121e-02 + 5.380000e+00 -2.803099e+00 -7.430693e+00 8.598917e-02 + 5.390000e+00 -2.515036e+00 -7.444505e+00 8.585342e-02 + 5.400000e+00 -2.173860e+00 -7.458316e+00 8.604798e-02 + 5.410000e+00 -1.777503e+00 -7.472128e+00 8.650183e-02 + 5.420000e+00 -1.325552e+00 -7.485940e+00 8.705661e-02 + 5.430000e+00 -8.194596e-01 -7.499752e+00 8.752478e-02 + 5.440000e+00 -2.626892e-01 -7.513563e+00 8.775421e-02 + 5.450000e+00 3.392176e-01 -7.527375e+00 8.767696e-02 + 5.460000e+00 9.786512e-01 -7.541187e+00 8.732932e-02 + 5.470000e+00 1.646031e+00 -7.554998e+00 8.683885e-02 + 5.480000e+00 2.329988e+00 -7.568810e+00 8.638176e-02 + 5.490000e+00 3.017633e+00 -7.582622e+00 8.612218e-02 + 5.500000e+00 3.694900e+00 -7.596433e+00 8.615289e-02 + 5.510000e+00 4.346958e+00 -7.610245e+00 8.646102e-02 + 5.520000e+00 4.958674e+00 -7.624057e+00 8.693372e-02 + 5.530000e+00 5.515119e+00 -7.637869e+00 8.740100e-02 + 5.540000e+00 6.002084e+00 -7.651680e+00 8.769710e-02 + 5.550000e+00 6.406594e+00 -7.665492e+00 8.771699e-02 + 5.560000e+00 6.717406e+00 -7.679304e+00 8.745053e-02 + 5.570000e+00 6.925442e+00 -7.693115e+00 8.698579e-02 + 5.580000e+00 7.024169e+00 -7.706927e+00 8.648066e-02 + 5.590000e+00 7.009884e+00 -7.720739e+00 8.610998e-02 + 5.600000e+00 6.881897e+00 -7.734550e+00 8.600369e-02 + 5.610000e+00 6.642601e+00 -7.748362e+00 8.619864e-02 + 5.620000e+00 6.297426e+00 -7.762174e+00 8.662450e-02 + 5.630000e+00 5.854665e+00 -7.775986e+00 8.713015e-02 + 5.640000e+00 5.325193e+00 -7.789797e+00 8.753878e-02 + 5.650000e+00 4.722072e+00 -7.803609e+00 8.770900e-02 + 5.660000e+00 4.060080e+00 -7.817421e+00 8.758144e-02 + 5.670000e+00 3.355160e+00 -7.831232e+00 8.719768e-02 + 5.680000e+00 2.623839e+00 -7.845044e+00 8.668744e-02 + 5.690000e+00 1.882618e+00 -7.858856e+00 8.622663e-02 + 5.700000e+00 1.147384e+00 -7.872667e+00 8.597749e-02 + 5.710000e+00 4.328576e-01 -7.886479e+00 8.603025e-02 + 5.720000e+00 -2.478914e-01 -7.900291e+00 8.636931e-02 + 5.730000e+00 -8.838435e-01 -7.914102e+00 8.687907e-02 + 5.740000e+00 -1.466320e+00 -7.927914e+00 8.738655e-02 + 5.750000e+00 -1.989158e+00 -7.941726e+00 8.772229e-02 + 5.760000e+00 -2.448757e+00 -7.955538e+00 8.777674e-02 + 5.770000e+00 -2.844007e+00 -7.969349e+00 8.753466e-02 + 5.780000e+00 -3.176100e+00 -7.983161e+00 8.707946e-02 + 5.790000e+00 -3.448233e+00 -7.996973e+00 8.656641e-02 + 5.800000e+00 -3.665236e+00 -8.010784e+00 8.617139e-02 + 5.810000e+00 -3.833133e+00 -8.024596e+00 8.602990e-02 + 5.820000e+00 -3.958675e+00 -8.038408e+00 8.618804e-02 + 5.830000e+00 -4.048865e+00 -8.052219e+00 8.658593e-02 + 5.840000e+00 -4.110503e+00 -8.066031e+00 8.708082e-02 + 5.850000e+00 -4.149782e+00 -8.079843e+00 8.749955e-02 + 5.860000e+00 -4.171953e+00 -8.093655e+00 8.769861e-02 + 5.870000e+00 -4.181080e+00 -8.107466e+00 8.761101e-02 + 5.880000e+00 -4.179890e+00 -8.121278e+00 8.726695e-02 + 5.890000e+00 -4.169735e+00 -8.135090e+00 8.678365e-02 + 5.900000e+00 -4.150654e+00 -8.148901e+00 8.632682e-02 + 5.910000e+00 -4.121538e+00 -8.162713e+00 8.605422e-02 + 5.920000e+00 -4.080373e+00 -8.176525e+00 8.605936e-02 + 5.930000e+00 -4.024548e+00 -8.190336e+00 8.633734e-02 + 5.940000e+00 -3.951214e+00 -8.204148e+00 8.678737e-02 + 5.950000e+00 -3.857649e+00 -8.217960e+00 8.725091e-02 + 5.960000e+00 -3.741620e+00 -8.231772e+00 8.756870e-02 + 5.970000e+00 -3.601711e+00 -8.245583e+00 8.763482e-02 + 5.980000e+00 -3.437595e+00 -8.259395e+00 8.743080e-02 + 5.990000e+00 -3.250224e+00 -8.273207e+00 8.703087e-02 + 6.000000e+00 -3.041939e+00 -8.287018e+00 8.657745e-02 + 6.010000e+00 -2.816474e+00 -8.300830e+00 8.623311e-02 + 6.020000e+00 -2.578867e+00 -8.314642e+00 8.612316e-02 + 6.030000e+00 -2.335272e+00 -8.328453e+00 8.628953e-02 + 6.040000e+00 -2.092693e+00 -8.342265e+00 8.667500e-02 + 6.050000e+00 -1.858648e+00 -8.356077e+00 8.714473e-02 + 6.060000e+00 -1.640791e+00 -8.369888e+00 8.753548e-02 + 6.070000e+00 -1.446513e+00 -8.383700e+00 8.771242e-02 + 6.080000e+00 -1.282544e+00 -8.397512e+00 8.761380e-02 + 6.090000e+00 -1.154595e+00 -8.411324e+00 8.727067e-02 + 6.100000e+00 -1.067042e+00 -8.425135e+00 8.679705e-02 + 6.110000e+00 -1.022691e+00 -8.438947e+00 8.635272e-02 + 6.120000e+00 -1.022633e+00 -8.452759e+00 8.608880e-02 + 6.130000e+00 -1.066192e+00 -8.466570e+00 8.609374e-02 + 6.140000e+00 -1.150981e+00 -8.480382e+00 8.636059e-02 + 6.150000e+00 -1.273047e+00 -8.494194e+00 8.678994e-02 + 6.160000e+00 -1.427113e+00 -8.508005e+00 8.722702e-02 + 6.170000e+00 -1.606882e+00 -8.521817e+00 8.751718e-02 + 6.180000e+00 -1.805393e+00 -8.535629e+00 8.755858e-02 + 6.190000e+00 -2.015408e+00 -8.549441e+00 8.733548e-02 + 6.200000e+00 -2.229787e+00 -8.563252e+00 8.692355e-02 + 6.210000e+00 -2.441843e+00 -8.577064e+00 8.646565e-02 + 6.220000e+00 -2.645638e+00 -8.590876e+00 8.612434e-02 + 6.230000e+00 -2.836214e+00 -8.604687e+00 8.602490e-02 + 6.240000e+00 -3.009722e+00 -8.618499e+00 8.620926e-02 + 6.250000e+00 -3.163462e+00 -8.632311e+00 8.661987e-02 + 6.260000e+00 -3.295813e+00 -8.646122e+00 8.712074e-02 + 6.270000e+00 -3.406071e+00 -8.659934e+00 8.754630e-02 + 6.280000e+00 -3.494195e+00 -8.673746e+00 8.775802e-02 + 6.290000e+00 -3.560494e+00 -8.687558e+00 8.768946e-02 + 6.300000e+00 -3.605266e+00 -8.701369e+00 8.736689e-02 + 6.310000e+00 -3.628425e+00 -8.715181e+00 8.690065e-02 + 6.320000e+00 -3.629147e+00 -8.728993e+00 8.644948e-02 + 6.330000e+00 -3.605564e+00 -8.742804e+00 8.616701e-02 + 6.340000e+00 -3.554534e+00 -8.756616e+00 8.614766e-02 + 6.350000e+00 -3.471511e+00 -8.770428e+00 8.639233e-02 + 6.360000e+00 -3.350547e+00 -8.784239e+00 8.680872e-02 + 6.370000e+00 -3.184410e+00 -8.798051e+00 8.724599e-02 + 6.380000e+00 -2.964853e+00 -8.811863e+00 8.754876e-02 + 6.390000e+00 -2.683002e+00 -8.825674e+00 8.760987e-02 + 6.400000e+00 -2.329863e+00 -8.839486e+00 8.740504e-02 + 6.410000e+00 -1.896913e+00 -8.853298e+00 8.700040e-02 + 6.420000e+00 -1.376751e+00 -8.867110e+00 8.653120e-02 + 6.430000e+00 -7.637666e-01 -8.880921e+00 8.615719e-02 + 6.440000e+00 -5.478658e-02 -8.894733e+00 8.600743e-02 + 6.450000e+00 7.503419e-01 -8.908545e+00 8.613388e-02 + 6.460000e+00 1.648275e+00 -8.922356e+00 8.649247e-02 + 6.470000e+00 2.631839e+00 -8.936168e+00 8.696004e-02 + 6.480000e+00 3.689864e+00 -8.949980e+00 8.737928e-02 + 6.490000e+00 4.807217e+00 -8.963791e+00 8.761334e-02 + 6.500000e+00 5.965040e+00 -8.977603e+00 8.759051e-02 + 6.510000e+00 7.141184e+00 -8.991415e+00 8.732628e-02 + 6.520000e+00 8.310844e+00 -9.005227e+00 8.691727e-02 + 6.530000e+00 9.447355e+00 -9.019038e+00 8.650892e-02 + 6.540000e+00 1.052313e+01 -9.032850e+00 8.624585e-02 + 6.550000e+00 1.151068e+01 -9.046662e+00 8.622056e-02 + 6.560000e+00 1.238368e+01 -9.060473e+00 8.643989e-02 + 6.570000e+00 1.311803e+01 -9.074285e+00 8.682322e-02 + 6.580000e+00 1.369284e+01 -9.088097e+00 8.723311e-02 + 6.590000e+00 1.409131e+01 -9.101908e+00 8.752513e-02 + 6.600000e+00 1.430143e+01 -9.115720e+00 8.759756e-02 + 6.610000e+00 1.431653e+01 -9.129532e+00 8.742490e-02 + 6.620000e+00 1.413553e+01 -9.143344e+00 8.706581e-02 + 6.630000e+00 1.376303e+01 -9.157155e+00 8.664383e-02 + 6.640000e+00 1.320907e+01 -9.170967e+00 8.630586e-02 + 6.650000e+00 1.248876e+01 -9.184779e+00 8.617074e-02 + 6.660000e+00 1.162158e+01 -9.198590e+00 8.628606e-02 + 6.670000e+00 1.063063e+01 -9.212402e+00 8.661044e-02 + 6.680000e+00 9.541615e+00 -9.226214e+00 8.702918e-02 + 6.690000e+00 8.381888e+00 -9.240025e+00 8.739620e-02 + 6.700000e+00 7.179331e+00 -9.253837e+00 8.758517e-02 + 6.710000e+00 5.961341e+00 -9.267649e+00 8.753185e-02 + 6.720000e+00 4.753851e+00 -9.281461e+00 8.725476e-02 + 6.730000e+00 3.580485e+00 -9.295272e+00 8.684917e-02 + 6.740000e+00 2.461850e+00 -9.309084e+00 8.645577e-02 + 6.750000e+00 1.415025e+00 -9.322896e+00 8.621269e-02 + 6.760000e+00 4.532287e-01 -9.336707e+00 8.620624e-02 + 6.770000e+00 -4.142968e-01 -9.350519e+00 8.643915e-02 + 6.780000e+00 -1.182223e+00 -9.364331e+00 8.682945e-02 + 6.790000e+00 -1.848891e+00 -9.378142e+00 8.724072e-02 + 6.800000e+00 -2.415919e+00 -9.391954e+00 8.753056e-02 + 6.810000e+00 -2.887703e+00 -9.405766e+00 8.759901e-02 + 6.820000e+00 -3.270830e+00 -9.419577e+00 8.742103e-02 + 6.830000e+00 -3.573468e+00 -9.433389e+00 8.705433e-02 + 6.840000e+00 -3.804748e+00 -9.447201e+00 8.662072e-02 + 6.850000e+00 -3.974192e+00 -9.461013e+00 8.626564e-02 + 6.860000e+00 -4.091203e+00 -9.474824e+00 8.610804e-02 + 6.870000e+00 -4.164653e+00 -9.488636e+00 8.619781e-02 + 6.880000e+00 -4.202570e+00 -9.502448e+00 8.649787e-02 + 6.890000e+00 -4.211947e+00 -9.516259e+00 8.689872e-02 + 6.900000e+00 -4.198652e+00 -9.530071e+00 8.725885e-02 + 6.910000e+00 -4.167450e+00 -9.543883e+00 8.745463e-02 + 6.920000e+00 -4.122095e+00 -9.557694e+00 8.742188e-02 + 6.930000e+00 -4.065505e+00 -9.571506e+00 8.717653e-02 + 6.940000e+00 -3.999959e+00 -9.585318e+00 8.680901e-02 + 6.950000e+00 -3.927327e+00 -9.599130e+00 8.645406e-02 + 6.960000e+00 -3.849278e+00 -9.612941e+00 8.624413e-02 + 6.970000e+00 -3.767473e+00 -9.626753e+00 8.626168e-02 + 6.980000e+00 -3.683709e+00 -9.640565e+00 8.650827e-02 + 6.990000e+00 -3.600007e+00 -9.654376e+00 8.690351e-02 + 7.000000e+00 -3.518647e+00 -9.668188e+00 8.731419e-02 + 7.010000e+00 -3.442143e+00 -9.682000e+00 8.760140e-02 + 7.020000e+00 -3.373162e+00 -9.695811e+00 8.766765e-02 + 7.030000e+00 -3.314405e+00 -9.709623e+00 8.748867e-02 + 7.040000e+00 -3.268464e+00 -9.723435e+00 8.712136e-02 + 7.050000e+00 -3.237658e+00 -9.737247e+00 8.668565e-02 + 7.060000e+00 -3.223883e+00 -9.751058e+00 8.632511e-02 + 7.070000e+00 -3.228470e+00 -9.764870e+00 8.615774e-02 + 7.080000e+00 -3.252079e+00 -9.778682e+00 8.623406e-02 + 7.090000e+00 -3.294630e+00 -9.792493e+00 8.651903e-02 + 7.100000e+00 -3.355279e+00 -9.806305e+00 8.690579e-02 + 7.110000e+00 -3.432434e+00 -9.820117e+00 8.725504e-02 + 7.120000e+00 -3.523812e+00 -9.833928e+00 8.744407e-02 + 7.130000e+00 -3.626529e+00 -9.847740e+00 8.740803e-02 + 7.140000e+00 -3.737210e+00 -9.861552e+00 8.716079e-02 + 7.150000e+00 -3.852113e+00 -9.875363e+00 8.679014e-02 + 7.160000e+00 -3.967249e+00 -9.889175e+00 8.642857e-02 + 7.170000e+00 -4.078489e+00 -9.902987e+00 8.620775e-02 + 7.180000e+00 -4.181658e+00 -9.916799e+00 8.621132e-02 + 7.190000e+00 -4.272592e+00 -9.930610e+00 8.644384e-02 + 7.200000e+00 -4.347178e+00 -9.944422e+00 8.682872e-02 + 7.210000e+00 -4.401366e+00 -9.958234e+00 8.723616e-02 + 7.220000e+00 -4.431155e+00 -9.972045e+00 8.752910e-02 + 7.230000e+00 -4.432579e+00 -9.985857e+00 8.760985e-02 + 7.240000e+00 -4.401686e+00 -9.999669e+00 8.745203e-02 + 7.250000e+00 -4.334534e+00 -1.001348e+01 8.710905e-02 + 7.260000e+00 -4.227210e+00 -1.002729e+01 8.669701e-02 + 7.270000e+00 -4.075886e+00 -1.004110e+01 8.635634e-02 + 7.280000e+00 -3.876916e+00 -1.005492e+01 8.620357e-02 + 7.290000e+00 -3.626982e+00 -1.006873e+01 8.628964e-02 + 7.300000e+00 -3.323282e+00 -1.008254e+01 8.658147e-02 + 7.310000e+00 -2.963758e+00 -1.009635e+01 8.697451e-02 + 7.320000e+00 -2.547353e+00 -1.011016e+01 8.733096e-02 + 7.330000e+00 -2.074275e+00 -1.012397e+01 8.752789e-02 + 7.340000e+00 -1.546259e+00 -1.013779e+01 8.749837e-02 + 7.350000e+00 -9.667883e-01 -1.015160e+01 8.725294e-02 + 7.360000e+00 -3.412800e-01 -1.016541e+01 8.687595e-02 + 7.370000e+00 3.228177e-01 -1.017922e+01 8.649780e-02 + 7.380000e+00 1.016010e+00 -1.019303e+01 8.625065e-02 + 7.390000e+00 1.726847e+00 -1.020684e+01 8.622171e-02 + 7.400000e+00 2.442125e+00 -1.022066e+01 8.642147e-02 + 7.410000e+00 3.147204e+00 -1.023447e+01 8.677992e-02 + 7.420000e+00 3.826419e+00 -1.024828e+01 8.717238e-02 + 7.430000e+00 4.463596e+00 -1.026209e+01 8.746396e-02 + 7.440000e+00 5.042623e+00 -1.027590e+01 8.755554e-02 + 7.450000e+00 5.548071e+00 -1.028971e+01 8.741620e-02 + 7.460000e+00 5.965823e+00 -1.030353e+01 8.709278e-02 + 7.470000e+00 6.283678e+00 -1.031734e+01 8.669456e-02 + 7.480000e+00 6.491899e+00 -1.033115e+01 8.635679e-02 + 7.490000e+00 6.583679e+00 -1.034496e+01 8.619412e-02 + 7.500000e+00 6.555482e+00 -1.035877e+01 8.625962e-02 + 7.510000e+00 6.407260e+00 -1.037258e+01 8.652573e-02 + 7.520000e+00 6.142512e+00 -1.038640e+01 8.689495e-02 + 7.530000e+00 5.768195e+00 -1.040021e+01 8.723582e-02 + 7.540000e+00 5.294482e+00 -1.041402e+01 8.742941e-02 + 7.550000e+00 4.734383e+00 -1.042783e+01 8.740958e-02 + 7.560000e+00 4.103251e+00 -1.044164e+01 8.718460e-02 + 7.570000e+00 3.418196e+00 -1.045545e+01 8.683440e-02 + 7.580000e+00 2.697439e+00 -1.046927e+01 8.648406e-02 + 7.590000e+00 1.959645e+00 -1.048308e+01 8.626112e-02 + 7.600000e+00 1.223256e+00 -1.049689e+01 8.625008e-02 + 7.610000e+00 5.058789e-01 -1.051070e+01 8.646118e-02 + 7.620000e+00 -1.762705e-01 -1.052451e+01 8.682625e-02 + 7.630000e+00 -8.088206e-01 -1.053832e+01 8.722328e-02 + 7.640000e+00 -1.379593e+00 -1.055214e+01 8.751959e-02 + 7.650000e+00 -1.878834e+00 -1.056595e+01 8.761687e-02 + 7.660000e+00 -2.299321e+00 -1.057976e+01 8.748327e-02 + 7.670000e+00 -2.636371e+00 -1.059357e+01 8.716352e-02 + 7.680000e+00 -2.887729e+00 -1.060738e+01 8.676455e-02 + 7.690000e+00 -3.053399e+00 -1.062120e+01 8.642026e-02 + 7.700000e+00 -3.135390e+00 -1.063501e+01 8.624582e-02 + 7.710000e+00 -3.137448e+00 -1.064882e+01 8.629701e-02 + 7.720000e+00 -3.064754e+00 -1.066263e+01 8.655023e-02 + 7.730000e+00 -2.923640e+00 -1.067644e+01 8.691194e-02 + 7.740000e+00 -2.721321e+00 -1.069025e+01 8.725297e-02 + 7.750000e+00 -2.465665e+00 -1.070407e+01 8.745415e-02 + 7.760000e+00 -2.165005e+00 -1.071788e+01 8.744637e-02 + 7.770000e+00 -1.827993e+00 -1.073169e+01 8.723295e-02 + 7.780000e+00 -1.463495e+00 -1.074550e+01 8.688815e-02 + 7.790000e+00 -1.080518e+00 -1.075931e+01 8.653246e-02 + 7.800000e+00 -6.881554e-01 -1.077312e+01 8.629153e-02 + 7.810000e+00 -2.955460e-01 -1.078694e+01 8.625170e-02 + 7.820000e+00 8.818105e-02 -1.080075e+01 8.642853e-02 + 7.830000e+00 4.539747e-01 -1.081456e+01 8.676105e-02 + 7.840000e+00 7.929615e-01 -1.082837e+01 8.713417e-02 + 7.850000e+00 1.096579e+00 -1.084218e+01 8.741985e-02 + 7.860000e+00 1.356747e+00 -1.085599e+01 8.752100e-02 + 7.870000e+00 1.566073e+00 -1.086981e+01 8.740354e-02 + 7.880000e+00 1.718081e+00 -1.088362e+01 8.710728e-02 + 7.890000e+00 1.807461e+00 -1.089743e+01 8.673292e-02 + 7.900000e+00 1.830310e+00 -1.091124e+01 8.640862e-02 + 7.910000e+00 1.784361e+00 -1.092505e+01 8.624595e-02 + 7.920000e+00 1.669172e+00 -1.093886e+01 8.630016e-02 + 7.930000e+00 1.486265e+00 -1.095268e+01 8.655020e-02 + 7.940000e+00 1.239192e+00 -1.096649e+01 8.690681e-02 + 7.950000e+00 9.335295e-01 -1.098030e+01 8.724518e-02 + 7.960000e+00 5.767748e-01 -1.099411e+01 8.744885e-02 + 7.970000e+00 1.781685e-01 -1.100792e+01 8.744896e-02 + 7.980000e+00 -2.515741e-01 -1.102173e+01 8.724661e-02 + 7.990000e+00 -7.006017e-01 -1.103555e+01 8.691219e-02 + 8.000000e+00 -1.156323e+00 -1.104936e+01 8.656200e-02 + 8.010000e+00 -1.605844e+00 -1.106317e+01 8.631875e-02 + 8.020000e+00 -2.036420e+00 -1.107698e+01 8.626827e-02 + 8.030000e+00 -2.435906e+00 -1.109079e+01 8.642838e-02 + 8.040000e+00 -2.793178e+00 -1.110460e+01 8.674233e-02 + 8.050000e+00 -3.098512e+00 -1.111842e+01 8.709977e-02 + 8.060000e+00 -3.343890e+00 -1.113223e+01 8.737617e-02 + 8.070000e+00 -3.523241e+00 -1.114604e+01 8.747575e-02 + 8.080000e+00 -3.632589e+00 -1.115985e+01 8.736322e-02 + 8.090000e+00 -3.670114e+00 -1.117366e+01 8.707518e-02 + 8.100000e+00 -3.636133e+00 -1.118747e+01 8.670830e-02 + 8.110000e+00 -3.532999e+00 -1.120129e+01 8.638727e-02 + 8.120000e+00 -3.364936e+00 -1.121510e+01 8.622217e-02 + 8.130000e+00 -3.137818e+00 -1.122891e+01 8.626941e-02 + 8.140000e+00 -2.858915e+00 -1.124272e+01 8.651148e-02 + 8.150000e+00 -2.536611e+00 -1.125653e+01 8.686382e-02 + 8.160000e+00 -2.180124e+00 -1.127034e+01 8.720573e-02 + 8.170000e+00 -1.799223e+00 -1.128416e+01 8.742290e-02 + 8.180000e+00 -1.403965e+00 -1.129797e+01 8.744584e-02 + 8.190000e+00 -1.004458e+00 -1.131178e+01 8.727231e-02 + 8.200000e+00 -6.106442e-01 -1.132559e+01 8.696732e-02 + 8.210000e+00 -2.321136e-01 -1.133940e+01 8.664116e-02 + 8.220000e+00 1.220572e-01 -1.135322e+01 8.641148e-02 + 8.230000e+00 4.434491e-01 -1.136703e+01 8.636156e-02 + 8.240000e+00 7.244291e-01 -1.138084e+01 8.650989e-02 + 8.250000e+00 9.582697e-01 -1.139465e+01 8.680331e-02 + 8.260000e+00 1.139265e+00 -1.140846e+01 8.713658e-02 + 8.270000e+00 1.262844e+00 -1.142227e+01 8.739024e-02 + 8.280000e+00 1.325686e+00 -1.143609e+01 8.747210e-02 + 8.290000e+00 1.325830e+00 -1.144990e+01 8.734839e-02 + 8.300000e+00 1.262779e+00 -1.146371e+01 8.705530e-02 + 8.310000e+00 1.137587e+00 -1.147752e+01 8.668776e-02 + 8.320000e+00 9.529220e-01 -1.149133e+01 8.636844e-02 + 8.330000e+00 7.130975e-01 -1.150514e+01 8.620594e-02 + 8.340000e+00 4.240556e-01 -1.151896e+01 8.625642e-02 + 8.350000e+00 9.329779e-02 -1.153277e+01 8.650321e-02 + 8.360000e+00 -2.702450e-01 -1.154658e+01 8.686301e-02 + 8.370000e+00 -6.564063e-01 -1.156039e+01 8.721593e-02 + 8.380000e+00 -1.054043e+00 -1.157420e+01 8.744716e-02 + 8.390000e+00 -1.451351e+00 -1.158801e+01 8.748512e-02 + 8.400000e+00 -1.836238e+00 -1.160183e+01 8.732405e-02 + 8.410000e+00 -2.196723e+00 -1.161564e+01 8.702498e-02 + 8.420000e+00 -2.521366e+00 -1.162945e+01 8.669490e-02 + 8.430000e+00 -2.799690e+00 -1.164326e+01 8.645018e-02 + 8.440000e+00 -3.022590e+00 -1.165707e+01 8.637573e-02 + 8.450000e+00 -3.182695e+00 -1.167088e+01 8.649456e-02 + 8.460000e+00 -3.274671e+00 -1.168470e+01 8.675976e-02 + 8.470000e+00 -3.295447e+00 -1.169851e+01 8.707235e-02 + 8.480000e+00 -3.244348e+00 -1.171232e+01 8.731743e-02 + 8.490000e+00 -3.123134e+00 -1.172613e+01 8.740456e-02 + 8.500000e+00 -2.935929e+00 -1.173994e+01 8.729860e-02 + 8.510000e+00 -2.689061e+00 -1.175375e+01 8.703170e-02 + 8.520000e+00 -2.390808e+00 -1.176757e+01 8.669304e-02 + 8.530000e+00 -2.051063e+00 -1.178138e+01 8.639925e-02 + 8.540000e+00 -1.680950e+00 -1.179519e+01 8.625415e-02 + 8.550000e+00 -1.292393e+00 -1.180900e+01 8.631147e-02 + 8.560000e+00 -8.976655e-01 -1.182281e+01 8.655493e-02 + 8.570000e+00 -5.089507e-01 -1.183662e+01 8.690379e-02 + 8.580000e+00 -1.379157e-01 -1.185044e+01 8.724170e-02 + 8.590000e+00 2.046711e-01 -1.186425e+01 8.745698e-02 + 8.600000e+00 5.092724e-01 -1.187806e+01 8.747997e-02 + 8.610000e+00 7.678529e-01 -1.189187e+01 8.730537e-02 + 8.620000e+00 9.740860e-01 -1.190568e+01 8.699360e-02 + 8.630000e+00 1.123495e+00 -1.191949e+01 8.665084e-02 + 8.640000e+00 1.213531e+00 -1.193331e+01 8.639336e-02 + 8.650000e+00 1.243602e+00 -1.194712e+01 8.630718e-02 + 8.660000e+00 1.215045e+00 -1.196093e+01 8.641768e-02 + 8.670000e+00 1.131068e+00 -1.197474e+01 8.668092e-02 + 8.680000e+00 9.966652e-01 -1.198855e+01 8.700042e-02 + 8.690000e+00 8.184972e-01 -1.200236e+01 8.726226e-02 + 8.700000e+00 6.047687e-01 -1.201618e+01 8.737496e-02 + 8.710000e+00 3.650812e-01 -1.202999e+01 8.730014e-02 + 8.720000e+00 1.102728e-01 -1.204380e+01 8.706510e-02 + 8.730000e+00 -1.477617e-01 -1.205761e+01 8.675349e-02 + 8.740000e+00 -3.962768e-01 -1.207142e+01 8.647706e-02 + 8.750000e+00 -6.219127e-01 -1.208524e+01 8.633674e-02 + 8.760000e+00 -8.109697e-01 -1.209905e+01 8.638627e-02 + 8.770000e+00 -9.497260e-01 -1.211286e+01 8.661224e-02 + 8.780000e+00 -1.024799e+00 -1.212667e+01 8.693873e-02 + 8.790000e+00 -1.023552e+00 -1.214048e+01 8.725461e-02 + 8.800000e+00 -9.345354e-01 -1.215429e+01 8.745244e-02 + 8.810000e+00 -7.479563e-01 -1.216811e+01 8.746492e-02 + 8.820000e+00 -4.561570e-01 -1.218192e+01 8.728703e-02 + 8.830000e+00 -5.408176e-02 -1.219573e+01 8.697780e-02 + 8.840000e+00 4.602920e-01 -1.220954e+01 8.664106e-02 + 8.850000e+00 1.085586e+00 -1.222335e+01 8.639072e-02 + 8.860000e+00 1.816743e+00 -1.223716e+01 8.631117e-02 + 8.870000e+00 2.644869e+00 -1.225098e+01 8.642725e-02 + 8.880000e+00 3.557207e+00 -1.226479e+01 8.669538e-02 + 8.890000e+00 4.537280e+00 -1.227860e+01 8.701972e-02 + 8.900000e+00 5.565186e+00 -1.229241e+01 8.728657e-02 + 8.910000e+00 6.618072e+00 -1.230622e+01 8.740369e-02 + 8.920000e+00 7.670763e+00 -1.232003e+01 8.733101e-02 + 8.930000e+00 8.696530e+00 -1.233385e+01 8.709356e-02 + 8.940000e+00 9.667974e+00 -1.234766e+01 8.677302e-02 + 8.950000e+00 1.055799e+01 -1.236147e+01 8.648046e-02 + 8.960000e+00 1.134075e+01 -1.237528e+01 8.631808e-02 + 8.970000e+00 1.199270e+01 -1.238909e+01 8.634303e-02 + 8.980000e+00 1.249350e+01 -1.240290e+01 8.654665e-02 + 8.990000e+00 1.282679e+01 -1.241672e+01 8.685784e-02 + 9.000000e+00 1.298090e+01 -1.243053e+01 8.716892e-02 + 9.010000e+00 1.294932e+01 -1.244434e+01 8.737363e-02 + 9.020000e+00 1.273097e+01 -1.245815e+01 8.740326e-02 + 9.030000e+00 1.233022e+01 -1.247196e+01 8.724920e-02 + 9.040000e+00 1.175672e+01 -1.248577e+01 8.696564e-02 + 9.050000e+00 1.102496e+01 -1.249959e+01 8.665154e-02 + 9.060000e+00 1.015368e+01 -1.251340e+01 8.641715e-02 + 9.070000e+00 9.165054e+00 -1.252721e+01 8.634552e-02 + 9.080000e+00 8.083764e+00 -1.254102e+01 8.646260e-02 + 9.090000e+00 6.936027e+00 -1.255483e+01 8.672781e-02 + 9.100000e+00 5.748546e+00 -1.256864e+01 8.704891e-02 + 9.110000e+00 4.547501e+00 -1.258246e+01 8.731494e-02 + 9.120000e+00 3.357612e+00 -1.259627e+01 8.743453e-02 + 9.130000e+00 2.201315e+00 -1.261008e+01 8.736635e-02 + 9.140000e+00 1.098084e+00 -1.262389e+01 8.713241e-02 + 9.150000e+00 6.393724e-02 -1.263770e+01 8.681078e-02 + 9.160000e+00 -8.888679e-01 -1.265151e+01 8.650957e-02 + 9.170000e+00 -1.751948e+00 -1.266533e+01 8.633011e-02 + 9.180000e+00 -2.520712e+00 -1.267914e+01 8.633136e-02 + 9.190000e+00 -3.194120e+00 -1.269295e+01 8.650901e-02 + 9.200000e+00 -3.774287e+00 -1.270676e+01 8.679761e-02 + 9.210000e+00 -4.265986e+00 -1.272057e+01 8.709484e-02 + 9.220000e+00 -4.676078e+00 -1.273438e+01 8.729798e-02 + 9.230000e+00 -5.012897e+00 -1.274820e+01 8.733918e-02 + 9.240000e+00 -5.285654e+00 -1.276201e+01 8.720785e-02 + 9.250000e+00 -5.503858e+00 -1.277582e+01 8.695382e-02 + 9.260000e+00 -5.676820e+00 -1.278963e+01 8.667035e-02 + 9.270000e+00 -5.813222e+00 -1.280344e+01 8.646195e-02 + 9.280000e+00 -5.920798e+00 -1.281725e+01 8.640730e-02 + 9.290000e+00 -6.006108e+00 -1.283107e+01 8.653038e-02 + 9.300000e+00 -6.074419e+00 -1.284488e+01 8.679133e-02 + 9.310000e+00 -6.129667e+00 -1.285869e+01 8.710062e-02 + 9.320000e+00 -6.174503e+00 -1.287250e+01 8.735094e-02 + 9.330000e+00 -6.210392e+00 -1.288631e+01 8.745438e-02 + 9.340000e+00 -6.237755e+00 -1.290013e+01 8.737209e-02 + 9.350000e+00 -6.256124e+00 -1.291394e+01 8.712738e-02 + 9.360000e+00 -6.264304e+00 -1.292775e+01 8.679863e-02 + 9.370000e+00 -6.260523e+00 -1.294156e+01 8.649375e-02 + 9.380000e+00 -6.242561e+00 -1.295537e+01 8.631371e-02 + 9.390000e+00 -6.207852e+00 -1.296918e+01 8.631735e-02 + 9.400000e+00 -6.153565e+00 -1.298300e+01 8.650032e-02 + 9.410000e+00 -6.076659e+00 -1.299681e+01 8.679699e-02 + 9.420000e+00 -5.973936e+00 -1.301062e+01 8.710424e-02 + 9.430000e+00 -5.842086e+00 -1.302443e+01 8.731774e-02 + 9.440000e+00 -5.677740e+00 -1.303824e+01 8.736720e-02 + 9.450000e+00 -5.477554e+00 -1.305205e+01 8.723917e-02 + 9.460000e+00 -5.238312e+00 -1.306587e+01 8.698093e-02 + 9.470000e+00 -4.957070e+00 -1.307968e+01 8.668442e-02 + 9.480000e+00 -4.631329e+00 -1.309349e+01 8.645490e-02 + 9.490000e+00 -4.259246e+00 -1.310730e+01 8.637421e-02 + 9.500000e+00 -3.839860e+00 -1.312111e+01 8.647142e-02 + 9.510000e+00 -3.373332e+00 -1.313492e+01 8.671246e-02 + 9.520000e+00 -2.861170e+00 -1.314874e+01 8.701277e-02 + 9.530000e+00 -2.306436e+00 -1.316255e+01 8.726783e-02 + 9.540000e+00 -1.713899e+00 -1.317636e+01 8.738967e-02 + 9.550000e+00 -1.090124e+00 -1.319017e+01 8.733651e-02 + 9.560000e+00 -4.434820e-01 -1.320398e+01 8.712656e-02 + 9.570000e+00 2.159325e-01 -1.321779e+01 8.683195e-02 + 9.580000e+00 8.764886e-01 -1.323161e+01 8.655460e-02 + 9.590000e+00 1.525300e+00 -1.324542e+01 8.639119e-02 + 9.600000e+00 2.148600e+00 -1.325923e+01 8.639887e-02 + 9.610000e+00 2.732200e+00 -1.327304e+01 8.657453e-02 + 9.620000e+00 3.262001e+00 -1.328685e+01 8.685595e-02 + 9.630000e+00 3.724542e+00 -1.330066e+01 8.714429e-02 + 9.640000e+00 4.107565e+00 -1.331448e+01 8.733899e-02 + 9.650000e+00 4.400543e+00 -1.332829e+01 8.737213e-02 + 9.660000e+00 4.595165e+00 -1.334210e+01 8.723101e-02 + 9.670000e+00 4.685740e+00 -1.335591e+01 8.696239e-02 + 9.680000e+00 4.669497e+00 -1.336972e+01 8.665720e-02 + 9.690000e+00 4.546759e+00 -1.338353e+01 8.642001e-02 + 9.700000e+00 4.320990e+00 -1.339735e+01 8.633296e-02 + 9.710000e+00 3.998700e+00 -1.341116e+01 8.642649e-02 + 9.720000e+00 3.589214e+00 -1.342497e+01 8.666849e-02 + 9.730000e+00 3.104320e+00 -1.343878e+01 8.697614e-02 + 9.740000e+00 2.557813e+00 -1.345259e+01 8.724548e-02 + 9.750000e+00 1.964951e+00 -1.346640e+01 8.738734e-02 + 9.760000e+00 1.341861e+00 -1.348022e+01 8.735698e-02 + 9.770000e+00 7.049174e-01 -1.349403e+01 8.716823e-02 + 9.780000e+00 7.012748e-02 -1.350784e+01 8.688841e-02 + 9.790000e+00 -5.474493e-01 -1.352165e+01 8.661543e-02 + 9.800000e+00 -1.134219e+00 -1.353546e+01 8.644403e-02 + 9.810000e+00 -1.678491e+00 -1.354927e+01 8.643230e-02 + 9.820000e+00 -2.170806e+00 -1.356309e+01 8.658090e-02 + 9.830000e+00 -2.604164e+00 -1.357690e+01 8.683326e-02 + 9.840000e+00 -2.974131e+00 -1.359071e+01 8.709657e-02 + 9.850000e+00 -3.278823e+00 -1.360452e+01 8.727520e-02 + 9.860000e+00 -3.518798e+00 -1.361833e+01 8.730399e-02 + 9.870000e+00 -3.696842e+00 -1.363215e+01 8.717051e-02 + 9.880000e+00 -3.817675e+00 -1.364596e+01 8.691943e-02 + 9.890000e+00 -3.887602e+00 -1.365977e+01 8.663786e-02 + 9.900000e+00 -3.914115e+00 -1.367358e+01 8.642579e-02 + 9.910000e+00 -3.905480e+00 -1.368739e+01 8.636104e-02 + 9.920000e+00 -3.870320e+00 -1.370120e+01 8.647090e-02 + 9.930000e+00 -3.817203e+00 -1.371502e+01 8.672179e-02 + 9.940000e+00 -3.754274e+00 -1.372883e+01 8.703094e-02 + 9.950000e+00 -3.688918e+00 -1.374264e+01 8.729552e-02 + 9.960000e+00 -3.627475e+00 -1.375645e+01 8.742791e-02 + 9.970000e+00 -3.575013e+00 -1.377026e+01 8.738488e-02 + 9.980000e+00 -3.535158e+00 -1.378407e+01 8.718164e-02 + 9.990000e+00 -3.509989e+00 -1.379789e+01 8.688691e-02 + 1.000000e+01 -3.499993e+00 -1.381170e+01 8.660026e-02 + 1.001000e+01 -3.504072e+00 -1.382551e+01 8.641841e-02 + 1.002000e+01 -3.519616e+00 -1.383932e+01 8.640157e-02 + 1.003000e+01 -3.542627e+00 -1.385313e+01 8.655216e-02 + 1.004000e+01 -3.567881e+00 -1.386694e+01 8.681427e-02 + 1.005000e+01 -3.589155e+00 -1.388076e+01 8.709419e-02 + 1.006000e+01 -3.599469e+00 -1.389457e+01 8.729364e-02 + 1.007000e+01 -3.591385e+00 -1.390838e+01 8.734331e-02 + 1.008000e+01 -3.557318e+00 -1.392219e+01 8.722578e-02 + 1.009000e+01 -3.489873e+00 -1.393600e+01 8.698092e-02 + 1.010000e+01 -3.382189e+00 -1.394981e+01 8.669241e-02 + 1.011000e+01 -3.228289e+00 -1.396363e+01 8.645935e-02 + 1.012000e+01 -3.023408e+00 -1.397744e+01 8.636177e-02 + 1.013000e+01 -2.764303e+00 -1.399125e+01 8.643218e-02 + 1.014000e+01 -2.449523e+00 -1.400506e+01 8.664393e-02 + 1.015000e+01 -2.079619e+00 -1.401887e+01 8.692128e-02 + 1.016000e+01 -1.657294e+00 -1.403268e+01 8.716681e-02 + 1.017000e+01 -1.187470e+00 -1.404650e+01 8.729563e-02 + 1.018000e+01 -6.772696e-01 -1.406031e+01 8.726425e-02 + 1.019000e+01 -1.358937e-01 -1.407412e+01 8.708504e-02 + 1.020000e+01 4.255869e-01 -1.408793e+01 8.682200e-02 + 1.021000e+01 9.945439e-01 -1.410174e+01 8.656929e-02 + 1.022000e+01 1.557189e+00 -1.411555e+01 8.641868e-02 + 1.023000e+01 2.099047e+00 -1.412937e+01 8.642691e-02 + 1.024000e+01 2.605490e+00 -1.414318e+01 8.659488e-02 + 1.025000e+01 3.062306e+00 -1.415699e+01 8.686709e-02 + 1.026000e+01 3.456283e+00 -1.417080e+01 8.715138e-02 + 1.027000e+01 3.775775e+00 -1.418461e+01 8.735130e-02 + 1.028000e+01 4.011229e+00 -1.419842e+01 8.739897e-02 + 1.029000e+01 4.155640e+00 -1.421224e+01 8.727770e-02 + 1.030000e+01 4.204914e+00 -1.422605e+01 8.702751e-02 + 1.031000e+01 4.158113e+00 -1.423986e+01 8.673214e-02 + 1.032000e+01 4.017568e+00 -1.425367e+01 8.649118e-02 + 1.033000e+01 3.788855e+00 -1.426748e+01 8.638585e-02 + 1.034000e+01 3.480622e+00 -1.428129e+01 8.645047e-02 + 1.035000e+01 3.104278e+00 -1.429511e+01 8.666030e-02 + 1.036000e+01 2.673553e+00 -1.430892e+01 8.694084e-02 + 1.037000e+01 2.203951e+00 -1.432273e+01 8.719458e-02 + 1.038000e+01 1.712118e+00 -1.433654e+01 8.733498e-02 + 1.039000e+01 1.215153e+00 -1.435035e+01 8.731546e-02 + 1.040000e+01 7.298949e-01 -1.436417e+01 8.714454e-02 + 1.041000e+01 2.722260e-01 -1.437798e+01 8.688261e-02 + 1.042000e+01 -1.435834e-01 -1.439179e+01 8.662157e-02 + 1.043000e+01 -5.054535e-01 -1.440560e+01 8.645317e-02 + 1.044000e+01 -8.039674e-01 -1.441941e+01 8.643676e-02 + 1.045000e+01 -1.032717e+00 -1.443322e+01 8.657798e-02 + 1.046000e+01 -1.188507e+00 -1.444704e+01 8.682686e-02 + 1.047000e+01 -1.271401e+00 -1.446085e+01 8.709613e-02 + 1.048000e+01 -1.284622e+00 -1.447466e+01 8.729218e-02 + 1.049000e+01 -1.234299e+00 -1.448847e+01 8.734732e-02 + 1.050000e+01 -1.129080e+00 -1.450228e+01 8.724243e-02 + 1.051000e+01 -9.796357e-01 -1.451609e+01 8.701305e-02 + 1.052000e+01 -7.980667e-01 -1.452991e+01 8.673757e-02 + 1.053000e+01 -5.972583e-01 -1.454372e+01 8.651054e-02 + 1.054000e+01 -3.902032e-01 -1.455753e+01 8.640985e-02 + 1.055000e+01 -1.893300e-01 -1.457134e+01 8.646890e-02 + 1.056000e+01 -5.868969e-03 -1.458515e+01 8.666457e-02 + 1.057000e+01 1.507162e-01 -1.459896e+01 8.692576e-02 + 1.058000e+01 2.732033e-01 -1.461278e+01 8.715906e-02 + 1.059000e+01 3.569721e-01 -1.462659e+01 8.728155e-02 + 1.060000e+01 4.002350e-01 -1.464040e+01 8.724917e-02 + 1.061000e+01 4.041267e-01 -1.465421e+01 8.707157e-02 + 1.062000e+01 3.726514e-01 -1.466802e+01 8.680913e-02 + 1.063000e+01 3.124882e-01 -1.468183e+01 8.655297e-02 + 1.064000e+01 2.326669e-01 -1.469565e+01 8.639387e-02 + 1.065000e+01 1.441274e-01 -1.470946e+01 8.639026e-02 + 1.066000e+01 5.918253e-02 -1.472327e+01 8.654709e-02 + 1.067000e+01 -9.089408e-03 -1.473708e+01 8.681372e-02 + 1.068000e+01 -4.749838e-02 -1.475089e+01 8.710195e-02 + 1.069000e+01 -4.341128e-02 -1.476470e+01 8.731675e-02 + 1.070000e+01 1.459279e-02 -1.477852e+01 8.738842e-02 + 1.071000e+01 1.361100e-01 -1.479233e+01 8.729542e-02 + 1.072000e+01 3.283693e-01 -1.480614e+01 8.707112e-02 + 1.073000e+01 5.957845e-01 -1.481995e+01 8.679261e-02 + 1.074000e+01 9.396214e-01 -1.483376e+01 8.655478e-02 + 1.075000e+01 1.357797e+00 -1.484757e+01 8.643778e-02 + 1.076000e+01 1.844820e+00 -1.486139e+01 8.647898e-02 + 1.077000e+01 2.391879e+00 -1.487520e+01 8.665995e-02 + 1.078000e+01 2.987079e+00 -1.488901e+01 8.691370e-02 + 1.079000e+01 3.615810e+00 -1.490282e+01 8.714917e-02 + 1.080000e+01 4.261249e+00 -1.491663e+01 8.728329e-02 + 1.081000e+01 4.904966e+00 -1.493044e+01 8.726934e-02 + 1.082000e+01 5.527609e+00 -1.494426e+01 8.711234e-02 + 1.083000e+01 6.109646e+00 -1.495807e+01 8.686715e-02 + 1.084000e+01 6.632134e+00 -1.497188e+01 8.661987e-02 + 1.085000e+01 7.077476e+00 -1.498569e+01 8.645806e-02 + 1.086000e+01 7.430133e+00 -1.499950e+01 8.643983e-02 + 1.087000e+01 7.677269e+00 -1.501331e+01 8.657274e-02 + 1.088000e+01 7.809287e+00 -1.502713e+01 8.681111e-02 + 1.089000e+01 7.820243e+00 -1.504094e+01 8.707253e-02 + 1.090000e+01 7.708102e+00 -1.505475e+01 8.726713e-02 + 1.091000e+01 7.474844e+00 -1.506856e+01 8.732861e-02 + 1.092000e+01 7.126393e+00 -1.508237e+01 8.723654e-02 + 1.093000e+01 6.672383e+00 -1.509619e+01 8.702312e-02 + 1.094000e+01 6.125769e+00 -1.511000e+01 8.676251e-02 + 1.095000e+01 5.502291e+00 -1.512381e+01 8.654572e-02 + 1.096000e+01 4.819826e+00 -1.513762e+01 8.644903e-02 + 1.097000e+01 4.097651e+00 -1.515143e+01 8.650673e-02 + 1.098000e+01 3.355657e+00 -1.516524e+01 8.669867e-02 + 1.099000e+01 2.613538e+00 -1.517906e+01 8.695747e-02 + 1.100000e+01 1.890007e+00 -1.519287e+01 8.719265e-02 + 1.101000e+01 1.202072e+00 -1.520668e+01 8.732212e-02 + 1.102000e+01 5.644048e-01 -1.522049e+01 8.730016e-02 + 1.103000e+01 -1.117578e-02 -1.523430e+01 8.713260e-02 + 1.104000e+01 -5.160635e-01 -1.524811e+01 8.687511e-02 + 1.105000e+01 -9.450700e-01 -1.526193e+01 8.661474e-02 + 1.106000e+01 -1.296459e+00 -1.527574e+01 8.644044e-02 + 1.107000e+01 -1.571811e+00 -1.528955e+01 8.641206e-02 + 1.108000e+01 -1.775734e+00 -1.530336e+01 8.653895e-02 + 1.109000e+01 -1.915430e+00 -1.531717e+01 8.677666e-02 + 1.110000e+01 -2.000150e+00 -1.533098e+01 8.704302e-02 + 1.111000e+01 -2.040561e+00 -1.534480e+01 8.724705e-02 + 1.112000e+01 -2.048072e+00 -1.535861e+01 8.732011e-02 + 1.113000e+01 -2.034146e+00 -1.537242e+01 8.723861e-02 + 1.114000e+01 -2.009629e+00 -1.538623e+01 8.703151e-02 + 1.115000e+01 -1.984157e+00 -1.540004e+01 8.677052e-02 + 1.116000e+01 -1.965642e+00 -1.541385e+01 8.654577e-02 + 1.117000e+01 -1.959882e+00 -1.542767e+01 8.643477e-02 + 1.118000e+01 -1.970309e+00 -1.544148e+01 8.647500e-02 + 1.119000e+01 -1.997881e+00 -1.545529e+01 8.665064e-02 + 1.120000e+01 -2.041129e+00 -1.546910e+01 8.689860e-02 + 1.121000e+01 -2.096343e+00 -1.548291e+01 8.713137e-02 + 1.122000e+01 -2.157899e+00 -1.549672e+01 8.726780e-02 + 1.123000e+01 -2.218678e+00 -1.551054e+01 8.726082e-02 + 1.124000e+01 -2.270590e+00 -1.552435e+01 8.711302e-02 + 1.125000e+01 -2.305135e+00 -1.553816e+01 8.687573e-02 + 1.126000e+01 -2.313987e+00 -1.555197e+01 8.663170e-02 + 1.127000e+01 -2.289573e+00 -1.556578e+01 8.646671e-02 + 1.128000e+01 -2.225594e+00 -1.557959e+01 8.643942e-02 + 1.129000e+01 -2.117479e+00 -1.559341e+01 8.656027e-02 + 1.130000e+01 -1.962742e+00 -1.560722e+01 8.678773e-02 + 1.131000e+01 -1.761217e+00 -1.562103e+01 8.704332e-02 + 1.132000e+01 -1.515167e+00 -1.563484e+01 8.723945e-02 + 1.133000e+01 -1.229262e+00 -1.564865e+01 8.730965e-02 + 1.134000e+01 -9.104208e-01 -1.566246e+01 8.723088e-02 + 1.135000e+01 -5.675403e-01 -1.567628e+01 8.703110e-02 + 1.136000e+01 -2.111127e-01 -1.569009e+01 8.677987e-02 + 1.137000e+01 1.472366e-01 -1.570390e+01 8.656488e-02 + 1.138000e+01 4.952728e-01 -1.571771e+01 8.646148e-02 + 1.139000e+01 8.207056e-01 -1.573152e+01 8.650596e-02 + 1.140000e+01 1.111748e+00 -1.574533e+01 8.668240e-02 + 1.141000e+01 1.357647e+00 -1.575915e+01 8.692850e-02 + 1.142000e+01 1.549171e+00 -1.577296e+01 8.715797e-02 + 1.143000e+01 1.679013e+00 -1.578677e+01 8.729070e-02 + 1.144000e+01 1.742111e+00 -1.580058e+01 8.728018e-02 + 1.145000e+01 1.735857e+00 -1.581439e+01 8.712905e-02 + 1.146000e+01 1.660190e+00 -1.582820e+01 8.688833e-02 + 1.147000e+01 1.517580e+00 -1.584202e+01 8.664048e-02 + 1.148000e+01 1.312886e+00 -1.585583e+01 8.647135e-02 + 1.149000e+01 1.053117e+00 -1.586964e+01 8.644017e-02 + 1.150000e+01 7.471025e-01 -1.588345e+01 8.655827e-02 + 1.151000e+01 4.050765e-01 -1.589726e+01 8.678499e-02 + 1.152000e+01 3.822206e-02 -1.591108e+01 8.704223e-02 + 1.153000e+01 -3.418258e-01 -1.592489e+01 8.724198e-02 + 1.154000e+01 -7.234805e-01 -1.593870e+01 8.731646e-02 + 1.155000e+01 -1.095689e+00 -1.595251e+01 8.724078e-02 + 1.156000e+01 -1.448379e+00 -1.596632e+01 8.704099e-02 + 1.157000e+01 -1.772845e+00 -1.598013e+01 8.678539e-02 + 1.158000e+01 -2.062066e+00 -1.599395e+01 8.656163e-02 + 1.159000e+01 -2.310919e+00 -1.600776e+01 8.644656e-02 + 1.160000e+01 -2.516314e+00 -1.602157e+01 8.647927e-02 + 1.161000e+01 -2.677205e+00 -1.603538e+01 8.664723e-02 + 1.162000e+01 -2.794523e+00 -1.604919e+01 8.689108e-02 + 1.163000e+01 -2.870991e+00 -1.606300e+01 8.712607e-02 + 1.164000e+01 -2.910869e+00 -1.607682e+01 8.727177e-02 + 1.165000e+01 -2.919626e+00 -1.609063e+01 8.727937e-02 + 1.166000e+01 -2.903548e+00 -1.610444e+01 8.714783e-02 + 1.167000e+01 -2.869334e+00 -1.611825e+01 8.692387e-02 + 1.168000e+01 -2.823663e+00 -1.613206e+01 8.668616e-02 + 1.169000e+01 -2.772784e+00 -1.614587e+01 8.651824e-02 + 1.170000e+01 -2.722144e+00 -1.615969e+01 8.647921e-02 + 1.171000e+01 -2.676059e+00 -1.617350e+01 8.658254e-02 + 1.172000e+01 -2.637473e+00 -1.618731e+01 8.679125e-02 + 1.173000e+01 -2.607795e+00 -1.620112e+01 8.703142e-02 + 1.174000e+01 -2.586832e+00 -1.621493e+01 8.721852e-02 + 1.175000e+01 -2.572831e+00 -1.622874e+01 8.728674e-02 + 1.176000e+01 -2.562607e+00 -1.624256e+01 8.721136e-02 + 1.177000e+01 -2.551775e+00 -1.625637e+01 8.701698e-02 + 1.178000e+01 -2.535058e+00 -1.627018e+01 8.676945e-02 + 1.179000e+01 -2.506656e+00 -1.628399e+01 8.655367e-02 + 1.180000e+01 -2.460660e+00 -1.629780e+01 8.644429e-02 + 1.181000e+01 -2.391487e+00 -1.631161e+01 8.647926e-02 + 1.182000e+01 -2.294308e+00 -1.632543e+01 8.664617e-02 + 1.183000e+01 -2.165445e+00 -1.633924e+01 8.688672e-02 + 1.184000e+01 -2.002710e+00 -1.635305e+01 8.711760e-02 + 1.185000e+01 -1.805678e+00 -1.636686e+01 8.725964e-02 + 1.186000e+01 -1.575853e+00 -1.638067e+01 8.726476e-02 + 1.187000e+01 -1.316743e+00 -1.639448e+01 8.713197e-02 + 1.188000e+01 -1.033807e+00 -1.640830e+01 8.690762e-02 + 1.189000e+01 -7.343041e-01 -1.642211e+01 8.666991e-02 + 1.190000e+01 -4.270274e-01 -1.643592e+01 8.650215e-02 + 1.191000e+01 -1.219464e-01 -1.644973e+01 8.646365e-02 + 1.192000e+01 1.702256e-01 -1.646354e+01 8.656845e-02 + 1.193000e+01 4.385179e-01 -1.647735e+01 8.678025e-02 + 1.194000e+01 6.722155e-01 -1.649117e+01 8.702549e-02 + 1.195000e+01 8.613718e-01 -1.650498e+01 8.721939e-02 + 1.196000e+01 9.972917e-01 -1.651879e+01 8.729525e-02 + 1.197000e+01 1.072960e+00 -1.653260e+01 8.722691e-02 + 1.198000e+01 1.083388e+00 -1.654641e+01 8.703750e-02 + 1.199000e+01 1.025863e+00 -1.656022e+01 8.679182e-02 + 1.200000e+01 9.000883e-01 -1.657404e+01 8.657464e-02 + 1.201000e+01 7.081926e-01 -1.658785e+01 8.646157e-02 + 1.202000e+01 4.546330e-01 -1.660166e+01 8.649249e-02 + 1.203000e+01 1.459752e-01 -1.661547e+01 8.665720e-02 + 1.204000e+01 -2.094234e-01 -1.662928e+01 8.689918e-02 + 1.205000e+01 -6.018116e-01 -1.664310e+01 8.713577e-02 + 1.206000e+01 -1.020500e+00 -1.665691e+01 8.728698e-02 + 1.207000e+01 -1.454349e+00 -1.667072e+01 8.730257e-02 + 1.208000e+01 -1.892254e+00 -1.668453e+01 8.717861e-02 + 1.209000e+01 -2.323611e+00 -1.669834e+01 8.695856e-02 + 1.210000e+01 -2.738726e+00 -1.671215e+01 8.671861e-02 + 1.211000e+01 -3.129152e+00 -1.672597e+01 8.654174e-02 + 1.212000e+01 -3.487930e+00 -1.673978e+01 8.648877e-02 + 1.213000e+01 -3.809734e+00 -1.675359e+01 8.657682e-02 + 1.214000e+01 -4.090900e+00 -1.676740e+01 8.677324e-02 + 1.215000e+01 -4.329355e+00 -1.678121e+01 8.700753e-02 + 1.216000e+01 -4.524443e+00 -1.679502e+01 8.719647e-02 + 1.217000e+01 -4.676680e+00 -1.680884e+01 8.727295e-02 + 1.218000e+01 -4.787434e+00 -1.682265e+01 8.720863e-02 + 1.219000e+01 -4.858581e+00 -1.683646e+01 8.702334e-02 + 1.220000e+01 -4.892147e+00 -1.685027e+01 8.677848e-02 + 1.221000e+01 -4.889964e+00 -1.686408e+01 8.655639e-02 + 1.222000e+01 -4.853374e+00 -1.687789e+01 8.643217e-02 + 1.223000e+01 -4.782995e+00 -1.689171e+01 8.644725e-02 + 1.224000e+01 -4.678572e+00 -1.690552e+01 8.659482e-02 + 1.225000e+01 -4.538928e+00 -1.691933e+01 8.682247e-02 + 1.226000e+01 -4.362009e+00 -1.693314e+01 8.705119e-02 + 1.227000e+01 -4.145042e+00 -1.694695e+01 8.720315e-02 + 1.228000e+01 -3.884773e+00 -1.696076e+01 8.722833e-02 + 1.229000e+01 -3.577793e+00 -1.697458e+01 8.712105e-02 + 1.230000e+01 -3.220920e+00 -1.698839e+01 8.692162e-02 + 1.231000e+01 -2.811608e+00 -1.700220e+01 8.670249e-02 + 1.232000e+01 -2.348369e+00 -1.701601e+01 8.654327e-02 + 1.233000e+01 -1.831168e+00 -1.702982e+01 8.650268e-02 + 1.234000e+01 -1.261761e+00 -1.704363e+01 8.659741e-02 + 1.235000e+01 -6.439623e-01 -1.705745e+01 8.679596e-02 + 1.236000e+01 1.619533e-02 -1.707126e+01 8.702998e-02 + 1.237000e+01 7.104125e-01 -1.708507e+01 8.721853e-02 + 1.238000e+01 1.428205e+00 -1.709888e+01 8.729621e-02 + 1.239000e+01 2.157113e+00 -1.711269e+01 8.723538e-02 + 1.240000e+01 2.883035e+00 -1.712650e+01 8.705554e-02 + 1.241000e+01 3.590672e+00 -1.714032e+01 8.681702e-02 + 1.242000e+01 4.264062e+00 -1.715413e+01 8.660088e-02 + 1.243000e+01 4.887185e+00 -1.716794e+01 8.648117e-02 + 1.244000e+01 5.444599e+00 -1.718175e+01 8.649889e-02 + 1.245000e+01 5.922081e+00 -1.719556e+01 8.664741e-02 + 1.246000e+01 6.307240e+00 -1.720937e+01 8.687486e-02 + 1.247000e+01 6.590063e+00 -1.722319e+01 8.710268e-02 + 1.248000e+01 6.763375e+00 -1.723700e+01 8.725305e-02 + 1.249000e+01 6.823174e+00 -1.725081e+01 8.727533e-02 + 1.250000e+01 6.768833e+00 -1.726462e+01 8.716280e-02 + 1.251000e+01 6.603155e+00 -1.727843e+01 8.695464e-02 + 1.252000e+01 6.332272e+00 -1.729224e+01 8.672268e-02 + 1.253000e+01 5.965397e+00 -1.730606e+01 8.654691e-02 + 1.254000e+01 5.514443e+00 -1.731987e+01 8.648757e-02 + 1.255000e+01 4.993524e+00 -1.733368e+01 8.656378e-02 + 1.256000e+01 4.418364e+00 -1.734749e+01 8.674682e-02 + 1.257000e+01 3.805654e+00 -1.736130e+01 8.697064e-02 + 1.258000e+01 3.172377e+00 -1.737512e+01 8.715550e-02 + 1.259000e+01 2.535149e+00 -1.738893e+01 8.723579e-02 + 1.260000e+01 1.909600e+00 -1.740274e+01 8.718240e-02 + 1.261000e+01 1.309839e+00 -1.741655e+01 8.701253e-02 + 1.262000e+01 7.480110e-01 -1.743036e+01 8.678406e-02 + 1.263000e+01 2.339870e-01 -1.744417e+01 8.657617e-02 + 1.264000e+01 -2.248141e-01 -1.745799e+01 8.646206e-02 + 1.265000e+01 -6.234624e-01 -1.747180e+01 8.648318e-02 + 1.266000e+01 -9.594159e-01 -1.748561e+01 8.663426e-02 + 1.267000e+01 -1.232294e+00 -1.749942e+01 8.686518e-02 + 1.268000e+01 -1.443546e+00 -1.751323e+01 8.709868e-02 + 1.269000e+01 -1.596039e+00 -1.752704e+01 8.725726e-02 + 1.270000e+01 -1.693595e+00 -1.754086e+01 8.728943e-02 + 1.271000e+01 -1.740512e+00 -1.755467e+01 8.718665e-02 + 1.272000e+01 -1.741106e+00 -1.756848e+01 8.698587e-02 + 1.273000e+01 -1.699295e+00 -1.758229e+01 8.675708e-02 + 1.274000e+01 -1.618267e+00 -1.759610e+01 8.657944e-02 + 1.275000e+01 -1.500248e+00 -1.760991e+01 8.651388e-02 + 1.276000e+01 -1.346380e+00 -1.762373e+01 8.658162e-02 + 1.277000e+01 -1.156738e+00 -1.763754e+01 8.675681e-02 + 1.278000e+01 -9.304549e-01 -1.765135e+01 8.697617e-02 + 1.279000e+01 -6.659689e-01 -1.766516e+01 8.716167e-02 + 1.280000e+01 -3.613674e-01 -1.767897e+01 8.724787e-02 + 1.281000e+01 -1.479615e-02 -1.769278e+01 8.720413e-02 + 1.282000e+01 3.750883e-01 -1.770660e+01 8.704486e-02 + 1.283000e+01 8.086627e-01 -1.772041e+01 8.682463e-02 + 1.284000e+01 1.284911e+00 -1.773422e+01 8.661965e-02 + 1.285000e+01 1.801066e+00 -1.774803e+01 8.650142e-02 + 1.286000e+01 2.352344e+00 -1.776184e+01 8.651145e-02 + 1.287000e+01 2.931804e+00 -1.777565e+01 8.664630e-02 + 1.288000e+01 3.530348e+00 -1.778947e+01 8.685881e-02 + 1.289000e+01 4.136866e+00 -1.780328e+01 8.707494e-02 + 1.290000e+01 4.738538e+00 -1.781709e+01 8.721979e-02 + 1.291000e+01 5.321262e+00 -1.783090e+01 8.724332e-02 + 1.292000e+01 5.870205e+00 -1.784471e+01 8.713713e-02 + 1.293000e+01 6.370443e+00 -1.785852e+01 8.693730e-02 + 1.294000e+01 6.807651e+00 -1.787234e+01 8.671240e-02 + 1.295000e+01 7.168799e+00 -1.788615e+01 8.654021e-02 + 1.296000e+01 7.442828e+00 -1.789996e+01 8.648076e-02 + 1.297000e+01 7.621238e+00 -1.791377e+01 8.655504e-02 + 1.298000e+01 7.698580e+00 -1.792758e+01 8.673754e-02 + 1.299000e+01 7.672791e+00 -1.794139e+01 8.696542e-02 + 1.300000e+01 7.545364e+00 -1.795521e+01 8.716080e-02 + 1.301000e+01 7.321336e+00 -1.796902e+01 8.725769e-02 + 1.302000e+01 7.009091e+00 -1.798283e+01 8.722421e-02 + 1.303000e+01 6.619978e+00 -1.799664e+01 8.707300e-02 + 1.304000e+01 6.167776e+00 -1.801045e+01 8.685689e-02 + 1.305000e+01 5.668028e+00 -1.802426e+01 8.665092e-02 + 1.306000e+01 5.137281e+00 -1.803808e+01 8.652655e-02 + 1.307000e+01 4.592276e+00 -1.805189e+01 8.652657e-02 + 1.308000e+01 4.049143e+00 -1.806570e+01 8.664985e-02 + 1.309000e+01 3.522635e+00 -1.807951e+01 8.685195e-02 + 1.310000e+01 3.025452e+00 -1.809332e+01 8.706123e-02 + 1.311000e+01 2.567700e+00 -1.810714e+01 8.720411e-02 + 1.312000e+01 2.156499e+00 -1.812095e+01 8.723055e-02 + 1.313000e+01 1.795783e+00 -1.813476e+01 8.713085e-02 + 1.314000e+01 1.486275e+00 -1.814857e+01 8.693898e-02 + 1.315000e+01 1.225663e+00 -1.816238e+01 8.672112e-02 + 1.316000e+01 1.008933e+00 -1.817619e+01 8.655317e-02 + 1.317000e+01 8.288618e-01 -1.819001e+01 8.649430e-02 + 1.318000e+01 6.766120e-01 -1.820382e+01 8.656584e-02 + 1.319000e+01 5.424062e-01 -1.821763e+01 8.674359e-02 + 1.320000e+01 4.162247e-01 -1.823144e+01 8.696646e-02 + 1.321000e+01 2.884859e-01 -1.824525e+01 8.715806e-02 + 1.322000e+01 1.506670e-01 -1.825906e+01 8.725317e-02 + 1.323000e+01 -4.176142e-03 -1.827288e+01 8.721970e-02 + 1.324000e+01 -1.810185e-01 -1.828669e+01 8.706934e-02 + 1.325000e+01 -3.826260e-01 -1.830050e+01 8.685354e-02 + 1.326000e+01 -6.094786e-01 -1.831431e+01 8.664622e-02 + 1.327000e+01 -8.598531e-01 -1.832812e+01 8.651835e-02 + 1.328000e+01 -1.130056e+00 -1.834193e+01 8.651319e-02 + 1.329000e+01 -1.414786e+00 -1.835575e+01 8.663091e-02 + 1.330000e+01 -1.707590e+00 -1.836956e+01 8.682878e-02 + 1.331000e+01 -2.001388e+00 -1.838337e+01 8.703661e-02 + 1.332000e+01 -2.289020e+00 -1.839718e+01 8.718159e-02 + 1.333000e+01 -2.563773e+00 -1.841099e+01 8.721341e-02 + 1.334000e+01 -2.819863e+00 -1.842480e+01 8.712116e-02 + 1.335000e+01 -3.052826e+00 -1.843862e+01 8.693697e-02 + 1.336000e+01 -3.259805e+00 -1.845243e+01 8.672516e-02 + 1.337000e+01 -3.439707e+00 -1.846624e+01 8.656022e-02 + 1.338000e+01 -3.593226e+00 -1.848005e+01 8.650086e-02 + 1.339000e+01 -3.722743e+00 -1.849386e+01 8.656903e-02 + 1.340000e+01 -3.832096e+00 -1.850767e+01 8.674195e-02 + 1.341000e+01 -3.926265e+00 -1.852149e+01 8.696027e-02 + 1.342000e+01 -4.010981e+00 -1.853530e+01 8.714905e-02 + 1.343000e+01 -4.092286e+00 -1.854911e+01 8.724376e-02 + 1.344000e+01 -4.176105e+00 -1.856292e+01 8.721219e-02 + 1.345000e+01 -4.267821e+00 -1.857673e+01 8.706518e-02 + 1.346000e+01 -4.371916e+00 -1.859054e+01 8.685304e-02 + 1.347000e+01 -4.491687e+00 -1.860436e+01 8.664868e-02 + 1.348000e+01 -4.629050e+00 -1.861817e+01 8.652270e-02 + 1.349000e+01 -4.784448e+00 -1.863198e+01 8.651870e-02 + 1.350000e+01 -4.956864e+00 -1.864579e+01 8.663784e-02 + 1.351000e+01 -5.143928e+00 -1.865960e+01 8.683855e-02 + 1.352000e+01 -5.342101e+00 -1.867341e+01 8.705148e-02 + 1.353000e+01 -5.546924e+00 -1.868723e+01 8.720391e-02 + 1.354000e+01 -5.753306e+00 -1.870104e+01 8.724463e-02 + 1.355000e+01 -5.955817e+00 -1.871485e+01 8.716110e-02 + 1.356000e+01 -6.148971e+00 -1.872866e+01 8.698342e-02 + 1.357000e+01 -6.327478e+00 -1.874247e+01 8.677405e-02 + 1.358000e+01 -6.486436e+00 -1.875628e+01 8.660648e-02 + 1.359000e+01 -6.621461e+00 -1.877010e+01 8.653958e-02 + 1.360000e+01 -6.728749e+00 -1.878391e+01 8.659674e-02 + 1.361000e+01 -6.805065e+00 -1.879772e+01 8.675746e-02 + 1.362000e+01 -6.847679e+00 -1.881153e+01 8.696484e-02 + 1.363000e+01 -6.854252e+00 -1.882534e+01 8.714585e-02 + 1.364000e+01 -6.822699e+00 -1.883915e+01 8.723680e-02 + 1.365000e+01 -6.751047e+00 -1.885297e+01 8.720513e-02 + 1.366000e+01 -6.637312e+00 -1.886678e+01 8.706033e-02 + 1.367000e+01 -6.479411e+00 -1.888059e+01 8.685082e-02 + 1.368000e+01 -6.275138e+00 -1.889440e+01 8.664769e-02 + 1.369000e+01 -6.022197e+00 -1.890821e+01 8.652037e-02 + 1.370000e+01 -5.718318e+00 -1.892203e+01 8.651225e-02 + 1.371000e+01 -5.361436e+00 -1.893584e+01 8.662527e-02 + 1.372000e+01 -4.949941e+00 -1.894965e+01 8.681930e-02 + 1.373000e+01 -4.482964e+00 -1.896346e+01 8.702647e-02 + 1.374000e+01 -3.960701e+00 -1.897727e+01 8.717513e-02 + 1.375000e+01 -3.384724e+00 -1.899108e+01 8.721440e-02 + 1.376000e+01 -2.758268e+00 -1.900490e+01 8.713130e-02 + 1.377000e+01 -2.086466e+00 -1.901871e+01 8.695496e-02 + 1.378000e+01 -1.376492e+00 -1.903252e+01 8.674677e-02 + 1.379000e+01 -6.376060e-01 -1.904633e+01 8.657948e-02 + 1.380000e+01 1.189154e-01 -1.906014e+01 8.651187e-02 + 1.381000e+01 8.799825e-01 -1.907395e+01 8.656795e-02 + 1.382000e+01 1.631013e+00 -1.908777e+01 8.672833e-02 + 1.383000e+01 2.356368e+00 -1.910158e+01 8.693729e-02 + 1.384000e+01 3.039881e+00 -1.911539e+01 8.712256e-02 + 1.385000e+01 3.665462e+00 -1.912920e+01 8.722057e-02 + 1.386000e+01 4.217727e+00 -1.914301e+01 8.719805e-02 + 1.387000e+01 4.682640e+00 -1.915682e+01 8.706323e-02 + 1.388000e+01 5.048115e+00 -1.917064e+01 8.686301e-02 + 1.389000e+01 5.304554e+00 -1.918445e+01 8.666718e-02 + 1.390000e+01 5.445279e+00 -1.919826e+01 8.654443e-02 + 1.391000e+01 5.466843e+00 -1.921207e+01 8.653820e-02 + 1.392000e+01 5.369194e+00 -1.922588e+01 8.665117e-02 + 1.393000e+01 5.155694e+00 -1.923969e+01 8.684424e-02 + 1.394000e+01 4.832977e+00 -1.925351e+01 8.705052e-02 + 1.395000e+01 4.410678e+00 -1.926732e+01 8.719880e-02 + 1.396000e+01 3.901022e+00 -1.928113e+01 8.723803e-02 + 1.397000e+01 3.318331e+00 -1.929494e+01 8.715449e-02 + 1.398000e+01 2.678455e+00 -1.930875e+01 8.697640e-02 + 1.399000e+01 1.998167e+00 -1.932256e+01 8.676445e-02 + 1.400000e+01 1.294562e+00 -1.933638e+01 8.659131e-02 + 1.401000e+01 5.844846e-01 -1.935019e+01 8.651647e-02 + 1.402000e+01 -1.159802e-01 -1.936400e+01 8.656534e-02 + 1.403000e+01 -7.919358e-01 -1.937781e+01 8.672021e-02 + 1.404000e+01 -1.430003e+00 -1.939162e+01 8.692668e-02 + 1.405000e+01 -2.018545e+00 -1.940543e+01 8.711310e-02 + 1.406000e+01 -2.547779e+00 -1.941925e+01 8.721543e-02 + 1.407000e+01 -3.009802e+00 -1.943306e+01 8.719908e-02 + 1.408000e+01 -3.398520e+00 -1.944687e+01 8.707031e-02 + 1.409000e+01 -3.709518e+00 -1.946068e+01 8.687410e-02 + 1.410000e+01 -3.939893e+00 -1.947449e+01 8.667883e-02 + 1.411000e+01 -4.088053e+00 -1.948830e+01 8.655280e-02 + 1.412000e+01 -4.153539e+00 -1.950212e+01 8.654022e-02 + 1.413000e+01 -4.136856e+00 -1.951593e+01 8.664544e-02 + 1.414000e+01 -4.039348e+00 -1.952974e+01 8.683144e-02 + 1.415000e+01 -3.863122e+00 -1.954355e+01 8.703311e-02 + 1.416000e+01 -3.611024e+00 -1.955736e+01 8.718022e-02 + 1.417000e+01 -3.286660e+00 -1.957117e+01 8.722168e-02 + 1.418000e+01 -2.894460e+00 -1.958499e+01 8.714281e-02 + 1.419000e+01 -2.439767e+00 -1.959880e+01 8.697027e-02 + 1.420000e+01 -1.928925e+00 -1.961261e+01 8.676321e-02 + 1.421000e+01 -1.369369e+00 -1.962642e+01 8.659313e-02 + 1.422000e+01 -7.696641e-01 -1.964023e+01 8.651919e-02 + 1.423000e+01 -1.395087e-01 -1.965405e+01 8.656721e-02 + 1.424000e+01 5.103362e-01 -1.966786e+01 8.672041e-02 + 1.425000e+01 1.168189e+00 -1.968167e+01 8.692539e-02 + 1.426000e+01 1.821671e+00 -1.969548e+01 8.711108e-02 + 1.427000e+01 2.457998e+00 -1.970929e+01 8.721334e-02 + 1.428000e+01 3.064343e+00 -1.972310e+01 8.719685e-02 + 1.429000e+01 3.628244e+00 -1.973692e+01 8.706682e-02 + 1.430000e+01 4.138038e+00 -1.975073e+01 8.686730e-02 + 1.431000e+01 4.583296e+00 -1.976454e+01 8.666640e-02 + 1.432000e+01 4.955240e+00 -1.977835e+01 8.653308e-02 + 1.433000e+01 5.247099e+00 -1.979216e+01 8.651313e-02 + 1.434000e+01 5.454396e+00 -1.980597e+01 8.661301e-02 + 1.435000e+01 5.575138e+00 -1.981979e+01 8.679766e-02 + 1.436000e+01 5.609900e+00 -1.983360e+01 8.700313e-02 + 1.437000e+01 5.561781e+00 -1.984741e+01 8.715912e-02 + 1.438000e+01 5.436253e+00 -1.986122e+01 8.721313e-02 + 1.439000e+01 5.240895e+00 -1.987503e+01 8.714810e-02 + 1.440000e+01 4.985026e+00 -1.988884e+01 8.698788e-02 + 1.441000e+01 4.679273e+00 -1.990266e+01 8.678910e-02 + 1.442000e+01 4.335075e+00 -1.991647e+01 8.662183e-02 + 1.443000e+01 3.964178e+00 -1.993028e+01 8.654520e-02 + 1.444000e+01 3.578123e+00 -1.994409e+01 8.658651e-02 + 1.445000e+01 3.187783e+00 -1.995790e+01 8.673150e-02 + 1.446000e+01 2.802954e+00 -1.997171e+01 8.692952e-02 + 1.447000e+01 2.432023e+00 -1.998553e+01 8.711160e-02 + 1.448000e+01 2.081747e+00 -1.999934e+01 8.721460e-02 + 1.449000e+01 1.757120e+00 -2.001315e+01 8.720277e-02 + 1.450000e+01 1.461361e+00 -2.002696e+01 8.707979e-02 + 1.451000e+01 1.195997e+00 -2.004077e+01 8.688753e-02 + 1.452000e+01 9.610290e-01 -2.005458e+01 8.669200e-02 + 1.453000e+01 7.551803e-01 -2.006840e+01 8.656071e-02 + 1.454000e+01 5.761841e-01 -2.008221e+01 8.653907e-02 + 1.455000e+01 4.211026e-01 -2.009602e+01 8.663426e-02 + 1.456000e+01 2.866464e-01 -2.010983e+01 8.681266e-02 + 1.457000e+01 1.694743e-01 -2.012364e+01 8.701187e-02 + 1.458000e+01 6.645185e-02 -2.013745e+01 8.716272e-02 + 1.459000e+01 -2.514443e-02 -2.015127e+01 8.721308e-02 + 1.460000e+01 -1.074894e-01 -2.016508e+01 8.714545e-02 + 1.461000e+01 -1.821416e-01 -2.017889e+01 8.698281e-02 + 1.462000e+01 -2.500448e-01 -2.019270e+01 8.678086e-02 + 1.463000e+01 -3.115920e-01 -2.020651e+01 8.660920e-02 + 1.464000e+01 -3.667410e-01 -2.022032e+01 8.652729e-02 + 1.465000e+01 -4.151668e-01 -2.023414e+01 8.656352e-02 + 1.466000e+01 -4.564340e-01 -2.024795e+01 8.670512e-02 + 1.467000e+01 -4.901719e-01 -2.026176e+01 8.690285e-02 + 1.468000e+01 -5.162349e-01 -2.027557e+01 8.708850e-02 + 1.469000e+01 -5.348347e-01 -2.028938e+01 8.719871e-02 + 1.470000e+01 -5.466305e-01 -2.030319e+01 8.719651e-02 + 1.471000e+01 -5.527720e-01 -2.031701e+01 8.708366e-02 + 1.472000e+01 -5.548896e-01 -2.033082e+01 8.689996e-02 + 1.473000e+01 -5.550346e-01 -2.034463e+01 8.670973e-02 + 1.474000e+01 -5.555731e-01 -2.035844e+01 8.657974e-02 + 1.475000e+01 -5.590439e-01 -2.037225e+01 8.655587e-02 + 1.476000e+01 -5.679911e-01 -2.038607e+01 8.664678e-02 + 1.477000e+01 -5.847853e-01 -2.039988e+01 8.682083e-02 + 1.478000e+01 -6.114465e-01 -2.041369e+01 8.701749e-02 + 1.479000e+01 -6.494827e-01 -2.042750e+01 8.716862e-02 + 1.480000e+01 -6.997548e-01 -2.044131e+01 8.722207e-02 + 1.481000e+01 -7.623785e-01 -2.045512e+01 8.715926e-02 + 1.482000e+01 -8.366678e-01 -2.046894e+01 8.700137e-02 + 1.483000e+01 -9.211228e-01 -2.048275e+01 8.680223e-02 + 1.484000e+01 -1.013463e+00 -2.049656e+01 8.663007e-02 + 1.485000e+01 -1.110697e+00 -2.051037e+01 8.654393e-02 + 1.486000e+01 -1.209235e+00 -2.052418e+01 8.657293e-02 + 1.487000e+01 -1.305011e+00 -2.053799e+01 8.670590e-02 + 1.488000e+01 -1.393638e+00 -2.055181e+01 8.689546e-02 + 1.489000e+01 -1.470557e+00 -2.056562e+01 8.707496e-02 + 1.490000e+01 -1.531186e+00 -2.057943e+01 8.718178e-02 + 1.491000e+01 -1.571064e+00 -2.059324e+01 8.717868e-02 + 1.492000e+01 -1.585969e+00 -2.060705e+01 8.706638e-02 + 1.493000e+01 -1.572029e+00 -2.062086e+01 8.688319e-02 + 1.494000e+01 -1.525798e+00 -2.063468e+01 8.669216e-02 + 1.495000e+01 -1.444329e+00 -2.064849e+01 8.655945e-02 + 1.496000e+01 -1.325218e+00 -2.066230e+01 8.653123e-02 + 1.497000e+01 -1.166644e+00 -2.067611e+01 8.661736e-02 + 1.498000e+01 -9.674051e-01 -2.068992e+01 8.678785e-02 + 1.499000e+01 -7.269469e-01 -2.070373e+01 8.698363e-02 + 1.500000e+01 -4.454000e-01 -2.071755e+01 8.713743e-02 + 1.501000e+01 -1.236221e-01 -2.073136e+01 8.719695e-02 + 1.502000e+01 2.367538e-01 -2.074517e+01 8.714255e-02 + 1.503000e+01 6.332650e-01 -2.075898e+01 8.699371e-02 + 1.504000e+01 1.062564e+00 -2.077279e+01 8.680245e-02 + 1.505000e+01 1.520368e+00 -2.078660e+01 8.663558e-02 + 1.506000e+01 2.001423e+00 -2.080042e+01 8.655162e-02 + 1.507000e+01 2.499483e+00 -2.081423e+01 8.658014e-02 + 1.508000e+01 3.007331e+00 -2.082804e+01 8.671129e-02 + 1.509000e+01 3.516827e+00 -2.084185e+01 8.689934e-02 + 1.510000e+01 4.019008e+00 -2.085566e+01 8.707903e-02 + 1.511000e+01 4.504236e+00 -2.086947e+01 8.718840e-02 + 1.512000e+01 4.962400e+00 -2.088329e+01 8.719001e-02 + 1.513000e+01 5.383163e+00 -2.089710e+01 8.708351e-02 + 1.514000e+01 5.756255e+00 -2.091091e+01 8.690578e-02 + 1.515000e+01 6.071799e+00 -2.092472e+01 8.671843e-02 + 1.516000e+01 6.320652e+00 -2.093853e+01 8.658676e-02 + 1.517000e+01 6.494763e+00 -2.095234e+01 8.655692e-02 + 1.518000e+01 6.587501e+00 -2.096616e+01 8.663953e-02 + 1.519000e+01 6.593970e+00 -2.097997e+01 8.680590e-02 + 1.520000e+01 6.511261e+00 -2.099378e+01 8.699829e-02 + 1.521000e+01 6.338644e+00 -2.100759e+01 8.715026e-02 + 1.522000e+01 6.077686e+00 -2.102140e+01 8.720959e-02 + 1.523000e+01 5.732276e+00 -2.103521e+01 8.715597e-02 + 1.524000e+01 5.308559e+00 -2.104903e+01 8.700773e-02 + 1.525000e+01 4.814774e+00 -2.106284e+01 8.681567e-02 + 1.526000e+01 4.261014e+00 -2.107665e+01 8.664582e-02 + 1.527000e+01 3.658895e+00 -2.109046e+01 8.655666e-02 + 1.528000e+01 3.021173e+00 -2.110427e+01 8.657858e-02 + 1.529000e+01 2.361305e+00 -2.111808e+01 8.670310e-02 + 1.530000e+01 1.692992e+00 -2.113190e+01 8.688598e-02 + 1.531000e+01 1.029719e+00 -2.114571e+01 8.706302e-02 + 1.532000e+01 3.843055e-01 -2.115952e+01 8.717253e-02 + 1.533000e+01 -2.314983e-01 -2.117333e+01 8.717646e-02 + 1.534000e+01 -8.073607e-01 -2.118714e+01 8.707316e-02 + 1.535000e+01 -1.334647e+00 -2.120096e+01 8.689792e-02 + 1.536000e+01 -1.806617e+00 -2.121477e+01 8.671103e-02 + 1.537000e+01 -2.218534e+00 -2.122858e+01 8.657716e-02 + 1.538000e+01 -2.567686e+00 -2.124239e+01 8.654282e-02 + 1.539000e+01 -2.853326e+00 -2.125620e+01 8.661987e-02 + 1.540000e+01 -3.076533e+00 -2.127001e+01 8.678136e-02 + 1.541000e+01 -3.240015e+00 -2.128383e+01 8.697121e-02 + 1.542000e+01 -3.347861e+00 -2.129764e+01 8.712405e-02 + 1.543000e+01 -3.405258e+00 -2.131145e+01 8.718786e-02 + 1.544000e+01 -3.418200e+00 -2.132526e+01 8.714159e-02 + 1.545000e+01 -3.393192e+00 -2.133907e+01 8.700214e-02 + 1.546000e+01 -3.336974e+00 -2.135288e+01 8.681863e-02 + 1.547000e+01 -3.256275e+00 -2.136670e+01 8.665566e-02 + 1.548000e+01 -3.157593e+00 -2.138051e+01 8.657086e-02 + 1.549000e+01 -3.047040e+00 -2.139432e+01 8.659456e-02 + 1.550000e+01 -2.930208e+00 -2.140813e+01 8.671892e-02 + 1.551000e+01 -2.812102e+00 -2.142194e+01 8.690064e-02 + 1.552000e+01 -2.697099e+00 -2.143575e+01 8.707639e-02 + 1.553000e+01 -2.588949e+00 -2.144957e+01 8.718490e-02 + 1.554000e+01 -2.490803e+00 -2.146338e+01 8.718799e-02 + 1.555000e+01 -2.405253e+00 -2.147719e+01 8.708347e-02 + 1.556000e+01 -2.334388e+00 -2.149100e+01 8.690596e-02 + 1.557000e+01 -2.279846e+00 -2.150481e+01 8.671539e-02 + 1.558000e+01 -2.242860e+00 -2.151862e+01 8.657662e-02 + 1.559000e+01 -2.224294e+00 -2.153244e+01 8.653701e-02 + 1.560000e+01 -2.224665e+00 -2.154625e+01 8.660975e-02 + 1.561000e+01 -2.244148e+00 -2.156006e+01 8.676924e-02 + 1.562000e+01 -2.282567e+00 -2.157387e+01 8.696030e-02 + 1.563000e+01 -2.339377e+00 -2.158768e+01 8.711762e-02 + 1.564000e+01 -2.413641e+00 -2.160149e+01 8.718828e-02 + 1.565000e+01 -2.504009e+00 -2.161531e+01 8.714959e-02 + 1.566000e+01 -2.608694e+00 -2.162912e+01 8.701652e-02 + 1.567000e+01 -2.725478e+00 -2.164293e+01 8.683646e-02 + 1.568000e+01 -2.851718e+00 -2.165674e+01 8.667307e-02 + 1.569000e+01 -2.984382e+00 -2.167055e+01 8.658420e-02 + 1.570000e+01 -3.120107e+00 -2.168436e+01 8.660152e-02 + 1.571000e+01 -3.255281e+00 -2.169818e+01 8.671925e-02 + 1.572000e+01 -3.386141e+00 -2.171199e+01 8.689629e-02 + 1.573000e+01 -3.508893e+00 -2.172580e+01 8.707088e-02 + 1.574000e+01 -3.619842e+00 -2.173961e+01 8.718225e-02 + 1.575000e+01 -3.715524e+00 -2.175342e+01 8.719152e-02 + 1.576000e+01 -3.792840e+00 -2.176723e+01 8.709476e-02 + 1.577000e+01 -3.849176e+00 -2.178105e+01 8.692438e-02 + 1.578000e+01 -3.882504e+00 -2.179486e+01 8.673815e-02 + 1.579000e+01 -3.891464e+00 -2.180867e+01 8.659954e-02 + 1.580000e+01 -3.875416e+00 -2.182248e+01 8.655563e-02 + 1.581000e+01 -3.834455e+00 -2.183629e+01 8.662049e-02 + 1.582000e+01 -3.769399e+00 -2.185010e+01 8.677023e-02 + 1.583000e+01 -3.681745e+00 -2.186392e+01 8.695160e-02 + 1.584000e+01 -3.573588e+00 -2.187773e+01 8.710090e-02 + 1.585000e+01 -3.447530e+00 -2.189154e+01 8.716604e-02 + 1.586000e+01 -3.306553e+00 -2.190535e+01 8.712429e-02 + 1.587000e+01 -3.153896e+00 -2.191916e+01 8.698994e-02 + 1.588000e+01 -2.992916e+00 -2.193298e+01 8.680943e-02 + 1.589000e+01 -2.826957e+00 -2.194679e+01 8.664565e-02 + 1.590000e+01 -2.659230e+00 -2.196060e+01 8.655622e-02 + 1.591000e+01 -2.492706e+00 -2.197441e+01 8.657323e-02 + 1.592000e+01 -2.330024e+00 -2.198822e+01 8.669178e-02 + 1.593000e+01 -2.173434e+00 -2.200203e+01 8.687175e-02 + 1.594000e+01 -2.024744e+00 -2.201585e+01 8.705200e-02 + 1.595000e+01 -1.885313e+00 -2.202966e+01 8.717166e-02 + 1.596000e+01 -1.756044e+00 -2.204347e+01 8.719096e-02 + 1.597000e+01 -1.637404e+00 -2.205728e+01 8.710449e-02 + 1.598000e+01 -1.529458e+00 -2.207109e+01 8.694291e-02 + 1.599000e+01 -1.431911e+00 -2.208490e+01 8.676253e-02 + 1.600000e+01 -1.344145e+00 -2.209872e+01 8.662605e-02 + 1.601000e+01 -1.265271e+00 -2.211253e+01 8.658077e-02 + 1.602000e+01 -1.194158e+00 -2.212634e+01 8.664190e-02 + 1.603000e+01 -1.129475e+00 -2.214015e+01 8.678723e-02 + 1.604000e+01 -1.069708e+00 -2.215396e+01 8.696517e-02 + 1.605000e+01 -1.013175e+00 -2.216777e+01 8.711310e-02 + 1.606000e+01 -9.580365e-01 -2.218159e+01 8.717913e-02 + 1.607000e+01 -9.022976e-01 -2.219540e+01 8.713980e-02 + 1.608000e+01 -8.438092e-01 -2.220921e+01 8.700803e-02 + 1.609000e+01 -7.802728e-01 -2.222302e+01 8.682870e-02 + 1.610000e+01 -7.092517e-01 -2.223683e+01 8.666351e-02 + 1.611000e+01 -6.281935e-01 -2.225064e+01 8.656967e-02 + 1.612000e+01 -5.344664e-01 -2.226446e+01 8.657978e-02 + 1.613000e+01 -4.254127e-01 -2.227827e+01 8.669028e-02 + 1.614000e+01 -2.984207e-01 -2.229208e+01 8.686268e-02 + 1.615000e+01 -1.510139e-01 -2.230589e+01 8.703726e-02 + 1.616000e+01 1.904334e-02 -2.231970e+01 8.715393e-02 + 1.617000e+01 2.136275e-01 -2.233351e+01 8.717286e-02 + 1.618000e+01 4.341297e-01 -2.234733e+01 8.708780e-02 + 1.619000e+01 6.813283e-01 -2.236114e+01 8.692818e-02 + 1.620000e+01 9.552663e-01 -2.237495e+01 8.674911e-02 + 1.621000e+01 1.255142e+00 -2.238876e+01 8.661257e-02 + 1.622000e+01 1.579220e+00 -2.240257e+01 8.656588e-02 + 1.623000e+01 1.924770e+00 -2.241638e+01 8.662499e-02 + 1.624000e+01 2.288039e+00 -2.243020e+01 8.676888e-02 + 1.625000e+01 2.664263e+00 -2.244401e+01 8.694708e-02 + 1.626000e+01 3.047722e+00 -2.245782e+01 8.709763e-02 + 1.627000e+01 3.431836e+00 -2.247163e+01 8.716854e-02 + 1.628000e+01 3.809304e+00 -2.248544e+01 8.713550e-02 + 1.629000e+01 4.172289e+00 -2.249925e+01 8.701008e-02 + 1.630000e+01 4.512626e+00 -2.251307e+01 8.683574e-02 + 1.631000e+01 4.822073e+00 -2.252688e+01 8.667314e-02 + 1.632000e+01 5.092568e+00 -2.254069e+01 8.657922e-02 + 1.633000e+01 5.316504e+00 -2.255450e+01 8.658719e-02 + 1.634000e+01 5.487003e+00 -2.256831e+01 8.669477e-02 + 1.635000e+01 5.598176e+00 -2.258212e+01 8.686500e-02 + 1.636000e+01 5.645362e+00 -2.259594e+01 8.703936e-02 + 1.637000e+01 5.625337e+00 -2.260975e+01 8.715825e-02 + 1.638000e+01 5.536483e+00 -2.262356e+01 8.718141e-02 + 1.639000e+01 5.378903e+00 -2.263737e+01 8.710144e-02 + 1.640000e+01 5.154495e+00 -2.265118e+01 8.694617e-02 + 1.641000e+01 4.866954e+00 -2.266500e+01 8.676927e-02 + 1.642000e+01 4.521731e+00 -2.267881e+01 8.663185e-02 + 1.643000e+01 4.125925e+00 -2.269262e+01 8.658129e-02 + 1.644000e+01 3.688121e+00 -2.270643e+01 8.663452e-02 + 1.645000e+01 3.218184e+00 -2.272024e+01 8.677209e-02 + 1.646000e+01 2.727006e+00 -2.273405e+01 8.694519e-02 + 1.647000e+01 2.226214e+00 -2.274787e+01 8.709303e-02 + 1.648000e+01 1.727859e+00 -2.276168e+01 8.716397e-02 + 1.649000e+01 1.244083e+00 -2.277549e+01 8.713314e-02 + 1.650000e+01 7.867764e-01 -2.278930e+01 8.701083e-02 + 1.651000e+01 3.672473e-01 -2.280311e+01 8.683899e-02 + 1.652000e+01 -4.106897e-03 -2.281692e+01 8.667696e-02 + 1.653000e+01 -3.180983e-01 -2.283074e+01 8.658105e-02 + 1.654000e+01 -5.670198e-01 -2.284455e+01 8.658475e-02 + 1.655000e+01 -7.448772e-01 -2.285836e+01 8.668684e-02 + 1.656000e+01 -8.475763e-01 -2.287217e+01 8.685183e-02 + 1.657000e+01 -8.730600e-01 -2.288598e+01 8.702265e-02 + 1.658000e+01 -8.213907e-01 -2.289979e+01 8.714060e-02 + 1.659000e+01 -6.947757e-01 -2.291361e+01 8.716553e-02 + 1.660000e+01 -4.975349e-01 -2.292742e+01 8.708940e-02 + 1.661000e+01 -2.360089e-01 -2.294123e+01 8.693890e-02 + 1.662000e+01 8.158785e-02 -2.295504e+01 8.676641e-02 + 1.663000e+01 4.453688e-01 -2.296885e+01 8.663207e-02 + 1.664000e+01 8.440257e-01 -2.298266e+01 8.658288e-02 + 1.665000e+01 1.265123e+00 -2.299648e+01 8.663604e-02 + 1.666000e+01 1.695427e+00 -2.301029e+01 8.677288e-02 + 1.667000e+01 2.121268e+00 -2.302410e+01 8.694556e-02 + 1.668000e+01 2.528916e+00 -2.303791e+01 8.709395e-02 + 1.669000e+01 2.904967e+00 -2.305172e+01 8.716660e-02 + 1.670000e+01 3.236733e+00 -2.306553e+01 8.713823e-02 + 1.671000e+01 3.512608e+00 -2.307935e+01 8.701830e-02 + 1.672000e+01 3.722423e+00 -2.309316e+01 8.684779e-02 + 1.673000e+01 3.857756e+00 -2.310697e+01 8.668536e-02 + 1.674000e+01 3.912201e+00 -2.312078e+01 8.658717e-02 + 1.675000e+01 3.881580e+00 -2.313459e+01 8.658725e-02 + 1.676000e+01 3.764095e+00 -2.314840e+01 8.668542e-02 + 1.677000e+01 3.560410e+00 -2.316222e+01 8.684746e-02 + 1.678000e+01 3.273652e+00 -2.317603e+01 8.701727e-02 + 1.679000e+01 2.909355e+00 -2.318984e+01 8.713655e-02 + 1.680000e+01 2.475305e+00 -2.320365e+01 8.716485e-02 + 1.681000e+01 1.981337e+00 -2.321746e+01 8.709319e-02 + 1.682000e+01 1.439047e+00 -2.323127e+01 8.694702e-02 + 1.683000e+01 8.614615e-01 -2.324509e+01 8.677753e-02 + 1.684000e+01 2.626474e-01 -2.325890e+01 8.664413e-02 + 1.685000e+01 -3.427034e-01 -2.327271e+01 8.659376e-02 + 1.686000e+01 -9.397152e-01 -2.328652e+01 8.664432e-02 + 1.687000e+01 -1.513775e+00 -2.330033e+01 8.677822e-02 + 1.688000e+01 -2.050971e+00 -2.331414e+01 8.694875e-02 + 1.689000e+01 -2.538503e+00 -2.332796e+01 8.709653e-02 + 1.690000e+01 -2.965063e+00 -2.334177e+01 8.717022e-02 + 1.691000e+01 -3.321160e+00 -2.335558e+01 8.714398e-02 + 1.692000e+01 -3.599382e+00 -2.336939e+01 8.702621e-02 + 1.693000e+01 -3.794593e+00 -2.338320e+01 8.685672e-02 + 1.694000e+01 -3.904057e+00 -2.339702e+01 8.669324e-02 + 1.695000e+01 -3.927475e+00 -2.341083e+01 8.659162e-02 + 1.696000e+01 -3.866950e+00 -2.342464e+01 8.658630e-02 + 1.697000e+01 -3.726880e+00 -2.343845e+01 8.667811e-02 + 1.698000e+01 -3.513775e+00 -2.345226e+01 8.683405e-02 + 1.699000e+01 -3.236015e+00 -2.346607e+01 8.699912e-02 + 1.700000e+01 -2.903556e+00 -2.347989e+01 8.711559e-02 + 1.701000e+01 -2.527597e+00 -2.349370e+01 8.714296e-02 + 1.702000e+01 -2.120218e+00 -2.350751e+01 8.707167e-02 + 1.703000e+01 -1.694000e+00 -2.352132e+01 8.692631e-02 + 1.704000e+01 -1.261644e+00 -2.353513e+01 8.675731e-02 + 1.705000e+01 -8.356002e-01 -2.354894e+01 8.662374e-02 + 1.706000e+01 -4.277182e-01 -2.356276e+01 8.657281e-02 + 1.707000e+01 -4.892143e-02 -2.357657e+01 8.662316e-02 + 1.708000e+01 2.910743e-01 -2.359038e+01 8.675822e-02 + 1.709000e+01 5.840006e-01 -2.360419e+01 8.693214e-02 + 1.710000e+01 8.232263e-01 -2.361800e+01 8.708590e-02 + 1.711000e+01 1.003896e+00 -2.363181e+01 8.716778e-02 + 1.712000e+01 1.123014e+00 -2.364563e+01 8.715096e-02 + 1.713000e+01 1.179478e+00 -2.365944e+01 8.704241e-02 + 1.714000e+01 1.174056e+00 -2.367325e+01 8.688049e-02 + 1.715000e+01 1.109323e+00 -2.368706e+01 8.672189e-02 + 1.716000e+01 9.895443e-01 -2.370087e+01 8.662208e-02 + 1.717000e+01 8.205209e-01 -2.371468e+01 8.661594e-02 + 1.718000e+01 6.094028e-01 -2.372850e+01 8.670535e-02 + 1.719000e+01 3.644659e-01 -2.374231e+01 8.685859e-02 + 1.720000e+01 9.486754e-02 -2.375612e+01 8.702171e-02 + 1.721000e+01 -1.896189e-01 -2.376993e+01 8.713742e-02 + 1.722000e+01 -4.788820e-01 -2.378374e+01 8.716496e-02 + 1.723000e+01 -7.627576e-01 -2.379755e+01 8.709387e-02 + 1.724000e+01 -1.031315e+00 -2.381137e+01 8.694759e-02 + 1.725000e+01 -1.275137e+00 -2.382518e+01 8.677555e-02 + 1.726000e+01 -1.485587e+00 -2.383899e+01 8.663639e-02 + 1.727000e+01 -1.655059e+00 -2.385280e+01 8.657763e-02 + 1.728000e+01 -1.777198e+00 -2.386661e+01 8.661901e-02 + 1.729000e+01 -1.847091e+00 -2.388042e+01 8.674544e-02 + 1.730000e+01 -1.861422e+00 -2.389424e+01 8.691249e-02 + 1.731000e+01 -1.818574e+00 -2.390805e+01 8.706206e-02 + 1.732000e+01 -1.718697e+00 -2.392186e+01 8.714263e-02 + 1.733000e+01 -1.563709e+00 -2.393567e+01 8.712675e-02 + 1.734000e+01 -1.357258e+00 -2.394948e+01 8.702031e-02 + 1.735000e+01 -1.104620e+00 -2.396329e+01 8.686045e-02 + 1.736000e+01 -8.125520e-01 -2.397711e+01 8.670292e-02 + 1.737000e+01 -4.890906e-01 -2.399092e+01 8.660293e-02 + 1.738000e+01 -1.433124e-01 -2.400473e+01 8.659576e-02 + 1.739000e+01 2.149441e-01 -2.401854e+01 8.668431e-02 + 1.740000e+01 5.753838e-01 -2.403235e+01 8.683806e-02 + 1.741000e+01 9.275768e-01 -2.404616e+01 8.700392e-02 + 1.742000e+01 1.261287e+00 -2.405998e+01 8.712489e-02 + 1.743000e+01 1.566793e+00 -2.407379e+01 8.715968e-02 + 1.744000e+01 1.835197e+00 -2.408760e+01 8.709670e-02 + 1.745000e+01 2.058695e+00 -2.410141e+01 8.695786e-02 + 1.746000e+01 2.230823e+00 -2.411522e+01 8.679122e-02 + 1.747000e+01 2.346639e+00 -2.412903e+01 8.665454e-02 + 1.748000e+01 2.402862e+00 -2.414285e+01 8.659530e-02 + 1.749000e+01 2.397953e+00 -2.415666e+01 8.663394e-02 + 1.750000e+01 2.332120e+00 -2.417047e+01 8.675670e-02 + 1.751000e+01 2.207283e+00 -2.418428e+01 8.692050e-02 + 1.752000e+01 2.026962e+00 -2.419809e+01 8.706826e-02 + 1.753000e+01 1.796122e+00 -2.421191e+01 8.714880e-02 + 1.754000e+01 1.520973e+00 -2.422572e+01 8.713429e-02 + 1.755000e+01 1.208728e+00 -2.423953e+01 8.702966e-02 + 1.756000e+01 8.673386e-01 -2.425334e+01 8.687089e-02 + 1.757000e+01 5.052165e-01 -2.426715e+01 8.671285e-02 + 1.758000e+01 1.309496e-01 -2.428096e+01 8.661037e-02 + 1.759000e+01 -2.469724e-01 -2.429478e+01 8.659908e-02 + 1.760000e+01 -6.204145e-01 -2.430859e+01 8.668283e-02 + 1.761000e+01 -9.818255e-01 -2.432240e+01 8.683227e-02 + 1.762000e+01 -1.324432e+00 -2.433621e+01 8.699534e-02 + 1.763000e+01 -1.642390e+00 -2.435002e+01 8.711552e-02 + 1.764000e+01 -1.930898e+00 -2.436383e+01 8.715136e-02 + 1.765000e+01 -2.186256e+00 -2.437765e+01 8.709049e-02 + 1.766000e+01 -2.405888e+00 -2.439146e+01 8.695380e-02 + 1.767000e+01 -2.588317e+00 -2.440527e+01 8.678836e-02 + 1.768000e+01 -2.733104e+00 -2.441908e+01 8.665140e-02 + 1.769000e+01 -2.840752e+00 -2.443289e+01 8.659050e-02 + 1.770000e+01 -2.912593e+00 -2.444670e+01 8.662688e-02 + 1.771000e+01 -2.950643e+00 -2.446052e+01 8.674783e-02 + 1.772000e+01 -2.957458e+00 -2.447433e+01 8.691132e-02 + 1.773000e+01 -2.935981e+00 -2.448814e+01 8.706087e-02 + 1.774000e+01 -2.889393e+00 -2.450195e+01 8.714520e-02 + 1.775000e+01 -2.820974e+00 -2.451576e+01 8.713574e-02 + 1.776000e+01 -2.733977e+00 -2.452957e+01 8.703622e-02 + 1.777000e+01 -2.631524e+00 -2.454339e+01 8.688139e-02 + 1.778000e+01 -2.516520e+00 -2.455720e+01 8.672516e-02 + 1.779000e+01 -2.391589e+00 -2.457101e+01 8.662212e-02 + 1.780000e+01 -2.259035e+00 -2.458482e+01 8.660840e-02 + 1.781000e+01 -2.120827e+00 -2.459863e+01 8.668891e-02 + 1.782000e+01 -1.978597e+00 -2.461244e+01 8.683560e-02 + 1.783000e+01 -1.833662e+00 -2.462626e+01 8.699740e-02 + 1.784000e+01 -1.687057e+00 -2.464007e+01 8.711823e-02 + 1.785000e+01 -1.539578e+00 -2.465388e+01 8.715627e-02 + 1.786000e+01 -1.391838e+00 -2.466769e+01 8.709820e-02 + 1.787000e+01 -1.244314e+00 -2.468150e+01 8.696366e-02 + 1.788000e+01 -1.097405e+00 -2.469531e+01 8.679860e-02 + 1.789000e+01 -9.514796e-01 -2.470913e+01 8.665973e-02 + 1.790000e+01 -8.069198e-01 -2.472294e+01 8.659487e-02 + 1.791000e+01 -6.641559e-01 -2.473675e+01 8.662618e-02 + 1.792000e+01 -5.236915e-01 -2.475056e+01 8.674239e-02 + 1.793000e+01 -3.861179e-01 -2.476437e+01 8.690283e-02 + 1.794000e+01 -2.521187e-01 -2.477818e+01 8.705183e-02 + 1.795000e+01 -1.224641e-01 -2.479200e+01 8.713817e-02 + 1.796000e+01 2.002381e-03 -2.480581e+01 8.713247e-02 + 1.797000e+01 1.203851e-01 -2.481962e+01 8.703715e-02 + 1.798000e+01 2.317610e-01 -2.483343e+01 8.688545e-02 + 1.799000e+01 3.352080e-01 -2.484724e+01 8.673017e-02 + 1.800000e+01 4.298322e-01 -2.486105e+01 8.662547e-02 + 1.801000e+01 5.147948e-01 -2.487487e+01 8.660800e-02 + 1.802000e+01 5.893341e-01 -2.488868e+01 8.668387e-02 + 1.803000e+01 6.527827e-01 -2.490249e+01 8.682659e-02 + 1.804000e+01 7.045791e-01 -2.491630e+01 8.698645e-02 + 1.805000e+01 7.442724e-01 -2.493011e+01 8.710806e-02 + 1.806000e+01 7.715211e-01 -2.494393e+01 8.714944e-02 + 1.807000e+01 7.860873e-01 -2.495774e+01 8.709627e-02 + 1.808000e+01 7.878271e-01 -2.497155e+01 8.696669e-02 + 1.809000e+01 7.766795e-01 -2.498536e+01 8.680515e-02 + 1.810000e+01 7.526563e-01 -2.499917e+01 8.666724e-02 + 1.811000e+01 7.158358e-01 -2.501298e+01 8.660047e-02 + 1.812000e+01 6.663611e-01 -2.502680e+01 8.662762e-02 + 1.813000e+01 6.044479e-01 -2.504061e+01 8.673865e-02 + 1.814000e+01 5.303998e-01 -2.505442e+01 8.689440e-02 + 1.815000e+01 4.446352e-01 -2.506823e+01 8.704050e-02 + 1.816000e+01 3.477236e-01 -2.508204e+01 8.712634e-02 + 1.817000e+01 2.404307e-01 -2.509585e+01 8.712243e-02 + 1.818000e+01 1.237700e-01 -2.510967e+01 8.703037e-02 + 1.819000e+01 -9.416308e-04 -2.512348e+01 8.688225e-02 + 1.820000e+01 -1.320299e-01 -2.513729e+01 8.672973e-02 + 1.821000e+01 -2.674146e-01 -2.515110e+01 8.662628e-02 + 1.822000e+01 -4.045726e-01 -2.516491e+01 8.660846e-02 + 1.823000e+01 -5.405171e-01 -2.517872e+01 8.668296e-02 + 1.824000e+01 -6.717992e-01 -2.519254e+01 8.682420e-02 + 1.825000e+01 -7.945361e-01 -2.520635e+01 8.698340e-02 + 1.826000e+01 -9.044691e-01 -2.522016e+01 8.710574e-02 + 1.827000e+01 -9.970535e-01 -2.523397e+01 8.714922e-02 + 1.828000e+01 -1.067581e+00 -2.524778e+01 8.709899e-02 + 1.829000e+01 -1.111334e+00 -2.526159e+01 8.697229e-02 + 1.830000e+01 -1.123760e+00 -2.527541e+01 8.681263e-02 + 1.831000e+01 -1.100680e+00 -2.528922e+01 8.667502e-02 + 1.832000e+01 -1.038493e+00 -2.530303e+01 8.660692e-02 + 1.833000e+01 -9.343971e-01 -2.531684e+01 8.663167e-02 + 1.834000e+01 -7.865948e-01 -2.533065e+01 8.674018e-02 + 1.835000e+01 -5.944846e-01 -2.534446e+01 8.689429e-02 + 1.836000e+01 -3.588183e-01 -2.535828e+01 8.704028e-02 + 1.837000e+01 -8.181862e-02 -2.537209e+01 8.712763e-02 + 1.838000e+01 2.327552e-01 -2.538590e+01 8.712632e-02 + 1.839000e+01 5.796003e-01 -2.539971e+01 8.703698e-02 + 1.840000e+01 9.519272e-01 -2.541352e+01 8.689062e-02 + 1.841000e+01 1.341585e+00 -2.542733e+01 8.673808e-02 + 1.842000e+01 1.739249e+00 -2.544115e+01 8.663261e-02 + 1.843000e+01 2.134674e+00 -2.545496e+01 8.661124e-02 + 1.844000e+01 2.517002e+00 -2.546877e+01 8.668172e-02 + 1.845000e+01 2.875107e+00 -2.548258e+01 8.681972e-02 + 1.846000e+01 3.197976e+00 -2.549639e+01 8.697754e-02 + 1.847000e+01 3.475105e+00 -2.551020e+01 8.710080e-02 + 1.848000e+01 3.696893e+00 -2.552402e+01 8.714724e-02 + 1.849000e+01 3.855011e+00 -2.553783e+01 8.710102e-02 + 1.850000e+01 3.942748e+00 -2.555164e+01 8.697805e-02 + 1.851000e+01 3.955291e+00 -2.556545e+01 8.682055e-02 + 1.852000e+01 3.889955e+00 -2.557926e+01 8.668268e-02 + 1.853000e+01 3.746327e+00 -2.559307e+01 8.661186e-02 + 1.854000e+01 3.526329e+00 -2.560689e+01 8.663212e-02 + 1.855000e+01 3.234200e+00 -2.562070e+01 8.673571e-02 + 1.856000e+01 2.876383e+00 -2.563451e+01 8.688589e-02 + 1.857000e+01 2.461332e+00 -2.564832e+01 8.703003e-02 + 1.858000e+01 1.999250e+00 -2.566213e+01 8.711799e-02 + 1.859000e+01 1.501751e+00 -2.567595e+01 8.711936e-02 + 1.860000e+01 9.814823e-01 -2.568976e+01 8.703370e-02 + 1.861000e+01 4.517027e-01 -2.570357e+01 8.689062e-02 + 1.862000e+01 -7.414835e-02 -2.571738e+01 8.673974e-02 + 1.863000e+01 -5.828892e-01 -2.573119e+01 8.663363e-02 + 1.864000e+01 -1.062014e+00 -2.574500e+01 8.660942e-02 + 1.865000e+01 -1.500081e+00 -2.575882e+01 8.667576e-02 + 1.866000e+01 -1.887051e+00 -2.577263e+01 8.680969e-02 + 1.867000e+01 -2.214570e+00 -2.578644e+01 8.696490e-02 + 1.868000e+01 -2.476187e+00 -2.580025e+01 8.708798e-02 + 1.869000e+01 -2.667493e+00 -2.581406e+01 8.713694e-02 + 1.870000e+01 -2.786196e+00 -2.582787e+01 8.709541e-02 + 1.871000e+01 -2.832105e+00 -2.584169e+01 8.697819e-02 + 1.872000e+01 -2.807064e+00 -2.585550e+01 8.682608e-02 + 1.873000e+01 -2.714802e+00 -2.586931e+01 8.669201e-02 + 1.874000e+01 -2.560741e+00 -2.588312e+01 8.662265e-02 + 1.875000e+01 -2.351752e+00 -2.589693e+01 8.664204e-02 + 1.876000e+01 -2.095870e+00 -2.591074e+01 8.674305e-02 + 1.877000e+01 -1.802001e+00 -2.592456e+01 8.689001e-02 + 1.878000e+01 -1.479602e+00 -2.593837e+01 8.703136e-02 + 1.879000e+01 -1.138366e+00 -2.595218e+01 8.711776e-02 + 1.880000e+01 -7.879214e-01 -2.596599e+01 8.711906e-02 + 1.881000e+01 -4.375466e-01 -2.597980e+01 8.703452e-02 + 1.882000e+01 -9.591223e-02 -2.599361e+01 8.689316e-02 + 1.883000e+01 2.291400e-01 -2.600743e+01 8.674382e-02 + 1.884000e+01 5.307793e-01 -2.602124e+01 8.663848e-02 + 1.885000e+01 8.033258e-01 -2.603505e+01 8.661408e-02 + 1.886000e+01 1.042344e+00 -2.604886e+01 8.667944e-02 + 1.887000e+01 1.244694e+00 -2.606267e+01 8.681211e-02 + 1.888000e+01 1.408534e+00 -2.607648e+01 8.696633e-02 + 1.889000e+01 1.533284e+00 -2.609030e+01 8.708914e-02 + 1.890000e+01 1.619555e+00 -2.610411e+01 8.713861e-02 + 1.891000e+01 1.669032e+00 -2.611792e+01 8.709817e-02 + 1.892000e+01 1.684341e+00 -2.613173e+01 8.698215e-02 + 1.893000e+01 1.668888e+00 -2.614554e+01 8.683088e-02 + 1.894000e+01 1.626680e+00 -2.615935e+01 8.669698e-02 + 1.895000e+01 1.562134e+00 -2.617317e+01 8.662709e-02 + 1.896000e+01 1.479893e+00 -2.618698e+01 8.664556e-02 + 1.897000e+01 1.384630e+00 -2.620079e+01 8.674573e-02 + 1.898000e+01 1.280880e+00 -2.621460e+01 8.689237e-02 + 1.899000e+01 1.172869e+00 -2.622841e+01 8.703415e-02 + 1.900000e+01 1.064382e+00 -2.624222e+01 8.712155e-02 + 1.901000e+01 9.586432e-01 -2.625604e+01 8.712391e-02 + 1.902000e+01 8.582358e-01 -2.626985e+01 8.703982e-02 + 1.903000e+01 7.650479e-01 -2.628366e+01 8.689764e-02 + 1.904000e+01 6.802536e-01 -2.629747e+01 8.674590e-02 + 1.905000e+01 6.043264e-01 -2.631128e+01 8.663675e-02 + 1.906000e+01 5.370840e-01 -2.632509e+01 8.660775e-02 + 1.907000e+01 4.777607e-01 -2.633891e+01 8.666869e-02 + 1.908000e+01 4.251049e-01 -2.635272e+01 8.679810e-02 + 1.909000e+01 3.774942e-01 -2.636653e+01 8.695090e-02 + 1.910000e+01 3.330653e-01 -2.638034e+01 8.707426e-02 + 1.911000e+01 2.898492e-01 -2.639415e+01 8.712585e-02 + 1.912000e+01 2.459072e-01 -2.640797e+01 8.708827e-02 + 1.913000e+01 1.994612e-01 -2.642178e+01 8.697485e-02 + 1.914000e+01 1.490112e-01 -2.643559e+01 8.682517e-02 + 1.915000e+01 9.343576e-02 -2.644940e+01 8.669150e-02 + 1.916000e+01 3.207130e-02 -2.646321e+01 8.662080e-02 + 1.917000e+01 -3.523389e-02 -2.647702e+01 8.663819e-02 + 1.918000e+01 -1.080916e-01 -2.649084e+01 8.673807e-02 + 1.919000e+01 -1.855728e-01 -2.650465e+01 8.688609e-02 + 1.920000e+01 -2.662331e-01 -2.651846e+01 8.703131e-02 + 1.921000e+01 -3.481626e-01 -2.653227e+01 8.712394e-02 + 1.922000e+01 -4.290574e-01 -2.654608e+01 8.713244e-02 + 1.923000e+01 -5.063087e-01 -2.655989e+01 8.705411e-02 + 1.924000e+01 -5.771067e-01 -2.657371e+01 8.691603e-02 + 1.925000e+01 -6.385529e-01 -2.658752e+01 8.676580e-02 + 1.926000e+01 -6.877780e-01 -2.660133e+01 8.665529e-02 + 1.927000e+01 -7.220605e-01 -2.661514e+01 8.662258e-02 + 1.928000e+01 -7.389414e-01 -2.662895e+01 8.667855e-02 + 1.929000e+01 -7.363326e-01 -2.664276e+01 8.680308e-02 + 1.930000e+01 -7.126151e-01 -2.665658e+01 8.695223e-02 + 1.931000e+01 -6.667246e-01 -2.667039e+01 8.707374e-02 + 1.932000e+01 -5.982225e-01 -2.668420e+01 8.712516e-02 + 1.933000e+01 -5.073506e-01 -2.669801e+01 8.708834e-02 + 1.934000e+01 -3.950681e-01 -2.671182e+01 8.697554e-02 + 1.935000e+01 -2.630694e-01 -2.672563e+01 8.682530e-02 + 1.936000e+01 -1.137826e-01 -2.673945e+01 8.668935e-02 + 1.937000e+01 4.965341e-02 -2.675326e+01 8.661471e-02 + 1.938000e+01 2.234330e-01 -2.676707e+01 8.662727e-02 + 1.939000e+01 4.031503e-01 -2.678088e+01 8.672263e-02 + 1.940000e+01 5.838880e-01 -2.679469e+01 8.686764e-02 + 1.941000e+01 7.603286e-01 -2.680850e+01 8.701220e-02 + 1.942000e+01 9.268876e-01 -2.682232e+01 8.710673e-02 + 1.943000e+01 1.077867e+00 -2.683613e+01 8.711916e-02 + 1.944000e+01 1.207627e+00 -2.684994e+01 8.704579e-02 + 1.945000e+01 1.310772e+00 -2.686375e+01 8.691245e-02 + 1.946000e+01 1.382344e+00 -2.687756e+01 8.676570e-02 + 1.947000e+01 1.418029e+00 -2.689137e+01 8.665689e-02 + 1.948000e+01 1.414343e+00 -2.690519e+01 8.662421e-02 + 1.949000e+01 1.368829e+00 -2.691900e+01 8.667927e-02 + 1.950000e+01 1.280213e+00 -2.693281e+01 8.680296e-02 + 1.951000e+01 1.148547e+00 -2.694662e+01 8.695227e-02 + 1.952000e+01 9.753031e-01 -2.696043e+01 8.707545e-02 + 1.953000e+01 7.634311e-01 -2.697424e+01 8.712995e-02 + 1.954000e+01 5.173547e-01 -2.698806e+01 8.709697e-02 + 1.955000e+01 2.429157e-01 -2.700187e+01 8.698780e-02 + 1.956000e+01 -5.274497e-02 -2.701568e+01 8.684001e-02 + 1.957000e+01 -3.613665e-01 -2.702949e+01 8.670468e-02 + 1.958000e+01 -6.738055e-01 -2.704330e+01 8.662878e-02 + 1.959000e+01 -9.803250e-01 -2.705711e+01 8.663873e-02 + 1.960000e+01 -1.270927e+00 -2.707093e+01 8.673105e-02 + 1.961000e+01 -1.535714e+00 -2.708474e+01 8.687359e-02 + 1.962000e+01 -1.765271e+00 -2.709855e+01 8.701693e-02 + 1.963000e+01 -1.951044e+00 -2.711236e+01 8.711161e-02 + 1.964000e+01 -2.085707e+00 -2.712617e+01 8.712512e-02 + 1.965000e+01 -2.163487e+00 -2.713998e+01 8.705289e-02 + 1.966000e+01 -2.180452e+00 -2.715380e+01 8.691976e-02 + 1.967000e+01 -2.134721e+00 -2.716761e+01 8.677159e-02 + 1.968000e+01 -2.026606e+00 -2.718142e+01 8.665955e-02 + 1.969000e+01 -1.858664e+00 -2.719523e+01 8.662232e-02 + 1.970000e+01 -1.635658e+00 -2.720904e+01 8.667250e-02 + 1.971000e+01 -1.364429e+00 -2.722286e+01 8.679216e-02 + 1.972000e+01 -1.053676e+00 -2.723667e+01 8.693928e-02 + 1.973000e+01 -7.136597e-01 -2.725048e+01 8.706254e-02 + 1.974000e+01 -3.558338e-01 -2.726429e+01 8.711913e-02 + 1.975000e+01 7.572895e-03 -2.727810e+01 8.708940e-02 + 1.976000e+01 3.640104e-01 -2.729191e+01 8.698344e-02 + 1.977000e+01 7.010758e-01 -2.730573e+01 8.683771e-02 + 1.978000e+01 1.006975e+00 -2.731954e+01 8.670262e-02 + 1.979000e+01 1.270958e+00 -2.733335e+01 8.662514e-02 + 1.980000e+01 1.483711e+00 -2.734716e+01 8.663239e-02 + 1.981000e+01 1.637679e+00 -2.736097e+01 8.672204e-02 + 1.982000e+01 1.727326e+00 -2.737478e+01 8.686318e-02 + 1.983000e+01 1.749294e+00 -2.738860e+01 8.700723e-02 + 1.984000e+01 1.702483e+00 -2.740241e+01 8.710492e-02 + 1.985000e+01 1.588034e+00 -2.741622e+01 8.712322e-02 + 1.986000e+01 1.409227e+00 -2.743003e+01 8.705644e-02 + 1.987000e+01 1.171294e+00 -2.744384e+01 8.692811e-02 + 1.988000e+01 8.811625e-01 -2.745765e+01 8.678293e-02 + 1.989000e+01 5.471485e-01 -2.747147e+01 8.667148e-02 + 1.990000e+01 1.786013e-01 -2.748528e+01 8.663257e-02 + 1.991000e+01 -2.144701e-01 -2.749909e+01 8.667962e-02 + 1.992000e+01 -6.217781e-01 -2.751290e+01 8.679592e-02 + 1.993000e+01 -1.033127e+00 -2.752671e+01 8.694062e-02 + 1.994000e+01 -1.438757e+00 -2.754052e+01 8.706314e-02 + 1.995000e+01 -1.829651e+00 -2.755434e+01 8.712079e-02 + 1.996000e+01 -2.197791e+00 -2.756815e+01 8.709333e-02 + 1.997000e+01 -2.536358e+00 -2.758196e+01 8.698987e-02 + 1.998000e+01 -2.839868e+00 -2.759577e+01 8.684575e-02 + 1.999000e+01 -3.104253e+00 -2.760958e+01 8.671056e-02 + 2.000000e+01 -3.326870e+00 -2.762339e+01 8.663104e-02 diff --git a/diffpy/pdffit2/tests/testdata/Ni.stru b/docs/source/examples/Ni.stru similarity index 100% rename from diffpy/pdffit2/tests/testdata/Ni.stru rename to docs/source/examples/Ni.stru diff --git a/docs/source/examples/Ni_calculation.py b/docs/source/examples/Ni_calculation.py new file mode 100755 index 00000000..8aff35d1 --- /dev/null +++ b/docs/source/examples/Ni_calculation.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Calculate PDF of FCC nickel. + +Save data to Ni_calculation.cgr and plot it using matplotlib. +""" + +import matplotlib.pyplot as plt + +from diffpy.pdffit2 import PdfFit + +# create new PDF calculator object +P = PdfFit() + +# Load data ------------------------------------------------------------------ + +# load structure file in PDFFIT or DISCUS format +P.read_struct("Ni.stru") + +# Configure calculation ------------------------------------------------------ + +radiation_type = "X" # x-rays +qmax = 30.0 # Q-cutoff used in PDF calculation in 1/A +qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay +rmin = 0.01 # minimum r-value +rmax = 30.0 # maximum r-value +npts = 3000 # number of points in the r-grid + +# allocate and configure PDF calculation +P.alloc(radiation_type, qmax, qdamp, rmin, rmax, npts) + +# Calculate ------------------------------------------------------------------- + +P.calc() + +# Save results --------------------------------------------------------------- + +P.save_pdf(1, "Ni_calculation.cgr") + +# Plot results --------------------------------------------------------------- + +# obtain list of r-points and corresponding G values +r = P.getR() +G = P.getpdf_fit() + +plt.plot(r, G) +plt.xlabel("r (Å)") +plt.ylabel("G (Å$^{-2}$)") +plt.title("x-ray PDF of nickel simulated at Qmax = %g" % qmax) + +# display plot window, this must be the last command in the script +plt.show() diff --git a/examples/Ni_refinement.py b/docs/source/examples/Ni_refinement.py similarity index 68% rename from examples/Ni_refinement.py rename to docs/source/examples/Ni_refinement.py index 177659d2..d4d5d582 100755 --- a/examples/Ni_refinement.py +++ b/docs/source/examples/Ni_refinement.py @@ -1,9 +1,13 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +"""Perform simple refinement of Ni structure to the experimental x-ray +PDF. -'''Perform simple refinement of Ni structure to the experimental x-ray PDF. Save fitted curve, refined structure and results summary. -''' +""" + +import matplotlib.pyplot as plt +import numpy from diffpy.pdffit2 import PdfFit @@ -14,11 +18,11 @@ # Load experimental x-ray PDF data qmax = 30.0 # Q-cutoff used in PDF calculation in 1/A -qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay -pf.read_data('Ni-xray.gr', 'X', qmax, qdamp) +qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay +pf.read_data("Ni-xray.gr", "X", qmax, qdamp) # Load nickel structure, must be in PDFFIT or DISCUS format -pf.read_struct('Ni.stru') +pf.read_struct("Ni.stru") # Configure Refinement ------------------------------------------------------- @@ -31,12 +35,12 @@ pf.setpar(1, pf.lat(1)) # Refine phase scale factor. Right side can have formulas. -pf.constrain('pscale', '@20 * 2') +pf.constrain("pscale", "@20 * 2") pf.setpar(20, pf.getvar(pf.pscale) / 2.0) # Refine PDF damping due to instrument Q-resolution. # Left side can be also passed as a reference to PdfFit object -pf.constrain(pf.qdamp, '@21') +pf.constrain(pf.qdamp, "@21") pf.setpar(21, 0.03) # Refine sharpening factor for correlated motion of close atoms. @@ -45,9 +49,9 @@ # Set all temperature factors isotropic and equal to @4 for idx in range(1, 5): - pf.constrain(pf.u11(idx), '@4') - pf.constrain(pf.u22(idx), '@4') - pf.constrain(pf.u33(idx), '@4') + pf.constrain(pf.u11(idx), "@4") + pf.constrain(pf.u22(idx), "@4") + pf.constrain(pf.u33(idx), "@4") pf.setpar(4, pf.u11(1)) # Refine --------------------------------------------------------------------- @@ -63,26 +67,22 @@ # Plot results --------------------------------------------------------------- -# pylab is matplotlib interface with MATLAB-like plotting commands -import pylab - # obtain data from PdfFit calculator object r = pf.getR() Gobs = pf.getpdf_obs() Gfit = pf.getpdf_fit() -# calculate difference curve, with pylab arrays it can be done -# without for loop -Gdiff = pylab.array(Gobs) - pylab.array(Gfit) +# calculate difference curve +Gdiff = numpy.array(Gobs) - numpy.array(Gfit) Gdiff_baseline = -10 -pylab.plot(r, Gobs, 'ko') -pylab.plot(r, Gfit, 'b-') -pylab.plot(r, Gdiff + Gdiff_baseline, 'r-') +plt.plot(r, Gobs, "ko") +plt.plot(r, Gfit, "b-") +plt.plot(r, Gdiff + Gdiff_baseline, "r-") -pylab.xlabel(u'r (Å)') -pylab.ylabel(u'G (Å$^{-2}$)') -pylab.title('Fit of nickel to x-ray experimental PDF') +plt.xlabel("r (Å)") +plt.ylabel("G (Å$^{-2}$)") +plt.title("Fit of nickel to x-ray experimental PDF") # display plot window, this must be the last command in the script -pylab.show() +plt.show() diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..e4d7d320 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,109 @@ +####### +|title| +####### + +.. |title| replace:: diffpy.pdffit2 documentation + +``diffpy.pdffit2`` - PDFfit2 - real space structure refinement program. + +| Software version |release| +| Last updated |today|. + +=============== +Getting started +=============== + +Welcome to the ``diffpy.pdffit2`` documentation! + +The diffpy.pdffit2 package provides functions for the calculation and +refinement of atomic Pair Distribution Functions (PDF) from crystal +structure models. It is used as a computational engine by PDFgui. All +refinements possible in PDFgui can be done by writing python scripts +directly with diffpy.pdffit2, +although less conveniently and with a fair knowledge of Python. +However, we recommend using `diffpy-cmi +`_ for carrying +out more advanced, python-scripted refinements of nanostructure. + +The PDFfit2 package includes an extension for the interactive `IPython +`_ shell, these days commonly used within +Jupyter notebooks, which tries to mimic the old PDFFIT +program. To start IPython with this extension and also with plotting +functions enabled, use :: + + ipython --ext=diffpy.pdffit2.ipy_ext --pylab + +The IPython extension is suitable for interactive use, however +refinement scripts should be preferably written as a standard +Python code. This is more reliable and needs only a few extra +statements. + +======= +Authors +======= + +This code was derived from the first `PDFFIT +`_ program written by Thomas Proffen +and Simon Billinge, which was a FORTRAN implementation of the original +"Real-space Rietveld" code +written by Simon Billinge (Billinge, S. J. L. “Real-space Rietveld: full profile structure refinement of the atomic pair distribution +function”. In: Local Structure from Diffraction. Ed. by S. J. L. Billinge and M. F. Thorpe. New York: +Plenum, 1998, p. 137). +The sources were converted to C++ by Jacques Bloch and then extensively hacked, +extended and purged from most glaring bugs by Chris Farrow and Pavol Juhas. +This code is currently maintained as part of the DiffPy project to create +python modules for structure investigations from diffraction data. + +The DiffPy team is located in the Billinge-group at the Applied Physics +and Applied Mathematics Department of the Columbia University in New York. +Previous significant contributors to this code were made by + + Pavol Juhas, Chris Farrow, Jacques Bloch, Wenduo Zhou + +with more recent contributions from Billinge-group members. +For a more detailed list of contributors see +https://github.com/diffpy/diffpy.pdffit2/graphs/contributors. + + +========= +Reference +========= + +If you use this program for a scientific research that leads to publication, +we ask that you acknowledge use of the program by citing the following paper +in your publication: + + C. L. Farrow, P. Juhás, J. W. Liu, D. Bryndin, E. S. Božin, J. Bloch, Th. Proffen + and S. J. L. Billinge, PDFfit2 and PDFgui: computer programs for studying nanostructure + in crystals (https://stacks.iop.org/0953-8984/19/335219), *J. Phys.: Condens. Matter*, 19, 335219 (2007) + +============ +Installation +============ + +See the `README `_ +file included with the distribution. + +================ +Acknowledgements +================ + +``diffpy.pdffit2`` is built and maintained with `scikit-package `_. + +================= +Table of contents +================= +.. toctree:: + :maxdepth: 2 + + examples + Package API + release + license + +======= +Indices +======= + +* :ref:`genindex` +* :ref:`search` diff --git a/docs/source/license.rst b/docs/source/license.rst new file mode 100644 index 00000000..a60278a8 --- /dev/null +++ b/docs/source/license.rst @@ -0,0 +1,52 @@ +:tocdepth: -1 + +.. index:: license + +License +####### + +This program is part of the DiffPy and DANSE open-source projects +and is available subject to the conditions and terms laid out below. + +If you use this program to do productive scientific research that leads +to publication, we ask that you acknowledge use of the program by citing +the following paper in your publication: + +``` +C. L. Farrow, P. Juhás, J. W. Liu, D. Bryndin, E. S. Božin, J. Bloch, Th. Proffen +and S. J. L. Billinge, PDFfit2 and PDFgui: computer programs for studying nanostructure +in crystals (https://stacks.iop.org/0953-8984/19/335219), *J. Phys.: Condens. Matter*, 19, 335219 (2007) +``` + +Copyright 2006-2007, Board of Trustees of Michigan State University, +Copyright 2008-2025, Board of Trustees of Columbia University in the city of New York. +(Copyright holder indicated in each source file). + +For more information please visit the project web-page: +[http://www.diffpy.org/](http://www.diffpy.org/) +or email Prof. Simon Billinge at [sb2896@columbia.edu](mailto:sb2896@columbia.edu) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/source/release.rst b/docs/source/release.rst new file mode 100644 index 00000000..27cd0cc9 --- /dev/null +++ b/docs/source/release.rst @@ -0,0 +1,5 @@ +:tocdepth: -1 + +.. index:: release notes + +.. include:: ../../CHANGELOG.rst diff --git a/examples/Ni_calculation.py b/examples/Ni_calculation.py deleted file mode 100755 index bfe1e941..00000000 --- a/examples/Ni_calculation.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python - -'''Calculate PDF of FCC nickel. Save data to Ni_calculation.cgr. -''' - -from diffpy.pdffit2 import PdfFit - -# create new PDF calculator object -P = PdfFit() - -# load structure file in PDFFIT or DISCUS format -P.read_struct("Ni.stru") - -radiation_type = 'X' # x-rays -qmax = 30.0 # Q-cutoff used in PDF calculation in 1/A -qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay -rmin = 0.01 # minimum r-value -rmax = 30.0 # maximum r-value -npts = 3000 # number of points in the r-grid - -# allocate and configure PDF calculation -P.alloc(radiation_type, qmax, qdamp, rmin, rmax, npts) -P.calc() - -P.save_pdf(1, "Ni_calculation.cgr") diff --git a/examples/Ni_plot_pdf.py b/examples/Ni_plot_pdf.py deleted file mode 100755 index f6019d2a..00000000 --- a/examples/Ni_plot_pdf.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -'''Calculate PDF of FCC nickel and plot it using matplotlib. -''' - -from diffpy.pdffit2 import PdfFit - -# create new PDF calculator object -P = PdfFit() - -# load structure file in PDFFIT or DISCUS format -P.read_struct("Ni.stru") - -radiation_type = 'X' # x-rays -qmax = 30.0 # Q-cutoff used in PDF calculation in 1/A -qdamp = 0.01 # instrument Q-resolution factor, responsible for PDF decay -rmin = 0.01 # minimum r-value -rmax = 30.0 # maximum r-value -npts = 3000 # number of points in the r-grid - -# allocate and configure PDF calculation -P.alloc(radiation_type, qmax, qdamp, rmin, rmax, npts) -P.calc() - -# obtain list of r-points and corresponding G values -r = P.getR() -G = P.getpdf_fit() - -# pylab is matplotlib interface with MATLAB-like plotting commands -import pylab -pylab.plot(r, G) -pylab.xlabel(u'r (Å)') -pylab.ylabel(u'G (Å$^{-2}$)') -pylab.title('x-ray PDF of nickel simulated at Qmax = %g' % qmax) - -# display plot window, this must be the last command in the script -pylab.show() diff --git a/news/TEMPLATE.rst b/news/TEMPLATE.rst new file mode 100644 index 00000000..790d30b1 --- /dev/null +++ b/news/TEMPLATE.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..394308b1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,88 @@ +[build-system] +requires = ["setuptools>=62.0", "setuptools-git-versioning>=2.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "diffpy.pdffit2" +dynamic=['version', 'dependencies'] +authors = [ + {name='Simon Billinge', email='sbillinge@ucsb.edu'}, +] +maintainers = [ + {name='Simon Billinge', email='sbillinge@ucsb.edu'}, +] +description = "PDFfit2 - real space structure refinement program." +keywords = ['PDF', 'structure refinement'] +readme = "README.rst" +requires-python = ">=3.12, <3.15" +classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: BSD License', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX', + 'Operating System :: Unix', + 'Programming Language :: Python :: 3.12', + 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', + 'Topic :: Scientific/Engineering :: Physics', + 'Topic :: Scientific/Engineering :: Chemistry', +] + +[project.urls] +Homepage = "https://github.com/diffpy/diffpy.pdffit2/" +Issues = "https://github.com/diffpy/diffpy.pdffit2/issues/" + +[tool.setuptools-git-versioning] +enabled = true +template = "{tag}" +dev_template = "{tag}" +dirty_template = "{tag}" + +[tool.setuptools.packages.find] +where = ["src"] # list of folders that contain the packages (["."] by default) +include = ["*"] # package names should match these glob patterns (["*"] by default) +exclude = [] # exclude packages matching these glob patterns (empty by default) +namespaces = false # to disable scanning PEP 420 namespaces (true by default) + +[project.scripts] +diffpy-pdffit2 = "diffpy.pdffit2_app:main" + +[tool.setuptools.dynamic] +dependencies = {file = ["requirements/pip.txt"]} + +[tool.codespell] +exclude-file = ".codespell/ignore_lines.txt" +ignore-words = ".codespell/ignore_words.txt" +skip = "*.cif,*.dat,*.cc,*.h" + +[tool.docformatter] +recursive = true +wrap-summaries = 72 +wrap-descriptions = 72 + +[tool.black] +line-length = 79 +include = '\.pyi?$' +exclude = ''' +/( + \.git + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | \.rst + | \.txt + | _build + | buck-out + | build + | dist + + # The following are specific to Black, you probably don't want those. + | blib2to3 + | tests/data +)/ +''' diff --git a/requirements/build.txt b/requirements/build.txt new file mode 100644 index 00000000..23094c91 --- /dev/null +++ b/requirements/build.txt @@ -0,0 +1,3 @@ +python +setuptools +gsl diff --git a/requirements/conda.txt b/requirements/conda.txt new file mode 100644 index 00000000..0668b5ee --- /dev/null +++ b/requirements/conda.txt @@ -0,0 +1,2 @@ +diffpy.structure +gsl diff --git a/requirements/docs.txt b/requirements/docs.txt new file mode 100644 index 00000000..1de813f9 --- /dev/null +++ b/requirements/docs.txt @@ -0,0 +1,5 @@ +sphinx +sphinx_rtd_theme +sphinx-copybutton +doctr +m2r2 diff --git a/requirements/pip.txt b/requirements/pip.txt new file mode 100644 index 00000000..9cc306b0 --- /dev/null +++ b/requirements/pip.txt @@ -0,0 +1 @@ +diffpy.structure diff --git a/requirements/tests.txt b/requirements/tests.txt new file mode 100644 index 00000000..a7277865 --- /dev/null +++ b/requirements/tests.txt @@ -0,0 +1,6 @@ +flake8 +pytest +codecov +coverage +pytest-cov +pytest-env diff --git a/rever.xsh b/rever.xsh deleted file mode 100644 index 2af270b9..00000000 --- a/rever.xsh +++ /dev/null @@ -1,14 +0,0 @@ -$PROJECT = 'diffpy.pdffit2' -$ACTIVITIES = [ - 'tag', # Creates a tag for the new version number - 'push_tag', # Pushes the tag up to the $TAG_REMOTE - 'pypi', # Sends the package to pypi - 'ghrelease' # Creates a Github release entry for the new tag - ] -$PUSH_TAG_REMOTE = 'git@github.com:diffpy/diffpy.pdffit2.git' # Repo to push tags to -$GITHUB_ORG = 'diffpy' # Github org for Github releases and conda-forge -$GITHUB_REPO = 'diffpy.pdffit2' # Github repo for Github releases and conda-forge -$GHRELEASE_PREPEND = """See [CHANGELOG.md](CHANGELOG.md) for detailed release notes. - -The release is also available at [PyPI](https://pypi.org/project/diffpy.pdffit2/) and [Conda](https://anaconda.org/conda-forge/diffpy.pdffit2). -""" # release message diff --git a/setup.py b/setup.py old mode 100755 new mode 100644 index bb6bb72a..a263a64e --- a/setup.py +++ b/setup.py @@ -1,256 +1,218 @@ #!/usr/bin/env python -# Installation script for diffpy.pdffit2 - +# Extensions script for diffpy.pdffit2 """PDFfit2 - real space structure refinement engine Packages: diffpy.pdffit2 Scripts: pdffit2 """ +import glob import os import re +import shutil import sys import warnings +from pathlib import Path -from setuptools import setup, find_packages -from setuptools import Extension +from setuptools import Extension, setup +from setuptools.command.build_ext import build_ext # Use this version when git data are not available, like in git zip archive. # Update when tagging a new release. -FALLBACK_VERSION = '1.4.2' - -# determine if we run with Python 3. -PY3 = (sys.version_info[0] == 3) - -# versioncfgfile holds version data for git commit hash and date. -# It must reside in the same directory as version.py. -MYDIR = os.path.dirname(os.path.abspath(__file__)) -versioncfgfile = os.path.join(MYDIR, 'diffpy/pdffit2/version.cfg') -gitarchivecfgfile = os.path.join(MYDIR, '.gitarchive.cfg') - - -def gitinfo(): - from subprocess import Popen, PIPE, check_output - kw = dict(stdout=PIPE, cwd=MYDIR, universal_newlines=True) - proc = Popen(['git', 'describe', '--tags', '--match=[v,V,[:digit:]]*'], **kw) - desc = proc.stdout.read() - proc = Popen(['git', 'log', '-1', '--format=%H %ct %ci'], **kw) - glog = proc.stdout.read() - rv = {} - rv['commit'], rv['timestamp'], rv['date'] = glog.strip().split(None, 2) - version = '.post'.join(desc.strip().split('-')[:2]).lstrip('vV') - rv['version'] = version - return rv - +FALLBACK_VERSION = "1.5.1" -def getversioncfg(): - if PY3: - from configparser import RawConfigParser - else: - from ConfigParser import RawConfigParser - vd0 = dict(version=FALLBACK_VERSION, commit='', date='', timestamp=0) - # first fetch data from gitarchivecfgfile, ignore if it is unexpanded - g = vd0.copy() - cp0 = RawConfigParser(vd0) - cp0.read(gitarchivecfgfile) - if len(cp0.get('DEFAULT', 'commit')) > 20: - g = cp0.defaults() - mx = re.search(r'\btag: [vV]?(\d[^,]*)', g.pop('refnames')) - if mx: - g['version'] = mx.group(1) - # then try to obtain version data from git. - gitdir = os.path.join(MYDIR, '.git') - if os.path.exists(gitdir) or 'GIT_DIR' in os.environ: - try: - g = gitinfo() - except OSError: - pass - # finally, check and update the active version file - - cp = RawConfigParser() - cp.read(versioncfgfile) - d = cp.defaults() - rewrite = not d or (g['commit'] and ( - g['version'] != d.get('version') or g['commit'] != d.get('commit'))) - if rewrite: - cp.set('DEFAULT', 'version', g['version']) - cp.set('DEFAULT', 'commit', g['commit']) - cp.set('DEFAULT', 'date', g['date']) - cp.set('DEFAULT', 'timestamp', g['timestamp']) - with open(versioncfgfile, 'w') as fp: - cp.write(fp) - return cp - -versiondata = getversioncfg() +MYDIR = str(Path(__file__).parent.resolve()) # Helper functions ----------------------------------------------------------- + def get_compiler_type(): - """find compiler used for building extensions. - """ - cc_arg = [a for a in sys.argv if a.startswith('--compiler=')] + """Return the compiler type used during the build.""" + cc_arg = [a for a in sys.argv if a.startswith("--compiler=")] if cc_arg: - compiler_type = cc_arg[-1].split('=', 1)[1] - else: - from distutils.ccompiler import new_compiler - compiler_type = new_compiler().compiler_type - return compiler_type - + return cc_arg[-1].split("=", 1)[1] + from distutils.ccompiler import new_compiler -def get_gsl_config(): - '''Return dictionary with paths to GSL library. - ''' - gslcfgpaths = [os.path.join(p, 'gsl-config') - for p in ([MYDIR] + os.environ['PATH'].split(os.pathsep))] - gslcfgpaths = [p for p in gslcfgpaths if os.path.isfile(p)] - rv = {'include_dirs': [], 'library_dirs': []} - if not gslcfgpaths: - wmsg = "Cannot find gsl-config in {!r} nor in system PATH." - warnings.warn(wmsg.format(MYDIR)) - return rv - gslcfg = gslcfgpaths[0] - with open(gslcfg) as fp: - txt = fp.read() - mprefix = re.search('(?m)^prefix=(.+)', txt) - minclude = re.search(r'(?m)^[^#]*\s-I(\S+)', txt) - mlibpath = re.search(r'(?m)^[^#]*\s-L(\S+)', txt) - if not mprefix: - emsg = "Cannot find 'prefix=' line in {}." - raise RuntimeError(emsg.format(gslcfg)) - p = mprefix.group(1) - inc = minclude.group(1) if minclude else (p + '/include') - lib = mlibpath.group(1) if mlibpath else (p + '/lib') - rv['include_dirs'] += [inc] - rv['library_dirs'] += [lib] - return rv + return new_compiler().compiler_type -def get_gsl_config_win(): - '''Return dictionary with paths to GSL library, windwows version. - This version is installed with conda. - ''' - conda_prefix = os.environ['CONDA_PREFIX'] - inc = os.path.join(conda_prefix, 'Library', 'include') - lib = os.path.join(conda_prefix, 'Library', 'lib') - rv = {'include_dirs': [], 'library_dirs': []} - rv['include_dirs'] += [inc] - rv['library_dirs'] += [lib] - return rv -# ---------------------------------------------------------------------------- - -# compile and link options -define_macros = [] -os_name = os.name -if os_name == 'nt': - gcfg = get_gsl_config_win() +def get_gsl_config(): + """ + Determine the GSL include and library directories by trying in order: + 1) CONDA_PREFIX, + 2) GSL_PATH, + 3) gsl-config (for Unix-like systems). + Raises EnvironmentError if none are found. + """ + rv = {"include_dirs": [], "library_dirs": []} + + # 1. Check using CONDA_PREFIX. + conda_prefix = os.environ.get("CONDA_PREFIX", "") + if conda_prefix: + if os.name == "nt": + inc = Path(conda_prefix) / "Library" / "include" + lib = Path(conda_prefix) / "Library" / "lib" + else: + inc = Path(conda_prefix) / "include" + lib = Path(conda_prefix) / "lib" + if inc.is_dir() and lib.is_dir(): + rv["include_dirs"].append(str(inc)) + rv["library_dirs"].append(str(lib)) + return rv + else: + warnings.warn( + f"CONDA_PREFIX is set to {conda_prefix}, " + "but GSL not found at those paths. Proceeding..." + ) + + # 2. Check using GSL_PATH. + gsl_path = os.environ.get("GSL_PATH", "") + if gsl_path: + inc = Path(gsl_path) / "include" + lib = Path(gsl_path) / "lib" + if inc.is_dir() and lib.is_dir(): + rv["include_dirs"].append(str(inc)) + rv["library_dirs"].append(str(lib)) + return rv + else: + raise EnvironmentError( + f"GSL_PATH={gsl_path} is set, but {inc} or {lib} not found. " + "Please verify your GSL_PATH." + ) + + # 3. Try using the gsl-config executable (only on Unix-like systems). + if os.name != "nt": + path_dirs = os.environ.get("PATH", "").split(os.pathsep) + gslcfg_paths = [Path(p) / "gsl-config" for p in path_dirs if p] + gslcfg_paths = [p for p in gslcfg_paths if p.is_file()] + if gslcfg_paths: + gslcfg = gslcfg_paths[0] + txt = gslcfg.read_text() + prefix_match = re.search(r"(?m)^prefix=(.+)", txt) + include_match = re.search(r"(?m)^[^#]*\s-I(\S+)", txt) + lib_match = re.search(r"(?m)^[^#]*\s-L(\S+)", txt) + if prefix_match: + prefix_path = Path(prefix_match.group(1)) + inc_dir = ( + include_match.group(1) + if include_match + else (prefix_path / "include") + ) + lib_dir = ( + lib_match.group(1) if lib_match else (prefix_path / "lib") + ) + rv["include_dirs"].append(str(inc_dir)) + rv["library_dirs"].append(str(lib_dir)) + return rv + else: + raise RuntimeError(f"Cannot parse 'prefix=' from {gslcfg}.") + else: + warnings.warn( + "No gsl-config found in PATH. GSL may not be installed or not in PATH. " + "Proceeding without GSL configuration." + ) + + # 4. Nothing found: raise error. + raise EnvironmentError( + "Unable to locate GSL:\n" + "1) CONDA_PREFIX not set or no GSL there\n" + "2) GSL_PATH not set or invalid\n" + "3) gsl-config not available\n" + "Please set GSL_PATH or use a conda environment with GSL." + ) + + +class CustomBuildExt(build_ext): + def run(self): + # Retrieve the GSL library directories and append them to each extension. + gsl_cfg = get_gsl_config() + lib_dirs = gsl_cfg.get("library_dirs", []) + for ext in self.extensions: + # Add gsl lib for linking. + ext.library_dirs.extend(lib_dirs) + # Embed RPATH flags, runtime linking without LD_LIBRARY_PATH. + ext.extra_link_args = ext.extra_link_args or [] + for lib in lib_dirs: + ext.extra_link_args.append(f"-Wl,-rpath,{lib}") + super().run() + # Avoid dll error + gsl_path = ( + Path(os.environ.get("GSL_PATH")) + if os.environ.get("GSL_PATH") + else Path(os.environ.get("CONDA_PREFIX", "")) / "Library" + ) + bin_path = gsl_path / "bin" + dest_path = Path(self.build_lib) / "diffpy" / "pdffit2" + dest_path.mkdir(parents=True, exist_ok=True) + for dll_file in bin_path.glob("gsl*.dll"): + shutil.copy(str(dll_file), str(dest_path)) + + +def create_extensions(): + """Create the list of Extension objects for the build.""" + # lazy evaluation prevents build sdist failure + try: + gcfg = get_gsl_config() + except EnvironmentError: + return [] + + libraries = ["gsl"] + + include_dirs = [MYDIR] + gcfg["include_dirs"] + library_dirs = gcfg["library_dirs"] + define_macros = [] + extra_objects = [] + extra_compile_args = [] + extra_link_args = [] + + compiler_type = get_compiler_type() + if compiler_type in ("unix", "cygwin", "mingw32"): + extra_compile_args = [ + "-std=c++11", + "-Wall", + "-Wno-write-strings", + "-O3", + "-funroll-loops", + "-ffast-math", + ] + elif compiler_type == "msvc": + define_macros += [("_USE_MATH_DEFINES", None)] + extra_compile_args = ["/EHs"] + + # Extension keyword arguments. + ext_kws = { + "include_dirs": include_dirs, + "libraries": libraries, + "library_dirs": library_dirs, + "define_macros": define_macros, + "extra_compile_args": extra_compile_args, + "extra_link_args": extra_link_args, + "extra_objects": extra_objects, + } + ext = Extension( + "diffpy.pdffit2.pdffit2", + glob.glob("src/extensions/**/*.cc"), + **ext_kws, + ) + return [ext] + + +# Extensions not included in pyproject.toml + +if sys.platform.startswith("win"): + setup_args = dict( + ext_modules=[], + cmdclass={"build_ext": CustomBuildExt}, + package_data={"diffpy.pdffit2": ["libcblas.dll"]}, + ) else: - gcfg = get_gsl_config() -include_dirs = [MYDIR] + gcfg['include_dirs'] -library_dirs = [] -libraries = [] -extra_objects = [] -extra_compile_args = [] -extra_link_args = [] - -compiler_type = get_compiler_type() -if compiler_type in ("unix", "cygwin", "mingw32"): - extra_compile_args = ['-std=c++11', '-Wall', '-Wno-write-strings', - '-O3', '-funroll-loops', '-ffast-math'] - extra_objects += ((p + '/libgsl.a') for p in gcfg['library_dirs']) -elif compiler_type == "msvc": - define_macros += [('_USE_MATH_DEFINES', None)] - extra_compile_args = ['/EHs'] - libraries += ['gsl'] - library_dirs += gcfg['library_dirs'] -# add optimization flags for other compilers if needed - + setup_args = dict( + ext_modules=[], + cmdclass={"build_ext": CustomBuildExt}, + ) -# define extension here -pdffit2module = Extension('diffpy.pdffit2.pdffit2', [ - 'pdffit2module/bindings.cc', - 'pdffit2module/misc.cc', - 'pdffit2module/pdffit2module.cc', - 'pdffit2module/pyexceptions.cc', - 'libpdffit2/Atom.cc', - 'libpdffit2/LocalPeriodicTable.cc', - 'libpdffit2/OutputStreams.cc', - 'libpdffit2/PeriodicTable.cc', - 'libpdffit2/PointsInSphere.cc', - 'libpdffit2/StringUtils.cc', - 'libpdffit2/fit.cc', - 'libpdffit2/gaussj.cc', - 'libpdffit2/metric.cc', - 'libpdffit2/nrutil.cc', - 'libpdffit2/output.cc', - 'libpdffit2/parser.cc', - 'libpdffit2/pdf.cc', - 'libpdffit2/pdffit.cc', - 'libpdffit2/pdflsmin.cc', - 'libpdffit2/scatlen.cc', - 'libpdffit2/stru.cc', - ], - include_dirs = include_dirs, - libraries = libraries, - library_dirs = library_dirs, - define_macros = define_macros, - extra_compile_args = extra_compile_args, - extra_link_args = extra_link_args, - extra_objects = extra_objects, -) - -with open(os.path.join(MYDIR, 'README.rst')) as fp: - long_description = fp.read() - -# define distribution -setup_args = dict( - name = 'diffpy.pdffit2', - version = versiondata.get('DEFAULT', 'version'), - packages = find_packages(), - test_suite = 'diffpy.pdffit2.tests', - ext_modules = [pdffit2module], - include_package_data = True, - install_requires = [ - 'six', - 'diffpy.structure>=3', - ], - zip_safe = False, - - author = 'Simon J.L. Billinge', - author_email = 'sb2896@columbia.edu', - maintainer = 'Pavol Juhas', - maintainer_email = 'pavol.juhas@gmail.com', - url = 'https://github.com/diffpy/diffpy.pdffit2', - description = 'PDFfit2 - real space structure refinement program.', - long_description = long_description, - long_description_content_type = 'text/x-rst', - license = 'BSD', - keywords = 'PDF structure refinement', - classifiers = [ - # List of possible values at - # http://pypi.python.org/pypi?:action=list_classifiers - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: BSD License', - 'Operating System :: MacOS', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: POSIX', - 'Programming Language :: C++', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Programming Language :: Python :: 3.12', - 'Topic :: Scientific/Engineering :: Chemistry', - 'Topic :: Scientific/Engineering :: Physics', - ], -) - -if __name__ == '__main__': +if __name__ == "__main__": + setup_args["ext_modules"] = create_extensions() setup(**setup_args) - -# End of file diff --git a/src/diffpy/__init__.py b/src/diffpy/__init__.py new file mode 100644 index 00000000..0f59515b --- /dev/null +++ b/src/diffpy/__init__.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2008 trustees of the Michigan State University. +# All rights reserved. +# (c) 2025-2026 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## diff --git a/src/diffpy/pdffit2/__init__.py b/src/diffpy/pdffit2/__init__.py new file mode 100644 index 00000000..07339c9e --- /dev/null +++ b/src/diffpy/pdffit2/__init__.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2006 trustees of the Michigan State University. +# All rights reserved. +# (c) 2025-2026 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors +# +# See LICENSE.rst for license information. +# +############################################################################## +"""PDFfit2 - real space structure refinement program.""" + +# WARNING: Do NOT remove the isort: off/on comments in this file. +# These tags are used to prevent isort from reordering imports in this file. +# __version__ must be initialized before importing C++ extensions. + +# isort: off +# Import the package version before C++ extensions are loaded. +from diffpy.pdffit2.output import redirect_stdout +from diffpy.pdffit2.version import __date__, __version__ + +# Import C++ related modules since the __version__ attribute is used. +from diffpy.pdffit2.pdffit import PdfFit +from diffpy.pdffit2.pdffit2 import is_element + +# isort: on + +# Ensure all necessary components are imported and initialized +assert __version__ or True +assert __date__ or True +assert all((PdfFit, redirect_stdout, is_element)) + +# End of file diff --git a/diffpy/pdffit2/ipy_ext.py b/src/diffpy/pdffit2/ipy_ext.py similarity index 84% rename from diffpy/pdffit2/ipy_ext.py rename to src/diffpy/pdffit2/ipy_ext.py index 13b41214..c21f00d9 100644 --- a/diffpy/pdffit2/ipy_ext.py +++ b/src/diffpy/pdffit2/ipy_ext.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -"""This module defines functions within IPython session to simulate -the old pdffit2 interactive session. +"""This module defines functions within IPython session to simulate the +old pdffit2 interactive session. Usage: %load_ext diffpy.pdffit2.ipy_ext """ @@ -9,9 +9,10 @@ def load_ipython_extension(ipython): from diffpy.pdffit2 import PdfFit + pf = PdfFit() pdf = EasyPDFPlotting(pf) - print(' Type help(pdffit) or help(topic) for information.\n') + print(" Type help(pdffit) or help(topic) for information.\n") ns = dict(pdffit=PdfFit, pdf=pdf) pf._exportAll(ns) ipython.user_ns.update(ns) @@ -19,8 +20,7 @@ def load_ipython_extension(ipython): class EasyPDFPlotting(object): - """Convenience functions for accessing and plotting PDFfit2 data. - """ + """Convenience functions for accessing and plotting PDFfit2 data.""" def __init__(self, pdffit_instance): self._pdffit = pdffit_instance @@ -53,8 +53,10 @@ def showfit(self, offset=None): No return value. """ - from matplotlib.pyplot import gca from math import floor + + from matplotlib.pyplot import gca + cr = self.r cGobs = self.Gobs cGcalc = self.Gcalc @@ -62,29 +64,32 @@ def showfit(self, offset=None): if offset is None: offset = floor(min([min(cGobs), min(cGcalc)]) - max(cGdiff)) ax = gca() - ax.plot(cr, cGobs, 'r.', cr, cGcalc, 'b-', cr, cGdiff + offset, 'g-') + ax.plot(cr, cGobs, "r.", cr, cGcalc, "b-", cr, cGdiff + offset, "g-") xl = ax.xaxis.get_label().get_text() yl = ax.yaxis.get_label().get_text() if xl == "": - ax.set_xlabel('r (A)') + ax.set_xlabel("r (A)") if yl == "": - ax.set_ylabel('G (A**-2)') + ax.set_ylabel("G (A**-2)") return def showRw(self): "Plot cumulative Rw." from matplotlib.pyplot import gca + cRw = self._asarray(self._pdffit.getcrw()) ax = gca() ax.plot(self.r, cRw) - ax.set_title('Cumulative Rw = %.4f' % cRw[-1]) - ax.set_xlabel('r') - ax.set_ylabel('Rw') + ax.set_title("Cumulative Rw = %.4f" % cRw[-1]) + ax.set_xlabel("r") + ax.set_ylabel("Rw") return @staticmethod def _asarray(x, dtype=None): import numpy + return numpy.asarray(x, dtype=dtype) + # End of class EasyPDFPlotting diff --git a/src/diffpy/pdffit2/libcblas.dll b/src/diffpy/pdffit2/libcblas.dll new file mode 100644 index 00000000..66a20b90 Binary files /dev/null and b/src/diffpy/pdffit2/libcblas.dll differ diff --git a/diffpy/pdffit2/output.py b/src/diffpy/pdffit2/output.py similarity index 99% rename from diffpy/pdffit2/output.py rename to src/diffpy/pdffit2/output.py index 71bcfe76..f24c28e9 100644 --- a/diffpy/pdffit2/output.py +++ b/src/diffpy/pdffit2/output.py @@ -12,8 +12,8 @@ # See LICENSE.txt for license information. # ############################################################################## - """Take care of sending engine output to given file-like object. + The output file is stored in local module variable stdout. """ @@ -21,18 +21,22 @@ # create module variable stdout from sys import stdout as stdout + # silence pyflakes checker assert stdout def redirect_stdout(dst): """Redirect PDFfit2 standard output to a file-like object dst. + The dst value is stored in module variable stdout. """ from diffpy.pdffit2.pdffit2 import redirect_stdout + redirect_stdout(dst) global stdout stdout = dst return + # End of file diff --git a/diffpy/pdffit2/pdffit.py b/src/diffpy/pdffit2/pdffit.py similarity index 76% rename from diffpy/pdffit2/pdffit.py rename to src/diffpy/pdffit2/pdffit.py index a3bc2d17..38ddde5d 100644 --- a/diffpy/pdffit2/pdffit.py +++ b/src/diffpy/pdffit2/pdffit.py @@ -12,25 +12,22 @@ # See LICENSE.txt for license information. # ############################################################################## - -"""PdfFit class for fitting pdf data to a model.""" +"""PdfFit class for fitting a structural model to PDF data.""" from __future__ import print_function import itertools import numbers -import six - # Load pdffit2 and output modules to the current namespace. # Note that "import diffpy.pdffit2.output as output" would # crash with AttributeError when executed during imports of # parent packages. -from diffpy.pdffit2 import pdffit2 -from diffpy.pdffit2 import output +from diffpy.pdffit2 import output, pdffit2 # helper routines + def _format_value_std(value, stdev): """Convert value to a string with standard deviation in brackets. @@ -39,9 +36,9 @@ def _format_value_std(value, stdev): Return string. """ - if stdev > abs(value)*1e-8: + if stdev > abs(value) * 1e-8: s = "%g (%g)" % (value, stdev) - elif str(stdev) == 'nan': + elif str(stdev) == "nan": s = "%g (NaN)" % value else: s = "%g" % value @@ -49,7 +46,8 @@ def _format_value_std(value, stdev): def _format_bond_length(dij, ddij, ij1, symij): - """Return string with formatted bond length info for a pair of atoms. + """Return string with formatted bond length info for a pair of + atoms. dij -- distance between atoms i and j ddij -- standard deviation of dij. Ignored when small relative to dij. @@ -63,7 +61,7 @@ def _format_bond_length(dij, ddij, ij1, symij): s0 = "%s (#%i)" % (symij[0], ij1[0]) s1 = "%s (#%i)" % (symij[1], ij1[1]) leader0 = " " + s0.ljust(w_smbidx) + " - " + s1 + " " - leader1 = leader0.ljust(w_equals) + '= ' + leader1 = leader0.ljust(w_equals) + "= " s = leader1 + _format_value_std(dij, ddij) + " A" return s @@ -107,49 +105,65 @@ def _convertCallable(var): class PdfFit(object): - """Create PdfFit object.""" + """Class for handling PdfFit calculations and refinements. + + Attributes + ---------- + stru_files : list + The list to store structure files. + data_files : list + The list to store data files. + """ # constants and enumerators from pdffit.h: # selection of all atoms - selalias = { 'ALL' : -1 } + selalias = {"ALL": -1} # constraint type identifiers - FCON = { 'USER' : 0, 'IDENT' : 1, 'FCOMP' : 2, 'FSQR' : 3 } + FCON = {"USER": 0, "IDENT": 1, "FCOMP": 2, "FSQR": 3} # scattering type identifiers - Sctp = { 'X' : 0, 'N' : 1 } + Sctp = {"X": 0, "N": 1} def _exportAll(self, namespace): - """ _exportAll(self, namespace) --> Export all 'public' class methods - into namespace. + """_exportAll(self, namespace) --> Export all 'public' class + methods into namespace. - This function allows for a module-level PdfFit object which doesn't have - to be referenced when calling a method. This function makes old (python) - scripts compatible with this class. At the top of the script, create a - pdffit object, and then call this method. Usually, namespace = locals(). + This function allows for a module-level PdfFit object which + doesn't have to be referenced when calling a method. This + function makes old (python) scripts compatible with this class. + At the top of the script, create a pdffit object, and then call + this method. Usually, namespace = locals(). """ # string aliases (var = "var") for a in itertools.chain(self.selalias, self.FCON, self.Sctp): exec("%s = %r" % (a, a), namespace) - public = [ a for a in dir(self) if "__" not in a and a not in - ["_handle", "_exportAll", "selalias", "FCON", "Sctp" ] ] + public = [ + a + for a in dir(self) + if "__" not in a + and a not in ["_handle", "_exportAll", "selalias", "FCON", "Sctp"] + ] for funcname in public: namespace[funcname] = getattr(self, funcname) return def intro(): - """Show introductory message. - """ + """Show introductory message.""" import re - from diffpy.pdffit2 import __version__, __date__ + + from diffpy.pdffit2 import __date__, __version__ + date = __date__[:10] - d = {'version' : __version__, 'date' : date, - 'year' : date[:4] or '2019'} + d = {"version": __version__, "date": date, "year": date[:4] or "2019"} msg = __intro_message__ % d - filler = lambda mx : (mx.group(0).rstrip(' *').ljust(77) + '*') - msg_ljust = re.sub('(?m)^(.{1,77}|.{79}.*)$', filler, msg) + + def filler(mx): + return mx.group(0).rstrip(" *").ljust(77) + "*" + + msg_ljust = re.sub("(?m)^(.{1,77}|.{79}.*)$", filler, msg) print(msg_ljust, file=output.stdout) return - intro = staticmethod(intro) + intro = staticmethod(intro) def add_structure(self, stru): """add_structure(stru) --> Add new structure to PdfFit instance. @@ -160,11 +174,10 @@ def add_structure(self, stru): Raises pdffit2.structureError when stru contains unknown atom species. """ - s = stru.writeStr('pdffit') + s = stru.writeStr("pdffit") self.read_struct_string(s) return - def read_struct(self, struct): """read_struct(struct) --> Read structure from file into memory. @@ -180,7 +193,6 @@ def read_struct(self, struct): self.stru_files.append(struct) return - def read_struct_string(self, struct, name=""): """read_struct_string(struct, name = "") --> Read structure from a string into memory. @@ -197,51 +209,47 @@ def read_struct_string(self, struct, name=""): self.stru_files.append(name) return - def read_data(self, data, stype, qmax, qdamp): - """read_data(data, stype, qmax, qdamp) --> Read pdf data from file into - memory. + """read_data(data, stype, qmax, qdamp) --> Read pdf data from + file into memory. data -- name of file from which to read data stype -- 'X' (xray) or 'N' (neutron) - qmax -- Q-value cutoff used in PDF calculation. - Use qmax=0 to neglect termination ripples. + qmax -- Q-value cutoff used in PDF calculation. Use qmax=0 to neglect termination ripples. qdamp -- instrumental Q-resolution factor Raises: IOError when the file cannot be read from disk """ - pdffit2.read_data(self._handle, data, six.b(stype), qmax, qdamp) + pdffit2.read_data(self._handle, data, stype.encode(), qmax, qdamp) self.data_files.append(data) return - def read_data_string(self, data, stype, qmax, qdamp, name=""): - """read_data_string(data, stype, qmax, qdamp, name = "") --> Read - pdf data from a string into memory. + """read_data_string(data, stype, qmax, qdamp, name = "") --> + Read pdf data from a string into memory. data -- string containing the contents of the data file stype -- 'X' (xray) or 'N' (neutron) - qmax -- Q-value cutoff used in PDF calculation. - Use qmax=0 to neglect termination ripples. + qmax -- Q-value cutoff used in PDF calculation. Use qmax=0 to neglect termination ripples. qdamp -- instrumental Q-resolution factor name -- tag with which to label data """ - pdffit2.read_data_string(self._handle, data, six.b(stype), qmax, - qdamp, name) + pdffit2.read_data_string( + self._handle, data, stype.encode(), qmax, qdamp, name + ) name = data self.data_files.append(name) return - - def read_data_lists(self, stype, qmax, qdamp, r_data, Gr_data, - dGr_data = None, name = "list"): - """read_data_lists(stype, qmax, qdamp, r_data, Gr_data, dGr_data = - None, name = "list") --> Read pdf data into memory from lists. + def read_data_lists( + self, stype, qmax, qdamp, r_data, Gr_data, dGr_data=None, name="list" + ): + """read_data_lists(stype, qmax, qdamp, r_data, Gr_data, dGr_data + = None, name = "list") --> Read pdf data into memory from lists. All lists must be of the same length. stype -- 'X' (xray) or 'N' (neutron) - qmax -- Q-value cutoff used in PDF calculation. - Use qmax=0 to neglect termination ripples. + qmax -- Q-value cutoff used in PDF calculation. Use qmax=0 to neglect termination ripples. qdamp -- instrumental Q-resolution factor r_data -- list of r-values Gr_data -- list of G(r) values @@ -250,14 +258,21 @@ def read_data_lists(self, stype, qmax, qdamp, r_data, Gr_data, Raises: ValueError when the data lists are of different length """ - pdffit2.read_data_arrays(self._handle, six.b(stype), qmax, qdamp, - r_data, Gr_data, dGr_data, name) + pdffit2.read_data_arrays( + self._handle, + stype.encode(), + qmax, + qdamp, + r_data, + Gr_data, + dGr_data, + name, + ) self.data_files.append(name) return - def pdfrange(self, iset, rmin, rmax): - """pdfrange(iset, rmin, rmax) --> Set the range of the fit. + """Pdfrange(iset, rmin, rmax) --> Set the range of the fit. iset -- data set to consider rmin -- minimum r-value of fit @@ -268,24 +283,23 @@ def pdfrange(self, iset, rmin, rmax): pdffit2.pdfrange(self._handle, iset, rmin, rmax) return - def reset(self): - """reset() --> Clear all stored fit, structure, and parameter data.""" + """Reset() --> Clear all stored fit, structure, and parameter + data.""" self.stru_files = [] self.data_files = [] - pdffit2.reset(self._handle); + pdffit2.reset(self._handle) return - def alloc(self, stype, qmax, qdamp, rmin, rmax, bin): - """alloc(stype, qmax, qdamp, rmin, rmax, bin) --> Allocate space + """Alloc(stype, qmax, qdamp, rmin, rmax, bin) --> Allocate space for a PDF calculation. The structure from which to calculate the PDF must first be imported with the read_struct() or read_struct_string() method. + stype -- 'X' (xray) or 'N' (neutron) - qmax -- Q-value cutoff used in PDF calculation. - Use qmax=0 to neglect termination ripples. + qmax -- Q-value cutoff used in PDF calculation. Use qmax=0 to neglect termination ripples. qdamp -- instrumental Q-resolution factor rmin -- minimum r-value of calculation rmax -- maximum r-value of calculation @@ -295,29 +309,29 @@ def alloc(self, stype, qmax, qdamp, rmin, rmax, bin): ValueError for bad input values pdffit.unassignedError when no structure has been loaded """ - pdffit2.alloc(self._handle, six.b(stype), qmax, qdamp, rmin, - rmax, bin) + pdffit2.alloc( + self._handle, stype.encode(), qmax, qdamp, rmin, rmax, bin + ) return - def calc(self): - """calc() --> Calculate the PDF of the imported structure. + """Calc() --> Calculate the PDF of the imported structure. Space for the calculation must first be allocated with the alloc() method. Raises: pdffit2.calculationError when allocated space cannot - accomodate calculation + accommodate calculation pdffit.unassignedError when space for calculation has not been allocated """ pdffit2.calc(self._handle) return - def refine(self, toler=0.00000001): - """refine(toler = 0.00000001) --> Fit the theory to the imported data. + """Refine(toler = 0.00000001) --> Fit the theory to the imported + data. toler -- tolerance of the fit @@ -335,9 +349,9 @@ def refine(self, toler=0.00000001): step += 1 return - def refine_step(self, toler=0.00000001): - """refine_step(toler = 0.00000001) --> Run a single step of the fit. + """refine_step(toler = 0.00000001) --> Run a single step of the + fit. toler -- tolerance of the fit @@ -353,9 +367,9 @@ def refine_step(self, toler=0.00000001): self.finished = pdffit2.refine_step(self._handle, toler) return self.finished - def save_pdf(self, iset, fname): - """save_pdf(iset, fname) --> Save calculated or fitted PDF to file. + """save_pdf(iset, fname) --> Save calculated or fitted PDF to + file. iset -- data set to save @@ -366,9 +380,9 @@ def save_pdf(self, iset, fname): pdffit2.save_pdf(self._handle, iset, fname) return - def save_pdf_string(self, iset): - """save_pdf_string(iset) --> Save calculated or fitted PDF to string. + """save_pdf_string(iset) --> Save calculated or fitted PDF to + string. iset -- data set to save @@ -380,10 +394,9 @@ def save_pdf_string(self, iset): pdffilestring = pdffit2.save_pdf(self._handle, iset, "") return pdffilestring - def save_dif(self, iset, fname): - """save_dif(iset, fname) --> Save data and fitted PDF difference to - file. + """save_dif(iset, fname) --> Save data and fitted PDF difference + to file. iset -- data set to save @@ -394,10 +407,9 @@ def save_dif(self, iset, fname): pdffit2.save_dif(self._handle, iset, fname) return - def save_dif_string(self, iset): - """save_dif_string(iset) --> Save data and fitted PDF difference to - string. + """save_dif_string(iset) --> Save data and fitted PDF difference + to string. iset -- data set to save @@ -409,7 +421,6 @@ def save_dif_string(self, iset): diffilestring = pdffit2.save_dif(self._handle, iset, "") return diffilestring - def save_res(self, fname): """save_res(fname) --> Save fit-specific data to file. @@ -420,7 +431,6 @@ def save_res(self, fname): pdffit2.save_res(self._handle, fname) return - def save_res_string(self): """save_res_string() --> Save fit-specific data to a string. @@ -432,7 +442,6 @@ def save_res_string(self): resfilestring = pdffit2.save_res(self._handle, "") return resfilestring - def get_structure(self, ip): """get_structure(ip) --> Get a copy of specified phase data. @@ -442,12 +451,12 @@ def get_structure(self, ip): Raise pdffit2.unassignedError if phase ip is undefined. """ from diffpy.structure import PDFFitStructure + s = self.save_struct_string(ip) stru = PDFFitStructure() - stru.readStr(s, 'pdffit') + stru.readStr(s, "pdffit") return stru - def save_struct(self, ip, fname): """save_struct(ip, fname) --> Save structure resulting from fit to file. @@ -461,9 +470,9 @@ def save_struct(self, ip, fname): pdffit2.save_struct(self._handle, ip, fname) return - def save_struct_string(self, ip): - """save_struct(ip) --> Save structure resulting from fit to string. + """save_struct(ip) --> Save structure resulting from fit to + string. ip -- phase to save @@ -475,7 +484,6 @@ def save_struct_string(self, ip): structfilestring = pdffit2.save_struct(self._handle, ip, "") return structfilestring - def show_struct(self, ip): """show_struct(ip) --> Print structure resulting from fit. @@ -486,43 +494,47 @@ def show_struct(self, ip): pdffit2.show_struct(self._handle, ip) return - def constrain(self, var, par, fcon=None): - """constrain(var, par[, fcon]) --> Constrain a variable to a parameter. + """Constrain(var, par[, fcon]) --> Constrain a variable to a + parameter. A variable can be constrained to a number or equation string. - var -- variable to constrain, such as x(1) - par -- parameter which to constrain the variable. This can be - an integer or an equation string containing a reference - to another parameter. Equation strings use standard c++ - syntax. The value of a constrained parameter is accessed - as @p in an equation string, where p is the parameter. - e.g. - >>> constrain(x(1), 1) - >>> constrain(x(2), "0.5+@1") - fcon -- 'USER', 'IDENT', 'FCOMP', or 'FSQR' - this is an optional parameter, and I don't know how it is - used! - Raises: - pdffit2.constraintError if a constraint is bad - pdffit2.unassignedError if variable does not yet exist - ValueError if variable index does not exist (e.g. lat(7)) + :param var: variable to constrain, such as x(1) + :param par: parameter which to constrain the variable. This can be an + integer or an equation string containing a reference to + another parameter. Equation strings use standard C++ + syntax. The value of a constrained parameter is accessed + as ``@p`` in an equation string, where ``p`` is the + parameter. + :type par: int or str + :param fcon: 'USER', 'IDENT', 'FCOMP', or 'FSQR'. This is an optional + parameter; usage is currently unclear. + :type fcon: str + + Example:: + + >>> constrain(x(1), 1) + >>> constrain(x(2), "0.5+@1") + + :raises pdffit2.constraintError: if a constraint is bad + :raises pdffit2.unassignedError: if variable does not yet exist + :raises ValueError: if variable index does not exist (e.g. lat(7)) """ + var_ref = self.__getRef(var) varnc = _convertCallable(var) if fcon: fc = self.FCON[fcon] pdffit2.constrain_int(self._handle, var_ref, varnc, par, fc) - elif isinstance(par, six.string_types): + elif isinstance(par, str): pdffit2.constrain_str(self._handle, var_ref, varnc, par) else: pdffit2.constrain_int(self._handle, var_ref, varnc, par) return - def setpar(self, par, val): - """setpar(par, val) --> Set value of constrained parameter. + """Setpar(par, val) --> Set value of constrained parameter. val -- Either a numerical value or a reference to a variable @@ -540,9 +552,8 @@ def setpar(self, par, val): pdffit2.setpar_RV(self._handle, par, var_ref) return - def setvar(self, var, val): - """setvar(var, val) --> Set the value of a variable. + """Setvar(var, val) --> Set the value of a variable. Raises: pdffit2.unassignedError if variable does not yet exist @@ -552,9 +563,8 @@ def setvar(self, var, val): pdffit2.setvar(self._handle, var_ref, val) return - def getvar(self, var): - """getvar(var) --> Get stored value of a variable. + """Getvar(var) --> Get stored value of a variable. Raises: pdffit2.unassignedError if variable does not yet exist @@ -564,20 +574,19 @@ def getvar(self, var): retval = pdffit2.getvar(self._handle, var_ref) return retval - def getrw(self): - """getrw() --> Get normalized total error of the fit rw. + """Getrw() --> Get normalized total error of the fit rw. - getrw calculates total fit error summed for all datasets in the fit. + getrw calculates total fit error summed for all datasets in the + fit. Return float. """ rw = pdffit2.getrw(self._handle) return rw - def getcrw(self): - """getcrw() --> Get cumulative Rw for the current dataset. + """Getcrw() --> Get cumulative Rw for the current dataset. Cumulative Rw is a list of Rw partial sums cost values evaluated against observed PDF data in the error sums evaluated against @@ -591,13 +600,12 @@ def getcrw(self): crw = pdffit2.getcrw(self._handle) return crw - def getR(self): - """getR() --> Get r-points used in the fit. + """GetR() --> Get r-points used in the fit. This function should only be called after data has been loaded or calculated. Before a refinement, the list of r-points will reflect the - data. Afterwords, they will reflect the fit range. + data. Afterwards, they will reflect the fit range. Raises: pdffit2.unassignedError if no data exists @@ -606,7 +614,6 @@ def getR(self): R = pdffit2.getR(self._handle) return R - def getpdf_fit(self): """getpdf_fit() --> Get fitted PDF. @@ -620,13 +627,12 @@ def getpdf_fit(self): pdfdata = pdffit2.getpdf_fit(self._handle) return pdfdata - def getpdf_obs(self): """getpdf_obs() --> Get observed PDF. This function should only be called after data has been loaded or calculated. Before a refinement, the list of r-points will reflect the - data. Afterwords, they will reflect the fit range. + data. Afterwards, they will reflect the fit range. Raises: pdffit2.unassignedError if no data exists @@ -635,13 +641,12 @@ def getpdf_obs(self): pdfdata = pdffit2.getpdf_obs(self._handle) return pdfdata - def getpdf_diff(self): """Obtain difference between observed and fitted PDF. This function should only be called after data has been loaded or calculated. Before a refinement, the list of r-points will reflect the - data. Afterwords, they will reflect the fit range. + data. Afterwards, they will reflect the fit range. Raises: pdffit2.unassignedError if no data exists @@ -650,9 +655,9 @@ def getpdf_diff(self): Gdiff = pdffit2.getpdf_diff(self._handle) return Gdiff - def get_atoms(self, ip=None): - """get_atoms() --> Get element symbols of all atoms in the structure. + """get_atoms() --> Get element symbols of all atoms in the + structure. ip -- index of phase to get the elements from (starting from 1) when ip is not given, use current phase @@ -663,13 +668,15 @@ def get_atoms(self, ip=None): Returns: List of atom names in structure. """ - if ip is None: rv = pdffit2.get_atoms(self._handle) - else: rv = pdffit2.get_atoms(self._handle, ip) + if ip is None: + rv = pdffit2.get_atoms(self._handle) + else: + rv = pdffit2.get_atoms(self._handle, ip) return rv - def get_atom_types(self, ip=None): - """get_atom_types() --> Ordered unique element symbols in the structure. + """get_atom_types() --> Ordered unique element symbols in the + structure. ip -- index of phase to get the elements from (starting from 1) when ip is not given, use current phase @@ -681,49 +688,47 @@ def get_atom_types(self, ip=None): Returns: List of unique atom symbols as they occur in structure. """ - if ip is None: rv = pdffit2.get_atom_types(self._handle) - else: rv = pdffit2.get_atom_types(self._handle, ip) + if ip is None: + rv = pdffit2.get_atom_types(self._handle) + else: + rv = pdffit2.get_atom_types(self._handle, ip) return rv - def getpar(self, par): - """getpar(par) --> Get value of parameter. + """Getpar(par) --> Get value of parameter. Raises: ValueError if parameter does not exists """ return pdffit2.getpar(self._handle, par) - def fixpar(self, par): - """fixpar(par) --> Fix a parameter. + """Fixpar(par) --> Fix a parameter. Fixed parameters are not fitted in a refinement. Passed parameter can be 'ALL', in which case all parameters are fixed. Raises: pdffit.unassignedError when parameter has not been assigned """ - if isinstance(par, six.string_types) and par.upper() in self.selalias: + if isinstance(par, str) and par.upper() in self.selalias: par = self.selalias[par.upper()] pdffit2.fixpar(self._handle, par) return - def freepar(self, par): - """freepar(par) --> Free a parameter. + """Freepar(par) --> Free a parameter. Freed parameters are fitted in a refinement. Passed parameter can be 'ALL', in which case all parameters are freed. Raises: pdffit.unassignedError when parameter has not been assigned """ - if isinstance(par, six.string_types) and par.upper() in self.selalias: + if isinstance(par, str) and par.upper() in self.selalias: par = self.selalias[par.upper()] pdffit2.freepar(self._handle, par) return - def setphase(self, ip): - """setphase(ip) --> Switch to phase ip. + """Setphase(ip) --> Switch to phase ip. ip -- index of the phase starting at 1. @@ -735,9 +740,8 @@ def setphase(self, ip): pdffit2.setphase(self._handle, ip) return - def setdata(self, iset): - """setdata(iset) --> Set the data set in focus. + """Setdata(iset) --> Set the data set in focus. iset -- integer index of data set starting at 1. @@ -746,33 +750,31 @@ def setdata(self, iset): pdffit2.setdata(self._handle, iset) return - def psel(self, ip): - """psel(ip) --> Include phase ip in calculation of total PDF + """Psel(ip) --> Include phase ip in calculation of total PDF. psel('ALL') selects all phases for PDF calculation. Raises: pdffit2.unassignedError if selected phase does not exist """ - if isinstance(ip, six.string_types) and ip.upper() in self.selalias: + if isinstance(ip, str) and ip.upper() in self.selalias: ip = self.selalias[ip.upper()] pdffit2.psel(self._handle, ip) return - def pdesel(self, ip): - """pdesel(ip) --> Exclude phase ip from calculation of total PDF. + """Pdesel(ip) --> Exclude phase ip from calculation of total + PDF. pdesel('ALL') excludes all phases from PDF calculation. Raises: pdffit2.unassignedError if selected phase does not exist """ - if isinstance(ip, six.string_types) and ip.upper() in self.selalias: + if isinstance(ip, str) and ip.upper() in self.selalias: ip = self.selalias[ip.upper()] pdffit2.pdesel(self._handle, ip) return - def selectAtomType(self, ip, ijchar, symbol, flag): """Configure partial PDF - mark the specified atom type in phase ip as included or excluded as a first or second in pair for distance @@ -787,10 +789,9 @@ def selectAtomType(self, ip, ijchar, symbol, flag): pdffit2.unassignedError if selected phase does not exist ValueError for invalid value of ijchar """ - pdffit2.selectAtomType(self._handle, ip, six.b(ijchar), symbol, flag) + pdffit2.selectAtomType(self._handle, ip, ijchar.encode(), symbol, flag) return - def selectAtomIndex(self, ip, ijchar, aidx, flag): """Configure partial PDF - mark the atom of given index in phase ip as included or excluded as a first or second in pair for distance @@ -805,10 +806,9 @@ def selectAtomIndex(self, ip, ijchar, aidx, flag): pdffit2.unassignedError if selected phase does not exist ValueError if atom index or ijchar are invalid """ - pdffit2.selectAtomIndex(self._handle, ip, six.b(ijchar), aidx, flag) + pdffit2.selectAtomIndex(self._handle, ip, ijchar.encode(), aidx, flag) return - def selectAll(self, ip, ijchar): """Configure partial PDF - include all atoms of phase ip as first or second element in pair for distance evaluation. @@ -820,10 +820,9 @@ def selectAll(self, ip, ijchar): pdffit2.unassignedError if selected phase does not exist ValueError if ijchar is invalid """ - pdffit2.selectAll(self._handle, ip, six.b(ijchar)) + pdffit2.selectAll(self._handle, ip, ijchar.encode()) return - def selectNone(self, ip, ijchar): """Configure partial PDF - exclude all atoms of phase ip from first or second element of pair distance evaluation. @@ -835,12 +834,11 @@ def selectNone(self, ip, ijchar): pdffit2.unassignedError if selected phase does not exist ValueError if ijchar is invalid """ - pdffit2.selectNone(self._handle, ip, six.b(ijchar)) + pdffit2.selectNone(self._handle, ip, ijchar.encode()) return - def bang(self, i, j, k): - """bang(i, j, k) --> Show bond angle defined by atoms i, j, k. + """Bang(i, j, k) --> Show bond angle defined by atoms i, j, k. No return value. Use bond_angle() to get the result. @@ -850,14 +848,18 @@ def bang(self, i, j, k): angle, stdev = pdffit2.bond_angle(self._handle, i, j, k) # indices should be already checked here by bond_angle atom_symbols = self.get_atoms() - leader = " %s (#%i) - %s (#%i) - %s (#%i) = " % \ - (atom_symbols[i-1], i, atom_symbols[j-1], j, - atom_symbols[k-1], k) + leader = " %s (#%i) - %s (#%i) - %s (#%i) = " % ( + atom_symbols[i - 1], + i, + atom_symbols[j - 1], + j, + atom_symbols[k - 1], + k, + ) s = leader + _format_value_std(angle, stdev) + " degrees" print(s, file=output.stdout) return - def bond_angle(self, i, j, k): """bond_angle(i, j, k) --> bond angle defined by atoms i, j, k. Angle is calculated using the shortest ji and jk lengths with @@ -873,9 +875,8 @@ def bond_angle(self, i, j, k): rv = pdffit2.bond_angle(self._handle, i, j, k) return rv - def blen(self, *args): - """blen(i, j) --> Show bond length defined by atoms i and j. + """Blen(i, j) --> Show bond length defined by atoms i and j. i -- index of the first atom starting at 1 j -- index of the second atom starting at 1 @@ -897,42 +898,52 @@ def blen(self, *args): pdffit.unassignedError when no structure has been loaded """ # first form - if len(args)==2: + if len(args) == 2: dij, ddij = self.bond_length_atoms(*args[0:2]) atom_symbols = self.get_atoms() ij = (args[0], args[1]) # indices were already checked in bond_length_atoms call assert (0 <= min(ij) - 1) and (max(ij) - 1 < len(atom_symbols)) - symij = ( atom_symbols[ij[0] - 1].upper(), - atom_symbols[ij[1] - 1].upper() ) - print(_format_bond_length(dij, ddij, ij, symij), file=output.stdout) + symij = ( + atom_symbols[ij[0] - 1].upper(), + atom_symbols[ij[1] - 1].upper(), + ) + print( + _format_bond_length(dij, ddij, ij, symij), file=output.stdout + ) # second form - elif len(args)==4: + elif len(args) == 4: a1, a2, lb, ub = args try: atom_types = self.get_atom_types() - if isinstance(a1, numbers.Integral): a1 = atom_types[a1 - 1] - if isinstance(a2, numbers.Integral): a2 = atom_types[a2 - 1] + if isinstance(a1, numbers.Integral): + a1 = atom_types[a1 - 1] + if isinstance(a2, numbers.Integral): + a2 = atom_types[a2 - 1] except IndexError: - # index of non-existant atom type + # index of non-existent atom type return # arguments are OK here, get bond length dictionary bld = pdffit2.bond_length_types(self._handle, a1, a2, lb, ub) - s = "(%s,%s) bond lengths in [%gA,%gA] for current phase :" % \ - (a1, a2, lb, ub) + s = "(%s,%s) bond lengths in [%gA,%gA] for current phase :" % ( + a1, + a2, + lb, + ub, + ) print(s, file=output.stdout) atom_symbols = self.get_atoms() - npts = len(bld['dij']) + npts = len(bld["dij"]) for idx in range(npts): - dij = bld['dij'][idx] - ddij = bld['ddij'][idx] - ij0 = bld['ij0'][idx] - ij1 = bld['ij1'][idx] + dij = bld["dij"][idx] + ddij = bld["ddij"][idx] + ij0 = bld["ij0"][idx] + ij1 = bld["ij1"][idx] symij = (atom_symbols[ij0[0]], atom_symbols[ij0[1]]) s = _format_bond_length(dij, ddij, ij1, symij) print(s, file=output.stdout) print(file=output.stdout) - if not bld['dij']: + if not bld["dij"]: print(" *** No pairs found ***", file=output.stdout) else: emsg = "blen() takes 2 or 4 arguments (%i given)" % len(args) @@ -940,10 +951,10 @@ def blen(self, *args): # done return - def bond_length_atoms(self, i, j): - """bond_length_atoms(i, j) --> shortest distance between atoms i, j. - Periodic boundary conditions are applied to find the shortest bond. + """bond_length_atoms(i, j) --> shortest distance between atoms + i, j. Periodic boundary conditions are applied to find the + shortest bond. i -- index of the first atom starting at 1 j -- index of the second atom starting at 1 @@ -956,9 +967,9 @@ def bond_length_atoms(self, i, j): rv = pdffit2.bond_length_atoms(self._handle, i, j) return rv - def bond_length_types(self, a1, a2, lb, ub): - """bond_length_types(a1, a2, lb, ub) --> get all a1-a2 distances. + """bond_length_types(a1, a2, lb, ub) --> get all a1-a2 + distances. a1 -- symbol of the first element in pair or "ALL" a2 -- symbol of the second element in pair or "ALL" @@ -967,8 +978,8 @@ def bond_length_types(self, a1, a2, lb, ub): Return a dictionary of distance data containing - dij : list of bond lenghts within given bounds - ddij : list of bond legnth standard deviations + dij : list of bond lengths within given bounds + ddij : list of bond length standard deviations ij0 : pairs of atom indices starting from 0 ij1 : pairs of atom indices starting from 1 @@ -978,7 +989,6 @@ def bond_length_types(self, a1, a2, lb, ub): rv = pdffit2.bond_length_types(self._handle, a1, a2, lb, ub) return rv - def show_scat(self, stype): """show_scat(stype) --> Print scattering length for all atoms in the current phase. @@ -990,7 +1000,6 @@ def show_scat(self, stype): print(self.get_scat_string(stype), file=output.stdout) return - def get_scat_string(self, stype): """get_scat_string(stype) --> Get string with scattering factors of all atoms in the current phase. @@ -1002,8 +1011,7 @@ def get_scat_string(self, stype): Returns: string with all scattering factors. """ - return pdffit2.get_scat_string(self._handle, six.b(stype)) - + return pdffit2.get_scat_string(self._handle, stype.encode()) def get_scat(self, stype, element): """get_scat(stype, element) --> Get active scattering factor for @@ -1019,14 +1027,14 @@ def get_scat(self, stype, element): Raises: ValueError if element is not known. """ - rv = pdffit2.get_scat(self._handle, six.b(stype), element) + rv = pdffit2.get_scat(self._handle, stype.encode(), element) return rv - def set_scat(self, stype, element, value): - """set_scat(stype, element, value) --> Set custom scattering factor - for given element. The new scattering factor applies only for the - current phase, in other phases it keeps its default value. + """set_scat(stype, element, value) --> Set custom scattering + factor for given element. The new scattering factor applies + only for the current phase, in other phases it keeps its default + value. stype -- 'X' (xray) or 'N' (neutron). element -- case-insensitive element symbol such as "Na" or "CL" @@ -1040,10 +1048,9 @@ def set_scat(self, stype, element, value): See also reset_scat, get_scat. """ - pdffit2.set_scat(self._handle, six.b(stype), element, value) + pdffit2.set_scat(self._handle, stype.encode(), element, value) return - def reset_scat(self, element): """reset_scat(stype, element) --> Reset scattering factors for given element to their standard values. The reset_scat applies @@ -1057,7 +1064,6 @@ def reset_scat(self, element): pdffit2.reset_scat(self._handle, element) return - def num_atoms(self): """num_atoms() --> Get number of atoms in current phase. @@ -1065,7 +1071,6 @@ def num_atoms(self): """ return pdffit2.num_atoms(self._handle) - def num_phases(self): """num_phases() --> Number of phases loaded in PdfFit instance. @@ -1076,9 +1081,9 @@ def num_phases(self): n = pdffit2.num_phases(self._handle) return n - def num_datasets(self): - """num_datasets() --> Number of datasets loaded in PdfFit instance. + """num_datasets() --> Number of datasets loaded in PdfFit + instance. Use setdata to bring a specific dataset in focus. @@ -1087,11 +1092,10 @@ def num_datasets(self): n = pdffit2.num_datasets(self._handle) return n - def phase_fractions(self): - """phase_fractions() --> relative phase fractions for current dataset. - Convert phase scale factors to relative phase fractions given the - scattering type of current dataset. + """phase_fractions() --> relative phase fractions for current + dataset. Convert phase scale factors to relative phase fractions + given the scattering type of current dataset. Return a dictionary of phase fractions with following keys: @@ -1109,211 +1113,217 @@ def phase_fractions(self): # Begin refinable variables. def lat(n): - """lat(n) --> Get reference to lattice variable n. - - n can be an integer or a string representing the lattice variable. - 1 <==> 'a' - 2 <==> 'b' - 3 <==> 'c' - 4 <==> 'alpha' - 5 <==> 'beta' - 6 <==> 'gamma' - """ - LatParams = { 'a':1, 'b':2, 'c':3, 'alpha':4, 'beta':5, 'gamma':6 } - if isinstance(n, six.string_types): + """Lat(n) --> Get reference to lattice variable n. + + n can be an integer or a string representing the lattice + variable. 1 <==> 'a' 2 <==> 'b' 3 <==> 'c' 4 <==> 'alpha' 5 <==> + 'beta' 6 <==> 'gamma' + """ + LatParams = {"a": 1, "b": 2, "c": 3, "alpha": 4, "beta": 5, "gamma": 6} + if isinstance(n, str): n = LatParams[n] return "lat(%i)" % n - lat = staticmethod(lat) + lat = staticmethod(lat) def x(i): - """x(i) --> Get reference to x-value of atom i.""" + """X(i) --> Get reference to x-value of atom i.""" return "x(%i)" % i - x = staticmethod(x) + x = staticmethod(x) def y(i): - """y(i) --> Get reference to y-value of atom i.""" + """Y(i) --> Get reference to y-value of atom i.""" return "y(%i)" % i - y = staticmethod(y) + y = staticmethod(y) def z(i): - """z(i) --> Get reference to z-value of atom i.""" + """Z(i) --> Get reference to z-value of atom i.""" return "z(%i)" % i - z = staticmethod(z) + z = staticmethod(z) def u11(i): - """u11(i) --> Get reference to U(1,1) for atom i. + """U11(i) --> Get reference to U(1,1) for atom i. U is the anisotropic thermal factor tensor. """ return "u11(%i)" % i - u11 = staticmethod(u11) + u11 = staticmethod(u11) def u22(i): - """u22(i) --> Get reference to U(2,2) for atom i. + """U22(i) --> Get reference to U(2,2) for atom i. U is the anisotropic thermal factor tensor. """ return "u22(%i)" % i - u22 = staticmethod(u22) + u22 = staticmethod(u22) def u33(i): - """u33(i) --> Get reference to U(3,3) for atom i. + """U33(i) --> Get reference to U(3,3) for atom i. U is the anisotropic thermal factor tensor. """ return "u33(%i)" % i - u33 = staticmethod(u33) + u33 = staticmethod(u33) def u12(i): - """u12(i) --> Get reference to U(1,2) for atom i. + """U12(i) --> Get reference to U(1,2) for atom i. U is the anisotropic thermal factor tensor. """ return "u12(%i)" % i - u12 = staticmethod(u12) + u12 = staticmethod(u12) def u13(i): - """u13(i) --> Get reference to U(1,3) for atom i. + """U13(i) --> Get reference to U(1,3) for atom i. U is the anisotropic thermal factor tensor. """ return "u13(%i)" % i - u13 = staticmethod(u13) + u13 = staticmethod(u13) def u23(i): - """u23(i) --> Get reference to U(2,3) for atom i. + """U23(i) --> Get reference to U(2,3) for atom i. U is the anisotropic thermal factor tensor. """ return "u23(%i)" % i - u23 = staticmethod(u23) + u23 = staticmethod(u23) def occ(i): - """occ(i) --> Get reference to occupancy of atom i.""" + """Occ(i) --> Get reference to occupancy of atom i.""" return "occ(%i)" % i - occ = staticmethod(occ) + occ = staticmethod(occ) def pscale(): - """pscale() --> Get reference to pscale. + """Pscale() --> Get reference to pscale. - pscale is the fraction of the total structure that the current phase - represents. + pscale is the fraction of the total structure that the current + phase represents. """ return "pscale" - pscale = staticmethod(pscale) + pscale = staticmethod(pscale) def sratio(): - """sratio() --> Get reference to sigma ratio. + """Sratio() --> Get reference to sigma ratio. - The sigma ratio determines the reduction in the Debye-Waller factor for - distances below rcut. + The sigma ratio determines the reduction in the Debye-Waller + factor for distances below rcut. """ return "sratio" - sratio = staticmethod(sratio) + sratio = staticmethod(sratio) def delta1(): - """delta1() --> Get reference to 1/R peak sharpening factor. - """ + """Delta1() --> Get reference to 1/R peak sharpening factor.""" return "delta1" - delta1 = staticmethod(delta1) + delta1 = staticmethod(delta1) def delta2(): - """delta2() --> Reference to (1/R^2) sharpening factor. - The phenomenological correlation constant in the Debye-Waller factor. - The (1/R^2) peak sharpening factor. + """Delta2() --> Reference to (1/R^2) sharpening factor. + + The phenomenological correlation constant in the Debye-Waller + factor. The (1/R^2) peak sharpening factor. """ return "delta2" - delta2 = staticmethod(delta2) + delta2 = staticmethod(delta2) def dscale(): - """dscale() --> Get reference to dscale. + """Dscale() --> Get reference to dscale. The data scale factor. """ return "dscale" - dscale = staticmethod(dscale) + dscale = staticmethod(dscale) def qdamp(): - """qdamp() --> Get reference to qdamp. + """Qdamp() --> Get reference to qdamp. Qdamp controls PDF damping due to instrument Q-resolution. """ return "qdamp" - qdamp = staticmethod(qdamp) + qdamp = staticmethod(qdamp) def qbroad(): - """qbroad() --> Get reference to qbroad. + """Qbroad() --> Get reference to qbroad. Quadratic peak broadening factor. """ return "qbroad" - qbroad = staticmethod(qbroad) + qbroad = staticmethod(qbroad) def spdiameter(): - """spdiameter() --> Get reference to spdiameter (phase property). + """Spdiameter() --> Get reference to spdiameter (phase + property). Diameter value for the spherical particle PDF correction. Spherical envelope is not applied when spdiameter equals 0. """ return "spdiameter" - spdiameter = staticmethod(spdiameter) + spdiameter = staticmethod(spdiameter) def stepcut(): - """stepcut() --> Get reference to stepcut (phase property). + """Stepcut() --> Get reference to stepcut (phase property). - stepcut is cutoff radius for empirical step-function PDF envelope. - stepcut can be used to approximate loss of pair correlations - in amorphous phase. stepcut cannot be refined. + stepcut is cutoff radius for empirical step-function PDF + envelope. stepcut can be used to approximate loss of pair + correlations in amorphous phase. stepcut cannot be refined. Step cutoff is not applied when stepcut equals 0. """ return "stepcut" - stepcut = staticmethod(stepcut) + stepcut = staticmethod(stepcut) def rcut(): - """rcut() --> Get reference to rcut. + """Rcut() --> Get reference to rcut. rcut is the value of r below which peak sharpening, defined by the sigma ratio (sratio), applies. rcut cannot be refined. """ return "rcut" - rcut = staticmethod(rcut) + rcut = staticmethod(rcut) # End refinable variables. - def __init__(self): + def __init__(self, create_intro=True): + """Initialize the Pdffit class, create a new PdfFit object. + + Parameters + ---------- + create_intro : bool, optional + The flag to control the display of an introduction message. + If True, display an introduction message, else not. Default is True. + """ self.stru_files = [] self.data_files = [] self._handle = pdffit2.create() - self.intro() + if create_intro: + self.intro() return - def __getRef(self, var_string): - """Return the actual reference to the variable in the var_string. + """Return the actual reference to the variable in the + var_string. This function must be called before trying to actually reference an internal variable. See the constrain method for an example. @@ -1328,7 +1338,7 @@ def __getRef(self, var_string): method_string, arg_string = var_string.split("(") method_string = method_string.strip() arg_int = int(arg_string.strip(")").strip()) - except ValueError: #There is no arg_string + except ValueError: # There is no arg_string method_string = var_string.strip() f = getattr(pdffit2, method_string) diff --git a/src/diffpy/pdffit2/pdffit2_app.py b/src/diffpy/pdffit2/pdffit2_app.py new file mode 100644 index 00000000..d8ff2fd0 --- /dev/null +++ b/src/diffpy/pdffit2/pdffit2_app.py @@ -0,0 +1,33 @@ +import argparse + +from diffpy.pdffit2.version import __version__ # noqa + + +def main(): + parser = argparse.ArgumentParser( + prog="diffpy.pdffit2", + description=( + "PDFfit2 - real space structure refinement program.\n\n" + "For more information, visit: " + "https://github.com/diffpy/diffpy.pdffit2/" + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + + parser.add_argument( + "--version", + action="store_true", + help="Show the program's version number and exit", + ) + + args = parser.parse_args() + + if args.version: + print(f"diffpy.pdffit2 {__version__}") + else: + # Default behavior when no arguments are given + parser.print_help() + + +if __name__ == "__main__": + main() diff --git a/src/diffpy/pdffit2/version.py b/src/diffpy/pdffit2/version.py new file mode 100644 index 00000000..ee14bcd3 --- /dev/null +++ b/src/diffpy/pdffit2/version.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +############################################################################## +# +# (c) 2025-2026 The Trustees of Columbia University in the City of New York. +# All rights reserved. +# +# File coded by: Billinge Group members and community contributors. +# +# See GitHub contributions for a more detailed list of contributors. +# https://github.com/diffpy/diffpy.pdffit2/graphs/contributors # noqa: E501 +# +# See LICENSE.rst for license information. +# +############################################################################## +"""Definition of __version__.""" + +# We do not use the other three variables, but can be added back if needed. +# __all__ = ["__date__", "__git_commit__", "__timestamp__", "__version__"] + +import datetime +import json +import urllib.request + +# obtain version information +from importlib.metadata import PackageNotFoundError, version +from pathlib import Path + + +def get_pypi_release_date(package_name, timeout=5): + package_file = Path(__file__).resolve() + + try: + with open(package_file, "r", encoding="utf-8") as f: + lines = f.readlines() + for line in reversed(lines): + if line.startswith("# Release date:"): + return line.split(":", 1)[1].strip() + + url = f"https://pypi.org/pypi/{package_name}/json" + with urllib.request.urlopen(url, timeout=timeout) as response: + data = json.loads(response.read().decode("utf-8")) + + installed_version = version(package_name) + release_data = data["releases"].get(installed_version, []) + if not release_data: + raise ValueError( + f"No release data found for version {installed_version}" + ) + + release_date_str = release_data[-1]["upload_time"] + release_date = datetime.datetime.fromisoformat(release_date_str).date() + + with open(package_file, "a", encoding="utf-8") as f: + f.write(f"\n# Release date: {release_date}") + + except (ValueError, OSError) as e: + print(f"Warning: Could not fetch release date from PyPI: {e}") + release_date = datetime.datetime.fromtimestamp( + package_file.stat().st_ctime + ).isoformat() + + return str(release_date) + + +__date__ = get_pypi_release_date("diffpy.pdffit2") + +try: + __version__ = version("diffpy.pdffit2") +except PackageNotFoundError: + __version__ = "unknown" diff --git a/libpdffit2/Atom.cc b/src/extensions/libpdffit2/Atom.cc similarity index 100% rename from libpdffit2/Atom.cc rename to src/extensions/libpdffit2/Atom.cc diff --git a/libpdffit2/Atom.h b/src/extensions/libpdffit2/Atom.h similarity index 100% rename from libpdffit2/Atom.h rename to src/extensions/libpdffit2/Atom.h diff --git a/libpdffit2/AtomType.h b/src/extensions/libpdffit2/AtomType.h similarity index 100% rename from libpdffit2/AtomType.h rename to src/extensions/libpdffit2/AtomType.h diff --git a/libpdffit2/LocalPeriodicTable.cc b/src/extensions/libpdffit2/LocalPeriodicTable.cc similarity index 100% rename from libpdffit2/LocalPeriodicTable.cc rename to src/extensions/libpdffit2/LocalPeriodicTable.cc diff --git a/libpdffit2/LocalPeriodicTable.h b/src/extensions/libpdffit2/LocalPeriodicTable.h similarity index 100% rename from libpdffit2/LocalPeriodicTable.h rename to src/extensions/libpdffit2/LocalPeriodicTable.h diff --git a/libpdffit2/MathUtils.h b/src/extensions/libpdffit2/MathUtils.h similarity index 100% rename from libpdffit2/MathUtils.h rename to src/extensions/libpdffit2/MathUtils.h diff --git a/libpdffit2/OutputStreams.cc b/src/extensions/libpdffit2/OutputStreams.cc similarity index 100% rename from libpdffit2/OutputStreams.cc rename to src/extensions/libpdffit2/OutputStreams.cc diff --git a/libpdffit2/OutputStreams.h b/src/extensions/libpdffit2/OutputStreams.h similarity index 100% rename from libpdffit2/OutputStreams.h rename to src/extensions/libpdffit2/OutputStreams.h diff --git a/libpdffit2/PairDistance.h b/src/extensions/libpdffit2/PairDistance.h similarity index 100% rename from libpdffit2/PairDistance.h rename to src/extensions/libpdffit2/PairDistance.h diff --git a/libpdffit2/PeriodicTable.cc b/src/extensions/libpdffit2/PeriodicTable.cc similarity index 100% rename from libpdffit2/PeriodicTable.cc rename to src/extensions/libpdffit2/PeriodicTable.cc diff --git a/libpdffit2/PeriodicTable.h b/src/extensions/libpdffit2/PeriodicTable.h similarity index 100% rename from libpdffit2/PeriodicTable.h rename to src/extensions/libpdffit2/PeriodicTable.h diff --git a/libpdffit2/PointsInSphere.cc b/src/extensions/libpdffit2/PointsInSphere.cc similarity index 98% rename from libpdffit2/PointsInSphere.cc rename to src/extensions/libpdffit2/PointsInSphere.cc index 8e51c575..881812a0 100644 --- a/libpdffit2/PointsInSphere.cc +++ b/src/extensions/libpdffit2/PointsInSphere.cc @@ -14,7 +14,7 @@ * * classes PointsInSphere, ReflectionsInQminQmax, ReflectionsInDmaxDmin * -* Comments: sequencers for lattice points insided 3D sphere +* Comments: sequencers for lattice points inside 3D sphere * ***********************************************************************/ @@ -117,7 +117,7 @@ void PointsInSphere::rewind() mHalfSpan = Rmax*latpar.ar; hi_m = int(ceil(mHalfSpan)); m = -hi_m; - // make indices n, o invalid, reset the neares point + // make indices n, o invalid, reset the nearest point n = hi_n = 0; o = hi_o = outside_o = 0; n0plane = o0plane = o0line = 0.0; diff --git a/libpdffit2/PointsInSphere.h b/src/extensions/libpdffit2/PointsInSphere.h similarity index 100% rename from libpdffit2/PointsInSphere.h rename to src/extensions/libpdffit2/PointsInSphere.h diff --git a/libpdffit2/ShapeFactors.h b/src/extensions/libpdffit2/ShapeFactors.h similarity index 100% rename from libpdffit2/ShapeFactors.h rename to src/extensions/libpdffit2/ShapeFactors.h diff --git a/libpdffit2/StringUtils.cc b/src/extensions/libpdffit2/StringUtils.cc similarity index 100% rename from libpdffit2/StringUtils.cc rename to src/extensions/libpdffit2/StringUtils.cc diff --git a/libpdffit2/StringUtils.h b/src/extensions/libpdffit2/StringUtils.h similarity index 100% rename from libpdffit2/StringUtils.h rename to src/extensions/libpdffit2/StringUtils.h diff --git a/libpdffit2/exceptions.h b/src/extensions/libpdffit2/exceptions.h similarity index 100% rename from libpdffit2/exceptions.h rename to src/extensions/libpdffit2/exceptions.h diff --git a/libpdffit2/fit.cc b/src/extensions/libpdffit2/fit.cc similarity index 99% rename from libpdffit2/fit.cc rename to src/extensions/libpdffit2/fit.cc index 4426aa29..9bcda15f 100644 --- a/libpdffit2/fit.cc +++ b/src/extensions/libpdffit2/fit.cc @@ -15,7 +15,7 @@ * Mixed definitions of several DataSet, Fit and PdfFit methods * * Comments: Up to date with 1.3.10 Fortran version. -* What a spagetti. +* What a spaghetti. * ***********************************************************************/ diff --git a/libpdffit2/gaussj.cc b/src/extensions/libpdffit2/gaussj.cc similarity index 100% rename from libpdffit2/gaussj.cc rename to src/extensions/libpdffit2/gaussj.cc diff --git a/libpdffit2/matrix.h b/src/extensions/libpdffit2/matrix.h similarity index 100% rename from libpdffit2/matrix.h rename to src/extensions/libpdffit2/matrix.h diff --git a/libpdffit2/metric.cc b/src/extensions/libpdffit2/metric.cc similarity index 99% rename from libpdffit2/metric.cc rename to src/extensions/libpdffit2/metric.cc index 5f696495..5c06c4f5 100644 --- a/libpdffit2/metric.cc +++ b/src/extensions/libpdffit2/metric.cc @@ -302,7 +302,7 @@ void Phase::dtensor(double vec[3], double win[3], double dten[3][3], } /******************************************************** - Calulates the SCALARPRODUCT of two vectors + Calculates the SCALARPRODUCT of two vectors 1/D**2 = H(I)*K(J)*RTEN(I,J) uses the phase's metric *********************************************************/ diff --git a/libpdffit2/nrutil.cc b/src/extensions/libpdffit2/nrutil.cc similarity index 98% rename from libpdffit2/nrutil.cc rename to src/extensions/libpdffit2/nrutil.cc index 34c6060c..ab466359 100644 --- a/libpdffit2/nrutil.cc +++ b/src/extensions/libpdffit2/nrutil.cc @@ -12,7 +12,7 @@ * ************************************************************************ * -* Utilities from numerical recipies. +* Utilities from numerical recipes. * * Comments: * diff --git a/libpdffit2/nrutil.h b/src/extensions/libpdffit2/nrutil.h similarity index 96% rename from libpdffit2/nrutil.h rename to src/extensions/libpdffit2/nrutil.h index ee1bd4cb..fca40510 100644 --- a/libpdffit2/nrutil.h +++ b/src/extensions/libpdffit2/nrutil.h @@ -12,7 +12,7 @@ * ************************************************************************ * -* Utilities from numerical recipies. +* Utilities from numerical recipes. * * Comments: * diff --git a/libpdffit2/output.cc b/src/extensions/libpdffit2/output.cc similarity index 100% rename from libpdffit2/output.cc rename to src/extensions/libpdffit2/output.cc diff --git a/libpdffit2/parser.cc b/src/extensions/libpdffit2/parser.cc similarity index 100% rename from libpdffit2/parser.cc rename to src/extensions/libpdffit2/parser.cc diff --git a/libpdffit2/pdf.cc b/src/extensions/libpdffit2/pdf.cc similarity index 99% rename from libpdffit2/pdf.cc rename to src/extensions/libpdffit2/pdf.cc index 0ab857b6..595fee96 100644 --- a/libpdffit2/pdf.cc +++ b/src/extensions/libpdffit2/pdf.cc @@ -15,7 +15,7 @@ * Mixed methods for PDF calculation from PdfFit, DataSet and Phase * * Comments: Up to date with 1.3.10 Fortran version. -* What a spagetti. +* What a spaghetti. * ***********************************************************************/ @@ -1387,7 +1387,7 @@ bool isRegular(Iterator first, Iterator last) /* Wed Oct 12 2005 - CLF * Using read_data_arrays adds functionality - * to pdffit2, allowing one to read data that is alread stored as arrays. + * to pdffit2, allowing one to read data that is already stored as arrays. */ void DataSet::read_data_arrays(int _iset, char tp, double _qmax, double _qdamp, int length, double * r_data, double * Gr_data, diff --git a/libpdffit2/pdffit.cc b/src/extensions/libpdffit2/pdffit.cc similarity index 100% rename from libpdffit2/pdffit.cc rename to src/extensions/libpdffit2/pdffit.cc diff --git a/libpdffit2/pdffit.h b/src/extensions/libpdffit2/pdffit.h similarity index 100% rename from libpdffit2/pdffit.h rename to src/extensions/libpdffit2/pdffit.h diff --git a/libpdffit2/pdflsmin.cc b/src/extensions/libpdffit2/pdflsmin.cc similarity index 99% rename from libpdffit2/pdflsmin.cc rename to src/extensions/libpdffit2/pdflsmin.cc index 078d2754..74c7d075 100644 --- a/libpdffit2/pdflsmin.cc +++ b/src/extensions/libpdffit2/pdflsmin.cc @@ -65,7 +65,7 @@ void PdfFit::mrqmin(vector &a, vector &ia, matrix &covar, // Levenberg-Marquardt method, attempting to reduce the value Chi2 of a fit // between a set of data points x[1..ndata], y[1..ndata] with individual // standard deviations sig[1..ndata], and a nonlinear function dependent on ma -// coeffcients a[1..ma]. The input array ia[1..ma] indicates by nonzero +// coefficients a[1..ma]. The input array ia[1..ma] indicates by nonzero // entries those components of a that should be fitted for, and by zero entries // those components that should be held fixed at their input values. The // program re- turns current best-fit values for the parameters a[1..ma], and diff --git a/libpdffit2/scatlen.cc b/src/extensions/libpdffit2/scatlen.cc similarity index 100% rename from libpdffit2/scatlen.cc rename to src/extensions/libpdffit2/scatlen.cc diff --git a/libpdffit2/stru.cc b/src/extensions/libpdffit2/stru.cc similarity index 99% rename from libpdffit2/stru.cc rename to src/extensions/libpdffit2/stru.cc index f9022f23..4f1a6a60 100644 --- a/libpdffit2/stru.cc +++ b/src/extensions/libpdffit2/stru.cc @@ -106,7 +106,7 @@ string lstrip(const string &line) return naked; } -// substitute all occurences of literal pattern with new string +// substitute all occurrences of literal pattern with new string void substitute(string& s, const string& pat, const string& sub) { string::size_type p; @@ -230,7 +230,7 @@ void Phase::read_struct_stream(int _iphase, istream& fstruct) /****************************************************************** This subroutine reads the header of a structure file Wed Oct 12 2005 - CLF - Changed ifstream to istream to accomodate stringstreams + Changed ifstream to istream to accommodate stringstreams as well. ********************************************************************/ diff --git a/libpdffit2/support_msvc9.h b/src/extensions/libpdffit2/support_msvc9.h similarity index 100% rename from libpdffit2/support_msvc9.h rename to src/extensions/libpdffit2/support_msvc9.h diff --git a/libpdffit2/tests/Makefile b/src/extensions/libpdffit2/tests/Makefile similarity index 100% rename from libpdffit2/tests/Makefile rename to src/extensions/libpdffit2/tests/Makefile diff --git a/libpdffit2/tests/TestPointsInSphere.cc b/src/extensions/libpdffit2/tests/TestPointsInSphere.cc similarity index 100% rename from libpdffit2/tests/TestPointsInSphere.cc rename to src/extensions/libpdffit2/tests/TestPointsInSphere.cc diff --git a/libpdffit2/tests/alltests.cc b/src/extensions/libpdffit2/tests/alltests.cc similarity index 100% rename from libpdffit2/tests/alltests.cc rename to src/extensions/libpdffit2/tests/alltests.cc diff --git a/pdffit2module/PyFileStreambuf.h b/src/extensions/pdffit2module/PyFileStreambuf.h similarity index 81% rename from pdffit2module/PyFileStreambuf.h rename to src/extensions/pdffit2module/PyFileStreambuf.h index 3a2bc383..cc8588bc 100644 --- a/pdffit2module/PyFileStreambuf.h +++ b/src/extensions/pdffit2module/PyFileStreambuf.h @@ -67,16 +67,21 @@ class PyFileStreambuf : public std::streambuf virtual int_type overflow( int_type c) { - PyObject* rv; - rv = PyObject_CallMethod(py_file, "write", "(s#)", &c, 1); + char ch = static_cast(c); + PyObject* py_str = PyUnicode_FromStringAndSize(&ch, 1); + if (!py_str) { return traits_type::eof(); } + PyObject* rv = PyObject_CallMethod(py_file, "write", "O", py_str); + Py_DECREF(py_str); if (rv) { Py_DECREF(rv); } return c; } virtual std::streamsize xsputn(const char_type* s, std::streamsize n) { - PyObject* rv; - rv = PyObject_CallMethod(py_file, "write", "(s#)", s, n); + PyObject* py_str = PyUnicode_DecodeUTF8(s, n, "replace"); + if (!py_str) { return 0; } + PyObject* rv = PyObject_CallMethod(py_file, "write", "O", py_str); + Py_DECREF(py_str); if (rv) { Py_DECREF(rv); } return n; } diff --git a/pdffit2module/bindings.cc b/src/extensions/pdffit2module/bindings.cc similarity index 100% rename from pdffit2module/bindings.cc rename to src/extensions/pdffit2module/bindings.cc diff --git a/pdffit2module/bindings.h b/src/extensions/pdffit2module/bindings.h similarity index 100% rename from pdffit2module/bindings.h rename to src/extensions/pdffit2module/bindings.h diff --git a/pdffit2module/misc.cc b/src/extensions/pdffit2module/misc.cc similarity index 99% rename from pdffit2module/misc.cc rename to src/extensions/pdffit2module/misc.cc index 80198049..6d3bf4f6 100644 --- a/pdffit2module/misc.cc +++ b/src/extensions/pdffit2module/misc.cc @@ -30,9 +30,9 @@ #include "misc.h" #include "pyexceptions.h" #include "PyFileStreambuf.h" -#include "libpdffit2/StringUtils.h" -#include "libpdffit2/LocalPeriodicTable.h" -#include "libpdffit2/pdffit.h" +#include "../libpdffit2/StringUtils.h" +#include "../libpdffit2/LocalPeriodicTable.h" +#include "../libpdffit2/pdffit.h" // ostream buffer used for engine output redirection PyFileStreambuf* py_stdout_streambuf = NULL; @@ -1381,8 +1381,8 @@ char pypdffit2_bond_length_types__doc__[] = "\n" "Return a dictionary of distance data containing:\n" "\n" - "dij : list of bond lenghts within given bounds\n" - "ddij : list of bond legnth standard deviations\n" + "dij : list of bond lengths within given bounds\n" + "ddij : list of bond length standard deviations\n" "ij0 : list of tupled pairs of indices starting at 0\n" "ij1 : list of tupled pairs of indices starting at 1"; char pypdffit2_bond_length_types__name__[] = "bond_length_types"; @@ -2176,15 +2176,14 @@ char pypdffit2_redirect_stdout__name__[] = "redirect_stdout"; PyObject * pypdffit2_redirect_stdout(PyObject *, PyObject *args) { // instance of PyFileStreambuf which takes care of redirection - PyObject *py_file = 0; - int ok = PyArg_ParseTuple(args, "O", &py_file); - if (!ok) return 0; + PyObject *py_file = nullptr; + if (!PyArg_ParseTuple(args, "O", &py_file)) return nullptr; // check if py_file has write and flush attributes if ( !PyObject_HasAttrString(py_file, "write") || !PyObject_HasAttrString(py_file, "flush") ) { PyErr_SetString(PyExc_TypeError, "expected file-like argument"); - return 0; + return nullptr; } // create py_stdout_streambuf if necessary if (!py_stdout_streambuf) @@ -2195,7 +2194,7 @@ PyObject * pypdffit2_redirect_stdout(PyObject *, PyObject *args) // on first redirection we need to assign new ostream to NS_PDFFIT2::pout if (NS_PDFFIT2::pout == &std::cout) { - NS_PDFFIT2::pout = new ostream(py_stdout_streambuf); + NS_PDFFIT2::pout = new std::ostream(py_stdout_streambuf); } Py_INCREF(Py_None); return Py_None; diff --git a/pdffit2module/misc.h b/src/extensions/pdffit2module/misc.h similarity index 99% rename from pdffit2module/misc.h rename to src/extensions/pdffit2module/misc.h index f8782307..3374fa5f 100644 --- a/pdffit2module/misc.h +++ b/src/extensions/pdffit2module/misc.h @@ -477,6 +477,7 @@ extern char pypdffit2_redirect_stdout__name__[]; extern "C" PyObject * pypdffit2_redirect_stdout(PyObject *, PyObject *); + // is_element extern char pypdffit2_is_element__doc__[]; extern char pypdffit2_is_element__name__[]; diff --git a/pdffit2module/pdffit2module.cc b/src/extensions/pdffit2module/pdffit2module.cc similarity index 99% rename from pdffit2module/pdffit2module.cc rename to src/extensions/pdffit2module/pdffit2module.cc index acf89fa3..efde9511 100644 --- a/pdffit2module/pdffit2module.cc +++ b/src/extensions/pdffit2module/pdffit2module.cc @@ -23,7 +23,7 @@ #include "pyexceptions.h" #include "bindings.h" -#include "libpdffit2/pdffit.h" +#include "../libpdffit2/pdffit.h" using namespace std; diff --git a/pdffit2module/pyexceptions.cc b/src/extensions/pdffit2module/pyexceptions.cc similarity index 100% rename from pdffit2module/pyexceptions.cc rename to src/extensions/pdffit2module/pyexceptions.cc diff --git a/pdffit2module/pyexceptions.h b/src/extensions/pdffit2module/pyexceptions.h similarity index 100% rename from pdffit2module/pyexceptions.h rename to src/extensions/pdffit2module/pyexceptions.h diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..6a142536 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,50 @@ +import io +import json +from pathlib import Path + +import pytest + +import diffpy.pdffit2 +import diffpy.pdffit2.output # assuming this is the correct import path + + +@pytest.fixture +def user_filesystem(tmp_path): + base_dir = Path(tmp_path) + home_dir = base_dir / "home_dir" + home_dir.mkdir(parents=True, exist_ok=True) + cwd_dir = base_dir / "cwd_dir" + cwd_dir.mkdir(parents=True, exist_ok=True) + + home_config_data = {"username": "home_username", "email": "home@email.com"} + with open(home_dir / "diffpyconfig.json", "w") as f: + json.dump(home_config_data, f) + + yield tmp_path + + +@pytest.fixture +def datafile(): + """Fixture to dynamically load any test file.""" + + def _load(filename): + return "tests/testdata/" + filename + + return _load + + +@pytest.fixture +def capture_output(): + """Capture output from pdffit2 engine produced in function call.""" + + def _capture(f, *args, **kwargs): + savestdout = diffpy.pdffit2.output.stdout + fp = io.StringIO() + diffpy.pdffit2.redirect_stdout(fp) + try: + f(*args, **kwargs) + finally: + diffpy.pdffit2.redirect_stdout(savestdout) + return fp.getvalue() + + return _capture diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py new file mode 100644 index 00000000..58272d92 --- /dev/null +++ b/tests/test_exceptions.py @@ -0,0 +1,1075 @@ +#!/usr/bin/env python +############################################################################## +# +# pdffit2 by DANSE Diffraction group +# Simon J. L. Billinge +# (c) 2006 trustees of the Michigan State University. +# All rights reserved. +# +# File coded by: Chris Farrow +# +# See AUTHORS.txt for a list of people who contributed. +# See LICENSE.txt for license information. +# +############################################################################## + + +import unittest + +import pytest + +from diffpy.pdffit2 import pdffit2 +from diffpy.pdffit2.pdffit import PdfFit + + +class read_structExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_IOError(self): + """Raise IOError when structure file does not exist.""" + self.assertRaises(IOError, self.P.read_struct, "Nofile.stru") + + def test_structureError(self): + """Raise pdffit2.structureError when structure is malformed.""" + self.assertRaises( + pdffit2.structureError, + self.P.read_struct, + self.datafile("badNi.stru"), + ) + + def test_structureErrorZeroVolume(self): + """Raise pdffit2.structureError when unit cell volume is + negative.""" + # I don't know how to test for this, but it's in the library code + self.assertRaises( + pdffit2.structureError, + self.P.read_struct, + self.datafile("badNiZeroVolume.stru"), + ) + + +class read_dataExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_IOError(self): + """Raise IOError when data file does not exist.""" + self.assertRaises( + IOError, self.P.read_data, "Nofile.dat", "X", 25.0, 0.5 + ) + + def test_dataError(self): + """Raise pdffit2.dataError when data has improper spacing.""" + self.assertRaises( + pdffit2.dataError, + self.P.read_data, + self.datafile("badNi.dat"), + "X", + 25.0, + 0.5, + ) + + +class read_data_listsExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.r_data = [0.1, 0.2] + self.Gr_data = [1, 2, 3] + self.qmax = 10 + self.qdamp = 0.5 + + def tearDown(self): + del self.P + + def test_ValueError1(self): + """Raise ValueError when lists are of different length.""" + self.assertRaises( + ValueError, + self.P.read_data_lists, + "X", + self.qmax, + self.qdamp, + self.r_data, + self.Gr_data, + ) + + def test_ValueError2(self): + """Raise ValueError when qmax < 0.""" + self.assertRaises( + ValueError, + self.P.read_data_lists, + "X", + -self.qmax, + self.qdamp, + self.r_data, + self.Gr_data, + ) + + def test_ValueError3(self): + """Raise ValueError when qdamp < 0.""" + self.assertRaises( + ValueError, + self.P.read_data_lists, + "X", + self.qmax, + -self.qdamp, + self.r_data, + self.Gr_data, + ) + + def test_dataError(self): + """Raise pdffit2.dataError when data has improper spacing.""" + r_data = [0.1, 0.52, 0.2] + self.assertRaises( + pdffit2.dataError, + self.P.read_data_lists, + "X", + self.qmax, + self.qdamp, + r_data, + self.Gr_data, + ) + + +class pdfrangeExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.rmin = 4.0 + self.rmax = 10.0 + + def tearDown(self): + del self.P + + def test_ValueError1(self): + """Raise ValueError when iset does not exist.""" + self.assertRaises( + ValueError, self.P.pdfrange, self.iset, self.rmin, self.rmax + ) + + def test_ValueError2(self): + """Raise ValueError when rmax < rmin.""" + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertRaises( + ValueError, self.P.pdfrange, self.iset, self.rmax, self.rmin + ) + + def test_ValueError3(self): + """Raise ValueError when range outside of data.""" + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertRaises( + ValueError, self.P.pdfrange, self.iset, -self.rmin, self.rmax + ) + + +class allocExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.qmax = 25 + self.qdamp = 0.5 + self.rmin = 4.0 + self.rmax = 10.0 + self.bin = 100 + + def tearDown(self): + del self.P + + def test_ValueError1(self): + """Raise ValueError when qmax < 0.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + -self.qmax, + self.qdamp, + self.rmin, + self.rmax, + self.bin, + ) + + def test_ValueError2(self): + """Raise ValueError when qdamp < 0.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + self.qmax, + -self.qdamp, + self.rmin, + self.rmax, + self.bin, + ) + + def test_ValueError3(self): + """Raise ValueError when rmin < 0.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + self.qmax, + self.qdamp, + -self.rmin, + self.rmax, + self.bin, + ) + + def test_ValueError4(self): + """Raise ValueError when rmax < 0.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + self.qmax, + self.qdamp, + self.rmin, + -self.rmax, + self.bin, + ) + + def test_ValueError5(self): + """Raise ValueError when bin < 0.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + self.qmax, + self.qdamp, + self.rmin, + self.rmax, + -self.bin, + ) + + def test_ValueError6(self): + """Raise ValueError when rmax < rmin.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + self.qmax, + self.qdamp, + self.rmax, + self.rmin, + self.bin, + ) + + def test_ValueError7(self): + """Raise ValueError when qdamp < 0.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + ValueError, + self.P.alloc, + "X", + self.qmax, + self.qdamp, + self.rmin, + self.rmax, + -self.bin, + ) + + +class calcExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.P.read_struct(self.datafile("Ni.stru")) + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when no space has been + allocated.""" + self.assertRaises(pdffit2.unassignedError, self.P.calc) + + +# PJ 2006-03-06 +# +# test_calculationError raised exception, because for Qmax=0.5, rmax would +# increase to 4010A and this would throw exception when the size of bnd array +# would exceed MAXBND limit. However, bnd vector can now grow, thus rmax +# is not limited and the following test would hang indefinitely. + +# def test_calculationError(self): +# """raise pdffit2.calculationError when calculation cannot be done""" +# self.P.alloc('X', 0.01, 0.5, 2, 10, 100) +# self.assertRaises(pdffit2.calculationError, self.P.calc) + + +# class refineExceptions(unittest.TestCase): +# I'm not sure how to test these + +# def setUp(self): +# self.P = PdfFit() +# +# def test_calculationError(self): +# """raise pdffit2.calculationError when model pdf can't be calculated""" +# #self.assertRaises(pdffit2.calculationError, self.P.calc) +# +# def test_constraintError(self): +# """raise pdffit2.constraintError for bad constraint(s)""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) + + +# class refine_stepExceptions(unittest.TestCase): +# I'm not sure how to test these + +# def setUp(self): +# self.P = PdfFit() +# +# def test_calculationError(self): +# """raise pdffit2.calculationError when model pdf can't be calculated""" +# #self.assertRaises(pdffit2.calculationError, self.P.calc) +# +# def test_constraintError(self): +# """raise pdffit2.constraintError for bad constraint(s)""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) + + +class save_pdfExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.strufile = "temp.pdf" + + def tearDown(self): + del self.P + + def test_IOError(self): + """Raise IOError when structure cannot be saved.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + self.P.calc() + self.assertRaises( + IOError, self.P.save_pdf, 1, "nodir183160/" + self.strufile + ) + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when structure is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.save_pdf, 1, self.strufile + ) + + +class save_difExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.strufile = "temp.dif" + + def tearDown(self): + del self.P + + def test_IOError(self): + """Raise IOError when dif cannot be saved.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + self.P.calc() + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertRaises( + IOError, self.P.save_dif, 1, "nodir183160/" + self.strufile + ) + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when structure is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.save_dif, 1, self.strufile + ) + + +class save_resExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.resfile = "temp.res" + + def tearDown(self): + del self.P + + def test_IOError(self): + """Raise IOError when residual file cannot be saved.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 30.0, 0.0) + self.P.constrain(self.P.lat(1), 1) + self.P.setpar(1, 3.0) + self.P.pdfrange(1, 2.0, 10.0) + self.P.refine_step() + self.assertRaises( + IOError, self.P.save_res, "nodir183160/" + self.resfile + ) + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when structure is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.save_res, self.resfile + ) + + +class save_structExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + # Same code as show_struct + + def setUp(self): + self.P = PdfFit() + self.strufile = "temp.stru" + + def tearDown(self): + del self.P + + def test_IOError(self): + """Raise IOError when structure cannot be saved.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises( + IOError, self.P.save_struct, 1, "nodir183160/" + self.strufile + ) + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when structure is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.save_struct, 1, self.strufile + ) + + +class constrainExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.par = 1 + return + + def tearDown(self): + self.P = None + return + + def test_constraintError(self): + """Raise constraintError when constraint is bad.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.constrain("x(1)", "junk+@1") + self.P.setpar(1, 0.01) + self.assertRaises(pdffit2.constraintError, self.P.calc) + self.assertRaises(pdffit2.constraintError, self.P.refine) + return + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when variable is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.constrain, self.P.x(1), self.par + ) + return + + def test_ValueError(self): + """Raise ValueError when a variable index does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.constrain, self.P.x(6), self.par) + return + + def test_constrainNonRefVar(self): + "raise constraintError when attempting to constrain non-refinables" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises( + pdffit2.constraintError, self.P.constrain, "rcut", "@7" + ) + self.assertRaises( + pdffit2.constraintError, self.P.constrain, "rcut", 13 + ) + self.assertRaises( + pdffit2.constraintError, self.P.constrain, "stepcut", "@17" + ) + return + + +class setvarExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.val = 3.0 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when variable is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.setvar, self.P.lat(1), self.val + ) + + def test_ValueError(self): + """Raise ValueError when a variable index does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.setvar, self.P.lat(7), self.val) + + +class getvarExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when variable is undefined.""" + self.assertRaises( + pdffit2.unassignedError, self.P.getvar, self.P.pscale() + ) + + def test_ValueError(self): + """Raise ValueError when a variable index does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.getvar, self.P.lat(7)) + + +class getRExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.getR) + + +class getpdf_fitExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.getpdf_fit) + + +class getpdf_obsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.getpdf_obs) + + +class getpdf_diffExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.getpdf_diff) + + +class get_atomsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.get_atoms) + + +class getparExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """Raise pdffit2.unassignedError when parameter does not + exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.getpar, 1) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when parameter does not + exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.constrain(self.P.lat(1), 2) + self.assertRaises(pdffit2.unassignedError, self.P.getpar, 1) + + +class pselExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + self.ip = 1 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + +class pdeselExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.ip = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, self.ip) + + +class selectAtomTypeExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.assertRaises( + pdffit2.unassignedError, + self.P.selectAtomType, + self.iset, + "i", + "Ni", + True, + ) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + # selectAtomType should pass with one phase defined + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAtomType(self.iset, "i", "Ni", True) + self.P.selectAtomType(self.iset, "j", "Ni", False) + # but fail for phase 2 which is not present + self.assertRaises( + pdffit2.unassignedError, self.P.selectAtomType, 2, "i", "Ca", True + ) + + def test_ijcharValueError(self): + """Raise ValueError when ijchar is neither 'i' nor 'j'.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAtomType(self.iset, "i", "Ni", True) + self.P.selectAtomType(self.iset, "j", "Ni", True) + self.assertRaises( + ValueError, self.P.selectAtomType, self.iset, "k", "Ni", True + ) + + +class selectAtomIndexExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.assertRaises( + pdffit2.unassignedError, + self.P.selectAtomIndex, + self.iset, + "i", + self.i, + True, + ) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + # pass for phase 1 + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAtomIndex(self.iset, "i", 1, True) + self.P.selectAtomIndex(self.iset, "i", 2, False) + # fail for phase 2 + self.assertRaises( + pdffit2.unassignedError, self.P.selectAtomIndex, 2, "i", 1, True + ) + + def test_ValueError(self): + """Raise ValueError when selected atom does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises( + ValueError, self.P.selectAtomIndex, self.iset, "i", 6, True + ) + + +class selectAllExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.assertRaises( + pdffit2.unassignedError, self.P.selectAll, self.iset, "i" + ) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + # fail when there is no dataset + self.assertRaises( + pdffit2.unassignedError, self.P.selectAll, self.iset, "i" + ) + # pass with dataset + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectAll(self.iset, "i") + self.P.selectAll(self.iset, "j") + # fail for phase 2 + self.assertRaises(pdffit2.unassignedError, self.P.selectAll, 2, "i") + self.assertRaises(pdffit2.unassignedError, self.P.selectAll, 2, "j") + + +class selectNoneExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.iset = 1 + self.i = 1 + + def tearDown(self): + del self.P + + def test_unassignedError1(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.assertRaises( + pdffit2.unassignedError, self.P.selectNone, self.iset, "i" + ) + + def test_unassignedError2(self): + """Raise pdffit2.unassignedError when set does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + # fail when there is no dataset + self.assertRaises( + pdffit2.unassignedError, self.P.selectNone, self.iset, "i" + ) + # pass with dataset + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.selectNone(self.iset, "i") + self.P.selectNone(self.iset, "j") + # fail for phase 2 + self.assertRaises(pdffit2.unassignedError, self.P.selectNone, 2, "i") + self.assertRaises(pdffit2.unassignedError, self.P.selectNone, 2, "j") + + +class bangExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.a1 = 1 + self.a2 = 2 + self.a3 = 3 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.assertRaises( + pdffit2.unassignedError, self.P.bang, self.a1, self.a2, self.a3 + ) + + def test_ValueError1(self): + """Raise ValueError when selected atom(s) does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(ValueError, self.P.bang, 0, self.a2, self.a3) + + def test_ValueError2(self): + """Raise ValueError when selected atom(s) does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.bang, self.a1, -1, self.a3) + + def test_ValueError3(self): + """Raise ValueError when selected atom(s) does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.bang, self.a1, self.a2, 6) + + +class blenExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.a1 = 1 + self.a2 = 2 + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when no data exists.""" + self.assertRaises( + pdffit2.unassignedError, self.P.blen, self.a1, self.a2 + ) + + def test_ValueError1(self): + """Raise ValueError when selected atom(s) does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.blen, 0, self.a2) + + def test_ValueError2(self): + """Raise ValueError when selected atom(s) does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.blen, self.a1, 6) + + def test_ValueError3(self): + """Raise ValueError when selected atom(s) does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertRaises(ValueError, self.P.blen, 0, 6) + + +class show_scatExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.show_scat, "X") + + +# class set_scatExceptions(unittest.TestCase): +# I'm not sure how to use this function + +# def setUp(self): +# self.P = PdfFit() +# +# def test_unassignedError1(self): +# """raise pdffit2.unassignedError when phase does not exist""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) +# +# def test_unassignedError2(self): +# """raise pdffit2.unassignedError when phase does not exist""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) +# +# def test_ValueError(self): +# """raise pdffit2.unassignedError when selected atom does not exist""" +# #self.assertRaises(pdffit2.constraintError, self.P.calc) + + +class num_atomsExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when no atoms exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.num_atoms) + + +class fixparExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when parameter does not + exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.fixpar, 1) + + +class freeparExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when parameter does not + exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.freepar, 1) + + +class setphaseExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when phase does not exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.setphase, 2) + + +class setdataExceptions(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data set does not + exist.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.assertRaises(pdffit2.unassignedError, self.P.setdata, 2) + + +class getcrwExceptions(unittest.TestCase): + def setUp(self): + self.P = PdfFit() + + def tearDown(self): + del self.P + + def test_unassignedError(self): + """Raise pdffit2.unassignedError when data does not exist.""" + self.assertRaises(pdffit2.unassignedError, self.P.getcrw) + + +# main +if __name__ == "__main__": + # suite = unittest.makeSuite(num_atomsExceptions) + # unittest.TextTestRunner(verbosity=3).run(suite) + # testcase = calcExceptions('test_unassignedError') + # unittest.TextTestRunner(verbosity=3).run(testcase) + unittest.main() + +# End of file diff --git a/tests/test_pdffit.py b/tests/test_pdffit.py new file mode 100644 index 00000000..e6823da7 --- /dev/null +++ b/tests/test_pdffit.py @@ -0,0 +1,783 @@ +#!/usr/bin/env python + +"""Unit tests for PdfFit.py.""" + +import unittest + +import pytest + +from diffpy.pdffit2 import pdffit2 +from diffpy.pdffit2.pdffit import PdfFit +from diffpy.structure import loadStructure + +# ---------------------------------------------------------------------------- + + +class TestPdfFit(unittest.TestCase): + places = 6 + + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile, capture_output): + self.datafile = datafile + self.capture_output = capture_output + + def setUp(self): + self.P = PdfFit() + return + + def tearDown(self): + del self.P + return + + def test__exportAll(self): + "check PdfFit._exportAll()" + ns = {} + self.P._exportAll(ns) + self.assertEqual("ALL", ns["ALL"]) + self.assertEqual("FSQR", ns["FSQR"]) + self.assertEqual("N", ns["N"]) + self.assertIs("N", ns["N"]) + self.assertIs(self.P.lat, ns["lat"]) + self.assertEqual(self.P.reset, ns["reset"]) + return + + # def test_intro(self): + # """check PdfFit.intro() + # """ + # return + + def test_add_structure(self): + """Check PdfFit.add_structure()""" + ni = loadStructure(self.datafile("Ni.stru")) + self.P.add_structure(ni) + self.assertEqual(4, self.P.num_atoms()) + return + + # def test_read_struct(self): + # """check PdfFit.read_struct() + # """ + # return + # + # def test_read_struct_string(self): + # """check PdfFit.read_struct_string() + # """ + # return + # + # def test_read_data(self): + # """check PdfFit.read_data() + # """ + # return + + def test_read_data_string(self): + """Check PdfFit.read_data_string()""" + pf = self.P + with open(self.datafile("300K.gr")) as fp: + s = fp.read() + self.assertEqual([], pf.data_files) + pf.read_data_string(s, "N", 32, 0.03, "lmo") + self.assertEqual(1, len(pf.data_files)) + gobs = pf.getpdf_obs() + self.assertEqual(2000, len(gobs)) + self.assertEqual(0.384, gobs[-1]) + self.assertEqual(0.03, pf.getvar("qdamp")) + return + + # def test_read_data_lists(self): + # """check PdfFit.read_data_lists() + # """ + # return + # + # def test_pdfrange(self): + # """check PdfFit.pdfrange() + # """ + # return + # + # def test_reset(self): + # """check PdfFit.reset() + # """ + # return + + def test_alloc(self): + """Check PdfFit.alloc()""" + # alloc and read_struct can be called in any order. + self.P.alloc("X", 25, 0.0, 0.01, 10, 1000) + # without a structure calculated PDF is all zero + self.P.calc() + Gzero = self.P.getpdf_fit() + self.assertEqual(1000 * [0.0], Gzero) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.calc() + # check r-values + r = self.P.getR() + self.assertEqual(1000, len(r)) + for i in range(1000): + self.assertAlmostEqual(0.01 * (i + 1), r[i], self.places) + Gfit_alloc_read = self.P.getpdf_fit() + # now try the other order + self.P.reset() + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 25, 0.0, 0.01, 10, 1000) + self.P.calc() + Gfit_read_alloc = self.P.getpdf_fit() + # and they should be the same + self.assertEqual(Gfit_read_alloc, Gfit_alloc_read) + return + + # def test_calc(self): + # """check PdfFit.calc() + # """ + # return + # + # def test_refine(self): + # """check PdfFit.refine() + # """ + # return + # + # def test_refine_step(self): + # """check PdfFit.refine_step() + # """ + # return + # + # def test_save_pdf(self): + # """check PdfFit.save_pdf() + # """ + # return + # + # def test_save_pdf_string(self): + # """check PdfFit.save_pdf_string() + # """ + # return + # + # def test_save_dif(self): + # """check PdfFit.save_dif() + # """ + # return + # + # def test_save_dif_string(self): + # """check PdfFit.save_dif_string() + # """ + # return + # + # def test_save_res(self): + # """check PdfFit.save_res() + # """ + # return + # + # def test_save_res_string(self): + # """check PdfFit.save_res_string() + # """ + # return + + def test_get_structure(self): + """Check PdfFit.get_structure()""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + stru1 = self.P.get_structure(1) + self.assertEqual(4, len(stru1)) + self.assertEqual("Ni", stru1[0].element) + stru2 = self.P.get_structure(2) + self.assertEqual(56, len(stru2)) + self.assertEqual("Ti", stru2[-1].element) + return + + # def test_save_struct(self): + # """check PdfFit.save_struct() + # """ + # return + # + # def test_save_struct_string(self): + # """check PdfFit.save_struct_string() + # """ + # return + # + # def test_show_struct(self): + # """check PdfFit.show_struct() + # """ + # return + # + # def test_constrain(self): + # """check PdfFit.constrain() + # """ + # return + + def test_setpar(self): + """Check PdfFit.setpar()""" + pf = self.P + pf.read_struct(self.datafile("Ni.stru")) + pf.setpar(1, "lat(1)") + self.assertEqual(3.52, pf.getpar(1)) + pf.setpar(1, 4.0) + self.assertEqual(4, pf.getpar(1)) + pf.setpar(1, pf.lat("a")) + self.assertEqual(3.52, pf.getpar(1)) + return + + def test_setvar(self): + """Check PdfFit.setvar()""" + pf = self.P + pf.read_struct(self.datafile("Ni.stru")) + pf.setvar(pf.delta1, 1.2) + self.assertEqual(1.2, pf.getvar(pf.delta1)) + pf.setvar("delta1", 1.7) + self.assertEqual(1.7, pf.getvar("delta1")) + return + + # def test_getvar(self): + # """check PdfFit.getvar() + # """ + # return + # + # def test_getrw(self): + # """check PdfFit.getrw() + # """ + # return + # + # def test_getR(self): + # """check PdfFit.getR() + # """ + # return + # + # def test_getpdf_fit(self): + # """check PdfFit.getpdf_fit() + # """ + # return + # + # def test_getpdf_obs(self): + # """check PdfFit.getpdf_obs() + # """ + # return + # + # def test_getpdf_diff(self): + # """check PdfFit.getpdf_diff() + # """ + # return + + def test_get_atoms(self): + """Check PdfFit.get_atoms()""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.setphase(1) + a1 = self.P.get_atoms() + a2 = self.P.get_atoms(2) + self.assertEqual(4 * ["NI"], a1) + self.assertEqual( + 8 * ["PB"] + 24 * ["O"] + 8 * ["SC"] + 8 * ["W"] + 8 * ["TI"], a2 + ) + return + + def test_get_atom_types(self): + """Check PdfFit.get_atom_types()""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.setphase(1) + atp1 = self.P.get_atom_types() + atp2 = self.P.get_atom_types(2) + self.assertEqual(["NI"], atp1) + self.assertEqual(["PB", "O", "SC", "W", "TI"], atp2) + return + + def test_num_phases(self): + """Check PdfFit.num_phases()""" + self.assertEqual(0, self.P.num_phases()) + self.P.read_struct(self.datafile("Ni.stru")) + self.assertEqual(1, self.P.num_phases()) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.assertEqual(2, self.P.num_phases()) + self.P.reset() + self.assertEqual(0, self.P.num_phases()) + return + + def test_num_datasets(self): + """Check PdfFit.num_datasets()""" + self.assertEqual(0, self.P.num_datasets()) + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.5) + self.assertEqual(1, self.P.num_datasets()) + # failed data should not increase num_datasets + try: + self.P.read_data(self.datafile("badNi.dat")) + except (RuntimeError, TypeError, NameError, ValueError, IOError): + pass + self.assertEqual(1, self.P.num_datasets()) + # alloc should increase number of datasets + # alloc requires a loaded structure + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + self.assertEqual(2, self.P.num_datasets()) + self.P.reset() + self.assertEqual(0, self.P.num_datasets()) + return + + def test_getcrw(self): + """Check PdfFit.getcrw()""" + import numpy + + self.assertEqual(0, self.P.num_datasets()) + # Setting qmax=0 so that partial crw are not disturbed by + # termination ripples. + self.P.read_data(self.datafile("Ni.dat"), "X", 0.0, 0.0) + # crw is empty before data refinement + self.assertEqual([], self.P.getcrw()) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.pdfrange(1, 2, 19) + self.P.refine() + crw19 = numpy.array(self.P.getcrw()) + self.assertTrue(numpy.all(crw19 >= 0.0)) + # check that crw19 is non decreasing + self.assertTrue(numpy.all(numpy.diff(crw19) >= 0.0)) + # check that crw19 and getrw give the same value + rw19 = crw19[-1] + self.assertAlmostEqual(self.P.getrw(), rw19, self.places) + # renormalize cumulative Rw and compare with Rw at r=15 + Gobs19 = numpy.array(self.P.getpdf_obs()) + Gnorm19 = numpy.sqrt(numpy.sum(Gobs19**2)) + r = numpy.array(self.P.getR()) + idx = numpy.nonzero(r <= 15)[0] + Gnorm15 = numpy.sqrt(numpy.sum(Gobs19[idx] ** 2)) + i15 = idx[-1] + rw15 = crw19[i15] * Gnorm19 / Gnorm15 + self.P.pdfrange(1, 2, r[i15] + 1e-5) + self.P.refine() + self.assertAlmostEqual(self.P.getrw(), rw15, self.places) + return + + def test_getcrw_two_datasets(self): + """Check that getcrw() and getrw() are consistent for two + datasets.""" + self.P.read_data(self.datafile("Ni.dat"), "X", 25.0, 0.0) + self.P.pdfrange(1, 2, 8) + self.P.read_data(self.datafile("300K.gr"), "N", 32.0, 0.0) + self.P.pdfrange(2, 1, 11) + self.P.read_struct(self.datafile("Ni.stru")) + # mess lattice parameters to have comparable Rw contributions + self.P.setvar("lat(1)", 3) + self.P.setvar("lat(2)", 3) + self.P.setvar("lat(3)", 3) + self.P.refine() + rwtot = self.P.getrw() + self.assertTrue(rwtot > 0.0) + self.P.setdata(1) + rw1 = self.P.getcrw()[-1] + self.P.setdata(2) + rw2 = self.P.getcrw()[-1] + self.assertAlmostEqual(rwtot**2, rw1**2 + rw2**2, self.places) + return + + # def test_getpar(self): + # """check PdfFit.getpar() + # """ + # return + + def test_fixpar(self): + """Check PdfFit.fixpar()""" + self.P.fixpar("all") + self.assertRaises(TypeError, self.P.fixpar, "x") + return + + def test_freepar(self): + """Check PdfFit.freepar()""" + self.P.freepar("all") + self.assertRaises(TypeError, self.P.freepar, "x") + return + + # def test_setphase(self): + # """check PdfFit.setphase() + # """ + # return + # + # def test_setdata(self): + # """check PdfFit.setdata() + # """ + # return + # + def test_psel(self): + """Check PdfFit.psel()""" + + def doalloc(): + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + return + + self.assertRaises(pdffit2.unassignedError, self.P.psel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.psel, 1) + self.P.read_struct(self.datafile("Ni.stru")) + doalloc() + self.P.calc() + G1 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + doalloc() + self.P.calc() + G2 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + doalloc() + self.P.pdesel("ALL") + self.P.psel(1) + self.P.calc() + self.assertEqual(G1, self.P.getpdf_fit()) + self.P.pdesel("ALL") + self.P.psel(2) + self.P.calc() + self.assertEqual(G2, self.P.getpdf_fit()) + self.P.psel("ALL") + self.P.calc() + Gall = self.P.getpdf_fit() + dGmax = max( + [abs(g1 + g2 - gall) for g1, g2, gall in zip(G1, G2, Gall)] + ) + self.assertAlmostEqual(0, dGmax, self.places) + self.assertRaises(pdffit2.unassignedError, self.P.psel, 10) + self.assertRaises(pdffit2.unassignedError, self.P.psel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.psel, -100) + return + + def test_pdesel(self): + """Check PdfFit.pdesel()""" + + def doalloc(): + self.P.alloc("X", 30.0, 0.05, 2, 10, 100) + return + + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 1) + self.P.read_struct(self.datafile("Ni.stru")) + doalloc() + self.P.calc() + G1 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + doalloc() + self.P.calc() + G2 = self.P.getpdf_fit() + self.P.reset() + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + doalloc() + self.P.psel("ALL") + self.P.pdesel(2) + self.P.calc() + self.assertEqual(G1, self.P.getpdf_fit()) + self.P.psel("ALL") + self.P.pdesel(1) + self.P.calc() + self.assertEqual(G2, self.P.getpdf_fit()) + self.P.pdesel("ALL") + self.P.calc() + G0 = self.P.getpdf_fit() + self.assertEqual([0.0] * len(G0), G0) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 10) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, 0) + self.assertRaises(pdffit2.unassignedError, self.P.pdesel, -100) + return + + # + # def test_selectAtomType(self): + # """check PdfFit.selectAtomType() + # """ + # return + # + # def test_selectAtomIndex(self): + # """check PdfFit.selectAtomIndex() + # """ + # return + # + # def test_selectAll(self): + # """check PdfFit.selectAll() + # """ + # return + # + # def test_selectNone(self): + # """check PdfFit.selectNone() + # """ + # return + + def test_bond_angle(self): + """Check PdfFit.bond_angle()""" + self.P.read_struct(self.datafile("Ni.stru")) + a, e = self.P.bond_angle(1, 2, 3) + self.assertAlmostEqual(60.0, a, self.places) + self.assertRaises(ValueError, self.P.bond_angle, 0, 1, 2) + self.assertRaises(ValueError, self.P.bond_angle, 1, 2, 7) + return + + def test_bang(self): + "check PdfFit.bang() function" + self.P.read_struct(self.datafile("Ni.stru")) + out = self.capture_output(self.P.bang, 1, 2, 3).strip() + self.assertTrue(out.endswith("60 degrees")) + self.assertTrue(out.startswith("NI (#1) - NI (#2) - NI (#3)")) + return + + def test_bond_length_atoms(self): + """Check PdfFit.bond_length_atoms()""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + dij, ddij = self.P.bond_length_atoms(1, 5) + self.assertAlmostEqual(4.03635, dij, self.places) + self.P.setphase(1) + self.assertRaises(ValueError, self.P.bond_length_atoms, 1, 5) + return + + def test_bond_length_types(self): + """Check PdfFit.bond_length_types()""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + dPbO = self.P.bond_length_types("Pb", "O", 0.1, 3.0) + # check if keys are present + self.assertTrue("dij" in dPbO) + self.assertTrue("ddij" in dPbO) + self.assertTrue("ij0" in dPbO) + self.assertTrue("ij1" in dPbO) + # check if they have the same length + npts = len(dPbO["dij"]) + self.assertEqual(npts, len(dPbO["ddij"])) + self.assertEqual(npts, len(dPbO["ij0"])) + self.assertEqual(npts, len(dPbO["ij1"])) + # 8 Pb atoms have coordination 12 in perovskite structure + self.assertEqual(8 * 12, len(dPbO["dij"])) + self.P.setphase(1) + dfcc = self.P.bond_length_types("ALL", "ALL", 0.1, 2.6) + # 4 Ni atoms with coordination 12 + self.assertEqual(4 * 12, len(dfcc["dij"])) + # invalid element + self.assertRaises( + ValueError, self.P.bond_length_types, "Ni", "Nix", 0.1, 5.0 + ) + # check indices ij0 + allij0 = sum(dfcc["ij0"], tuple()) + self.assertEqual(0, min(allij0)) + self.assertEqual(3, max(allij0)) + # check indices ij1 + allij1 = sum(dfcc["ij1"], tuple()) + self.assertEqual(1, min(allij1)) + self.assertEqual(4, max(allij1)) + # check index values + ij0check = [(i1 - 1, j1 - 1) for i1, j1 in dfcc["ij1"]] + self.assertEqual(ij0check, dfcc["ij0"]) + # test valid element which is not present in the structure + dnone = self.P.bond_length_types("Ni", "Au", 0.1, 5.0) + self.assertEqual(0, len(dnone["dij"])) + self.assertEqual(0, len(dnone["ddij"])) + self.assertEqual(0, len(dnone["ij0"])) + self.assertEqual(0, len(dnone["ij1"])) + return + + def test_blen(self): + """Check PdfFit.blen()""" + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + blen = self.P.blen + o = self.capture_output(blen, 1, 5).strip() + self.assertTrue(o.endswith("4.03635 A")) + self.assertTrue("PB (#1)" in o) + self.assertTrue("PB (#5)" in o) + self.assertRaises(ValueError, blen, 1, 99) + self.assertRaises(ValueError, blen, 0, 1) + o1 = self.capture_output(blen, 1, 1, 0.1, 1) + self.assertTrue("No pairs found" in o1) + o2 = self.capture_output(blen, 1, 50, 0.1, 1) + self.assertEqual("", o2) + o3 = self.capture_output(blen, "Sc", "O", 0.5, 2.3).strip() + self.assertEqual(1 + 48, len(o3.split("\n"))) + self.assertEqual(6, o3.count("SC (#33)")) + self.assertEqual(2, o3.count("O (#9)")) + self.assertRaises(TypeError, blen, "Sc", "O", 0.5) + return + + # def test_show_scat(self): + # """check PdfFit.show_scat() + # """ + # return + # + # def test_get_scat_string(self): + # """check PdfFit.get_scat_string() + # """ + # return + + def test_get_scat(self): + """Check PdfFit.get_scat()""" + # x-ray scattering factors + fPb = self.P.get_scat("X", "Pb") + self.assertEqual(82.0, fPb) + fTi = self.P.get_scat("X", "tI") + self.assertEqual(22.0, fTi) + # neutron scattering lengths + bPb = self.P.get_scat("N", "PB") + self.assertAlmostEqual(9.401, bPb, 3) + bTi = self.P.get_scat("N", "ti") + self.assertAlmostEqual(-3.370, bTi, 3) + # exceptions + self.assertRaises(ValueError, self.P.get_scat, "N", "zz") + self.assertRaises(ValueError, self.P.get_scat, "Z", "Ti") + return + + def test_set_scat(self): + """Check PdfFit.set_scat()""" + # raises exception when no phase exists + self.assertRaises( + pdffit2.unassignedError, self.P.set_scat, "N", "Ti", -11 + ) + # check if it is local to phase + fPb = self.P.get_scat("X", "Pb") + bPb = self.P.get_scat("N", "Pb") + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.set_scat("X", "Pb", 142) + self.assertEqual(142, self.P.get_scat("X", "Pb")) + self.assertEqual(bPb, self.P.get_scat("N", "Pb")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.assertEqual(fPb, self.P.get_scat("X", "Pb")) + self.P.setphase(1) + self.assertEqual(142, self.P.get_scat("X", "Pb")) + self.P.setphase(2) + self.assertEqual(fPb, self.P.get_scat("X", "Pb")) + # check exception for invalid inputs + self.assertRaises(ValueError, self.P.set_scat, "Z", "C", 123) + self.assertRaises(ValueError, self.P.set_scat, "X", "ZZ", 123) + return + + def test_reset_scat(self): + """Check PdfFit.reset_scat()""" + # raises exception when no phase exists + self.assertRaises(pdffit2.unassignedError, self.P.reset_scat, "Ti") + # check if it is local to phase + fPb = self.P.get_scat("X", "Pb") + bPb = self.P.get_scat("N", "Pb") + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.set_scat("X", "Pb", 142) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.set_scat("N", "Pb", -17) + self.P.setphase(1) + self.assertNotEqual(fPb, self.P.get_scat("X", "Pb")) + self.P.reset_scat("Pb") + self.assertEqual(fPb, self.P.get_scat("X", "Pb")) + self.P.setphase(2) + self.assertNotEqual(bPb, self.P.get_scat("N", "Pb")) + self.P.reset_scat("Pb") + self.assertEqual(bPb, self.P.get_scat("N", "Pb")) + # check exception for invalid inputs + self.assertRaises(ValueError, self.P.reset_scat, "Zz") + return + + def test_num_atoms(self): + """Check PdfFit.num_atoms()""" + self.P.read_struct(self.datafile("Ni.stru")) + self.assertEqual(4, self.P.num_atoms()) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.assertEqual(56, self.P.num_atoms()) + self.P.setphase(1) + self.assertEqual(4, self.P.num_atoms()) + self.P.setphase(2) + self.assertEqual(56, self.P.num_atoms()) + return + + def test_lat(self): + """Check PdfFit.lat()""" + pf = self.P + pf.read_struct(self.datafile("Ni.stru")) + for i in ("a", "b", "c", 1, 2, 3): + self.assertEqual(3.52, pf.getvar(pf.lat(i))) + for i in ("alpha", "beta", "gamma", 4, 5, 6): + self.assertEqual(90, pf.getvar(pf.lat(i))) + return + + def test_xyz(self): + """Check PdfFit.x() PdfFit.y(), PdfFit.z()""" + pf = self.P + pf.read_struct(self.datafile("Ni.stru")) + self.assertEqual(0.5, pf.getvar(pf.x(3))) + self.assertEqual(0, pf.getvar(pf.y(3))) + self.assertEqual(0.5, pf.getvar(pf.z(3))) + return + + def test_uij(self): + """Check PdfFit.uij()""" + ni = loadStructure(self.datafile("Ni.stru")) + ni[2].anisotropy = True + ni[2].U11, ni[2].U22, ni[2].U33 = 1, 2, 3 + ni[2].U12, ni[2].U13, ni[2].U23 = 4, 5, 6 + pf = self.P + pf.add_structure(ni) + self.assertEqual(1, pf.getvar(pf.u11(3))) + self.assertEqual(2, pf.getvar(pf.u22(3))) + self.assertEqual(3, pf.getvar(pf.u33(3))) + self.assertEqual(4, pf.getvar(pf.u12(3))) + self.assertEqual(5, pf.getvar(pf.u13(3))) + self.assertEqual(6, pf.getvar(pf.u23(3))) + return + + def test_occ(self): + """Check PdfFit.occ()""" + pf = self.P + pf.read_struct(self.datafile("Ni.stru")) + for i in range(1, 5): + self.assertEqual(1, pf.getvar(pf.occ(i))) + return + + # def test_pscale(self): + # """check PdfFit.pscale() + # """ + # return + # + # def test_pscale(self): + # """check PdfFit.pscale() + # """ + # return + # + # def test_sratio(self): + # """check PdfFit.sratio() + # """ + # return + # + # def test_delta1(self): + # """check PdfFit.delta1() + # """ + # return + # + # def test_delta2(self): + # """check PdfFit.delta2() + # """ + # return + # + # def test_dscale(self): + # """check PdfFit.dscale() + # """ + # return + # + # def test_qdamp(self): + # """check PdfFit.qdamp() + # """ + # return + # + # def test_qbroad(self): + # """check PdfFit.qbroad() + # """ + # return + # + # def test_rcut(self): + # """check PdfFit.rcut() + # """ + # return + # + + def test___init__(self): + """Check PdfFit.__init__()""" + output_true = self.capture_output(PdfFit, create_intro=True).strip() + output_false = self.capture_output(PdfFit, create_intro=False).strip() + + self.assertGreater(len(output_true), 0) + self.assertEqual(len(output_false), 0) + + return + + +# +# def test__PdfFit__getRef(self): +# """check PdfFit._PdfFit__getRef() +# """ +# return + +# End of class TestPdfFit + +if __name__ == "__main__": + unittest.main() + +# End of file diff --git a/tests/test_phase_fractions.py b/tests/test_phase_fractions.py new file mode 100644 index 00000000..c86961e4 --- /dev/null +++ b/tests/test_phase_fractions.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python + +"""Unit tests for phase fraction calculations.""" + +import unittest + +import pytest + +from diffpy.pdffit2.pdffit import PdfFit + + +############################################################################## +class TestPhaseFractions(unittest.TestCase): + places = 4 + + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + + def setUp(self): + self.P = PdfFit() + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.alloc("N", 0.0, 0.05, 0.1, 10, 200) + return + + def tearDown(self): + del self.P + return + + def test_xray_fractions(self): + """test_xray_fractions -- check phase fractions in x-ray dataset.""" + self.P.setdata(1) + ph = self.P.phase_fractions() + bb1 = 28**2 + bb2 = ((8 * 82 + 24 * 8 + 4 * 21 + 2 * 74 + 2 * 22) / 40.0) ** 2 + self.assertAlmostEqual(1.0, sum(ph["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["mass"]), self.places) + self.assertAlmostEqual( + bb2 / bb1, ph["atom"][0] / ph["atom"][1], self.places + ) + self.assertAlmostEqual( + bb2 / bb1 * 40.0 / 4.0, ph["cell"][0] / ph["cell"][1], self.places + ) + mavg1 = 58.69 + mavg2 = ( + 8 * 207.19 + 24 * 15.994 + 4 * 44.956 + 2 * 183.85 + 2 * 47.90 + ) / 40.0 + self.assertAlmostEqual( + bb2 / bb1 * mavg1 / mavg2, + ph["mass"][0] / ph["mass"][1], + self.places, + ) + self.assertEqual(0.0, sum(ph["stdatom"])) + self.assertEqual(0.0, sum(ph["stdcell"])) + self.assertEqual(0.0, sum(ph["stdmass"])) + self.P.setphase(1) + self.P.setvar("pscale", 2.0) + ph2 = self.P.phase_fractions() + self.assertAlmostEqual(1.0, sum(ph2["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["mass"]), self.places) + self.assertAlmostEqual( + 2.0, + ph2["atom"][0] / ph2["atom"][1] / (ph["atom"][0] / ph["atom"][1]), + self.places, + ) + self.assertAlmostEqual( + 2.0, + ph2["cell"][0] / ph2["cell"][1] / (ph["cell"][0] / ph["cell"][1]), + self.places, + ) + self.assertAlmostEqual( + 2.0, + ph2["mass"][0] / ph2["mass"][1] / (ph["mass"][0] / ph["mass"][1]), + self.places, + ) + return + + def test_neutron_fractions(self): + """test_neutron_fractions -- check phase fractions in neutron dataset.""" + self.P.setdata(2) + ph = self.P.phase_fractions() + bb1 = 10.31**2 + bPb = 9.4012 + bO = 5.8054 + bSc = 12.11 + bW = 4.75518 + bTi = -3.37013 + bb2 = ((8 * bPb + 24 * bO + 4 * bSc + 2 * bW + 2 * bTi) / 40.0) ** 2 + self.assertAlmostEqual(1.0, sum(ph["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph["mass"]), self.places) + self.assertAlmostEqual( + bb2 / bb1, ph["atom"][0] / ph["atom"][1], self.places + ) + self.assertAlmostEqual( + bb2 / bb1 * 40.0 / 4.0, ph["cell"][0] / ph["cell"][1], self.places + ) + mavg1 = 58.69 + mavg2 = ( + 8 * 207.19 + 24 * 15.994 + 4 * 44.956 + 2 * 183.85 + 2 * 47.90 + ) / 40.0 + self.assertAlmostEqual( + bb2 / bb1 * mavg1 / mavg2, + ph["mass"][0] / ph["mass"][1], + self.places, + ) + self.assertEqual(0.0, sum(ph["stdatom"])) + self.assertEqual(0.0, sum(ph["stdcell"])) + self.assertEqual(0.0, sum(ph["stdmass"])) + self.P.setphase(1) + self.P.setvar("pscale", 2.0) + ph2 = self.P.phase_fractions() + self.assertAlmostEqual(1.0, sum(ph2["atom"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["cell"]), self.places) + self.assertAlmostEqual(1.0, sum(ph2["mass"]), self.places) + self.assertAlmostEqual( + 2.0, + ph2["atom"][0] / ph2["atom"][1] / (ph["atom"][0] / ph["atom"][1]), + self.places, + ) + self.assertAlmostEqual( + 2.0, + ph2["cell"][0] / ph2["cell"][1] / (ph["cell"][0] / ph["cell"][1]), + self.places, + ) + self.assertAlmostEqual( + 2.0, + ph2["mass"][0] / ph2["mass"][1] / (ph["mass"][0] / ph["mass"][1]), + self.places, + ) + return + + +# End of class TestSphereEnvelope + +if __name__ == "__main__": + unittest.main() + +# End of file diff --git a/diffpy/pdffit2/tests/TestShapeFactors.py b/tests/test_shape_factors.py similarity index 50% rename from diffpy/pdffit2/tests/TestShapeFactors.py rename to tests/test_shape_factors.py index 26e5bb46..ee61c9ac 100644 --- a/diffpy/pdffit2/tests/TestShapeFactors.py +++ b/tests/test_shape_factors.py @@ -1,19 +1,19 @@ #!/usr/bin/env python -"""Unit tests for particle shape envelope factors. -""" +"""Unit tests for particle shape envelope factors.""" import unittest + import numpy +import pytest -from diffpy.pdffit2 import PdfFit from diffpy.pdffit2 import pdffit2 -from diffpy.pdffit2.tests.pdffit2testutils import datafile +from diffpy.pdffit2.pdffit import PdfFit def spherefactor(r, d): - """Calculate spherical envelope correction + """Calculate spherical envelope correction. r -- PDF radius d -- diameter of spherical particle @@ -21,7 +21,7 @@ def spherefactor(r, d): Return numpy array of shape correction envelope. """ r1 = numpy.array(r) - fsph = 1.0 - 1.5*r1/d + 0.5*(r1/d)**3 + fsph = 1.0 - 1.5 * r1 / d + 0.5 * (r1 / d) ** 3 fsph[r1 > d] = 0.0 return fsph @@ -31,6 +31,10 @@ class TestSphereEnvelope(unittest.TestCase): places = 6 + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + def setUp(self): self.P = PdfFit() return @@ -39,33 +43,29 @@ def tearDown(self): self.P = None return - def test_calculation(self): - """check calculation of sphere envelope factor - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) + """Check calculation of sphere envelope factor.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) self.P.calc() d = 8.0 r = numpy.array(self.P.getR()) G0 = numpy.array(self.P.getpdf_fit()) - self.P.setvar('spdiameter', d) + self.P.setvar("spdiameter", d) self.P.calc() G1 = numpy.array(self.P.getpdf_fit()) - dG = (G0*spherefactor(r, d) - G1) - msd = numpy.dot(dG, dG)/len(r) + dG = G0 * spherefactor(r, d) - G1 + msd = numpy.dot(dG, dG) / len(r) self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) return - def test_refinement(self): - """check refinement of sphere envelope factor - """ + """Check refinement of sphere envelope factor.""" dcheck = 8.0 dstart = 12.0 - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('spdiameter', dcheck) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", dcheck) self.P.calc() r = numpy.array(self.P.getR()) Gd8 = numpy.array(self.P.getpdf_fit()) @@ -73,65 +73,63 @@ def test_refinement(self): Gd8noise[::2] += 0.01 Gd8noise[1::2] -= 0.01 self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_data_lists('X', 0.0, 0.05, list(r), list(Gd8noise)) - self.P.constrain('spdiameter', '@8') + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_data_lists("X", 0.0, 0.05, list(r), list(Gd8noise)) + self.P.constrain("spdiameter", "@8") self.P.setpar(8, dstart) self.P.refine() - dfinal = self.P.getvar('spdiameter') + dfinal = self.P.getvar("spdiameter") self.assertAlmostEqual(dcheck, dfinal, 3) return - def test_twophase_calculation(self): - """check PDF calculation for 2 phases with different spdiameters - """ + """Check PDF calculation for 2 phases with different + spdiameters.""" d1 = 6 d2 = 9 - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('spdiameter', d1) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", d1) self.P.calc() G1 = numpy.array(self.P.getpdf_fit()) self.P.reset() - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('spdiameter', d2) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", d2) self.P.calc() G2 = numpy.array(self.P.getpdf_fit()) self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) self.P.setphase(1) - self.P.setvar('spdiameter', d1) + self.P.setvar("spdiameter", d1) self.P.setphase(2) - self.P.setvar('spdiameter', d2) + self.P.setvar("spdiameter", d2) self.P.calc() Gtot = numpy.array(self.P.getpdf_fit()) - dG = (G1 + G2 - Gtot) + dG = G1 + G2 - Gtot r = numpy.array(self.P.getR()) - msd = numpy.dot(dG, dG)/len(r) + msd = numpy.dot(dG, dG) / len(r) self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) return - def test_twophase_refinement(self): - """check PDF refinement of 2 phases that have different spdiameter. - """ + """Check PDF refinement of 2 phases that have different + spdiameter.""" dcheck1 = 8.0 dstart1 = 8.2 dcheck2 = 6.0 dstart2 = 5.5 - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('spdiameter', dcheck1) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", dcheck1) self.P.calc() G1 = numpy.array(self.P.getpdf_fit()) self.P.reset() - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('spdiameter', dcheck2) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("spdiameter", dcheck2) self.P.calc() G2 = numpy.array(self.P.getpdf_fit()) r = numpy.array(self.P.getR()) @@ -139,48 +137,49 @@ def test_twophase_refinement(self): Gnoise[::2] += 0.01 Gnoise[1::2] -= 0.01 self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.read_data_lists('X', 0.0, 0.05, list(r), list(Gnoise)) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.read_data_lists("X", 0.0, 0.05, list(r), list(Gnoise)) self.P.setphase(1) - self.P.constrain('spdiameter', '@11') + self.P.constrain("spdiameter", "@11") self.P.setphase(2) - self.P.constrain('spdiameter', '@12') + self.P.constrain("spdiameter", "@12") self.P.setpar(11, dstart1) self.P.setpar(12, dstart2) self.P.refine() - dfinal2 = self.P.getvar('spdiameter') + dfinal2 = self.P.getvar("spdiameter") self.P.setphase(1) - dfinal1 = self.P.getvar('spdiameter') + dfinal1 = self.P.getvar("spdiameter") self.assertAlmostEqual(dcheck1, dfinal1, 3) self.assertAlmostEqual(dcheck2, dfinal2, 3) return - def test_spdiameter_io(self): - """Check reading and writing of spdiameter from structure file. - """ + """Check reading and writing of spdiameter from structure + file.""" import re - self.P.read_struct(datafile('Ni.stru')) - self.assertEqual(0.0, self.P.getvar('spdiameter')) + + self.P.read_struct(self.datafile("Ni.stru")) + self.assertEqual(0.0, self.P.getvar("spdiameter")) # engine should not write shape factor when not defined spdnone = self.P.save_struct_string(1) - self.assertTrue(not re.search('(?m)^shape +sphere,', spdnone)) - self.P.setvar('spdiameter', 7) + self.assertTrue(not re.search("(?m)^shape +sphere,", spdnone)) + self.P.setvar("spdiameter", 7) spd7 = self.P.save_struct_string(1) # spd7 should contain shape factor data - self.assertTrue(re.search('(?m)^shape +sphere,', spd7)) + self.assertTrue(re.search("(?m)^shape +sphere,", spd7)) self.P.reset() self.P.read_struct_string(spd7) - self.assertEqual(7.0, self.P.getvar('spdiameter')) + self.assertEqual(7.0, self.P.getvar("spdiameter")) # try to read without comma - spd14 = re.sub('(?m)^shape +sphere.*$', 'shape sphere 14.00', spd7) + spd14 = re.sub("(?m)^shape +sphere.*$", "shape sphere 14.00", spd7) self.P.read_struct_string(spd14) - self.assertEqual(14.0, self.P.getvar('spdiameter')) + self.assertEqual(14.0, self.P.getvar("spdiameter")) # try to read invalid shape data - sinvalid = re.sub('(?m)^shape .*', 'shape invalid, 1', spd7) - self.assertRaises(pdffit2.structureError, - self.P.read_struct_string, sinvalid) + sinvalid = re.sub("(?m)^shape .*", "shape invalid, 1", spd7) + self.assertRaises( + pdffit2.structureError, self.P.read_struct_string, sinvalid + ) return @@ -190,6 +189,10 @@ def test_spdiameter_io(self): ############################################################################## class TestStepCutEnvelope(unittest.TestCase): + @pytest.fixture(autouse=True) + def prepare_fixture(self, datafile): + self.datafile = datafile + places = 6 def setUp(self): @@ -200,91 +203,88 @@ def tearDown(self): self.P = None return - def test_stepcut_calculation(self): - """check calculation of sphere envelope factor - """ - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) + """Check calculation of sphere envelope factor.""" + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) self.P.calc() stepcut = 8.0 r = numpy.array(self.P.getR()) G0 = numpy.array(self.P.getpdf_fit()) G0[r > stepcut] = 0.0 - self.P.setvar('stepcut', stepcut) + self.P.setvar("stepcut", stepcut) self.P.calc() G1 = numpy.array(self.P.getpdf_fit()) - dG = (G0 - G1) - msd = numpy.dot(dG, dG)/len(r) + dG = G0 - G1 + msd = numpy.dot(dG, dG) / len(r) self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) return - def test_twophase_stepcut_calculation(self): - """check PDF calculation for 2 phases with different spdiameters - """ + """Check PDF calculation for 2 phases with different + spdiameters.""" d1 = 6 d2 = 9 - self.P.read_struct(datafile('Ni.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('stepcut', d1) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("stepcut", d1) self.P.calc() G1 = numpy.array(self.P.getpdf_fit()) self.P.reset() - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) - self.P.setvar('stepcut', d2) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) + self.P.setvar("stepcut", d2) self.P.calc() G2 = numpy.array(self.P.getpdf_fit()) self.P.reset() - self.P.read_struct(datafile('Ni.stru')) - self.P.read_struct(datafile('PbScW25TiO3.stru')) - self.P.alloc('X', 0.0, 0.05, 0.1, 10, 200) + self.P.read_struct(self.datafile("Ni.stru")) + self.P.read_struct(self.datafile("PbScW25TiO3.stru")) + self.P.alloc("X", 0.0, 0.05, 0.1, 10, 200) self.P.setphase(1) - self.P.setvar('stepcut', d1) + self.P.setvar("stepcut", d1) self.P.setphase(2) - self.P.setvar('stepcut', d2) + self.P.setvar("stepcut", d2) self.P.calc() Gtot = numpy.array(self.P.getpdf_fit()) - dG = (G1 + G2 - Gtot) + dG = G1 + G2 - Gtot r = numpy.array(self.P.getR()) - msd = numpy.dot(dG, dG)/len(r) + msd = numpy.dot(dG, dG) / len(r) self.assertAlmostEqual(0.0, numpy.sqrt(msd), self.places) # G after step should be zero self.assertTrue(numpy.all(0 == Gtot[r > max(d1, d2)])) return - def test_stepcut_io(self): - """Check reading and writing of stepcut from structure file. - """ + """Check reading and writing of stepcut from structure file.""" import re - self.P.read_struct(datafile('Ni.stru')) - self.assertEqual(0.0, self.P.getvar('stepcut')) + + self.P.read_struct(self.datafile("Ni.stru")) + self.assertEqual(0.0, self.P.getvar("stepcut")) # engine should not write shape factor when not defined sscnone = self.P.save_struct_string(1) - self.assertTrue(not re.search('(?m)^shape +stepcut,', sscnone)) - self.P.setvar('stepcut', 7) + self.assertTrue(not re.search("(?m)^shape +stepcut,", sscnone)) + self.P.setvar("stepcut", 7) ssc7 = self.P.save_struct_string(1) # ssc7 should contain shape factor data - self.assertTrue(re.search('(?m)^shape +stepcut,', ssc7)) + self.assertTrue(re.search("(?m)^shape +stepcut,", ssc7)) self.P.reset() self.P.read_struct_string(ssc7) - self.assertEqual(7.0, self.P.getvar('stepcut')) + self.assertEqual(7.0, self.P.getvar("stepcut")) # try to read without comma - ssc14 = re.sub('(?m)^shape +stepcut.*$', 'shape stepcut 14.00', ssc7) + ssc14 = re.sub("(?m)^shape +stepcut.*$", "shape stepcut 14.00", ssc7) self.P.read_struct_string(ssc14) - self.assertEqual(14.0, self.P.getvar('stepcut')) + self.assertEqual(14.0, self.P.getvar("stepcut")) # try to read invalid shape data - sinvalid = re.sub('(?m)^shape .*', 'shape invalid, 1', ssc7) - self.assertRaises(pdffit2.structureError, - self.P.read_struct_string, sinvalid) + sinvalid = re.sub("(?m)^shape .*", "shape invalid, 1", ssc7) + self.assertRaises( + pdffit2.structureError, self.P.read_struct_string, sinvalid + ) return # End of class TestStepCutEnvelope -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() # End of file diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 00000000..a232202f --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,10 @@ +"""Unit tests for __version__.py.""" + +import diffpy.pdffit2 # noqa + + +def test_package_version(): + """Ensure the package version is defined and not set to the initial + placeholder.""" + assert hasattr(diffpy.pdffit2, "__version__") + assert diffpy.pdffit2.__version__ != "0.0.0" diff --git a/diffpy/pdffit2/tests/testdata/300K.gr b/tests/testdata/300K.gr similarity index 99% rename from diffpy/pdffit2/tests/testdata/300K.gr rename to tests/testdata/300K.gr index 7a6c0968..15578911 100644 --- a/diffpy/pdffit2/tests/testdata/300K.gr +++ b/tests/testdata/300K.gr @@ -1,5 +1,5 @@ History written: Fri Apr 30 13:05:36 2004 -produced by +produced by ##### Run Information runCorrection=T prep=gsas machine=npdf run=300K background=npdf_00907 @@ -27,12 +27,12 @@ density= effDensity=3.4138 ##### Banks=6 deltaQ=0.01 matchRef=0 matchScal=T matchOffset=T bank angle blendQmin blendQmax (0.0 means no info) - 1 90.0 1.62 29.42 - 2 -90.0 1.62 29.42 - 3 119.0 1.97 35.85 - 4 -119.0 1.97 35.85 - 5 148.0 2.20 40.00 - 6 -148.0 2.20 40.00 + 1 90.0 1.62 29.42 + 2 -90.0 1.62 29.42 + 3 119.0 1.97 35.85 + 4 -119.0 1.97 35.85 + 5 148.0 2.20 40.00 + 6 -148.0 2.20 40.00 ##### Program Specific Information ## Ft calcError=1 (1 for true, 0 for false) diff --git a/diffpy/pdffit2/tests/testdata/Ni.dat b/tests/testdata/Ni.dat similarity index 100% rename from diffpy/pdffit2/tests/testdata/Ni.dat rename to tests/testdata/Ni.dat diff --git a/examples/Ni.stru b/tests/testdata/Ni.stru similarity index 100% rename from examples/Ni.stru rename to tests/testdata/Ni.stru diff --git a/diffpy/pdffit2/tests/testdata/PbScW25TiO3.stru b/tests/testdata/PbScW25TiO3.stru similarity index 100% rename from diffpy/pdffit2/tests/testdata/PbScW25TiO3.stru rename to tests/testdata/PbScW25TiO3.stru diff --git a/diffpy/pdffit2/tests/testdata/badNi.dat b/tests/testdata/badNi.dat similarity index 100% rename from diffpy/pdffit2/tests/testdata/badNi.dat rename to tests/testdata/badNi.dat diff --git a/diffpy/pdffit2/tests/testdata/badNi.stru b/tests/testdata/badNi.stru similarity index 100% rename from diffpy/pdffit2/tests/testdata/badNi.stru rename to tests/testdata/badNi.stru diff --git a/diffpy/pdffit2/tests/testdata/badNiZeroVolume.stru b/tests/testdata/badNiZeroVolume.stru similarity index 100% rename from diffpy/pdffit2/tests/testdata/badNiZeroVolume.stru rename to tests/testdata/badNiZeroVolume.stru diff --git a/diffpy/pdffit2/tests/testdata/noLattice.stru b/tests/testdata/noLattice.stru similarity index 100% rename from diffpy/pdffit2/tests/testdata/noLattice.stru rename to tests/testdata/noLattice.stru