pax_global_header00006660000000000000000000000064145745327670014536gustar00rootroot0000000000000052 comment=bf404cfa61a7a29b126d5a0aaa88fd92c08afb3b xypattern-1.1.2/000077500000000000000000000000001457453276700135755ustar00rootroot00000000000000xypattern-1.1.2/.github/000077500000000000000000000000001457453276700151355ustar00rootroot00000000000000xypattern-1.1.2/.github/workflows/000077500000000000000000000000001457453276700171725ustar00rootroot00000000000000xypattern-1.1.2/.github/workflows/CD.yml000066400000000000000000000034251457453276700202070ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python name: CD on: release: types: [published] jobs: build_package: strategy: fail-fast: false matrix: os: [ "ubuntu-latest", "macos-latest", "windows-latest" ] python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Install Poetry on macOS and Linux - Fails on windows for some reason if: ${{ matrix.os != 'windows-latest' }} uses: snok/install-poetry@v1 - name: Install Poetry on windows if: ${{ matrix.os == 'windows-latest' }} run: pipx install poetry - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} cache: 'poetry' - name: Add Dynamic Versioning Plugin run: poetry self add poetry-dynamic-versioning[plugin] - name: Build Package run: poetry build - name: Upload wheels to artifact uses: actions/upload-artifact@v3 with: name: wheels path: dist/* pypi-publish: name: Upload release to PyPI needs: build_package runs-on: ubuntu-latest environment: name: pypi url: https://pypi.org/p/xypattern/ permissions: id-token: write steps: - uses: actions/download-artifact@v3 with: name: wheels path: dist - name: check the dist folder run: ls dist - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 xypattern-1.1.2/.github/workflows/CI.yml000066400000000000000000000022331457453276700202100ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python name: CI on: push: branches: [ "main", "develop" ] pull_request: branches: [ "main", "develop" ] jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v3 - name: Install poetry run: pip install poetry - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} cache: 'poetry' - name: Install dependencies run: poetry install - name: Build Cython extensions run: poetry run cythonize -i xypattern/util/smooth_bruckner.pyx - name: Test with pytest run: poetry run pytest --cov=xypattern --cov-report=xml - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}xypattern-1.1.2/.gitignore000066400000000000000000000001141457453276700155610ustar00rootroot00000000000000.idea .venv* venv* __pycache__ dist build .coverage *.pyd smooth_bruckner.c*xypattern-1.1.2/.vscode/000077500000000000000000000000001457453276700151365ustar00rootroot00000000000000xypattern-1.1.2/.vscode/settings.json000066400000000000000000000002231457453276700176660ustar00rootroot00000000000000{ "python.testing.pytestArgs": [ "tests" ], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true }xypattern-1.1.2/CHANGELOG.md000066400000000000000000000024341457453276700154110ustar00rootroot00000000000000# 1.1.2 (2024-03-14) - now correctly saves a file without background (subtract_background parameter false) when auto_bkg is set # 1.1.1 (2024-03-13) - fixed inclusion of compiled smooth bruckner functions in wheels on linux and macos # 1.1.0 (2024-03-13) - added feature to delete a range in a pattern - added filename field in pattern, which contains complete filepath (name will still just hold the name) - added transform_x function to modify the x-axis in place (will also update backgrounds) - changed the auto background api, new usage: ```python pattern.auto_bkg = SmoothBrucknerBackground() pattern.auto_bkg_roi = [10, 20] pattern.auto_bkg = None # will switch it off ``` # 1.0.5 (2013-11-14) - enable poetry versioning plugin during build, to hopefully work when installing with pypi # 1.0.4 (2023-11-13) - fix constraints to also actually work with python 3.8 # 1.0.3 (2023-11-13) - provide packages for python 3.8 to 3.12 # 1.0.2 (2023-10-14) ## Bugfixes - fix out of bound error for find_scaling (will be extrapolated in case there is a tiny mismatch in the binning) # 1.0.1 (2023-10-14) ## new features - find_scaling (and in accord also scale_patterns) works now with patterns that have different binning in the overlapping region # 1.0.0 (2023-10-13) Initial Releasexypattern-1.1.2/LICENSE.txt000066400000000000000000000020611457453276700154170ustar00rootroot00000000000000MIT License Copyright (c) 2023 Clemens Prescher Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. xypattern-1.1.2/README.md000066400000000000000000000020231457453276700150510ustar00rootroot00000000000000![codecov](https://codecov.io/gh/CPrescher/xypattern/graph/badge.svg?token=05FUJFOV3R) ![CI](https://github.com/CPrescher/xypattern/actions/workflows/CI.yml/badge.svg) # xypattern ## Description A simple small library to handle x-y patterns, such as are collected with x-ray diffraction or Raman spectroscopy. ## Installation ```bash pip install xypattern ``` ## Usage Examples ### Reading a file ```python from xypattern import Pattern import matplotlib.pyplot as plt p1 = Pattern.from_file('path/to/file') p1.scaling = 0.5 p1.offset = 0.1 plt.plot(p1.x, p1.y) plt.show() ``` ### Use a background pattern ```python p2 = Pattern.from_file('path/to/file') p2.scaling = 0.9 p1.background = p2 ``` ### Scale and stitch multiple patterns ```python p1 = Pattern.from_file('path/to/file1') p2 = Pattern.from_file('path/to/file2') p3 = Pattern.from_file('path/to/file3') from xypattern.combine import scale_patterns, stitch_patterns patterns = [p1, p2, p3] scale_patterns(patterns) stitched_pattern = stitch_patterns(patterns) ``` xypattern-1.1.2/build.py000066400000000000000000000010541457453276700152460ustar00rootroot00000000000000from pathlib import Path import shutil from Cython.Build import cythonize, build_ext from setuptools.dist import Distribution extensions = ["xypattern/util/smooth_bruckner.pyx"] ext_modules = cythonize(extensions, compiler_directives={'language_level': 3}) dist = Distribution({'ext_modules': ext_modules}) cmd = build_ext(dist) cmd.ensure_finalized() cmd.run() for output in cmd.get_outputs(): output = Path(output) print("Build output: ", output) relative_path = output.relative_to(cmd.build_lib) shutil.copyfile(output, relative_path) xypattern-1.1.2/poetry.lock000066400000000000000000001214171457453276700157770ustar00rootroot00000000000000# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "coverage" version = "7.3.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, ] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli"] [[package]] name = "cython" version = "3.0.5" description = "The Cython compiler for writing C extensions in the Python language." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "Cython-3.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4faf17ea6e8fc3065a862d4b24be84048fd58ed7abe59aa2f9141446a7a72335"}, {file = "Cython-3.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1cab30c11880f38a27911b569ea38b0bd67fcf32f8a8a8519b613c70562dae2"}, {file = "Cython-3.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4d4d92182002b2878adb3329de1ccb7f3f7571d3586f92602e790bfeab45d0"}, {file = "Cython-3.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94f58e05e69e1a43da551c8f532e9fad057df1641f0f8ae8f103d4ede5a80fe"}, {file = "Cython-3.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a90f9c7b6635967eacafebe439d518b7dc720aaaf19cb9553f5aad03c13296f4"}, {file = "Cython-3.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c95bd21d87b08c88fe5296381a5f39cd979a775bf1a1d7379a6ff87c703e510b"}, {file = "Cython-3.0.5-cp310-cp310-win32.whl", hash = "sha256:ebc901131057c115a8868e14c1df6e56b9190df774b72664c03ebd858296bb81"}, {file = "Cython-3.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:0759868b4a4d103578375e031e89abd578c26774d957ee4f591764ef8003b363"}, {file = "Cython-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3679a6693456f5f7ccca9ab2a91408e99ee257e145024fe380da7c78a07e98b6"}, {file = "Cython-3.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad4eb2608661d63fb57c674dafb9955f5141d748d4579c7722c1a3c6b86a0c2"}, {file = "Cython-3.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37f4b0d983316242b4b9241ecbbe55220aa92af93ff04626441fe0ea90a54f9"}, {file = "Cython-3.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34059c3ea6e342ba388cd9774a61761bb4200ca18bd475de65c9cc70ef4e0204"}, {file = "Cython-3.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4db9eea298e982aee7ba12b3432c66eb2e91bb2f5d026bbd57c35698ea0f557f"}, {file = "Cython-3.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:452679284c15a7d5a88bff675e1dd660349360f0665aea50be2d98b7650925f8"}, {file = "Cython-3.0.5-cp311-cp311-win32.whl", hash = "sha256:2d6bb318ddce8b978c81cf78caf8b3836db84f6235d721952685e87871f506e4"}, {file = "Cython-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:fcfd2255458a5779dbab813550695331d541b24f0ef831ace83f04f9516ddf26"}, {file = "Cython-3.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0d9fcfc09d67218fce114fe9fd97bba4f9d56add0f775c588d8c626ed47f1aef"}, {file = "Cython-3.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac1cf1f2ed01656b33618352f7e42bf75d027425b83cc96cfe13ce4b6cba5de"}, {file = "Cython-3.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9d17a6ceb301c5dbd3820e62c1b10a4ad3a6eea3e07e7afaf736b5f490c2e32"}, {file = "Cython-3.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd9cab3b862bec2b110886aedb11765e9deda363c4c7ab5ea205f3d8f143c411"}, {file = "Cython-3.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:45277bb54c35b11bcdd6cf0f56eb950eb280b67146db0cb57853fb6334c6d11d"}, {file = "Cython-3.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:77f4d001fb7a03a68b53be20571acd17452d1dda7907d9c325dff0cc704b1ef9"}, {file = "Cython-3.0.5-cp312-cp312-win32.whl", hash = "sha256:57b44f789794d74c1feddae054dd045b9f601bdffd7288e069b4ca7ed607ec61"}, {file = "Cython-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:05c4efd36879ff8020af00407e4c14246b894558ea41dc6486f60dd71601fc67"}, {file = "Cython-3.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:048fe89c2c753c24e1a7a05496907173dab17e238c8dc3c7cad90b3679b0d846"}, {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c016b3e859b41cf4ce1b8107f364ad5a83c086f75ea4d8d3990b24691f626a1"}, {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f31d02b831d0fa9bf099b1b714b5a8252eabd8db34b7d33c48e7e808a2dabf9"}, {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:485f8a3087392e2287e2869adc0385b439f69b9cfbd262fdf39b00417690c988"}, {file = "Cython-3.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:063220a6dc0909b576ef068c7e2acf5c608d64423a6d231aacb72d06352cd95b"}, {file = "Cython-3.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:abb2362783521bd9a22fe69b2141abab4db97237665a36a034b161ddee5b3e72"}, {file = "Cython-3.0.5-cp36-cp36m-win32.whl", hash = "sha256:a993002fe28c840dc29805fde7341c775b7878b311b85f21560fdebf220c247b"}, {file = "Cython-3.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:13491f1bfcf020fd02751c4a55294aa8957e21b7ecd2542b0521a7aa50c58bb2"}, {file = "Cython-3.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:45aaceb082ad89365f2f783a40db42359591ad55914fb298841196edf88afdc5"}, {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3e011fa2ae9e953fe1ab8394329a21bdb54357c7fe509bcfb02b88bc15bffbb"}, {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f18c13d5ed6fde5efd3b1c039f6a34296d1a0409bb00fbf45bec6f9bcf63ddf5"}, {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:039877e57dc10abf0d30d2de2c7476f0881d8ecef1f29bdeed1a6a06a8d89141"}, {file = "Cython-3.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4fbc8f62b8d50f9a2eef99927a9dcb8d0a42e5a801ab14c2e4aeab622c88f54b"}, {file = "Cython-3.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3cffbba1888f795de2103e6fb1482c8ea8d457e638fa813e090fe747f9e549bb"}, {file = "Cython-3.0.5-cp37-cp37m-win32.whl", hash = "sha256:c18e125537a96e76c8c34201e5a9aad8625e3d872dd26a63155573462e54e185"}, {file = "Cython-3.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:93502f45948ae8d7f874ba4c113b50cb6fb4ee664caa82e1ddc398500ee0ffb3"}, {file = "Cython-3.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a9206b0720f0cad3e70c018722f6d10e81b32e65477e14ffedd3fbfadfaddca"}, {file = "Cython-3.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:530a474a79fa6c2127bb7e3ba00857b1f26a563615863f17b7434331aa3fe404"}, {file = "Cython-3.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:115e76fbe9288119526b66963f614042222d1587f1ba5ddb90088215a3d2a25a"}, {file = "Cython-3.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:035cb6930a8534f865a3f4616543f78bd27e4de9c3e117b2826e395085ffc4c0"}, {file = "Cython-3.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:077d9a61e6042174dabf68b8e92c0a80f5aff529439ed314aa6e6a233af80b95"}, {file = "Cython-3.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ba3f7b433c1721a43674c0889d5fad746bf608416c8f849343859e6d4d3a7113"}, {file = "Cython-3.0.5-cp38-cp38-win32.whl", hash = "sha256:a95ed0e6f481462a3ff2be4c2e4ffffc5d00fc3884d4ccd1fe5b702d4938ec09"}, {file = "Cython-3.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:f687539ead9fbc17f499e33ee20c1dc41598f70ad95edb4990c576447cec9d23"}, {file = "Cython-3.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f6fcfef825edb44cf3c6ba2c091ad76a83da62ac9c79553e80e0c2a1f75eda2e"}, {file = "Cython-3.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0d9431101f600d5a557d55989658cbfd02b7c0dcd1e4675dac8ad7e0da8ea5b"}, {file = "Cython-3.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db21997270e943aee9cb7694112d24a4702fbe1977fbe53b3cb4db3d02be73d9"}, {file = "Cython-3.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808f56d4cd0511723b787c341f3cc995fd72893e608102268298c188f4a4f2e7"}, {file = "Cython-3.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dee39967168d6326ea2df56ad215a4d5049aa52f44cd5aad45bfb63d5b4fb9e5"}, {file = "Cython-3.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b77f2b45535bcf3741592fa03183558bd42198b872c1584b896fa0ba5f2ac68d"}, {file = "Cython-3.0.5-cp39-cp39-win32.whl", hash = "sha256:5742ef31e1e2c9a4824ef6b05af0f4949047a6f73af1d4b238ce12935174aede"}, {file = "Cython-3.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:ada4852db0e33dbdd1425322db081d22b9725cb9f5eba42885467b4e2c4f2ac0"}, {file = "Cython-3.0.5-py2.py3-none-any.whl", hash = "sha256:75206369504fc442c10a86ecf57b91592dca744e4592af22a47e9a774d53dd10"}, {file = "Cython-3.0.5.tar.gz", hash = "sha256:39318348db488a2f24e7c84e08bdc82f2624853c0fea8b475ea0b70b27176492"}, ] [[package]] name = "exceptiongroup" version = "1.1.3" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] test = ["pytest (>=6)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.8" files = [ {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] [[package]] name = "numpy" version = "1.26.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, ] [[package]] name = "packaging" version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] name = "pluggy" version = "1.3.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] name = "pytest" version = "7.4.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.7" files = [ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, ] [package.dependencies] coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] [[package]] name = "scipy" version = "1.10.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = "<3.12,>=3.8" files = [ {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"}, {file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"}, {file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"}, {file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"}, {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"}, {file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"}, {file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"}, {file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"}, {file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"}, {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"}, {file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"}, {file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"}, {file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"}, {file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"}, {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"}, {file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"}, {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, ] [package.dependencies] numpy = ">=1.19.5,<1.27.0" [package.extras] dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "scipy" version = "1.11.3" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = "<3.13,>=3.9" files = [ {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, ] [package.dependencies] numpy = ">=1.21.6,<1.28.0" [package.extras] dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] [metadata] lock-version = "2.0" python-versions = ">=3.8, <3.13" content-hash = "5b73b3b92b124dfbd0dabd5fc70ad3fdd7fb5b987150678cbf0b0efca071474d" xypattern-1.1.2/pyproject.toml000066400000000000000000000033111457453276700165070ustar00rootroot00000000000000[tool.poetry] name = "xypattern" version = "1.1.2" description = "Library for handling x-y pattern data." authors = ["Clemens Prescher "] license = "MIT" readme = "README.md" build = "build.py" classifiers = [ 'Intended Audience :: Science/Research', 'Operating System :: OS Independent', 'Programming Language :: Python', 'License :: OSI Approved :: MIT License', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Physics', 'Topic :: Scientific/Engineering :: Chemistry', 'Topic :: Scientific/Engineering :: Visualization', 'Topic :: Scientific/Engineering :: Information Analysis', ] include = [ # C extensions must be included in the wheel distributions {path = "xypattern/util/*.so", format = "wheel"}, {path = "xypattern/util/*.pyd", format = "wheel"}, ] exclude = ["tests/*"] # Exclude tests from package [tool.poetry-dynamic-versioning] enable = true vcs = "git" pattern = "default-unprefixed" style = "semver" [tool.poetry-dynamic-versioning.substitution] files = ["dioptas/__init__.py"] [tool.poetry.dependencies] python = ">=3.8, <3.13" numpy = [ { version = "^1.24.0", python = "<3.10" }, { version = "^1.26.0", python = ">=3.10" } ] scipy = [ { version = "^1.9.3", python = "<3.10" }, { version = "^1.11.3", python = ">=3.10" } ] [tool.poetry.group.dev.dependencies] cython = "^3.0.3" pytest = "^7.4.2" pytest-cov = "^4.1.0" setuptools = { version = "^68.2.2", python = "^3.12" } [tool.poetry.scripts] stitch_patterns = "xypattern.scripts.stitch_patterns:main" [build-system] requires = ["poetry-core", "cython", "setuptools", "poetry-dynamic-versioning"] build-backend = "poetry_dynamic_versioning.backend" xypattern-1.1.2/tests/000077500000000000000000000000001457453276700147375ustar00rootroot00000000000000xypattern-1.1.2/tests/__init__.py000066400000000000000000000000001457453276700170360ustar00rootroot00000000000000xypattern-1.1.2/tests/data/000077500000000000000000000000001457453276700156505ustar00rootroot00000000000000xypattern-1.1.2/tests/data/pattern_001.chi000066400000000000000000000044771457453276700204060ustar00rootroot00000000000000\\psf\Home\Programming\Dioptas\Dioptas_main\ExampleData\LaB6_p49_001.tif: 2-thet 2-Theta Angle (Degrees) 1455 1.0486433E-02 2.7862846E+01 3.1459302E-02 2.8738375E+01 5.2432168E-02 3.0297205E+01 7.3405035E-02 2.9536245E+01 9.4377905E-02 2.9158455E+01 1.9095797E+01 3.9640204E+02 1.9116768E+01 3.3559955E+02 1.9137741E+01 2.3882057E+02 1.9158714E+01 1.8965805E+02 1.9179688E+01 1.7575114E+02 1.9200661E+01 1.6768631E+02 1.9221632E+01 1.6252946E+02 1.9242605E+01 1.5861049E+02 1.9263578E+01 1.5565144E+02 1.9284552E+01 1.5348082E+02 1.9305525E+01 1.5200546E+02 1.9326498E+01 1.5071599E+02 1.9347469E+01 1.4983572E+02 1.9368443E+01 1.4925722E+02 1.9389416E+01 1.4903426E+02 1.9410389E+01 1.4945267E+02 1.9431362E+01 1.4981371E+02 1.9452333E+01 1.5040169E+02 2.6121706E+01 0.0000000E+00 2.6142679E+01 0.0000000E+00 2.6834784E+01 0.0000000E+00 2.6855757E+01 0.0000000E+00 2.6876730E+01 0.0000000E+00 2.7380077E+01 0.0000000E+00 2.7401051E+01 0.0000000E+00 2.7422024E+01 0.0000000E+00 2.7442997E+01 0.0000000E+00 2.7463970E+01 0.0000000E+00 2.7484943E+01 0.0000000E+00 2.7505915E+01 0.0000000E+00 2.7526888E+01 0.0000000E+00 2.7547861E+01 0.0000000E+00 2.7568834E+01 0.0000000E+00 2.7589808E+01 0.0000000E+00 2.7610779E+01 0.0000000E+00 2.7631752E+01 0.0000000E+00 2.7652725E+01 0.0000000E+00 2.7673698E+01 0.0000000E+00 2.7694672E+01 0.0000000E+00 2.7715645E+01 0.0000000E+00 2.7736616E+01 0.0000000E+00 2.7757589E+01 0.0000000E+00 2.7778563E+01 0.0000000E+00 2.7799536E+01 0.0000000E+00 2.7820509E+01 0.0000000E+00 2.7841482E+01 0.0000000E+00 2.7862453E+01 0.0000000E+00 2.7883427E+01 0.0000000E+00 2.7904400E+01 0.0000000E+00 2.7925373E+01 0.0000000E+00 2.7946346E+01 0.0000000E+00 2.7967318E+01 0.0000000E+00 2.7988291E+01 0.0000000E+00 2.8009264E+01 0.0000000E+00 2.8030237E+01 0.0000000E+00 2.8051210E+01 0.0000000E+00 2.8072184E+01 0.0000000E+00 2.8093155E+01 0.0000000E+00 2.8114128E+01 0.0000000E+00 2.8135101E+01 0.0000000E+00 2.8156075E+01 0.0000000E+00 2.8177048E+01 0.0000000E+00 2.8198021E+01 0.0000000E+00 2.8218992E+01 0.0000000E+00 2.8239965E+01 0.0000000E+00 2.8260939E+01 0.0000000E+00 2.8281912E+01 0.0000000E+00 2.8302885E+01 0.0000000E+00 2.8323856E+01 0.0000000E+00 2.8344830E+01 0.0000000E+00xypattern-1.1.2/tests/data/pattern_001.xy000066400000000000000000001256161457453276700203020ustar00rootroot00000000000000# == pyFAI calibration == # SplineFile: None # PixelSize: 2.000e-04, 2.000e-04 m # PONI: 6.103e-02, 2.967e-01 m # Distance Sample to Detector: 0.303704713223 m # Rotations: 0.007391 0.001688 0.000000 rad # # == Fit2d calibration == # Distance Sample-beamCenter: 303.713 mm # Center: x=1472.100, y=307.723 pix # Tilt: 0.434 deg TiltPlanRot: 167.137 deg # # Wavelength: 3.20179398976e-11 # Polarization factor: None # Normalization factor: None # --> ExampleData/spectra/FoG_D3_001.xy # 2th_deg I 1.589844e-02 2.783654e+01 4.769531e-02 1.095138e+02 7.949219e-02 2.033009e+02 1.112891e-01 2.816584e+02 1.430859e-01 3.121634e+02 1.748828e-01 3.298415e+02 2.066797e-01 3.351241e+02 2.384766e-01 3.075522e+02 2.702734e-01 3.162048e+02 3.020703e-01 3.040698e+02 3.338672e-01 3.115300e+02 3.656641e-01 3.188954e+02 3.974609e-01 3.365235e+02 4.292578e-01 3.346874e+02 4.610547e-01 3.205755e+02 4.928516e-01 3.373589e+02 5.246484e-01 3.360493e+02 5.564453e-01 3.536418e+02 5.882422e-01 3.613312e+02 6.200391e-01 3.627414e+02 6.518359e-01 3.705992e+02 6.836328e-01 3.697465e+02 7.154297e-01 3.457319e+02 7.472266e-01 3.373016e+02 7.790234e-01 3.422044e+02 8.108203e-01 3.292883e+02 8.426172e-01 3.225254e+02 8.744141e-01 3.201987e+02 9.062109e-01 3.189372e+02 9.380078e-01 3.134819e+02 9.698047e-01 3.329312e+02 1.001602e+00 3.325389e+02 1.033398e+00 3.361237e+02 1.065195e+00 3.300811e+02 1.096992e+00 3.270955e+02 1.128789e+00 3.360401e+02 1.160586e+00 3.200195e+02 1.192383e+00 3.319698e+02 1.224180e+00 3.540084e+02 1.255977e+00 3.653270e+02 1.287773e+00 3.627267e+02 1.319570e+00 3.625477e+02 1.351367e+00 3.702398e+02 1.383164e+00 3.609226e+02 1.414961e+00 3.398103e+02 1.446758e+00 3.468229e+02 1.478555e+00 3.527237e+02 1.510352e+00 3.436700e+02 1.542148e+00 3.374215e+02 1.573945e+00 3.373354e+02 1.605742e+00 3.450180e+02 1.637539e+00 3.457239e+02 1.669336e+00 3.412570e+02 1.701133e+00 3.460424e+02 1.732930e+00 3.308347e+02 1.764727e+00 3.317201e+02 1.796523e+00 3.366393e+02 1.828320e+00 3.443940e+02 1.860117e+00 3.533615e+02 1.891914e+00 3.552326e+02 1.923711e+00 3.559317e+02 1.955508e+00 3.605006e+02 1.987305e+00 3.768749e+02 2.019102e+00 3.786122e+02 2.050898e+00 3.941110e+02 2.082695e+00 4.116088e+02 2.114492e+00 4.317215e+02 2.146289e+00 4.662796e+02 2.178086e+00 4.938214e+02 2.209883e+00 5.294568e+02 2.241680e+00 5.759714e+02 2.273477e+00 6.112760e+02 2.305273e+00 6.396714e+02 2.337070e+00 6.692068e+02 2.368867e+00 6.932806e+02 2.400664e+00 7.094579e+02 2.432461e+00 7.250598e+02 2.464258e+00 7.337220e+02 2.496055e+00 7.349402e+02 2.527852e+00 7.477127e+02 2.559648e+00 7.662581e+02 2.591445e+00 7.792147e+02 2.623242e+00 8.004547e+02 2.655039e+00 8.071199e+02 2.686836e+00 8.122974e+02 2.718633e+00 8.404402e+02 2.750430e+00 8.679531e+02 2.782227e+00 8.918372e+02 2.814023e+00 9.094810e+02 2.845820e+00 9.339315e+02 2.877617e+00 9.642244e+02 2.909414e+00 9.939998e+02 2.941211e+00 1.023952e+03 2.973008e+00 1.046896e+03 3.004805e+00 1.073334e+03 3.036602e+00 1.106387e+03 3.068398e+00 1.130356e+03 3.100195e+00 1.152389e+03 3.131992e+00 1.181613e+03 3.163789e+00 1.212703e+03 3.195586e+00 1.222792e+03 3.227383e+00 1.234693e+03 3.259180e+00 1.263594e+03 3.290977e+00 1.269543e+03 3.322773e+00 1.282891e+03 3.354570e+00 1.296315e+03 3.386367e+00 1.303582e+03 3.418164e+00 1.317663e+03 3.449961e+00 1.328685e+03 3.481758e+00 1.347074e+03 3.513555e+00 1.366699e+03 3.545352e+00 1.384361e+03 3.577148e+00 1.395662e+03 3.608945e+00 1.398847e+03 3.640742e+00 1.421484e+03 3.672539e+00 1.435180e+03 3.704336e+00 1.453775e+03 3.736133e+00 1.468419e+03 3.767930e+00 1.474614e+03 3.799727e+00 1.484593e+03 3.831523e+00 1.493021e+03 3.863320e+00 1.495411e+03 3.895117e+00 1.507324e+03 3.926914e+00 1.520800e+03 3.958711e+00 1.529580e+03 3.990508e+00 1.534582e+03 4.022305e+00 1.547911e+03 4.054102e+00 1.565999e+03 4.085898e+00 1.578089e+03 4.117695e+00 1.589788e+03 4.149492e+00 1.593075e+03 4.181289e+00 1.602700e+03 4.213086e+00 1.621015e+03 4.244883e+00 1.633318e+03 4.276680e+00 1.655388e+03 4.308477e+00 1.667021e+03 4.340273e+00 1.664348e+03 4.372070e+00 1.657753e+03 4.403867e+00 1.671425e+03 4.435664e+00 1.673683e+03 4.467461e+00 1.691271e+03 4.499258e+00 1.725188e+03 4.531055e+00 1.746499e+03 4.562852e+00 1.768112e+03 4.594648e+00 1.801424e+03 4.626445e+00 1.833799e+03 4.658242e+00 1.855755e+03 4.690039e+00 1.898120e+03 4.721836e+00 1.937275e+03 4.753633e+00 1.964564e+03 4.785430e+00 2.010219e+03 4.817227e+00 2.044011e+03 4.849023e+00 2.060825e+03 4.880820e+00 2.104863e+03 4.912617e+00 2.130474e+03 4.944414e+00 2.150947e+03 4.976211e+00 2.152903e+03 5.008008e+00 2.170222e+03 5.039805e+00 2.141345e+03 5.071602e+00 2.082267e+03 5.103398e+00 2.043480e+03 5.135195e+00 2.007777e+03 5.166992e+00 1.990330e+03 5.198789e+00 1.976548e+03 5.230586e+00 1.959223e+03 5.262383e+00 1.946131e+03 5.294180e+00 1.928100e+03 5.325977e+00 1.911055e+03 5.357773e+00 1.902043e+03 5.389570e+00 1.889393e+03 5.421367e+00 1.871896e+03 5.453164e+00 1.860749e+03 5.484961e+00 1.858863e+03 5.516758e+00 1.858085e+03 5.548555e+00 1.841895e+03 5.580352e+00 1.841164e+03 5.612148e+00 1.834058e+03 5.643945e+00 1.827774e+03 5.675742e+00 1.819865e+03 5.707539e+00 1.815591e+03 5.739336e+00 1.815964e+03 5.771133e+00 1.814093e+03 5.802930e+00 1.802835e+03 5.834727e+00 1.801510e+03 5.866523e+00 1.804427e+03 5.898320e+00 1.803480e+03 5.930117e+00 1.787737e+03 5.961914e+00 1.782824e+03 5.993711e+00 1.779898e+03 6.025508e+00 1.777789e+03 6.057305e+00 1.776635e+03 6.089102e+00 1.769513e+03 6.120898e+00 1.767901e+03 6.152695e+00 1.766183e+03 6.184492e+00 1.769457e+03 6.216289e+00 1.768648e+03 6.248086e+00 1.764583e+03 6.279883e+00 1.763220e+03 6.311680e+00 1.761765e+03 6.343477e+00 1.767837e+03 6.375273e+00 1.761876e+03 6.407070e+00 1.758291e+03 6.438867e+00 1.752023e+03 6.470664e+00 1.758592e+03 6.502461e+00 1.747559e+03 6.534258e+00 1.734146e+03 6.566055e+00 1.743463e+03 6.597852e+00 1.731420e+03 6.629648e+00 1.726278e+03 6.661445e+00 1.740076e+03 6.693242e+00 1.746797e+03 6.725039e+00 1.748721e+03 6.756836e+00 1.748738e+03 6.788633e+00 1.740984e+03 6.820430e+00 1.733254e+03 6.852227e+00 1.735209e+03 6.884023e+00 1.742391e+03 6.915820e+00 1.736208e+03 6.947617e+00 1.723919e+03 6.979414e+00 1.726855e+03 7.011211e+00 1.735583e+03 7.043008e+00 1.741562e+03 7.074805e+00 1.740370e+03 7.106602e+00 1.736280e+03 7.138398e+00 1.737075e+03 7.170195e+00 1.749744e+03 7.201992e+00 1.743920e+03 7.233789e+00 1.746604e+03 7.265586e+00 1.755449e+03 7.297383e+00 1.761263e+03 7.329180e+00 1.753342e+03 7.360977e+00 1.766447e+03 7.392773e+00 1.772570e+03 7.424570e+00 1.768940e+03 7.456367e+00 1.782651e+03 7.488164e+00 1.793737e+03 7.519961e+00 1.784523e+03 7.551758e+00 1.785200e+03 7.583555e+00 1.791498e+03 7.615352e+00 1.805264e+03 7.647148e+00 1.804799e+03 7.678945e+00 1.807963e+03 7.710742e+00 1.807759e+03 7.742539e+00 1.823484e+03 7.774336e+00 1.832463e+03 7.806133e+00 1.846378e+03 7.837930e+00 1.855686e+03 7.869727e+00 1.863534e+03 7.901523e+00 1.865880e+03 7.933320e+00 1.869635e+03 7.965117e+00 1.869353e+03 7.996914e+00 1.882209e+03 8.028711e+00 1.876427e+03 8.060508e+00 1.882609e+03 8.092305e+00 1.898365e+03 8.124102e+00 1.895000e+03 8.155898e+00 1.890354e+03 8.187695e+00 1.887963e+03 8.219492e+00 1.900624e+03 8.251289e+00 1.903298e+03 8.283086e+00 1.887630e+03 8.314883e+00 1.896348e+03 8.346680e+00 1.898163e+03 8.378477e+00 1.883228e+03 8.410273e+00 1.873485e+03 8.442070e+00 1.877433e+03 8.473867e+00 1.881615e+03 8.505664e+00 1.871235e+03 8.537461e+00 1.872225e+03 8.569258e+00 1.857898e+03 8.601055e+00 1.849874e+03 8.632852e+00 1.845940e+03 8.664648e+00 1.853570e+03 8.696445e+00 1.848596e+03 8.728242e+00 1.844108e+03 8.760039e+00 1.856406e+03 8.791836e+00 1.854254e+03 8.823633e+00 1.842910e+03 8.855430e+00 1.857857e+03 8.887227e+00 1.865360e+03 8.919023e+00 1.870749e+03 8.950820e+00 1.841643e+03 8.982617e+00 1.825259e+03 9.014414e+00 1.811492e+03 9.046211e+00 1.822854e+03 9.078008e+00 1.825633e+03 9.109805e+00 1.829213e+03 9.141602e+00 1.819659e+03 9.173398e+00 1.835620e+03 9.205195e+00 1.849149e+03 9.236992e+00 1.845523e+03 9.268789e+00 1.850679e+03 9.300586e+00 1.855420e+03 9.332383e+00 1.865573e+03 9.364180e+00 1.867503e+03 9.395977e+00 1.862335e+03 9.427773e+00 1.874327e+03 9.459570e+00 1.883161e+03 9.491367e+00 1.894166e+03 9.523164e+00 1.905948e+03 9.554961e+00 1.910792e+03 9.586758e+00 1.915255e+03 9.618555e+00 1.921584e+03 9.650352e+00 1.945236e+03 9.682148e+00 1.957135e+03 9.713945e+00 1.968074e+03 9.745742e+00 1.969641e+03 9.777539e+00 1.976783e+03 9.809336e+00 1.977109e+03 9.841133e+00 1.987742e+03 9.872930e+00 1.993844e+03 9.904727e+00 1.999467e+03 9.936523e+00 2.011625e+03 9.968320e+00 2.017275e+03 1.000012e+01 2.016822e+03 1.003191e+01 2.012184e+03 1.006371e+01 2.009421e+03 1.009551e+01 2.027617e+03 1.012730e+01 2.032560e+03 1.015910e+01 2.036917e+03 1.019090e+01 2.038177e+03 1.022270e+01 2.049924e+03 1.025449e+01 2.049669e+03 1.028629e+01 2.042780e+03 1.031809e+01 2.055395e+03 1.034988e+01 2.050885e+03 1.038168e+01 2.060785e+03 1.041348e+01 2.042083e+03 1.044527e+01 2.037786e+03 1.047707e+01 2.038267e+03 1.050887e+01 2.027386e+03 1.054066e+01 2.026172e+03 1.057246e+01 2.025537e+03 1.060426e+01 2.027401e+03 1.063605e+01 2.016616e+03 1.066785e+01 2.004411e+03 1.069965e+01 1.998371e+03 1.073145e+01 2.003928e+03 1.076324e+01 2.003517e+03 1.079504e+01 1.983587e+03 1.082684e+01 1.984659e+03 1.085863e+01 1.980452e+03 1.089043e+01 1.974269e+03 1.092223e+01 1.962551e+03 1.095402e+01 1.949566e+03 1.098582e+01 1.956660e+03 1.101762e+01 1.952540e+03 1.104941e+01 1.941417e+03 1.108121e+01 1.942117e+03 1.111301e+01 1.944194e+03 1.114480e+01 1.935728e+03 1.117660e+01 1.933008e+03 1.120840e+01 1.939099e+03 1.124020e+01 1.932036e+03 1.127199e+01 1.923866e+03 1.130379e+01 1.921779e+03 1.133559e+01 1.915243e+03 1.136738e+01 1.912061e+03 1.139918e+01 1.897256e+03 1.143098e+01 1.880657e+03 1.146277e+01 1.883494e+03 1.149457e+01 1.891675e+03 1.152637e+01 1.881602e+03 1.155816e+01 1.876219e+03 1.158996e+01 1.875357e+03 1.162176e+01 1.870611e+03 1.165355e+01 1.864327e+03 1.168535e+01 1.866120e+03 1.171715e+01 1.854948e+03 1.174895e+01 1.842896e+03 1.178074e+01 1.847140e+03 1.181254e+01 1.837293e+03 1.184434e+01 1.835791e+03 1.187613e+01 1.837068e+03 1.190793e+01 1.840038e+03 1.193973e+01 1.839232e+03 1.197152e+01 1.829281e+03 1.200332e+01 1.825755e+03 1.203512e+01 1.813677e+03 1.206691e+01 1.805843e+03 1.209871e+01 1.801444e+03 1.213051e+01 1.795112e+03 1.216230e+01 1.793158e+03 1.219410e+01 1.805004e+03 1.222590e+01 1.806416e+03 1.225770e+01 1.797937e+03 1.228949e+01 1.791331e+03 1.232129e+01 1.788561e+03 1.235309e+01 1.790132e+03 1.238488e+01 1.788468e+03 1.241668e+01 1.794495e+03 1.244848e+01 1.780132e+03 1.248027e+01 1.779398e+03 1.251207e+01 1.797918e+03 1.254387e+01 1.805787e+03 1.257566e+01 1.801468e+03 1.260746e+01 1.792185e+03 1.263926e+01 1.775116e+03 1.267105e+01 1.772874e+03 1.270285e+01 1.766409e+03 1.273465e+01 1.771382e+03 1.276645e+01 1.773034e+03 1.279824e+01 1.769860e+03 1.283004e+01 1.770804e+03 1.286184e+01 1.756597e+03 1.289363e+01 1.758108e+03 1.292543e+01 1.759687e+03 1.295723e+01 1.747078e+03 1.298902e+01 1.745428e+03 1.302082e+01 1.757870e+03 1.305262e+01 1.767817e+03 1.308441e+01 1.759956e+03 1.311621e+01 1.755389e+03 1.314801e+01 1.740807e+03 1.317980e+01 1.737442e+03 1.321160e+01 1.742738e+03 1.324340e+01 1.745901e+03 1.327520e+01 1.739560e+03 1.330699e+01 1.739681e+03 1.333879e+01 1.738975e+03 1.337059e+01 1.738728e+03 1.340238e+01 1.738423e+03 1.343418e+01 1.731561e+03 1.346598e+01 1.731461e+03 1.349777e+01 1.726254e+03 1.352957e+01 1.732165e+03 1.356137e+01 1.733709e+03 1.359316e+01 1.729487e+03 1.362496e+01 1.740512e+03 1.365676e+01 1.730447e+03 1.368855e+01 1.746861e+03 1.372035e+01 1.739447e+03 1.375215e+01 1.732249e+03 1.378395e+01 1.724014e+03 1.381574e+01 1.722707e+03 1.384754e+01 1.724171e+03 1.387934e+01 1.727097e+03 1.391113e+01 1.712454e+03 1.394293e+01 1.724748e+03 1.397473e+01 1.729325e+03 1.400652e+01 1.723265e+03 1.403832e+01 1.724320e+03 1.407012e+01 1.721827e+03 1.410191e+01 1.705101e+03 1.413371e+01 1.709523e+03 1.416551e+01 1.720160e+03 1.419730e+01 1.720700e+03 1.422910e+01 1.716317e+03 1.426090e+01 1.717588e+03 1.429270e+01 1.711179e+03 1.432449e+01 1.727235e+03 1.435629e+01 1.727337e+03 1.438809e+01 1.728917e+03 1.441988e+01 1.722569e+03 1.445168e+01 1.703817e+03 1.448348e+01 1.698958e+03 1.451527e+01 1.716136e+03 1.454707e+01 1.707297e+03 1.457887e+01 1.718070e+03 1.461066e+01 1.720128e+03 1.464246e+01 1.711372e+03 1.467426e+01 1.705055e+03 1.470605e+01 1.691806e+03 1.473785e+01 1.691258e+03 1.476965e+01 1.694296e+03 1.480145e+01 1.704776e+03 1.483324e+01 1.695218e+03 1.486504e+01 1.666598e+03 1.489684e+01 1.675356e+03 1.492863e+01 1.666778e+03 1.496043e+01 1.660682e+03 1.499223e+01 1.672172e+03 1.502402e+01 1.667285e+03 1.505582e+01 1.663557e+03 1.508762e+01 1.661102e+03 1.511941e+01 1.651938e+03 1.515121e+01 1.639672e+03 1.518301e+01 1.635459e+03 1.521480e+01 1.625178e+03 1.524660e+01 1.603471e+03 1.527840e+01 1.596388e+03 1.531020e+01 1.588583e+03 1.534199e+01 1.577514e+03 1.537379e+01 1.562648e+03 1.540559e+01 1.562170e+03 1.543738e+01 1.557563e+03 1.546918e+01 1.539094e+03 1.550098e+01 1.528930e+03 1.553277e+01 1.523965e+03 1.556457e+01 1.529943e+03 1.559637e+01 1.508528e+03 1.562816e+01 1.503915e+03 1.565996e+01 1.513803e+03 1.569176e+01 1.505751e+03 1.572355e+01 1.502470e+03 1.575535e+01 1.495122e+03 1.578715e+01 1.487278e+03 1.581895e+01 1.485081e+03 1.585074e+01 1.475166e+03 1.588254e+01 1.465609e+03 1.591434e+01 1.461308e+03 1.594613e+01 1.459321e+03 1.597793e+01 1.434857e+03 1.600973e+01 1.419917e+03 1.604152e+01 1.412780e+03 1.607332e+01 1.401850e+03 1.610512e+01 1.389141e+03 1.613691e+01 1.380838e+03 1.616871e+01 1.376040e+03 1.620051e+01 1.369632e+03 1.623230e+01 1.364420e+03 1.626410e+01 1.361641e+03 1.629590e+01 1.363085e+03 1.632770e+01 1.353595e+03 1.635949e+01 1.329791e+03 1.639129e+01 1.325965e+03 1.642309e+01 1.336680e+03 1.645488e+01 1.318102e+03 1.648668e+01 1.320414e+03 1.651848e+01 1.320670e+03 1.655027e+01 1.316455e+03 1.658207e+01 1.306849e+03 1.661387e+01 1.305950e+03 1.664566e+01 1.301837e+03 1.667746e+01 1.290591e+03 1.670926e+01 1.287553e+03 1.674105e+01 1.272303e+03 1.677285e+01 1.238049e+03 1.680465e+01 1.240027e+03 1.683645e+01 1.242464e+03 1.686824e+01 1.229326e+03 1.690004e+01 1.216097e+03 1.693184e+01 1.209161e+03 1.696363e+01 1.215454e+03 1.699543e+01 1.223226e+03 1.702723e+01 1.206942e+03 1.705902e+01 1.184629e+03 1.709082e+01 1.183169e+03 1.712262e+01 1.183968e+03 1.715441e+01 1.168611e+03 1.718621e+01 1.155671e+03 1.721801e+01 1.153076e+03 1.724980e+01 1.142596e+03 1.728160e+01 1.133013e+03 1.731340e+01 1.139177e+03 1.734520e+01 1.133767e+03 1.737699e+01 1.123116e+03 1.740879e+01 1.128763e+03 1.744059e+01 1.114906e+03 1.747238e+01 1.112593e+03 1.750418e+01 1.100420e+03 1.753598e+01 1.092258e+03 1.756777e+01 1.080347e+03 1.759957e+01 1.074892e+03 1.763137e+01 1.052857e+03 1.766316e+01 1.047504e+03 1.769496e+01 1.040089e+03 1.772676e+01 1.037968e+03 1.775855e+01 1.033282e+03 1.779035e+01 1.032239e+03 1.782215e+01 1.016419e+03 1.785395e+01 1.012013e+03 1.788574e+01 1.008040e+03 1.791754e+01 9.954012e+02 1.794934e+01 9.888437e+02 1.798113e+01 9.802795e+02 1.801293e+01 9.757906e+02 1.804473e+01 9.832683e+02 1.807652e+01 9.744631e+02 1.810832e+01 9.698241e+02 1.814012e+01 9.670648e+02 1.817191e+01 9.474576e+02 1.820371e+01 9.558972e+02 1.823551e+01 9.630371e+02 1.826730e+01 9.586901e+02 1.829910e+01 9.636565e+02 1.833090e+01 9.680530e+02 1.836270e+01 9.600904e+02 1.839449e+01 9.596682e+02 1.842629e+01 9.449046e+02 1.845809e+01 9.396594e+02 1.848988e+01 9.495325e+02 1.852168e+01 9.473841e+02 1.855348e+01 9.536556e+02 1.858527e+01 9.383257e+02 1.861707e+01 9.329375e+02 1.864887e+01 9.351396e+02 1.868066e+01 9.341401e+02 1.871246e+01 9.257520e+02 1.874426e+01 9.286554e+02 1.877605e+01 9.401724e+02 1.880785e+01 9.341171e+02 1.883965e+01 9.341044e+02 1.887145e+01 9.359571e+02 1.890324e+01 9.381083e+02 1.893504e+01 9.301729e+02 1.896684e+01 9.258346e+02 1.899863e+01 9.258363e+02 1.903043e+01 9.243101e+02 1.906223e+01 9.042357e+02 1.909402e+01 9.146159e+02 1.912582e+01 9.198157e+02 1.915762e+01 9.217045e+02 1.918941e+01 9.104848e+02 1.922121e+01 9.197628e+02 1.925301e+01 9.193240e+02 1.928480e+01 9.004319e+02 1.931660e+01 8.904620e+02 1.934840e+01 9.063584e+02 1.938020e+01 9.087590e+02 1.941199e+01 8.961273e+02 1.944379e+01 9.019857e+02 1.947559e+01 8.991208e+02 1.950738e+01 9.003167e+02 1.953918e+01 8.942974e+02 1.957098e+01 8.973907e+02 1.960277e+01 8.843256e+02 1.963457e+01 8.845559e+02 1.966637e+01 8.996265e+02 1.969816e+01 8.994901e+02 1.972996e+01 8.905420e+02 1.976176e+01 8.905939e+02 1.979355e+01 8.821235e+02 1.982535e+01 8.889288e+02 1.985715e+01 8.880417e+02 1.988895e+01 8.902755e+02 1.992074e+01 8.916241e+02 1.995254e+01 8.820037e+02 1.998434e+01 8.757913e+02 2.001613e+01 8.753021e+02 2.004793e+01 8.752045e+02 2.007973e+01 8.719269e+02 2.011152e+01 8.707912e+02 2.014332e+01 8.736333e+02 2.017512e+01 8.642715e+02 2.020691e+01 8.664068e+02 2.023871e+01 8.650804e+02 2.027051e+01 8.730546e+02 2.030230e+01 8.690426e+02 2.033410e+01 8.553922e+02 2.036590e+01 8.645991e+02 2.039770e+01 8.624564e+02 2.042949e+01 8.483257e+02 2.046129e+01 8.556233e+02 2.049309e+01 8.489854e+02 2.052488e+01 8.563615e+02 2.055668e+01 8.470160e+02 2.058848e+01 8.406036e+02 2.062027e+01 8.500496e+02 2.065207e+01 8.472051e+02 2.068387e+01 8.326144e+02 2.071566e+01 8.441262e+02 2.074746e+01 8.288128e+02 2.077926e+01 8.357694e+02 2.081105e+01 8.264443e+02 2.084285e+01 8.797410e+02 2.087465e+01 9.080255e+02 2.090645e+01 9.443915e+02 2.093824e+01 9.634183e+02 2.097004e+01 9.816015e+02 2.100184e+01 9.934182e+02 2.103363e+01 1.006912e+03 2.106543e+01 1.042776e+03 2.109723e+01 1.050555e+03 2.112902e+01 1.053174e+03 2.116082e+01 1.087320e+03 2.119262e+01 1.108386e+03 2.122441e+01 1.105902e+03 2.125621e+01 1.133752e+03 2.128801e+01 1.134335e+03 2.131980e+01 1.147325e+03 2.135160e+01 1.160189e+03 2.138340e+01 1.158559e+03 2.141520e+01 1.170063e+03 2.144699e+01 1.155961e+03 2.147879e+01 1.166406e+03 2.151059e+01 1.151162e+03 2.154238e+01 1.134719e+03 2.157418e+01 1.127784e+03 2.160598e+01 1.126997e+03 2.163777e+01 1.127638e+03 2.166957e+01 1.110696e+03 2.170137e+01 1.124136e+03 2.173316e+01 1.105418e+03 2.176496e+01 1.088826e+03 2.179676e+01 1.094000e+03 2.182855e+01 1.107499e+03 2.186035e+01 1.098193e+03 2.189215e+01 1.081856e+03 2.192395e+01 1.065970e+03 2.195574e+01 1.075586e+03 2.198754e+01 1.077270e+03 2.201934e+01 1.085078e+03 2.205113e+01 1.090472e+03 2.208293e+01 1.085112e+03 2.211473e+01 1.069171e+03 2.214652e+01 1.054005e+03 2.217832e+01 1.069606e+03 2.221012e+01 1.056193e+03 2.224191e+01 1.056616e+03 2.227371e+01 1.058277e+03 2.230551e+01 1.057921e+03 2.233730e+01 1.061446e+03 2.236910e+01 1.068044e+03 2.240090e+01 1.040487e+03 2.243270e+01 1.063536e+03 2.246449e+01 1.066450e+03 2.249629e+01 1.067788e+03 2.252809e+01 1.053635e+03 2.255988e+01 1.070899e+03 2.259168e+01 1.042041e+03 2.262348e+01 1.042707e+03 2.265527e+01 1.054247e+03 2.268707e+01 1.038942e+03 2.271887e+01 1.043677e+03 2.275066e+01 1.062499e+03 2.278246e+01 1.050901e+03 2.281426e+01 1.026068e+03 2.284605e+01 1.044000e+03 2.287785e+01 1.027814e+03 2.290965e+01 1.055846e+03 2.294145e+01 1.062110e+03 2.297324e+01 1.063232e+03 2.300504e+01 1.036380e+03 2.303684e+01 1.038084e+03 2.306863e+01 1.050962e+03 2.310043e+01 1.042186e+03 2.313223e+01 1.039685e+03 2.316402e+01 1.049757e+03 2.319582e+01 1.028841e+03 2.322762e+01 1.033396e+03 2.325941e+01 1.049197e+03 2.329121e+01 1.048440e+03 2.332301e+01 1.030664e+03 2.335480e+01 1.001313e+03 2.338660e+01 1.014493e+03 2.341840e+01 1.022655e+03 2.345020e+01 1.024083e+03 2.348199e+01 1.014162e+03 2.351379e+01 1.015895e+03 2.354559e+01 1.014967e+03 2.357738e+01 1.023555e+03 2.360918e+01 9.925557e+02 2.364098e+01 1.029672e+03 2.367277e+01 1.011265e+03 2.370457e+01 1.022145e+03 2.373637e+01 9.948123e+02 2.376816e+01 1.003235e+03 2.379996e+01 9.998188e+02 2.383176e+01 1.012857e+03 2.386355e+01 1.008047e+03 2.389535e+01 1.019444e+03 2.392715e+01 1.011355e+03 2.395895e+01 1.012598e+03 2.399074e+01 1.024777e+03 2.402254e+01 9.994086e+02 2.405434e+01 1.008103e+03 2.408613e+01 9.989171e+02 2.411793e+01 9.902098e+02 2.414973e+01 1.008348e+03 2.418152e+01 9.983836e+02 2.421332e+01 9.939860e+02 2.424512e+01 1.014768e+03 2.427691e+01 1.005980e+03 2.430871e+01 1.000704e+03 2.434051e+01 1.007666e+03 2.437230e+01 1.013065e+03 2.440410e+01 9.989894e+02 2.443590e+01 9.919724e+02 2.446770e+01 9.865905e+02 2.449949e+01 1.006410e+03 2.453129e+01 9.985139e+02 2.456309e+01 9.950984e+02 2.459488e+01 9.913254e+02 2.462668e+01 9.952681e+02 2.465848e+01 9.895071e+02 2.469027e+01 9.963120e+02 2.472207e+01 9.862048e+02 2.475387e+01 9.690010e+02 2.478566e+01 9.757450e+02 2.481746e+01 9.852858e+02 2.484926e+01 9.828674e+02 2.488105e+01 9.732799e+02 2.491285e+01 9.639625e+02 2.494465e+01 9.670499e+02 2.497645e+01 9.980379e+02 2.500824e+01 9.920479e+02 2.504004e+01 9.780302e+02 2.507184e+01 9.818477e+02 2.510363e+01 9.665303e+02 2.513543e+01 9.614746e+02 2.516723e+01 9.793343e+02 2.519902e+01 9.940481e+02 2.523082e+01 9.804270e+02 2.526262e+01 9.824752e+02 2.529441e+01 9.933340e+02 2.532621e+01 9.716637e+02 2.535801e+01 9.643159e+02 2.538980e+01 9.725233e+02 2.542160e+01 9.794926e+02 2.545340e+01 9.726799e+02 2.548520e+01 9.876579e+02 2.551699e+01 9.928019e+02 2.554879e+01 9.784048e+02 2.558059e+01 9.633307e+02 2.561238e+01 9.664421e+02 2.564418e+01 9.792368e+02 2.567598e+01 9.507254e+02 2.570777e+01 9.586782e+02 2.573957e+01 9.572450e+02 2.577137e+01 9.621425e+02 2.580316e+01 9.577064e+02 2.583496e+01 9.773462e+02 2.586676e+01 9.736149e+02 2.589855e+01 9.755182e+02 2.593035e+01 9.739825e+02 2.596215e+01 9.576415e+02 2.599395e+01 9.734972e+02 2.602574e+01 9.508908e+02 2.605754e+01 9.827204e+02 2.608934e+01 9.658718e+02 2.612113e+01 9.459945e+02 2.615293e+01 9.540461e+02 2.618473e+01 9.554504e+02 2.621652e+01 9.572177e+02 2.624832e+01 9.520886e+02 2.628012e+01 9.768544e+02 2.631191e+01 9.649184e+02 2.634371e+01 9.872205e+02 2.637551e+01 9.784018e+02 2.640730e+01 9.697866e+02 2.643910e+01 9.597155e+02 2.647090e+01 9.730731e+02 2.650270e+01 9.487640e+02 2.653449e+01 9.605753e+02 2.656629e+01 9.559016e+02 2.659809e+01 9.552336e+02 2.662988e+01 9.541165e+02 2.666168e+01 9.580716e+02 2.669348e+01 9.577574e+02 2.672527e+01 9.456075e+02 2.675707e+01 9.325435e+02 2.678887e+01 9.413365e+02 2.682066e+01 9.327093e+02 2.685246e+01 9.516620e+02 2.688426e+01 9.383571e+02 2.691605e+01 9.350350e+02 2.694785e+01 9.248091e+02 2.697965e+01 9.416048e+02 2.701145e+01 9.416263e+02 2.704324e+01 9.419449e+02 2.707504e+01 9.496813e+02 2.710684e+01 9.300334e+02 2.713863e+01 9.380594e+02 2.717043e+01 9.244352e+02 2.720223e+01 9.273778e+02 2.723402e+01 9.336970e+02 2.726582e+01 9.491959e+02 2.729762e+01 9.396919e+02 2.732941e+01 9.423392e+02 2.736121e+01 9.296347e+02 2.739301e+01 9.406616e+02 2.742480e+01 9.354875e+02 2.745660e+01 9.605267e+02 2.748840e+01 9.477783e+02 2.752020e+01 9.576967e+02 2.755199e+01 9.218286e+02 2.758379e+01 9.072963e+02 2.761559e+01 9.305441e+02 2.764738e+01 9.444208e+02 2.767918e+01 9.484200e+02 2.771098e+01 9.338247e+02 2.774277e+01 9.386201e+02 2.777457e+01 9.264374e+02 2.780637e+01 9.222418e+02 2.783816e+01 9.301223e+02 2.786996e+01 9.583794e+02 2.790176e+01 9.432903e+02 2.793355e+01 9.431313e+02 2.796535e+01 9.351109e+02 2.799715e+01 9.463781e+02 2.802895e+01 9.377272e+02 2.806074e+01 9.056894e+02 2.809254e+01 9.236819e+02 2.812434e+01 9.278481e+02 2.815613e+01 9.326636e+02 2.818793e+01 9.362339e+02 2.821973e+01 9.323882e+02 2.825152e+01 9.148441e+02 2.828332e+01 9.283159e+02 2.831512e+01 9.208775e+02 2.834691e+01 9.214617e+02 2.837871e+01 9.091729e+02 2.841051e+01 9.140533e+02 2.844230e+01 9.350214e+02 2.847410e+01 9.255037e+02 2.850590e+01 9.117816e+02 2.853770e+01 9.170311e+02 2.856949e+01 9.183805e+02 2.860129e+01 9.127266e+02 2.863309e+01 9.046544e+02 2.866488e+01 9.227203e+02 2.869668e+01 9.138318e+02 2.872848e+01 9.305432e+02 2.876027e+01 9.319236e+02 2.879207e+01 8.993914e+02 2.882387e+01 8.998221e+02 2.885566e+01 9.346294e+02 2.888746e+01 9.395400e+02 2.891926e+01 9.295502e+02 2.895105e+01 9.294635e+02 2.898285e+01 9.287417e+02 2.901465e+01 9.348281e+02 2.904645e+01 9.364261e+02 2.907824e+01 9.363995e+02 2.911004e+01 9.240182e+02 2.914184e+01 9.401227e+02 2.917363e+01 9.240377e+02 2.920543e+01 9.127212e+02 2.923723e+01 9.017258e+02 2.926902e+01 9.320646e+02 2.930082e+01 9.601276e+02 2.933262e+01 9.252011e+02 2.936441e+01 9.211760e+02 2.939621e+01 9.236875e+02 2.942801e+01 9.490769e+02 2.945980e+01 9.196946e+02 2.949160e+01 9.200186e+02 2.952340e+01 9.115145e+02 2.955520e+01 9.328610e+02 2.958699e+01 9.093574e+02 2.961879e+01 9.090600e+02 2.965059e+01 9.279958e+02 2.968238e+01 9.368233e+02 2.971418e+01 9.404084e+02 2.974598e+01 9.534146e+02 2.977777e+01 9.421123e+02 2.980957e+01 9.162519e+02 2.984137e+01 9.237281e+02 2.987316e+01 8.907531e+02 2.990496e+01 8.952452e+02 2.993676e+01 9.059343e+02 2.996855e+01 8.915552e+02 3.000035e+01 8.912007e+02 3.003215e+01 8.994929e+02 3.006395e+01 9.102133e+02 3.009574e+01 9.119410e+02 3.012754e+01 9.279044e+02 3.015934e+01 9.391481e+02 3.019113e+01 9.054185e+02 3.022293e+01 8.977422e+02 3.025473e+01 9.332287e+02 3.028652e+01 9.381953e+02 3.031832e+01 9.454394e+02 3.035012e+01 9.212537e+02 3.038191e+01 9.003978e+02 3.041371e+01 9.205600e+02 3.044551e+01 9.258334e+02 3.047730e+01 9.153539e+02 3.050910e+01 9.221683e+02 3.054090e+01 9.155026e+02 3.057270e+01 8.998843e+02 3.060449e+01 9.145148e+02 3.063629e+01 9.064908e+02 3.066809e+01 9.151246e+02 3.069988e+01 9.185348e+02 3.073168e+01 9.162151e+02 3.076348e+01 9.213611e+02 3.079527e+01 9.177645e+02 3.082707e+01 9.387463e+02 3.085887e+01 9.100703e+02 3.089066e+01 9.061808e+02 3.092246e+01 9.160338e+02 3.095426e+01 9.489196e+02 3.098605e+01 9.333205e+02 3.101785e+01 9.142208e+02 3.104965e+01 9.246824e+02 3.108145e+01 8.892683e+02 3.111324e+01 8.725427e+02 3.114504e+01 9.135745e+02 3.117684e+01 9.116046e+02 3.120863e+01 9.047054e+02 3.124043e+01 9.104167e+02 3.127223e+01 9.005333e+02 3.130402e+01 8.837800e+02 3.133582e+01 9.148099e+02 3.136762e+01 8.982129e+02 3.139941e+01 8.935283e+02 3.143121e+01 8.954837e+02 3.146301e+01 9.037703e+02 3.149480e+01 8.972228e+02 3.152660e+01 9.074706e+02 3.155840e+01 9.093664e+02 3.159020e+01 9.152701e+02 3.162199e+01 8.966348e+02 3.165379e+01 9.014776e+02 3.168559e+01 8.900185e+02 3.171738e+01 8.837007e+02 3.174918e+01 8.913434e+02 3.178098e+01 8.950158e+02 3.181277e+01 9.011652e+02 3.184457e+01 8.949615e+02 3.187637e+01 9.062516e+02 3.190816e+01 8.903825e+02 3.193996e+01 8.848377e+02 3.197176e+01 8.984868e+02 3.200355e+01 8.776252e+02 3.203535e+01 8.817804e+02 3.206715e+01 9.010834e+02 3.209895e+01 8.767855e+02 3.213074e+01 8.839189e+02 3.216254e+01 8.874039e+02 3.219434e+01 8.834937e+02 3.222613e+01 8.756375e+02 3.225793e+01 8.943065e+02 3.228973e+01 9.020115e+02 3.232152e+01 8.937455e+02 3.235332e+01 8.872230e+02 3.238512e+01 9.159135e+02 3.241691e+01 9.116152e+02 3.244871e+01 9.097151e+02 3.248051e+01 9.180385e+02 3.251230e+01 8.986491e+02 3.254410e+01 8.887961e+02 3.257590e+01 9.030644e+02 3.260770e+01 9.050501e+02 3.263949e+01 9.002663e+02 3.267129e+01 8.863047e+02 3.270309e+01 8.918099e+02 3.273488e+01 8.978743e+02 3.276668e+01 8.960503e+02 3.279848e+01 8.831469e+02 3.283027e+01 8.966505e+02 3.286207e+01 8.987387e+02 3.289387e+01 8.889140e+02 3.292566e+01 8.967214e+02 3.295746e+01 9.032916e+02 3.298926e+01 8.868590e+02 3.302105e+01 8.795998e+02 3.305285e+01 8.983017e+02 3.308465e+01 8.963174e+02 3.311645e+01 8.978013e+02 3.314824e+01 8.936540e+02 3.318004e+01 8.764658e+02 3.321184e+01 8.842459e+02 3.324363e+01 8.992250e+02 3.327543e+01 8.981845e+02 3.330723e+01 8.902753e+02 3.333902e+01 9.057856e+02 3.337082e+01 8.825215e+02 3.340262e+01 9.063865e+02 3.343441e+01 9.082693e+02 3.346621e+01 9.006265e+02 3.349801e+01 8.780968e+02 3.352980e+01 8.879456e+02 3.356160e+01 8.965192e+02 3.359340e+01 8.789540e+02 3.362520e+01 8.953055e+02 3.365699e+01 8.859799e+02 3.368879e+01 8.747992e+02 3.372059e+01 8.855952e+02 3.375238e+01 8.746107e+02 3.378418e+01 8.551524e+02 3.381598e+01 8.748655e+02 3.384777e+01 8.738986e+02 3.387957e+01 8.676480e+02 3.391137e+01 8.725970e+02 3.394316e+01 8.628220e+02 3.397496e+01 8.558477e+02 3.400676e+01 8.894935e+02 3.403855e+01 8.865295e+02 3.407035e+01 8.948608e+02 3.410215e+01 8.846882e+02 3.413395e+01 8.947706e+02 3.416574e+01 9.111989e+02 3.419754e+01 8.916195e+02 3.422934e+01 8.952991e+02 3.426113e+01 8.819515e+02 3.429293e+01 9.026036e+02 3.432473e+01 8.827650e+02 3.435652e+01 8.776479e+02 3.438832e+01 8.863546e+02 3.442012e+01 8.888861e+02 3.445191e+01 8.994237e+02 3.448371e+01 8.891401e+02 3.451551e+01 8.919133e+02 3.454730e+01 8.794811e+02 3.457910e+01 8.962922e+02 3.461090e+01 8.994790e+02 3.464270e+01 9.065430e+02 3.467449e+01 9.188032e+02 3.470629e+01 8.940920e+02 3.473809e+01 8.969113e+02 3.476988e+01 8.977907e+02 3.480168e+01 9.013209e+02 3.483348e+01 9.164739e+02 3.486527e+01 8.886051e+02 3.489707e+01 9.035811e+02 3.492887e+01 9.121014e+02 3.496066e+01 9.055894e+02 3.499246e+01 9.080078e+02 3.502426e+01 9.069882e+02 3.505605e+01 9.198692e+02 3.508785e+01 9.131465e+02 3.511965e+01 9.230845e+02 3.515145e+01 9.045103e+02 3.518324e+01 9.168110e+02 3.521504e+01 9.257075e+02 3.524684e+01 9.447714e+02 3.527863e+01 9.277316e+02 3.531043e+01 9.280037e+02 3.534223e+01 9.305836e+02 3.537402e+01 9.360305e+02 3.540582e+01 9.269102e+02 3.543762e+01 9.478525e+02 3.546941e+01 9.238425e+02 3.550121e+01 9.169335e+02 3.553301e+01 9.187079e+02 3.556480e+01 9.403870e+02 3.559660e+01 9.250225e+02 3.562840e+01 9.280157e+02 3.566020e+01 9.405071e+02 3.569199e+01 9.396398e+02 3.572379e+01 9.174235e+02 3.575559e+01 9.418833e+02 3.578738e+01 9.311747e+02 3.581918e+01 9.614671e+02 3.585098e+01 9.559544e+02 3.588277e+01 9.541298e+02 3.591457e+01 9.412511e+02 3.594637e+01 9.377728e+02 3.597816e+01 9.681083e+02 3.600996e+01 9.712620e+02 3.604176e+01 9.542355e+02 3.607355e+01 9.674075e+02 3.610535e+01 9.806757e+02 3.613715e+01 9.658298e+02 3.616895e+01 9.567700e+02 3.620074e+01 9.432517e+02 3.623254e+01 9.563416e+02 3.626434e+01 9.537872e+02 3.629613e+01 9.487536e+02 3.632793e+01 9.707354e+02 3.635973e+01 9.458748e+02 3.639152e+01 9.427000e+02 3.642332e+01 9.656013e+02 3.645512e+01 9.616826e+02 3.648691e+01 9.639575e+02 3.651871e+01 9.619369e+02 3.655051e+01 9.497169e+02 3.658230e+01 9.619344e+02 3.661410e+01 9.620273e+02 3.664590e+01 9.769028e+02 3.667770e+01 9.526895e+02 3.670949e+01 9.414153e+02 3.674129e+01 9.655206e+02 3.677309e+01 9.488243e+02 3.680488e+01 9.416301e+02 3.683668e+01 9.501793e+02 3.686848e+01 9.453746e+02 3.690027e+01 9.217853e+02 3.693207e+01 9.221402e+02 3.696387e+01 9.289230e+02 3.699566e+01 9.187236e+02 3.702746e+01 8.813523e+02 3.705926e+01 8.824141e+02 3.709105e+01 8.729634e+02 3.712285e+01 8.710241e+02 3.715465e+01 8.422229e+02 3.718645e+01 8.358535e+02 3.721824e+01 8.636823e+02 3.725004e+01 8.589338e+02 3.728184e+01 8.201100e+02 3.731363e+01 8.425435e+02 3.734543e+01 8.152635e+02 3.737723e+01 8.503894e+02 3.740902e+01 8.254182e+02 3.744082e+01 8.157078e+02 3.747262e+01 8.069280e+02 3.750441e+01 7.727239e+02 3.753621e+01 7.579901e+02 3.756801e+01 7.583818e+02 3.759980e+01 7.578166e+02 3.763160e+01 7.664983e+02 3.766340e+01 7.527310e+02 3.769520e+01 7.595173e+02 3.772699e+01 7.554923e+02 3.775879e+01 7.522058e+02 3.779059e+01 7.627799e+02 3.782238e+01 7.576954e+02 3.785418e+01 7.471747e+02 3.788598e+01 7.393233e+02 3.791777e+01 7.566405e+02 3.794957e+01 7.277456e+02 3.798137e+01 7.525051e+02 3.801316e+01 7.566581e+02 3.804496e+01 7.938275e+02 3.807676e+01 7.617623e+02 3.810855e+01 7.556439e+02 3.814035e+01 7.741458e+02 3.817215e+01 7.737098e+02 3.820395e+01 7.574440e+02 3.823574e+01 7.517223e+02 3.826754e+01 7.510426e+02 3.829934e+01 7.674504e+02 3.833113e+01 7.594352e+02 3.836293e+01 7.539064e+02 3.839473e+01 7.591682e+02 3.842652e+01 7.478129e+02 3.845832e+01 7.519799e+02 3.849012e+01 7.610920e+02 3.852191e+01 7.643567e+02 3.855371e+01 7.707397e+02 3.858551e+01 7.707049e+02 3.861730e+01 7.638373e+02 3.864910e+01 7.625606e+02 3.868090e+01 7.667518e+02 3.871270e+01 7.572419e+02 3.874449e+01 7.843373e+02 3.877629e+01 7.623147e+02 3.880809e+01 7.716938e+02 3.883988e+01 7.729362e+02 3.887168e+01 7.795298e+02 3.890348e+01 7.911304e+02 3.893527e+01 7.706641e+02 3.896707e+01 7.952605e+02 3.899887e+01 7.768852e+02 3.903066e+01 7.970092e+02 3.906246e+01 8.071122e+02 3.909426e+01 8.105863e+02 3.912605e+01 8.247841e+02 3.915785e+01 8.021074e+02 3.918965e+01 7.893240e+02 3.922145e+01 8.198956e+02 3.925324e+01 7.920284e+02 3.928504e+01 8.060269e+02 3.931684e+01 8.046194e+02 3.934863e+01 8.108489e+02 3.938043e+01 7.950937e+02 3.941223e+01 8.147499e+02 3.944402e+01 8.134557e+02 3.947582e+01 8.133478e+02 3.950762e+01 7.952892e+02 3.953941e+01 8.083202e+02 3.957121e+01 8.124913e+02 3.960301e+01 8.099468e+02 3.963480e+01 8.164889e+02 3.966660e+01 8.280710e+02 3.969840e+01 8.507794e+02 3.973020e+01 8.280896e+02 3.976199e+01 8.207473e+02 3.979379e+01 8.301498e+02 3.982559e+01 8.252319e+02 3.985738e+01 8.546611e+02 3.988918e+01 8.280061e+02 3.992098e+01 8.275070e+02 3.995277e+01 8.479142e+02 3.998457e+01 8.147029e+02 4.001637e+01 8.268705e+02 4.004816e+01 8.534221e+02 4.007996e+01 8.409105e+02 4.011176e+01 8.092867e+02 4.014355e+01 8.172479e+02 4.017535e+01 8.195460e+02 4.020715e+01 8.342884e+02 4.023895e+01 8.422113e+02 4.027074e+01 8.493680e+02 4.030254e+01 8.423587e+02 4.033434e+01 8.357234e+02 4.036613e+01 8.473943e+02 4.039793e+01 8.419697e+02 4.042973e+01 8.499673e+02 4.046152e+01 8.648274e+02 4.049332e+01 8.647326e+02 4.052512e+01 8.499763e+02 4.055691e+01 8.232389e+02 4.058871e+01 9.087129e+02 4.062051e+01 8.523593e+02 4.065230e+01 8.591598e+02 4.068410e+01 8.425299e+02 4.071590e+01 8.308793e+02 4.074770e+01 8.453320e+02 4.077949e+01 8.281772e+02 4.081129e+01 8.327288e+02 4.084309e+01 8.301593e+02 4.087488e+01 8.377724e+02 4.090668e+01 8.462239e+02 4.093848e+01 8.724637e+02 4.097027e+01 8.547946e+02 4.100207e+01 8.604678e+02 4.103387e+01 8.576104e+02 4.106566e+01 8.577553e+02 4.109746e+01 8.640165e+02 4.112926e+01 8.701290e+02 4.116105e+01 8.701557e+02 4.119285e+01 8.718622e+02 4.122465e+01 8.712743e+02 4.125645e+01 8.535554e+02 4.128824e+01 8.657312e+02 4.132004e+01 8.544054e+02 4.135184e+01 8.844881e+02 4.138363e+01 8.990133e+02 4.141543e+01 8.718859e+02 4.144723e+01 8.932084e+02 4.147902e+01 9.062912e+02 4.151082e+01 8.711203e+02 4.154262e+01 8.830298e+02 4.157441e+01 8.710516e+02 4.160621e+01 9.083385e+02 4.163801e+01 8.800795e+02 4.166980e+01 8.833160e+02 4.170160e+01 8.823978e+02 4.173340e+01 9.079274e+02 4.176520e+01 9.077073e+02 4.179699e+01 9.009650e+02 4.182879e+01 8.871098e+02 4.186059e+01 9.214591e+02 4.189238e+01 9.320699e+02 4.192418e+01 9.139147e+02 4.195598e+01 8.940577e+02 4.198777e+01 9.090838e+02 4.201957e+01 9.140985e+02 4.205137e+01 9.236030e+02 4.208316e+01 9.263670e+02 4.211496e+01 9.079178e+02 4.214676e+01 9.004706e+02 4.217855e+01 9.262722e+02 4.221035e+01 9.210811e+02 4.224215e+01 9.194955e+02 4.227395e+01 8.924752e+02 4.230574e+01 9.257912e+02 4.233754e+01 9.064996e+02 4.236934e+01 9.142626e+02 4.240113e+01 9.147169e+02 4.243293e+01 8.893663e+02 4.246473e+01 9.220210e+02 4.249652e+01 9.131255e+02 4.252832e+01 9.360163e+02 4.256012e+01 9.494834e+02 4.259191e+01 9.593932e+02 4.262371e+01 9.617064e+02 4.265551e+01 9.343324e+02 4.268730e+01 9.519695e+02 4.271910e+01 9.094671e+02 4.275090e+01 9.387357e+02 4.278270e+01 9.191116e+02 4.281449e+01 9.472945e+02 4.284629e+01 9.240795e+02 4.287809e+01 9.470947e+02 4.290988e+01 9.513362e+02 4.294168e+01 9.620342e+02 4.297348e+01 1.197107e+03 4.300527e+01 1.014792e+03 4.303707e+01 9.556635e+02 4.306887e+01 9.647109e+02 4.310066e+01 9.539990e+02 4.313246e+01 9.633189e+02 4.316426e+01 9.342227e+02 4.319605e+01 9.702894e+02 4.322785e+01 9.925436e+02 4.325965e+01 9.709636e+02 4.329145e+01 9.453757e+02 4.332324e+01 9.650060e+02 4.335504e+01 9.474520e+02 4.338684e+01 9.693007e+02 4.341863e+01 9.522173e+02 4.345043e+01 9.690314e+02 4.348223e+01 9.570738e+02 4.351402e+01 9.584416e+02 4.354582e+01 9.495684e+02 4.357762e+01 9.743287e+02 4.360941e+01 9.702488e+02 4.364121e+01 9.614413e+02 4.367301e+01 9.806683e+02 4.370480e+01 9.556897e+02 4.373660e+01 9.552611e+02 4.376840e+01 9.658875e+02 4.380020e+01 9.205201e+02 4.383199e+01 9.369347e+02 4.386379e+01 9.383251e+02 4.389559e+01 9.463987e+02 4.392738e+01 9.531592e+02 4.395918e+01 9.493439e+02 4.399098e+01 9.305252e+02 4.402277e+01 9.457437e+02 4.405457e+01 9.686331e+02 4.408637e+01 9.091705e+02 4.411816e+01 1.181132e+03 4.414996e+01 1.150666e+03 4.418176e+01 0.000000e+00 4.421355e+01 0.000000e+00 4.424535e+01 0.000000e+00 4.427715e+01 0.000000e+00 4.430895e+01 0.000000e+00 4.434074e+01 0.000000e+00 4.437254e+01 0.000000e+00 4.440434e+01 0.000000e+00 4.443613e+01 0.000000e+00 4.446793e+01 0.000000e+00 4.449973e+01 0.000000e+00 xypattern-1.1.2/tests/data/pattern_002.xy000066400000000000000000001256161457453276700203030ustar00rootroot00000000000000# == pyFAI calibration == # SplineFile: None # PixelSize: 2.000e-04, 2.000e-04 m # PONI: 6.103e-02, 2.967e-01 m # Distance Sample to Detector: 0.303704713223 m # Rotations: 0.007391 0.001688 0.000000 rad # # == Fit2d calibration == # Distance Sample-beamCenter: 303.713 mm # Center: x=1472.100, y=307.723 pix # Tilt: 0.434 deg TiltPlanRot: 167.137 deg # # Wavelength: 3.20179398976e-11 # Polarization factor: None # Normalization factor: None # --> ExampleData/spectra/FoG_D3_002.xy # 2th_deg I 1.589844e-02 2.783654e+01 4.769531e-02 1.095138e+03 7.949219e-02 2.033009e+03 1.112891e-01 2.816584e+03 1.430859e-01 3.121634e+03 1.748828e-01 3.298415e+03 2.066797e-01 3.351241e+03 2.384766e-01 3.075522e+03 2.702734e-01 3.162048e+03 3.020703e-01 3.040698e+03 3.338672e-01 3.115300e+03 3.656641e-01 3.188954e+03 3.974609e-01 3.365235e+03 4.292578e-01 3.346874e+03 4.610547e-01 3.205755e+03 4.928516e-01 3.373589e+03 5.246484e-01 3.360493e+03 5.564453e-01 3.536418e+03 5.882422e-01 3.613312e+03 6.200391e-01 3.627414e+03 6.518359e-01 3.705992e+03 6.836328e-01 3.697465e+03 7.154297e-01 3.457319e+03 7.472266e-01 3.373016e+03 7.790234e-01 3.422044e+03 8.108203e-01 3.292883e+03 8.426172e-01 3.225254e+03 8.744141e-01 3.201987e+03 9.062109e-01 3.189372e+03 9.380078e-01 3.134819e+03 9.698047e-01 3.329312e+03 1.001602e+00 3.325389e+03 1.033398e+00 3.361237e+03 1.065195e+00 3.300811e+03 1.096992e+00 3.270955e+03 1.128789e+00 3.360401e+03 1.160586e+00 3.200195e+03 1.192383e+00 3.319698e+03 1.224180e+00 3.540084e+03 1.255977e+00 3.653270e+03 1.287773e+00 3.627267e+03 1.319570e+00 3.625477e+03 1.351367e+00 3.702398e+03 1.383164e+00 3.609226e+03 1.414961e+00 3.398103e+03 1.446758e+00 3.468229e+03 1.478555e+00 3.527237e+03 1.510352e+00 3.436700e+03 1.542148e+00 3.374215e+03 1.573945e+00 3.373354e+03 1.605742e+00 3.450180e+03 1.637539e+00 3.457239e+03 1.669336e+00 3.412570e+03 1.701133e+00 3.460424e+03 1.732930e+00 3.308347e+03 1.764727e+00 3.317201e+03 1.796523e+00 3.366393e+03 1.828320e+00 3.443940e+03 1.860117e+00 3.533615e+03 1.891914e+00 3.552326e+03 1.923711e+00 3.559317e+03 1.955508e+00 3.605006e+03 1.987305e+00 3.768749e+03 2.019102e+00 3.786122e+03 2.050898e+00 3.941110e+03 2.082695e+00 4.116088e+03 2.114492e+00 4.317215e+03 2.146289e+00 4.662796e+03 2.178086e+00 4.938214e+03 2.209883e+00 5.294568e+03 2.241680e+00 5.759714e+03 2.273477e+00 6.112760e+03 2.305273e+00 6.396714e+03 2.337070e+00 6.692068e+03 2.368867e+00 6.932806e+03 2.400664e+00 7.094579e+03 2.432461e+00 7.250598e+03 2.464258e+00 7.337220e+03 2.496055e+00 7.349402e+03 2.527852e+00 7.477127e+03 2.559648e+00 7.662581e+03 2.591445e+00 7.792147e+03 2.623242e+00 8.004547e+03 2.655039e+00 8.071199e+03 2.686836e+00 8.122974e+03 2.718633e+00 8.404402e+03 2.750430e+00 8.679531e+03 2.782227e+00 8.918372e+03 2.814023e+00 9.094810e+03 2.845820e+00 9.339315e+03 2.877617e+00 9.642244e+03 2.909414e+00 9.939998e+03 2.941211e+00 1.023952e+03 2.973008e+00 1.046896e+03 3.004805e+00 1.073334e+03 3.036602e+00 1.106387e+03 3.068398e+00 1.130356e+03 3.100195e+00 1.152389e+03 3.131992e+00 1.181613e+03 3.163789e+00 1.212703e+03 3.195586e+00 1.222792e+03 3.227383e+00 1.234693e+03 3.259180e+00 1.263594e+03 3.290977e+00 1.269543e+03 3.322773e+00 1.282891e+03 3.354570e+00 1.296315e+03 3.386367e+00 1.303582e+03 3.418164e+00 1.317663e+03 3.449961e+00 1.328685e+03 3.481758e+00 1.347074e+03 3.513555e+00 1.366699e+03 3.545352e+00 1.384361e+03 3.577148e+00 1.395662e+03 3.608945e+00 1.398847e+03 3.640742e+00 1.421484e+03 3.672539e+00 1.435180e+03 3.704336e+00 1.453775e+03 3.736133e+00 1.468419e+03 3.767930e+00 1.474614e+03 3.799727e+00 1.484593e+03 3.831523e+00 1.493021e+03 3.863320e+00 1.495411e+03 3.895117e+00 1.507324e+03 3.926914e+00 1.520800e+03 3.958711e+00 1.529580e+03 3.990508e+00 1.534582e+03 4.022305e+00 1.547911e+03 4.054102e+00 1.565999e+03 4.085898e+00 1.578089e+03 4.117695e+00 1.589788e+03 4.149492e+00 1.593075e+03 4.181289e+00 1.602700e+03 4.213086e+00 1.621015e+03 4.244883e+00 1.633318e+03 4.276680e+00 1.655388e+03 4.308477e+00 1.667021e+03 4.340273e+00 1.664348e+03 4.372070e+00 1.657753e+03 4.403867e+00 1.671425e+03 4.435664e+00 1.673683e+03 4.467461e+00 1.691271e+03 4.499258e+00 1.725188e+03 4.531055e+00 1.746499e+03 4.562852e+00 1.768112e+03 4.594648e+00 1.801424e+03 4.626445e+00 1.833799e+03 4.658242e+00 1.855755e+03 4.690039e+00 1.898120e+03 4.721836e+00 1.937275e+03 4.753633e+00 1.964564e+03 4.785430e+00 2.010219e+03 4.817227e+00 2.044011e+03 4.849023e+00 2.060825e+03 4.880820e+00 2.104863e+03 4.912617e+00 2.130474e+03 4.944414e+00 2.150947e+03 4.976211e+00 2.152903e+03 5.008008e+00 2.170222e+03 5.039805e+00 2.141345e+03 5.071602e+00 2.082267e+03 5.103398e+00 2.043480e+03 5.135195e+00 2.007777e+03 5.166992e+00 1.990330e+03 5.198789e+00 1.976548e+03 5.230586e+00 1.959223e+03 5.262383e+00 1.946131e+03 5.294180e+00 1.928100e+03 5.325977e+00 1.911055e+03 5.357773e+00 1.902043e+03 5.389570e+00 1.889393e+03 5.421367e+00 1.871896e+03 5.453164e+00 1.860749e+03 5.484961e+00 1.858863e+03 5.516758e+00 1.858085e+03 5.548555e+00 1.841895e+03 5.580352e+00 1.841164e+03 5.612148e+00 1.834058e+03 5.643945e+00 1.827774e+03 5.675742e+00 1.819865e+03 5.707539e+00 1.815591e+03 5.739336e+00 1.815964e+03 5.771133e+00 1.814093e+03 5.802930e+00 1.802835e+03 5.834727e+00 1.801510e+03 5.866523e+00 1.804427e+03 5.898320e+00 1.803480e+03 5.930117e+00 1.787737e+03 5.961914e+00 1.782824e+03 5.993711e+00 1.779898e+03 6.025508e+00 1.777789e+03 6.057305e+00 1.776635e+03 6.089102e+00 1.769513e+03 6.120898e+00 1.767901e+03 6.152695e+00 1.766183e+03 6.184492e+00 1.769457e+03 6.216289e+00 1.768648e+03 6.248086e+00 1.764583e+03 6.279883e+00 1.763220e+03 6.311680e+00 1.761765e+03 6.343477e+00 1.767837e+03 6.375273e+00 1.761876e+03 6.407070e+00 1.758291e+03 6.438867e+00 1.752023e+03 6.470664e+00 1.758592e+03 6.502461e+00 1.747559e+03 6.534258e+00 1.734146e+03 6.566055e+00 1.743463e+03 6.597852e+00 1.731420e+03 6.629648e+00 1.726278e+03 6.661445e+00 1.740076e+03 6.693242e+00 1.746797e+03 6.725039e+00 1.748721e+03 6.756836e+00 1.748738e+03 6.788633e+00 1.740984e+03 6.820430e+00 1.733254e+03 6.852227e+00 1.735209e+03 6.884023e+00 1.742391e+03 6.915820e+00 1.736208e+03 6.947617e+00 1.723919e+03 6.979414e+00 1.726855e+03 7.011211e+00 1.735583e+03 7.043008e+00 1.741562e+03 7.074805e+00 1.740370e+03 7.106602e+00 1.736280e+03 7.138398e+00 1.737075e+03 7.170195e+00 1.749744e+03 7.201992e+00 1.743920e+03 7.233789e+00 1.746604e+03 7.265586e+00 1.755449e+03 7.297383e+00 1.761263e+03 7.329180e+00 1.753342e+03 7.360977e+00 1.766447e+03 7.392773e+00 1.772570e+03 7.424570e+00 1.768940e+03 7.456367e+00 1.782651e+03 7.488164e+00 1.793737e+03 7.519961e+00 1.784523e+03 7.551758e+00 1.785200e+03 7.583555e+00 1.791498e+03 7.615352e+00 1.805264e+03 7.647148e+00 1.804799e+03 7.678945e+00 1.807963e+03 7.710742e+00 1.807759e+03 7.742539e+00 1.823484e+03 7.774336e+00 1.832463e+03 7.806133e+00 1.846378e+03 7.837930e+00 1.855686e+03 7.869727e+00 1.863534e+03 7.901523e+00 1.865880e+03 7.933320e+00 1.869635e+03 7.965117e+00 1.869353e+03 7.996914e+00 1.882209e+03 8.028711e+00 1.876427e+03 8.060508e+00 1.882609e+03 8.092305e+00 1.898365e+03 8.124102e+00 1.895000e+03 8.155898e+00 1.890354e+03 8.187695e+00 1.887963e+03 8.219492e+00 1.900624e+03 8.251289e+00 1.903298e+03 8.283086e+00 1.887630e+03 8.314883e+00 1.896348e+03 8.346680e+00 1.898163e+03 8.378477e+00 1.883228e+03 8.410273e+00 1.873485e+03 8.442070e+00 1.877433e+03 8.473867e+00 1.881615e+03 8.505664e+00 1.871235e+03 8.537461e+00 1.872225e+03 8.569258e+00 1.857898e+03 8.601055e+00 1.849874e+03 8.632852e+00 1.845940e+03 8.664648e+00 1.853570e+03 8.696445e+00 1.848596e+03 8.728242e+00 1.844108e+03 8.760039e+00 1.856406e+03 8.791836e+00 1.854254e+03 8.823633e+00 1.842910e+03 8.855430e+00 1.857857e+03 8.887227e+00 1.865360e+03 8.919023e+00 1.870749e+03 8.950820e+00 1.841643e+03 8.982617e+00 1.825259e+03 9.014414e+00 1.811492e+03 9.046211e+00 1.822854e+03 9.078008e+00 1.825633e+03 9.109805e+00 1.829213e+03 9.141602e+00 1.819659e+03 9.173398e+00 1.835620e+03 9.205195e+00 1.849149e+03 9.236992e+00 1.845523e+03 9.268789e+00 1.850679e+03 9.300586e+00 1.855420e+03 9.332383e+00 1.865573e+03 9.364180e+00 1.867503e+03 9.395977e+00 1.862335e+03 9.427773e+00 1.874327e+03 9.459570e+00 1.883161e+03 9.491367e+00 1.894166e+03 9.523164e+00 1.905948e+03 9.554961e+00 1.910792e+03 9.586758e+00 1.915255e+03 9.618555e+00 1.921584e+03 9.650352e+00 1.945236e+03 9.682148e+00 1.957135e+03 9.713945e+00 1.968074e+03 9.745742e+00 1.969641e+03 9.777539e+00 1.976783e+03 9.809336e+00 1.977109e+03 9.841133e+00 1.987742e+03 9.872930e+00 1.993844e+03 9.904727e+00 1.999467e+03 9.936523e+00 2.011625e+03 9.968320e+00 2.017275e+03 1.000012e+01 2.016822e+03 1.003191e+01 2.012184e+03 1.006371e+01 2.009421e+03 1.009551e+01 2.027617e+03 1.012730e+01 2.032560e+03 1.015910e+01 2.036917e+03 1.019090e+01 2.038177e+03 1.022270e+01 2.049924e+03 1.025449e+01 2.049669e+03 1.028629e+01 2.042780e+03 1.031809e+01 2.055395e+03 1.034988e+01 2.050885e+03 1.038168e+01 2.060785e+03 1.041348e+01 2.042083e+03 1.044527e+01 2.037786e+03 1.047707e+01 2.038267e+03 1.050887e+01 2.027386e+03 1.054066e+01 2.026172e+03 1.057246e+01 2.025537e+03 1.060426e+01 2.027401e+03 1.063605e+01 2.016616e+03 1.066785e+01 2.004411e+03 1.069965e+01 1.998371e+03 1.073145e+01 2.003928e+03 1.076324e+01 2.003517e+03 1.079504e+01 1.983587e+03 1.082684e+01 1.984659e+03 1.085863e+01 1.980452e+03 1.089043e+01 1.974269e+03 1.092223e+01 1.962551e+03 1.095402e+01 1.949566e+03 1.098582e+01 1.956660e+03 1.101762e+01 1.952540e+03 1.104941e+01 1.941417e+03 1.108121e+01 1.942117e+03 1.111301e+01 1.944194e+03 1.114480e+01 1.935728e+03 1.117660e+01 1.933008e+03 1.120840e+01 1.939099e+03 1.124020e+01 1.932036e+03 1.127199e+01 1.923866e+03 1.130379e+01 1.921779e+03 1.133559e+01 1.915243e+03 1.136738e+01 1.912061e+03 1.139918e+01 1.897256e+03 1.143098e+01 1.880657e+03 1.146277e+01 1.883494e+03 1.149457e+01 1.891675e+03 1.152637e+01 1.881602e+03 1.155816e+01 1.876219e+03 1.158996e+01 1.875357e+03 1.162176e+01 1.870611e+03 1.165355e+01 1.864327e+03 1.168535e+01 1.866120e+03 1.171715e+01 1.854948e+03 1.174895e+01 1.842896e+03 1.178074e+01 1.847140e+03 1.181254e+01 1.837293e+03 1.184434e+01 1.835791e+03 1.187613e+01 1.837068e+03 1.190793e+01 1.840038e+03 1.193973e+01 1.839232e+03 1.197152e+01 1.829281e+03 1.200332e+01 1.825755e+03 1.203512e+01 1.813677e+03 1.206691e+01 1.805843e+03 1.209871e+01 1.801444e+03 1.213051e+01 1.795112e+03 1.216230e+01 1.793158e+03 1.219410e+01 1.805004e+03 1.222590e+01 1.806416e+03 1.225770e+01 1.797937e+03 1.228949e+01 1.791331e+03 1.232129e+01 1.788561e+03 1.235309e+01 1.790132e+03 1.238488e+01 1.788468e+03 1.241668e+01 1.794495e+03 1.244848e+01 1.780132e+03 1.248027e+01 1.779398e+03 1.251207e+01 1.797918e+03 1.254387e+01 1.805787e+03 1.257566e+01 1.801468e+03 1.260746e+01 1.792185e+03 1.263926e+01 1.775116e+03 1.267105e+01 1.772874e+03 1.270285e+01 1.766409e+03 1.273465e+01 1.771382e+03 1.276645e+01 1.773034e+03 1.279824e+01 1.769860e+03 1.283004e+01 1.770804e+03 1.286184e+01 1.756597e+03 1.289363e+01 1.758108e+03 1.292543e+01 1.759687e+03 1.295723e+01 1.747078e+03 1.298902e+01 1.745428e+03 1.302082e+01 1.757870e+03 1.305262e+01 1.767817e+03 1.308441e+01 1.759956e+03 1.311621e+01 1.755389e+03 1.314801e+01 1.740807e+03 1.317980e+01 1.737442e+03 1.321160e+01 1.742738e+03 1.324340e+01 1.745901e+03 1.327520e+01 1.739560e+03 1.330699e+01 1.739681e+03 1.333879e+01 1.738975e+03 1.337059e+01 1.738728e+03 1.340238e+01 1.738423e+03 1.343418e+01 1.731561e+03 1.346598e+01 1.731461e+03 1.349777e+01 1.726254e+03 1.352957e+01 1.732165e+03 1.356137e+01 1.733709e+03 1.359316e+01 1.729487e+03 1.362496e+01 1.740512e+03 1.365676e+01 1.730447e+03 1.368855e+01 1.746861e+03 1.372035e+01 1.739447e+03 1.375215e+01 1.732249e+03 1.378395e+01 1.724014e+03 1.381574e+01 1.722707e+03 1.384754e+01 1.724171e+03 1.387934e+01 1.727097e+03 1.391113e+01 1.712454e+03 1.394293e+01 1.724748e+03 1.397473e+01 1.729325e+03 1.400652e+01 1.723265e+03 1.403832e+01 1.724320e+03 1.407012e+01 1.721827e+03 1.410191e+01 1.705101e+03 1.413371e+01 1.709523e+03 1.416551e+01 1.720160e+03 1.419730e+01 1.720700e+03 1.422910e+01 1.716317e+03 1.426090e+01 1.717588e+03 1.429270e+01 1.711179e+03 1.432449e+01 1.727235e+03 1.435629e+01 1.727337e+03 1.438809e+01 1.728917e+03 1.441988e+01 1.722569e+03 1.445168e+01 1.703817e+03 1.448348e+01 1.698958e+03 1.451527e+01 1.716136e+03 1.454707e+01 1.707297e+03 1.457887e+01 1.718070e+03 1.461066e+01 1.720128e+03 1.464246e+01 1.711372e+03 1.467426e+01 1.705055e+03 1.470605e+01 1.691806e+03 1.473785e+01 1.691258e+03 1.476965e+01 1.694296e+03 1.480145e+01 1.704776e+03 1.483324e+01 1.695218e+03 1.486504e+01 1.666598e+03 1.489684e+01 1.675356e+03 1.492863e+01 1.666778e+03 1.496043e+01 1.660682e+03 1.499223e+01 1.672172e+03 1.502402e+01 1.667285e+03 1.505582e+01 1.663557e+03 1.508762e+01 1.661102e+03 1.511941e+01 1.651938e+03 1.515121e+01 1.639672e+03 1.518301e+01 1.635459e+03 1.521480e+01 1.625178e+03 1.524660e+01 1.603471e+03 1.527840e+01 1.596388e+03 1.531020e+01 1.588583e+03 1.534199e+01 1.577514e+03 1.537379e+01 1.562648e+03 1.540559e+01 1.562170e+03 1.543738e+01 1.557563e+03 1.546918e+01 1.539094e+03 1.550098e+01 1.528930e+03 1.553277e+01 1.523965e+03 1.556457e+01 1.529943e+03 1.559637e+01 1.508528e+03 1.562816e+01 1.503915e+03 1.565996e+01 1.513803e+03 1.569176e+01 1.505751e+03 1.572355e+01 1.502470e+03 1.575535e+01 1.495122e+03 1.578715e+01 1.487278e+03 1.581895e+01 1.485081e+03 1.585074e+01 1.475166e+03 1.588254e+01 1.465609e+03 1.591434e+01 1.461308e+03 1.594613e+01 1.459321e+03 1.597793e+01 1.434857e+03 1.600973e+01 1.419917e+03 1.604152e+01 1.412780e+03 1.607332e+01 1.401850e+03 1.610512e+01 1.389141e+03 1.613691e+01 1.380838e+03 1.616871e+01 1.376040e+03 1.620051e+01 1.369632e+03 1.623230e+01 1.364420e+03 1.626410e+01 1.361641e+03 1.629590e+01 1.363085e+03 1.632770e+01 1.353595e+03 1.635949e+01 1.329791e+03 1.639129e+01 1.325965e+03 1.642309e+01 1.336680e+03 1.645488e+01 1.318102e+03 1.648668e+01 1.320414e+03 1.651848e+01 1.320670e+03 1.655027e+01 1.316455e+03 1.658207e+01 1.306849e+03 1.661387e+01 1.305950e+03 1.664566e+01 1.301837e+03 1.667746e+01 1.290591e+03 1.670926e+01 1.287553e+03 1.674105e+01 1.272303e+03 1.677285e+01 1.238049e+03 1.680465e+01 1.240027e+03 1.683645e+01 1.242464e+03 1.686824e+01 1.229326e+03 1.690004e+01 1.216097e+03 1.693184e+01 1.209161e+03 1.696363e+01 1.215454e+03 1.699543e+01 1.223226e+03 1.702723e+01 1.206942e+03 1.705902e+01 1.184629e+03 1.709082e+01 1.183169e+03 1.712262e+01 1.183968e+03 1.715441e+01 1.168611e+03 1.718621e+01 1.155671e+03 1.721801e+01 1.153076e+03 1.724980e+01 1.142596e+03 1.728160e+01 1.133013e+03 1.731340e+01 1.139177e+03 1.734520e+01 1.133767e+03 1.737699e+01 1.123116e+03 1.740879e+01 1.128763e+03 1.744059e+01 1.114906e+03 1.747238e+01 1.112593e+03 1.750418e+01 1.100420e+03 1.753598e+01 1.092258e+03 1.756777e+01 1.080347e+03 1.759957e+01 1.074892e+03 1.763137e+01 1.052857e+03 1.766316e+01 1.047504e+03 1.769496e+01 1.040089e+03 1.772676e+01 1.037968e+03 1.775855e+01 1.033282e+03 1.779035e+01 1.032239e+03 1.782215e+01 1.016419e+03 1.785395e+01 1.012013e+03 1.788574e+01 1.008040e+03 1.791754e+01 9.954012e+03 1.794934e+01 9.888437e+03 1.798113e+01 9.802795e+03 1.801293e+01 9.757906e+03 1.804473e+01 9.832683e+03 1.807652e+01 9.744631e+03 1.810832e+01 9.698241e+03 1.814012e+01 9.670648e+03 1.817191e+01 9.474576e+03 1.820371e+01 9.558972e+03 1.823551e+01 9.630371e+03 1.826730e+01 9.586901e+03 1.829910e+01 9.636565e+03 1.833090e+01 9.680530e+03 1.836270e+01 9.600904e+03 1.839449e+01 9.596682e+03 1.842629e+01 9.449046e+03 1.845809e+01 9.396594e+03 1.848988e+01 9.495325e+03 1.852168e+01 9.473841e+03 1.855348e+01 9.536556e+03 1.858527e+01 9.383257e+03 1.861707e+01 9.329375e+03 1.864887e+01 9.351396e+03 1.868066e+01 9.341401e+03 1.871246e+01 9.257520e+03 1.874426e+01 9.286554e+03 1.877605e+01 9.401724e+03 1.880785e+01 9.341171e+03 1.883965e+01 9.341044e+03 1.887145e+01 9.359571e+03 1.890324e+01 9.381083e+03 1.893504e+01 9.301729e+03 1.896684e+01 9.258346e+03 1.899863e+01 9.258363e+03 1.903043e+01 9.243101e+03 1.906223e+01 9.042357e+03 1.909402e+01 9.146159e+03 1.912582e+01 9.198157e+03 1.915762e+01 9.217045e+03 1.918941e+01 9.104848e+03 1.922121e+01 9.197628e+03 1.925301e+01 9.193240e+03 1.928480e+01 9.004319e+03 1.931660e+01 8.904620e+03 1.934840e+01 9.063584e+03 1.938020e+01 9.087590e+03 1.941199e+01 8.961273e+03 1.944379e+01 9.019857e+03 1.947559e+01 8.991208e+03 1.950738e+01 9.003167e+03 1.953918e+01 8.942974e+03 1.957098e+01 8.973907e+03 1.960277e+01 8.843256e+03 1.963457e+01 8.845559e+03 1.966637e+01 8.996265e+03 1.969816e+01 8.994901e+03 1.972996e+01 8.905420e+03 1.976176e+01 8.905939e+03 1.979355e+01 8.821235e+03 1.982535e+01 8.889288e+03 1.985715e+01 8.880417e+03 1.988895e+01 8.902755e+03 1.992074e+01 8.916241e+03 1.995254e+01 8.820037e+03 1.998434e+01 8.757913e+03 2.001613e+01 8.753021e+03 2.004793e+01 8.752045e+03 2.007973e+01 8.719269e+03 2.011152e+01 8.707912e+03 2.014332e+01 8.736333e+03 2.017512e+01 8.642715e+03 2.020691e+01 8.664068e+03 2.023871e+01 8.650804e+03 2.027051e+01 8.730546e+03 2.030230e+01 8.690426e+03 2.033410e+01 8.553922e+03 2.036590e+01 8.645991e+03 2.039770e+01 8.624564e+03 2.042949e+01 8.483257e+03 2.046129e+01 8.556233e+03 2.049309e+01 8.489854e+03 2.052488e+01 8.563615e+03 2.055668e+01 8.470160e+03 2.058848e+01 8.406036e+03 2.062027e+01 8.500496e+03 2.065207e+01 8.472051e+03 2.068387e+01 8.326144e+03 2.071566e+01 8.441262e+03 2.074746e+01 8.288128e+03 2.077926e+01 8.357694e+03 2.081105e+01 8.264443e+03 2.084285e+01 8.797410e+03 2.087465e+01 9.080255e+03 2.090645e+01 9.443915e+03 2.093824e+01 9.634183e+03 2.097004e+01 9.816015e+03 2.100184e+01 9.934182e+03 2.103363e+01 1.006912e+03 2.106543e+01 1.042776e+03 2.109723e+01 1.050555e+03 2.112902e+01 1.053174e+03 2.116082e+01 1.087320e+03 2.119262e+01 1.108386e+03 2.122441e+01 1.105902e+03 2.125621e+01 1.133752e+03 2.128801e+01 1.134335e+03 2.131980e+01 1.147325e+03 2.135160e+01 1.160189e+03 2.138340e+01 1.158559e+03 2.141520e+01 1.170063e+03 2.144699e+01 1.155961e+03 2.147879e+01 1.166406e+03 2.151059e+01 1.151162e+03 2.154238e+01 1.134719e+03 2.157418e+01 1.127784e+03 2.160598e+01 1.126997e+03 2.163777e+01 1.127638e+03 2.166957e+01 1.110696e+03 2.170137e+01 1.124136e+03 2.173316e+01 1.105418e+03 2.176496e+01 1.088826e+03 2.179676e+01 1.094000e+03 2.182855e+01 1.107499e+03 2.186035e+01 1.098193e+03 2.189215e+01 1.081856e+03 2.192395e+01 1.065970e+03 2.195574e+01 1.075586e+03 2.198754e+01 1.077270e+03 2.201934e+01 1.085078e+03 2.205113e+01 1.090472e+03 2.208293e+01 1.085112e+03 2.211473e+01 1.069171e+03 2.214652e+01 1.054005e+03 2.217832e+01 1.069606e+03 2.221012e+01 1.056193e+03 2.224191e+01 1.056616e+03 2.227371e+01 1.058277e+03 2.230551e+01 1.057921e+03 2.233730e+01 1.061446e+03 2.236910e+01 1.068044e+03 2.240090e+01 1.040487e+03 2.243270e+01 1.063536e+03 2.246449e+01 1.066450e+03 2.249629e+01 1.067788e+03 2.252809e+01 1.053635e+03 2.255988e+01 1.070899e+03 2.259168e+01 1.042041e+03 2.262348e+01 1.042707e+03 2.265527e+01 1.054247e+03 2.268707e+01 1.038942e+03 2.271887e+01 1.043677e+03 2.275066e+01 1.062499e+03 2.278246e+01 1.050901e+03 2.281426e+01 1.026068e+03 2.284605e+01 1.044000e+03 2.287785e+01 1.027814e+03 2.290965e+01 1.055846e+03 2.294145e+01 1.062110e+03 2.297324e+01 1.063232e+03 2.300504e+01 1.036380e+03 2.303684e+01 1.038084e+03 2.306863e+01 1.050962e+03 2.310043e+01 1.042186e+03 2.313223e+01 1.039685e+03 2.316402e+01 1.049757e+03 2.319582e+01 1.028841e+03 2.322762e+01 1.033396e+03 2.325941e+01 1.049197e+03 2.329121e+01 1.048440e+03 2.332301e+01 1.030664e+03 2.335480e+01 1.001313e+03 2.338660e+01 1.014493e+03 2.341840e+01 1.022655e+03 2.345020e+01 1.024083e+03 2.348199e+01 1.014162e+03 2.351379e+01 1.015895e+03 2.354559e+01 1.014967e+03 2.357738e+01 1.023555e+03 2.360918e+01 9.925557e+03 2.364098e+01 1.029672e+03 2.367277e+01 1.011265e+03 2.370457e+01 1.022145e+03 2.373637e+01 9.948123e+03 2.376816e+01 1.003235e+03 2.379996e+01 9.998188e+03 2.383176e+01 1.012857e+03 2.386355e+01 1.008047e+03 2.389535e+01 1.019444e+03 2.392715e+01 1.011355e+03 2.395895e+01 1.012598e+03 2.399074e+01 1.024777e+03 2.402254e+01 9.994086e+03 2.405434e+01 1.008103e+03 2.408613e+01 9.989171e+03 2.411793e+01 9.902098e+03 2.414973e+01 1.008348e+03 2.418152e+01 9.983836e+03 2.421332e+01 9.939860e+03 2.424512e+01 1.014768e+03 2.427691e+01 1.005980e+03 2.430871e+01 1.000704e+03 2.434051e+01 1.007666e+03 2.437230e+01 1.013065e+03 2.440410e+01 9.989894e+03 2.443590e+01 9.919724e+03 2.446770e+01 9.865905e+03 2.449949e+01 1.006410e+03 2.453129e+01 9.985139e+03 2.456309e+01 9.950984e+03 2.459488e+01 9.913254e+03 2.462668e+01 9.952681e+03 2.465848e+01 9.895071e+03 2.469027e+01 9.963120e+03 2.472207e+01 9.862048e+03 2.475387e+01 9.690010e+03 2.478566e+01 9.757450e+03 2.481746e+01 9.852858e+03 2.484926e+01 9.828674e+03 2.488105e+01 9.732799e+03 2.491285e+01 9.639625e+03 2.494465e+01 9.670499e+03 2.497645e+01 9.980379e+03 2.500824e+01 9.920479e+03 2.504004e+01 9.780302e+03 2.507184e+01 9.818477e+03 2.510363e+01 9.665303e+03 2.513543e+01 9.614746e+03 2.516723e+01 9.793343e+03 2.519902e+01 9.940481e+03 2.523082e+01 9.804270e+03 2.526262e+01 9.824752e+03 2.529441e+01 9.933340e+03 2.532621e+01 9.716637e+03 2.535801e+01 9.643159e+03 2.538980e+01 9.725233e+03 2.542160e+01 9.794926e+03 2.545340e+01 9.726799e+03 2.548520e+01 9.876579e+03 2.551699e+01 9.928019e+03 2.554879e+01 9.784048e+03 2.558059e+01 9.633307e+03 2.561238e+01 9.664421e+03 2.564418e+01 9.792368e+03 2.567598e+01 9.507254e+03 2.570777e+01 9.586782e+03 2.573957e+01 9.572450e+03 2.577137e+01 9.621425e+03 2.580316e+01 9.577064e+03 2.583496e+01 9.773462e+03 2.586676e+01 9.736149e+03 2.589855e+01 9.755182e+03 2.593035e+01 9.739825e+03 2.596215e+01 9.576415e+03 2.599395e+01 9.734972e+03 2.602574e+01 9.508908e+03 2.605754e+01 9.827204e+03 2.608934e+01 9.658718e+03 2.612113e+01 9.459945e+03 2.615293e+01 9.540461e+03 2.618473e+01 9.554504e+03 2.621652e+01 9.572177e+03 2.624832e+01 9.520886e+03 2.628012e+01 9.768544e+03 2.631191e+01 9.649184e+03 2.634371e+01 9.872205e+03 2.637551e+01 9.784018e+03 2.640730e+01 9.697866e+03 2.643910e+01 9.597155e+03 2.647090e+01 9.730731e+03 2.650270e+01 9.487640e+03 2.653449e+01 9.605753e+03 2.656629e+01 9.559016e+03 2.659809e+01 9.552336e+03 2.662988e+01 9.541165e+03 2.666168e+01 9.580716e+03 2.669348e+01 9.577574e+03 2.672527e+01 9.456075e+03 2.675707e+01 9.325435e+03 2.678887e+01 9.413365e+03 2.682066e+01 9.327093e+03 2.685246e+01 9.516620e+03 2.688426e+01 9.383571e+03 2.691605e+01 9.350350e+03 2.694785e+01 9.248091e+03 2.697965e+01 9.416048e+03 2.701145e+01 9.416263e+03 2.704324e+01 9.419449e+03 2.707504e+01 9.496813e+03 2.710684e+01 9.300334e+03 2.713863e+01 9.380594e+03 2.717043e+01 9.244352e+03 2.720223e+01 9.273778e+03 2.723402e+01 9.336970e+03 2.726582e+01 9.491959e+03 2.729762e+01 9.396919e+03 2.732941e+01 9.423392e+03 2.736121e+01 9.296347e+03 2.739301e+01 9.406616e+03 2.742480e+01 9.354875e+03 2.745660e+01 9.605267e+03 2.748840e+01 9.477783e+03 2.752020e+01 9.576967e+03 2.755199e+01 9.218286e+03 2.758379e+01 9.072963e+03 2.761559e+01 9.305441e+03 2.764738e+01 9.444208e+03 2.767918e+01 9.484200e+03 2.771098e+01 9.338247e+03 2.774277e+01 9.386201e+03 2.777457e+01 9.264374e+03 2.780637e+01 9.222418e+03 2.783816e+01 9.301223e+03 2.786996e+01 9.583794e+03 2.790176e+01 9.432903e+03 2.793355e+01 9.431313e+03 2.796535e+01 9.351109e+03 2.799715e+01 9.463781e+03 2.802895e+01 9.377272e+03 2.806074e+01 9.056894e+03 2.809254e+01 9.236819e+03 2.812434e+01 9.278481e+03 2.815613e+01 9.326636e+03 2.818793e+01 9.362339e+03 2.821973e+01 9.323882e+03 2.825152e+01 9.148441e+03 2.828332e+01 9.283159e+03 2.831512e+01 9.208775e+03 2.834691e+01 9.214617e+03 2.837871e+01 9.091729e+03 2.841051e+01 9.140533e+03 2.844230e+01 9.350214e+03 2.847410e+01 9.255037e+03 2.850590e+01 9.117816e+03 2.853770e+01 9.170311e+03 2.856949e+01 9.183805e+03 2.860129e+01 9.127266e+03 2.863309e+01 9.046544e+03 2.866488e+01 9.227203e+03 2.869668e+01 9.138318e+03 2.872848e+01 9.305432e+03 2.876027e+01 9.319236e+03 2.879207e+01 8.993914e+03 2.882387e+01 8.998221e+03 2.885566e+01 9.346294e+03 2.888746e+01 9.395400e+03 2.891926e+01 9.295502e+03 2.895105e+01 9.294635e+03 2.898285e+01 9.287417e+03 2.901465e+01 9.348281e+03 2.904645e+01 9.364261e+03 2.907824e+01 9.363995e+03 2.911004e+01 9.240182e+03 2.914184e+01 9.401227e+03 2.917363e+01 9.240377e+03 2.920543e+01 9.127212e+03 2.923723e+01 9.017258e+03 2.926902e+01 9.320646e+03 2.930082e+01 9.601276e+03 2.933262e+01 9.252011e+03 2.936441e+01 9.211760e+03 2.939621e+01 9.236875e+03 2.942801e+01 9.490769e+03 2.945980e+01 9.196946e+03 2.949160e+01 9.200186e+03 2.952340e+01 9.115145e+03 2.955520e+01 9.328610e+03 2.958699e+01 9.093574e+03 2.961879e+01 9.090600e+03 2.965059e+01 9.279958e+03 2.968238e+01 9.368233e+03 2.971418e+01 9.404084e+03 2.974598e+01 9.534146e+03 2.977777e+01 9.421123e+03 2.980957e+01 9.162519e+03 2.984137e+01 9.237281e+03 2.987316e+01 8.907531e+03 2.990496e+01 8.952452e+03 2.993676e+01 9.059343e+03 2.996855e+01 8.915552e+03 3.000035e+01 8.912007e+03 3.003215e+01 8.994929e+03 3.006395e+01 9.102133e+03 3.009574e+01 9.119410e+03 3.012754e+01 9.279044e+03 3.015934e+01 9.391481e+03 3.019113e+01 9.054185e+03 3.022293e+01 8.977422e+03 3.025473e+01 9.332287e+03 3.028652e+01 9.381953e+03 3.031832e+01 9.454394e+03 3.035012e+01 9.212537e+03 3.038191e+01 9.003978e+03 3.041371e+01 9.205600e+03 3.044551e+01 9.258334e+03 3.047730e+01 9.153539e+03 3.050910e+01 9.221683e+03 3.054090e+01 9.155026e+03 3.057270e+01 8.998843e+03 3.060449e+01 9.145148e+03 3.063629e+01 9.064908e+03 3.066809e+01 9.151246e+03 3.069988e+01 9.185348e+03 3.073168e+01 9.162151e+03 3.076348e+01 9.213611e+03 3.079527e+01 9.177645e+03 3.082707e+01 9.387463e+03 3.085887e+01 9.100703e+03 3.089066e+01 9.061808e+03 3.092246e+01 9.160338e+03 3.095426e+01 9.489196e+03 3.098605e+01 9.333205e+03 3.101785e+01 9.142208e+03 3.104965e+01 9.246824e+03 3.108145e+01 8.892683e+03 3.111324e+01 8.725427e+03 3.114504e+01 9.135745e+03 3.117684e+01 9.116046e+03 3.120863e+01 9.047054e+03 3.124043e+01 9.104167e+03 3.127223e+01 9.005333e+03 3.130402e+01 8.837800e+03 3.133582e+01 9.148099e+03 3.136762e+01 8.982129e+03 3.139941e+01 8.935283e+03 3.143121e+01 8.954837e+03 3.146301e+01 9.037703e+03 3.149480e+01 8.972228e+03 3.152660e+01 9.074706e+03 3.155840e+01 9.093664e+03 3.159020e+01 9.152701e+03 3.162199e+01 8.966348e+03 3.165379e+01 9.014776e+03 3.168559e+01 8.900185e+03 3.171738e+01 8.837007e+03 3.174918e+01 8.913434e+03 3.178098e+01 8.950158e+03 3.181277e+01 9.011652e+03 3.184457e+01 8.949615e+03 3.187637e+01 9.062516e+03 3.190816e+01 8.903825e+03 3.193996e+01 8.848377e+03 3.197176e+01 8.984868e+03 3.200355e+01 8.776252e+03 3.203535e+01 8.817804e+03 3.206715e+01 9.010834e+03 3.209895e+01 8.767855e+03 3.213074e+01 8.839189e+03 3.216254e+01 8.874039e+03 3.219434e+01 8.834937e+03 3.222613e+01 8.756375e+03 3.225793e+01 8.943065e+03 3.228973e+01 9.020115e+03 3.232152e+01 8.937455e+03 3.235332e+01 8.872230e+03 3.238512e+01 9.159135e+03 3.241691e+01 9.116152e+03 3.244871e+01 9.097151e+03 3.248051e+01 9.180385e+03 3.251230e+01 8.986491e+03 3.254410e+01 8.887961e+03 3.257590e+01 9.030644e+03 3.260770e+01 9.050501e+03 3.263949e+01 9.002663e+03 3.267129e+01 8.863047e+03 3.270309e+01 8.918099e+03 3.273488e+01 8.978743e+03 3.276668e+01 8.960503e+03 3.279848e+01 8.831469e+03 3.283027e+01 8.966505e+03 3.286207e+01 8.987387e+03 3.289387e+01 8.889140e+03 3.292566e+01 8.967214e+03 3.295746e+01 9.032916e+03 3.298926e+01 8.868590e+03 3.302105e+01 8.795998e+03 3.305285e+01 8.983017e+03 3.308465e+01 8.963174e+03 3.311645e+01 8.978013e+03 3.314824e+01 8.936540e+03 3.318004e+01 8.764658e+03 3.321184e+01 8.842459e+03 3.324363e+01 8.992250e+03 3.327543e+01 8.981845e+03 3.330723e+01 8.902753e+03 3.333902e+01 9.057856e+03 3.337082e+01 8.825215e+03 3.340262e+01 9.063865e+03 3.343441e+01 9.082693e+03 3.346621e+01 9.006265e+03 3.349801e+01 8.780968e+03 3.352980e+01 8.879456e+03 3.356160e+01 8.965192e+03 3.359340e+01 8.789540e+03 3.362520e+01 8.953055e+03 3.365699e+01 8.859799e+03 3.368879e+01 8.747992e+03 3.372059e+01 8.855952e+03 3.375238e+01 8.746107e+03 3.378418e+01 8.551524e+03 3.381598e+01 8.748655e+03 3.384777e+01 8.738986e+03 3.387957e+01 8.676480e+03 3.391137e+01 8.725970e+03 3.394316e+01 8.628220e+03 3.397496e+01 8.558477e+03 3.400676e+01 8.894935e+03 3.403855e+01 8.865295e+03 3.407035e+01 8.948608e+03 3.410215e+01 8.846882e+03 3.413395e+01 8.947706e+03 3.416574e+01 9.111989e+03 3.419754e+01 8.916195e+03 3.422934e+01 8.952991e+03 3.426113e+01 8.819515e+03 3.429293e+01 9.026036e+03 3.432473e+01 8.827650e+03 3.435652e+01 8.776479e+03 3.438832e+01 8.863546e+03 3.442012e+01 8.888861e+03 3.445191e+01 8.994237e+03 3.448371e+01 8.891401e+03 3.451551e+01 8.919133e+03 3.454730e+01 8.794811e+03 3.457910e+01 8.962922e+03 3.461090e+01 8.994790e+03 3.464270e+01 9.065430e+03 3.467449e+01 9.188032e+03 3.470629e+01 8.940920e+03 3.473809e+01 8.969113e+03 3.476988e+01 8.977907e+03 3.480168e+01 9.013209e+03 3.483348e+01 9.164739e+03 3.486527e+01 8.886051e+03 3.489707e+01 9.035811e+03 3.492887e+01 9.121014e+03 3.496066e+01 9.055894e+03 3.499246e+01 9.080078e+03 3.502426e+01 9.069882e+03 3.505605e+01 9.198692e+03 3.508785e+01 9.131465e+03 3.511965e+01 9.230845e+03 3.515145e+01 9.045103e+03 3.518324e+01 9.168110e+03 3.521504e+01 9.257075e+03 3.524684e+01 9.447714e+03 3.527863e+01 9.277316e+03 3.531043e+01 9.280037e+03 3.534223e+01 9.305836e+03 3.537402e+01 9.360305e+03 3.540582e+01 9.269102e+03 3.543762e+01 9.478525e+03 3.546941e+01 9.238425e+03 3.550121e+01 9.169335e+03 3.553301e+01 9.187079e+03 3.556480e+01 9.403870e+03 3.559660e+01 9.250225e+03 3.562840e+01 9.280157e+03 3.566020e+01 9.405071e+03 3.569199e+01 9.396398e+03 3.572379e+01 9.174235e+03 3.575559e+01 9.418833e+03 3.578738e+01 9.311747e+03 3.581918e+01 9.614671e+03 3.585098e+01 9.559544e+03 3.588277e+01 9.541298e+03 3.591457e+01 9.412511e+03 3.594637e+01 9.377728e+03 3.597816e+01 9.681083e+03 3.600996e+01 9.712620e+03 3.604176e+01 9.542355e+03 3.607355e+01 9.674075e+03 3.610535e+01 9.806757e+03 3.613715e+01 9.658298e+03 3.616895e+01 9.567700e+03 3.620074e+01 9.432517e+03 3.623254e+01 9.563416e+03 3.626434e+01 9.537872e+03 3.629613e+01 9.487536e+03 3.632793e+01 9.707354e+03 3.635973e+01 9.458748e+03 3.639152e+01 9.427000e+03 3.642332e+01 9.656013e+03 3.645512e+01 9.616826e+03 3.648691e+01 9.639575e+03 3.651871e+01 9.619369e+03 3.655051e+01 9.497169e+03 3.658230e+01 9.619344e+03 3.661410e+01 9.620273e+03 3.664590e+01 9.769028e+03 3.667770e+01 9.526895e+03 3.670949e+01 9.414153e+03 3.674129e+01 9.655206e+03 3.677309e+01 9.488243e+03 3.680488e+01 9.416301e+03 3.683668e+01 9.501793e+03 3.686848e+01 9.453746e+03 3.690027e+01 9.217853e+03 3.693207e+01 9.221402e+03 3.696387e+01 9.289230e+03 3.699566e+01 9.187236e+03 3.702746e+01 8.813523e+03 3.705926e+01 8.824141e+03 3.709105e+01 8.729634e+03 3.712285e+01 8.710241e+03 3.715465e+01 8.422229e+03 3.718645e+01 8.358535e+03 3.721824e+01 8.636823e+03 3.725004e+01 8.589338e+03 3.728184e+01 8.201100e+03 3.731363e+01 8.425435e+03 3.734543e+01 8.152635e+03 3.737723e+01 8.503894e+03 3.740902e+01 8.254182e+03 3.744082e+01 8.157078e+03 3.747262e+01 8.069280e+03 3.750441e+01 7.727239e+03 3.753621e+01 7.579901e+03 3.756801e+01 7.583818e+03 3.759980e+01 7.578166e+03 3.763160e+01 7.664983e+03 3.766340e+01 7.527310e+03 3.769520e+01 7.595173e+03 3.772699e+01 7.554923e+03 3.775879e+01 7.522058e+03 3.779059e+01 7.627799e+03 3.782238e+01 7.576954e+03 3.785418e+01 7.471747e+03 3.788598e+01 7.393233e+03 3.791777e+01 7.566405e+03 3.794957e+01 7.277456e+03 3.798137e+01 7.525051e+03 3.801316e+01 7.566581e+03 3.804496e+01 7.938275e+03 3.807676e+01 7.617623e+03 3.810855e+01 7.556439e+03 3.814035e+01 7.741458e+03 3.817215e+01 7.737098e+03 3.820395e+01 7.574440e+03 3.823574e+01 7.517223e+03 3.826754e+01 7.510426e+03 3.829934e+01 7.674504e+03 3.833113e+01 7.594352e+03 3.836293e+01 7.539064e+03 3.839473e+01 7.591682e+03 3.842652e+01 7.478129e+03 3.845832e+01 7.519799e+03 3.849012e+01 7.610920e+03 3.852191e+01 7.643567e+03 3.855371e+01 7.707397e+03 3.858551e+01 7.707049e+03 3.861730e+01 7.638373e+03 3.864910e+01 7.625606e+03 3.868090e+01 7.667518e+03 3.871270e+01 7.572419e+03 3.874449e+01 7.843373e+03 3.877629e+01 7.623147e+03 3.880809e+01 7.716938e+03 3.883988e+01 7.729362e+03 3.887168e+01 7.795298e+03 3.890348e+01 7.911304e+03 3.893527e+01 7.706641e+03 3.896707e+01 7.952605e+03 3.899887e+01 7.768852e+03 3.903066e+01 7.970092e+03 3.906246e+01 8.071122e+03 3.909426e+01 8.105863e+03 3.912605e+01 8.247841e+03 3.915785e+01 8.021074e+03 3.918965e+01 7.893240e+03 3.922145e+01 8.198956e+03 3.925324e+01 7.920284e+03 3.928504e+01 8.060269e+03 3.931684e+01 8.046194e+03 3.934863e+01 8.108489e+03 3.938043e+01 7.950937e+03 3.941223e+01 8.147499e+03 3.944402e+01 8.134557e+03 3.947582e+01 8.133478e+03 3.950762e+01 7.952892e+03 3.953941e+01 8.083202e+03 3.957121e+01 8.124913e+03 3.960301e+01 8.099468e+03 3.963480e+01 8.164889e+03 3.966660e+01 8.280710e+03 3.969840e+01 8.507794e+03 3.973020e+01 8.280896e+03 3.976199e+01 8.207473e+03 3.979379e+01 8.301498e+03 3.982559e+01 8.252319e+03 3.985738e+01 8.546611e+03 3.988918e+01 8.280061e+03 3.992098e+01 8.275070e+03 3.995277e+01 8.479142e+03 3.998457e+01 8.147029e+03 4.001637e+01 8.268705e+03 4.004816e+01 8.534221e+03 4.007996e+01 8.409105e+03 4.011176e+01 8.092867e+03 4.014355e+01 8.172479e+03 4.017535e+01 8.195460e+03 4.020715e+01 8.342884e+03 4.023895e+01 8.422113e+03 4.027074e+01 8.493680e+03 4.030254e+01 8.423587e+03 4.033434e+01 8.357234e+03 4.036613e+01 8.473943e+03 4.039793e+01 8.419697e+03 4.042973e+01 8.499673e+03 4.046152e+01 8.648274e+03 4.049332e+01 8.647326e+03 4.052512e+01 8.499763e+03 4.055691e+01 8.232389e+03 4.058871e+01 9.087129e+03 4.062051e+01 8.523593e+03 4.065230e+01 8.591598e+03 4.068410e+01 8.425299e+03 4.071590e+01 8.308793e+03 4.074770e+01 8.453320e+03 4.077949e+01 8.281772e+03 4.081129e+01 8.327288e+03 4.084309e+01 8.301593e+03 4.087488e+01 8.377724e+03 4.090668e+01 8.462239e+03 4.093848e+01 8.724637e+03 4.097027e+01 8.547946e+03 4.100207e+01 8.604678e+03 4.103387e+01 8.576104e+03 4.106566e+01 8.577553e+03 4.109746e+01 8.640165e+03 4.112926e+01 8.701290e+03 4.116105e+01 8.701557e+03 4.119285e+01 8.718622e+03 4.122465e+01 8.712743e+03 4.125645e+01 8.535554e+03 4.128824e+01 8.657312e+03 4.132004e+01 8.544054e+03 4.135184e+01 8.844881e+03 4.138363e+01 8.990133e+03 4.141543e+01 8.718859e+03 4.144723e+01 8.932084e+03 4.147902e+01 9.062912e+03 4.151082e+01 8.711203e+03 4.154262e+01 8.830298e+03 4.157441e+01 8.710516e+03 4.160621e+01 9.083385e+03 4.163801e+01 8.800795e+03 4.166980e+01 8.833160e+03 4.170160e+01 8.823978e+03 4.173340e+01 9.079274e+03 4.176520e+01 9.077073e+03 4.179699e+01 9.009650e+03 4.182879e+01 8.871098e+03 4.186059e+01 9.214591e+03 4.189238e+01 9.320699e+03 4.192418e+01 9.139147e+03 4.195598e+01 8.940577e+03 4.198777e+01 9.090838e+03 4.201957e+01 9.140985e+03 4.205137e+01 9.236030e+03 4.208316e+01 9.263670e+03 4.211496e+01 9.079178e+03 4.214676e+01 9.004706e+03 4.217855e+01 9.262722e+03 4.221035e+01 9.210811e+03 4.224215e+01 9.194955e+03 4.227395e+01 8.924752e+03 4.230574e+01 9.257912e+03 4.233754e+01 9.064996e+03 4.236934e+01 9.142626e+03 4.240113e+01 9.147169e+03 4.243293e+01 8.893663e+03 4.246473e+01 9.220210e+03 4.249652e+01 9.131255e+03 4.252832e+01 9.360163e+03 4.256012e+01 9.494834e+03 4.259191e+01 9.593932e+03 4.262371e+01 9.617064e+03 4.265551e+01 9.343324e+03 4.268730e+01 9.519695e+03 4.271910e+01 9.094671e+03 4.275090e+01 9.387357e+03 4.278270e+01 9.191116e+03 4.281449e+01 9.472945e+03 4.284629e+01 9.240795e+03 4.287809e+01 9.470947e+03 4.290988e+01 9.513362e+03 4.294168e+01 9.620342e+03 4.297348e+01 1.197107e+03 4.300527e+01 1.014792e+03 4.303707e+01 9.556635e+03 4.306887e+01 9.647109e+03 4.310066e+01 9.539990e+03 4.313246e+01 9.633189e+03 4.316426e+01 9.342227e+03 4.319605e+01 9.702894e+03 4.322785e+01 9.925436e+03 4.325965e+01 9.709636e+03 4.329145e+01 9.453757e+03 4.332324e+01 9.650060e+03 4.335504e+01 9.474520e+03 4.338684e+01 9.693007e+03 4.341863e+01 9.522173e+03 4.345043e+01 9.690314e+03 4.348223e+01 9.570738e+03 4.351402e+01 9.584416e+03 4.354582e+01 9.495684e+03 4.357762e+01 9.743287e+03 4.360941e+01 9.702488e+03 4.364121e+01 9.614413e+03 4.367301e+01 9.806683e+03 4.370480e+01 9.556897e+03 4.373660e+01 9.552611e+03 4.376840e+01 9.658875e+03 4.380020e+01 9.205201e+03 4.383199e+01 9.369347e+03 4.386379e+01 9.383251e+03 4.389559e+01 9.463987e+03 4.392738e+01 9.531592e+03 4.395918e+01 9.493439e+03 4.399098e+01 9.305252e+03 4.402277e+01 9.457437e+03 4.405457e+01 9.686331e+03 4.408637e+01 9.091705e+03 4.411816e+01 1.181132e+03 4.414996e+01 1.150666e+03 4.418176e+01 0.000000e+00 4.421355e+01 0.000000e+00 4.424535e+01 0.000000e+00 4.427715e+01 0.000000e+00 4.430895e+01 0.000000e+00 4.434074e+01 0.000000e+00 4.437254e+01 0.000000e+00 4.440434e+01 0.000000e+00 4.443613e+01 0.000000e+00 4.446793e+01 0.000000e+00 4.449973e+01 0.000000e+00 xypattern-1.1.2/tests/data/wrong_file_format.txt000066400000000000000000000017131457453276700221160ustar00rootroot00000000000000# Nota: C-Order, 1 refers to the Y axis, 2 to the X axis # Calibration done at Tue Apr 8 16:41:23 2014 PixelSize1: 7.9e-05 PixelSize2: 7.9e-05 Distance: 0.196767977507 Poni1: 0.0805461249039 Poni2: 0.0810826708224 Rot1: 0.00137178227613 Rot2: 0.00107815064246 Rot3: 4.85486440504e-08 SplineFile: None Wavelength: 3.1e-11 # Nota: C-Order, 1 refers to the Y axis, 2 to the X axis # Calibration done at Tue Apr 8 16:41:26 2014 PixelSize1: 7.9e-05 PixelSize2: 7.9e-05 Distance: 0.196767977507 Poni1: 0.0805461249039 Poni2: 0.0810826708224 Rot1: 0.00137178227613 Rot2: 0.00107815064246 Rot3: 4.85486440504e-08 SplineFile: None Wavelength: 3.1e-11 # Nota: C-Order, 1 refers to the Y axis, 2 to the X axis # Calibration done at Sat May 24 20:47:10 2014 PixelSize1: 7.9e-05 PixelSize2: 7.9e-05 Distance: 0.195028076055 Poni1: 0.0825942605802 Poni2: 0.0811850549069 Rot1: 0.00165635221815 Rot2: -0.0045629485245 Rot3: 2.59095637307e-10 SplineFile: None Wavelength: 3.344e-11 xypattern-1.1.2/tests/test_auto_background.py000066400000000000000000000005111457453276700215140ustar00rootroot00000000000000import pytest from xypattern.auto_background import SmoothBrucknerBackground def test_transform_x(): bkg = SmoothBrucknerBackground() assert bkg.smooth_width == 0.1 bkg.transform_x(lambda x: x**2) assert bkg.smooth_width == pytest.approx(0.1**2) assert bkg.iterations == 50 assert bkg.cheb_order == 50 xypattern-1.1.2/tests/test_combine.py000066400000000000000000000055601457453276700177720ustar00rootroot00000000000000import pytest import numpy as np from xypattern import Pattern from xypattern.combine import find_overlap, find_scaling, scale_patterns, stitch_patterns def test_find_overlap(): p1 = Pattern([1, 2, 3], [1, 2, 3]) p2 = Pattern([2, 3, 4], [2, 3, 4]) assert find_overlap(p1, p2) == (2, 3) p3 = Pattern([4, 5, 6], [4, 5, 6]) assert find_overlap(p1, p3) is None def test_find_scaling(): p1 = Pattern(np.array([1, 2, 3]), np.array([1, 1, 1])) p2 = Pattern(np.array([1, 2, 3]), np.array([2, 2, 2])) assert find_scaling(p1, p2) == 0.5 p3 = Pattern(np.array([2, 3, 4]), np.array([4, 4, 2])) assert find_scaling(p1, p3) == 0.25 def test_find_scaling_with_different_x_binning(): p1 = Pattern(np.array([1, 2, 3]), np.array([1, 1, 1])) p2 = Pattern(np.array([2, 2.5, 3, 3.5, 4]), np.array([2, 2, 2, 2, 2, ])) assert find_scaling(p1, p2) == 0.5 assert find_scaling(p2, p1) == 2 def test_scale_patterns(): p1 = Pattern(np.array([1, 2, 3]), np.array([1, 1, 1])) p2 = Pattern(np.array([1, 2, 3]), np.array([2, 2, 2])) p2.scaling = 3 p3 = Pattern(np.array([2, 3, 4]), np.array([4, 4, 2])) scale_patterns([p1, p2, p3]) assert p1.scaling == 1 assert p2.scaling == 0.5 assert p3.scaling == 0.25 def test_scale_patterns_unsorted(): p1 = Pattern(np.array([1, 2, 3]), np.array([1, 1, 1]), name="p1") p2 = Pattern(np.array([5, 6, 7]), np.array([2, 2, 2]), name="p2") p3 = Pattern(np.array([3, 4, 5]), np.array([4, 4, 4]), name="p3") scale_patterns([p1, p2, p3]) assert p1.scaling == 1 assert p2.scaling == 0.5 assert p3.scaling == 0.25 def test_scale_patterns_non_overlapping(): p1 = Pattern(np.array([1, 2, 3]), np.array([1, 1, 1]), name="p1") p2 = Pattern(np.array([5, 6, 7]), np.array([2, 2, 2]), name="p2") with pytest.raises(ValueError): scale_patterns([p1, p2]) def generate_unsorted_patterns(): p1 = Pattern(np.array([1, 2, 3]), np.array([1, 1, 1]), name="p1") p2 = Pattern(np.array([5, 6, 7]), np.array([2, 2, 2]), name="p2") p3 = Pattern(np.array([3, 4, 5, 6, 7, 8, 9]), np.array([4, 4, 4, 4, 4, 4, 4]), name="p3") p4 = Pattern(np.array([8, 9, 10, 11]), np.array([8, 8, 8, 8]), name="p4") return [p1, p2, p3, p4] def test_scale_pattern_unsorted_different_length(): [p1, p2, p3, p4] = generate_unsorted_patterns() scale_patterns([p1, p2, p3, p4]) assert p1.scaling == 1 assert p2.scaling == 0.5 assert p3.scaling == 0.25 assert p4.scaling == 0.125 def test_stitch_patterns(): [p1, p2, p3, p4] = generate_unsorted_patterns() scale_patterns([p1, p2, p3, p4]) p = stitch_patterns([p1, p2, p3, p4]) assert p.x[0] == 1 assert p.x[-1] == 11 assert p.y[0] == 1 assert np.array_equal(p.y, [1] * 11) assert p.scaling == 1 assert p.x.shape == (11,) assert p.y.shape == (11,) assert p.x.shape == p.y.shape xypattern-1.1.2/tests/test_pattern.py000066400000000000000000000340431457453276700200310ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Dioptas - GUI program for fast processing of 2D X-ray diffraction data # Principal author: Clemens Prescher (clemens.prescher@gmail.com) # Copyright (C) 2014-2019 GSECARS, University of Chicago, USA # Copyright (C) 2015-2018 Institute for Geology and Mineralogy, University of Cologne, Germany # Copyright (C) 2019-2020 DESY, Hamburg, Germany # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import os import numpy as np import pytest from pytest import approx from xypattern.auto_background import SmoothBrucknerBackground from xypattern.pattern import BkgNotInRangeError from xypattern import Pattern from .test_util import generate_peak_pattern, gaussian unittest_path = os.path.dirname(__file__) data_path = os.path.join(unittest_path, "data") def test_loading_chi_file(): pattern = Pattern() x, y = pattern.data pattern.load(os.path.join(data_path, "pattern_001.chi")) new_x, new_y = pattern.data assert len(x) != len(new_x) assert len(y) != len(new_y) assert pattern.name == "pattern_001" assert pattern.filename == os.path.join(data_path, "pattern_001.chi") def test_loading_invalid_file(): pattern = Pattern() with pytest.raises(ValueError): pattern.load(os.path.join(data_path, "wrong_file_format.txt")) def test_loading_from_file_chi(): pattern = Pattern.from_file(os.path.join(data_path, "pattern_001.chi")) assert len(pattern.x) == 75 assert len(pattern.y) == 75 assert pattern.name == "pattern_001" assert pattern.filename == os.path.join(data_path, "pattern_001.chi") def test_loading_from_file_invalid(): with pytest.raises(ValueError): Pattern.from_file(os.path.join(data_path, "wrong_file_format.txt")) def test_saving_a_dat_file(tmp_path): x = np.linspace(-5, 5, 100) y = x**2 pattern = Pattern(x, y) filename = os.path.join(tmp_path, "test.dat") pattern.save(filename) pattern2 = Pattern() pattern2.load(filename) pattern2_x, pattern2_y = pattern2.data assert pattern2_x == pytest.approx(x) assert pattern2_y == pytest.approx(y) def test_saving_a_chi_file(tmp_path): x = np.linspace(-5, 5, 100) y = x**2 pattern = Pattern(x, y) filename = os.path.join(tmp_path, "test.chi") pattern.save(filename) pattern2 = Pattern() pattern2.load(filename) pattern2_x, pattern2_y = pattern2.data assert pattern2_x == pytest.approx(x) assert pattern2_y == pytest.approx(y) with open(filename) as f: lines = f.readlines() assert lines[0].endswith("test.chi\n") assert lines[1] == "2th_deg\n" assert lines[3].endswith(f"{len(pattern2_x)}\n") def test_saving_a_fxye_file(tmp_path): x = np.linspace(-5, 5, 100) y = x**2 pattern = Pattern(x, y) filename = os.path.join(tmp_path, "test.fxye") pattern.save(filename) def test_saving_a_chi_file_with_background(tmp_path): x = np.linspace(-5, 5, 100) y = x**2 pattern = Pattern(x, y) pattern.background_pattern = Pattern(x, x) filename = os.path.join(tmp_path, "test.chi") pattern.save(filename, subtract_background=True) assert os.path.exists(filename) pattern_saved = Pattern.from_file(filename) assert pattern_saved.background_pattern is None assert pattern_saved.x == pytest.approx(x) assert pattern_saved.y == pytest.approx(y - x) def test_saving_a_chi_file_with_auto_bkg(tmp_path): x = np.linspace(-5, 5, 100) y = x**2 pattern = Pattern(x, y) pattern.auto_bkg = SmoothBrucknerBackground() filename = os.path.join(tmp_path, "test.chi") pattern.save(filename, subtract_background=True) assert os.path.exists(filename) pattern_saved = Pattern.from_file(filename) assert pattern_saved.background_pattern is None assert pattern_saved.x == pytest.approx(x) assert pattern_saved.y == pytest.approx(y - pattern.auto_background_pattern.y) def test_saving_a_chi_file_with_auto_bkg_and_subtract_background_false(tmp_path): x = np.linspace(-5, 5, 100) y = x**2 pattern = Pattern(x, y) pattern.auto_bkg = SmoothBrucknerBackground() filename = os.path.join(tmp_path, "test.chi") pattern.save(filename, subtract_background=False) assert os.path.exists(filename) pattern_saved = Pattern.from_file(filename) assert pattern_saved.background_pattern is None assert pattern_saved.x == pytest.approx(x) assert pattern_saved.y == pytest.approx(y) def test_plus_and_minus_operators(): x = np.linspace(0, 10, 100) pattern1 = Pattern(x, np.sin(x)) pattern2 = Pattern(x, np.sin(x)) pattern3 = pattern1 + pattern2 assert np.array_equal(pattern3.y, np.sin(x) * 2) assert np.array_equal(pattern2._original_y, np.sin(x) * 1) assert np.array_equal(pattern1._original_y, np.sin(x) * 1) pattern3 = pattern1 + pattern1 assert np.array_equal(pattern3.y, np.sin(x) * 2) assert np.array_equal(pattern1._original_y, np.sin(x) * 1) assert np.array_equal(pattern1._original_y, np.sin(x) * 1) pattern3 = pattern2 - pattern1 assert np.array_equal(pattern3.y, np.sin(x) * 0) assert np.array_equal(pattern2._original_y, np.sin(x) * 1) assert np.array_equal(pattern1._original_y, np.sin(x) * 1) pattern3 = pattern1 - pattern1 assert np.array_equal(pattern3.y, np.sin(x) * 0) assert np.array_equal(pattern1._original_y, np.sin(x) * 1) assert np.array_equal(pattern1._original_y, np.sin(x) * 1) def test_plus_and_minus_operators_with_different_shapes(): x = np.linspace(0, 10, 1000) x2 = np.linspace(0, 12, 1300) pattern1 = Pattern(x, np.sin(x)) pattern2 = Pattern(x2, np.sin(x2)) pattern3 = pattern1 + pattern2 assert pattern3.x == approx(pattern1._original_x) assert pattern3.y == approx(pattern1._original_y * 2, abs=1e-4) pattern3 = pattern1 + pattern1 assert pattern3.y == approx(np.sin(x) * 2, abs=1e-4) pattern3 = pattern1 - pattern2 assert pattern3.y == approx(np.sin(x) * 0, abs=1e-4) pattern3 = pattern1 - pattern1 assert pattern3.y == approx(np.sin(x) * 0, abs=1e-4) def test_multiply_with_scalar_operator(): x = np.linspace(0, 10, 100) pattern = 2 * Pattern(x, np.sin(x)) assert np.array_equal(pattern.y, np.sin(x) * 2) def test_using_background_pattern(): x = np.linspace(-5, 5, 100) pattern_y = x**2 bkg_y = x spec = Pattern(x, pattern_y) background_pattern = Pattern(x, bkg_y) spec.background_pattern = background_pattern new_x, new_y = spec.data assert np.array_equal(new_x, x) assert np.array_equal(new_y, pattern_y - bkg_y) def test_using_background_pattern_with_different_spacing(): x = np.linspace(-5, 5, 100) pattern_y = x**2 x_bkg = np.linspace(-5, 5, 99) bkg_y = x_bkg spec = Pattern(x, pattern_y) background_pattern = Pattern(x_bkg, bkg_y) spec.background_pattern = background_pattern new_x, new_y = spec.data assert np.array_equal(new_x, x) assert np.array_equal(new_y, pattern_y - x) def test_changing_the_background_pattern_parameters(): x = np.linspace(-5, 5, 100) pattern_y = x**2 bkg_y = x spec = Pattern(x, pattern_y) background_pattern = Pattern(x, bkg_y) spec.background_pattern = background_pattern new_x, new_y = spec.data assert np.array_equal(new_x, x) assert np.array_equal(new_y, pattern_y - bkg_y) background_pattern.offset = 100 new_x, new_y = spec.data assert np.array_equal(background_pattern.y, bkg_y + 100) assert np.array_equal(background_pattern.data[1], bkg_y + 100) assert np.array_equal(new_y, pattern_y - (bkg_y + 100)) def test_changing_the_background_pattern_to_new_background(): x = np.linspace(-5, 5, 100) pattern_y = x**2 bkg_y = x pattern = Pattern(x, pattern_y) background_pattern = Pattern(x, bkg_y) pattern.background_pattern = background_pattern assert len(background_pattern.changed.listeners) == 1 background_pattern2 = Pattern(x, bkg_y + 100) pattern.background_pattern = background_pattern2 assert len(background_pattern.changed.listeners) == 0 assert len(background_pattern2.changed.listeners) == 1 pattern.background_pattern = None assert len(background_pattern.changed.listeners) == 0 assert len(background_pattern2.changed.listeners) == 0 def test_background_out_of_range_throws_error(): x1 = np.linspace(0, 10) x2 = np.linspace(-10, -1) spec = Pattern(x1, x1) background_pattern = Pattern(x2, x2) with pytest.raises(BkgNotInRangeError): spec.background_pattern = background_pattern def test_automatic_background_subtraction(): pattern, y_bkg = generate_peak_pattern(with_bkg=True) without_bkg_y = pattern.y - y_bkg pattern.auto_bkg = SmoothBrucknerBackground(2, 50, 50) _, y_spec = pattern.data assert y_spec == approx(without_bkg_y, abs=1e-4) def test_automatic_background_subtraction_with_roi(): pattern = generate_peak_pattern() roi = [1, 23] pattern.auto_bkg_roi = roi pattern.auto_bkg = SmoothBrucknerBackground(2, 50, 50) x_spec, _ = pattern.data assert x_spec[0] > roi[0] assert x_spec[-1] < roi[1] def test_setting_new_data(): spec = Pattern() x = np.linspace(0, 10) y = np.sin(x) spec.data = x, y new_x, new_y = spec.data assert np.array_equal(new_x, x) assert np.array_equal(new_y, y) def test_using_len(): x = np.linspace(0, 10, 234) y = x**2 spec = Pattern(x, y) assert len(spec) == 234 def test_scaling(): x = np.linspace(0, 10, 100) pattern = Pattern(x, np.sin(x)) pattern.scaling = 2 assert np.array_equal(pattern.y, np.sin(x) * 2) def test_multiply_operator(): x = np.linspace(0, 10, 100) pattern = 2 * Pattern(x, np.sin(x)) assert np.array_equal(pattern._original_y, np.sin(x) * 2) def test_equality_operator(): x = np.linspace(0, 10, 100) pattern1 = Pattern(x, np.sin(x)) pattern2 = Pattern(x, np.sin(2 * x)) assert pattern1 == pattern1 assert pattern1 != pattern2 def test_binning(): x = np.linspace(2.8, 10.8, 100) pattern = Pattern(x, np.sin(x)) binned_pattern = pattern.rebin(1) assert np.sum(binned_pattern.y), np.sum(pattern.y) def test_extend_to(): x = np.arange(2.8, 10, 0.2) pattern = Pattern(x, x - 2) extended_pattern = pattern.extend_to(0, 0) assert np.sum(extended_pattern.limit(0, 2.7).y) == approx(0) assert extended_pattern.x[0] == approx(0) pos_extended_pattern = pattern.extend_to(20, 5) assert np.mean(pos_extended_pattern.limit(10.1, 21).y) == 5 assert pos_extended_pattern.x[-1] == approx(20) def test_to_dict(): pattern = Pattern(np.arange(10), np.arange(10)) pattern.name = "test" pattern.scaling = 3 pattern.smoothing = 2 pattern._background_pattern = Pattern(np.arange(10), np.arange(10)) pattern_json = pattern.to_dict() assert pattern_json["x"] == list(pattern._original_x) assert pattern_json["y"] == list(pattern._original_y) assert pattern_json["name"] == pattern.name assert pattern_json["scaling"] == pattern.scaling assert pattern_json["smoothing"] == pattern.smoothing assert pattern_json["bkg_pattern"] == pattern._background_pattern.to_dict() def test_from_dict(): pattern1 = Pattern(np.arange(10), np.arange(10)) pattern1.name = "test" pattern1.scaling = 3 pattern1.smoothing = 2 pattern1.background_pattern = Pattern(np.arange(10), np.arange(10)) pattern_json = pattern1.to_dict() pattern2 = Pattern.from_dict(pattern_json) assert np.array_equal(pattern1.x, pattern2.x) assert np.array_equal(pattern1.y, pattern2.y) assert pattern1.name == pattern2.name assert pattern1.scaling == pattern2.scaling assert pattern1.smoothing == pattern2.smoothing assert np.array_equal( pattern1._background_pattern.x, pattern2._background_pattern.x ) assert np.array_equal( pattern1._background_pattern.y, pattern2._background_pattern.y ) def test_str_representation(): pattern = Pattern(np.arange(10), np.arange(10), name="test") assert str(pattern) == "Pattern 'test' with 10 points" def test_delete_range(): pattern = Pattern(np.arange(11), np.arange(11), name="test") pattern = pattern.delete_range([2.3, 7.9]) assert np.array_equal(pattern.x, np.array([0, 1, 2, 8, 9, 10])) assert np.array_equal(pattern.y, np.array([0, 1, 2, 8, 9, 10])) def test_delete_ranges(): pattern = Pattern(np.arange(31), np.arange(31), name="test") pattern = pattern.delete_ranges([[4.4, 13.3]]) assert np.array_equal(pattern.x, np.concatenate((np.arange(5), np.arange(14, 31)))) pattern = pattern.delete_ranges( [[3.9, 13.6], [4.5, 14.4], [21.5, 24.9], [27.1, 29.5]] ) assert np.array_equal( pattern.x, np.concatenate( (np.arange(4), np.arange(15, 22), np.arange(25, 28), np.array([30])) ), ) def test_transform_x(): x = np.linspace(0, 10, 100) pattern = Pattern(x, np.sin(x)) pattern.transform_x(lambda x: x + 2) assert np.array_equal(pattern.x, x + 2) def test_transform_x_with_pattern_bkg(): x = np.linspace(0, 10, 100) pattern = Pattern(x, np.sin(x)) pattern.background_pattern = Pattern(x, np.cos(x)) pattern.transform_x(lambda x: x + 2) assert np.array_equal(pattern.x, x + 2) assert np.array_equal(pattern.background_pattern.x, x + 2) def test_transform_x_with_auto_bkg(): x = np.linspace(0, 10, 100) pattern = Pattern(x, np.sin(x)) pattern.auto_bkg = SmoothBrucknerBackground() pattern.transform_x(lambda x: x + 2) assert np.array_equal(pattern.x, x + 2) xypattern-1.1.2/tests/test_signal.py000066400000000000000000000057711457453276700176370ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Dioptas - GUI program for fast processing of 2D X-ray diffraction data # Principal author: Clemens Prescher (clemens.prescher@gmail.com) # Copyright (C) 2014-2019 GSECARS, University of Chicago, USA # Copyright (C) 2015-2018 Institute for Geology and Mineralogy, University of Cologne, Germany # Copyright (C) 2019-2020 DESY, Hamburg, Germany # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import gc from xypattern.util.signal import Signal, WeakRefList def test_weakreflist_with_objects(): weak_ref_list = WeakRefList() class A(str): pass a = A() weak_ref_list.append(a) assert len(weak_ref_list) == 1 assert weak_ref_list[0]() == a del a gc.collect() assert len(weak_ref_list) == 0 def test_weakreflist_with_bound_methods(): weak_ref_list = WeakRefList() class A: def method(self): return "lala" a = A() weak_ref_list.append(a.method) assert len(weak_ref_list) == 1 assert weak_ref_list[0]()() == "lala" del a gc.collect() assert len(weak_ref_list) == 0 def test_weakreflist_with_insertion(): weak_ref_list = WeakRefList() class A: def method(self): return "lala" a = A() weak_ref_list.insert(0, a.method) assert len(weak_ref_list) == 1 assert weak_ref_list[0]()() == "lala" del a gc.collect() assert len(weak_ref_list) == 0 def test_signal_with_sole_functions(): signal = Signal() memory = [] def f(): memory.append(1) signal.connect(f) signal.emit() assert memory == [1] signal.disconnect(f) signal.emit() assert memory == [1] def test_signal_with_bound_methods(): signal = Signal() memory = [] class A: def method(self): memory.append(1) a = A() signal.connect(a.method) signal.emit() assert memory == [1] signal.disconnect(a.method) signal.emit() assert memory == [1] def test_signal_with_signal(): signal = Signal() memory = [] signal2 = Signal() def f(): memory.append(1) signal.connect(f) signal2.connect(signal) signal2.emit() assert memory == [1] def test_signal_with_priority(): signal = Signal() memory = [] def f(): memory.append(1) def g(): memory.append(2) signal.connect(f) signal.connect(g, priority=True) signal.emit() assert memory == [2, 1] xypattern-1.1.2/tests/test_smooth_bruckner.py000066400000000000000000000010071457453276700215520ustar00rootroot00000000000000import numpy as np from pytest import approx from xypattern.util.smooth_bruckner import smooth_bruckner from xypattern.util.smooth_bruckner_py import smooth_bruckner as smooth_bruckner_py from xypattern import Pattern from .test_util import generate_peak_pattern def test_both_smooth_bruckner_implementations_give_same_result(): pattern = generate_peak_pattern() bkg1 = smooth_bruckner(pattern.y, 3, 50) bkg2 = smooth_bruckner_py(pattern.y, 3, 50) assert np.sum(bkg1 - bkg2) == approx(0.0, abs=1e-8) xypattern-1.1.2/tests/test_util.py000066400000000000000000000010761457453276700173310ustar00rootroot00000000000000import numpy as np from xypattern import Pattern def gaussian(x, mu, a, sig): return a * np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.))) def generate_peak_pattern(with_bkg=False): x = np.arange(0, 24, 0.01) y = np.zeros(x.shape) peaks = [ [10, 3, 0.1], [12, 4, 0.1], [15, 6, 0.1], ] for peak in peaks: y += gaussian(x, peak[0], peak[1], peak[2]) y_bkg = x * 0.4 + 5.0 y_measurement = y + y_bkg if with_bkg: return Pattern(x, y_measurement), y_bkg return Pattern(x, y_measurement) xypattern-1.1.2/xypattern/000077500000000000000000000000001457453276700156335ustar00rootroot00000000000000xypattern-1.1.2/xypattern/__init__.py000066400000000000000000000000641457453276700177440ustar00rootroot00000000000000from .pattern import Pattern __version__ = '1.1.2' xypattern-1.1.2/xypattern/auto_background.py000066400000000000000000000044301457453276700213550ustar00rootroot00000000000000from __future__ import annotations from abc import abstractmethod from typing import TYPE_CHECKING import numpy as np if TYPE_CHECKING: from .pattern import Pattern try: from .util.smooth_bruckner import smooth_bruckner except ImportError as e: print(e) print("Could not import the Cython version of smooth_bruckner. Using python implementation instead.") from .util.smooth_bruckner_py import smooth_bruckner class AutoBackground: @abstractmethod def extract_background(self, pattern: Pattern): """ Extracts the background from a pattern. :param pattern: pattern to extract the background from :return: background pattern """ raise NotImplementedError @staticmethod def transform_x(self, fcn: callable): """ Transforms the variables dependent on x. :param fcn: function to transform the x-variable """ raise NotImplementedError class SmoothBrucknerBackground(AutoBackground): """ Performs a background subtraction using bruckner smoothing and a chebyshev polynomial. Standard parameters are found to be optimal for synchrotron XRD. :param smooth_width: width of the window in x-units used for bruckner smoothing :param iterations: number of iterations for the bruckner smoothing :param cheb_order: order of the fitted chebyshev polynomial """ def __init__(self, smooth_width=0.1, iterations=50, cheb_order=50): self.smooth_width = smooth_width self.iterations = iterations self.cheb_order = cheb_order def extract_background(self, pattern: Pattern): """ """ x, y = pattern.data smooth_points = int((float(self.smooth_width) / (x[1] - x[0]))) y_smooth = smooth_bruckner(y, abs(smooth_points), self.iterations) # get cheb input parameters x_cheb = 2. * (x - x[0]) / (x[-1] - x[0]) - 1. cheb_parameters = np.polynomial.chebyshev.chebfit(x_cheb, y_smooth, self.cheb_order) return np.polynomial.chebyshev.chebval(x_cheb, cheb_parameters) def transform_x(self, fcn: callable): """ Transforms the variables dependent on x. :param fcn: function to transform the x-variable """ self.smooth_width = fcn(self.smooth_width) xypattern-1.1.2/xypattern/combine.py000066400000000000000000000053111457453276700176210ustar00rootroot00000000000000from __future__ import annotations import numpy as np from scipy.interpolate import interp1d from .pattern import Pattern def stitch_patterns(patterns: list[Pattern], binning=None) -> Pattern: """ Stitch together a list of patterns. :param patterns: list of patterns to be stitched together :param binning: binning to be applied to the stitched pattern, if None, the binning of the first pattern will be used :return: stitched pattern """ if binning is None: binning = patterns[0].x[1] - patterns[0].x[0] x = np.concatenate([pattern.x for pattern in patterns]) y = np.concatenate([pattern.y for pattern in patterns]) return Pattern(x, y).rebin(binning) def scale_patterns(patterns: list[Pattern]): """ Scales a list of patterns to the first pattern in respect to x. The scaling will be in place setting the scale attribute of the patterns. :param patterns: list of patterns to be scaled """ for pattern in patterns: pattern.scaling = 1 sorted_patterns = sorted(patterns, key=lambda p: p.x[0]) for ind, pattern in enumerate(sorted_patterns): if ind == 0: pattern.scaling = 1 continue scale_ind = ind - 1 scaling = find_scaling(sorted_patterns[scale_ind], pattern) while scaling is None: scale_ind -= 1 if scale_ind < 0: raise ValueError("No overlap found between patterns") scaling = find_scaling(sorted_patterns[scale_ind], pattern) pattern.scaling = scaling def find_overlap(p1: Pattern, p2: Pattern) -> tuple[float, float] | None: """ Find the overlap in x between two patterns :param p1: pattern 1 :param p2: pattern 2 :return: tuple of x_min and x_max for the overlapping region or None if no overlap can be found """ x_min = max(p1.x[0], p2.x[0]) x_max = min(p1.x[-1], p2.x[-1]) if x_min > x_max: return None return x_min, x_max def find_scaling(p1: Pattern, p2: Pattern) -> float | None: """ Find the scaling factor of p2 to p1 :param p1: pattern 1 :param p2: pattern 2 :return: scaling factor """ overlap = find_overlap(p1, p2) if overlap is None: return None p1_indices = np.where((p1.x >= overlap[0]) & (p1.x <= overlap[1])) p2_indices = np.where((p2.x >= overlap[0]) & (p2.x <= overlap[1])) x1 = p1.x[p1_indices] x2 = p2.x[p2_indices] y1 = p1.y[p1_indices] y2 = p2.y[p2_indices] if len(x1) == len(x2) and np.allclose(x1, x2): return np.mean(y1 / y2) f2 = interp1d(x2, y2, kind="linear", fill_value="extrapolate") p2_interpolated = f2(x1) return np.mean(y1 / p2_interpolated) xypattern-1.1.2/xypattern/pattern.py000066400000000000000000000555041457453276700176730ustar00rootroot00000000000000# -*- coding: utf-8 -*- from __future__ import annotations import os import numpy as np from scipy.interpolate import interp1d from scipy.ndimage import gaussian_filter1d from .util.signal import Signal from .auto_background import AutoBackground, SmoothBrucknerBackground class Pattern(object): """ A Pattern is a set of x and y values. It can be loaded from a file or created from scratch and can be modified by different methods. It builds the basis for all calculations in glassure. :param x: x values of the pattern :param y: y values of the pattern :param name: name of the pattern """ def __init__(self, x: np.ndarray = None, y: np.ndarray = None, name: str = ""): """ Creates a new Pattern object, x and y should have the same shape. """ if x is None: self._original_x = np.linspace(0.1, 15, 100) else: self._original_x = x if y is None: self._original_y = ( np.log(self._original_x**2) - (self._original_x * 0.2) ** 2 ) else: self._original_y = y self.name = name self.filename = "" self._offset = 0.0 self._scaling = 1.0 self._smoothing = 0.0 self._background_pattern = None self._auto_bkg: AutoBackground | None = None self._auto_bkg_roi: list[float] | None = None self._pattern_x = self._original_x self._pattern_y = self._original_y self._auto_background_before_subtraction_pattern = None self._auto_background_pattern = None self.changed = Signal() def load(self, filename: str, skiprows: int = 0): """ Loads a pattern from a file. The file can be either a .xy or a .chi file. The .chi file will be loaded with skiprows=4 by default. :param filename: path to the file :param skiprows: number of rows to skip when loading the data (header) """ try: if filename.endswith(".chi"): skiprows = 4 data = np.loadtxt(filename, skiprows=skiprows) self._original_x = data.T[0] self._original_y = data.T[1] self.filename = filename self.name = os.path.basename(filename).split(".")[:-1][0] self.recalculate_pattern() except ValueError: raise ValueError("Wrong data format for pattern file! - " + filename) @staticmethod def from_file(filename: str, skip_rows: int = 0) -> Pattern | "-1": """ Loads a pattern from a file. The file can be either a .xy or a .chi file. The .chi file will be loaded with skiprows=4 by default. :param filename: path to the file :param skip_rows: number of rows to skip when loading the data (header) """ try: pattern = Pattern() pattern.load(filename, skip_rows) return pattern except ValueError: raise ValueError("Wrong data format for pattern file! - " + filename) def save(self, filename, header="", subtract_background=False, unit="2th_deg"): """ Saves the x, y data to file. Supporting several file formats: .chi, .xy, .fxye :param filename: where to save the data :param header: header for file :param subtract_background: whether to save subtracted data :param unit: x-unit used for the standard chi header (unused for other formats) """ if subtract_background: x, y = self.data else: x, y = self.original_data num_points = len(x) file_handle = open(filename, "w") if filename.endswith(".chi"): if header is None or header == "": file_handle.write(filename + "\n") file_handle.write(unit + "\n\n") file_handle.write(" {0}\n".format(num_points)) else: file_handle.write(header) for ind in range(num_points): file_handle.write(" {0:.7E} {1:.7E}\n".format(x[ind], y[ind])) elif filename.endswith(".fxye"): factor = 100 if "CONQ" in header: factor = 1 header = header.replace("NUM_POINTS", "{0:.6g}".format(num_points)) header = header.replace("MIN_X_VAL", "{0:.6g}".format(factor * x[0])) header = header.replace( "STEP_X_VAL", "{0:.6g}".format(factor * (x[1] - x[0])) ) file_handle.write(header) file_handle.write("\n") for ind in range(num_points): file_handle.write( "\t{0:.6g}\t{1:.6g}\t{2:.6g}\n".format( factor * x[ind], y[ind], np.sqrt(abs(y[ind])) ) ) else: data = np.dstack((x, y)) np.savetxt(file_handle, data[0], header=header) file_handle.close() @property def background_pattern(self) -> Pattern: """ Returns the background pattern of the current pattern. :return: background Pattern """ return self._background_pattern @background_pattern.setter def background_pattern(self, pattern: Pattern | None): if self._background_pattern is not None: self._background_pattern.changed.disconnect(self.recalculate_pattern) self._background_pattern = pattern if self._background_pattern is not None: self._background_pattern.changed.connect(self.recalculate_pattern) self.recalculate_pattern() def rebin(self, bin_size: float) -> Pattern: """ Returns a new pattern, which is a rebinned version of the current one. :param bin_size: Size of the bins :return: rebinned Pattern """ x, y = self.data x_min = np.round(np.min(x) / bin_size) * bin_size x_max = np.round(np.max(x) / bin_size) * bin_size new_x = np.arange(x_min, x_max + 0.1 * bin_size, bin_size) bins = np.hstack((x_min - bin_size * 0.5, new_x + bin_size * 0.5)) new_y = np.histogram(x, bins, weights=y)[0] / np.histogram(x, bins)[0] return Pattern(new_x, new_y) @property def data(self) -> tuple[np.ndarray, np.ndarray]: """ Returns the data of the pattern. If a background pattern is set, the background will be subtracted from the pattern. If smoothing is set, the pattern will be smoothed. :return: Tuple of x and y values """ return self._pattern_x, self._pattern_y def recalculate_pattern(self): """ Returns the data of the pattern. If a background pattern is set, the background will be subtracted from the pattern. If smoothing is set, the pattern will be smoothed. :return: Tuple of x and y values """ if self._background_pattern is not None: # create background function x_bkg, y_bkg = self._background_pattern.data if not np.array_equal(x_bkg, self._original_x): # the background will be interpolated f_bkg = interp1d(x_bkg, y_bkg, kind="linear") # find overlapping x and y values: ind = np.where( (self._original_x <= np.max(x_bkg)) & (self._original_x >= np.min(x_bkg)) ) x = self._original_x[ind] y = self._original_y[ind] if len(x) == 0: # if there is no overlapping between background and pattern, raise an error raise BkgNotInRangeError(self.name) y = y * self._scaling + self.offset - f_bkg(x) else: # if pattern and bkg have the same x basis we just delete y-y_bkg x, y = ( self._original_x, self._original_y * self._scaling + self.offset - y_bkg, ) else: x, y = self.original_data y = y * self.scaling + self.offset if self.auto_bkg is not None: self._auto_background_before_subtraction_pattern = Pattern(x, y) roi = ( self.auto_bkg_roi if self.auto_bkg_roi is not None else [x[0] - 0.1, x[-1] + 0.1] ) x, y = self._auto_background_before_subtraction_pattern.limit(*roi).data y_bkg = self.auto_bkg.extract_background(Pattern(x, y)) self._auto_background_pattern = Pattern( x, y_bkg, name="auto_bkg_" + self.name ) y -= y_bkg if self.smoothing > 0: y = gaussian_filter1d(y, self.smoothing) self._pattern_x = x self._pattern_y = y self.changed.emit() @data.setter def data(self, data: tuple[np.ndarray, np.ndarray]): """ Sets the data of the pattern. Also resets the scaling and offset to 1 and 0 respectively. :param data: tuple of x and y values """ (x, y) = data self._original_x = x self._original_y = y self.scaling = 1.0 self.offset = 0 @property def original_data(self) -> tuple[np.ndarray, np.ndarray]: """ Returns the original data of the pattern without any background subtraction or smoothing. :return: tuple of x and y values """ return self._original_x, self._original_y @property def x(self) -> np.ndarray: """Returns the x values of the pattern""" return self._pattern_x @x.setter def x(self, new_value: np.ndarray): """Sets the x values of the pattern""" self._original_x = new_value self.recalculate_pattern() @property def y(self) -> np.ndarray: """Returns the y values of the pattern""" return self._pattern_y @y.setter def y(self, new_y: np.ndarray): """Sets the y values of the pattern""" self._original_y = new_y self.recalculate_pattern() @property def scaling(self) -> float: """Returns the scaling of the pattern""" return self._scaling @scaling.setter def scaling(self, value): """ Sets the scaling of the pattern, if below 0, it will be set to 0 instead. """ if value < 0: self._scaling = 0.0 else: self._scaling = value self.recalculate_pattern() @property def offset(self) -> float: """Returns the offset of the pattern""" return self._offset @offset.setter def offset(self, value): """Sets the offset of the pattern""" self._offset = value self.recalculate_pattern() @property def smoothing(self) -> float: """Returns the smoothing of the pattern""" return self._smoothing @smoothing.setter def smoothing(self, value): """Sets the smoothing of the pattern""" self._smoothing = value self.recalculate_pattern() @property def auto_bkg(self) -> AutoBackground | None: """ Returns the auto background object :return: AutoBackground """ return self._auto_bkg @auto_bkg.setter def auto_bkg(self, value: AutoBackground | None): """ Sets the auto background object :param value: AutoBackground """ self._auto_bkg = value self.recalculate_pattern() @property def auto_bkg_roi(self) -> list[float] | None: """ Returns the region of interest for the auto background :return: list of two floats """ return self._auto_bkg_roi @auto_bkg_roi.setter def auto_bkg_roi(self, value: list[float] | None): """ Sets the region of interest for the auto background :param value: list of two floats """ self._auto_bkg_roi = value self.recalculate_pattern() @property def auto_background_pattern(self) -> Pattern: """ Returns the auto background pattern :return: background Pattern """ return self._auto_background_pattern @property def auto_background_before_subtraction_pattern(self) -> Pattern: """ Returns the pattern before the auto background subtraction :return: background Pattern """ return self._auto_background_before_subtraction_pattern def limit(self, x_min: float, x_max: float) -> Pattern: """ Limits the pattern to a specific x-range. Does not modify inplace but returns a new limited Pattern :param x_min: lower limit of the x-range :param x_max: upper limit of the x-range :return: limited Pattern """ x, y = self.data return Pattern( x[np.where((x_min < x) & (x < x_max))], y[np.where((x_min < x) & (x < x_max))], ) def extend_to(self, x_value: float, y_value: float) -> Pattern: """ Extends the current pattern to a specific x_value by filling it with the y_value. Does not modify inplace but returns a new filled Pattern :param x_value: Point to which extending the pattern should be smaller than the lowest x-value in the pattern or vice versa :param y_value: number to fill the pattern with :return: extended Pattern """ x_step = np.mean(np.diff(self.x)) x_min = np.min(self.x) x_max = np.max(self.x) if x_value < x_min: x_fill = np.arange(x_min - x_step, x_value - x_step * 0.5, -x_step)[::-1] y_fill = np.zeros(x_fill.shape) y_fill.fill(y_value) new_x = np.concatenate((x_fill, self.x)) new_y = np.concatenate((y_fill, self.y)) elif x_value > x_max: x_fill = np.arange(x_max + x_step, x_value + x_step * 0.5, x_step) y_fill = np.zeros(x_fill.shape) y_fill.fill(y_value) new_x = np.concatenate((self.x, x_fill)) new_y = np.concatenate((self.y, y_fill)) else: return self return Pattern(new_x, new_y) def to_dict(self) -> dict: """ Returns a dictionary representation of the pattern which can be used to save the pattern to a json file. :return: dictionary representation of the pattern """ return { "name": self.name, "x": self._original_x.tolist(), "y": self._original_y.tolist(), "scaling": self.scaling, "offset": self.offset, "smoothing": self.smoothing, "bkg_pattern": ( self._background_pattern.to_dict() if self._background_pattern is not None else None ), } @staticmethod def from_dict(json_dict: dict) -> Pattern: """ Creates a new Pattern from a dictionary representation of a Pattern. :param json_dict: dictionary representation of a Pattern :return: new Pattern """ pattern = Pattern( np.array(json_dict["x"]), np.array(json_dict["y"]), json_dict["name"] ) pattern.scaling = json_dict["scaling"] pattern.offset = json_dict["offset"] if json_dict["bkg_pattern"] is not None: bkg_pattern = Pattern.from_dict(json_dict["bkg_pattern"]) else: bkg_pattern = None pattern.background_pattern = bkg_pattern pattern.smoothing = json_dict["smoothing"] pattern.recalculate_pattern() return pattern def delete_range(self, x_range: list) -> Pattern: """ Creates a new pattern from the provided pattern, in which the data points within the provided range are deleted. :param x_range: List of two floats of x values, The data points within x_range[0] and x_range[1] are deleted from the pattern. :return: New pattern without data points that lie within the provided range Example: >>> test_pattern = Pattern(np.arange(1, 11) / 10, np.arange(11, 21) / 10) >>> test_pattern.x array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> test_pattern.y array([1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ]) >>> new_pattern = test_pattern.delete_range([0.33, 0.85]) >>> new_pattern.x array([0.1, 0.2, 0.3, 0.9, 1. ]) >>> new_pattern.y array([1.1, 1.2, 1.3, 1.9, 2. ]) >>> test_pattern.x array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> test_pattern.y array([1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ]) """ x, y = self.data ind = np.where((x < x_range[0]) | (x > x_range[1])) return Pattern(x[ind], y[ind]) def delete_ranges(self, x_ranges: list) -> Pattern: """ Creates a new pattern from the provided pattern, in which the data points within each of the provided ranges are deleted. This is similar to the delete_range function, but allows the deletion of data points within several ranges provided. :param x_ranges: List containing lists of floats of x values, The data points between the two x values provided in each of the lists are deleted from the pattern. :return: New pattern without data points that lie within the provided ranges Example: >>> test_pattern = Pattern(np.arange(1, 11) / 10, np.arange(11, 21) / 10) >>> test_pattern.x array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> test_pattern.y array([1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ]) >>> new_pattern = test_pattern.delete_ranges([[0.22, 0.41], [0.7, 0.9]]) >>> new_pattern.x array([0.1, 0.2, 0.5, 0.6, 1. ]) >>> new_pattern.y array([1.1, 1.2, 1.5, 1.6, 2. ]) >>> test_pattern.x array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> test_pattern.y array([1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ]) """ x, y = self.data for r in x_ranges: ind = np.where((x < r[0]) | (x > r[1])) x, y = x[ind], y[ind] return Pattern(x, y) def transform_x(self, fcn: callable) -> Pattern: """ Transforms the x values of the pattern using the provided function. This takes care to also update the corresponding background pattern or auto background parameters. Example: >>> test_pattern = Pattern( np.arange(1, 11) / 10, np.arange(11, 21) / 10 ) >>> test_pattern.x array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) >>> new_pattern = test_pattern.transform_x(lambda x: x ** 2) >>> new_pattern.x array([0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.49, 0.64, 0.81, 1.]) :param fcn: function to transform the x values :return: current pattern with transformed x values """ self.x = fcn(self.x) if self._background_pattern is not None: self._background_pattern.x = fcn(self._background_pattern.x) if self.auto_bkg_roi is not None: self.auto_bkg_roi = fcn(np.array(self.auto_bkg_roi)) if self.auto_bkg is not None: self.auto_bkg.transform_x(fcn) self.recalculate_pattern() return self ########################################################### # Operators: def __sub__(self, other: Pattern) -> Pattern: """ Subtracts the other pattern from the current one. If the other pattern has a different shape, the subtraction will be done on the overlapping x-values and the background will be interpolated. If there is no overlapping between the two patterns, a BkgNotInRangeError will be raised. :param other: Pattern to be subtracted :return: new Pattern """ orig_x, orig_y = self.data other_x, other_y = other.data if orig_x.shape != other_x.shape: # the background will be interpolated other_fcn = interp1d(other_x, other_y, kind="cubic") # find overlapping x and y values: ind = np.where((orig_x <= np.max(other_x)) & (orig_x >= np.min(other_x))) x = orig_x[ind] y = orig_y[ind] if len(x) == 0: # if there is no overlapping between background and pattern, raise an error raise BkgNotInRangeError(self.name) return Pattern(x, y - other_fcn(x)) else: return Pattern(orig_x, orig_y - other_y) def __add__(self, other: Pattern) -> Pattern: """ Adds the other pattern to the current one. If the other pattern has a different shape, the addition will be done on the overlapping x-values and the y-values of the other pattern will be interpolated. If there is no overlapping between the two patterns, a BkgNotInRangeror will be raised. :param other: Pattern to be added :return: new Pattern """ orig_x, orig_y = self.data other_x, other_y = other.data if orig_x.shape != other_x.shape: # the background will be interpolated other_fcn = interp1d(other_x, other_y, kind="linear") # find overlapping x and y values: ind = np.where((orig_x <= np.max(other_x)) & (orig_x >= np.min(other_x))) x = orig_x[ind] y = orig_y[ind] if len(x) == 0: # if there is no overlapping between background and pattern, raise an error raise BkgNotInRangeError(self.name) return Pattern(x, y + other_fcn(x)) else: return Pattern(orig_x, orig_y + other_y) def __rmul__(self, other: float) -> Pattern: """ Multiplies the pattern with a scalar. :param other: scalar to multiply with :return: new Pattern """ orig_x, orig_y = self.data return Pattern(np.copy(orig_x), np.copy(orig_y) * other) def __eq__(self, other: Pattern) -> bool: """ Checks if two patterns are equal. Two patterns are equal if their data is equal. :param other: Pattern to compare with :return: True if equal, False otherwise """ if not isinstance(other, Pattern): return False if np.array_equal(self.data, other.data): return True return False def __len__(self): return len(self.x) def __str__(self): return f"Pattern '{self.name}' with {len(self)} points" class BkgNotInRangeError(Exception): def __init__(self, pattern_name: str): self.pattern_name = pattern_name def __str__(self): return ( "The background range does not overlap with the Pattern range for " + self.pattern_name ) xypattern-1.1.2/xypattern/scripts/000077500000000000000000000000001457453276700173225ustar00rootroot00000000000000xypattern-1.1.2/xypattern/scripts/__init__.py000066400000000000000000000000001457453276700214210ustar00rootroot00000000000000xypattern-1.1.2/xypattern/scripts/stitch_patterns.py000066400000000000000000000023141457453276700231120ustar00rootroot00000000000000import argparse from .. import Pattern from ..combine import stitch_patterns, scale_patterns def main(): parser = argparse.ArgumentParser(description='Stitch patterns together', prog='stitch_patterns.py') parser.add_argument('patterns', metavar='pattern', type=str, nargs='+', help='patterns to be stitched together') parser.add_argument('-o', '--output', metavar='output', type=str, nargs=1, help='output file name') parser.add_argument('-b', '--binning', metavar='binning', type=float, nargs=1, help='binning to be applied to the stitched pattern, if None, the binning of the first pattern ' 'will be used') parser.add_argument('-s', '--scale', action='store_true', help='scale patterns to the first pattern in respect to x') args = parser.parse_args() patterns = [Pattern.from_file(pattern) for pattern in args.patterns] if args.scale: scale_patterns(patterns) pattern = stitch_patterns(patterns, binning=args.binning[0] if args.binning else None) pattern.save(args.output[0] if args.output else 'stitched.xy') xypattern-1.1.2/xypattern/util/000077500000000000000000000000001457453276700166105ustar00rootroot00000000000000xypattern-1.1.2/xypattern/util/__init__.py000066400000000000000000000000001457453276700207070ustar00rootroot00000000000000xypattern-1.1.2/xypattern/util/signal.py000066400000000000000000000103631457453276700204420ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Dioptas - GUI program for fast processing of 2D X-ray diffraction data # Principal author: Clemens Prescher (clemens.prescher@gmail.com) # Copyright (C) 2014-2019 GSECARS, University of Chicago, USA # Copyright (C) 2015-2018 Institute for Geology and Mineralogy, University of Cologne, Germany # Copyright (C) 2019-2020 DESY, Hamburg, Germany # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import inspect import weakref __export__ = ["Signal"] class Signal: def __init__(self, *_): self.listeners = WeakRefList() self.priority_listeners = WeakRefList() self.blocked = False def connect(self, handle, priority=False): """ Connects a function handle to the Signal. :param handle: function handle to be called when the signal is emitted :param priority: if set to True, the handle will be added as the first function to be called in the case of the event If multiple handles are added with priority, they will obviously be called in the reverse order of adding. """ if priority: self.priority_listeners.insert(0, handle) else: self.listeners.append(handle) def disconnect(self, handle): """ Removes a certain function handle from the list of listeners to be called in case of Signal emitted. :param handle: function handle to be removed from the listeners """ try: self.listeners.remove(handle) except ValueError: pass try: self.priority_listeners.remove(handle) except ValueError: pass def emit(self, *args): if self.blocked: return self._serve_listeners(self.priority_listeners, *args) self._serve_listeners(self.listeners, *args) @staticmethod def _serve_listeners(listeners, *args): for ref in listeners: handle = ref() if type(handle) == Signal: handle.emit(*args) else: try: handle(*args) except AttributeError: handle() def clear(self): """ Removes all listeners from the Signal. """ self.listeners = WeakRefList() self.priority_listeners = WeakRefList() class WeakRefList(list): """ A list which holds weak references to its items. If an item is deleted, the reference to it will be removed from the list. This is useful for Signals, where we want to hold a list of listeners, but don't want to prevent the garbage collector from deleting the listeners. It is not a full reimplementation, only the methods which are used in the Signal class are implemented - append, remove, insert. This list will work for object methods as well as objects. To retrieve the orginal item, the value of the weak reference has to be called. E.g.: >>> class A: >>> def method(self): >>> return "lala" >>> >>> a = A() >>> weak_ref_list = WeakRefList() >>> weak_ref_list.append(a.method) >>> weak_ref_list[0]()() == "lala" """ def append(self, item): super(WeakRefList, self).append(self._ref(item)) def remove(self, item): super(WeakRefList, self).remove(self._ref(item)) def insert(self, index, item): super(WeakRefList, self).insert(index, self._ref(item)) def _remove_ref(self, ref): super(WeakRefList, self).remove(ref) def _ref(self, item): if inspect.ismethod(item): return weakref.WeakMethod(item, self._remove_ref) else: return weakref.ref(item, self._remove_ref) xypattern-1.1.2/xypattern/util/smooth_bruckner.pyx000066400000000000000000000027111457453276700225570ustar00rootroot00000000000000 import numpy as np cimport cython @cython.boundscheck(False) # Deactivate bounds checking @cython.wraparound(False) # Deactivate negative indexing. def smooth_bruckner(y, Py_ssize_t smooth_points, Py_ssize_t iterations): cdef Py_ssize_t j, i, window_size, n n = y.size window_size = smooth_points * 2 + 1 cdef double[:] y_extended = np.empty(n + smooth_points + smooth_points) for j in range(0, smooth_points): y_extended[j] = y[0] for j in range(n): y_extended[smooth_points+j] = y[j] for j in range(smooth_points + n,n + smooth_points + smooth_points): y_extended[j] = y[n-1] for j in range(0, iterations): window_avg = sum(y_extended[0: 2 * smooth_points + 1]) / (2 * smooth_points + 1) for i in range(smooth_points, n-smooth_points-2): if y_extended[i] > window_avg: y_new = window_avg # updating central value in average (first bracket) # and shifting average by one index (second bracket) window_avg += ((window_avg - y_extended[i]) + ( y_extended[i + smooth_points + 1] - y_extended[i - smooth_points])) / window_size y_extended[i] = y_new else: # shifting average by one index window_avg += (y_extended[i + smooth_points + 1] - y_extended[i - smooth_points]) / window_size return y_extended[smooth_points:smooth_points + n] xypattern-1.1.2/xypattern/util/smooth_bruckner_py.py000066400000000000000000000025001457453276700230730ustar00rootroot00000000000000import numpy as np def smooth_bruckner(y, smooth_points, iterations): """ Calculates the Bruckner smooth background :param y: y values of the pattern :param smooth_points: the width of the smoothing window :param iterations: number of iterations the algorithms uses :return: smoothed background """ y_original = y N_data = y.size N = smooth_points N_float = float(N) y = np.empty(N_data + N + N) y[0:N].fill(y_original[0]) y[N:N + N_data] = y_original[0:N_data] y[N + N_data:N_data + N + N].fill(y_original[-1]) y_avg = np.average(y) y_min = np.min(y) y_c = y_avg + 2. * (y_avg - y_min) y[y > y_c] = y_c window_size = N_float * 2 + 1 for j in range(0, iterations): window_avg = np.average(y[0: 2 * N + 1]) for i in range(N, N_data - 1 - N - 1): if y[i] > window_avg: y_new = window_avg # updating central value in average (first bracket) # and shifting average by one index (second bracket) window_avg += ((window_avg - y[i]) + (y[i + N + 1] - y[i - N])) / window_size y[i] = y_new else: # shifting average by one index window_avg += (y[i + N + 1] - y[i - N]) / window_size return y[N:N + N_data]