diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..84d0dd5 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,13 @@ +# The primary mechanism for mandating specific reviewers on a per-file basis in +# this repo is REQUIRED_REVIEWERS. CODEOWNERS is only used as a secondary +# measure to protect against modifications to the files involved in the required +# reviewers mechanism and itself. + +# Order: last matching pattern takes the most precedence. +# Please refer the link for the detail +# https://help.github.com/en/articles/about-code-owners + +/.github/CODEOWNERS @nelimee @rolandriver +/.github/REQUIRED_REVIEWERS @nelimee @rolandriver +/.github/workflows/required_reviewers.yml @nelimee @rolandriver +/tools/check_reviewers.py @nelimee @rolandriver \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..dd489db --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,68 @@ +name: Bug report +description: Create a bug report to help us improve +title: "bug: " +labels: ["bug"] +assignees: [] + +body: + - type: markdown + attributes: + value: | + + Thank you for contributing to the improvement of Deltakit. Please fill out the following sections to report a bug. + + > [!NOTE] A bug is a disagreement between actual and documented behaviour, or an inaccurate error message. + > Please file a [request from](https://github.com/Deltakit/deltakit-decode/issues/new?template=request.yml) if the + > documentation does not define the expected behaviour, if you disagree with the documented behaviour, or if you + > are asking for a new feature or performance improvement. + > Please use the [test failure form](https://github.com/Deltakit/deltakit-decode/issues/new?template=test_failure.yml) + > if you're a contributor seeing a test failure in main, either locally or on CI. + + - type: checkboxes + id: cla-signature + attributes: + label: Contributor License Agreement + description: Please confirm the following before submitting + options: + - label: A Contributor Licence Agreement signature is required for any first PR contribution. Further information can be found in our [contributing guidelines](CONTRIBUTING.md). + required: true + + - type: textarea + id: bug-description + attributes: + label: Bug Description + description: | + Please provide a succinct description of the observed behaviour. + validations: + required: true + + - type: textarea + id: minimal-example + attributes: + label: Minimal Reproducible Example + description: | + Please provide a [Minimal Reproducible Example](https://en.wikipedia.org/wiki/Minimal_reproducible_example) + as a copy-pastable code snippet if possible. If not, describe steps to + reproduce the behaviour. Please enclose code blocks within triple backticks. + placeholder: | + ```python + # Copy-pastable, executable code here + ``` + + - type: textarea + id: actual-behaviour + attributes: + label: Actual behaviour + description: What actually happens. Please enclose code output / error messages within triple backticks. + + - type: textarea + id: expected-behaviour + attributes: + label: Expected behaviour + description: What you expected to happen. Please cite (with links) relevant documentation about what should happen. + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the bug reported here. diff --git a/.github/ISSUE_TEMPLATE/request.yml b/.github/ISSUE_TEMPLATE/request.yml new file mode 100644 index 0000000..1086925 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request.yml @@ -0,0 +1,50 @@ +name: Request +description: Suggest an idea for this project +title: "request: " +labels: ["request"] +assignees: [] + +body: + - type: markdown + attributes: + value: | + + Thank you for contributing to the improvement of Deltakit. Please fill out the following sections to suggest any new feature, performance or code quality improvements. + + - type: checkboxes + id: cla-signature + attributes: + label: Contributor License Agreement + description: Please confirm the following before submitting + options: + - label: A Contributor License Agreement signature is requested for any first PR contribution. Further information can be found in our [contributing guidelines](CONTRIBUTING.md). + required: true + + - type: textarea + id: motivation + attributes: + label: Motivation + description: A description of the feature or improvement. + placeholder: Ex. As a user, I would like to [...] + validations: + required: true + + - type: textarea + id: proposed-solution + attributes: + label: Proposed solution + description: A description of a possible implementation. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Potential alternatives + description: Any alternative solutions or features you've considered. + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/test_failure.yml b/.github/ISSUE_TEMPLATE/test_failure.yml new file mode 100644 index 0000000..30c6b0a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/test_failure.yml @@ -0,0 +1,42 @@ +name: Test failure report +description: Create a test failure report +title: "test: " +labels: ["test"] +assignees: [] + +body: + - type: markdown + attributes: + value: | + + Thank you for contributing to the improvement of Deltakit. Please fill out the following sections to report a test failure. + + - type: checkboxes + id: cla-signature + attributes: + label: Contributor License Agreement + description: Please confirm the following before submitting + options: + - label: A Contributor License Agreement signature is requested for any first PR contribution. Further information can be found in our [contributing guidelines](CONTRIBUTING.md). + required: true + + - type: textarea + id: failure-summary + attributes: + label: Test Failure Summary + description: | + Please copy-paste the failure summary produced by `pytest`. + validations: + required: true + + - type: textarea + id: related-prs + attributes: + label: Relevant issues/PRs + description: Please link to relevant issues/PRs, indicating their connection (e.g. "See CI failure here.") + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Please add any other context about the problem here, such as debugging suggestions or platform information. diff --git a/.github/REQUIRED_REVIEWERS b/.github/REQUIRED_REVIEWERS new file mode 100644 index 0000000..42e0406 --- /dev/null +++ b/.github/REQUIRED_REVIEWERS @@ -0,0 +1,17 @@ +# This file functions just like a CODEOWNERS but without automatic assignment +# of all codeowners to every PR that touches code they own - it is the +# responsibility of the PR author to pick a few people from the list. + +# You are encouraged to add non-default reviewers where you know someone else +# may have useful insight or has been recently working in the area touched by +# your PR. Anyone is able to contribute to pull request review, and is +# encouraged to do so + +# Order: last matching pattern takes the most precedence. +# Please refer the link for the detail +# https://help.github.com/en/articles/about-code-owners + +* @nelimee @rolandriver + +# Dependency changes should also be reviewed by the deltakit core maintainers +/pyproject.toml @rolandriver @nelimee \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..76af097 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,27 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "uv" + directories: + - "/" + schedule: + interval: "weekly" + + commit-message: + prefix: fix(dependencies) + prefix-development: chore(dependencies) + # Grouping all development dependencies together, and all production libraries together. + groups: + dev-deps: + dependency-type: "development" + prod-deps: + dependency-type: "production" + # Ideally, we would like "widen" here. Even though it is explicitly written as "supported" for + # uv in the documentation (https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference#versioning-strategy--) + # it is not in practice... + # So sticking to the closest option we have for the moment, which is not ideal, but exists. + versioning-strategy: increase-if-necessary \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..e1109c0 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,37 @@ +## 🔗 Closed Issues + +Link any issues closed or comments addressed by this PR. +"Closes #X" will close issue X automatically when the PR is merged. + +--- + +## 📝 Description + +Add any additional description required to understand the PR. +Cite related issues, PRs, or comments as needed. + +--- + +## 🚦 Status + +If anything still needs to be done before this PR can be merged, track it here. + +--- + +## 🛠️ Future Work + +Focused PRs are good! +Create and link issues for any follow-up work needed. + +--- + +## ➕️ Additional Information + +Anything that doesn't fit into a category above. + +--- + +## 🧾 Release Note + +If this PR will be **squash-merged**, draft the final one-line commit message here. +Otherwise, describe your rebase strategy or how you plan to maintain clean commits. diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml new file mode 100644 index 0000000..c7da113 --- /dev/null +++ b/.github/workflows/prerelease.yml @@ -0,0 +1,160 @@ +name: Build, test, and publish development wheels on PyPI + +on: + workflow_dispatch: + push: + branches: [main] + +env: + pkg_name: deltakit-decode + +jobs: + build-test-wheels: + name: Build distributions + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + # Needed to get the last commit involving each package to tag dev versions. + fetch-depth: 0 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Build deltakit-decode wheel + run: uv build --no-sources -o ./dist + - name: Upload wheels artefacts + uses: actions/upload-artifact@v7 + with: + name: deltakit-decode + path: ./dist/ + retention-days: 1 + + test-wheel: + name: Test imports on ${{ matrix.os }} + needs: [build-test-wheels] + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] + os: + - ubuntu-latest + - windows-latest + - macos-latest + steps: + - name: Make dist dir + run: mkdir dist + - name: Recover deltakit distribution files + uses: actions/download-artifact@v8 + with: + pattern: ${{ env.pkg_name }} + path: ./dist/ + merge-multiple: true + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: false + - name: Test installs in Unix systems + if: matrix.os != 'windows-latest' + run: | + uv venv --python ${{ matrix.python-version }} + uv pip install --pre dist/*.whl + uv run python -c "import deltakit_decode" + - name: Test installs on Windows OS + if: matrix.os == 'windows-latest' + shell: pwsh + run: | + uv venv --python ${{ matrix.python-version }} + uv pip install --pre (Get-ChildItem dist/*.whl).FullName + uv run python -c "import deltakit_decode" + + test-sdist: + name: Test imports after sdists installs + needs: [build-test-wheels] + runs-on: ubuntu-latest + steps: + - name: Make dist dir + run: mkdir dist + - name: Recover deltakit distribution files + uses: actions/download-artifact@v8 + with: + pattern: ${{ env.pkg_name }} + path: ./dist/ + merge-multiple: true + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: false + - name: Test install and imports + run: | + uv venv --python 3.10 + uv pip install --pre dist/*.tar.gz --find-links ./dist/ + uv run python -c "import deltakit_decode" + + set-pre-version: + name: Sets project prerelease versions + runs-on: ubuntu-latest + needs: [test-wheel, test-sdist] + steps: + - uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Install release dependencies + run: uv sync --python 3.14 --group release + - name: Set prerelease version with short commit hash. + run: | + git config --global --add safe.directory /__w/deltakit_decode/deltakit_decode + COMMIT_HASH=$(git rev-parse --short HEAD) + SECS_SINCE_EPOCH=$(date +%s) + uv run --no-sync python3 -m tools.set_pre_version -t "$SECS_SINCE_EPOCH" -c "$COMMIT_HASH" + - name: Commit current state of project + run: | + git config user.name "riv-dev-bot" + git config user.email "devbot@riverlane.com" + git add -A + git commit -m "chore: set prerelease version" + - name: Upload updated project + uses: actions/upload-artifact@v7 + with: + name: prerelease-proj + path: . + + build-wheels-for-publishing: + name: Build distributions + needs: [set-pre-version] + runs-on: ubuntu-latest + steps: + - name: Recover prerelease proj + uses: actions/download-artifact@v8 + with: + name: prerelease-proj + path: . + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: false + - name: Build deltakit subpackages wheel + run: uv build --no-sources -o ./dist + - name: Upload wheels artefacts + uses: actions/upload-artifact@v7 + with: + name: publish-${{ env.pkg_name }} + path: ./dist + retention-days: 1 + + publish: + name: Publish Python distribution to PyPI + needs: [test-wheels, test-sdists] + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/${{ env.pkg_name }} + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + steps: + - name: Recover deltakit-decode distribution files + uses: actions/download-artifact@v8 + with: + pattern: ${{ env.pkg_name }} + path: ./dist/ + - name: Publish distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 0000000..b66c721 --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,115 @@ +name: Pull Request + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, labeled] + +jobs: + # Build wheels. + build-wheels: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Build deltakit-decode wheel + run: uv build --no-sources . + - name: Upload wheels artefacts + uses: actions/upload-artifact@v7 + with: + name: deltakit-decode-wheels + path: ./dist/*.whl + retention-days: 7 + + # Test the built wheels. + tests-wheels: + needs: [build-wheels] + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] + dependency-resolution: ['highest', 'lowest-direct'] + name: Test deltakit-decode on ${{ matrix.python-version }} with ${{matrix.dependency-resolution}} + env: + ENABLE_COVERAGE: ${{ (matrix.python-version == '3.10') && (matrix.dependency-resolution == 'highest') }} + # See https://github.com/orgs/community/discussions/25217 + PR_FROM_FORK: ${{ github.event.pull_request.head.repo.full_name != github.repository }} + PR_FROM_DEPENDABOT: ${{ startsWith(github.head_ref, 'dependabot/' )}} + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Download wheels + uses: actions/download-artifact@v8 + with: + name: deltakit-decode-wheels + path: ./dist + - name: Setup and sync venv for testing deltakit-decode + run: | + uv sync --python ${{ matrix.python-version }} --resolution ${{matrix.dependency-resolution}} --group test + uv pip install ./dist/*.whl + - name: Test deltakit-decode + env: + COVERAGE_ARGS: ${{env.ENABLE_COVERAGE == 'true' && '--cov deltakit_decode --cov-config pyproject.toml --cov-report xml:coverage.xml' || ''}} + run: | + uv run --python ${{ matrix.python-version }} --no-sync pytest $COVERAGE_ARGS tests/ + - name: Export coverage data to XML and report + if: ${{ env.ENABLE_COVERAGE == 'true' }} + run: | + uv run --no-sync coverage xml + uv run --no-sync coverage report + - name: Printing coverage report as a message + if: ${{ env.ENABLE_COVERAGE == 'true' && env.PR_FROM_FORK == 'false' && env.PR_FROM_DEPENDABOT == 'false' }} + uses: 5monkeys/cobertura-action@v13 + with: + repo_token : ${{ secrets.GITHUB_TOKEN }} + path: ./coverage.xml + skip_covered: true + minimum_coverage: 95 + fail_below_threshold: false + show_missing: true + link_missing_lines: true + link_missing_lines_source_dir: '' + only_changed_files: true + + # Perform static check on each deltakit-decode project package. + static-checks: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Setup venv + run: uv sync --group=lint --group=security + - name: Check for typos + run: uv run --no-sync typos + - name: Run `ruff` syntax checker + run: uv run --no-sync ruff check + if: ${{ always() }} + - name: Run `ruff` formatting + run: uv run --no-sync ruff format --check + if: ${{ always() }} + - name: Run `pydoclint` documentation formatting + run: uv run --no-sync pydoclint . + if: ${{ always() }} + - name: Run `mypy` type checker + run: uv run --no-sync mypy + if: ${{ always() }} + - name: Run `deptry` for dependency hygiene + run: uv run --no-sync deptry . + if: ${{ always() }} + - name: Run `bandit` for code vulnerabilities + run: uv run --no-sync bandit . + if: ${{ always() }} + - name: Run `pip_audit` to check dependencies for known vulnerabilities + # Ignore CVE-2025-53000 as it only affects `nbconvert` on Windows. + # `nbconvert` is only used for documentation building on Linux. + # Remove when https://github.com/jupyter/nbconvert/issues/2258 is fixed. + run: uv run --no-sync pip-audit --ignore-vuln CVE-2025-53000 + if: ${{ always() }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..706a8f0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,145 @@ +--- +name: Build, test, and publish stable wheels on PyPI +permissions: + contents: read + +on: + release: + types: [published] + workflow_dispatch: + inputs: + gh_release: + description: 'Create a GitHub release' + required: false + default: false + type: boolean + run_tests: + description: 'Run tests' + required: false + default: false + type: boolean + publish_to_pypi: + description: 'Publish to PyPI' + required: false + default: false + type: boolean + +env: + pkg_name: deltakit-decode + +jobs: + validation: + name: Validate version bump + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Install release dependencies + run: uv sync --python 3.14 --group release + - name: Validate project version matches latest tag + run: | + git fetch --tags --quiet + latest_tag=$(git tag -l \ + | grep -E '^v?[0-9]+\.[0-9]+\.[0-9]+$' \ + | sort -V \ + | tail -n1) + version=$(echo "$latest_tag" | sed 's/^v//') + uv run --no-sync python3 -m tools.check_version_match $version + + build-wheels: + name: Build distributions + needs: [validation] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + - name: Build deltakit-decode wheel + run: uv build --no-sources -o ./dist + - name: Upload wheels artefacts + uses: actions/upload-artifact@v7 + with: + name: ${{ env.pkg_name }} + path: ./dist/ + retention-days: 1 + + test-wheels: + name: Test imports on ${{ matrix.os }} + needs: [build-wheels] + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] + os: + - ubuntu-latest + - windows-latest + - macos-latest + steps: + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: false + ignore-empty-workdir: true + - name: Recover deltakit-decode distribution files + uses: actions/download-artifact@v8 + with: + pattern: ${{ env.pkg_name }} + path: ./dist/ + merge-multiple: true + - name: Test installs in Unix systems + if: matrix.os != 'windows-latest' + run: | + uv venv --python ${{ matrix.python-version }} + uv pip install --pre dist/*.whl + # Test installs + uv run python -c "import deltakit_decode" + - name: Test installs on Windows OS + if: matrix.os == 'windows-latest' + shell: pwsh + run: | + uv venv --python ${{ matrix.python-version }} + uv pip install --pre (Get-ChildItem dist/*.whl).FullName + # Test installs + uv run python -c "import deltakit_decode" + + test-sdists: + name: Test imports after sdists installs + needs: [build-wheels] + runs-on: ubuntu-latest + steps: + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: false + ignore-empty-workdir: true + - name: Recover deltakit-decode distribution files + uses: actions/download-artifact@v8 + with: + pattern: ${{ env.pkg_name }} + path: ./dist/ + merge-multiple: true + - name: Test install and imports + run: | + uv venv --python 3.10 + uv pip install --pre dist/*.tar.gz + uv run python -c "import deltakit_decode" + + publish: + name: Publish Python distribution to PyPI + needs: [test-wheels, test-sdists] + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/${{ env.pkg_name }} + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + steps: + - name: Recover deltakit-decode distribution files + uses: actions/download-artifact@v8 + with: + pattern: ${{ env.pkg_name }} + path: ./dist/ + - name: Publish distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/required_reviewers.yml b/.github/workflows/required_reviewers.yml new file mode 100644 index 0000000..c0c10ea --- /dev/null +++ b/.github/workflows/required_reviewers.yml @@ -0,0 +1,44 @@ +name: Required Reviewers + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + pull_request_review: + types: [submitted, dismissed] + +jobs: + check-reviewers: + runs-on: ubuntu-latest + outputs: + is_approved: ${{ steps.run_check.outputs.is_approved }} + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: pip install requests + + - name: Check reviewers + id: run_check + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_IS_DRAFT: ${{ github.event.pull_request.draft }} + run: | + if python tools/check_reviewers.py; then + echo "is_approved=true" >> $GITHUB_OUTPUT + else + if [ $? == 1 ]; then + # The script exited with an error + exit 1 + fi + echo "is_approved=false" >> $GITHUB_OUTPUT + fi + + + enforce-reviewers: + needs: [check-reviewers] + if: ${{ needs.check-reviewers.outputs.is_approved == 'true' && ! github.event.pull_request.draft }} + runs-on: ubuntu-latest + steps: + - name: Pass reviewer check (skipped if not approved) + run: echo "Required reviewer check passed" diff --git a/.github/workflows/semantic_pull_requests.yaml b/.github/workflows/semantic_pull_requests.yaml new file mode 100644 index 0000000..e97dab0 --- /dev/null +++ b/.github/workflows/semantic_pull_requests.yaml @@ -0,0 +1,25 @@ +name: Check Pull Request Title + +on: + pull_request: + branches: [main] + +jobs: + semantic_pull_request: + runs-on: ubuntu-latest + steps: + # Uses https://github.com/amannn/action-semantic-pull-request + - name: Check PR title uses conventional commit spec + uses: amannn/action-semantic-pull-request@v6.1.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: | + chore + ci + docs + feat + fix + refactor + release + test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d980c12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,228 @@ +# Byte-compiled / optimised / DLL files +__pycache__/ +*.py[codz] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py.cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# UV +# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +uv.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +poetry.lock +poetry.toml + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. +# https://pdm-project.org/en/latest/usage/project/#working-with-version-control +#pdm.lock +#pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.envrc +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyser +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ + +# Abstra +# Abstra is an AI-powered process automation framework. +# Ignore directories containing user credentials, local state, and settings. +# Learn more at https://abstra.io/docs +.abstra/ + +# Visual Studio Code +# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore +# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore +# and can be added to the global gitignore or merged into this file. However, if you prefer, +# you could uncomment the following to ignore the entire vscode folder +.vscode/ + +# Ruff stuff: +.ruff_cache/ + +# PyPI configuration file +.pypirc + +# Cursor +# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to +# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data +# refer to https://docs.cursor.com/context/ignore-files +.cursorignore +.cursorindexingignore + +# Marimo +marimo/_static/ +marimo/_lsp/ +__marimo__/ + +# Jupyter Notebook +*.ipynb_checkpoints + +# linters and reports +.coverage* + +# project specific +.tox +.testmondata +deltakit-explorer/poetry.lock +deltakit-explorer/dist/ +deltakit-decode/src/deltakit_decode/_version.py +deltakit-circuit/src/deltakit_circuit/_version.py +docs/generated/ +docs/jupyter_execute + +# notebooks are copied there while building docs +docs/explorer/google_qmem_experiment/ +docs/explorer/simulation/ + +# mac +.DS_Store + +# Generated by `simulation.md` +docs/**/measurements.01 +docs/**/dets_from_circuit_sampler.b8 +docs/**/dets_from_dem_sampler.01 diff --git a/.pydoclint_baseline.txt b/.pydoclint_baseline.txt index ad9b5b7..d5377e6 100644 --- a/.pydoclint_baseline.txt +++ b/.pydoclint_baseline.txt @@ -297,6 +297,12 @@ src/deltakit_decode/utils/_log_utils.py src/deltakit_decode/utils/_pij_visualiser.py DOC003: Function/method `plot_correlation_matrix`: Docstring style mismatch. (Please read more at https://jsh9.github.io/pydoclint/style_mismatch.html ). You specified "google" style, but the docstring is likely not written in this style. -------------------- +tests/analysis/test_decoder_manager.py + DOC101: Method `MockNoiseModelDecoderManagerPoolMap.__init__`: Docstring contains fewer arguments than in function signature. + DOC106: Method `MockNoiseModelDecoderManagerPoolMap.__init__`: The option `--arg-type-hints-in-signature` is `True` but there are no argument type hints in the signature + DOC107: Method `MockNoiseModelDecoderManagerPoolMap.__init__`: The option `--arg-type-hints-in-signature` is `True` but not all args in the signature have type hints + DOC103: Method `MockNoiseModelDecoderManagerPoolMap.__init__`: Docstring arguments are different from function arguments. (Or could be other formatting issues: https://jsh9.github.io/pydoclint/violation_codes.html#notes-on-doc103 ). Arguments in the function signature but not in the docstring: [monkeypatch: , proc_managers: ]. +-------------------- tests/analysis/test_empirical_decoding_error_distribution.py DOC101: Method `TestEmpiricalDecodingErrorDistribution._distribution_data_is_equal`: Docstring contains fewer arguments than in function signature. DOC103: Method `TestEmpiricalDecodingErrorDistribution._distribution_data_is_equal`: Docstring arguments are different from function arguments. (Or could be other formatting issues: https://jsh9.github.io/pydoclint/violation_codes.html#notes-on-doc103 ). Arguments in the function signature but not in the docstring: [distr1: EmpiricalDecodingErrorDistribution, distr2: EmpiricalDecodingErrorDistribution]. diff --git a/pyproject.toml b/pyproject.toml index 935619d..e31c1d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "deltakit-decode" -version = "0.9.0" +version = "0.9.1" description = "Deltakit (component deltakit-decode)" readme = "README.md" requires-python = ">=3.10,<3.15" @@ -25,6 +25,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Quantum Computing", @@ -32,24 +33,27 @@ classifiers = [ ] dependencies = [ - "deltakit-circuit>=0.8.0", - "deltakit-core>=0.8.0", - "numpy>=1.26", - "networkx~=3.1", - "seaborn~=0.12", - "matplotlib~=3.5", - "plotly >=5.0, <7.0", - "pymatching~=2.2", - "pymatching>=2.2.2,~=2.2; python_version >= '3.13'", - "deltakit-stim>=0.2,<0.3", - "pathos~=0.3", + "packaging >=25.0, <27", + "requests >=2.32.0", + "tomlkit >=0.13,<0.16", + "deltakit-circuit >=0.9.0, <0.10", + "deltakit-core >=0.9.0, <0.10", + "numpy >=1.26, <3", + "networkx >=3.1, <4", + "seaborn>=0.12, <0.14", + "matplotlib >=3.8, <4; python_version < '3.14'", + "matplotlib >=3.10.5, <4; python_version >= '3.14'", + "plotly >=6.5, <7.0", + "pymatching >=2.2, <3", + "pymatching >=2.2.2, <3; python_version >= '3.13'", + "deltakit-stim >=0.2,<0.3", + "pathos >=0.3.5, <0.4", # This is the first version to be compatible with numpy>=2.0 according to # https://pandas.pydata.org/pandas-docs/stable/whatsnew/v2.2.2.html - "pandas>=2.2.2", - "pandas~=2.3; python_version >= '3.13'", - "typing-extensions~=4.0", - "tqdm~=4.66", - "packaging>=25.0", + "pandas >=2.2.2, <3", + "pandas >=2.3.3, <3; python_version >= '3.13'", + "typing-extensions >=4, <5", + "tqdm >=4.66, <5", ] [project.urls] @@ -61,10 +65,11 @@ Changelog = "https://github.com/Deltakit/deltakit/releases" [dependency-groups] test = [ - "pytest>=9.0", - "pytest-cov>=7.0", + "pytest >=9.0, <10", + "pytest-cov >=7, <8", + "pytest-skip-slow>=0.0.5,<1.2", + "coverage >=7.7.0, <8", "pytest-mock>=3.14", - "pytest-skip-slow>=0.0.5", "pytest-lazy-fixtures>=1.0", ] stubs = [ @@ -76,17 +81,25 @@ stubs = [ ] lint = [ "mypy>=1.17,<3.0", - "ruff~=0.14", - "typos~=1.34", - "deptry~=0.23", - "pydoclint~=0.8", + "ruff~=0.15", + "typos >=1.34, <2", + "deptry>=0.23,<0.26", + "pydoclint>=0.9,<0.10", { include-group = "stubs" }, ] -security = ["bandit~=1.8", "pip-audit~=2.7"] +security = ["bandit[toml] >=1.8, <2", "pip-audit >=2.7, <3"] dev = [ { include-group = "test" }, { include-group = "lint" }, { include-group = "security" }, + "pre-commit >=4.2, <5", + "validate-pyproject >=0.24.1,<0.26", +] +release = [ + "python-semantic-release >=10.6.1, <11", + "packaging >=25.0, <27", + "requests>=2.32.0", + "tomlkit<0.16,>=0.13", ] [tool.deptry] @@ -118,3 +131,51 @@ skip-checking-short-docstrings = false # For the moment, we have a baseline of documentation format errors. Eventually, this will # be removed. baseline = ".pydoclint_baseline.txt" + +[tool.typos.default] +locale = 'en-gb' +extend-ignore-re = [ + # Ignore jupyter notebook cell IDs + "\"id\"\\s*:\\s*\"[0-9a-f]{8,}\"", +] + +[tool.typos.default.extend-words] +# Don't correct "iy" - often used in the context of "probability of an IY operation" +iy = "iy" +iz = "iz" +IZ = "IZ" +anc = "anc" +BA = "BA" +youre = "you're" +distribtuion = "distribution" +interm = "interm" +ket = "ket" +ND = "ND" # part of NDArray +Alise = "Alise" +DEPOLARIZE = "DEPOLARIZE" +depolarization = "depolarization" +depolarizing = "depolarizing" +Authorization = "Authorization" # Web-related field. +color = "color" # Used in matplotlib and stim APIs. +colors = "colors" +optimize = "optimize" # scipy.optimize +ax = "ax" # Typical naming for matplotlib Axes instances. +center = "center" +stabilizer = "stabilizer" +stabilizers = "stabilizers" +synchronize = "synchronize" # multiprocessing import +neighbors = "neighbors" +capitalize = "capitalize" +labeled = "labeled" +labeler = "labeler" +unrealized = "unrealized" +writeable = "writeable" # Used in numpy APIs. +CPY = "CPY" # A ruff rule identifier + + +[tool.typos.files] +# Paths/patterns to exclude from spell checking +extend-exclude = [ + "**/LICENSE", + "**/*.html", +] \ No newline at end of file diff --git a/ruff.toml b/ruff.toml index 1d91e25..652c7ae 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,38 +1,156 @@ # Linting configuration for deltakit_decode. # # General and format configurations are repository-wide for the moment. -extend = "../ruff.toml" +# Repository-wide Ruff configuration. +# +# Should only contain project-wide configuration. +# +# Exclude a variety of commonly ignored directories. +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".github", + ".git-rewrite", + ".hg", + ".ipynb_checkpoints", + ".mypy_cache", + ".nox", + ".pants.d", + ".pixi", + ".pyenv", + ".pytest_cache", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + ".vscode", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "site-packages", + "venv", + "*.ipynb", + "_version.py", +] + +# Only include source code and tests. include = ["src/deltakit_decode/**/*.py", "tests/**/*.py"] +# Same as Black. +line-length = 88 +indent-width = 4 + +# Assume Python 3.10 +target-version = "py310" + [lint] +preview = true +explicit-preview-rules = true +select = [ + "A", + "ARG", + "B", + "C4", + "E", + "EM", + "EXE", + "F", + "FURB", + "G", + "I", + "ICN", + "N", + "NPY", + "PD", + "PGH", + "PIE", + "PL", + "PT", + "PTH", + "PYI", + "RET", + "RUF", + "SIM", + "T", + "UP", + "W", + "YTT", + # Explicit preview rules + "CPY001", +] ignore = [ - # deltakit_decode does not follow ruff format, and so long lines exist. This should - # be fixed eventually, but is not urgent. It might be solved very quickly if we + # deltakit_decode does not follow ruff format, and so long lines exist. This should + # be fixed eventually, but is not urgent. It might be solved very quickly if we # adopt ruff format. - # This ignore is purely stylistic, and so should not hide potential bugs. + # This ignore is purely stylistic, and so should not hide potential bugs. "E501", - # Magic constants are not an urgent issue. This check is ignored for the moment. + # Magic constants are not an urgent issue. This check is ignored for the moment. "PLR2004", - # Too many arguments in function. - # Most of the functions/methods flagged by this check are fine (maximum is 8 - # parameters instead of the maximum allowed of 5). This rule might be removed by + # Too many arguments in function. + # Most of the functions/methods flagged by this check are fine (maximum is 8 + # parameters instead of the maximum allowed of 5). This rule might be removed by # directly changing the threshold of "maximum number of allowed parameters for one # function". - # This check cannot "hide" potential bugs. + # This check cannot "hide" potential bugs. "PLR0913", # Use of `zip` without the `strict` argument. - # For the moment we keep this ignore as technical debt. It will be properly removed - # in a future PR. - "B008", # Default argument evaluation with class instantiation. - "B905", # Missing `strict` argument to `zip` + # For the moment we keep this ignore as technical debt. It will be properly removed + # in a future PR. + "B008", # Default argument evaluation with class instantiation. + "B905", # Missing `strict` argument to `zip` + # Having an explicit argument to open() for the open mode is nice. + "UP015", ] +# Specific per-file ignores [lint.per-file-ignores] # For the moment, dynamic __all__ generation raises a lot of issues with # F401 enabled, so ignore it where it happens, in __init__.py files. "**/__init__.py" = ["F401"] -# The DecoderManager class needs a global variable for optimisation purposes. The goal -# is to avoid to have to deepcopy the DecoderManager instance each time a new batch of -# shots is required when performing computation with a process pool. For the moment, +# The DecoderManager class needs a global variable for optimisation purposes. The goal +# is to avoid to have to deepcopy the DecoderManager instance each time a new batch of +# shots is required when performing computation with a process pool. For the moment, # we ignore specifically this error for that file. "src/deltakit_decode/analysis/_decoder_manager.py" = ["PLW0603"] +# Tests don't need copyright notices +"tests/**/*.py" = ["CPY001"] + +[lint.flake8-copyright] +# Ruff configuration for enforcing copyright notices (https://docs.astral.sh/ruff/rules/missing-copyright-notice/) +# We are enforcing the style presented in https://riverlane.atlassian.net/wiki/x/VgBJhg +notice-rgx = "(?i)\\(c\\) Copyright Riverlane \\d{4}-2026. All rights reserved." +# Avoid enforcing a header on empty (<10 bytes) files +min-file-size = 10 + +[format] +# Like Black, use double quotes for strings. +quote-style = "double" + +# Like Black, indent with spaces, rather than tabs. +indent-style = "space" + +# Like Black, respect magic trailing commas. +skip-magic-trailing-comma = false + +# Like Black, automatically detect the appropriate line ending. +line-ending = "auto" + +# Enable auto-formatting of code examples in docstrings. Markdown, +# reStructuredText code/literal blocks and doctests are all supported. +# +# This is currently disabled by default, but it is planned for this +# to be opt-out in the future. +docstring-code-format = true + +# Set the line length limit used when formatting code snippets in +# docstrings. +# +# This only has an effect when the `docstring-code-format` setting is +# enabled. +docstring-code-line-length = "dynamic" \ No newline at end of file diff --git a/src/deltakit_decode/__init__.py b/src/deltakit_decode/__init__.py index d9895f3..e07763a 100644 --- a/src/deltakit_decode/__init__.py +++ b/src/deltakit_decode/__init__.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. """Description of ``deltakit.decode`` namespace here.""" import importlib.metadata diff --git a/src/deltakit_decode/_abstract_matching_decoders.py b/src/deltakit_decode/_abstract_matching_decoders.py index eb8321a..a1fd384 100644 --- a/src/deltakit_decode/_abstract_matching_decoders.py +++ b/src/deltakit_decode/_abstract_matching_decoders.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import logging import warnings from abc import ABC, abstractmethod diff --git a/src/deltakit_decode/_base_reporter.py b/src/deltakit_decode/_base_reporter.py index d1fb5ca..1774825 100644 --- a/src/deltakit_decode/_base_reporter.py +++ b/src/deltakit_decode/_base_reporter.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations import logging diff --git a/src/deltakit_decode/_mwpm_decoder.py b/src/deltakit_decode/_mwpm_decoder.py index 64778bd..1dbe3fc 100644 --- a/src/deltakit_decode/_mwpm_decoder.py +++ b/src/deltakit_decode/_mwpm_decoder.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations from collections.abc import Iterable diff --git a/src/deltakit_decode/analysis/__init__.py b/src/deltakit_decode/analysis/__init__.py index f6e0179..458bfce 100644 --- a/src/deltakit_decode/analysis/__init__.py +++ b/src/deltakit_decode/analysis/__init__.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. """Description of ``deltakit.decode.analysis`` namespace here.""" from deltakit_decode.analysis._decoder_manager import ( diff --git a/src/deltakit_decode/analysis/_decoder_manager.py b/src/deltakit_decode/analysis/_decoder_manager.py index dfd9507..1959796 100644 --- a/src/deltakit_decode/analysis/_decoder_manager.py +++ b/src/deltakit_decode/analysis/_decoder_manager.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations from abc import ABC, abstractmethod diff --git a/src/deltakit_decode/analysis/_decoding_circuits.py b/src/deltakit_decode/analysis/_decoding_circuits.py index 62b7091..c0733e3 100644 --- a/src/deltakit_decode/analysis/_decoding_circuits.py +++ b/src/deltakit_decode/analysis/_decoding_circuits.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import deltakit_stim as stim import numpy as np diff --git a/src/deltakit_decode/analysis/_empirical_decoding_error_distribution.py b/src/deltakit_decode/analysis/_empirical_decoding_error_distribution.py index 10e1347..a7ef063 100644 --- a/src/deltakit_decode/analysis/_empirical_decoding_error_distribution.py +++ b/src/deltakit_decode/analysis/_empirical_decoding_error_distribution.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations diff --git a/src/deltakit_decode/analysis/_matching_decoder_managers.py b/src/deltakit_decode/analysis/_matching_decoder_managers.py index a8962ad..4f27eec 100644 --- a/src/deltakit_decode/analysis/_matching_decoder_managers.py +++ b/src/deltakit_decode/analysis/_matching_decoder_managers.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations from collections.abc import Iterable, Sequence diff --git a/src/deltakit_decode/analysis/_run_all_analysis_engine.py b/src/deltakit_decode/analysis/_run_all_analysis_engine.py index 34cddbe..d20979e 100644 --- a/src/deltakit_decode/analysis/_run_all_analysis_engine.py +++ b/src/deltakit_decode/analysis/_run_all_analysis_engine.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import datetime import logging from collections.abc import Callable, Iterable diff --git a/src/deltakit_decode/noise_sources/__init__.py b/src/deltakit_decode/noise_sources/__init__.py index a9828a1..6f01798 100644 --- a/src/deltakit_decode/noise_sources/__init__.py +++ b/src/deltakit_decode/noise_sources/__init__.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. """ Sub-package for defining sources of noise to be used in QEC experiments. """ diff --git a/src/deltakit_decode/noise_sources/_generic_noise_sources.py b/src/deltakit_decode/noise_sources/_generic_noise_sources.py index 04e2946..6a1cddb 100644 --- a/src/deltakit_decode/noise_sources/_generic_noise_sources.py +++ b/src/deltakit_decode/noise_sources/_generic_noise_sources.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations from abc import ABC, abstractmethod diff --git a/src/deltakit_decode/noise_sources/_matching_noise_sources.py b/src/deltakit_decode/noise_sources/_matching_noise_sources.py index f60b541..7fcdcc6 100644 --- a/src/deltakit_decode/noise_sources/_matching_noise_sources.py +++ b/src/deltakit_decode/noise_sources/_matching_noise_sources.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations from collections import Counter, defaultdict diff --git a/src/deltakit_decode/noise_sources/_stim_noise_sources.py b/src/deltakit_decode/noise_sources/_stim_noise_sources.py index 9c93cc5..435a39c 100644 --- a/src/deltakit_decode/noise_sources/_stim_noise_sources.py +++ b/src/deltakit_decode/noise_sources/_stim_noise_sources.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from __future__ import annotations from collections.abc import Iterable, Iterator diff --git a/src/deltakit_decode/utils/__init__.py b/src/deltakit_decode/utils/__init__.py index 7061896..082e306 100644 --- a/src/deltakit_decode/utils/__init__.py +++ b/src/deltakit_decode/utils/__init__.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. """Description of ``deltakit.decode.utils`` namespace here.""" from deltakit_decode.utils._decoding_graph_visualiser import VisDecodingGraph3D diff --git a/src/deltakit_decode/utils/_decoding_graph_visualiser.py b/src/deltakit_decode/utils/_decoding_graph_visualiser.py index 6b0f821..3e55544 100644 --- a/src/deltakit_decode/utils/_decoding_graph_visualiser.py +++ b/src/deltakit_decode/utils/_decoding_graph_visualiser.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from collections.abc import Collection, Iterable import numpy as np diff --git a/src/deltakit_decode/utils/_derivation_tools.py b/src/deltakit_decode/utils/_derivation_tools.py index 5b764be..98f47e0 100644 --- a/src/deltakit_decode/utils/_derivation_tools.py +++ b/src/deltakit_decode/utils/_derivation_tools.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import math from collections import Counter, defaultdict diff --git a/src/deltakit_decode/utils/_derivation_tools_pij.py b/src/deltakit_decode/utils/_derivation_tools_pij.py index 8c0af7e..57df2a3 100644 --- a/src/deltakit_decode/utils/_derivation_tools_pij.py +++ b/src/deltakit_decode/utils/_derivation_tools_pij.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import math from collections.abc import Callable diff --git a/src/deltakit_decode/utils/_graph_circuit_helpers.py b/src/deltakit_decode/utils/_graph_circuit_helpers.py index 889af6e..abca895 100644 --- a/src/deltakit_decode/utils/_graph_circuit_helpers.py +++ b/src/deltakit_decode/utils/_graph_circuit_helpers.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. """Module containing useful functions to aid in the interaction of decoding graphs and Stim circuits.""" import deltakit_stim as stim diff --git a/src/deltakit_decode/utils/_log_utils.py b/src/deltakit_decode/utils/_log_utils.py index 3460b2b..1d3c940 100644 --- a/src/deltakit_decode/utils/_log_utils.py +++ b/src/deltakit_decode/utils/_log_utils.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import logging # Global dictionary with all QEC loggers and handlers diff --git a/src/deltakit_decode/utils/_pij_visualiser.py b/src/deltakit_decode/utils/_pij_visualiser.py index b405d96..998cf4d 100644 --- a/src/deltakit_decode/utils/_pij_visualiser.py +++ b/src/deltakit_decode/utils/_pij_visualiser.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from collections.abc import Sequence import matplotlib.pyplot as plt diff --git a/tests/analysis/test_empirical_decoding_error_distribution.py b/tests/analysis/test_empirical_decoding_error_distribution.py index 882fdf5..b99f4c6 100644 --- a/tests/analysis/test_empirical_decoding_error_distribution.py +++ b/tests/analysis/test_empirical_decoding_error_distribution.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import random from itertools import product diff --git a/tests/analysis/test_matching_decoder_managers.py b/tests/analysis/test_matching_decoder_managers.py index b97f10a..e5265d5 100644 --- a/tests/analysis/test_matching_decoder_managers.py +++ b/tests/analysis/test_matching_decoder_managers.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from unittest.mock import Mock import pytest diff --git a/tests/analysis/test_run_all_analysis_engine.py b/tests/analysis/test_run_all_analysis_engine.py index 0bfd86c..ff19337 100644 --- a/tests/analysis/test_run_all_analysis_engine.py +++ b/tests/analysis/test_run_all_analysis_engine.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import pathlib from functools import partial from typing import Protocol diff --git a/tests/analysis/test_timing_reporter.py b/tests/analysis/test_timing_reporter.py index e279913..a2da16e 100644 --- a/tests/analysis/test_timing_reporter.py +++ b/tests/analysis/test_timing_reporter.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from contextlib import ExitStack from itertools import cycle from unittest.mock import Mock diff --git a/tests/conftest.py b/tests/conftest.py index cdb7a6b..8ee5e9c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from pathlib import Path import numpy as np diff --git a/tests/noise_sources/test_noise_sources_error_generator.py b/tests/noise_sources/test_noise_sources_error_generator.py index 41c2da6..bb152cd 100644 --- a/tests/noise_sources/test_noise_sources_error_generator.py +++ b/tests/noise_sources/test_noise_sources_error_generator.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import deltakit_circuit as sp import deltakit_stim as stim @@ -139,14 +139,12 @@ def noise_model_and_decoding_graph(self): } exhaustion_ceiling = ( min( - [ - sum( - decoding_graph.edge_records[edge].weight - for edge in logicals[0] - if decoding_graph.detector_records[edge.second].time == time - ) - for time in times - ] + sum( + decoding_graph.edge_records[edge].weight + for edge in logicals[0] + if decoding_graph.detector_records[edge.second].time == time + ) + for time in times ) / 2 ) diff --git a/tests/noise_sources/test_stim_noise_sources.py b/tests/noise_sources/test_stim_noise_sources.py index 9094945..aa84a5d 100644 --- a/tests/noise_sources/test_stim_noise_sources.py +++ b/tests/noise_sources/test_stim_noise_sources.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import deltakit_circuit as sp import deltakit_stim as stim import pytest diff --git a/tests/reference_data/b801/detection_events.b8 b/tests/reference_data/b801/detection_events.b8 new file mode 100644 index 0000000..7b78efa Binary files /dev/null and b/tests/reference_data/b801/detection_events.b8 differ diff --git a/tests/reference_data/b801/flannings.b8 b/tests/reference_data/b801/flannings.b8 new file mode 100644 index 0000000..0d31127 Binary files /dev/null and b/tests/reference_data/b801/flannings.b8 differ diff --git a/tests/reference_data/b801/logical_flips.01 b/tests/reference_data/b801/logical_flips.01 new file mode 100644 index 0000000..3769d0f --- /dev/null +++ b/tests/reference_data/b801/logical_flips.01 @@ -0,0 +1,5 @@ +01 +00 +11 +10 +10 diff --git a/tests/reference_data/b801/measurements.b8 b/tests/reference_data/b801/measurements.b8 new file mode 100644 index 0000000..cfd6f75 Binary files /dev/null and b/tests/reference_data/b801/measurements.b8 differ diff --git a/tests/reference_data/b801/obs_flips_actual.b8 b/tests/reference_data/b801/obs_flips_actual.b8 new file mode 100644 index 0000000..48b42cf Binary files /dev/null and b/tests/reference_data/b801/obs_flips_actual.b8 differ diff --git a/tests/reference_data/b801/obs_flips_one_logical.b8 b/tests/reference_data/b801/obs_flips_one_logical.b8 new file mode 100644 index 0000000..f6d12e1 Binary files /dev/null and b/tests/reference_data/b801/obs_flips_one_logical.b8 differ diff --git a/tests/reference_data/b801/obs_flips_predicted_by_pymatching.b8 b/tests/reference_data/b801/obs_flips_predicted_by_pymatching.b8 new file mode 100644 index 0000000..f053964 Binary files /dev/null and b/tests/reference_data/b801/obs_flips_predicted_by_pymatching.b8 differ diff --git a/tests/reference_data/b801/obs_flips_two_logical.b8 b/tests/reference_data/b801/obs_flips_two_logical.b8 new file mode 100644 index 0000000..3a4a218 Binary files /dev/null and b/tests/reference_data/b801/obs_flips_two_logical.b8 differ diff --git a/tests/reference_data/b801/statuses.b8 b/tests/reference_data/b801/statuses.b8 new file mode 100644 index 0000000..d7df58b Binary files /dev/null and b/tests/reference_data/b801/statuses.b8 differ diff --git a/tests/reference_data/b801/syndromes.01 b/tests/reference_data/b801/syndromes.01 new file mode 100644 index 0000000..4a88019 --- /dev/null +++ b/tests/reference_data/b801/syndromes.01 @@ -0,0 +1,2 @@ +0100011 +0011000 diff --git a/tests/reference_data/dem/circuit_logical_off_boundary.dem b/tests/reference_data/dem/circuit_logical_off_boundary.dem new file mode 100644 index 0000000..d11fa8c --- /dev/null +++ b/tests/reference_data/dem/circuit_logical_off_boundary.dem @@ -0,0 +1,121 @@ +error(0.1218205707369061225) D0 +error(0.0644739474971766785) D1 +error(0.1062529626494345958) D2 +error(0.08108644906803996744) D3 +error(0.04512123743344563509) D4 +error(0.06261083887100375722) D5 +error(0.102185868414802053) D6 +error(0.06490543912061458309) D7 +error(0.06916607375568736837) D8 +error(0.05952194205035223062) D9 +error(0.01935215168049773948) D10 +error(0.05010558787103037981) D11 +error(0.04926088174341968634) D12 +error(0.02606483681374181099) D13 +error(0.07448053840904680922) D14 +error(0.06456413270128942561) D15 +error(0.0634015434105971859) D16 +error(0.0789492286401332205) D17 +error(0.06265072250595685177) D18 +error(0.0469665313454327854) D19 +error(0.0809993530314162824) D20 +error(0.1117300511535624236) D21 +error(0.08398392436460150323) D22 +error(0.1182620295605309041) D23 +error(0.003396950010237709261) D0 D1 +error(0.02945947303356555302) D0 D3 L0 +error(0.00217039339827496125) D0 D6 +error(0.02034441240930151551) D1 D2 +error(0.0002694083680992997998) D1 D4 L0 +error(0.0006378761874903937645) D1 D6 +error(0.002912841353224171481) D1 D7 +error(0) D3 D4 +error(3.130775328430424054e-07) D3 D6 L0 +error(0.0001230841508201852008) D3 D7 L0 +error(0.0006057086936336886218) D3 D9 +error(0.002513684493767820438) D6 D7 +error(0.0009587468112532970821) D6 D9 L0 +error(0.0003327594949091294829) D6 D12 +error(0.003149260874582504588) D2 D5 L0 +error(0.009651464977080304042) D2 D7 +error(0.005662074136275063729) D2 D8 +error(0.03790345231176561747) D4 D5 +error(0.03391940293960499231) D4 D7 L0 +error(0.00156331219200867011) D4 D8 L0 +error(0.001542441871037580903) D4 D9 +error(0.002368168964779038266) D4 D10 +error(0.02117147789841983263) D7 D8 +error(0.02996865757262678898) D7 D10 L0 +error(0.0005492460100288698577) D7 D12 +error(0.00431385409733087144) D7 D13 +error(0.0304051503265641565) D5 D8 L0 +error(0.0206841778568258583) D5 D10 +error(0.001741474636418216537) D5 D11 +error(0.0279843737550020677) D8 D11 L0 +error(0.006947868535355894437) D8 D13 +error(0.002172693153775329122) D8 D14 +error(0.02012836539658235946) D9 D10 +error(6.645559185447513784e-06) D9 D12 L0 +error(0.006808681993422827095) D9 D13 L0 +error(0.004175763292184775377) D9 D15 +error(0.03195751086460879575) D10 D11 +error(0.00500800428647374396) D10 D13 L0 +error(0.008048770793723514227) D10 D14 L0 +error(0.009872253731106950259) D10 D15 +error(0.004213254628679163893) D10 D16 +error(0.001059227897313053113) D11 D14 L0 +error(0.000886756321475112852) D11 D16 +error(0.001584650368664064501) D11 D17 +error(0.03852901555238519293) D12 D13 +error(0.03267648658682631435) D12 D15 L0 +error(0.001967333588214215112) D12 D18 +error(0.02326825708812413351) D13 D14 +error(0.0294716091300658567) D13 D16 L0 +error(0.02034474697968224888) D13 D18 +error(0.001170864241598179589) D13 D19 +error(0.0016035239988345662) D14 D17 L0 +error(0.002451931796113582251) D14 D19 +error(0.0008923892257873822231) D14 D20 +error(0.02213965916097249131) D15 D16 +error(0.02663162929864509865) D15 D18 L0 +error(0.002053064469357823718) D15 D19 L0 +error(0.006015018086743040282) D15 D21 +error(0.003458693686989977589) D16 D17 +error(0.02849572252441406883) D16 D19 L0 +error(0.002119128695513561311) D16 D20 L0 +error(0.007661596419992144913) D16 D21 +error(0.002235768312187413898) D16 D22 +error(0.0001662190052149625785) D17 D20 L0 +error(0.0001041960179765100136) D17 D22 +error(0.004357448648419359749) D17 D23 +error(0.03166821612240017236) D18 D19 +error(0.003891594924296359892) D18 D21 L0 +error(0) D19 D20 +error(0.0002646180010398846427) D19 D22 L0 +error(0.03377131332412736109) D20 D23 L0 +error(0.02348579272760425996) D21 D22 +error(0.003070810256326939047) D22 D23 +detector(1, 0, 0) D0 +detector(1, 2, 0) D1 +detector(3, 0, 0) D3 +detector(1, 0, 1) D6 +detector(1, 4, 0) D2 +detector(3, 2, 0) D4 +detector(1, 2, 1) D7 +detector(3, 4, 0) D5 +detector(1, 4, 1) D8 +detector(3, 0, 1) D9 +detector(3, 2, 1) D10 +detector(3, 4, 1) D11 +detector(1, 0, 2) D12 +detector(1, 2, 2) D13 +detector(1, 4, 2) D14 +detector(3, 0, 2) D15 +detector(3, 2, 2) D16 +detector(3, 4, 2) D17 +detector(1, 0, 3) D18 +detector(1, 2, 3) D19 +detector(1, 4, 3) D20 +detector(3, 0, 3) D21 +detector(3, 2, 3) D22 +detector(3, 4, 3) D23 diff --git a/tests/reference_data/dem/circuit_noisy.dem b/tests/reference_data/dem/circuit_noisy.dem new file mode 100644 index 0000000..4e60a74 --- /dev/null +++ b/tests/reference_data/dem/circuit_noisy.dem @@ -0,0 +1,111 @@ +error(0.04551550723348229271) D4 L0 +error(0.07559024781243701974) D5 +error(0.07364716825570899461) D9 +error(0.1039206533100621166) D2 L0 +error(0.04750475684802839965) D19 +error(0.09774069130848460352) D22 L0 +error(0.09522341487820089323) D6 L0 +error(0.1090587020024319509) D21 +error(0.1174505966134559015) D0 L0 +error(0.08997803071302187816) D7 +error(0.04800572942775008928) D20 L0 +error(0.111066201124559491) D23 +error(0.07287127904108854637) D10 L0 +error(0.07849661480645604705) D13 +error(0.09386030132845683827) D14 L0 +error(0.08430965094219844413) D16 L0 +error(0.07574656757873897417) D18 L0 +error(0.08651894856083293395) D8 L0 +error(0.04972247715496095483) D11 +error(0.07739937962679226124) D1 +error(0.05251452846159589127) D3 +error(0.07436704629895860008) D17 +error(0.08694066417869489305) D15 +error(0.04574496555609324638) D12 L0 +error(0.005653928489673998303) D0 D7 +error(5.837840850303477325e-05) D0 D4 +error(0.00217039339827496125) D0 D6 +error(0.02945947303356555302) D0 D3 +error(0.003396950010237709261) D0 D1 +error(0.002912841353224171481) D1 D7 +error(0.006304565824739483126) D1 D5 +error(0.0002694083680992997998) D1 D4 +error(0.00865073365509461123) D2 D6 +error(0.0324920043390831137) D2 D3 +error(0.0001230841508201852008) D3 D7 +error(3.130775328430424054e-07) D3 D6 +error(0.03790345231176561747) D4 D5 +error(0.03391940293960499231) D4 D7 +error(0.002368168964779038266) D4 D10 +error(0.00156331219200867011) D4 D8 +error(0.001051769393903057015) D4 D11 +error(0.002868529500751226813) D5 D9 +error(0.0304051503265641565) D5 D8 +error(0.001741474636418216537) D5 D11 +error(0.002513684493767820438) D6 D7 +error(0.001876040683835789036) D6 D10 +error(0.02996865757262678898) D7 D10 +error(0.0008974611451682545926) D7 D11 +error(0.0279843737550020677) D8 D11 +error(0.002172693153775329122) D8 D14 +error(0.007929363945550937931) D8 D15 +error(0.004461788972671909548) D8 D9 +error(0.001291847233677145823) D8 D12 +error(0.004175763292184775377) D9 D15 +error(6.645559185447513784e-06) D9 D12 +error(0.006808681993422827095) D9 D13 +error(0.008048770793723514227) D10 D14 +error(0.03195751086460879575) D10 D11 +error(0.000948262632603891209) D11 D15 +error(0.001059227897313053113) D11 D14 +error(0.03852901555238519293) D12 D13 +error(0.002805042152225600827) D12 D16 +error(0.0006605574154216475868) D12 D19 +error(0.03267648658682631435) D12 D15 +error(0.001967333588214215112) D12 D18 +error(0.0294716091300658567) D13 D16 +error(0.002332912100089123975) D13 D17 +error(0.001170864241598179589) D13 D19 +error(0.002125953100636179816) D14 D18 +error(0.003335912259372852962) D14 D15 +error(0.02663162929864509865) D15 D18 +error(0.002053064469357823718) D15 D19 +error(0.02849572252441406883) D16 D19 +error(0.003458693686989977589) D16 D17 +error(0.008068947959818884019) D16 D23 +error(0.002119128695513561311) D16 D20 +error(0.002235768312187413898) D16 D22 +error(0.006330654381463907132) D17 D21 +error(0.004357448648419359749) D17 D23 +error(0.0001662190052149625785) D17 D20 +error(0.03166821612240017236) D18 D19 +error(0.007292298572883826324) D18 D22 +error(0.0002646180010398846427) D19 D22 +error(0.001201147147274761462) D19 D23 +error(0.03732508255785305096) D20 D21 +error(0.03377131332412736109) D20 D23 +error(0.003070810256326939047) D22 D23 +detector(4, 7, 0) D0 +detector(4, 9, 0) D1 +detector(6, 5, 0) D2 +detector(6, 7, 0) D3 +detector(4, 7, 1) D4 +detector(4, 9, 1) D5 +detector(6, 5, 1) D6 +detector(6, 7, 1) D7 +detector(4, 7, 2) D8 +detector(4, 9, 2) D9 +detector(6, 5, 2) D10 +detector(6, 7, 2) D11 +detector(4, 7, 3) D12 +detector(4, 9, 3) D13 +detector(6, 5, 3) D14 +detector(6, 7, 3) D15 +detector(4, 7, 4) D16 +detector(4, 9, 4) D17 +detector(6, 5, 4) D18 +detector(6, 7, 4) D19 +detector(4, 7, 5) D20 +detector(4, 9, 5) D21 +detector(6, 5, 5) D22 +detector(6, 7, 5) D23 diff --git a/tests/reference_data/dem/circuit_noisy_2_observables.dem b/tests/reference_data/dem/circuit_noisy_2_observables.dem new file mode 100644 index 0000000..b261897 --- /dev/null +++ b/tests/reference_data/dem/circuit_noisy_2_observables.dem @@ -0,0 +1,111 @@ +error(0.04551550723348229271) D4 L0 L1 +error(0.07559024781243701974) D5 +error(0.07364716825570899461) D9 +error(0.1039206533100621166) D2 L0 L1 +error(0.04750475684802839965) D19 +error(0.09774069130848460352) D22 L0 L1 +error(0.09522341487820089323) D6 L0 L1 +error(0.1090587020024319509) D21 +error(0.1174505966134559015) D0 L0 L1 +error(0.08997803071302187816) D7 +error(0.04800572942775008928) D20 L0 L1 +error(0.111066201124559491) D23 +error(0.07287127904108854637) D10 L0 L1 +error(0.07849661480645604705) D13 +error(0.09386030132845683827) D14 L0 L1 +error(0.08430965094219844413) D16 L0 L1 +error(0.07574656757873897417) D18 L0 L1 +error(0.08651894856083293395) D8 L0 L1 +error(0.04972247715496095483) D11 +error(0.07739937962679226124) D1 +error(0.05251452846159589127) D3 +error(0.07436704629895860008) D17 +error(0.08694066417869489305) D15 +error(0.04574496555609324638) D12 L0 L1 +error(0.005653928489673998303) D0 D7 +error(5.837840850303477325e-05) D0 D4 +error(0.00217039339827496125) D0 D6 +error(0.02945947303356555302) D0 D3 +error(0.003396950010237709261) D0 D1 +error(0.002912841353224171481) D1 D7 +error(0.006304565824739483126) D1 D5 +error(0.0002694083680992997998) D1 D4 +error(0.00865073365509461123) D2 D6 +error(0.0324920043390831137) D2 D3 +error(0.0001230841508201852008) D3 D7 +error(3.130775328430424054e-07) D3 D6 +error(0.03790345231176561747) D4 D5 +error(0.03391940293960499231) D4 D7 +error(0.002368168964779038266) D4 D10 +error(0.00156331219200867011) D4 D8 +error(0.001051769393903057015) D4 D11 +error(0.002868529500751226813) D5 D9 +error(0.0304051503265641565) D5 D8 +error(0.001741474636418216537) D5 D11 +error(0.002513684493767820438) D6 D7 +error(0.001876040683835789036) D6 D10 +error(0.02996865757262678898) D7 D10 +error(0.0008974611451682545926) D7 D11 +error(0.0279843737550020677) D8 D11 +error(0.002172693153775329122) D8 D14 +error(0.007929363945550937931) D8 D15 +error(0.004461788972671909548) D8 D9 +error(0.001291847233677145823) D8 D12 +error(0.004175763292184775377) D9 D15 +error(6.645559185447513784e-06) D9 D12 +error(0.006808681993422827095) D9 D13 +error(0.008048770793723514227) D10 D14 +error(0.03195751086460879575) D10 D11 +error(0.000948262632603891209) D11 D15 +error(0.001059227897313053113) D11 D14 +error(0.03852901555238519293) D12 D13 +error(0.002805042152225600827) D12 D16 +error(0.0006605574154216475868) D12 D19 +error(0.03267648658682631435) D12 D15 +error(0.001967333588214215112) D12 D18 +error(0.0294716091300658567) D13 D16 +error(0.002332912100089123975) D13 D17 +error(0.001170864241598179589) D13 D19 +error(0.002125953100636179816) D14 D18 +error(0.003335912259372852962) D14 D15 +error(0.02663162929864509865) D15 D18 +error(0.002053064469357823718) D15 D19 +error(0.02849572252441406883) D16 D19 +error(0.003458693686989977589) D16 D17 +error(0.008068947959818884019) D16 D23 +error(0.002119128695513561311) D16 D20 +error(0.002235768312187413898) D16 D22 +error(0.006330654381463907132) D17 D21 +error(0.004357448648419359749) D17 D23 +error(0.0001662190052149625785) D17 D20 +error(0.03166821612240017236) D18 D19 +error(0.007292298572883826324) D18 D22 +error(0.0002646180010398846427) D19 D22 +error(0.001201147147274761462) D19 D23 +error(0.03732508255785305096) D20 D21 +error(0.03377131332412736109) D20 D23 +error(0.003070810256326939047) D22 D23 +detector(4, 7, 0) D0 +detector(4, 9, 0) D1 +detector(6, 5, 0) D2 +detector(6, 7, 0) D3 +detector(4, 7, 1) D4 +detector(4, 9, 1) D5 +detector(6, 5, 1) D6 +detector(6, 7, 1) D7 +detector(4, 7, 2) D8 +detector(4, 9, 2) D9 +detector(6, 5, 2) D10 +detector(6, 7, 2) D11 +detector(4, 7, 3) D12 +detector(4, 9, 3) D13 +detector(6, 5, 3) D14 +detector(6, 7, 3) D15 +detector(4, 7, 4) D16 +detector(4, 9, 4) D17 +detector(6, 5, 4) D18 +detector(6, 7, 4) D19 +detector(4, 7, 5) D20 +detector(4, 9, 5) D21 +detector(6, 5, 5) D22 +detector(6, 7, 5) D23 diff --git a/tests/reference_data/dem/unobservable_logical_rotated_mem_z_d3_r3.dem b/tests/reference_data/dem/unobservable_logical_rotated_mem_z_d3_r3.dem new file mode 100644 index 0000000..3da6b8a --- /dev/null +++ b/tests/reference_data/dem/unobservable_logical_rotated_mem_z_d3_r3.dem @@ -0,0 +1,13 @@ +error(0.005731712759107312517) D4 +error(0.005125248374863214905) D7 +error(0.005731712759107332467) D0 D4 +error(0.005125248374863278222) D3 D7 +detector(2, 0, 1) D0 +detector(2, 4, 1) D1 +detector(4, 2, 1) D2 +detector(4, 6, 1) D3 +detector(2, 0, 2) D4 +detector(2, 4, 2) D5 +detector(4, 2, 2) D6 +detector(4, 6, 2) D7 +logical_observable L0 diff --git a/tests/reference_data/stim/circuit_lattice_surgery_5x5_1.0e-03.stim b/tests/reference_data/stim/circuit_lattice_surgery_5x5_1.0e-03.stim new file mode 100644 index 0000000..b336643 --- /dev/null +++ b/tests/reference_data/stim/circuit_lattice_surgery_5x5_1.0e-03.stim @@ -0,0 +1,676 @@ +QUBIT_COORDS(12, 4) 0 +QUBIT_COORDS(4, 0) 1 +QUBIT_COORDS(34, 10) 2 +QUBIT_COORDS(5, 1) 3 +QUBIT_COORDS(8, 0) 4 +QUBIT_COORDS(17, 3) 5 +QUBIT_COORDS(19, 9) 6 +QUBIT_COORDS(10, 6) 7 +QUBIT_COORDS(11, 5) 8 +QUBIT_COORDS(2, 2) 9 +QUBIT_COORDS(24, 8) 10 +QUBIT_COORDS(15, 5) 11 +QUBIT_COORDS(6, 2) 12 +QUBIT_COORDS(40, 4) 13 +QUBIT_COORDS(7, 1) 14 +QUBIT_COORDS(18, 10) 15 +QUBIT_COORDS(21, 9) 16 +QUBIT_COORDS(4, 2) 17 +QUBIT_COORDS(36, 0) 18 +QUBIT_COORDS(22, 10) 19 +QUBIT_COORDS(5, 3) 20 +QUBIT_COORDS(8, 2) 21 +QUBIT_COORDS(42, 4) 22 +QUBIT_COORDS(30, 2) 23 +QUBIT_COORDS(17, 5) 24 +QUBIT_COORDS(9, 1) 25 +QUBIT_COORDS(11, 7) 26 +QUBIT_COORDS(2, 4) 27 +QUBIT_COORDS(35, 1) 28 +QUBIT_COORDS(13, 1) 29 +QUBIT_COORDS(15, 7) 30 +QUBIT_COORDS(6, 4) 31 +QUBIT_COORDS(40, 6) 32 +QUBIT_COORDS(7, 3) 33 +QUBIT_COORDS(16, 6) 34 +QUBIT_COORDS(36, 2) 35 +QUBIT_COORDS(37, 1) 36 +QUBIT_COORDS(14, 8) 37 +QUBIT_COORDS(5, 5) 38 +QUBIT_COORDS(8, 4) 39 +QUBIT_COORDS(30, 4) 40 +QUBIT_COORDS(17, 7) 41 +QUBIT_COORDS(9, 3) 42 +QUBIT_COORDS(41, 1) 43 +QUBIT_COORDS(11, 9) 44 +QUBIT_COORDS(35, 3) 45 +QUBIT_COORDS(38, 2) 46 +QUBIT_COORDS(13, 3) 47 +QUBIT_COORDS(15, 9) 48 +QUBIT_COORDS(6, 6) 49 +QUBIT_COORDS(16, 8) 50 +QUBIT_COORDS(7, 5) 51 +QUBIT_COORDS(39, 3) 52 +QUBIT_COORDS(20, 8) 53 +QUBIT_COORDS(36, 4) 54 +QUBIT_COORDS(27, 1) 55 +QUBIT_COORDS(3, 1) 56 +QUBIT_COORDS(37, 3) 57 +QUBIT_COORDS(28, 0) 58 +QUBIT_COORDS(14, 10) 59 +QUBIT_COORDS(5, 7) 60 +QUBIT_COORDS(30, 6) 61 +QUBIT_COORDS(17, 9) 62 +QUBIT_COORDS(9, 5) 63 +QUBIT_COORDS(0, 2) 64 +QUBIT_COORDS(41, 3) 65 +QUBIT_COORDS(32, 0) 66 +QUBIT_COORDS(35, 5) 67 +QUBIT_COORDS(38, 4) 68 +QUBIT_COORDS(26, 2) 69 +QUBIT_COORDS(1, 3) 70 +QUBIT_COORDS(13, 5) 71 +QUBIT_COORDS(7, 7) 72 +QUBIT_COORDS(39, 5) 73 +QUBIT_COORDS(31, 1) 74 +QUBIT_COORDS(36, 6) 75 +QUBIT_COORDS(12, 6) 76 +QUBIT_COORDS(3, 3) 77 +QUBIT_COORDS(37, 5) 78 +QUBIT_COORDS(28, 2) 79 +QUBIT_COORDS(5, 9) 80 +QUBIT_COORDS(9, 7) 81 +QUBIT_COORDS(41, 5) 82 +QUBIT_COORDS(32, 2) 83 +QUBIT_COORDS(33, 1) 84 +QUBIT_COORDS(10, 8) 85 +QUBIT_COORDS(35, 7) 86 +QUBIT_COORDS(26, 4) 87 +QUBIT_COORDS(1, 5) 88 +QUBIT_COORDS(13, 7) 89 +QUBIT_COORDS(7, 9) 90 +QUBIT_COORDS(39, 7) 91 +QUBIT_COORDS(31, 3) 92 +QUBIT_COORDS(34, 2) 93 +QUBIT_COORDS(12, 8) 94 +QUBIT_COORDS(37, 7) 95 +QUBIT_COORDS(3, 5) 96 +QUBIT_COORDS(28, 4) 97 +QUBIT_COORDS(4, 4) 98 +QUBIT_COORDS(9, 9) 99 +QUBIT_COORDS(41, 7) 100 +QUBIT_COORDS(32, 4) 101 +QUBIT_COORDS(33, 3) 102 +QUBIT_COORDS(24, 0) 103 +QUBIT_COORDS(10, 10) 104 +QUBIT_COORDS(1, 7) 105 +QUBIT_COORDS(26, 6) 106 +QUBIT_COORDS(2, 6) 107 +QUBIT_COORDS(35, 9) 108 +QUBIT_COORDS(18, 2) 109 +QUBIT_COORDS(13, 9) 110 +QUBIT_COORDS(39, 9) 111 +QUBIT_COORDS(40, 8) 112 +QUBIT_COORDS(31, 5) 113 +QUBIT_COORDS(34, 4) 114 +QUBIT_COORDS(22, 2) 115 +QUBIT_COORDS(23, 1) 116 +QUBIT_COORDS(3, 7) 117 +QUBIT_COORDS(37, 9) 118 +QUBIT_COORDS(4, 6) 119 +QUBIT_COORDS(41, 9) 120 +QUBIT_COORDS(32, 6) 121 +QUBIT_COORDS(8, 6) 122 +QUBIT_COORDS(33, 5) 123 +QUBIT_COORDS(42, 8) 124 +QUBIT_COORDS(24, 2) 125 +QUBIT_COORDS(25, 1) 126 +QUBIT_COORDS(1, 9) 127 +QUBIT_COORDS(2, 8) 128 +QUBIT_COORDS(18, 4) 129 +QUBIT_COORDS(29, 1) 130 +QUBIT_COORDS(6, 8) 131 +QUBIT_COORDS(31, 7) 132 +QUBIT_COORDS(34, 6) 133 +QUBIT_COORDS(22, 4) 134 +QUBIT_COORDS(23, 3) 135 +QUBIT_COORDS(3, 9) 136 +QUBIT_COORDS(4, 8) 137 +QUBIT_COORDS(27, 3) 138 +QUBIT_COORDS(8, 8) 139 +QUBIT_COORDS(33, 7) 140 +QUBIT_COORDS(30, 8) 141 +QUBIT_COORDS(24, 4) 142 +QUBIT_COORDS(25, 3) 143 +QUBIT_COORDS(16, 0) 144 +QUBIT_COORDS(2, 10) 145 +QUBIT_COORDS(38, 6) 146 +QUBIT_COORDS(29, 3) 147 +QUBIT_COORDS(20, 0) 148 +QUBIT_COORDS(6, 10) 149 +QUBIT_COORDS(31, 9) 150 +QUBIT_COORDS(22, 6) 151 +QUBIT_COORDS(23, 5) 152 +QUBIT_COORDS(14, 2) 153 +QUBIT_COORDS(36, 8) 154 +QUBIT_COORDS(27, 5) 155 +QUBIT_COORDS(19, 1) 156 +QUBIT_COORDS(30, 10) 157 +QUBIT_COORDS(33, 9) 158 +QUBIT_COORDS(24, 6) 159 +QUBIT_COORDS(0, 6) 160 +QUBIT_COORDS(25, 5) 161 +QUBIT_COORDS(16, 2) 162 +QUBIT_COORDS(38, 8) 163 +QUBIT_COORDS(29, 5) 164 +QUBIT_COORDS(20, 2) 165 +QUBIT_COORDS(21, 1) 166 +QUBIT_COORDS(22, 8) 167 +QUBIT_COORDS(23, 7) 168 +QUBIT_COORDS(14, 4) 169 +QUBIT_COORDS(27, 7) 170 +QUBIT_COORDS(28, 6) 171 +QUBIT_COORDS(19, 3) 172 +QUBIT_COORDS(25, 7) 173 +QUBIT_COORDS(16, 4) 174 +QUBIT_COORDS(38, 10) 175 +QUBIT_COORDS(29, 7) 176 +QUBIT_COORDS(26, 8) 177 +QUBIT_COORDS(20, 4) 178 +QUBIT_COORDS(21, 3) 179 +QUBIT_COORDS(12, 0) 180 +QUBIT_COORDS(23, 9) 181 +QUBIT_COORDS(14, 6) 182 +QUBIT_COORDS(27, 9) 183 +QUBIT_COORDS(28, 8) 184 +QUBIT_COORDS(19, 5) 185 +QUBIT_COORDS(10, 2) 186 +QUBIT_COORDS(11, 1) 187 +QUBIT_COORDS(25, 9) 188 +QUBIT_COORDS(32, 8) 189 +QUBIT_COORDS(39, 1) 190 +QUBIT_COORDS(15, 1) 191 +QUBIT_COORDS(40, 0) 192 +QUBIT_COORDS(26, 10) 193 +QUBIT_COORDS(29, 9) 194 +QUBIT_COORDS(20, 6) 195 +QUBIT_COORDS(18, 6) 196 +QUBIT_COORDS(21, 5) 197 +QUBIT_COORDS(12, 2) 198 +QUBIT_COORDS(34, 8) 199 +QUBIT_COORDS(17, 1) 200 +QUBIT_COORDS(19, 7) 201 +QUBIT_COORDS(10, 4) 202 +QUBIT_COORDS(1, 1) 203 +QUBIT_COORDS(11, 3) 204 +QUBIT_COORDS(15, 3) 205 +QUBIT_COORDS(40, 2) 206 +QUBIT_COORDS(18, 8) 207 +QUBIT_COORDS(21, 7) 208 +R 56 117 57 118 3 60 63 65 120 123 70 67 127 14 72 73 77 136 78 20 80 25 81 82 84 140 28 86 88 190 33 90 91 36 95 96 38 42 99 43 100 203 102 158 45 105 108 51 52 111 +TICK +DEPOLARIZE1(0.0001) 56 117 57 118 3 60 63 65 120 123 70 127 67 14 72 73 77 136 78 20 80 25 81 82 84 140 28 86 88 190 33 90 91 36 95 96 38 42 99 43 100 203 102 158 45 105 108 51 52 111 0 1 2 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 21 22 23 24 26 27 29 30 31 32 34 35 37 39 40 41 44 46 47 48 49 50 53 54 55 58 59 61 62 64 66 68 69 71 74 75 76 79 83 85 87 89 92 93 94 97 98 101 103 104 106 107 109 110 112 113 114 115 116 119 121 122 124 125 126 128 129 130 131 132 133 134 135 137 138 139 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +RX 114 1 54 2 119 4 64 121 122 9 124 68 128 12 13 175 131 133 17 18 75 137 21 22 83 139 27 85 145 192 31 32 146 149 93 35 199 98 154 39 202 160 46 107 206 49 163 112 +TICK +DEPOLARIZE1(0.0001) 114 1 54 2 119 4 64 121 122 9 124 68 128 12 13 175 131 133 17 18 75 137 21 22 83 139 27 85 145 192 31 32 146 149 93 35 199 98 154 39 202 160 46 107 206 49 163 112 0 3 5 6 7 8 10 11 14 15 16 19 20 23 24 25 26 28 29 30 33 34 36 37 38 40 41 42 43 44 45 47 48 50 51 52 53 55 56 57 58 59 60 61 62 63 65 66 67 69 70 71 72 73 74 76 77 78 79 80 81 82 84 86 87 88 89 90 91 92 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 113 115 116 117 118 120 123 125 126 127 129 130 132 134 135 136 138 140 141 142 143 144 147 148 150 151 152 153 155 156 157 158 159 161 162 164 165 166 167 168 169 170 171 172 173 174 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 193 194 195 196 197 198 200 201 203 204 205 207 208 +CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 83 102 121 140 +TICK +DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 83 102 121 140 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 22 23 24 25 26 28 29 30 33 34 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 55 56 58 59 61 62 63 66 69 71 72 74 76 77 78 79 80 82 84 85 86 87 88 89 91 92 93 94 97 98 99 101 103 104 106 107 109 110 112 113 115 116 117 118 120 123 124 125 126 127 129 130 132 133 134 135 137 138 139 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 200 201 202 203 204 205 207 208 +CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 +TICK +DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 +DEPOLARIZE1(0.0001) 0 2 5 6 7 8 10 11 14 15 16 17 19 20 21 22 23 24 26 27 28 29 30 31 32 34 35 37 40 41 42 44 47 48 50 51 53 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 73 74 75 76 79 81 83 84 85 87 88 89 90 92 94 95 96 97 100 101 102 103 104 105 106 108 109 110 111 113 114 115 116 119 121 122 123 124 125 126 127 128 129 130 131 132 134 135 136 138 140 141 142 143 144 145 147 148 149 150 151 152 153 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 83 84 121 123 +TICK +DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 83 84 121 123 +DEPOLARIZE1(0.0001) 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 22 23 24 26 28 29 30 34 37 39 40 41 42 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 65 66 67 69 70 71 73 74 76 79 80 81 85 87 89 90 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 115 116 118 120 124 125 126 127 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 200 201 202 204 205 207 208 +CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 +TICK +DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 +DEPOLARIZE1(0.0001) 0 2 3 5 6 7 8 10 11 15 16 17 19 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 47 48 50 52 53 55 58 59 61 62 63 64 65 66 68 69 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 91 92 94 97 99 100 101 103 104 106 109 110 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 138 141 142 143 144 145 147 148 149 150 151 152 153 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 191 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 +TICK +DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 23 24 25 26 28 29 30 34 36 37 39 40 41 42 43 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 64 65 66 67 69 70 71 73 74 76 79 81 83 84 87 89 90 92 93 94 95 96 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 115 116 121 125 126 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 200 201 203 204 205 207 208 +CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 2 108 175 111 +TICK +DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 2 108 175 111 +DEPOLARIZE1(0.0001) 0 1 3 4 5 6 7 8 10 11 15 16 17 18 19 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 40 41 43 44 45 47 48 50 52 53 55 58 59 61 62 63 64 66 68 69 70 71 72 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 91 92 94 97 99 101 102 103 104 105 106 109 110 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 138 140 141 142 143 144 147 148 150 151 152 153 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 176 177 178 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 +TICK +DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 18 19 23 24 25 26 29 30 33 34 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 55 58 59 61 62 63 64 66 69 71 72 74 76 77 78 79 80 82 83 84 86 87 88 89 90 91 92 93 94 97 98 99 101 103 104 106 107 108 109 110 111 112 113 115 116 117 118 120 121 123 125 126 127 129 130 132 133 134 135 136 137 138 139 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 200 201 203 204 205 207 208 +CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 2 158 175 118 +TICK +DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 2 158 175 118 +DEPOLARIZE1(0.0001) 0 1 4 5 6 7 8 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 37 40 41 42 43 44 47 48 50 51 53 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 79 81 82 83 85 87 89 90 92 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 113 114 115 116 119 120 121 122 124 125 126 128 129 130 131 132 134 135 136 138 140 141 142 143 144 147 148 150 151 152 153 155 156 157 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +MX(0.001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 114 199 35 75 68 163 206 32 124 22 83 121 93 133 54 154 46 146 13 112 2 175 192 18 +TICK +DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 114 199 35 75 68 163 206 32 124 22 83 121 93 133 54 154 46 146 13 112 2 175 192 18 0 3 5 6 7 8 10 11 14 15 16 19 20 23 24 25 26 28 29 30 33 34 36 37 38 40 41 42 43 44 45 47 48 50 51 52 53 55 56 57 58 59 60 61 62 63 65 66 67 69 70 71 72 73 74 76 77 78 79 80 81 82 84 86 87 88 89 90 91 92 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 113 115 116 117 118 120 123 125 126 127 129 130 132 134 135 136 138 140 141 142 143 144 147 148 150 151 152 153 155 156 157 158 159 161 162 164 165 166 167 168 169 170 171 172 173 174 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 193 194 195 196 197 198 200 201 203 204 205 207 208 +DETECTOR(2, 2, 0) rec[-36] +DETECTOR(2, 6, 0) rec[-35] +DETECTOR(2, 10, 0) rec[-28] +DETECTOR(4, 0, 0) rec[-25] +DETECTOR(4, 4, 0) rec[-34] +DETECTOR(4, 8, 0) rec[-33] +DETECTOR(6, 2, 0) rec[-32] +DETECTOR(6, 6, 0) rec[-31] +DETECTOR(6, 10, 0) rec[-27] +DETECTOR(8, 0, 0) rec[-26] +DETECTOR(8, 4, 0) rec[-30] +DETECTOR(8, 8, 0) rec[-29] +DETECTOR(34, 2, 0) rec[-12] +DETECTOR(34, 6, 0) rec[-11] +DETECTOR(34, 10, 0) rec[-4] +DETECTOR(36, 0, 0) rec[-1] +DETECTOR(36, 4, 0) rec[-10] +DETECTOR(36, 8, 0) rec[-9] +DETECTOR(38, 2, 0) rec[-8] +DETECTOR(38, 6, 0) rec[-7] +DETECTOR(38, 10, 0) rec[-3] +DETECTOR(40, 0, 0) rec[-2] +DETECTOR(40, 4, 0) rec[-6] +DETECTOR(40, 8, 0) rec[-5] +SHIFT_COORDS(0, 0, 1) +REPEAT 2 { + RX 114 1 54 2 119 4 64 121 122 9 124 68 128 12 13 175 131 133 17 18 75 137 21 22 83 139 27 85 145 192 31 32 146 149 93 35 199 98 154 39 202 160 46 107 206 49 163 112 + TICK + DEPOLARIZE1(0.0001) 114 1 54 2 119 4 64 121 122 9 124 68 128 12 13 175 131 133 17 18 75 137 21 22 83 139 27 85 145 192 31 32 146 149 93 35 199 98 154 39 202 160 46 107 206 49 163 112 117 118 3 120 123 127 14 136 20 25 140 28 33 36 38 42 43 158 45 51 52 57 56 60 63 65 70 67 72 73 77 78 80 81 82 84 86 88 190 90 91 96 95 99 100 203 102 105 108 111 + CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 83 102 121 140 + TICK + DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 83 102 121 140 + DEPOLARIZE1(0.0001) 1 2 117 118 3 4 120 9 124 123 127 12 13 14 133 18 137 22 25 139 28 145 146 33 149 36 154 39 38 43 158 45 46 49 52 54 56 63 175 72 77 78 80 82 84 85 86 88 190 192 91 93 98 99 202 203 107 112 + CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 + TICK + DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 + DEPOLARIZE1(0.0001) 114 2 119 121 122 124 123 127 128 14 131 17 136 20 21 22 27 140 28 145 31 32 149 35 42 158 160 163 51 57 56 60 64 65 70 68 67 175 73 75 81 83 84 85 88 190 90 199 96 95 202 100 203 102 105 108 206 111 + CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 83 84 121 123 + TICK + DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 83 84 121 123 + DEPOLARIZE1(0.0001) 1 2 118 4 120 9 124 127 12 13 14 133 18 136 137 20 22 139 140 28 145 146 149 154 39 42 158 46 49 51 54 57 56 60 65 70 67 175 73 80 81 85 190 192 90 93 96 98 95 99 202 100 102 105 108 107 111 112 + CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 + TICK + DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 + DEPOLARIZE1(0.0001) 114 2 117 119 118 3 120 121 122 124 123 127 128 131 17 21 22 25 27 145 31 32 33 149 35 36 38 42 43 158 160 45 163 52 63 64 65 68 175 72 75 77 78 80 81 82 83 84 85 86 88 91 199 99 202 100 203 206 + CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 + TICK + DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 + DEPOLARIZE1(0.0001) 1 2 3 4 121 9 12 13 14 133 18 136 137 20 25 139 140 28 145 146 149 36 154 39 42 43 160 46 49 51 54 57 56 60 64 65 70 67 175 73 81 83 84 190 192 90 93 96 98 95 100 203 102 105 108 107 111 112 + CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 2 108 175 111 + TICK + DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 2 108 175 111 + DEPOLARIZE1(0.0001) 114 1 117 119 118 3 4 120 121 122 124 123 127 128 131 17 18 21 22 25 27 140 31 32 33 35 36 38 43 158 160 45 163 52 63 64 70 68 72 75 77 78 80 82 83 84 85 86 88 192 91 199 99 202 203 102 105 206 + CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 + TICK + DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 + DEPOLARIZE1(0.0001) 1 2 117 118 3 4 120 121 9 123 127 12 13 133 18 136 137 25 139 145 146 33 149 36 154 39 38 43 158 160 45 46 49 52 54 63 64 175 72 77 78 80 82 83 84 86 88 192 90 91 93 98 99 203 108 107 111 112 + CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 2 158 175 118 + TICK + DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 2 158 175 118 + DEPOLARIZE1(0.0001) 114 1 119 4 120 121 122 124 128 14 131 17 18 136 20 21 22 25 27 140 28 31 32 35 42 43 160 163 51 57 56 60 63 64 65 70 68 67 73 75 81 82 83 85 190 192 90 199 96 95 99 202 100 102 105 108 206 111 + MX(0.001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 114 199 35 75 68 163 206 32 124 22 83 121 93 133 54 154 46 146 13 112 2 175 192 18 + DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 114 199 35 75 68 163 206 32 124 22 83 121 93 133 54 154 46 146 13 112 2 175 192 18 117 118 3 120 123 127 14 136 20 25 140 28 33 36 38 42 43 158 45 51 52 57 56 60 63 65 70 67 72 73 77 78 80 81 82 84 86 88 190 90 91 96 95 99 100 203 102 105 108 111 + DETECTOR(2, 2, 0) rec[-36] rec[-84] + DETECTOR(2, 6, 0) rec[-35] rec[-83] + DETECTOR(2, 10, 0) rec[-76] rec[-28] + DETECTOR(4, 0, 0) rec[-25] rec[-73] + DETECTOR(4, 4, 0) rec[-34] rec[-82] + DETECTOR(4, 8, 0) rec[-33] rec[-81] + DETECTOR(6, 2, 0) rec[-32] rec[-80] + DETECTOR(6, 6, 0) rec[-31] rec[-79] + DETECTOR(6, 10, 0) rec[-27] rec[-75] + DETECTOR(8, 0, 0) rec[-74] rec[-26] + DETECTOR(8, 4, 0) rec[-78] rec[-30] + DETECTOR(8, 8, 0) rec[-29] rec[-77] + DETECTOR(34, 2, 0) rec[-60] rec[-12] + DETECTOR(34, 6, 0) rec[-11] rec[-59] + DETECTOR(34, 10, 0) rec[-52] rec[-4] + DETECTOR(36, 0, 0) rec[-1] rec[-49] + DETECTOR(36, 4, 0) rec[-58] rec[-10] + DETECTOR(36, 8, 0) rec[-9] rec[-57] + DETECTOR(38, 2, 0) rec[-8] rec[-56] + DETECTOR(38, 6, 0) rec[-7] rec[-55] + DETECTOR(38, 10, 0) rec[-3] rec[-51] + DETECTOR(40, 0, 0) rec[-50] rec[-2] + DETECTOR(40, 4, 0) rec[-54] rec[-6] + DETECTOR(40, 8, 0) rec[-5] rec[-53] + SHIFT_COORDS(0, 0, 1) +} +RX 0 1 2 5 4 6 7 8 9 10 11 12 13 15 16 17 18 19 24 21 22 23 26 27 29 30 31 34 32 35 37 41 40 39 44 47 46 48 49 50 53 54 55 58 59 62 61 64 66 71 68 69 74 75 76 79 83 85 89 87 92 93 94 97 98 101 103 104 110 106 107 109 112 113 114 115 116 119 121 122 124 125 126 128 129 130 131 132 134 133 135 137 138 141 139 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 177 176 178 175 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +TICK +DEPOLARIZE1(0.0001) 0 1 2 5 4 6 7 8 9 10 11 12 13 15 16 17 18 19 24 21 22 23 26 27 29 30 31 34 32 35 37 41 40 39 44 47 46 48 49 50 53 54 55 58 59 62 61 64 66 71 68 69 74 75 76 79 83 85 89 87 92 93 94 97 98 101 103 104 110 106 107 109 112 113 114 115 116 119 121 122 124 125 126 128 129 130 131 132 134 133 135 137 138 141 139 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 177 176 178 175 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 3 14 20 25 28 33 36 38 42 43 45 51 52 56 57 60 63 65 67 70 72 73 77 78 80 81 82 84 86 88 90 91 95 96 99 100 102 105 108 111 117 118 120 123 127 136 140 158 190 203 +CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 202 8 85 44 198 47 76 89 169 11 37 48 162 5 34 41 129 185 207 6 165 179 195 208 134 152 167 181 125 143 159 173 87 155 177 183 79 147 171 176 40 113 141 150 83 102 121 140 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 64 70 160 105 +TICK +DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 202 8 85 44 198 47 76 89 169 11 37 48 162 5 34 41 129 185 207 6 165 179 195 208 134 152 167 181 125 143 159 173 87 155 177 183 79 147 171 176 40 113 141 150 83 102 121 140 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 64 70 160 105 +DEPOLARIZE1(0.0001) 0 1 2 3 4 7 9 10 12 13 14 15 16 18 19 22 23 24 25 26 28 29 30 33 36 38 39 43 45 46 49 50 52 53 54 55 56 58 59 61 62 63 66 69 71 72 74 77 78 80 82 84 86 88 91 92 93 94 97 98 99 101 103 104 106 107 109 110 112 115 116 117 118 120 123 124 126 127 130 132 133 135 137 138 139 142 144 145 146 148 149 151 153 154 156 157 158 161 164 166 168 170 172 174 175 178 180 182 184 186 187 188 189 190 191 192 193 194 196 197 200 201 203 204 205 +CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 186 204 7 26 0 71 94 110 153 205 182 30 174 24 50 62 109 172 196 201 178 197 53 16 115 135 151 168 142 161 10 188 69 138 106 170 97 164 184 194 23 92 61 132 101 123 189 158 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 66 84 58 130 103 126 148 166 144 200 180 29 4 25 1 3 +TICK +DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 186 204 7 26 0 71 94 110 153 205 182 30 174 24 50 62 109 172 196 201 178 197 53 16 115 135 151 168 142 161 10 188 69 138 106 170 97 164 184 194 23 92 61 132 101 123 189 158 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 66 84 58 130 103 126 148 166 144 200 180 29 4 25 1 3 +DEPOLARIZE1(0.0001) 2 5 6 8 11 14 15 17 19 20 21 22 27 28 31 32 34 35 37 40 41 42 44 47 48 51 55 56 57 59 60 64 65 67 68 70 73 74 75 76 79 81 83 85 87 88 89 90 95 96 100 102 104 105 108 111 113 114 116 119 121 122 124 125 127 128 129 131 134 136 140 141 143 145 147 149 150 152 155 156 157 159 160 162 163 165 167 169 171 173 175 176 177 179 181 183 185 187 190 191 193 195 198 199 202 203 206 207 208 +CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 202 204 85 26 198 29 76 71 169 205 37 30 162 200 34 24 129 172 207 201 165 166 195 197 134 135 167 168 125 126 159 161 87 138 177 170 79 130 171 164 40 92 141 132 83 84 121 123 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 64 203 160 88 +TICK +DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 202 204 85 26 198 29 76 71 169 205 37 30 162 200 34 24 129 172 207 201 165 166 195 197 134 135 167 168 125 126 159 161 87 138 177 170 79 130 171 164 40 92 141 132 83 84 121 123 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 64 203 160 88 +DEPOLARIZE1(0.0001) 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 22 23 28 39 41 42 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 65 66 67 69 70 73 74 80 81 89 90 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 115 116 118 120 124 127 133 136 137 139 140 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 173 174 175 176 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 196 208 +CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 186 42 7 81 0 8 94 44 153 47 182 89 174 11 50 48 109 5 196 41 178 185 53 6 115 179 151 208 142 152 10 181 69 143 106 173 97 155 184 183 23 147 61 176 101 113 189 150 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 66 74 58 55 103 116 148 156 144 191 180 187 4 14 1 56 +TICK +DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 186 42 7 81 0 8 94 44 153 47 182 89 174 11 50 48 109 5 196 41 178 185 53 6 115 179 151 208 142 152 10 181 69 143 106 173 97 155 184 183 23 147 61 176 101 113 189 150 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 66 74 58 55 103 116 148 156 144 191 180 187 4 14 1 56 +DEPOLARIZE1(0.0001) 2 3 15 16 17 19 21 22 24 25 26 27 29 30 31 32 33 34 35 36 37 38 40 43 45 52 59 62 63 64 65 68 71 72 75 76 77 78 79 80 82 83 84 85 86 87 88 91 92 99 100 104 110 114 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 138 141 145 149 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 175 177 188 193 194 195 197 198 199 200 201 202 203 204 205 206 207 +CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 202 63 85 99 198 204 76 26 169 71 37 110 162 205 34 30 129 24 207 62 165 172 195 201 134 197 167 16 125 135 159 168 87 161 177 188 79 138 171 170 40 164 141 194 83 92 121 132 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 +TICK +DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 202 63 85 99 198 204 76 26 169 71 37 110 162 205 34 30 129 24 207 62 165 172 195 201 134 197 167 16 125 135 159 168 87 161 177 188 79 138 171 170 40 164 141 194 83 92 121 132 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18 19 20 23 25 28 29 36 39 41 42 43 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 64 65 66 67 69 70 73 74 81 84 89 90 93 94 95 96 97 98 100 101 102 103 104 105 106 107 108 109 111 112 113 115 116 126 130 133 136 137 139 140 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 160 166 173 174 175 176 178 179 180 181 182 183 184 185 186 187 189 190 191 192 193 196 200 203 208 +CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 186 187 7 8 0 47 94 89 153 191 182 11 174 5 50 41 109 156 196 185 178 179 53 208 115 116 151 152 142 143 10 173 69 55 106 155 97 147 184 176 23 74 61 113 101 102 189 140 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 145 136 149 90 104 44 59 48 15 6 19 181 193 183 157 150 2 108 175 111 +TICK +DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 186 187 7 8 0 47 94 89 153 191 182 11 174 5 50 41 109 156 196 185 178 179 53 208 115 116 151 152 142 143 10 173 69 55 106 155 97 147 184 176 23 74 61 113 101 102 189 140 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 145 136 149 90 104 44 59 48 15 6 19 181 193 183 157 150 2 108 175 111 +DEPOLARIZE1(0.0001) 1 3 4 16 17 18 21 22 24 25 26 27 29 30 31 32 33 34 35 36 37 38 40 43 45 52 58 62 63 64 66 68 70 71 72 75 76 77 78 79 80 82 83 84 85 86 87 88 91 92 99 103 105 110 114 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 138 141 144 148 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 177 180 188 192 194 195 197 198 199 200 201 202 203 204 205 206 207 +CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 202 42 85 81 198 187 76 8 169 47 37 89 162 191 34 11 129 5 207 41 165 156 195 185 134 179 167 208 125 116 159 152 87 143 177 173 79 55 171 155 40 147 141 176 83 74 121 113 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 +TICK +DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 202 42 85 81 198 187 76 8 169 47 37 89 162 191 34 11 129 5 207 41 165 156 195 185 134 179 167 208 125 116 159 152 87 143 177 173 79 55 171 155 40 147 141 176 83 74 121 113 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 +DEPOLARIZE1(0.0001) 0 1 2 3 4 6 7 9 10 12 13 15 16 18 19 23 24 25 26 29 30 33 36 38 39 43 44 45 46 48 49 50 52 53 54 58 59 61 62 63 64 66 69 71 72 77 78 80 82 84 86 88 90 91 92 93 94 97 98 99 101 103 104 106 107 108 109 110 111 112 115 117 118 120 123 126 127 130 132 133 135 136 137 138 139 142 144 145 146 148 149 150 151 153 154 157 158 160 161 164 166 168 170 172 174 175 178 180 181 182 183 184 186 188 189 192 193 194 196 197 200 201 203 204 205 +CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 186 25 7 63 0 204 94 26 153 29 182 71 174 205 50 30 109 200 196 24 178 172 53 201 115 166 151 197 142 135 10 168 69 126 106 161 97 138 184 170 23 130 61 164 101 92 189 132 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 145 127 149 80 104 99 59 110 15 62 19 16 193 188 157 194 2 158 175 118 +TICK +DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 186 25 7 63 0 204 94 26 153 29 182 71 174 205 50 30 109 200 196 24 178 172 53 201 115 166 151 197 142 135 10 168 69 126 106 161 97 138 184 170 23 130 61 164 101 92 189 132 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 145 127 149 80 104 99 59 110 15 62 19 16 193 188 157 194 2 158 175 118 +DEPOLARIZE1(0.0001) 1 4 5 6 8 11 14 17 18 20 21 22 27 28 31 32 34 35 37 40 41 42 43 44 47 48 51 55 56 57 58 60 64 65 66 67 68 70 73 74 75 76 79 81 82 83 85 87 89 90 95 96 100 102 103 105 108 111 113 114 116 119 120 121 122 124 125 128 129 131 134 136 140 141 143 144 147 148 150 152 155 156 159 160 162 163 165 167 169 171 173 176 177 179 180 181 183 185 187 190 191 192 195 198 199 202 206 207 208 +MX(0.001) 27 128 17 119 31 131 21 122 202 85 198 76 169 37 162 34 129 207 165 195 134 167 125 159 87 177 79 171 40 141 83 121 114 199 35 75 68 163 206 32 124 22 64 160 9 107 98 137 12 49 39 139 186 7 0 94 153 182 174 50 109 196 178 53 115 151 142 10 69 106 97 184 23 61 101 189 93 133 54 154 46 146 13 112 145 149 104 59 15 19 193 157 2 175 192 18 66 58 103 148 144 180 4 1 +TICK +DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 202 85 198 76 169 37 162 34 129 207 165 195 134 167 125 159 87 177 79 171 40 141 83 121 114 199 35 75 68 163 206 32 124 22 64 160 9 107 98 137 12 49 39 139 186 7 0 94 153 182 174 50 109 196 178 53 115 151 142 10 69 106 97 184 23 61 101 189 93 133 54 154 46 146 13 112 145 149 104 59 15 19 193 157 2 175 192 18 66 58 103 148 144 180 4 1 3 5 6 8 11 14 16 20 24 25 26 28 29 30 33 36 38 41 42 43 44 45 47 48 51 52 55 56 57 60 62 63 65 67 70 71 72 73 74 77 78 80 81 82 84 86 88 89 90 91 92 95 96 99 100 102 105 108 110 111 113 116 117 118 120 123 126 127 130 132 135 136 138 140 143 147 150 152 155 156 158 161 164 166 168 170 172 173 176 179 181 183 185 187 188 190 191 194 197 200 201 203 204 205 208 +OBSERVABLE_INCLUDE(0) rec[-52] rec[-51] rec[-50] rec[-49] rec[-48] rec[-47] rec[-46] rec[-45] rec[-44] rec[-43] rec[-42] rec[-41] rec[-40] rec[-39] rec[-38] rec[-37] rec[-36] rec[-35] rec[-34] rec[-33] rec[-32] rec[-31] rec[-30] rec[-29] rec[-18] rec[-17] rec[-16] rec[-15] rec[-14] rec[-13] rec[-8] rec[-7] rec[-6] rec[-5] rec[-4] rec[-3] +DETECTOR(2, 2, 0) rec[-60] rec[-140] +DETECTOR(2, 6, 0) rec[-59] rec[-139] +DETECTOR(2, 10, 0) rec[-132] rec[-20] +DETECTOR(4, 0, 0) rec[-1] rec[-129] +DETECTOR(4, 4, 0) rec[-58] rec[-138] +DETECTOR(4, 8, 0) rec[-57] rec[-137] +DETECTOR(6, 2, 0) rec[-56] rec[-136] +DETECTOR(6, 6, 0) rec[-55] rec[-135] +DETECTOR(6, 10, 0) rec[-19] rec[-131] +DETECTOR(8, 0, 0) rec[-130] rec[-2] +DETECTOR(8, 4, 0) rec[-54] rec[-134] +DETECTOR(8, 8, 0) rec[-53] rec[-133] +DETECTOR(34, 2, 0) rec[-116] rec[-28] +DETECTOR(34, 6, 0) rec[-27] rec[-115] +DETECTOR(34, 10, 0) rec[-108] rec[-12] +DETECTOR(36, 0, 0) rec[-9] rec[-105] +DETECTOR(36, 4, 0) rec[-114] rec[-26] +DETECTOR(36, 8, 0) rec[-25] rec[-113] +DETECTOR(38, 2, 0) rec[-24] rec[-112] +DETECTOR(38, 6, 0) rec[-23] rec[-111] +DETECTOR(38, 10, 0) rec[-11] rec[-107] +DETECTOR(40, 0, 0) rec[-106] rec[-10] +DETECTOR(40, 4, 0) rec[-22] rec[-110] +DETECTOR(40, 8, 0) rec[-21] rec[-109] +SHIFT_COORDS(0, 0, 1) +REPEAT 4 { + RX 0 1 2 4 7 9 10 12 13 15 17 18 19 22 21 23 27 31 34 32 35 37 40 39 46 49 50 53 54 58 59 61 64 66 68 69 75 76 79 83 85 87 93 94 97 98 101 103 104 106 107 109 112 114 115 119 121 122 124 125 128 129 131 134 133 137 141 139 142 144 145 146 148 149 151 153 154 157 159 160 162 163 165 167 169 171 174 177 175 178 180 182 184 186 189 192 193 195 196 198 199 202 206 207 + TICK + DEPOLARIZE1(0.0001) 0 1 2 4 7 9 10 12 13 15 17 18 19 21 22 23 27 31 34 32 35 37 40 39 46 49 50 53 54 58 59 61 64 66 68 69 75 76 79 83 85 87 93 94 97 98 101 103 104 106 107 109 112 114 115 119 121 122 124 125 128 129 131 134 133 137 141 139 142 144 145 146 148 149 151 153 154 157 159 160 162 163 165 167 169 171 174 177 175 178 180 182 184 186 189 192 193 195 196 198 199 202 206 207 5 3 6 8 11 14 16 20 24 25 26 29 28 30 33 36 41 38 42 43 44 47 45 48 51 52 55 57 56 60 62 63 65 67 70 71 72 73 74 77 78 80 81 82 84 89 86 88 90 91 92 96 95 99 100 102 108 105 110 111 113 116 117 118 120 123 126 127 130 132 135 136 138 140 143 147 150 152 155 156 158 161 164 166 168 170 172 173 176 179 181 183 185 187 188 190 191 194 197 200 201 203 204 205 208 + CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 202 8 85 44 198 47 76 89 169 11 37 48 162 5 34 41 129 185 207 6 165 179 195 208 134 152 167 181 125 143 159 173 87 155 177 183 79 147 171 176 40 113 141 150 83 102 121 140 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 64 70 160 105 + TICK + DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 202 8 85 44 198 47 76 89 169 11 37 48 162 5 34 41 129 185 207 6 165 179 195 208 134 152 167 181 125 143 159 173 87 155 177 183 79 147 171 176 40 113 141 150 83 102 121 140 114 67 199 108 35 57 75 95 68 73 163 111 206 65 32 100 64 70 160 105 + DEPOLARIZE1(0.0001) 0 1 2 4 3 7 9 10 12 13 14 15 16 18 19 23 22 24 25 26 29 28 30 33 36 39 38 43 46 45 49 50 52 53 54 55 56 58 59 61 62 63 66 69 71 72 74 77 78 80 82 84 86 88 91 92 93 94 97 98 99 101 103 104 106 107 109 110 112 115 116 117 118 120 123 124 126 127 130 132 133 135 137 138 139 142 144 145 146 148 149 151 153 154 156 157 158 161 164 166 168 170 172 174 175 178 180 182 184 186 187 188 189 190 191 192 193 194 196 197 200 201 203 204 205 + CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 186 204 7 26 0 71 94 110 153 205 182 30 174 24 50 62 109 172 196 201 178 197 53 16 115 135 151 168 142 161 10 188 69 138 106 170 97 164 184 194 23 92 61 132 101 123 189 158 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 66 84 58 130 103 126 148 166 144 200 180 29 4 25 1 3 + TICK + DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 186 204 7 26 0 71 94 110 153 205 182 30 174 24 50 62 109 172 196 201 178 197 53 16 115 135 151 168 142 161 10 188 69 138 106 170 97 164 184 194 23 92 61 132 101 123 189 158 93 45 133 86 54 78 154 118 46 52 146 91 13 82 112 120 192 43 18 36 66 84 58 130 103 126 148 166 144 200 180 29 4 25 1 3 + DEPOLARIZE1(0.0001) 2 5 6 8 11 14 15 17 19 20 21 22 27 28 31 34 32 35 37 41 40 42 44 47 48 51 55 57 56 59 60 64 65 67 68 70 73 74 75 76 79 81 83 85 89 87 88 90 96 95 100 102 104 108 105 111 113 114 116 119 121 122 124 125 127 128 129 131 134 136 141 140 143 145 147 149 150 152 155 156 157 159 160 162 163 165 167 169 171 173 177 176 175 179 181 183 185 187 190 191 193 195 198 199 202 203 206 207 208 + CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 202 204 85 26 198 29 76 71 169 205 37 30 162 200 34 24 129 172 207 201 165 166 195 197 134 135 167 168 125 126 159 161 87 138 177 170 79 130 171 164 40 92 141 132 83 84 121 123 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 64 203 160 88 + TICK + DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 202 204 85 26 198 29 76 71 169 205 37 30 162 200 34 24 129 172 207 201 165 166 195 197 134 135 167 168 125 126 159 161 87 138 177 170 79 130 171 164 40 92 141 132 83 84 121 123 114 45 199 86 35 36 75 78 68 52 163 91 206 43 32 82 64 203 160 88 + DEPOLARIZE1(0.0001) 0 1 2 5 4 6 7 8 9 10 11 12 13 14 15 16 18 19 20 23 22 28 41 39 42 44 47 46 48 49 50 51 53 54 55 57 56 58 59 60 61 62 65 66 67 69 70 73 74 80 81 89 90 93 94 96 95 97 98 99 100 101 102 103 104 108 106 107 105 109 110 111 112 113 115 116 118 120 124 127 133 136 137 140 139 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 173 174 176 175 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 196 208 + CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 186 42 7 81 0 8 94 44 153 47 182 89 174 11 50 48 109 5 196 41 178 185 53 6 115 179 151 208 142 152 10 181 69 143 106 173 97 155 184 183 23 147 61 176 101 113 189 150 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 66 74 58 55 103 116 148 156 144 191 180 187 4 14 1 56 + TICK + DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 186 42 7 81 0 8 94 44 153 47 182 89 174 11 50 48 109 5 196 41 178 185 53 6 115 179 151 208 142 152 10 181 69 143 106 173 97 155 184 183 23 147 61 176 101 113 189 150 93 102 133 140 54 67 154 108 46 57 146 95 13 73 112 111 192 190 18 28 66 74 58 55 103 116 148 156 144 191 180 187 4 14 1 56 + DEPOLARIZE1(0.0001) 2 3 15 16 17 19 21 22 24 25 26 27 29 30 31 34 33 32 35 36 37 40 38 43 45 52 59 62 63 64 65 68 71 72 75 76 77 78 79 80 82 83 84 85 87 86 88 91 92 99 100 104 110 114 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 138 141 145 149 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 177 175 188 193 194 195 197 198 199 200 201 202 203 204 205 206 207 + CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 202 63 85 99 198 204 76 26 169 71 37 110 162 205 34 30 129 24 207 62 165 172 195 201 134 197 167 16 125 135 159 168 87 161 177 188 79 138 171 170 40 164 141 194 83 92 121 132 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 + TICK + DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 202 63 85 99 198 204 76 26 169 71 37 110 162 205 34 30 129 24 207 62 165 172 195 201 134 197 167 16 125 135 159 168 87 161 177 188 79 138 171 170 40 164 141 194 83 92 121 132 114 123 199 158 35 45 75 86 68 78 163 118 206 52 32 91 124 120 22 82 + DEPOLARIZE1(0.0001) 0 1 2 5 4 3 6 7 8 9 10 11 12 13 14 15 18 19 20 23 25 29 28 36 41 39 42 43 44 47 46 48 49 50 51 53 54 55 57 56 58 59 60 61 64 65 66 67 69 70 73 74 81 84 89 90 93 94 96 95 97 98 100 101 102 103 104 108 106 107 105 109 111 112 113 115 116 126 130 133 136 137 140 139 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 160 166 173 174 176 175 178 179 180 181 182 183 184 185 186 187 189 190 191 192 193 196 200 203 208 + CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 186 187 7 8 0 47 94 89 153 191 182 11 174 5 50 41 109 156 196 185 178 179 53 208 115 116 151 152 142 143 10 173 69 55 106 155 97 147 184 176 23 74 61 113 101 102 189 140 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 145 136 149 90 104 44 59 48 15 6 19 181 193 183 157 150 2 108 175 111 + TICK + DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 186 187 7 8 0 47 94 89 153 191 182 11 174 5 50 41 109 156 196 185 178 179 53 208 115 116 151 152 142 143 10 173 69 55 106 155 97 147 184 176 23 74 61 113 101 102 189 140 93 28 133 67 54 57 154 95 46 190 146 73 13 65 112 100 145 136 149 90 104 44 59 48 15 6 19 181 193 183 157 150 2 108 175 111 + DEPOLARIZE1(0.0001) 1 4 3 16 17 18 21 22 24 25 26 27 29 30 31 34 33 32 35 36 37 40 38 43 45 52 58 62 63 64 66 68 70 71 72 75 76 77 78 79 80 82 83 84 85 87 86 88 91 92 99 103 105 110 114 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 138 141 144 148 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 177 180 188 192 194 195 197 198 199 200 201 202 203 204 205 206 207 + CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 202 42 85 81 198 187 76 8 169 47 37 89 162 191 34 11 129 5 207 41 165 156 195 185 134 179 167 208 125 116 159 152 87 143 177 173 79 55 171 155 40 147 141 176 83 74 121 113 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 + TICK + DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 202 42 85 81 198 187 76 8 169 47 37 89 162 191 34 11 129 5 207 41 165 156 195 185 134 179 167 208 125 116 159 152 87 143 177 173 79 55 171 155 40 147 141 176 83 74 121 113 114 102 199 140 35 28 75 67 68 57 163 95 206 190 32 73 124 100 22 65 + DEPOLARIZE1(0.0001) 0 1 2 4 3 6 7 9 10 12 13 15 16 18 19 23 24 25 26 29 30 33 36 39 38 43 44 46 45 48 49 50 52 53 54 58 59 61 62 63 64 66 69 71 72 77 78 80 82 84 86 88 90 91 92 93 94 97 98 99 101 103 104 108 106 107 109 110 111 112 115 117 118 120 123 126 127 130 132 133 135 136 137 138 139 142 144 145 146 148 149 150 151 153 154 157 158 160 161 164 166 168 170 172 174 175 178 180 181 182 183 184 186 188 189 192 193 194 196 197 200 201 203 204 205 + CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 186 25 7 63 0 204 94 26 153 29 182 71 174 205 50 30 109 200 196 24 178 172 53 201 115 166 151 197 142 135 10 168 69 126 106 161 97 138 184 170 23 130 61 164 101 92 189 132 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 145 127 149 80 104 99 59 110 15 62 19 16 193 188 157 194 2 158 175 118 + TICK + DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 186 25 7 63 0 204 94 26 153 29 182 71 174 205 50 30 109 200 196 24 178 172 53 201 115 166 151 197 142 135 10 168 69 126 106 161 97 138 184 170 23 130 61 164 101 92 189 132 93 84 133 123 54 45 154 86 46 36 146 78 13 52 112 91 145 127 149 80 104 99 59 110 15 62 19 16 193 188 157 194 2 158 175 118 + DEPOLARIZE1(0.0001) 1 5 4 6 8 11 14 17 18 20 21 22 27 28 31 34 32 35 37 41 40 42 43 44 47 48 51 55 57 56 58 60 64 65 66 67 68 70 73 74 75 76 79 81 82 83 85 89 87 90 96 95 100 102 103 108 105 111 113 114 116 119 120 121 122 124 125 128 129 131 134 136 141 140 143 144 147 148 150 152 155 156 159 160 162 163 165 167 169 171 173 177 176 179 180 181 183 185 187 190 191 192 195 198 199 202 206 207 208 + MX(0.001) 27 128 17 119 31 131 21 122 202 85 198 76 169 37 162 34 129 207 165 195 134 167 125 159 87 177 79 171 40 141 83 121 114 199 35 75 68 163 206 32 124 22 64 160 9 107 98 137 12 49 39 139 186 7 0 94 153 182 174 50 109 196 178 53 115 151 142 10 69 106 97 184 23 61 101 189 93 133 54 154 46 146 13 112 145 149 104 59 15 19 193 157 2 175 192 18 66 58 103 148 144 180 4 1 + DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 202 85 198 76 169 37 162 34 129 207 165 195 134 167 125 159 87 177 79 171 40 141 83 121 114 199 35 75 68 163 206 32 124 22 64 160 9 107 98 137 12 49 39 139 186 7 0 94 153 182 174 50 109 196 178 53 115 151 142 10 69 106 97 184 23 61 101 189 93 133 54 154 46 146 13 112 145 149 104 59 15 19 193 157 2 175 192 18 66 58 103 148 144 180 4 1 5 3 6 8 11 14 16 20 24 25 26 29 28 30 33 36 41 38 42 43 44 47 45 48 51 52 55 57 56 60 62 63 65 67 70 71 72 73 74 77 78 80 81 82 84 89 86 88 90 91 92 96 95 99 100 102 108 105 110 111 113 116 117 118 120 123 126 127 130 132 135 136 138 140 143 147 150 152 155 156 158 161 164 166 168 170 172 173 176 179 181 183 185 187 188 190 191 194 197 200 201 203 204 205 208 + DETECTOR(2, 2, 0) rec[-60] rec[-164] + DETECTOR(2, 6, 0) rec[-59] rec[-163] + DETECTOR(2, 10, 0) rec[-124] rec[-20] + DETECTOR(4, 0, 0) rec[-1] rec[-105] + DETECTOR(4, 4, 0) rec[-58] rec[-162] + DETECTOR(4, 8, 0) rec[-57] rec[-161] + DETECTOR(6, 2, 0) rec[-56] rec[-160] + DETECTOR(6, 6, 0) rec[-55] rec[-159] + DETECTOR(6, 10, 0) rec[-19] rec[-123] + DETECTOR(8, 0, 0) rec[-106] rec[-2] + DETECTOR(8, 4, 0) rec[-54] rec[-158] + DETECTOR(8, 8, 0) rec[-53] rec[-157] + DETECTOR(10, 2, 0) rec[-52] rec[-156] + DETECTOR(10, 6, 0) rec[-51] rec[-155] + DETECTOR(10, 10, 0) rec[-122] rec[-18] + DETECTOR(12, 0, 0) rec[-3] rec[-107] + DETECTOR(12, 4, 0) rec[-50] rec[-154] + DETECTOR(12, 8, 0) rec[-49] rec[-153] + DETECTOR(14, 2, 0) rec[-48] rec[-152] + DETECTOR(14, 6, 0) rec[-47] rec[-151] + DETECTOR(14, 10, 0) rec[-17] rec[-121] + DETECTOR(16, 0, 0) rec[-108] rec[-4] + DETECTOR(16, 4, 0) rec[-46] rec[-150] + DETECTOR(16, 8, 0) rec[-45] rec[-149] + DETECTOR(18, 2, 0) rec[-44] rec[-148] + DETECTOR(18, 6, 0) rec[-43] rec[-147] + DETECTOR(18, 10, 0) rec[-16] rec[-120] + DETECTOR(20, 0, 0) rec[-5] rec[-109] + DETECTOR(20, 4, 0) rec[-42] rec[-146] + DETECTOR(20, 8, 0) rec[-41] rec[-145] + DETECTOR(22, 2, 0) rec[-40] rec[-144] + DETECTOR(22, 6, 0) rec[-39] rec[-143] + DETECTOR(22, 10, 0) rec[-15] rec[-119] + DETECTOR(24, 0, 0) rec[-6] rec[-110] + DETECTOR(24, 4, 0) rec[-38] rec[-142] + DETECTOR(24, 8, 0) rec[-37] rec[-141] + DETECTOR(26, 2, 0) rec[-36] rec[-140] + DETECTOR(26, 6, 0) rec[-35] rec[-139] + DETECTOR(26, 10, 0) rec[-14] rec[-118] + DETECTOR(28, 0, 0) rec[-7] rec[-111] + DETECTOR(28, 4, 0) rec[-34] rec[-138] + DETECTOR(28, 8, 0) rec[-33] rec[-137] + DETECTOR(30, 2, 0) rec[-32] rec[-136] + DETECTOR(30, 6, 0) rec[-31] rec[-135] + DETECTOR(30, 10, 0) rec[-13] rec[-117] + DETECTOR(32, 0, 0) rec[-8] rec[-112] + DETECTOR(32, 4, 0) rec[-30] rec[-134] + DETECTOR(32, 8, 0) rec[-29] rec[-133] + DETECTOR(34, 2, 0) rec[-132] rec[-28] + DETECTOR(34, 6, 0) rec[-27] rec[-131] + DETECTOR(34, 10, 0) rec[-116] rec[-12] + DETECTOR(36, 0, 0) rec[-9] rec[-113] + DETECTOR(36, 4, 0) rec[-130] rec[-26] + DETECTOR(36, 8, 0) rec[-25] rec[-129] + DETECTOR(38, 2, 0) rec[-24] rec[-128] + DETECTOR(38, 6, 0) rec[-23] rec[-127] + DETECTOR(38, 10, 0) rec[-11] rec[-115] + DETECTOR(40, 0, 0) rec[-114] rec[-10] + DETECTOR(40, 4, 0) rec[-22] rec[-126] + DETECTOR(40, 8, 0) rec[-21] rec[-125] + SHIFT_COORDS(0, 0, 1) +} +RX 1 119 4 64 122 9 128 12 131 17 137 21 139 27 85 145 31 149 98 39 202 160 107 49 +TICK +DEPOLARIZE1(0.0001) 1 119 4 64 122 9 128 12 131 17 137 21 139 27 85 145 31 149 98 39 202 160 107 49 0 2 3 5 6 7 8 10 11 13 14 15 16 18 19 20 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +MX(0.001) 113 116 5 6 8 126 11 130 16 132 135 24 138 26 143 29 30 147 150 152 41 155 156 44 161 47 48 164 166 168 55 62 170 172 173 71 176 179 74 181 183 185 187 188 89 191 194 197 92 200 201 204 110 205 208 84 102 123 140 158 28 45 67 86 108 36 57 78 95 118 190 52 73 91 111 43 65 82 100 120 +TICK +DEPOLARIZE1(0.0001) 113 116 5 6 8 126 11 130 16 132 135 24 138 26 143 29 30 147 150 152 41 155 156 44 161 47 48 164 166 168 55 62 170 172 173 71 176 179 74 181 183 185 187 188 89 191 194 197 92 200 201 204 110 205 208 84 102 123 140 158 28 45 67 86 108 36 57 78 95 118 190 52 73 91 111 43 65 82 100 120 0 1 2 3 4 7 9 10 12 13 14 15 17 18 19 20 21 22 23 25 27 31 32 33 34 35 37 38 39 40 42 46 49 50 51 53 54 56 58 59 60 61 63 64 66 68 69 70 72 75 76 77 79 80 81 83 85 87 88 90 93 94 96 97 98 99 101 103 104 105 106 107 109 112 114 115 117 119 121 122 124 125 127 128 129 131 133 134 136 137 139 141 142 144 145 146 148 149 151 153 154 157 159 160 162 163 165 167 169 171 174 175 177 178 180 182 184 186 189 192 193 195 196 198 199 202 203 206 207 +CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 +TICK +DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 55 56 57 58 59 61 62 63 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 91 92 93 94 95 97 98 99 100 101 102 103 104 106 107 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 +TICK +DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 +DEPOLARIZE1(0.0001) 0 2 5 6 7 8 10 11 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 34 35 36 37 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 73 74 75 76 78 79 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 138 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 +TICK +DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 +DEPOLARIZE1(0.0001) 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 22 23 24 26 28 29 30 32 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 65 66 67 68 69 70 71 73 74 75 76 78 79 80 81 82 83 84 85 86 87 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 +TICK +DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 +DEPOLARIZE1(0.0001) 0 2 3 5 6 7 8 10 11 13 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 52 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 97 99 100 101 102 103 104 106 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 138 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 +TICK +DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 22 23 24 25 26 28 29 30 32 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 73 74 75 76 78 79 81 82 83 84 86 87 89 90 91 92 93 94 95 96 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 118 120 121 123 124 125 126 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 +TICK +DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 10 11 13 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 43 44 45 46 47 48 50 52 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 91 92 93 94 95 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 +TICK +DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 18 19 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 82 83 84 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 102 103 104 106 107 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 +TICK +DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 +DEPOLARIZE1(0.0001) 0 1 2 4 5 6 7 8 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 78 79 81 82 83 84 85 86 87 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 118 119 120 121 122 123 124 125 126 128 129 130 131 132 133 134 135 136 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +MX(0.001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 +TICK +DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 0 2 3 5 6 7 8 10 11 13 14 15 16 18 19 20 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +DETECTOR(2, 2, 0) rec[-12] rec[-164] +DETECTOR(2, 6, 0) rec[-11] rec[-163] +DETECTOR(2, 10, 0) rec[-124] rec[-4] +DETECTOR(4, 0, 0) rec[-1] rec[-105] +DETECTOR(4, 4, 0) rec[-162] rec[-10] +DETECTOR(4, 8, 0) rec[-9] rec[-161] +DETECTOR(6, 2, 0) rec[-8] rec[-160] +DETECTOR(6, 6, 0) rec[-7] rec[-159] +DETECTOR(6, 10, 0) rec[-3] rec[-123] +DETECTOR(8, 0, 0) rec[-106] rec[-2] +DETECTOR(8, 4, 0) rec[-6] rec[-158] +DETECTOR(8, 8, 0) rec[-5] rec[-157] +SHIFT_COORDS(0, 0, 1) +REPEAT 2 { + RX 1 119 4 64 122 9 128 12 131 17 137 21 139 27 85 145 31 149 98 39 202 160 107 49 + TICK + DEPOLARIZE1(0.0001) 1 119 4 64 122 9 128 12 131 17 137 21 139 27 85 145 31 149 98 39 202 160 107 49 56 117 3 60 63 70 127 14 72 77 136 20 80 25 81 88 33 90 96 38 42 99 203 105 51 + CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 + TICK + DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 + DEPOLARIZE1(0.0001) 1 56 117 3 4 63 9 127 12 14 72 77 137 80 25 139 85 88 145 33 149 98 38 39 99 202 203 107 49 + CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 + TICK + DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 + DEPOLARIZE1(0.0001) 56 119 60 64 122 70 127 128 14 131 17 136 20 21 81 27 85 88 145 31 90 149 96 42 202 203 160 105 51 + CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 + TICK + DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 + DEPOLARIZE1(0.0001) 1 56 4 60 9 70 127 12 14 136 137 20 80 81 139 85 145 90 149 96 98 39 42 99 202 105 107 49 51 + CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 + TICK + DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 + DEPOLARIZE1(0.0001) 117 119 3 63 64 122 127 128 72 131 17 77 21 80 25 81 27 85 88 145 31 33 149 38 42 99 202 203 160 + CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 + TICK + DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 + DEPOLARIZE1(0.0001) 1 56 3 4 60 64 9 70 12 14 136 137 20 25 81 139 145 90 149 96 98 39 42 203 160 105 107 49 51 + CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 + TICK + DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 + DEPOLARIZE1(0.0001) 1 117 119 3 4 63 64 122 70 127 128 72 131 17 77 21 80 25 27 85 88 31 33 38 99 202 203 160 105 + CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 + TICK + DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 + DEPOLARIZE1(0.0001) 1 117 3 4 63 64 9 127 12 72 77 136 137 80 25 139 88 145 33 90 149 98 38 39 99 203 160 107 49 + CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 + TICK + DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 + DEPOLARIZE1(0.0001) 1 56 119 4 60 63 64 122 70 128 14 131 17 136 20 21 25 81 27 85 31 90 96 42 99 202 160 105 51 + MX(0.001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 + DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 56 117 3 60 63 70 127 14 72 77 136 20 80 25 81 88 33 90 96 38 42 99 203 105 51 + DETECTOR(2, 2, 0) rec[-36] rec[-12] + DETECTOR(2, 6, 0) rec[-11] rec[-35] + DETECTOR(2, 10, 0) rec[-4] rec[-28] + DETECTOR(4, 0, 0) rec[-1] rec[-25] + DETECTOR(4, 4, 0) rec[-34] rec[-10] + DETECTOR(4, 8, 0) rec[-9] rec[-33] + DETECTOR(6, 2, 0) rec[-8] rec[-32] + DETECTOR(6, 6, 0) rec[-7] rec[-31] + DETECTOR(6, 10, 0) rec[-3] rec[-27] + DETECTOR(8, 0, 0) rec[-2] rec[-26] + DETECTOR(8, 4, 0) rec[-6] rec[-30] + DETECTOR(8, 8, 0) rec[-5] rec[-29] + SHIFT_COORDS(0, 0, 1) +} +RX 1 119 4 64 122 9 128 12 131 17 137 21 139 27 85 145 31 149 98 39 202 160 107 49 +TICK +DEPOLARIZE1(0.0001) 1 119 4 64 122 9 128 12 131 17 137 21 139 27 85 145 31 149 98 39 202 160 107 49 0 2 3 5 6 7 8 10 11 13 14 15 16 18 19 20 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +CX 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 +TICK +DEPOLARIZE2(0.001) 27 96 128 136 17 20 119 60 31 51 131 90 21 42 122 81 64 70 160 105 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 55 56 57 58 59 61 62 63 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 91 92 93 94 95 97 98 99 100 101 102 103 104 106 107 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CZ 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 +TICK +DEPOLARIZE2(0.001) 9 77 107 117 98 38 137 80 12 33 49 72 39 63 139 99 4 25 1 3 +DEPOLARIZE1(0.0001) 0 2 5 6 7 8 10 11 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 34 35 36 37 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 73 74 75 76 78 79 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 138 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 +TICK +DEPOLARIZE2(0.001) 27 77 128 117 17 3 119 38 31 33 131 72 21 25 122 63 64 203 160 88 +DEPOLARIZE1(0.0001) 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 22 23 24 26 28 29 30 32 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 65 66 67 68 69 70 71 73 74 75 76 78 79 80 81 82 83 84 85 86 87 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +CZ 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 +TICK +DEPOLARIZE2(0.001) 9 70 107 105 98 96 137 136 12 20 49 60 39 51 139 90 4 14 1 56 +DEPOLARIZE1(0.0001) 0 2 3 5 6 7 8 10 11 13 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 52 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 97 99 100 101 102 103 104 106 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 138 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 +TICK +DEPOLARIZE2(0.001) 27 88 128 127 17 77 119 117 31 38 131 80 21 33 122 72 85 99 202 63 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 22 23 24 25 26 28 29 30 32 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 73 74 75 76 78 79 81 82 83 84 86 87 89 90 91 92 93 94 95 96 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 118 120 121 123 124 125 126 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +CZ 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 +TICK +DEPOLARIZE2(0.001) 9 56 107 96 98 20 137 60 12 14 49 51 39 42 139 81 145 136 149 90 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 10 11 13 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 43 44 45 46 47 48 50 52 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 91 92 93 94 95 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 +CX 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 +TICK +DEPOLARIZE2(0.001) 27 70 128 105 17 56 119 96 31 20 131 60 21 14 122 51 85 81 202 42 +DEPOLARIZE1(0.0001) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 18 19 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 55 57 58 59 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 82 83 84 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 102 103 104 106 107 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +CZ 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 +TICK +DEPOLARIZE2(0.001) 9 203 107 88 98 77 137 117 12 3 49 38 39 33 139 72 145 127 149 80 +DEPOLARIZE1(0.0001) 0 1 2 4 5 6 7 8 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 78 79 81 82 83 84 85 86 87 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 118 119 120 121 122 123 124 125 126 128 129 130 131 132 133 134 135 136 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +MX(0.001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 +TICK +DEPOLARIZE1(0.0001) 27 128 17 119 31 131 21 122 85 202 64 160 9 107 98 137 12 49 39 139 145 149 4 1 0 2 3 5 6 7 8 10 11 13 14 15 16 18 19 20 22 23 24 25 26 28 29 30 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 121 123 124 125 126 127 129 130 132 133 134 135 136 138 140 141 142 143 144 146 147 148 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 208 +M(0.001) 203 70 88 105 127 56 77 96 117 136 3 20 38 60 80 14 33 51 72 90 25 42 63 81 99 84 102 123 140 158 28 45 67 86 108 36 57 78 95 118 190 52 73 91 111 43 65 82 100 120 +DEPOLARIZE1(0.0001) 203 70 88 105 127 56 77 96 117 136 3 20 38 60 80 14 33 51 72 90 25 42 63 81 99 84 102 123 140 158 28 45 67 86 108 36 57 78 95 118 190 52 73 91 111 43 65 82 100 120 0 1 2 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 21 22 23 24 26 27 29 30 31 32 34 35 37 39 40 41 44 46 47 48 49 50 53 54 55 58 59 61 62 64 66 68 69 71 74 75 76 79 83 85 87 89 92 93 94 97 98 101 103 104 106 107 109 110 112 113 114 115 116 119 121 122 124 125 126 128 129 130 131 132 133 134 135 137 138 139 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 199 200 201 202 204 205 206 207 208 +DETECTOR(2, 2, 0) rec[-62] rec[-86] +DETECTOR(2, 6, 0) rec[-61] rec[-85] +DETECTOR(2, 10, 0) rec[-78] rec[-54] +DETECTOR(4, 0, 0) rec[-51] rec[-75] +DETECTOR(4, 4, 0) rec[-60] rec[-84] +DETECTOR(4, 8, 0) rec[-59] rec[-83] +DETECTOR(6, 2, 0) rec[-82] rec[-58] +DETECTOR(6, 6, 0) rec[-81] rec[-57] +DETECTOR(6, 10, 0) rec[-53] rec[-77] +DETECTOR(8, 0, 0) rec[-76] rec[-52] +DETECTOR(8, 4, 0) rec[-56] rec[-80] +DETECTOR(8, 8, 0) rec[-55] rec[-79] +SHIFT_COORDS(0, 0, 1) +OBSERVABLE_INCLUDE(1) rec[-50] rec[-49] rec[-48] rec[-47] rec[-46] +DETECTOR(2, 2, 0) rec[-62] rec[-50] rec[-49] rec[-45] rec[-44] +DETECTOR(2, 6, 0) rec[-61] rec[-48] rec[-47] rec[-43] rec[-42] +DETECTOR(2, 10, 0) rec[-46] rec[-54] rec[-41] +DETECTOR(4, 0, 0) rec[-40] rec[-45] rec[-51] +DETECTOR(4, 4, 0) rec[-60] rec[-44] rec[-43] rec[-39] rec[-38] +DETECTOR(4, 8, 0) rec[-59] rec[-42] rec[-41] rec[-37] rec[-36] +DETECTOR(6, 2, 0) rec[-58] rec[-40] rec[-39] rec[-35] rec[-34] +DETECTOR(6, 6, 0) rec[-32] rec[-57] rec[-38] rec[-37] rec[-33] +DETECTOR(6, 10, 0) rec[-31] rec[-53] rec[-36] +DETECTOR(8, 0, 0) rec[-30] rec[-52] rec[-35] +DETECTOR(8, 4, 0) rec[-29] rec[-28] rec[-56] rec[-34] rec[-33] +DETECTOR(8, 8, 0) rec[-32] rec[-31] rec[-27] rec[-26] rec[-55] +SHIFT_COORDS(0, 0, 1) diff --git a/tests/reference_data/stim/circuit_logical_off_boundary.stim b/tests/reference_data/stim/circuit_logical_off_boundary.stim new file mode 100644 index 0000000..6d69933 --- /dev/null +++ b/tests/reference_data/stim/circuit_logical_off_boundary.stim @@ -0,0 +1,96 @@ +QUBIT_COORDS(0, 0) 0 +QUBIT_COORDS(1, 0) 1 +QUBIT_COORDS(2, 0) 2 +QUBIT_COORDS(3, 0) 3 +QUBIT_COORDS(4, 0) 4 +QUBIT_COORDS(0, 1) 5 +QUBIT_COORDS(1, 1) 6 +QUBIT_COORDS(2, 1) 7 +QUBIT_COORDS(3, 1) 8 +QUBIT_COORDS(4, 1) 9 +QUBIT_COORDS(0, 2) 10 +QUBIT_COORDS(1, 2) 11 +QUBIT_COORDS(2, 2) 12 +QUBIT_COORDS(3, 2) 13 +QUBIT_COORDS(4, 2) 14 +QUBIT_COORDS(0, 3) 15 +QUBIT_COORDS(1, 3) 16 +QUBIT_COORDS(2, 3) 17 +QUBIT_COORDS(3, 3) 18 +QUBIT_COORDS(4, 3) 19 +QUBIT_COORDS(0, 4) 20 +QUBIT_COORDS(1, 4) 21 +QUBIT_COORDS(2, 4) 22 +QUBIT_COORDS(3, 4) 23 +QUBIT_COORDS(4, 4) 24 +RX 0 2 4 6 8 10 12 14 16 18 20 22 24 +R 1 3 5 7 9 11 13 15 17 19 21 23 +TICK +H 1 3 11 13 21 23 +DEPOLARIZE1(0.01) 1 3 11 13 21 23 +TICK +CX 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 +DEPOLARIZE2(0.01) 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 +TICK +CX 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 +DEPOLARIZE2(0.01) 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 +TICK +CX 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 +DEPOLARIZE2(0.01) 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 +TICK +CX 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 +DEPOLARIZE2(0.01) 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 +TICK +H 1 3 11 13 21 23 +DEPOLARIZE1(0.01) 1 3 11 13 21 23 +TICK +MR 1 3 5 7 9 11 13 15 17 19 21 23 +DETECTOR(1, 0, 0) rec[-12] +DETECTOR(1, 2, 0) rec[-7] +DETECTOR(1, 4, 0) rec[-2] +DETECTOR(3, 0, 0) rec[-11] +DETECTOR(3, 2, 0) rec[-6] +DETECTOR(3, 4, 0) rec[-1] +REPEAT 2 { + TICK + H 1 3 11 13 21 23 + DEPOLARIZE1(0.01) 1 3 11 13 21 23 + TICK + CX 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 + DEPOLARIZE2(0.01) 1 2 11 12 21 22 3 4 13 14 23 24 6 5 16 15 8 7 18 17 + TICK + CX 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 + DEPOLARIZE2(0.01) 1 6 11 16 3 8 13 18 10 5 20 15 12 7 22 17 14 9 24 19 + TICK + CX 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 + DEPOLARIZE2(0.01) 11 6 21 16 13 8 23 18 0 5 10 15 2 7 12 17 4 9 14 19 + TICK + CX 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 + DEPOLARIZE2(0.01) 1 0 11 10 21 20 3 2 13 12 23 22 6 7 16 17 8 9 18 19 + TICK + H 1 3 11 13 21 23 + DEPOLARIZE1(0.01) 1 3 11 13 21 23 + TICK + MR 1 3 5 7 9 11 13 15 17 19 21 23 + SHIFT_COORDS(0, 0, 1) + DETECTOR(1, 0, 0) rec[-12] rec[-24] + DETECTOR(3, 0, 0) rec[-11] rec[-23] + DETECTOR(0, 1, 0) rec[-10] rec[-22] + DETECTOR(2, 1, 0) rec[-9] rec[-21] + DETECTOR(4, 1, 0) rec[-8] rec[-20] + DETECTOR(1, 2, 0) rec[-7] rec[-19] + DETECTOR(3, 2, 0) rec[-6] rec[-18] + DETECTOR(0, 3, 0) rec[-5] rec[-17] + DETECTOR(2, 3, 0) rec[-4] rec[-16] + DETECTOR(4, 3, 0) rec[-3] rec[-15] + DETECTOR(1, 4, 0) rec[-2] rec[-14] + DETECTOR(3, 4, 0) rec[-1] rec[-13] +} +MX 0 2 4 6 8 10 12 14 16 18 20 22 24 +DETECTOR(1, 0, 1) rec[-10] rec[-12] rec[-13] rec[-25] +DETECTOR(1, 2, 1) rec[-5] rec[-7] rec[-8] rec[-10] rec[-20] +DETECTOR(1, 4, 1) rec[-2] rec[-3] rec[-5] rec[-15] +DETECTOR(3, 0, 1) rec[-9] rec[-11] rec[-12] rec[-24] +DETECTOR(3, 2, 1) rec[-4] rec[-6] rec[-7] rec[-9] rec[-19] +DETECTOR(3, 4, 1) rec[-1] rec[-2] rec[-4] rec[-14] +OBSERVABLE_INCLUDE(0) rec[-2] rec[-7] rec[-12] diff --git a/tests/reference_data/stim/circuit_multi_logicals.stim b/tests/reference_data/stim/circuit_multi_logicals.stim new file mode 100644 index 0000000..1cca040 --- /dev/null +++ b/tests/reference_data/stim/circuit_multi_logicals.stim @@ -0,0 +1,556 @@ +QUBIT_COORDS(0, 0) 0 +QUBIT_COORDS(0, 2) 1 +QUBIT_COORDS(0, 4) 2 +QUBIT_COORDS(0, 6) 3 +QUBIT_COORDS(1, 1) 4 +QUBIT_COORDS(1, 3) 5 +QUBIT_COORDS(1, 5) 6 +QUBIT_COORDS(2, 0) 7 +QUBIT_COORDS(2, 2) 8 +QUBIT_COORDS(2, 4) 9 +QUBIT_COORDS(2, 6) 10 +QUBIT_COORDS(3, 1) 11 +QUBIT_COORDS(3, 3) 12 +QUBIT_COORDS(3, 5) 13 +QUBIT_COORDS(4, 0) 14 +QUBIT_COORDS(4, 2) 15 +QUBIT_COORDS(4, 4) 16 +QUBIT_COORDS(4, 6) 17 +QUBIT_COORDS(5, 1) 18 +QUBIT_COORDS(5, 3) 19 +QUBIT_COORDS(5, 5) 20 +QUBIT_COORDS(6, 0) 21 +QUBIT_COORDS(6, 2) 22 +QUBIT_COORDS(6, 4) 23 +QUBIT_COORDS(6, 6) 24 +QUBIT_COORDS(7, 1) 25 +QUBIT_COORDS(7, 3) 26 +QUBIT_COORDS(7, 5) 27 +QUBIT_COORDS(8, 0) 28 +QUBIT_COORDS(8, 2) 29 +QUBIT_COORDS(8, 4) 30 +QUBIT_COORDS(8, 6) 31 +QUBIT_COORDS(9, 1) 32 +QUBIT_COORDS(9, 3) 33 +QUBIT_COORDS(9, 5) 34 +QUBIT_COORDS(10, 0) 35 +QUBIT_COORDS(10, 2) 36 +QUBIT_COORDS(10, 4) 37 +QUBIT_COORDS(10, 6) 38 +QUBIT_COORDS(11, 1) 39 +QUBIT_COORDS(11, 3) 40 +QUBIT_COORDS(11, 5) 41 +QUBIT_COORDS(12, 0) 42 +QUBIT_COORDS(12, 2) 43 +QUBIT_COORDS(12, 4) 44 +QUBIT_COORDS(12, 6) 45 +QUBIT_COORDS(13, 1) 46 +QUBIT_COORDS(13, 3) 47 +QUBIT_COORDS(13, 5) 48 +QUBIT_COORDS(14, 0) 49 +QUBIT_COORDS(14, 2) 50 +QUBIT_COORDS(14, 4) 51 +QUBIT_COORDS(14, 6) 52 +R 4 5 6 11 12 13 18 19 20 32 33 34 39 40 41 46 47 48 +DEPOLARIZE1(0.03) 4 5 6 11 12 13 18 19 20 32 33 34 39 40 41 46 47 48 0 1 2 3 7 8 9 10 14 15 16 17 21 22 23 24 25 26 27 28 29 30 31 35 36 37 38 42 43 44 45 49 50 51 52 +TICK +R 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 14 18 36 40 44 48 42 46 +DEPOLARIZE2(0.03) 8 12 16 20 14 18 36 40 44 48 42 46 +CX 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE2(0.03) 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 22 23 24 25 26 27 28 30 31 32 34 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 14 11 36 33 44 41 42 39 +DEPOLARIZE2(0.03) 8 5 16 13 14 11 36 33 44 41 42 39 +CX 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE2(0.03) 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 19 20 21 22 23 24 25 26 27 28 30 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 10 13 36 39 44 47 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 10 13 36 39 44 47 38 41 +CX 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 22 24 25 26 27 28 29 30 31 32 33 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 10 6 36 32 44 40 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 10 6 36 32 44 40 38 34 +CX 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 18 20 21 22 24 25 26 27 28 29 30 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-16] +DETECTOR(4, 4, 0) rec[-13] +DETECTOR(2, 6, 0) rec[-12] +DETECTOR(4, 0, 0) rec[-10] +DETECTOR(10, 2, 0) rec[-8] +DETECTOR(12, 4, 0) rec[-5] +DETECTOR(10, 6, 0) rec[-4] +DETECTOR(12, 0, 0) rec[-2] +SHIFT_COORDS(0, 0, 1) +R 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 14 18 36 40 44 48 42 46 +DEPOLARIZE2(0.03) 8 12 16 20 14 18 36 40 44 48 42 46 +CX 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE2(0.03) 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 22 23 24 25 26 27 28 30 31 32 34 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 14 11 36 33 44 41 42 39 +DEPOLARIZE2(0.03) 8 5 16 13 14 11 36 33 44 41 42 39 +CX 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE2(0.03) 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 19 20 21 22 23 24 25 26 27 28 30 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 10 13 36 39 44 47 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 10 13 36 39 44 47 38 41 +CX 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 22 24 25 26 27 28 29 30 31 32 33 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 10 6 36 32 44 40 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 10 6 36 32 44 40 38 34 +CX 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 18 20 21 22 24 25 26 27 28 29 30 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-16] rec[-32] +DETECTOR(2, 4, 0) rec[-15] rec[-31] +DETECTOR(4, 2, 0) rec[-14] rec[-30] +DETECTOR(4, 4, 0) rec[-13] rec[-29] +DETECTOR(2, 6, 0) rec[-12] rec[-28] +DETECTOR(6, 4, 0) rec[-11] rec[-27] +DETECTOR(4, 0, 0) rec[-10] rec[-26] +DETECTOR(0, 2, 0) rec[-9] rec[-25] +DETECTOR(10, 2, 0) rec[-8] rec[-24] +DETECTOR(10, 4, 0) rec[-7] rec[-23] +DETECTOR(12, 2, 0) rec[-6] rec[-22] +DETECTOR(12, 4, 0) rec[-5] rec[-21] +DETECTOR(10, 6, 0) rec[-4] rec[-20] +DETECTOR(14, 4, 0) rec[-3] rec[-19] +DETECTOR(12, 0, 0) rec[-2] rec[-18] +DETECTOR(8, 2, 0) rec[-1] rec[-17] +SHIFT_COORDS(0, 0, 1) +R 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 14 18 36 40 44 48 42 46 +DEPOLARIZE2(0.03) 8 12 16 20 14 18 36 40 44 48 42 46 +CX 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE2(0.03) 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 22 23 24 25 26 27 28 30 31 32 34 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 14 11 36 33 44 41 42 39 +DEPOLARIZE2(0.03) 8 5 16 13 14 11 36 33 44 41 42 39 +CX 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE2(0.03) 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 19 20 21 22 23 24 25 26 27 28 30 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 10 13 36 39 44 47 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 10 13 36 39 44 47 38 41 +CX 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 22 24 25 26 27 28 29 30 31 32 33 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 10 6 36 32 44 40 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 10 6 36 32 44 40 38 34 +CX 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 18 20 21 22 24 25 26 27 28 29 30 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +R 25 27 26 +DEPOLARIZE1(0.03) 25 27 26 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +H 25 27 26 +DEPOLARIZE1(0.03) 25 27 26 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-16] rec[-32] +DETECTOR(2, 4, 0) rec[-15] rec[-31] +DETECTOR(4, 2, 0) rec[-14] rec[-30] +DETECTOR(4, 4, 0) rec[-13] rec[-29] +DETECTOR(2, 6, 0) rec[-12] rec[-28] +DETECTOR(6, 4, 0) rec[-11] rec[-27] +DETECTOR(4, 0, 0) rec[-10] rec[-26] +DETECTOR(0, 2, 0) rec[-9] rec[-25] +DETECTOR(10, 2, 0) rec[-8] rec[-24] +DETECTOR(10, 4, 0) rec[-7] rec[-23] +DETECTOR(12, 2, 0) rec[-6] rec[-22] +DETECTOR(12, 4, 0) rec[-5] rec[-21] +DETECTOR(10, 6, 0) rec[-4] rec[-20] +DETECTOR(14, 4, 0) rec[-3] rec[-19] +DETECTOR(12, 0, 0) rec[-2] rec[-18] +DETECTOR(8, 2, 0) rec[-1] rec[-17] +SHIFT_COORDS(0, 0, 1) +R 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 22 26 30 34 36 40 44 48 42 46 28 32 14 18 +DEPOLARIZE2(0.03) 8 12 16 20 22 26 30 34 36 40 44 48 42 46 28 32 14 18 +CX 9 13 15 19 23 27 29 33 37 41 43 47 1 5 +DEPOLARIZE2(0.03) 9 13 15 19 23 27 29 33 37 41 43 47 1 5 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 24 25 31 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 22 19 30 27 36 33 44 41 42 39 28 25 14 11 +DEPOLARIZE2(0.03) 8 5 16 13 22 19 30 27 36 33 44 41 42 39 28 25 14 11 +CX 9 12 15 18 23 26 29 32 37 40 43 46 1 4 +DEPOLARIZE2(0.03) 9 12 15 18 23 26 29 32 37 40 43 46 1 4 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 20 21 24 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 22 25 30 33 36 39 44 47 10 13 24 27 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 22 25 30 33 36 39 44 47 10 13 24 27 38 41 +CX 9 6 15 12 23 20 29 26 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 29 26 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 28 31 32 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 22 18 30 26 36 32 44 40 10 6 24 20 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 22 18 30 26 36 32 44 40 10 6 24 20 38 34 +CX 9 5 15 11 23 19 29 25 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 29 25 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 21 27 28 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-36] rec[-20] +DETECTOR(2, 4, 0) rec[-35] rec[-19] +DETECTOR(4, 2, 0) rec[-34] rec[-18] +DETECTOR(4, 4, 0) rec[-33] rec[-17] +DETECTOR(2, 6, 0) rec[-32] rec[-8] +DETECTOR(4, 0, 0) rec[-30] rec[-2] +DETECTOR(0, 2, 0) rec[-29] rec[-1] +DETECTOR(10, 2, 0) rec[-28] rec[-12] +DETECTOR(10, 4, 0) rec[-27] rec[-11] +DETECTOR(12, 2, 0) rec[-26] rec[-10] +DETECTOR(12, 4, 0) rec[-25] rec[-9] +DETECTOR(10, 6, 0) rec[-24] rec[-6] +DETECTOR(14, 4, 0) rec[-23] rec[-5] +DETECTOR(12, 0, 0) rec[-22] rec[-4] +DETECTOR(6, 4, 0) rec[-31] rec[-15] +DETECTOR(8, 2, 0) rec[-21] rec[-14] +SHIFT_COORDS(0, 0, 1) +OBSERVABLE_INCLUDE(0) rec[-3] rec[-7] rec[-13] rec[-16] +R 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 22 26 30 34 36 40 44 48 42 46 28 32 14 18 +DEPOLARIZE2(0.03) 8 12 16 20 22 26 30 34 36 40 44 48 42 46 28 32 14 18 +CX 9 13 15 19 23 27 29 33 37 41 43 47 1 5 +DEPOLARIZE2(0.03) 9 13 15 19 23 27 29 33 37 41 43 47 1 5 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 24 25 31 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 22 19 30 27 36 33 44 41 42 39 28 25 14 11 +DEPOLARIZE2(0.03) 8 5 16 13 22 19 30 27 36 33 44 41 42 39 28 25 14 11 +CX 9 12 15 18 23 26 29 32 37 40 43 46 1 4 +DEPOLARIZE2(0.03) 9 12 15 18 23 26 29 32 37 40 43 46 1 4 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 20 21 24 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 22 25 30 33 36 39 44 47 10 13 24 27 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 22 25 30 33 36 39 44 47 10 13 24 27 38 41 +CX 9 6 15 12 23 20 29 26 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 29 26 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 28 31 32 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 22 18 30 26 36 32 44 40 10 6 24 20 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 22 18 30 26 36 32 44 40 10 6 24 20 38 34 +CX 9 5 15 11 23 19 29 25 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 29 25 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 21 27 28 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-20] rec[-40] +DETECTOR(2, 4, 0) rec[-19] rec[-39] +DETECTOR(4, 2, 0) rec[-18] rec[-38] +DETECTOR(4, 4, 0) rec[-17] rec[-37] +DETECTOR(6, 2, 0) rec[-16] rec[-36] +DETECTOR(6, 4, 0) rec[-15] rec[-35] +DETECTOR(8, 2, 0) rec[-14] rec[-34] +DETECTOR(8, 4, 0) rec[-13] rec[-33] +DETECTOR(10, 2, 0) rec[-12] rec[-32] +DETECTOR(10, 4, 0) rec[-11] rec[-31] +DETECTOR(12, 2, 0) rec[-10] rec[-30] +DETECTOR(12, 4, 0) rec[-9] rec[-29] +DETECTOR(2, 6, 0) rec[-8] rec[-28] +DETECTOR(6, 6, 0) rec[-7] rec[-27] +DETECTOR(10, 6, 0) rec[-6] rec[-26] +DETECTOR(14, 4, 0) rec[-5] rec[-25] +DETECTOR(12, 0, 0) rec[-4] rec[-24] +DETECTOR(8, 0, 0) rec[-3] rec[-23] +DETECTOR(4, 0, 0) rec[-2] rec[-22] +DETECTOR(0, 2, 0) rec[-1] rec[-21] +SHIFT_COORDS(0, 0, 1) +R 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 22 26 30 34 36 40 44 48 42 46 28 32 14 18 +DEPOLARIZE2(0.03) 8 12 16 20 22 26 30 34 36 40 44 48 42 46 28 32 14 18 +CX 9 13 15 19 23 27 29 33 37 41 43 47 1 5 +DEPOLARIZE2(0.03) 9 13 15 19 23 27 29 33 37 41 43 47 1 5 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 24 25 31 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 22 19 30 27 36 33 44 41 42 39 28 25 14 11 +DEPOLARIZE2(0.03) 8 5 16 13 22 19 30 27 36 33 44 41 42 39 28 25 14 11 +CX 9 12 15 18 23 26 29 32 37 40 43 46 1 4 +DEPOLARIZE2(0.03) 9 12 15 18 23 26 29 32 37 40 43 46 1 4 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 20 21 24 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 22 25 30 33 36 39 44 47 10 13 24 27 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 22 25 30 33 36 39 44 47 10 13 24 27 38 41 +CX 9 6 15 12 23 20 29 26 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 29 26 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 28 31 32 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 22 18 30 26 36 32 44 40 10 6 24 20 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 22 18 30 26 36 32 44 40 10 6 24 20 38 34 +CX 9 5 15 11 23 19 29 25 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 29 25 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 21 27 28 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 +DEPOLARIZE1(0.03) 8 9 15 16 22 23 29 30 36 37 43 44 10 24 38 51 42 28 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 25 26 27 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-20] rec[-40] +DETECTOR(2, 4, 0) rec[-19] rec[-39] +DETECTOR(4, 2, 0) rec[-18] rec[-38] +DETECTOR(4, 4, 0) rec[-17] rec[-37] +DETECTOR(6, 2, 0) rec[-16] rec[-36] +DETECTOR(6, 4, 0) rec[-15] rec[-35] +DETECTOR(8, 2, 0) rec[-14] rec[-34] +DETECTOR(8, 4, 0) rec[-13] rec[-33] +DETECTOR(10, 2, 0) rec[-12] rec[-32] +DETECTOR(10, 4, 0) rec[-11] rec[-31] +DETECTOR(12, 2, 0) rec[-10] rec[-30] +DETECTOR(12, 4, 0) rec[-9] rec[-29] +DETECTOR(2, 6, 0) rec[-8] rec[-28] +DETECTOR(6, 6, 0) rec[-7] rec[-27] +DETECTOR(10, 6, 0) rec[-6] rec[-26] +DETECTOR(14, 4, 0) rec[-5] rec[-25] +DETECTOR(12, 0, 0) rec[-4] rec[-24] +DETECTOR(8, 0, 0) rec[-3] rec[-23] +DETECTOR(4, 0, 0) rec[-2] rec[-22] +DETECTOR(0, 2, 0) rec[-1] rec[-21] +SHIFT_COORDS(0, 0, 1) +H 25 27 26 +DEPOLARIZE1(0.03) 25 27 26 +R 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 25 27 26 +DEPOLARIZE1(0.03) 25 27 26 +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 14 18 36 40 44 48 42 46 +DEPOLARIZE2(0.03) 8 12 16 20 14 18 36 40 44 48 42 46 +CX 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE2(0.03) 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 22 23 24 25 26 27 28 30 31 32 34 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 14 11 36 33 44 41 42 39 +DEPOLARIZE2(0.03) 8 5 16 13 14 11 36 33 44 41 42 39 +CX 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE2(0.03) 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 19 20 21 22 23 24 25 26 27 28 30 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 10 13 36 39 44 47 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 10 13 36 39 44 47 38 41 +CX 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 22 24 25 26 27 28 29 30 31 32 33 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 10 6 36 32 44 40 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 10 6 36 32 44 40 38 34 +CX 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 18 20 21 22 24 25 26 27 28 29 30 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-39] rec[-16] +DETECTOR(2, 4, 0) rec[-38] rec[-15] +DETECTOR(4, 2, 0) rec[-37] rec[-14] +DETECTOR(4, 4, 0) rec[-36] rec[-13] +DETECTOR(10, 2, 0) rec[-31] rec[-8] +DETECTOR(10, 4, 0) rec[-30] rec[-7] +DETECTOR(12, 2, 0) rec[-29] rec[-6] +DETECTOR(12, 4, 0) rec[-28] rec[-5] +DETECTOR(2, 6, 0) rec[-27] rec[-12] +DETECTOR(10, 6, 0) rec[-25] rec[-4] +DETECTOR(14, 4, 0) rec[-24] rec[-3] +DETECTOR(12, 0, 0) rec[-23] rec[-2] +DETECTOR(4, 0, 0) rec[-21] rec[-10] +DETECTOR(0, 2, 0) rec[-20] rec[-9] +DETECTOR(6, 4, 0) rec[-11] rec[-18] rec[-17] rec[-34] +DETECTOR(8, 2, 0) rec[-1] rec[-19] rec[-17] rec[-33] +SHIFT_COORDS(0, 0, 1) +R 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 14 18 36 40 44 48 42 46 +DEPOLARIZE2(0.03) 8 12 16 20 14 18 36 40 44 48 42 46 +CX 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE2(0.03) 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 22 23 24 25 26 27 28 30 31 32 34 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 14 11 36 33 44 41 42 39 +DEPOLARIZE2(0.03) 8 5 16 13 14 11 36 33 44 41 42 39 +CX 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE2(0.03) 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 19 20 21 22 23 24 25 26 27 28 30 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 10 13 36 39 44 47 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 10 13 36 39 44 47 38 41 +CX 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 22 24 25 26 27 28 29 30 31 32 33 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 10 6 36 32 44 40 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 10 6 36 32 44 40 38 34 +CX 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 18 20 21 22 24 25 26 27 28 29 30 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-16] rec[-32] +DETECTOR(2, 4, 0) rec[-15] rec[-31] +DETECTOR(4, 2, 0) rec[-14] rec[-30] +DETECTOR(4, 4, 0) rec[-13] rec[-29] +DETECTOR(2, 6, 0) rec[-12] rec[-28] +DETECTOR(6, 4, 0) rec[-11] rec[-27] +DETECTOR(4, 0, 0) rec[-10] rec[-26] +DETECTOR(0, 2, 0) rec[-9] rec[-25] +DETECTOR(10, 2, 0) rec[-8] rec[-24] +DETECTOR(10, 4, 0) rec[-7] rec[-23] +DETECTOR(12, 2, 0) rec[-6] rec[-22] +DETECTOR(12, 4, 0) rec[-5] rec[-21] +DETECTOR(10, 6, 0) rec[-4] rec[-20] +DETECTOR(14, 4, 0) rec[-3] rec[-19] +DETECTOR(12, 0, 0) rec[-2] rec[-18] +DETECTOR(8, 2, 0) rec[-1] rec[-17] +SHIFT_COORDS(0, 0, 1) +R 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +CZ 8 12 16 20 14 18 36 40 44 48 42 46 +DEPOLARIZE2(0.03) 8 12 16 20 14 18 36 40 44 48 42 46 +CX 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE2(0.03) 9 13 15 19 1 5 37 41 43 47 29 33 +DEPOLARIZE1(0.03) 0 2 3 4 6 7 10 11 17 21 22 23 24 25 26 27 28 30 31 32 34 35 38 39 45 49 50 51 52 +TICK +CZ 8 5 16 13 14 11 36 33 44 41 42 39 +DEPOLARIZE2(0.03) 8 5 16 13 14 11 36 33 44 41 42 39 +CX 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE2(0.03) 9 12 15 18 1 4 37 40 43 46 29 32 +DEPOLARIZE1(0.03) 0 2 3 6 7 10 17 19 20 21 22 23 24 25 26 27 28 30 31 34 35 38 45 47 48 49 50 51 52 +TICK +CZ 8 11 16 19 10 13 36 39 44 47 38 41 +DEPOLARIZE2(0.03) 8 11 16 19 10 13 36 39 44 47 38 41 +CX 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE2(0.03) 9 6 15 12 23 20 37 34 43 40 51 48 +DEPOLARIZE1(0.03) 0 1 2 3 4 5 7 14 17 18 21 22 24 25 26 27 28 29 30 31 32 33 35 42 45 46 49 50 52 +TICK +CZ 8 4 16 12 10 6 36 32 44 40 38 34 +DEPOLARIZE2(0.03) 8 4 16 12 10 6 36 32 44 40 38 34 +CX 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE2(0.03) 9 5 15 11 23 19 37 33 43 39 51 47 +DEPOLARIZE1(0.03) 0 1 2 3 7 13 14 17 18 20 21 22 24 25 26 27 28 29 30 31 35 41 42 45 46 48 49 50 52 +TICK +H 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +M(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 +DEPOLARIZE1(0.03) 8 9 15 16 10 23 14 1 36 37 43 44 38 51 42 29 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 25 26 27 28 30 31 32 33 34 35 39 40 41 45 46 47 48 49 50 52 +TICK +DETECTOR(2, 2, 0) rec[-16] rec[-32] +DETECTOR(2, 4, 0) rec[-15] rec[-31] +DETECTOR(4, 2, 0) rec[-14] rec[-30] +DETECTOR(4, 4, 0) rec[-13] rec[-29] +DETECTOR(2, 6, 0) rec[-12] rec[-28] +DETECTOR(6, 4, 0) rec[-11] rec[-27] +DETECTOR(4, 0, 0) rec[-10] rec[-26] +DETECTOR(0, 2, 0) rec[-9] rec[-25] +DETECTOR(10, 2, 0) rec[-8] rec[-24] +DETECTOR(10, 4, 0) rec[-7] rec[-23] +DETECTOR(12, 2, 0) rec[-6] rec[-22] +DETECTOR(12, 4, 0) rec[-5] rec[-21] +DETECTOR(10, 6, 0) rec[-4] rec[-20] +DETECTOR(14, 4, 0) rec[-3] rec[-19] +DETECTOR(12, 0, 0) rec[-2] rec[-18] +DETECTOR(8, 2, 0) rec[-1] rec[-17] +SHIFT_COORDS(0, 0, 1) +M(0.03) 4 5 6 11 12 13 18 19 20 32 33 34 39 40 41 46 47 48 +DEPOLARIZE1(0.03) 4 5 6 11 12 13 18 19 20 32 33 34 39 40 41 46 47 48 0 1 2 3 7 8 9 10 14 15 16 17 21 22 23 24 25 26 27 28 29 30 31 35 36 37 38 42 43 44 45 49 50 51 52 +TICK +DETECTOR(2, 2, 0) rec[-18] rec[-17] rec[-15] rec[-14] rec[-34] +DETECTOR(4, 4, 0) rec[-14] rec[-13] rec[-11] rec[-10] rec[-31] +DETECTOR(2, 6, 0) rec[-16] rec[-13] rec[-30] +DETECTOR(4, 0, 0) rec[-15] rec[-12] rec[-28] +DETECTOR(10, 2, 0) rec[-9] rec[-8] rec[-6] rec[-5] rec[-26] +DETECTOR(12, 4, 0) rec[-5] rec[-4] rec[-2] rec[-1] rec[-23] +DETECTOR(10, 6, 0) rec[-7] rec[-4] rec[-22] +DETECTOR(12, 0, 0) rec[-6] rec[-3] rec[-20] +SHIFT_COORDS(0, 0, 1) +OBSERVABLE_INCLUDE(1) rec[-10] rec[-11] rec[-12] +OBSERVABLE_INCLUDE(2) rec[-7] rec[-8] rec[-9] diff --git a/tests/reference_data/stim/circuit_noisy.stim b/tests/reference_data/stim/circuit_noisy.stim new file mode 100644 index 0000000..de839f1 --- /dev/null +++ b/tests/reference_data/stim/circuit_noisy.stim @@ -0,0 +1,1060 @@ +QUBIT_COORDS(3, 6) 0 +QUBIT_COORDS(3, 7) 1 +QUBIT_COORDS(4, 6) 2 +QUBIT_COORDS(4, 7) 3 +QUBIT_COORDS(4, 8) 4 +QUBIT_COORDS(4, 9) 5 +QUBIT_COORDS(5, 5) 6 +QUBIT_COORDS(5, 6) 7 +QUBIT_COORDS(5, 7) 8 +QUBIT_COORDS(5, 8) 9 +QUBIT_COORDS(5, 9) 10 +QUBIT_COORDS(6, 5) 11 +QUBIT_COORDS(6, 6) 12 +QUBIT_COORDS(6, 7) 13 +QUBIT_COORDS(6, 8) 14 +QUBIT_COORDS(7, 7) 15 +QUBIT_COORDS(7, 8) 16 +CX sweep[0] 1 sweep[1] 2 sweep[2] 4 sweep[3] 6 sweep[4] 8 sweep[5] 10 sweep[6] 12 sweep[7] 14 sweep[8] 15 +I 11 13 16 0 3 5 7 9 +TICK +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.000600771) 11 +DEPOLARIZE1(0.000626867) 13 +DEPOLARIZE1(0.00060985) 16 +DEPOLARIZE1(0.000634265) 0 +DEPOLARIZE1(0.00075907) 3 +DEPOLARIZE1(0.000600414) 5 +DEPOLARIZE1(0.00104224) 7 +DEPOLARIZE1(0.000741777) 9 +TICK +H 7 9 13 0 3 11 5 16 12 14 2 4 +I 6 10 8 15 1 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000882761) 6 +DEPOLARIZE1(0.000629601) 10 +DEPOLARIZE1(0.00062868) 8 +DEPOLARIZE1(0.000782386) 15 +DEPOLARIZE1(0.000668468) 1 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(4, 7, 0) rec[-7] +DETECTOR(6, 5, 0) rec[-3] +DETECTOR(4, 9, 0) rec[-6] +DETECTOR(6, 7, 0) rec[-2] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 1) rec[-8] rec[-16] +DETECTOR(4, 7, 1) rec[-7] rec[-15] +DETECTOR(4, 9, 1) rec[-6] rec[-14] +DETECTOR(5, 6, 1) rec[-5] rec[-13] +DETECTOR(5, 8, 1) rec[-4] rec[-12] +DETECTOR(6, 5, 1) rec[-3] rec[-11] +DETECTOR(6, 7, 1) rec[-2] rec[-10] +DETECTOR(7, 8, 1) rec[-1] rec[-9] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 2) rec[-8] rec[-16] +DETECTOR(4, 7, 2) rec[-7] rec[-15] +DETECTOR(4, 9, 2) rec[-6] rec[-14] +DETECTOR(5, 6, 2) rec[-5] rec[-13] +DETECTOR(5, 8, 2) rec[-4] rec[-12] +DETECTOR(6, 5, 2) rec[-3] rec[-11] +DETECTOR(6, 7, 2) rec[-2] rec[-10] +DETECTOR(7, 8, 2) rec[-1] rec[-9] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 3) rec[-8] rec[-16] +DETECTOR(4, 7, 3) rec[-7] rec[-15] +DETECTOR(4, 9, 3) rec[-6] rec[-14] +DETECTOR(5, 6, 3) rec[-5] rec[-13] +DETECTOR(5, 8, 3) rec[-4] rec[-12] +DETECTOR(6, 5, 3) rec[-3] rec[-11] +DETECTOR(6, 7, 3) rec[-2] rec[-10] +DETECTOR(7, 8, 3) rec[-1] rec[-9] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 12 14 2 4 +I 6 10 8 15 1 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000882761) 6 +DEPOLARIZE1(0.000629601) 10 +DEPOLARIZE1(0.00062868) 8 +DEPOLARIZE1(0.000782386) 15 +DEPOLARIZE1(0.000668468) 1 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +X_ERROR(0.0088925) 1 +X_ERROR(0.0227725) 2 +X_ERROR(0.0217725) 4 +X_ERROR(0.02023) 6 +X_ERROR(0.013775) 8 +X_ERROR(0.0255225) 10 +X_ERROR(0.013065) 12 +X_ERROR(0.01245) 14 +X_ERROR(0.017295) 15 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 4) rec[-8] rec[-16] +DETECTOR(4, 7, 4) rec[-7] rec[-15] +DETECTOR(4, 9, 4) rec[-6] rec[-14] +DETECTOR(5, 6, 4) rec[-5] rec[-13] +DETECTOR(5, 8, 4) rec[-4] rec[-12] +DETECTOR(6, 5, 4) rec[-3] rec[-11] +DETECTOR(6, 7, 4) rec[-2] rec[-10] +DETECTOR(7, 8, 4) rec[-1] rec[-9] +M 1 2 4 6 8 10 12 14 15 +DETECTOR(4, 7, 5) rec[-5] rec[-7] rec[-8] rec[-9] rec[-16] +DETECTOR(6, 5, 5) rec[-3] rec[-6] rec[-12] +DETECTOR(4, 9, 5) rec[-4] rec[-7] rec[-15] +DETECTOR(6, 7, 5) rec[-1] rec[-2] rec[-3] rec[-5] rec[-11] +OBSERVABLE_INCLUDE(0) rec[-6] rec[-8] rec[-9] +TICK diff --git a/tests/reference_data/stim/circuit_noisy_2_observables.stim b/tests/reference_data/stim/circuit_noisy_2_observables.stim new file mode 100644 index 0000000..36d3491 --- /dev/null +++ b/tests/reference_data/stim/circuit_noisy_2_observables.stim @@ -0,0 +1,1061 @@ +QUBIT_COORDS(3, 6) 0 +QUBIT_COORDS(3, 7) 1 +QUBIT_COORDS(4, 6) 2 +QUBIT_COORDS(4, 7) 3 +QUBIT_COORDS(4, 8) 4 +QUBIT_COORDS(4, 9) 5 +QUBIT_COORDS(5, 5) 6 +QUBIT_COORDS(5, 6) 7 +QUBIT_COORDS(5, 7) 8 +QUBIT_COORDS(5, 8) 9 +QUBIT_COORDS(5, 9) 10 +QUBIT_COORDS(6, 5) 11 +QUBIT_COORDS(6, 6) 12 +QUBIT_COORDS(6, 7) 13 +QUBIT_COORDS(6, 8) 14 +QUBIT_COORDS(7, 7) 15 +QUBIT_COORDS(7, 8) 16 +CX sweep[0] 1 sweep[1] 2 sweep[2] 4 sweep[3] 6 sweep[4] 8 sweep[5] 10 sweep[6] 12 sweep[7] 14 sweep[8] 15 +I 11 13 16 0 3 5 7 9 +TICK +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.000600771) 11 +DEPOLARIZE1(0.000626867) 13 +DEPOLARIZE1(0.00060985) 16 +DEPOLARIZE1(0.000634265) 0 +DEPOLARIZE1(0.00075907) 3 +DEPOLARIZE1(0.000600414) 5 +DEPOLARIZE1(0.00104224) 7 +DEPOLARIZE1(0.000741777) 9 +TICK +H 7 9 13 0 3 11 5 16 12 14 2 4 +I 6 10 8 15 1 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000882761) 6 +DEPOLARIZE1(0.000629601) 10 +DEPOLARIZE1(0.00062868) 8 +DEPOLARIZE1(0.000782386) 15 +DEPOLARIZE1(0.000668468) 1 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(4, 7, 0) rec[-7] +DETECTOR(6, 5, 0) rec[-3] +DETECTOR(4, 9, 0) rec[-6] +DETECTOR(6, 7, 0) rec[-2] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 1) rec[-8] rec[-16] +DETECTOR(4, 7, 1) rec[-7] rec[-15] +DETECTOR(4, 9, 1) rec[-6] rec[-14] +DETECTOR(5, 6, 1) rec[-5] rec[-13] +DETECTOR(5, 8, 1) rec[-4] rec[-12] +DETECTOR(6, 5, 1) rec[-3] rec[-11] +DETECTOR(6, 7, 1) rec[-2] rec[-10] +DETECTOR(7, 8, 1) rec[-1] rec[-9] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 2) rec[-8] rec[-16] +DETECTOR(4, 7, 2) rec[-7] rec[-15] +DETECTOR(4, 9, 2) rec[-6] rec[-14] +DETECTOR(5, 6, 2) rec[-5] rec[-13] +DETECTOR(5, 8, 2) rec[-4] rec[-12] +DETECTOR(6, 5, 2) rec[-3] rec[-11] +DETECTOR(6, 7, 2) rec[-2] rec[-10] +DETECTOR(7, 8, 2) rec[-1] rec[-9] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 3) rec[-8] rec[-16] +DETECTOR(4, 7, 3) rec[-7] rec[-15] +DETECTOR(4, 9, 3) rec[-6] rec[-14] +DETECTOR(5, 6, 3) rec[-5] rec[-13] +DETECTOR(5, 8, 3) rec[-4] rec[-12] +DETECTOR(6, 5, 3) rec[-3] rec[-11] +DETECTOR(6, 7, 3) rec[-2] rec[-10] +DETECTOR(7, 8, 3) rec[-1] rec[-9] +I 6 10 12 8 15 2 1 4 14 +TICK +DEPOLARIZE1(0.0365004) 6 +DEPOLARIZE1(0.0256152) 10 +DEPOLARIZE1(0.0204914) 12 +DEPOLARIZE1(0.019834) 8 +DEPOLARIZE1(0.026165) 15 +DEPOLARIZE1(0.0344119) 2 +DEPOLARIZE1(0.0269394) 1 +DEPOLARIZE1(0.0219985) 4 +DEPOLARIZE1(0.0281463) 14 +TICK +R 7 9 13 0 3 11 5 16 +I 6 10 12 8 15 2 1 4 14 +TICK +X_ERROR(0.000625) 7 +X_ERROR(0) 9 +X_ERROR(0.0011) 13 +X_ERROR(0.0019625) 0 +X_ERROR(0.0010375) 3 +X_ERROR(0.0013375) 11 +X_ERROR(0.0031875) 5 +X_ERROR(0.0009625) 16 +DEPOLARIZE1(0) 6 10 12 8 15 2 1 4 14 +TICK +H 7 9 13 0 3 11 5 16 +X 12 15 2 4 14 1 6 10 8 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 16 14 3 1 9 4 13 8 11 6 7 2 +I 0 5 10 12 15 +TICK +DEPOLARIZE2(0.00614261) 16 14 +DEPOLARIZE2(0.00579579) 3 1 +DEPOLARIZE2(0.00741657) 9 4 +DEPOLARIZE2(0.00469027) 13 8 +DEPOLARIZE2(0.0049062) 11 6 +DEPOLARIZE2(0.00333026) 7 2 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00125621) 12 +DEPOLARIZE1(0.00106404) 15 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 11 12 9 8 16 15 13 14 3 4 7 6 +I 0 5 10 2 1 +TICK +DEPOLARIZE2(0.00559241) 11 12 +DEPOLARIZE2(0.0066335) 9 8 +DEPOLARIZE2(0.00387344) 16 15 +DEPOLARIZE2(0.00890717) 13 14 +DEPOLARIZE2(0.00311301) 3 4 +DEPOLARIZE2(0.00437718) 7 6 +DEPOLARIZE1(0.000862601) 0 +DEPOLARIZE1(0.000816562) 5 +DEPOLARIZE1(0.000856257) 10 +DEPOLARIZE1(0.00098746) 2 +DEPOLARIZE1(0.000909117) 1 +TICK +X 12 15 2 7 4 9 14 1 13 0 6 3 11 5 10 16 8 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.000624751) 8 +TICK +CZ 9 10 0 1 5 4 13 12 3 2 7 8 +I 11 16 6 15 14 +TICK +DEPOLARIZE2(0.00548036) 9 10 +DEPOLARIZE2(0.00862998) 0 1 +DEPOLARIZE2(0.00493045) 5 4 +DEPOLARIZE2(0.00662996) 13 12 +DEPOLARIZE2(0.00480328) 3 2 +DEPOLARIZE2(0.00589078) 7 8 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.00106404) 15 +DEPOLARIZE1(0.00152931) 14 +TICK +H 12 15 2 4 14 1 6 10 8 +X 7 9 13 0 3 11 5 16 +TICK +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.00136052) 15 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00159105) 1 +DEPOLARIZE1(0.0016446) 6 +DEPOLARIZE1(0.00105136) 10 +DEPOLARIZE1(0.000624751) 8 +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +TICK +CZ 13 15 3 8 0 2 5 10 9 14 7 12 +I 11 16 6 1 4 +TICK +DEPOLARIZE2(0.00519429) 13 15 +DEPOLARIZE2(0.00482126) 3 8 +DEPOLARIZE2(0.00984739) 0 2 +DEPOLARIZE2(0.0148873) 5 10 +DEPOLARIZE2(0.00739917) 9 14 +DEPOLARIZE2(0.00619068) 7 12 +DEPOLARIZE1(0.000817048) 11 +DEPOLARIZE1(0.000829396) 16 +DEPOLARIZE1(0.00120056) 6 +DEPOLARIZE1(0.000909117) 1 +DEPOLARIZE1(0.000977015) 4 +TICK +H 7 9 13 0 3 11 5 16 12 14 2 4 +I 6 10 8 15 1 +TICK +DEPOLARIZE1(0.0011097) 7 +DEPOLARIZE1(0.00117823) 9 +DEPOLARIZE1(0.000986757) 13 +DEPOLARIZE1(0.000836134) 0 +DEPOLARIZE1(0.000868499) 3 +DEPOLARIZE1(0.000869895) 11 +DEPOLARIZE1(0.00133574) 5 +DEPOLARIZE1(0.00141909) 16 +DEPOLARIZE1(0.00106992) 12 +DEPOLARIZE1(0.000779938) 14 +DEPOLARIZE1(0.00220941) 2 +DEPOLARIZE1(0.00120828) 4 +DEPOLARIZE1(0.000882761) 6 +DEPOLARIZE1(0.000629601) 10 +DEPOLARIZE1(0.00062868) 8 +DEPOLARIZE1(0.000782386) 15 +DEPOLARIZE1(0.000668468) 1 +TICK +X_ERROR(0.0207225) 0 +X_ERROR(0.016335) 3 +X_ERROR(0.0222725) 5 +X_ERROR(0.01578) 7 +X_ERROR(0.01822) 9 +X_ERROR(0.01738) 11 +X_ERROR(0.014765) 13 +X_ERROR(0.018365) 16 +X_ERROR(0.0088925) 1 +X_ERROR(0.0227725) 2 +X_ERROR(0.0217725) 4 +X_ERROR(0.02023) 6 +X_ERROR(0.013775) 8 +X_ERROR(0.0255225) 10 +X_ERROR(0.013065) 12 +X_ERROR(0.01245) 14 +X_ERROR(0.017295) 15 +TICK +M 0 3 5 7 9 11 13 16 +DETECTOR(3, 6, 4) rec[-8] rec[-16] +DETECTOR(4, 7, 4) rec[-7] rec[-15] +DETECTOR(4, 9, 4) rec[-6] rec[-14] +DETECTOR(5, 6, 4) rec[-5] rec[-13] +DETECTOR(5, 8, 4) rec[-4] rec[-12] +DETECTOR(6, 5, 4) rec[-3] rec[-11] +DETECTOR(6, 7, 4) rec[-2] rec[-10] +DETECTOR(7, 8, 4) rec[-1] rec[-9] +M 1 2 4 6 8 10 12 14 15 +DETECTOR(4, 7, 5) rec[-5] rec[-7] rec[-8] rec[-9] rec[-16] +DETECTOR(6, 5, 5) rec[-3] rec[-6] rec[-12] +DETECTOR(4, 9, 5) rec[-4] rec[-7] rec[-15] +DETECTOR(6, 7, 5) rec[-1] rec[-2] rec[-3] rec[-5] rec[-11] +OBSERVABLE_INCLUDE(0) rec[-6] rec[-8] rec[-9] +OBSERVABLE_INCLUDE(1) rec[-6] rec[-8] rec[-9] +TICK diff --git a/tests/reference_data/stim/circuit_two_equivalent_logicals.stim b/tests/reference_data/stim/circuit_two_equivalent_logicals.stim new file mode 100644 index 0000000..7245e1e --- /dev/null +++ b/tests/reference_data/stim/circuit_two_equivalent_logicals.stim @@ -0,0 +1,125 @@ +QUBIT_COORDS(0, 0) 0 +QUBIT_COORDS(0, 2) 1 +QUBIT_COORDS(0, 4) 2 +QUBIT_COORDS(0, 6) 3 +QUBIT_COORDS(1, 1) 4 +QUBIT_COORDS(1, 3) 5 +QUBIT_COORDS(1, 5) 6 +QUBIT_COORDS(2, 0) 7 +QUBIT_COORDS(2, 2) 8 +QUBIT_COORDS(2, 4) 9 +QUBIT_COORDS(2, 6) 10 +QUBIT_COORDS(3, 1) 11 +QUBIT_COORDS(3, 3) 12 +QUBIT_COORDS(3, 5) 13 +QUBIT_COORDS(4, 0) 14 +QUBIT_COORDS(4, 2) 15 +QUBIT_COORDS(4, 4) 16 +QUBIT_COORDS(4, 6) 17 +QUBIT_COORDS(5, 1) 18 +QUBIT_COORDS(5, 3) 19 +QUBIT_COORDS(5, 5) 20 +QUBIT_COORDS(6, 0) 21 +QUBIT_COORDS(6, 2) 22 +QUBIT_COORDS(6, 4) 23 +QUBIT_COORDS(6, 6) 24 +R 4 5 6 11 12 13 18 19 20 +DEPOLARIZE1(0.01) 4 5 6 11 12 13 18 19 20 0 1 2 3 7 8 9 10 14 15 16 17 21 22 23 24 +TICK +R 8 9 15 16 10 23 14 1 +DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 +TICK +H 8 9 15 16 10 23 14 1 +DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 +TICK +CZ 8 12 16 20 14 18 +DEPOLARIZE2(0.1) 8 12 16 20 14 18 +CX 9 13 15 19 1 5 +DEPOLARIZE2(0.1) 9 13 15 19 1 5 +DEPOLARIZE1(0.01) 0 2 3 4 6 7 10 11 17 21 22 23 24 +TICK +CZ 8 5 16 13 14 11 +DEPOLARIZE2(0.1) 8 5 16 13 14 11 +CX 9 12 15 18 1 4 +DEPOLARIZE2(0.1) 9 12 15 18 1 4 +DEPOLARIZE1(0.01) 0 2 3 6 7 10 17 19 20 21 22 23 24 +TICK +CZ 8 11 16 19 10 13 +DEPOLARIZE2(0.1) 8 11 16 19 10 13 +CX 9 6 15 12 23 20 +DEPOLARIZE2(0.1) 9 6 15 12 23 20 +DEPOLARIZE1(0.01) 0 1 2 3 4 5 7 14 17 18 21 22 24 +TICK +CZ 8 4 16 12 10 6 +DEPOLARIZE2(0.1) 8 4 16 12 10 6 +CX 9 5 15 11 23 19 +DEPOLARIZE2(0.1) 9 5 15 11 23 19 +DEPOLARIZE1(0.01) 0 1 2 3 7 13 14 17 18 20 21 22 24 +TICK +H 8 9 15 16 10 23 14 1 +DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 +TICK +M(0.1) 8 9 15 16 10 23 14 1 +DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 +TICK +DETECTOR(2, 2, 0) rec[-8] +DETECTOR(2, 6, 0) rec[-4] +DETECTOR(4, 0, 0) rec[-2] +DETECTOR(4, 4, 0) rec[-5] +SHIFT_COORDS(0, 0, 1) +REPEAT 2 { + R 8 9 15 16 10 23 14 1 + DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 + TICK + H 8 9 15 16 10 23 14 1 + DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 + TICK + CZ 8 12 16 20 14 18 + DEPOLARIZE2(0.1) 8 12 16 20 14 18 + CX 9 13 15 19 1 5 + DEPOLARIZE2(0.1) 9 13 15 19 1 5 + DEPOLARIZE1(0.01) 0 2 3 4 6 7 10 11 17 21 22 23 24 + TICK + CZ 8 5 16 13 14 11 + DEPOLARIZE2(0.1) 8 5 16 13 14 11 + CX 9 12 15 18 1 4 + DEPOLARIZE2(0.1) 9 12 15 18 1 4 + DEPOLARIZE1(0.01) 0 2 3 6 7 10 17 19 20 21 22 23 24 + TICK + CZ 8 11 16 19 10 13 + DEPOLARIZE2(0.1) 8 11 16 19 10 13 + CX 9 6 15 12 23 20 + DEPOLARIZE2(0.1) 9 6 15 12 23 20 + DEPOLARIZE1(0.01) 0 1 2 3 4 5 7 14 17 18 21 22 24 + TICK + CZ 8 4 16 12 10 6 + DEPOLARIZE2(0.1) 8 4 16 12 10 6 + CX 9 5 15 11 23 19 + DEPOLARIZE2(0.1) 9 5 15 11 23 19 + DEPOLARIZE1(0.01) 0 1 2 3 7 13 14 17 18 20 21 22 24 + TICK + H 8 9 15 16 10 23 14 1 + DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 + TICK + M(0.1) 8 9 15 16 10 23 14 1 + DEPOLARIZE1(0.01) 8 9 15 16 10 23 14 1 0 2 3 4 5 6 7 11 12 13 17 18 19 20 21 22 24 + TICK + DETECTOR(2, 2, 0) rec[-8] rec[-16] + DETECTOR(2, 4, 0) rec[-7] rec[-15] + DETECTOR(4, 2, 0) rec[-6] rec[-14] + DETECTOR(4, 4, 0) rec[-5] rec[-13] + DETECTOR(2, 6, 0) rec[-4] rec[-12] + DETECTOR(6, 4, 0) rec[-3] rec[-11] + DETECTOR(4, 0, 0) rec[-2] rec[-10] + DETECTOR(0, 2, 0) rec[-1] rec[-9] + SHIFT_COORDS(0, 0, 1) +} +M(0.1) 4 5 6 11 12 13 18 19 20 +DEPOLARIZE1(0.01) 4 5 6 11 12 13 18 19 20 0 1 2 3 7 8 9 10 14 15 16 17 21 22 23 24 +TICK +OBSERVABLE_INCLUDE(0) rec[-7] rec[-8] rec[-9] +OBSERVABLE_INCLUDE(1) rec[-1] rec[-2] rec[-3] +DETECTOR(2, 2, 0) rec[-5] rec[-6] rec[-8] rec[-9] rec[-17] +DETECTOR(4, 4, 0) rec[-1] rec[-2] rec[-4] rec[-5] rec[-14] +DETECTOR(2, 6, 0) rec[-4] rec[-7] rec[-13] +DETECTOR(4, 0, 0) rec[-3] rec[-6] rec[-11] diff --git a/tests/reference_data/stim/qmem_rplanar_5x5x5_perr_0.001_pl_0.0001_with_wiggling.stim b/tests/reference_data/stim/qmem_rplanar_5x5x5_perr_0.001_pl_0.0001_with_wiggling.stim new file mode 100644 index 0000000..09e8d3d --- /dev/null +++ b/tests/reference_data/stim/qmem_rplanar_5x5x5_perr_0.001_pl_0.0001_with_wiggling.stim @@ -0,0 +1,503 @@ +QUBIT_COORDS(4, 0) 0 +QUBIT_COORDS(3, -1) 1 +QUBIT_COORDS(3, 1) 2 +QUBIT_COORDS(3, 7) 3 +QUBIT_COORDS(4, 6) 4 +QUBIT_COORDS(5, 1) 5 +QUBIT_COORDS(8, 0) 6 +QUBIT_COORDS(5, 7) 7 +QUBIT_COORDS(9, 5) 8 +QUBIT_COORDS(0, 2) 9 +QUBIT_COORDS(8, 6) 10 +QUBIT_COORDS(2, 2) 11 +QUBIT_COORDS(0, 8) 12 +QUBIT_COORDS(1, 3) 13 +QUBIT_COORDS(1, 9) 14 +QUBIT_COORDS(2, 8) 15 +QUBIT_COORDS(7, -1) 16 +QUBIT_COORDS(6, 2) 17 +QUBIT_COORDS(7, 1) 18 +QUBIT_COORDS(7, 7) 19 +QUBIT_COORDS(-1, 1) 20 +QUBIT_COORDS(6, 8) 21 +QUBIT_COORDS(4, 2) 22 +QUBIT_COORDS(3, 3) 23 +QUBIT_COORDS(3, 9) 24 +QUBIT_COORDS(4, 8) 25 +QUBIT_COORDS(5, 3) 26 +QUBIT_COORDS(8, 2) 27 +QUBIT_COORDS(5, 9) 28 +QUBIT_COORDS(9, 1) 29 +QUBIT_COORDS(9, 7) 30 +QUBIT_COORDS(8, 8) 31 +QUBIT_COORDS(2, 4) 32 +QUBIT_COORDS(0, 4) 33 +QUBIT_COORDS(10, 8) 34 +QUBIT_COORDS(1, 5) 35 +QUBIT_COORDS(2, 10) 36 +QUBIT_COORDS(6, 4) 37 +QUBIT_COORDS(7, 3) 38 +QUBIT_COORDS(7, 9) 39 +QUBIT_COORDS(6, 10) 40 +QUBIT_COORDS(3, 5) 41 +QUBIT_COORDS(4, 4) 42 +QUBIT_COORDS(5, 5) 43 +QUBIT_COORDS(8, 4) 44 +QUBIT_COORDS(9, 3) 45 +QUBIT_COORDS(0, 0) 46 +QUBIT_COORDS(9, 9) 47 +QUBIT_COORDS(10, 4) 48 +QUBIT_COORDS(1, 1) 49 +QUBIT_COORDS(2, 0) 50 +QUBIT_COORDS(0, 6) 51 +QUBIT_COORDS(1, 7) 52 +QUBIT_COORDS(2, 6) 53 +QUBIT_COORDS(6, 0) 54 +QUBIT_COORDS(6, 6) 55 +QUBIT_COORDS(7, 5) 56 +QUBIT_COORDS(-1, 5) 57 +R 7 41 8 26 28 52 2 19 29 43 13 38 39 14 30 3 5 56 35 23 45 24 47 49 18 32 15 22 4 37 21 27 10 34 48 9 51 11 53 42 25 17 55 44 31 36 40 6 0 +TICK +DEPOLARIZE1(0.002) 16 1 33 46 20 50 54 12 57 +RELAX(0.004) 16 1 33 46 20 50 54 12 57 +RELAX(0.0002) 16 1 33 46 20 50 54 12 57 +X_ERROR(0.002) 7 41 8 26 28 52 2 19 29 43 13 38 39 14 30 3 5 56 35 23 45 24 47 49 18 32 15 22 4 37 21 27 10 34 48 9 51 11 53 42 25 17 55 44 31 36 40 6 0 +LEAKAGE(0.0001) 7 41 8 26 28 52 2 19 29 43 13 38 39 14 30 3 5 56 35 23 45 24 47 49 18 32 15 22 4 37 21 27 10 34 48 9 51 11 53 42 25 17 55 44 31 36 40 6 0 +DEPOLARIZE1(0.0001) 1 12 16 20 33 46 50 54 57 +H 0 4 6 7 9 10 11 13 15 17 21 22 24 25 26 27 30 31 32 37 39 41 42 44 45 51 52 53 55 56 35 49 14 34 36 40 48 +TICK +DEPOLARIZE1(0.0001) 0 4 6 7 9 10 11 13 15 17 21 22 24 25 26 27 30 31 32 37 39 41 42 44 45 51 52 53 55 56 35 49 14 34 36 40 48 +RELAX(0.0002) 0 4 6 7 9 10 11 13 15 17 21 22 24 25 26 27 30 31 32 37 39 41 42 44 45 51 52 53 55 56 35 49 14 34 36 40 48 1 2 3 5 8 12 16 18 19 20 23 28 29 33 38 43 46 47 50 54 57 +DEPOLARIZE1(0.0001) 1 2 3 5 8 12 16 18 19 20 23 28 29 33 38 43 46 47 50 54 57 +CZ 32 41 15 24 22 26 4 7 37 56 21 39 27 45 10 30 9 13 51 52 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +TICK +DEPOLARIZE2(0.001) 32 41 15 24 22 26 4 7 37 56 21 39 27 45 10 30 9 13 51 52 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +LEAKAGE(0.0001) 32 41 15 24 22 26 4 7 37 56 21 39 27 45 10 30 9 13 51 52 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +RELAX(0.0001) 32 41 15 24 22 26 4 7 37 56 21 39 27 45 10 30 9 13 51 52 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +RELAX(0.0002) 16 1 18 33 34 2 20 35 36 46 48 49 50 40 54 12 14 57 +DEPOLARIZE1(0.0001) 1 2 12 14 16 18 20 33 34 35 36 40 46 48 49 50 54 57 +H 3 5 7 8 13 19 23 24 26 29 38 39 41 43 52 56 28 30 45 47 +TICK +DEPOLARIZE1(0.0001) 3 5 7 8 13 19 23 24 26 29 38 39 41 43 52 56 28 30 45 47 +RELAX(0.0002) 3 5 7 8 13 19 23 24 26 29 38 39 41 43 52 56 28 30 45 47 0 1 2 4 6 9 10 11 12 14 15 16 17 18 20 21 22 25 27 31 32 33 34 35 36 37 40 42 44 46 48 49 50 51 53 54 55 57 +DEPOLARIZE1(0.0001) 0 1 2 4 6 9 10 11 12 14 15 16 17 18 20 21 22 25 27 31 32 33 34 35 36 37 40 42 44 46 48 49 50 51 53 54 55 57 +CZ 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +TICK +DEPOLARIZE2(0.001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +LEAKAGE(0.0001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +RELAX(0.0001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +RELAX(0.0002) 16 1 33 34 45 46 20 36 47 48 50 40 54 28 12 30 14 57 +DEPOLARIZE1(0.0001) 1 12 14 16 20 28 30 33 34 36 40 45 46 47 48 50 54 57 +CZ 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +TICK +DEPOLARIZE2(0.001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +LEAKAGE(0.0001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +RELAX(0.0001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +RELAX(0.0002) 16 0 1 33 46 20 49 50 5 6 51 9 52 54 12 29 13 57 +DEPOLARIZE1(0.0001) 0 1 5 6 9 12 13 16 20 29 33 46 49 50 51 52 54 57 +H 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 0 6 9 51 24 39 +TICK +DEPOLARIZE1(0.0001) 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 0 6 9 51 24 39 +RELAX(0.0002) 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 0 6 9 51 24 39 1 4 8 10 11 12 15 16 17 20 21 22 25 27 29 31 32 33 34 36 37 40 42 44 46 47 48 50 53 54 55 57 +DEPOLARIZE1(0.0001) 1 4 8 10 11 12 15 16 17 20 21 22 25 27 29 31 32 33 34 36 37 40 42 44 46 47 48 50 53 54 55 57 +CZ 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +TICK +DEPOLARIZE2(0.001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +LEAKAGE(0.0001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +RELAX(0.0001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +RELAX(0.0002) 16 0 1 33 46 47 20 50 6 51 39 8 9 24 54 12 29 57 +DEPOLARIZE1(0.0001) 0 1 6 8 9 12 16 20 24 29 33 39 46 47 50 51 54 57 +H 4 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 53 55 +TICK +DEPOLARIZE1(0.0001) 4 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 53 55 +RELAX(0.0002) 4 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 53 55 0 1 2 3 5 6 7 8 9 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 51 52 54 56 57 +DEPOLARIZE1(0.0001) 0 1 2 3 5 6 7 8 9 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 51 52 54 56 57 +M(0.005) 32 15 22 4 37 21 27 10 34 48 9 51 11 53 42 25 17 55 44 31 36 40 6 0 +TICK +DEPOLARIZE1(0.002) 1 2 3 5 7 8 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 52 54 56 57 +RELAX(0.004) 1 2 3 5 7 8 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 52 54 56 57 +RELAX(0.0002) 1 2 3 5 7 8 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 52 54 56 57 +DETECTOR(2, 2, 0) rec[-12] +DETECTOR(2, 6, 0) rec[-11] +DETECTOR(4, 4, 0) rec[-10] +DETECTOR(4, 8, 0) rec[-9] +DETECTOR(6, 2, 0) rec[-8] +DETECTOR(6, 6, 0) rec[-7] +DETECTOR(8, 4, 0) rec[-6] +DETECTOR(8, 8, 0) rec[-5] +DETECTOR(2, 10, 0) rec[-4] +DETECTOR(6, 10, 0) rec[-3] +DETECTOR(8, 0, 0) rec[-2] +DETECTOR(4, 0, 0) rec[-1] +SHIFT_COORDS(0, 0, 1) +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 52 54 56 57 +R 15 21 6 44 31 9 51 50 32 22 4 54 37 10 27 20 57 46 33 11 53 0 42 17 55 12 25 16 1 +TICK +DEPOLARIZE1(0.002) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +RELAX(0.004) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +RELAX(0.0002) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +X_ERROR(0.002) 15 21 6 44 31 9 51 50 32 22 4 54 37 10 27 20 57 46 33 11 53 0 42 17 55 12 25 16 1 +LEAKAGE(0.0001) 15 21 6 44 31 9 51 50 32 22 4 54 37 10 27 20 57 46 33 11 53 0 42 17 55 12 25 16 1 +DEPOLARIZE1(0.0001) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +H 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 1 16 20 57 +TICK +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 1 16 20 57 +RELAX(0.0002) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 1 16 20 57 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +DEPOLARIZE1(0.0001) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +CZ 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +TICK +DEPOLARIZE2(0.001) 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +LEAKAGE(0.0001) 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +RELAX(0.0001) 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +RELAX(0.0002) 16 1 34 20 36 48 40 57 +DEPOLARIZE1(0.0001) 1 16 20 34 36 40 48 57 +H 2 3 5 7 13 14 18 19 23 26 28 30 31 35 38 41 43 44 45 49 52 56 6 8 24 29 39 47 +TICK +DEPOLARIZE1(0.0001) 2 3 5 7 13 14 18 19 23 26 28 30 31 35 38 41 43 44 45 49 52 56 6 8 24 29 39 47 +RELAX(0.0002) 2 3 5 7 13 14 18 19 23 26 28 30 31 35 38 41 43 44 45 49 52 56 6 8 24 29 39 47 0 1 4 9 10 11 12 15 16 17 20 21 22 25 27 32 33 34 36 37 40 42 46 48 50 51 53 54 55 57 +DEPOLARIZE1(0.0001) 0 1 4 9 10 11 12 15 16 17 20 21 22 25 27 32 33 34 36 37 40 42 46 48 50 51 53 54 55 57 +CZ 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +TICK +DEPOLARIZE2(0.001) 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +LEAKAGE(0.0001) 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +RELAX(0.0001) 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +RELAX(0.0002) 16 0 1 34 46 47 20 36 48 6 51 39 8 9 24 40 29 57 +DEPOLARIZE1(0.0001) 0 1 6 8 9 16 20 24 29 34 36 39 40 46 47 48 51 57 +CZ 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +TICK +DEPOLARIZE2(0.001) 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +LEAKAGE(0.0001) 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +RELAX(0.0001) 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +RELAX(0.0002) 31 34 45 47 48 36 39 8 28 24 40 10 25 27 12 29 30 14 +DEPOLARIZE1(0.0001) 8 10 12 14 24 25 27 28 29 30 31 34 36 39 40 45 47 48 +H 0 4 6 9 11 15 17 21 22 32 37 42 44 51 53 55 10 25 27 31 14 28 30 45 50 54 +TICK +DEPOLARIZE1(0.0001) 0 4 6 9 11 15 17 21 22 32 37 42 44 51 53 55 10 25 27 31 14 28 30 45 50 54 +RELAX(0.0002) 0 4 6 9 11 15 17 21 22 32 37 42 44 51 53 55 10 25 27 31 14 28 30 45 50 54 1 2 3 5 7 8 12 13 16 18 19 20 23 24 26 29 33 34 35 36 38 39 40 41 43 46 47 48 49 52 56 57 +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 12 13 16 18 19 20 23 24 26 29 33 34 35 36 38 39 40 41 43 46 47 48 49 52 56 57 +CZ 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +TICK +DEPOLARIZE2(0.001) 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +LEAKAGE(0.0001) 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +RELAX(0.0001) 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +RELAX(0.0002) 33 34 45 46 47 36 48 50 39 8 24 40 54 28 12 29 30 14 +DEPOLARIZE1(0.0001) 8 12 14 24 28 29 30 33 34 36 39 40 45 46 47 48 50 54 +H 1 2 3 5 7 13 16 18 19 20 23 26 35 38 41 43 49 52 56 57 +TICK +DEPOLARIZE1(0.0001) 1 2 3 5 7 13 16 18 19 20 23 26 35 38 41 43 49 52 56 57 +RELAX(0.0002) 1 2 3 5 7 13 16 18 19 20 23 26 35 38 41 43 49 52 56 57 0 4 6 8 9 10 11 12 14 15 17 21 22 24 25 28 27 29 30 31 32 33 34 36 37 39 40 42 44 45 46 47 48 50 51 53 54 55 +DEPOLARIZE1(0.0001) 0 4 6 8 9 10 11 12 14 15 17 21 22 24 25 27 28 29 30 31 32 33 34 36 37 39 40 42 44 45 46 47 48 50 51 53 54 55 +M(0.005) 24 39 29 8 47 13 52 2 41 26 7 18 56 30 45 20 57 49 35 23 3 5 43 38 19 14 28 16 1 +TICK +DEPOLARIZE1(0.002) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +RELAX(0.004) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +RELAX(0.0002) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +DETECTOR(2, 4, 0) rec[-24] rec[-53] +DETECTOR(2, 8, 0) rec[-23] rec[-52] +DETECTOR(4, 2, 0) rec[-22] rec[-51] +DETECTOR(4, 6, 0) rec[-21] rec[-50] +DETECTOR(6, 4, 0) rec[-20] rec[-49] +DETECTOR(6, 8, 0) rec[-48] rec[-19] +DETECTOR(8, 2, 0) rec[-47] rec[-18] +DETECTOR(8, 6, 0) rec[-46] rec[-17] +DETECTOR(10, 8, 0) rec[-16] rec[-45] +DETECTOR(10, 4, 0) rec[-15] rec[-44] +DETECTOR(0, 2, 0) rec[-14] rec[-43] +DETECTOR(0, 6, 0) rec[-13] rec[-42] +DETECTOR(2, 2, 0) rec[-12] rec[-41] +DETECTOR(2, 6, 0) rec[-40] rec[-11] +DETECTOR(4, 4, 0) rec[-39] rec[-10] +DETECTOR(4, 8, 0) rec[-38] rec[-29] rec[-9] +DETECTOR(6, 2, 0) rec[-8] rec[-37] +DETECTOR(6, 6, 0) rec[-7] rec[-36] +DETECTOR(8, 4, 0) rec[-6] rec[-35] rec[-26] +DETECTOR(8, 8, 0) rec[-5] rec[-28] rec[-34] rec[-25] +DETECTOR(2, 10, 0) rec[-29] rec[-4] rec[-33] +DETECTOR(6, 10, 0) rec[-32] rec[-28] rec[-3] +DETECTOR(8, 0, 0) rec[-31] rec[-27] rec[-2] +DETECTOR(4, 0, 0) rec[-30] rec[-1] +OBSERVABLE_INCLUDE(0) +SHIFT_COORDS(0, 0, 1) +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +R 49 35 14 2 18 41 24 26 7 56 39 45 30 34 48 13 52 23 3 43 28 38 19 8 47 36 40 29 5 +TICK +DEPOLARIZE1(0.002) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +RELAX(0.004) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +RELAX(0.0002) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +X_ERROR(0.002) 49 35 14 2 18 41 24 26 7 56 39 45 30 34 48 13 52 23 3 43 28 38 19 8 47 36 40 29 5 +LEAKAGE(0.0001) 49 35 14 2 18 41 24 26 7 56 39 45 30 34 48 13 52 23 3 43 28 38 19 8 47 36 40 29 5 +DEPOLARIZE1(0.0001) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +H 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 34 36 40 48 +TICK +DEPOLARIZE1(0.0001) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 34 36 40 48 +RELAX(0.0002) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 34 36 40 48 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +DEPOLARIZE1(0.0001) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +CZ 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +TICK +DEPOLARIZE2(0.001) 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +LEAKAGE(0.0001) 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +RELAX(0.0001) 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +RELAX(0.0002) 16 1 34 20 36 48 40 57 +DEPOLARIZE1(0.0001) 1 16 20 34 36 40 48 57 +H 0 4 6 9 10 11 15 17 21 22 25 27 31 32 35 37 42 44 49 51 53 55 14 12 33 46 50 54 +TICK +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 15 17 21 22 25 27 31 32 35 37 42 44 49 51 53 55 14 12 33 46 50 54 +RELAX(0.0002) 0 4 6 9 10 11 15 17 21 22 25 27 31 32 35 37 42 44 49 51 53 55 14 12 33 46 50 54 1 2 3 5 7 8 13 16 18 19 20 23 24 26 28 29 30 34 36 38 39 40 41 43 45 47 48 52 56 57 +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 13 16 18 19 20 23 24 26 28 29 30 34 36 38 39 40 41 43 45 47 48 52 56 57 +CZ 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +TICK +DEPOLARIZE2(0.001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +LEAKAGE(0.0001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +RELAX(0.0001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +RELAX(0.0002) 16 1 33 34 45 46 20 36 47 48 50 40 54 28 12 30 14 57 +DEPOLARIZE1(0.0001) 1 12 14 16 20 28 30 33 34 36 40 45 46 47 48 50 54 57 +CZ 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +TICK +DEPOLARIZE2(0.001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +LEAKAGE(0.0001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +RELAX(0.0001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +RELAX(0.0002) 16 0 1 33 46 20 49 50 5 6 51 9 52 54 12 29 13 57 +DEPOLARIZE1(0.0001) 0 1 5 6 9 12 13 16 20 29 33 46 49 50 51 52 54 57 +H 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 0 6 9 51 24 39 +TICK +DEPOLARIZE1(0.0001) 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 0 6 9 51 24 39 +RELAX(0.0002) 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 0 6 9 51 24 39 1 4 8 10 11 12 15 16 17 20 21 22 25 27 29 31 32 33 34 36 37 40 42 44 46 47 48 50 53 54 55 57 +DEPOLARIZE1(0.0001) 1 4 8 10 11 12 15 16 17 20 21 22 25 27 29 31 32 33 34 36 37 40 42 44 46 47 48 50 53 54 55 57 +CZ 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +TICK +DEPOLARIZE2(0.001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +LEAKAGE(0.0001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +RELAX(0.0001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +RELAX(0.0002) 16 0 1 33 46 47 20 50 6 51 39 8 9 24 54 12 29 57 +DEPOLARIZE1(0.0001) 0 1 6 8 9 12 16 20 24 29 33 39 46 47 50 51 54 57 +H 4 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 53 55 +TICK +DEPOLARIZE1(0.0001) 4 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 53 55 +RELAX(0.0002) 4 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 53 55 0 1 2 3 5 6 7 8 9 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 51 52 54 56 57 +DEPOLARIZE1(0.0001) 0 1 2 3 5 6 7 8 9 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 51 52 54 56 57 +M(0.005) 46 33 12 50 54 32 15 22 4 37 21 27 10 34 48 9 51 11 53 42 25 17 55 44 31 36 40 6 0 +TICK +DEPOLARIZE1(0.002) 1 2 3 5 7 8 13 14 16 18 19 20 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 57 +RELAX(0.004) 1 2 3 5 7 8 13 14 16 18 19 20 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 57 +RELAX(0.0002) 1 2 3 5 7 8 13 14 16 18 19 20 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 57 +DETECTOR(2, 4, 0) rec[-24] rec[-53] +DETECTOR(2, 8, 0) rec[-23] rec[-52] +DETECTOR(4, 2, 0) rec[-22] rec[-51] +DETECTOR(4, 6, 0) rec[-21] rec[-50] +DETECTOR(6, 4, 0) rec[-20] rec[-49] +DETECTOR(6, 8, 0) rec[-48] rec[-19] +DETECTOR(8, 2, 0) rec[-47] rec[-18] +DETECTOR(8, 6, 0) rec[-46] rec[-17] +DETECTOR(10, 8, 0) rec[-16] rec[-45] +DETECTOR(10, 4, 0) rec[-15] rec[-44] +DETECTOR(0, 2, 0) rec[-14] rec[-43] +DETECTOR(0, 6, 0) rec[-13] rec[-42] +DETECTOR(2, 2, 0) rec[-29] rec[-12] rec[-26] rec[-41] +DETECTOR(2, 6, 0) rec[-40] rec[-28] rec[-11] +DETECTOR(4, 4, 0) rec[-39] rec[-10] +DETECTOR(4, 8, 0) rec[-38] rec[-9] +DETECTOR(6, 2, 0) rec[-8] rec[-37] rec[-25] +DETECTOR(6, 6, 0) rec[-7] rec[-36] +DETECTOR(8, 4, 0) rec[-6] rec[-35] +DETECTOR(8, 8, 0) rec[-5] rec[-34] +DETECTOR(2, 10, 0) rec[-4] rec[-27] rec[-33] +DETECTOR(6, 10, 0) rec[-32] rec[-3] +DETECTOR(8, 0, 0) rec[-31] rec[-2] rec[-25] +DETECTOR(4, 0, 0) rec[-30] rec[-1] rec[-26] +OBSERVABLE_INCLUDE(0) rec[-29] rec[-28] rec[-27] +SHIFT_COORDS(0, 0, 1) +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 13 14 16 18 19 20 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 57 +R 15 21 6 44 31 9 51 50 32 22 4 54 37 10 27 20 57 46 33 11 53 0 42 17 55 12 25 16 1 +TICK +DEPOLARIZE1(0.002) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +RELAX(0.004) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +RELAX(0.0002) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +X_ERROR(0.002) 15 21 6 44 31 9 51 50 32 22 4 54 37 10 27 20 57 46 33 11 53 0 42 17 55 12 25 16 1 +LEAKAGE(0.0001) 15 21 6 44 31 9 51 50 32 22 4 54 37 10 27 20 57 46 33 11 53 0 42 17 55 12 25 16 1 +DEPOLARIZE1(0.0001) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +H 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 1 16 20 57 +TICK +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 1 16 20 57 +RELAX(0.0002) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 1 16 20 57 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +DEPOLARIZE1(0.0001) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 34 35 36 38 39 40 41 43 45 47 48 49 52 56 +CZ 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +TICK +DEPOLARIZE2(0.001) 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +LEAKAGE(0.0001) 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +RELAX(0.0001) 15 24 21 39 6 29 44 8 31 47 9 13 51 52 50 2 32 41 22 26 4 7 54 18 37 56 10 30 27 45 49 46 35 33 23 11 3 53 5 0 43 42 38 17 19 55 14 12 28 25 +RELAX(0.0002) 16 1 34 20 36 48 40 57 +DEPOLARIZE1(0.0001) 1 16 20 34 36 40 48 57 +H 2 3 5 7 13 14 18 19 23 26 28 30 31 35 38 41 43 44 45 49 52 56 6 8 24 29 39 47 +TICK +DEPOLARIZE1(0.0001) 2 3 5 7 13 14 18 19 23 26 28 30 31 35 38 41 43 44 45 49 52 56 6 8 24 29 39 47 +RELAX(0.0002) 2 3 5 7 13 14 18 19 23 26 28 30 31 35 38 41 43 44 45 49 52 56 6 8 24 29 39 47 0 1 4 9 10 11 12 15 16 17 20 21 22 25 27 32 33 34 36 37 40 42 46 48 50 51 53 54 55 57 +DEPOLARIZE1(0.0001) 0 1 4 9 10 11 12 15 16 17 20 21 22 25 27 32 33 34 36 37 40 42 46 48 50 51 53 54 55 57 +CZ 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +TICK +DEPOLARIZE2(0.001) 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +LEAKAGE(0.0001) 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +RELAX(0.0001) 13 33 52 12 2 11 41 53 26 42 7 25 18 17 56 55 30 31 45 44 49 50 35 32 23 22 3 4 5 54 43 37 38 27 19 10 14 15 28 21 +RELAX(0.0002) 16 0 1 34 46 47 20 36 48 6 51 39 8 9 24 40 29 57 +DEPOLARIZE1(0.0001) 0 1 6 8 9 16 20 24 29 34 36 39 40 46 47 48 51 57 +CZ 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +TICK +DEPOLARIZE2(0.001) 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +LEAKAGE(0.0001) 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +RELAX(0.0001) 13 11 52 53 2 0 41 42 26 17 7 55 18 6 56 44 20 46 57 33 49 9 35 51 23 32 3 15 5 22 43 4 38 37 19 21 16 54 1 50 +RELAX(0.0002) 31 34 45 47 48 36 39 8 28 24 40 10 25 27 12 29 30 14 +DEPOLARIZE1(0.0001) 8 10 12 14 24 25 27 28 29 30 31 34 36 39 40 45 47 48 +H 0 4 6 9 11 15 17 21 22 32 37 42 44 51 53 55 10 25 27 31 14 28 30 45 50 54 +TICK +DEPOLARIZE1(0.0001) 0 4 6 9 11 15 17 21 22 32 37 42 44 51 53 55 10 25 27 31 14 28 30 45 50 54 +RELAX(0.0002) 0 4 6 9 11 15 17 21 22 32 37 42 44 51 53 55 10 25 27 31 14 28 30 45 50 54 1 2 3 5 7 8 12 13 16 18 19 20 23 24 26 29 33 34 35 36 38 39 40 41 43 46 47 48 49 52 56 57 +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 12 13 16 18 19 20 23 24 26 29 33 34 35 36 38 39 40 41 43 46 47 48 49 52 56 57 +CZ 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +TICK +DEPOLARIZE2(0.001) 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +LEAKAGE(0.0001) 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +RELAX(0.0001) 13 32 52 15 2 22 41 4 26 37 7 21 18 27 56 10 20 9 57 51 49 11 35 53 23 42 3 25 5 17 43 55 38 44 19 31 16 6 1 0 +RELAX(0.0002) 33 34 45 46 47 36 48 50 39 8 24 40 54 28 12 29 30 14 +DEPOLARIZE1(0.0001) 8 12 14 24 28 29 30 33 34 36 39 40 45 46 47 48 50 54 +H 1 2 3 5 7 13 16 18 19 20 23 26 35 38 41 43 49 52 56 57 +TICK +DEPOLARIZE1(0.0001) 1 2 3 5 7 13 16 18 19 20 23 26 35 38 41 43 49 52 56 57 +RELAX(0.0002) 1 2 3 5 7 13 16 18 19 20 23 26 35 38 41 43 49 52 56 57 0 4 6 8 9 10 11 12 14 15 17 21 22 24 25 28 27 29 30 31 32 33 34 36 37 39 40 42 44 45 46 47 48 50 51 53 54 55 +DEPOLARIZE1(0.0001) 0 4 6 8 9 10 11 12 14 15 17 21 22 24 25 27 28 29 30 31 32 33 34 36 37 39 40 42 44 45 46 47 48 50 51 53 54 55 +M(0.005) 24 39 29 8 47 13 52 2 41 26 7 18 56 30 45 20 57 49 35 23 3 5 43 38 19 14 28 16 1 +TICK +DEPOLARIZE1(0.002) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +RELAX(0.004) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +RELAX(0.0002) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +DETECTOR(2, 4, 0) rec[-24] rec[-53] +DETECTOR(2, 8, 0) rec[-23] rec[-52] +DETECTOR(4, 2, 0) rec[-22] rec[-51] +DETECTOR(4, 6, 0) rec[-21] rec[-50] +DETECTOR(6, 4, 0) rec[-20] rec[-49] +DETECTOR(6, 8, 0) rec[-48] rec[-19] +DETECTOR(8, 2, 0) rec[-47] rec[-18] +DETECTOR(8, 6, 0) rec[-46] rec[-17] +DETECTOR(10, 8, 0) rec[-16] rec[-45] +DETECTOR(10, 4, 0) rec[-15] rec[-44] +DETECTOR(0, 2, 0) rec[-14] rec[-43] +DETECTOR(0, 6, 0) rec[-13] rec[-42] +DETECTOR(2, 2, 0) rec[-12] rec[-41] +DETECTOR(2, 6, 0) rec[-40] rec[-11] +DETECTOR(4, 4, 0) rec[-39] rec[-10] +DETECTOR(4, 8, 0) rec[-38] rec[-29] rec[-9] +DETECTOR(6, 2, 0) rec[-8] rec[-37] +DETECTOR(6, 6, 0) rec[-7] rec[-36] +DETECTOR(8, 4, 0) rec[-6] rec[-35] rec[-26] +DETECTOR(8, 8, 0) rec[-5] rec[-28] rec[-34] rec[-25] +DETECTOR(2, 10, 0) rec[-29] rec[-4] rec[-33] +DETECTOR(6, 10, 0) rec[-32] rec[-28] rec[-3] +DETECTOR(8, 0, 0) rec[-31] rec[-27] rec[-2] +DETECTOR(4, 0, 0) rec[-30] rec[-1] +OBSERVABLE_INCLUDE(0) +SHIFT_COORDS(0, 0, 1) +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 34 36 37 40 42 44 46 48 50 51 53 54 55 +R 49 35 14 2 18 41 24 26 7 56 39 45 30 34 48 13 52 23 3 43 28 38 19 8 47 36 40 29 5 +TICK +DEPOLARIZE1(0.002) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +RELAX(0.004) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +RELAX(0.0002) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +X_ERROR(0.002) 49 35 14 2 18 41 24 26 7 56 39 45 30 34 48 13 52 23 3 43 28 38 19 8 47 36 40 29 5 +LEAKAGE(0.0001) 49 35 14 2 18 41 24 26 7 56 39 45 30 34 48 13 52 23 3 43 28 38 19 8 47 36 40 29 5 +DEPOLARIZE1(0.0001) 0 1 4 6 9 10 11 12 15 16 17 20 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 57 +H 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 34 36 40 48 1 16 20 57 +TICK +DEPOLARIZE1(0.0001) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 34 36 40 48 1 16 20 57 +RELAX(0.0002) 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 34 36 40 48 1 16 20 57 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 12 15 17 21 22 25 27 31 32 33 37 42 44 46 50 51 53 54 55 +CZ 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +TICK +DEPOLARIZE2(0.001) 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +LEAKAGE(0.0001) 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +RELAX(0.0001) 49 46 35 33 14 12 2 50 18 54 41 32 24 15 26 22 7 4 56 37 39 21 45 27 30 10 13 9 52 51 11 23 53 3 42 43 25 28 17 38 55 19 44 8 31 47 6 29 0 5 +RELAX(0.0002) 16 1 34 20 36 48 40 57 +DEPOLARIZE1(0.0001) 1 16 20 34 36 40 48 57 +H 0 4 6 9 10 11 15 17 21 22 25 27 31 32 35 37 42 44 49 51 53 55 14 12 33 46 50 54 +TICK +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 15 17 21 22 25 27 31 32 35 37 42 44 49 51 53 55 14 12 33 46 50 54 +RELAX(0.0002) 0 4 6 9 10 11 15 17 21 22 25 27 31 32 35 37 42 44 49 51 53 55 14 12 33 46 50 54 1 2 3 5 7 8 13 16 18 19 20 23 24 26 28 29 30 34 36 38 39 40 41 43 45 47 48 52 56 57 +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 13 16 18 19 20 23 24 26 28 29 30 34 36 38 39 40 41 43 45 47 48 52 56 57 +CZ 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +TICK +DEPOLARIZE2(0.001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +LEAKAGE(0.0001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +RELAX(0.0001) 32 23 15 3 22 5 4 43 37 38 21 19 27 29 10 8 9 49 51 35 11 13 53 52 42 41 25 24 17 26 55 7 44 56 31 39 6 18 0 2 +RELAX(0.0002) 16 1 33 34 45 46 20 36 47 48 50 40 54 28 12 30 14 57 +DEPOLARIZE1(0.0001) 1 12 14 16 20 28 30 33 34 36 40 45 46 47 48 50 54 57 +CZ 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +TICK +DEPOLARIZE2(0.001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +LEAKAGE(0.0001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +RELAX(0.0001) 32 35 15 14 22 23 4 3 37 43 21 28 27 38 10 19 34 47 48 8 11 2 53 41 42 26 25 7 17 18 55 56 44 45 31 30 36 24 40 39 +RELAX(0.0002) 16 0 1 33 46 20 49 50 5 6 51 9 52 54 12 29 13 57 +DEPOLARIZE1(0.0001) 0 1 5 6 9 12 13 16 20 29 33 46 49 50 51 52 54 57 +H 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 8 47 0 6 9 29 51 +TICK +DEPOLARIZE1(0.0001) 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 8 47 0 6 9 29 51 +RELAX(0.0002) 2 3 7 14 18 19 23 26 28 30 35 38 41 43 45 56 5 13 49 52 8 47 0 6 9 29 51 1 4 10 11 12 15 16 17 20 21 22 24 25 27 31 32 33 34 36 37 39 40 42 44 46 48 50 53 54 55 57 +DEPOLARIZE1(0.0001) 1 4 10 11 12 15 16 17 20 21 22 24 25 27 31 32 33 34 36 37 39 40 42 44 46 48 50 53 54 55 57 +CZ 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +TICK +DEPOLARIZE2(0.001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +LEAKAGE(0.0001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +RELAX(0.0001) 32 13 15 52 22 2 4 41 37 26 21 7 27 18 10 56 34 30 48 45 11 49 53 35 42 23 25 3 17 5 55 43 44 38 31 19 36 14 40 28 +RELAX(0.0002) 16 0 1 33 46 47 20 50 6 51 39 8 9 24 54 12 29 57 +DEPOLARIZE1(0.0001) 0 1 6 8 9 12 16 20 24 29 33 39 46 47 50 51 54 57 +H 2 4 7 10 11 13 15 17 18 21 22 25 26 27 30 31 32 34 36 37 40 41 42 44 45 48 52 53 55 56 +TICK +DEPOLARIZE1(0.0001) 2 4 7 10 11 13 15 17 18 21 22 25 26 27 30 31 32 34 36 37 40 41 42 44 45 48 52 53 55 56 +RELAX(0.0002) 2 4 7 10 11 13 15 17 18 21 22 25 26 27 30 31 32 34 36 37 40 41 42 44 45 48 52 53 55 56 0 1 3 5 6 8 9 12 14 16 19 20 23 24 28 29 33 35 38 39 43 46 47 49 50 51 54 57 +DEPOLARIZE1(0.0001) 0 1 3 5 6 8 9 12 14 16 19 20 23 24 28 29 33 35 38 39 43 46 47 49 50 51 54 57 +M(0.005) 46 33 12 50 54 32 15 22 4 37 21 27 10 34 48 9 51 11 53 42 25 17 55 44 31 36 40 6 0 2 3 5 7 8 13 14 18 19 23 24 26 28 29 30 35 38 39 41 43 45 47 49 52 56 +TICK +DEPOLARIZE1(0.002) 16 20 1 57 +RELAX(0.004) 16 20 1 57 +RELAX(0.0002) 16 20 1 57 +DETECTOR(2, 4, 0) rec[-78] rec[-49] +DETECTOR(2, 8, 0) rec[-48] rec[-77] +DETECTOR(4, 2, 0) rec[-47] rec[-76] +DETECTOR(4, 6, 0) rec[-46] rec[-75] +DETECTOR(6, 4, 0) rec[-45] rec[-74] +DETECTOR(6, 8, 0) rec[-44] rec[-73] +DETECTOR(8, 2, 0) rec[-72] rec[-43] +DETECTOR(8, 6, 0) rec[-71] rec[-42] +DETECTOR(10, 8, 0) rec[-70] rec[-41] +DETECTOR(10, 4, 0) rec[-40] rec[-69] +DETECTOR(0, 2, 0) rec[-39] rec[-68] +DETECTOR(0, 6, 0) rec[-38] rec[-67] +DETECTOR(2, 2, 0) rec[-54] rec[-37] rec[-51] rec[-66] +DETECTOR(2, 6, 0) rec[-53] rec[-36] rec[-65] +DETECTOR(4, 4, 0) rec[-64] rec[-35] +DETECTOR(4, 8, 0) rec[-63] rec[-34] +DETECTOR(6, 2, 0) rec[-62] rec[-50] rec[-33] +DETECTOR(6, 6, 0) rec[-32] rec[-61] +DETECTOR(8, 4, 0) rec[-31] rec[-60] +DETECTOR(8, 8, 0) rec[-30] rec[-59] +DETECTOR(2, 10, 0) rec[-29] rec[-52] rec[-58] +DETECTOR(6, 10, 0) rec[-28] rec[-57] +DETECTOR(8, 0, 0) rec[-56] rec[-27] rec[-50] +DETECTOR(4, 0, 0) rec[-55] rec[-51] rec[-26] +OBSERVABLE_INCLUDE(0) rec[-54] rec[-53] rec[-52] +SHIFT_COORDS(0, 0, 1) +OBSERVABLE_INCLUDE(0) rec[-20] rec[-19] rec[-10] rec[-3] rec[-2] +DETECTOR(2, 2, 0) rec[-25] rec[-20] rec[-16] rec[-37] rec[-3] +DETECTOR(2, 6, 0) rec[-24] rec[-10] rec[-7] rec[-36] rec[-2] +DETECTOR(4, 4, 0) rec[-16] rec[-14] rec[-7] rec[-6] rec[-35] +DETECTOR(4, 8, 0) rec[-24] rec[-22] rec[-15] rec[-13] rec[-34] +DETECTOR(6, 2, 0) rec[-23] rec[-18] rec[-14] rec[-9] rec[-33] +DETECTOR(6, 6, 0) rec[-32] rec[-22] rec[-17] rec[-6] rec[-1] +DETECTOR(8, 4, 0) rec[-31] rec[-21] rec[-9] rec[-5] rec[-1] +DETECTOR(8, 8, 0) rec[-30] rec[-17] rec[-11] rec[-8] rec[-4] +DETECTOR(2, 10, 0) rec[-15] rec[-29] rec[-19] +DETECTOR(6, 10, 0) rec[-8] rec[-13] rec[-28] +DETECTOR(8, 0, 0) rec[-12] rec[-27] rec[-18] +DETECTOR(4, 0, 0) rec[-23] rec[-26] rec[-25] +SHIFT_COORDS(0, 0, 1) +DEPOLARIZE1(0.0001) 1 16 20 57 +H 0 4 6 9 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 51 53 55 +DEPOLARIZE1(0.0001) 0 4 6 9 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 51 53 55 +RELAX(0.0002) 0 4 6 9 10 11 15 17 21 22 25 27 31 32 34 36 37 40 42 44 48 51 53 55 1 2 3 5 7 8 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 52 54 56 57 +DEPOLARIZE1(0.0001) 1 2 3 5 7 8 12 13 14 16 18 19 20 23 24 26 28 29 30 33 35 38 39 41 43 45 46 47 49 50 52 54 56 57 diff --git a/tests/reference_data/stim/unobservable_logical_rotated_mem_z_d3_r3.stim b/tests/reference_data/stim/unobservable_logical_rotated_mem_z_d3_r3.stim new file mode 100644 index 0000000..208f69c --- /dev/null +++ b/tests/reference_data/stim/unobservable_logical_rotated_mem_z_d3_r3.stim @@ -0,0 +1,57 @@ +QUBIT_COORDS(1, 1) 1 +QUBIT_COORDS(2, 0) 2 +QUBIT_COORDS(3, 1) 3 +QUBIT_COORDS(5, 1) 5 +QUBIT_COORDS(1, 3) 8 +QUBIT_COORDS(2, 2) 9 +QUBIT_COORDS(3, 3) 10 +QUBIT_COORDS(4, 2) 11 +QUBIT_COORDS(5, 3) 12 +QUBIT_COORDS(6, 2) 13 +QUBIT_COORDS(0, 4) 14 +QUBIT_COORDS(1, 5) 15 +QUBIT_COORDS(2, 4) 16 +QUBIT_COORDS(3, 5) 17 +QUBIT_COORDS(4, 4) 18 +QUBIT_COORDS(5, 5) 19 +QUBIT_COORDS(4, 6) 25 +R 1 3 5 8 10 12 15 17 19 2 9 11 13 14 16 18 25 +TICK +H 2 11 16 25 +TICK +CX 2 3 16 17 11 12 15 14 10 9 19 18 +TICK +CX 2 1 16 15 11 10 8 14 3 9 12 18 +TICK +CX 16 10 11 5 25 19 8 9 17 18 12 13 +TICK +CX 16 8 11 3 25 17 1 9 10 18 5 13 +TICK +H 2 11 16 25 +TICK +MR 2 9 11 13 14 16 18 25 +REPEAT 2 { + DEPOLARIZE1(0.01) 2 11 18 25 + TICK + H 2 11 16 25 + TICK + CX 2 3 16 17 11 12 15 14 10 9 19 18 + TICK + CX 2 1 16 15 11 10 8 14 3 9 12 18 + TICK + CX 16 10 11 5 25 19 8 9 17 18 12 13 + TICK + CX 16 8 11 3 25 17 1 9 10 18 5 13 + TICK + H 2 11 16 25 + TICK + MR 2 9 11 13 14 16 18 25 + SHIFT_COORDS(0, 0, 1) + DETECTOR(2, 0, 0) rec[-8] rec[-16] + DETECTOR(4, 2, 0) rec[-6] rec[-14] + DETECTOR(2, 4, 0) rec[-3] rec[-11] + DETECTOR(4, 6, 0) rec[-1] rec[-9] +} +DEPOLARIZE1(0.01) 2 11 18 25 +M 1 3 5 8 10 12 15 17 19 +OBSERVABLE_INCLUDE(0) rec[-7] rec[-8] rec[-9] diff --git a/tests/unit/utils/test_decoding_graph_visualiser.py b/tests/unit/utils/test_decoding_graph_visualiser.py index 7b91b24..6defdfc 100644 --- a/tests/unit/utils/test_decoding_graph_visualiser.py +++ b/tests/unit/utils/test_decoding_graph_visualiser.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import deltakit_stim as stim import pytest from deltakit_core.decoding_graphs import ( diff --git a/tests/unit/utils/test_derivation_tools.py b/tests/unit/utils/test_derivation_tools.py index 593deb7..285520b 100644 --- a/tests/unit/utils/test_derivation_tools.py +++ b/tests/unit/utils/test_derivation_tools.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import warnings from pathlib import Path @@ -16,23 +16,21 @@ ) from deltakit_decode.utils._graph_circuit_helpers import parse_stim_circuit -REFERENCE_DATA_DIR = ( - Path(__file__).parent.parent.parent.parent.parent / "tests" / "reference_data" -) +REFERENCE_DATA_DIR = Path(__file__).parent.parent.parent / "reference_data" class TestDerivationTools: @pytest.fixture(scope="class") @classmethod - def stim_circuit(cls, reference_data_dir: Path): + def stim_circuit(cls): return stim.Circuit.from_file( - reference_data_dir / "stim" / "circuit_noisy.stim" + REFERENCE_DATA_DIR / "stim" / "circuit_noisy.stim" ) @pytest.fixture(scope="class") @classmethod - def detection_events(cls, reference_data_dir: Path): - return reference_data_dir / "b801" / "detection_events.b8" + def detection_events(cls): + return REFERENCE_DATA_DIR / "b801" / "detection_events.b8" @pytest.fixture( params=[ diff --git a/tests/unit/utils/test_derivation_tools_pij.py b/tests/unit/utils/test_derivation_tools_pij.py index fd4beb0..0a928d9 100644 --- a/tests/unit/utils/test_derivation_tools_pij.py +++ b/tests/unit/utils/test_derivation_tools_pij.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import math from pathlib import Path @@ -24,23 +24,21 @@ pijs_edge_diff, ) -REFERENCE_DATA_DIR = ( - Path(__file__).parent.parent.parent.parent.parent / "tests" / "reference_data" -) +REFERENCE_DATA_DIR = Path(__file__).parent.parent.parent / "reference_data" class TestDerivationToolsPij: @pytest.fixture(scope="class") @classmethod - def stim_circuit(cls, reference_data_dir: Path): + def stim_circuit(cls): return stim.Circuit.from_file( - reference_data_dir / "stim" / "circuit_noisy.stim" + REFERENCE_DATA_DIR / "stim" / "circuit_noisy.stim" ) @pytest.fixture(scope="class") @classmethod - def detection_events(cls, reference_data_dir: Path): - return reference_data_dir / "b801" / "detection_events.b8" + def detection_events(cls): + return REFERENCE_DATA_DIR / "b801" / "detection_events.b8" @pytest.mark.parametrize( ("circuit", "samples", "expected_pij_data"), diff --git a/tests/unit/utils/test_graph_circuit_helpers.py b/tests/unit/utils/test_graph_circuit_helpers.py index 3a6ca11..9332405 100644 --- a/tests/unit/utils/test_graph_circuit_helpers.py +++ b/tests/unit/utils/test_graph_circuit_helpers.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. from itertools import tee import deltakit_circuit as sp diff --git a/tests/unit/utils/test_pij_visualiser.py b/tests/unit/utils/test_pij_visualiser.py index 909f7a0..3178a44 100644 --- a/tests/unit/utils/test_pij_visualiser.py +++ b/tests/unit/utils/test_pij_visualiser.py @@ -1,4 +1,4 @@ -# (c) Copyright Riverlane 2020-2025. +# (c) Copyright Riverlane 2020-2026. All rights reserved. import platform import sys from unittest import mock diff --git a/tools/check_reviewers.py b/tools/check_reviewers.py new file mode 100644 index 0000000..6a296ec --- /dev/null +++ b/tools/check_reviewers.py @@ -0,0 +1,220 @@ +"""Check whether the required approvals have been met from REQUIRED_REVIEWERS to allow the PR to +merge. Returns exit code 0 if approvals are met, 1 on error, and 2 if approvals are not met.""" + +import fnmatch +import json +import os +import sys +from pathlib import Path +from typing import NamedTuple + +import requests + + +class ReqReviewerRule(NamedTuple): + """ + A single rule from the ``REQUIRED_REVIEWERS`` file. + + Attributes: + pattern: Glob pattern used to match file paths. + owners: Usernames of the reviewers required for matching files. + """ + + pattern: str + owners: list[str] + + +def get_changed_files(repo: str, pr_number: int, token: str) -> list[str]: + """ + Get the filenames of the files changed in a pull request. + + Args: + repo: Repository in ``owner/repository`` format. + pr_number: Pull request number. + token: GitHub API token. + + Returns: + The list of changed file paths. + """ + files = requests.get( + f"https://api.github.com/repos/{repo}/pulls/{pr_number}/files", + headers={"Authorization": f"token {token}"}, + ).json() + + return [f["filename"] for f in files] + + +def get_approved_reviewers(repo: str, pr_number: int, token: str) -> set[str]: + """ + Get the usernames of reviewers who approved the pull request. + + Args: + repo: Repository in ``owner/repository`` format. + pr_number: Pull request number. + token: GitHub API token. + + Returns: + The set of usernames of approving reviewers. + """ + reviews = requests.get( + f"https://api.github.com/repos/{repo}/pulls/{pr_number}/reviews", + headers={"Authorization": f"token {token}"}, + ).json() + + return {r["user"]["login"] for r in reviews if r["state"] == "APPROVED"} + + +def parse_required_reviewers_file(path: Path) -> list[ReqReviewerRule]: + """Parse a ``REQUIRED_REVIEWERS`` file. + + Args: + path: Path to the ``REQUIRED_REVIEWERS`` file. + + Returns: + The parsed reviewer rules. + """ + rules = [] + with path.open("r") as f: + for line in f: + stripped_line = line.strip() + if not stripped_line or stripped_line.startswith("#"): + continue + + parts = stripped_line.split() + pattern = parts[0] + owners = [o.lstrip("@") for o in parts[1:]] + rules.append(ReqReviewerRule(pattern=pattern, owners=owners)) + + return rules + + +def determine_required_reviewers( + rules: list[ReqReviewerRule], filenames: list[str], pr_author: str +) -> set[str]: + """Determine the reviewers required for a pull request. + + The last matching rule for each file overrides previous matches. The + pull request author is excluded from the required reviewers. + + Args: + rules: Parsed reviewer rules. + filenames: Files changed in the pull request. + pr_author: Username of the pull request author. + + Returns: + The set of required reviewers. + """ + required = set() + + for file in filenames: + last_match_owners = set() + + for rule in rules: + if fnmatch.fnmatch(file, rule.pattern): + last_match_owners = rule.owners + + if last_match_owners: + required.update(last_match_owners) + + required.discard(pr_author) + return required + + +def build_reviewer_comment(required: set[str], approved: set[str], is_draft: bool) -> str: + """ + Build the pull request reviewer status comment. + + Args: + required: Required reviewers. + approved: Reviewers who have approved the pull request. + is_draft: Whether the pull request is a draft. + + Returns: + The comment body to post on the pull request. + """ + required_list = ", ".join(sorted(required)) + approved_list = ", ".join(sorted(approved)) or "_None_" + + if is_draft: + return ( + "📝 **Draft PR - suggested reviewers**\n\n" + "At least one of the following must approve this PR once it leaves draft:\n\n" + f"{required_list}" + ) + + if bool(approved & required): + return """✅ **Reviewer requirement satisfied**""" + + return ( + "❌ **Missing required reviewer approval**\n\n" + "At least one of the following must approve this PR:\n\n" + f"{required_list}\n\nCurrently approved by:\n\n{approved_list}" + ) + + +def post_or_update_comment( + repo: str, pr_number: str, token: str, comment_marker: str, comment_body: str +) -> None: + """Post a pull request comment or update an existing one. + + A comment is considered to already exist if it contains the supplied + marker. + + Args: + repo: Repository in ``owner/repository`` format. + pr_number: Pull request number. + token: GitHub API token. + comment_marker: Marker used to identify the managed comment. + comment_body: Comment body to post. + """ + headers = {"Authorization": f"token {token}"} + + # Find existing bot comment + comments = requests.get( + f"https://api.github.com/repos/{repo}/issues/{pr_number}/comments", headers=headers + ).json() + + existing = None + for c in comments: + if c["user"]["type"] == "Bot" and comment_marker in c["body"]: + existing = c + break + + # Create or update comment + body_with_marker = comment_marker + "\n" + comment_body + if existing: + requests.patch(existing["url"], headers=headers, json={"body": body_with_marker}) + else: + requests.post( + f"https://api.github.com/repos/{repo}/issues/{pr_number}/comments", + headers=headers, + json={"body": body_with_marker}, + ) + + +if __name__ == "__main__": + repo = os.environ["GITHUB_REPOSITORY"] + token = os.environ["GITHUB_TOKEN"] + is_draft = os.environ["PR_IS_DRAFT"] == "true" + + with Path(os.environ["GITHUB_EVENT_PATH"]).open("r") as f: + event = json.load(f) + pr_number = event["pull_request"]["number"] + pr_author = event["pull_request"]["user"]["login"] + + changed_files = get_changed_files(repo, pr_number, token) + approved_reviewers = get_approved_reviewers(repo, pr_number, token) + + rules = parse_required_reviewers_file(Path(".github/REQUIRED_REVIEWERS")) + required_reviewers = determine_required_reviewers(rules, changed_files, pr_author) + + marker = "" + comment_body = build_reviewer_comment(required_reviewers, approved_reviewers, is_draft) + post_or_update_comment(repo, pr_number, token, marker, comment_body) + + if bool(approved_reviewers & required_reviewers): + print("Valid approval found") + sys.exit(0) + else: + print("Missing required approval") + sys.exit(2) diff --git a/tools/check_version_match.py b/tools/check_version_match.py new file mode 100644 index 0000000..3e44fc7 --- /dev/null +++ b/tools/check_version_match.py @@ -0,0 +1,70 @@ +""" +Validates package version matches latest remote tag. +""" + +import argparse +import logging +import sys + +from tools.utils import extract_version + +# logging +stream_handler = logging.StreamHandler() +logger = logging.Logger(__name__) +logger.addHandler(stream_handler) + + +def parse_version(v: str) -> tuple: + """ + Parse a semantic version string. + + Args: + v: Semantic version string in the format MAJOR.MINOR.PATCH. + + Returns: + A tuple containing the major, minor, and patch version numbers. + + Raises: + argparse.ArgumentTypeError: If v is not in the format + MAJOR.MINOR.PATCH or contains non-integer components. + """ + try: + return tuple(map(int, v.split("."))) + except ValueError as err: + msg = f"Invalid semver format: '{v}' (expected MAJOR.MINOR.PATCH)" + raise argparse.ArgumentTypeError(msg) from err + + +def main(): + desc = "Check that the project version is higher than the provided version." + parser = argparse.ArgumentParser(description=desc) + parser.add_argument( + "version", + type=parse_version, + help="Version to compare against (format: MAJOR.MINOR.PATCH)", + ) + + args = parser.parse_args() + tag_version_tup = args.version + tag_version = ".".join(map(str, tag_version_tup)) + + proj_version = extract_version() + proj_version_tup = parse_version(proj_version) + + if proj_version_tup != tag_version_tup: + log_msg = ( + f"Project version {proj_version} do not match " + f"latest tag version {tag_version_tup}." + ) + logger.error(log_msg) + sys.exit(1) + + logger.info( + "Project version %s do not match latest tag version %s", + proj_version, + tag_version, + ) + + +if __name__ == "__main__": + main() diff --git a/tools/set_pre_version.py b/tools/set_pre_version.py new file mode 100644 index 0000000..a8fb21f --- /dev/null +++ b/tools/set_pre_version.py @@ -0,0 +1,63 @@ +""" +Script to set prerelease version number in all `pyproject.toml`s. +Usage: `python tools/set_pre_version.py ` +e.g. `python tools/set_pre_version.py -s .dev20250820160500` +""" + +import argparse +import logging +from pathlib import Path +from packaging.version import Version + + +import tomlkit + +# logging +stream_handler = logging.StreamHandler() +logger = logging.Logger(__name__) +logger.addHandler(stream_handler) + + +PROJ_HOME = Path(__file__).parents[1] + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Append prerelease suffix to the base version." + ) + parser.add_argument( + "-t", + "--timestamp", + help=( + "Prerelease version timestamp suffix in seconds." + ), + ) + parser.add_argument( + "-c", + "--commit", + help=( + "Prerelease version short commit hash suffix." + ), + ) + args = parser.parse_args() + timestamp_version_suffix = args.timestamp + commit_version_suffix = args.commit + + # Update project version with suffix + path = PROJ_HOME / "pyproject.toml" + + # Update file data + with path.open("r") as f: + data: dict = tomlkit.load(f) + + version = Version(data["project"]["version"]) + prerelease_version = f"{version.major}.{version.minor}.{version.micro + 1}" + data["project"]["version"] = ( + prerelease_version + + f".dev{timestamp_version_suffix}+g{commit_version_suffix}" + ) + + # Write updated data to file + with path.open("w", encoding="utf-8") as f: + tomlkit.dump(data, f) + + logger.info("Project successfully updated") diff --git a/tools/utils.py b/tools/utils.py new file mode 100644 index 0000000..d12df87 --- /dev/null +++ b/tools/utils.py @@ -0,0 +1,29 @@ +""" +Utilities used by tool scripts +""" + +from pathlib import Path + +import tomlkit + + +def extract_version() -> str: + """ + Extract the version from the pyproject.toml file in the given project path. + + Returns: + The version string from the project's pyproject.toml + + Note: + This function will raise: + - FileNotFoundError: If pyproject.toml does not exist + - KeyError: If version is not found in pyproject.toml + """ + proj_home = Path(__file__).parents[1] + + pyproject_path = proj_home / "pyproject.toml" + + with pyproject_path.open("rb") as f: + pyproject_data: dict = tomlkit.load(f) + + return pyproject_data["project"]["version"]