From 8b80d2c54cc0aba708647d67f9232f9ae181704f Mon Sep 17 00:00:00 2001 From: "Neil John D. Ortega" Date: Mon, 2 Sep 2024 13:34:53 +0100 Subject: [PATCH] Release version 0.4.3 Co-authored-by: Dimitri Kartsaklis --- .github/workflows/build-docs | 5 - .github/workflows/build_test.yml | 17 - .github/workflows/clear-target-files | 3 - .github/workflows/docs.yml | 66 - .gitignore | 1 + .gitmodules | 4 - README.md | 38 +- docs/CONTRIBUTING.rst | 66 - docs/Makefile | 27 - docs/_static/css/table-wrap.css | 8 - docs/_static/images/CQ-logo.png | Bin 14749 -> 0 bytes docs/_static/images/Quantinuum_logo.png | Bin 18245 -> 0 bytes docs/_static/images/ccg-diagram.png | Bin 46537 -> 0 bytes docs/_static/images/ccgbank.png | Bin 146116 -> 0 bytes docs/_static/images/comm-diagram.png | Bin 35508 -> 0 bytes docs/_static/images/favicon.ico | Bin 456 -> 0 bytes docs/_static/images/lambeq_logo.png | Bin 3455 -> 0 bytes docs/_static/images/linear.png | Bin 123764 -> 0 bytes docs/_static/images/pipeline.png | Bin 75455 -> 0 bytes docs/_static/images/pregroups.png | Bin 46789 -> 0 bytes docs/_static/images/snake-2.png | Bin 4159 -> 0 bytes docs/_static/images/snake.png | Bin 3372 -> 0 bytes docs/_static/images/string_diagram.png | Bin 58067 -> 0 bytes .../images/string_diagram_with_swaps.png | Bin 305861 -> 0 bytes docs/_static/images/use_cases.png | Bin 81612 -> 0 bytes docs/_static/nav-config.js | 27 - docs/advanced.rst | 13 - docs/bibliography.rst | 54 - docs/cli.rst | 265 ---- docs/conf.py | 113 -- docs/examples/circuit.ipynb | 290 ---- docs/examples/classical-pipeline.ipynb | 329 ----- docs/examples/datasets/mc_dev_data.txt | 30 - docs/examples/datasets/mc_test_data.txt | 30 - docs/examples/datasets/mc_train_data.txt | 70 - docs/examples/datasets/rp_test_data.txt | 31 - docs/examples/datasets/rp_train_data.txt | 74 - docs/examples/parser.ipynb | 64 - docs/examples/pennylane.ipynb | 763 ---------- docs/examples/quantum-pipeline-jax.ipynb | 375 ----- docs/examples/quantum-pipeline.ipynb | 378 ----- docs/examples/reader.ipynb | 96 -- docs/examples/rewrite.ipynb | 753 ---------- docs/examples/rotosolve-optimizer.ipynb | 287 ---- docs/examples/tensor.ipynb | 152 -- docs/examples/tokenisation.ipynb | 180 --- docs/examples/tree-reader.ipynb | 104 -- docs/examples/unk-words.ipynb | 526 ------- docs/extract_code_cells.py | 19 - docs/genindex.rst | 2 - docs/glossary.rst | 168 --- docs/index.rst | 106 -- docs/installation.rst | 27 - docs/lambeq.ansatz.rst | 7 - docs/lambeq.backend.rst | 58 - docs/lambeq.bobcat.rst | 7 - docs/lambeq.rewrite.rst | 8 - docs/lambeq.text2diagram.rst | 18 - docs/lambeq.tokeniser.rst | 7 - docs/lambeq.training.rst | 8 - docs/manual-training.rst | 33 - docs/models.rst | 198 --- docs/nlp-class.rst | 70 - docs/nlp-data.rst | 101 -- docs/nlp-intro.rst | 51 - docs/nlp-ml.rst | 36 - docs/nlp-refs.rst | 29 - docs/notebooks.rst | 21 - docs/package-api.rst | 232 --- docs/parsing.rst | 27 - docs/pipeline.rst | 25 - docs/puml/README.md | 13 - docs/puml/ansatz.puml | 72 - docs/puml/backend-inheritance.puml | 63 - docs/puml/backend-quantum-inheritance.puml | 58 - docs/puml/backend.puml | 168 --- docs/puml/bobcat.puml | 31 - docs/puml/legend.puml | 31 - docs/puml/pregroups.puml | 19 - docs/puml/rewrite.puml | 69 - docs/puml/text2diagram.puml | 123 -- docs/puml/tokeniser.puml | 31 - docs/puml/training.puml | 138 -- docs/quantinuum-sphinx | 1 - docs/release-notes.rst | 380 ----- docs/requirements.txt | 8 - docs/root-api.rst | 9 - docs/scripts/check_errors.py | 20 - docs/scripts/clean_notebooks.py | 94 -- docs/scripts/compare_execution_times.py | 96 -- docs/scripts/track_execution_time.sh | 179 --- docs/string-diagrams.rst | 50 - docs/training.rst | 36 - docs/troubleshooting.rst | 45 - docs/tutorials/config.toml | 5 - docs/tutorials/discocat.ipynb | 1194 ---------------- docs/tutorials/extend-lambeq.ipynb | 534 ------- docs/tutorials/monoidal.ipynb | 536 ------- docs/tutorials/parameterise.ipynb | 401 ------ docs/tutorials/rewrite.ipynb | 338 ----- docs/tutorials/sentence-input.ipynb | 537 ------- docs/tutorials/trainer-classical.ipynb | 633 --------- docs/tutorials/trainer-hybrid.ipynb | 1248 ----------------- docs/tutorials/trainer-quantum.ipynb | 683 --------- docs/tutorials/training-symbols.ipynb | 364 ----- docs/tutorials/training-usecase.ipynb | 508 ------- docs/uml-diagrams.rst | 83 -- docs/use-cases.rst | 220 --- lambeq/backend/grammar.py | 21 +- setup.cfg | 2 +- 110 files changed, 24 insertions(+), 15514 deletions(-) delete mode 100755 .github/workflows/build-docs delete mode 100644 .github/workflows/clear-target-files delete mode 100644 .github/workflows/docs.yml delete mode 100644 docs/CONTRIBUTING.rst delete mode 100644 docs/Makefile delete mode 100644 docs/_static/css/table-wrap.css delete mode 100644 docs/_static/images/CQ-logo.png delete mode 100644 docs/_static/images/Quantinuum_logo.png delete mode 100644 docs/_static/images/ccg-diagram.png delete mode 100644 docs/_static/images/ccgbank.png delete mode 100644 docs/_static/images/comm-diagram.png delete mode 100644 docs/_static/images/favicon.ico delete mode 100644 docs/_static/images/lambeq_logo.png delete mode 100644 docs/_static/images/linear.png delete mode 100644 docs/_static/images/pipeline.png delete mode 100644 docs/_static/images/pregroups.png delete mode 100644 docs/_static/images/snake-2.png delete mode 100644 docs/_static/images/snake.png delete mode 100644 docs/_static/images/string_diagram.png delete mode 100644 docs/_static/images/string_diagram_with_swaps.png delete mode 100644 docs/_static/images/use_cases.png delete mode 100644 docs/_static/nav-config.js delete mode 100644 docs/advanced.rst delete mode 100644 docs/bibliography.rst delete mode 100644 docs/cli.rst delete mode 100644 docs/conf.py delete mode 100644 docs/examples/circuit.ipynb delete mode 100644 docs/examples/classical-pipeline.ipynb delete mode 100644 docs/examples/datasets/mc_dev_data.txt delete mode 100644 docs/examples/datasets/mc_test_data.txt delete mode 100644 docs/examples/datasets/mc_train_data.txt delete mode 100644 docs/examples/datasets/rp_test_data.txt delete mode 100644 docs/examples/datasets/rp_train_data.txt delete mode 100644 docs/examples/parser.ipynb delete mode 100644 docs/examples/pennylane.ipynb delete mode 100644 docs/examples/quantum-pipeline-jax.ipynb delete mode 100644 docs/examples/quantum-pipeline.ipynb delete mode 100644 docs/examples/reader.ipynb delete mode 100644 docs/examples/rewrite.ipynb delete mode 100644 docs/examples/rotosolve-optimizer.ipynb delete mode 100644 docs/examples/tensor.ipynb delete mode 100644 docs/examples/tokenisation.ipynb delete mode 100644 docs/examples/tree-reader.ipynb delete mode 100644 docs/examples/unk-words.ipynb delete mode 100644 docs/extract_code_cells.py delete mode 100644 docs/genindex.rst delete mode 100644 docs/glossary.rst delete mode 100644 docs/index.rst delete mode 100644 docs/installation.rst delete mode 100644 docs/lambeq.ansatz.rst delete mode 100644 docs/lambeq.backend.rst delete mode 100644 docs/lambeq.bobcat.rst delete mode 100644 docs/lambeq.rewrite.rst delete mode 100644 docs/lambeq.text2diagram.rst delete mode 100644 docs/lambeq.tokeniser.rst delete mode 100644 docs/lambeq.training.rst delete mode 100644 docs/manual-training.rst delete mode 100644 docs/models.rst delete mode 100644 docs/nlp-class.rst delete mode 100644 docs/nlp-data.rst delete mode 100644 docs/nlp-intro.rst delete mode 100644 docs/nlp-ml.rst delete mode 100644 docs/nlp-refs.rst delete mode 100644 docs/notebooks.rst delete mode 100644 docs/package-api.rst delete mode 100644 docs/parsing.rst delete mode 100644 docs/pipeline.rst delete mode 100644 docs/puml/README.md delete mode 100644 docs/puml/ansatz.puml delete mode 100644 docs/puml/backend-inheritance.puml delete mode 100644 docs/puml/backend-quantum-inheritance.puml delete mode 100644 docs/puml/backend.puml delete mode 100644 docs/puml/bobcat.puml delete mode 100644 docs/puml/legend.puml delete mode 100644 docs/puml/pregroups.puml delete mode 100644 docs/puml/rewrite.puml delete mode 100644 docs/puml/text2diagram.puml delete mode 100644 docs/puml/tokeniser.puml delete mode 100644 docs/puml/training.puml delete mode 160000 docs/quantinuum-sphinx delete mode 100644 docs/release-notes.rst delete mode 100644 docs/requirements.txt delete mode 100644 docs/root-api.rst delete mode 100644 docs/scripts/check_errors.py delete mode 100644 docs/scripts/clean_notebooks.py delete mode 100644 docs/scripts/compare_execution_times.py delete mode 100644 docs/scripts/track_execution_time.sh delete mode 100644 docs/string-diagrams.rst delete mode 100644 docs/training.rst delete mode 100644 docs/troubleshooting.rst delete mode 100644 docs/tutorials/config.toml delete mode 100644 docs/tutorials/discocat.ipynb delete mode 100644 docs/tutorials/extend-lambeq.ipynb delete mode 100644 docs/tutorials/monoidal.ipynb delete mode 100644 docs/tutorials/parameterise.ipynb delete mode 100644 docs/tutorials/rewrite.ipynb delete mode 100644 docs/tutorials/sentence-input.ipynb delete mode 100644 docs/tutorials/trainer-classical.ipynb delete mode 100644 docs/tutorials/trainer-hybrid.ipynb delete mode 100644 docs/tutorials/trainer-quantum.ipynb delete mode 100644 docs/tutorials/training-symbols.ipynb delete mode 100644 docs/tutorials/training-usecase.ipynb delete mode 100644 docs/uml-diagrams.rst delete mode 100644 docs/use-cases.rst diff --git a/.github/workflows/build-docs b/.github/workflows/build-docs deleted file mode 100755 index 5f51561f..00000000 --- a/.github/workflows/build-docs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -cd docs -make clean -make html diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 7815fe6f..06e9a5c4 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -12,7 +12,6 @@ on: env: SRC_DIR: lambeq TEST_DIR: tests - DOCS_DIR: docs jobs: lint: @@ -82,22 +81,6 @@ jobs: --doctest-modules --durations=50 --ignore=${{ env.TEST_DIR }}/text2diagram/test_depccg_parser.py - --ignore=${{ env.DOCS_DIR }}/extract_code_cells.py - - name: Preparation for notebook testing - run: pip install nbmake - - name: Test example notebooks - env: - TEST_NOTEBOOKS: 1 - run: > - pytest --nbmake ${{ env.DOCS_DIR }}/examples/ - --nbmake-timeout=60 - - name: Test tutorial notebooks - env: - TEST_NOTEBOOKS: 1 - run: > - pytest --nbmake ${{ env.DOCS_DIR }}/tutorials/ - --nbmake-timeout=60 - --ignore ${{ env.DOCS_DIR }}/tutorials/code - name: Coverage report run: coverage report -m type_check: diff --git a/.github/workflows/clear-target-files b/.github/workflows/clear-target-files deleted file mode 100644 index 9f4c7fbc..00000000 --- a/.github/workflows/clear-target-files +++ /dev/null @@ -1,3 +0,0 @@ -**/* -!.git -!.nojekyll diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index 497e5501..00000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Build and deploy documentation - -on: - push: - branches: - - 'main' - - 'beta' - - 'release' - pull_request: - workflow_dispatch: - release: - types: - - released - -# We need the following permission to upload the documentation as a release asset. -permissions: - contents: write - -env: - WORKFLOWS_DIR: .github/workflows - DOCS_DIR: docs - DOCS_BUILD_DIR: docs/_build/html - -jobs: - docs: - name: Build and deploy documentation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - fetch-depth: 0 # fetches tags, required for version info - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - name: Build lambeq - run: pip install . - - name: Install documentation dependencies - run: | - sudo apt-get install graphviz pandoc - pip install -r docs/requirements.txt - - name: Draw diagrams from PlantUML files - uses: Timmy/plantuml-action@v1 - with: - args: '-v -DPLANTUML_LIMIT_SIZE=8192 -tpng ${{ env.DOCS_DIR }}/puml/*.puml -o img' - - name: Build documentation - run: ${{ env.WORKFLOWS_DIR }}/build-docs - - name: Deploy documentation - if: ${{ github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'release') }} - uses: s0/git-publish-subdir-action@develop - env: - REPO: self - BRANCH: docs - FOLDER: ${{ env.DOCS_BUILD_DIR }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CLEAR_GLOBS_FILE: ${{ env.WORKFLOWS_DIR }}/clear-target-files - - name: Zip up documentation to store as release asset - if: ${{ github.event_name == 'release' }} - run: | - tar -cavf lambeq-docs-${{ github.event.release.tag_name }}.tar.gz -C ${{ env.DOCS_BUILD_DIR }} . - - name: Add documentation artifact as release asset - if: ${{ github.event_name == 'release' }} - run: gh release upload ${{ github.event.release.tag_name }} lambeq-docs-${{ github.event.release.tag_name }}.tar.gz --clobber - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index bfa2e773..002600cd 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ htmlcov/ # ignore the built documentation docs/_* !docs/_static/ +!docs/_templates/ docs/puml/img # ignore runs and related artifacts diff --git a/.gitmodules b/.gitmodules index cce7cbd1..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +0,0 @@ -[submodule "docs/quantinuum-sphinx"] - path = docs/quantinuum-sphinx - url = https://github.com/CQCL/quantinuum-sphinx.git - branch = dist diff --git a/README.md b/README.md index 685ebabe..f2a13ec0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # lambeq -[![lambeq logo](https://cqcl.github.io/lambeq/_static/lambeq_logo.png)](//cqcl.github.io/lambeq) +[![lambeq logo](https://cqcl.github.io/lambeq-docs/_static/lambeq_logo.png)](//cqcl.github.io/lambeq-docs) ![Build status](https://github.com/CQCL/lambeq/actions/workflows/build_test.yml/badge.svg) [![License](https://img.shields.io/github/license/CQCL/lambeq)](LICENSE) @@ -12,16 +12,11 @@ lambeq is a toolkit for quantum natural language processing (QNLP). -- Documentation: https://cqcl.github.io/lambeq/ +- Documentation: https://cqcl.github.io/lambeq-docs/ - User support: -- Contributions: Please read [our guide](https://cqcl.github.io/lambeq/CONTRIBUTING.html). +- Contributions: Please read [our guide](https://cqcl.github.io/lambeq-docs/CONTRIBUTING.html). - If you want to subscribe to lambeq's mailing list, let us know by sending an email to . ---- -**Note:** Please do not try to read the documentation directly from the preview provided in the [repository](https://github.com/CQCL/lambeq/tree/main/docs), since some of the pages will not be rendered properly. - ---- - ## Getting started ### Prerequisites @@ -31,6 +26,7 @@ lambeq is a toolkit for quantum natural language processing (QNLP). ### Installation lambeq can be installed with the command: + ```bash pip install lambeq ``` @@ -38,6 +34,7 @@ pip install lambeq The default installation of lambeq includes Bobcat parser, a state-of-the-art statistical parser (see [related paper](https://arxiv.org/abs/2109.10044)) fully integrated with the toolkit. To install lambeq with optional dependencies for extra features, run: + ```bash pip install lambeq[extras] ``` @@ -57,12 +54,11 @@ python contrib/download_depccg_model.py ## Usage -The [docs/examples](//github.com/CQCL/lambeq/tree/main/docs/examples) -directory contains notebooks demonstrating usage of the various tools in -lambeq. +The [docs/examples](//github.com/CQCL/lambeq-docs/tree/main/docs/examples) +directory in lambeq's [documentation repository](https://github.com/CQCL/lambeq-docs) contains notebooks demonstrating usage of the various tools in lambeq. Example - parsing a sentence into a diagram (see -[docs/examples/ccg2discocat.ipynb](//github.com/CQCL/lambeq/blob/main/docs/examples/ccg2discocat.ipynb)): +[docs/examples/parser.ipynb](//github.com/CQCL/lambeq-docs/blob/main/docs/examples/parser.ipynb)): ```python from lambeq import BobcatParser @@ -75,28 +71,14 @@ diagram.draw() ## Testing Run all tests with the command: + ```bash pytest ``` -Note: if you have installed in a virtual environment, remember to +Note: if you have installed lambeq in a virtual environment, remember to install pytest in the same environment using pip. -## Building documentation - -To build the documentation, first install the required dependencies: -```bash -pip install -r docs/requirements.txt -``` -then run the commands: - -```bash -cd docs -make clean -make html -``` -the docs will be under `docs/_build`. - ## License Distributed under the Apache 2.0 license. See [`LICENSE`](LICENSE) for diff --git a/docs/CONTRIBUTING.rst b/docs/CONTRIBUTING.rst deleted file mode 100644 index 34080537..00000000 --- a/docs/CONTRIBUTING.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. _sec-contributing: - -Contributing to lambeq -====================== - -Contributions to ``lambeq`` are welcome, especially with regard to adding: - -- Support for new :term:`parsers ` (extensions of the :py:class:`.CCGParser` class) -- :term:`Compositional schemes ` and :term:`readers ` (extensions of the :py:class:`.Reader` class) -- :term:`Rewrite rules ` (extensions of the :py:class:`.RewriteRule` class) -- Tensor and circuit :term:`ansätze ` (extensions of the :py:class:`.TensorAnsatz` and :py:class:`.CircuitAnsatz` classes) -- New :term:`trainers `, :term:`models `, and optimizers for the :py:mod:`.training` package. - -All accepted contributions will be included in the next official release and contributors will be properly attributed in the corresponding release notes. - -Opening a pull request ----------------------- - -If you have an already implemented and tested proposal, you can `open a pull request `_ that will be reviewed by ``lambeq``'s development team. Keep in mind the following guidelines: - -- Please provide a detailed description of your proposal, supporting it with references to publications or other material when appropriate. Suggestions for untested or ad-hoc components whose motivation is not well-defined cannot be accepted. If you are not sure about your idea, it would be preferable to contact the development team and discuss it or :ref:`open an issue ` before opening a pull request. - -- Examine the `existing code `_ and try to apply the same conventions for styling, formatting, and documenting in your pull request. In general, we try to follow the standard `PEP-8 Python Style Guide `_ - if you are not familiar with it please have a look before opening a pull request. Docstrings use the `numpydoc conventions `_. - -- The signatures of all methods (public or private) need to be `type-annotated`. Please refer to the `Python typing module `_ for more information. - -- Try to accompany any proposed new functionality with a set of appropriate tests. The test coverage of ``lambeq`` is close to 100% and we would like to keep it that way. Please have a look at the `existing tests `_ to get an idea about the conventions we use, or contact the dev team for guidance. - -Trivial contributions ---------------------- - -Any contribution, no matter how small or "trivial", is welcome as long as it improves the package in a pragmatic and clear way. However, it is up to the maintainers of the project to decide if the sole purpose of a contribution is to add the author's name to the list of contributors, without providing any actual value to the development. We regret that these cases will not be accepted. Examples include the following: - -- Changing the name of a variable without apparent reason. -- Rephrasing a comment without apparent reason. -- Adding an unnecessary comment. - -As mentioned above, any contribution that genuinely improves the state of the code, no matter how small or "trivial", is welcome. For example: - -- Fixing a small typo in a comment. -- Adding a type annotation that is missing. -- A minor formatting fix to improve compliance with `PEP-8 Python Style Guide `_. - -.. _open-issue: - -Opening an issue ----------------- - -If you have a question, proposal, or request related to ``lambeq``, please `open an issue `_ or send an email to lambeq-support@cambridgequantum.com. Keep an eye on the issues you have opened, and be sure to answer any questions from the developers to help them understand better the case. Issues that remain inactive for more than a week without an apparent reason will be marked as stale and eventually will be closed. - -Where to start --------------- - -For developers who wish to contribute to ``lambeq``, a good starting point would be the :ref:`UML diagrams ` provided for each sub-package, which give a high-level overview of their general structure as well as information regading the important external dependencies. General information for each ``lambeq`` sub-package can be also found in :ref:`this page `. - -Code of conduct ---------------- - -Please be polite and respectful in any form of communication you have with other contributors/developers. Project maintainers are expected to take appropriate and fair corrective action in response to any instances of unacceptable behaviour. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to these guidelines, or to ban temporarily or permanently any contributor for other behaviours that they deem inappropriate, threatening, offensive, or harmful. - -.. rubric:: See also: - -- :ref:`General information about sub-packages ` -- :ref:`UML diagrams for sub-packages ` -- `"low-level lambeq" tutorial `_ -- `"Extending lambeq" tutorial `_ diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 83efb99e..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile -ifneq ($(MAKECMDGOALS),clean) - python extract_code_cells.py -else - @echo "Removing code notebooks..." - rm -rf ./_code -endif - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - diff --git a/docs/_static/css/table-wrap.css b/docs/_static/css/table-wrap.css deleted file mode 100644 index e9b348c6..00000000 --- a/docs/_static/css/table-wrap.css +++ /dev/null @@ -1,8 +0,0 @@ -/* override table no-wrap */ -.wy-table-responsive table td, .wy-table-responsive table th { - white-space: normal; -} -table.docutils div.line-block { - margin-bottom: 0; -} - diff --git a/docs/_static/images/CQ-logo.png b/docs/_static/images/CQ-logo.png deleted file mode 100644 index 01700a0c21b39bf4ef8923a81164ee8462b36878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14749 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 diff --git a/docs/_static/images/Quantinuum_logo.png b/docs/_static/images/Quantinuum_logo.png deleted file mode 100644 index 5569581b8e420f14eee561cbf1bf78ca0c96882f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18245 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 Kfpq~%yZ;1p*Z8jh diff --git a/docs/_static/images/ccgbank.png b/docs/_static/images/ccgbank.png deleted file mode 100644 index 24755d1895619155d3c13d342a39dae227811498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146116 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%0Ar!ZnrPz96xDj&rH3K9pS7)Tb*l&C0L5C3gH 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

uqOIzru<;kqKK^&z$Im(75KIT?F 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 diff --git a/docs/_static/images/comm-diagram.png b/docs/_static/images/comm-diagram.png deleted file mode 100644 index c111b302e53d81f5b6acc3175ceac6cc508e7fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35508 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 z 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

^naTmSbQ~eEgpuZB17X6E{F#Z3vBZb&%(Z3 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 b@Q^h5O6*_ZmdhR_;GeFR5voeVA?p7C<2)f{ diff --git a/docs/_static/images/favicon.ico b/docs/_static/images/favicon.ico deleted file mode 100644 index d559dde26fa83039182a732ca75a480b631bd7ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456 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 diff --git a/docs/_static/images/linear.png b/docs/_static/images/linear.png deleted file mode 100644 index f437125a9f2013a3f0f6ff8d38a00a89a3ae9eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123764 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

YRFy_vZ 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 I>)rl;0GZ|fC;$Ke diff --git a/docs/_static/images/pipeline.png b/docs/_static/images/pipeline.png deleted file mode 100644 index 421a2a3e8ec110994bb06ecb2185752bd44a4ed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75455 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 Qa4y(dJbn$-xR*s0^wczL z2Jt6}ywn&bntRPppv^!sBq>SV-;8p{fWCaae{pfb ztklwr&UHaZ>mNxozup$Lza3 zF^@G+4s5RRQ@YBF<5v2eM~~4auS={sboxFOUWFAT$}CWh;(%S$CXzv*g%>q8(0JCg67o8MJ zlc*BP5e+TX?}&AGQMqjnt2+J7+=IH*0-fOVfyWP}r5>tDwLP3J_2HpShZ3}J+DBi3 zl`*(W?f}0CqwbI#Xz;oKc=;w;A;C$sq4AeN%=;OmzDopq^=}8=yD%Mz|v`v=)<%%@7eL%JsgI4Gz&4wF!XxPuZ z<%cXz%_3l%Y5NDD^WoTWZ;v2#Ii-BrM@JP3?VN(Ii!+hs3%tmpnSBk1II>$p zd;*|ApD1n_VDQ}V61EJI>kHG?vZXX5cw%w3-ZyLU1yta?N0if1(E84R<--OQ3jDz}Cxj38CX8$A1~G6*KQ(Ri!}= zhJd9XQ4FpU7^>wbp|g!v8MZ$5&_w(g@Z;Wmyn{TPq8@@!1ESEMTMpV68>MINJ=I>e z0~3n>n20iR1!%kUApy0-%gnzNS5C|$^n`K^;bW9;1gtZt1tz;@*6j^Na~se6(i4HR=D|_c20og~&)Fn=~h=SGT=* z;sze#swex}sKBY{+Lp_L+8Mb|rvl$kR+*p357v+y;mU=a60>8m$qpePg;6JALjEy> zG=7M4T{4qH?f+`$p|CM&+cM#jUQ-7o05$+qL;t}YixzSe>G6WkMn5{XYzXeTx3#%t z!*isP94&ad?BPJ!-SrOH6-d}w1`d87d)8cmwqn)au8TKvT{O&#wO4UnOt~3z1xz6$ zc>t=ooS*Oz*W^^~>;!%s$pele5Qh%MKwIvYmcHqx!@lg|mv*gv&Twc_(*uZ@wgH|~ zgW-|9f-cx7TS(^`fNBb&E~Kxr(3xEUvj|O(`+5P`Rc!}P+tykB!25UKG@loqXr$l9 zg*i>n7-)FYBBgwe8BYZEZffOz zLW#coUSPUF52~%U=E1}d%5zXs5fK<6r!PaBDS6i^A@BY-HmS4h*QfQHh~V3lyjUdk}Bcr6#9P55)tppu`~GHFEoOWAb0 zZ7QgUy4=Vr#VGjfvofHvqFMfFp)B12e-2_WZ8JVbRs>c_}<3*8?8K z*Z0Q_WM`Fl;Wksb{t=XX)#6hUgeJtMKEL5XKBD_T$=nz9y1%yNV#xe-O zXHPWKZBpJpb6+%v!=#RDM?#aEFV+(fNxFxXkJLE@#&!`r37)}2D1h_wnJH(X8BeR- zL&Xc{_Sx~Q96C8sF2-gD39Ek|wiQ?otn>97u*U^0-vxqW4J~2%qBD$&uSHo4T0Rjx zX)Gbk;_US^JRQOVqse$D@UEhI=;~7dUi|~n(#eMQ zC+-d;kWn(35O_#~vL>>^Qz)Bi_BKMk?yAcPyaeu@+Vo1W@E~|h) zl05Uwf13n^>D|G$tXFEy(9g~Ts$&YIXNV%ZJ`+5N+}xd6-#z&sJ71>)E`3|zP{ThS z{l|Yw=2w6+h(ML{nu=X1l^2P>%qAT6NKiZN_>YzSZ*MS3o9M6yJs7NauNLe3^$C6t zzRHHLq5i!rznA6rCHhHR{FW`N=ov6yev8~+5y;=m^3AmURf_&TEx#|(|F`Dc((a|X XQ(rEA-glD<{+v)&$7UTlef9qUtY;jR diff --git a/docs/_static/images/pregroups.png b/docs/_static/images/pregroups.png deleted file mode 100644 index be76910b140060cb611f4ffbf20ae0dcd3930374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46789 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 LVzsT*$Sv-_#KV}{ diff --git a/docs/_static/images/snake-2.png b/docs/_static/images/snake-2.png deleted file mode 100644 index 0f1939569e6dea5881df4e3e0a15db5630ce3805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4159 zcma)92Q*ym)*fv{3lc2^gNctsbWukaC5Vz}QHSUZGTMkP(QAkr!bC_!j~YYt5?vBR zFVPb-2ol77-S7VY{qJ4t`|n-rJ#%KQbKZT<*?T`_N9*aT(@?TfLLd+tO$}88aPB!f z&OyO%sYzKbI7y?`OwfiXd$g~O*L{eN4cfyMg?4p9!hG&~J#a#~iwQ~!iU`0Q(P)nc zGD1Rb|9gWV%F97$it=0}2twhZVfp|9p|v?Xh>8`8oWP$qnyN~7{Bpj{xM&+5aCQ@J z-z(M=D2}3s-mR{&jG`$LnfmC6(|zXoTx7NiW-7j6UfbDmy^&mI1qs_=@})THwyP(% z9pQtwS4Ma*n#A#H$)fwGRFmVQLkt9KG^9_-A43^}^_&8OmSWahVSQ6+FH zBm^9M=SRe(57@UqqGJAqyG)WFQc_aVo+aVp@wJb!P@V7v7a-aEb0s@SsQb^biV>qE z!*~hQtX#%`y{ekpLQgW!uyf5sqxZG_?=x(oVxCmWF*2AvJ|q(9@%z|+d1ZxLR+g=> zu#ijaVjb)SU-e`hB48f^iMz?ue7tjO!u5uLWs?-#evv7H;r@;6fM>ee+NyzpIOQ?9 z&kuN^$}urI%o12(5zAM1*^LkH@hGUIc@tv!W z(lf%i;KcricrIrbmywByb46p(PoFYLJsTwA^p$z$cZkm)s*`p3ERcf;_`I4I8y6R0 zS+4Ht`sQGG_wCwYu|75_Cnv7HUMdfj9wx*WDlRFBef^qJLPDbc!D_;R%K^dRq%O9& zxLBUkvA4JPHUhtgK@=1e{4zg^9o%dvTzA>rUG`^ZXLodS`zAK=_%U?4$-jF1!0g_= zBl8~@1cJR89|qU#>FH54Gh^+y z7vt5goN1}4Js@Hl zQBMlIcXD!a=j(^`uVrO|R^>6dh87mja?;cP5HhV&O^Aw0Qjcf761+d@;H9n}Ig0(U zzVWF<6!NofF31qWP@ZlTWIFrS$*?7z%>y=GX7MEb`aNEfq*9|2bA5f0VxnG!@3XjT zsL3idqmoZM%e_y&rledbRLAt`owrjgKV)TNtMphveA{undmZJ#*esZ z!ZI9-{w;6oxN!1S;dq+(A8fOyZE9)?%CCo^RulP?jquZ)zO|Qq&fZ*rn$L$-sSDIK0 zv!t2{7-&q88dzAw2OjM&tc_stesUnbaP~ljS*agD2bbmr14Bc4cJ`D0O>ph-XuBn# z^T#J+tNi?YB8YX38G+Ev+3s8eb*a>_QISu|%3|G`s-v9?I=a5Nw3M8k9ee-7(^flC zCG5x{+JZG63itsmP(d=hA7}jO@h)x9>4`63Xyj~@e}+P^y!_AQi~YF>S-MzNE<24D z4M3_Pok%4BLN6~bkKGlWt%*t!fSe!F2@d+N?r7-hb~So$dJq=X09h2gdPVVIrN1?q zNB!7~jiK@J7SoG@0%9sAf%l;E^$iTdL~OfAk8j+)$|x!-itl1W&CmGGb*>C#6V^s} zT&HTU&)4bnv803oa(4almf{Jojy|*@Uh;OH5%nT()X+RD1^g=*37SfC@ z_0i{XmWj_~eG4io=s-%Ew|!RtKK}pi_o$ zG535bF<$U$V3@<8Z|Uf$X=_t&`Mev&>OrU*6wL*hSNbzAruvpbl}n94Nw~R@8qIS` zCoEo}Xf*nHQ`0o6WfdQ(aC$s;H047nq#{UHV2%7Ab&g1S^G3kV&W;ZO{qYa=R-9<^ zSNIE&{gAoV@aPlMGH98o=;+p;yQ^ol-r90aefrdk7vpZj7&YnIm5T_l7H3V)%#6My zX8+#4+VkuRv&QY{=;-3|a%0D=Ze>qi*7^!cxTt8=xKoK<9ypyI__Xw z7-b(oW|_siRE}`cwiUP8{Nk4{q0SQH`uPH`#QfK;1#C0{oq9erVi+uj_<3@Cd>k^U z(!8`0`>$@KP4D4DInc;y9PK65)fYjFgc_CH#W3WFBnf|wvgZEerBB<}2Z zt)XRr?YKljp~4hP=H}*B{Q9*4h5_=v;lU~$J3GyjUQiu*TbRunz`-M<5}M4!PgAZp z`m-dccy7k&{TcPe*m_cOawrM;`R6q?cSlSIpUFl7qI8|8P#TfWWhS98l$Mrubarkd z=X?k;eae{Gx{gLp)w)%f2u##_V!6erjV2y`jKE||d2*j;mx%yu&juPWl9u!Q#%ePV z$qMwk!5w4crE#lZnpdY0>s0PaZ4D8Q>EVQU~cVDm5bm!ps?TNK{i(6BOIIM0gHN0y!;5#|zCT z6)xj~Z_FDmFfuYG!Fz@3@)_hiS)ukrxir}Wk3ssZhjI}nEkOu~HNfX=V5={uC1(A~ z!WdWjhesdMg$};l^|^ol3TRSsR+_4+D*T8#r_JaK%~rFf5G1TU>XWmYsp%zWXJ-uJ zJryNoQg-$xF2|_kk#14AZjlO5azV?csQrDPdUHWwnuz_HrXpV%7AdE|-KG4|DCe`d-MCxogKGRztF-Ed7-mb)E%_I zK>)Qb*<)D_2YI(%?1(f+mj8UoA94VDYHM#m6oI^y z2c{Oie90{>?QgP$*!Ss`_;t%{>TuKgBEgurp zfSv>Cz!-}zbtfKdx>Cb?J~~Ti^Iin&bD0IzJRz&Htn55+C%f`2jV({p(((am>K0WG zZN^4N6QCE_*ftS+-e%?FJffl(fF^@QPftI)RIn=}D+>~iVOL#km~jW=g(dB;-0nQN zZ$9si%xgWDy8MkVl;ifZe6QFDvk1F=5%1{gf^G$EbSWx_Xca0O7+gq6Ny+uk1X=s| z`Ex--gTEqe6L954%?ChU^Bl4zT$l!P5u3Y1>*z+yWFJmR7V5yxiNc4;qn~#=BYmx8vtO5%@2I>+p8owEJWg*}%X+YsP)Wm)e)DMVn_s&F!~wU1VSKe&d2S<3+)n52n3pGtgm}5G<#(# z>ayjgFo{YzI7RJY-cEQd?wr-L6L;^|3f^A*I~i~(FB>~3`F`d>##ieOcXRKr9%O5B zk?az#<|*rSz8iN<`1!xY-cYf5%gJzh(E%>Xx9y-cqdlJPe?V>LZkr7J+AcJ~yNX>^ z_g!1v$X!10ACxNMOj>;Whb@~9=Kv2wN^}f6<3CaHMSXpj1T=%+E?_n8IN$F!x3W4r z{PAP;Z3^5UA*7o`3%zU9sq_CDHYcNc`u3$Q|2Sh{BYoPvTleH!?I2;t~K zFOkX!PiLl!J8`Li0|u1+9kkoSa7mhPb^OrbLPu9R6O0@4@TX!b0)F;$jrc*w}b*DJW*AWLQN% zRp)!KX8X}$`2N;}uY>OS92Dee%G0-f*S)Z?u=8g1<^4KqSP~A`vG`s

?0{%@<7J z;PR%K$rS;c!;Xi^$=FkBVVMzQAGD7iZqGysgUv(O`T3W*-c~kD-_On#5SNfZ`=7DE z)BehyPL6;2^z5jY>TeXvJV`j}t_71-Iag_EsSy&{)3!aW>Azst=qLJ%m{^=b)`uq3 z+zU%w{)UG1e0+TJ^70Ufb&V?{6Em~9nOXE#a(ZI#Bxwwe^zP#*QJLdQ8Ew8?zp_rN)cYJ(& z=weO9HP)3a2O?~ybdj%C}Y#w(U}S$%Q8hDuU}$H7{S6U4(S6d zeId$fYGPtyG}`;?G-x#1@5dKoud$j_?zOvURZSOt1B1NQRsl&=c4xZdoqID;M}o+7 zxItuO+ekqQq3Rra5$AN|w*4fAVsB(@tZQe-Z-PWRD`uWV%sh0G=P|Reh$Ycp~#@ za1cKt7GLBUe&5pEJcii5$Mkb+<)Wn}7mn|0A!V65jFijE%R5n7S$R%QE-@?j`nVLN zn6sba81+a{Gx&K~8PoPu$V|{X&a+k()-i0_`|RP{tFLnr;dMfZ@SZgtY zBTgIN-hEWRIvV;phJL+Y40rs#xVSio6=UaL472hg|e@_!^o3Bxn_X{vm^>p=T9Q zRXtmNotV2C);;{=D_OyJ`oeD`BWMJZeJ4=|efxGb`jhk>3ryBxkOn6=_k3pzO@x6= z?+&!Eq=cT7EO^o1-=DpY(ed@`*NeaZt_S8GDHs&jqA4X36CH>o;H}`pux=|9igj*o zZvCCwj0b}0%A68@dfMS_rV>4sO4a3&jL5t!@s^-192psDi_=Tpf%f_|^q^nSxjcP& z>y@o@!^A70I0@?R6T7&s=-rJ4dS^}$sn{VN#f2e}9gd`rOTC{zJIT8b)}HhxeIAbO;7Vmn{|6nm&0 zJ+c!gqN1Xbbnl)n63JZeJCh7@URhb07OO@(J<`R#u5*mo-V>@Y+d77#qN2uwt%;%0 zQJ%#=t$XTd6~`u<0*7X1g#Y?-v6H50{aT?$4(t5Ps6`5ub{sEtcg@5 zDKiCBDz3R%qr$#rgt*CTlw{KqEZf}DGBi0^v3X8uxGRocK~ZsTo7n3vA}S#%NsoLA z>ngx$-LJj%0gZV7P*Gk!x+E9N6c!c+FnnWK11jE|aakf_YwXtI>S~|ThYJOp=amvH znD|w_qRC&oB?%EHb5IMEO&%i#+tyHpvhs53kfHGG#s_T*Hk%hjh>xC4s23D5J}vFb zHW-#P{?eIdgy@I^d?5hp&lVSWWuhZWyWVH&{w+e}pXD};0XrXF3L0$+lvGqwN+A$% zYBLe39nS;r-+*)1dyU0Deta4r5h8TCvZ1(@h3<4WC?K=z*AoHm@e*5qFpX5$#C04U z+AUXCF(MF%evrf%j7sqL(HOb*os%gkDOaaiX&C(h4-?zA_*exs?v9LD!R(tk0c6FI z=7+F#cx6@9gsdz+S6A2P<>kzV$pT#;O|@6HqXy)9b*eZF3=BMO-|opbc<|C^N(1K5 z%A*;w+S?SkP$wiS4rOC20C2{97N%ok!&_5ZJ2Wzqpt;&OUsg}nsS9fR}1{rCmc=Zfcfgbk5M@+XSX$D4kB?0^QOyj1zy z54P+8A^oDDz_Gi#dkzNc1vu~D!=mPa_{Ie;D*)wGpRoW*WD`!9@<|-?y5!&>1Q?zA zIgYK{OVyNo$lDLySnD{-Z))P*+}wOQ<^@iT1|lvl4nSiw-)*)#UOw|OpXtHOWKK>F z!0-%fRQCCp|2srZ>wwKWiSVPS3R0<+wMqO%+3pS4`fdZRYD6~= zkHvg4ilDW!$u+vO6G}|_I6RC`O`WHxL1-RHdS}d@K6A$Z=wLhCzBovKe*5<%gI|i*C zdzhBSSxFkAouU8N81^qA@Ne^-eZ-RK1uAVe>Xy8_D3dz4tqo%t^37hCSnHpp(-U_R e`3EZY=!6U3H}1=RJz3z-1!8P~(y!8Uiv15lINmS- diff --git a/docs/_static/images/string_diagram.png b/docs/_static/images/string_diagram.png deleted file mode 100644 index 197eafae647b0060f4de11b4fd9919550d8d1ee3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58067 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

K3@?3F{t#}p0El=fXapJU&BkvkjGi9q!LwD z!XdUabos+wN2lOnla9vR)R|R2h4M3>-(AZ-=_$#D2UURC@lgfEAQ`9n9jnMS(5|o| zN z!=+QpS?riul{q^H@5J1EH;~3CdOK|5F5*i2fYRCs1d8TA%D0_4+rJJ4!M5*K%+Kd^ zd1F_X*FZ_TU{vfwBG1k^dln|MPcVfLYPq%m2eDQ+bH|{C5EH|#tVWI%k2pTOP!;*R zsY-!eiV8?t9794DWk+KUYN+u+{z{0@3;8{H?HqBAM2D=tHTaYYjn$wAKz2eL zQpX&XSMnk9CKj3_@3_!`l+*>ll$N!)GCAuY0bI9!XyPAmT|VXY5^qlgX~%-sK&;g` z(T4v?W7GzL`qwO0&fi*#4hVWoe$Ft+l0K$+R#D0HMSk!vU!!x+DvrB|f?O%ECkJtZ zSG584IhrTL(pOb?{hb1?bnlz9`Q`6)z(4yyXU{KxCwAH!;Kl#TqDlPVYcVy$Uz{D* zvaz6-R1XnD)+*P&w2?N4;dP1Pc|z6rs?{zBXd|&J#LOpmXRv;snM9?()Y?srsnyPe29oj^YSmg;@*SzwgRUcr;8qRFekj0ZGUD)BT z``pgO-Fh5Yaom*k7e#jWu-laiqhGX}LS4@EbSH=9v_8eG*)mDJz_CI!(1~I$MVTB^ z(f@o%?eY01t|h-5u>O9A4zJmQf=-tJy@5#cWTr|~q`s>KW~m`$mstE)W)g8s8C<2f zzpm0-Hq!t-L7)R_m28KJ#lI@t&(78zd)1_oDn5bxGq9`rzYq9lJ-;#wmWyTcty%QN zg=u1HGogRmx6?fzY_2vt&SN?2fpb%boc$Xn4>~Pfon17nUN~+p9OGBxw;=$E5%7uE z_&o^Aj^+<@7QJZoDVVLk*lPFhbLP>aHRG%z&>m&eY7)OqUH5|2#J@cBYnJ zp^ggoSiO;g>d|hDEn>%rGakAqzi~dINV?duD&!cZ+ct6iFukI0-)WlIa=V4-Z55HtExZhP&d_?zF8Ix|^^pyszE89xBcz5%c}I5n}YT}eJyJD&8ZN#Tz0 zO^Q9#J=W$?)(67lOu&gIt1gqhY_^(8P6*d;#r*J>y;3a2Ua5;6>I~zuW~TBDaOuk* zo{McLD22_=Q%QB7EY_l6XuWGCe0FD5r4*$jh@N`fbD=&LbK}0jZU#TEr0IV}P^7PJG;h6WY4t@#V)Gg|y$-GpPTkFXzdQ#E6g^l?qojvO7lEoXI7Q>5q zOJxz0O-?hXHt0qMabB+2RQQDMCX`n;l7J*xh-)GUo$-^op&Vyr-6_tMO%CHyL1wq6Ppff{F-OLA#dC*I_AXhV$@q$etDxzCL; zLGbh*Nvf;;Ii@(Me-`R&C~xp-5cMYm+c2n(AC#kUH4BIysbET5o&0f$Z9v)x0qM4!^xSxw(!mBEoE_zen-&Xvli1wY?Z5D&E zAuX^CkXI`gbJ>$~SNwI!Q4#qgh#X0S=avH0c2nMW-*?gk4qzwrj^HCbnk-vi!jrg4 zydzf>@jZ(;BCcjG)3p{~v1dGRv*YAmc5w5rNUPpKH83%@eJgJ0qnF^$P)iugJS5I8 zY)`*mN&BX8-En{TN2n&p*_2)}vWT4m+OaXG3bspGh-8rbPo#03MVpY;CUn*e!a&uy3_w+sS$#)pAu(p^lGMbo zC?(#t)StdiJURAX_68?aV?kt|=c7_ujfoBhW7uLEi}5R^xVmduCXE4S7V=VC8Gd6` zmpZBT0pbA(lQhrZaOzePU*V#a~fO4Aa+ zDChY@u~lT?_Yb!e>%_&b?%(q&`TB{l2L5-=i&UW)d?(}D#|af@ros@~v3WnRJ)1DS zwiKVq{fW4_72~JU3ZW6s&vV~3v45T+b*^?|Nj&l`tIyDH6lF>}LuXXN3w#smvjMuRP+&3w0CA3+-7& zkjyk571r(X|NbcZg)i~Oy+hyEal%FcEFt^9cYvjY{DiB_5qY+`JRxc5+-sZuHn1_d zTV;=}Nd{^h{lG@H1Vv-P9LJSgr3bHy>LU~d<|Pv>XF|tWTek-q zye^ti(^GR_kWIU~frmerK8L|@_R73oYO`=8Sqrqcg1mLDg{Nm3>I4Qh#o8LhCG9Oz z@`D!8c4>aa!idHydBhPdiJEWM-|F$8>H@>&UWbUqd@f!1Y6_z5^0exM*SWr&pUi2D z6|VnsdGu#y>`Q0_Nz843Y5a5*w=sxIt)~jtaPQEwqT?f`u4Rb(p6Bsh({q*Exj*xH zQ9FbgowM#XeNJA1|D>E~3d@8`&niqEP5N%x>4JK0b}_Rb3rfbHpNkV8iQ?TZ47zvh z`I1qtNI=XRgQwB;cY+$KtB8x;=n^A}N@p@^|Hc&ez1kAmvya3%pkohpM(JhlN! zS%wNS1lxO)Dz1?)d&Bb5tL%pdq@JDYUDVKH6M+P)gB-`s zE~^#B;_WBnZV{`Foae^Uud^?)&k>cX?;hXW^2sr^izBeQkou9L@_wb$H*Ik5*2tnb zuuyR$;g~pCR}62#paGZr!6@hvWwWu!+S&|0u`a6wdB^u$=f-5L4gE%-i#-tjjxU|J zoWkkMw~#}{a}WzB(-8C=NM75t31?3#HYn83VErh;P|?lz`RiM(uU2nAxb3#* z91P3R__5>jsh*>7LL`m5Rn+sGs3*mVk$|gUZ4L2YrmEOl$`oujK>yURUe~aOx%X=< zLsPwE_Nvi+a|rSj;(lz4>~hs9(hzFgP_ntV4MLLY^k}=hNKkK?y*8zM!2R}``7*Ou z@Q#`JynH+0BB-`qnttnQ;uBpd#W3%0 z1DMVolynI+ST-ETyR+5ML~3qwHFq3#>uX}-i%^lR2I9Ux497<@X7Y!5mnv-Iz3XAp z2_lJ)c#g;O{_Q=dO!WMp>J7b#; zn{?}71$W575uUn^&zeam$(64S34!IguXaZK&)XSUY5_E$3ddoYsZ&ULbMpYLB>|w8p@367etw(aNZ*# z2k1w$Z*S*3xh(8ne5M+@Bn*_e5|Ul#%N^doAzvGi?kG@-@?G2$aRS#$)u<{8>RX z-%+GKRB|f}BCd@p@g>=(qJ)t3B4#(#R*%Q9Gl*1yYv(yT0jKp3jXZbV*-I_-<$=3Q zXJRY^N~OVvufPr{spceJ#X-zQ^!9w;WOqhtuPZd*Ciwch78?~#GmuGLP_q!l+^`D} z&q+0D^u;d>3_KS45G_g|0C4BU`6IL%I!w=*T}~`g1+3)$ynKQDXrwS2tb6pOo)^9X zpE_{Jbu$LspjZr6iRf&?f9(w7yLZ@C0xx3qawny6$&R6VdcmaQ6Yg~&+zyn@s~f0` zeg--zY5mvS53#+z_~2PYE3@Tn;xjwHdqO>}Iz9wiBjjE?Nzs#qUY9_S0E2#ibpYYz zV6g!?+d!EuiCvyEDXQ8D>9(ba=-#B)1xCeor$b2DH%C|>kqz^*x;vg@+aPKrX|T%L zMP^ful#Sc4EzQ#FP3m;jw|iNSMOQHT5=Akq4q$ckg=T;oo|=rjh9PfY(bL`Rbuke6 zArSB4PwpjB1CMm$8Boi<03(%WIfFw#IIKh1vJLO!*l;5*4FTf`L5hK4ZMk){f?w&A z0i3Sk9S2Bj1d0c*Qoy$1fd6mO*B|iQ?;paX4X=Z8>YRv6g^U9H2m`fHooDKuAEQ1q zOt+LtSxVI?_yq!&Ayyp;HH-3ds+Csq5WkRrT~-84x*%?pSV?r=J}eBZbh~2ua6ck- zRdgd7oHLGtMxtz0bw# zeOM^WR9TVz(2r};*5EzK5NYyx6A=|Kg5-GZIYS#*>q9H~s3rMgL@1`78|tIzIRHtP zqB!^=fQ{L)z)|dqPoGhMw-Z_P!HzdknEGN8lq~DsDV!wOwC)>SRr_3D%A6}}ju@hP zZQ$SxcA&EWV%pk9b!kgxOu(g5bTxpOfFUcd_IV{cr=TxcFiV=Lib#`?G9uMe!*lR_?(KrIfg#l^!ETOrG(!O>Ut5u?3;D;C4MF^A-OPpjp z4_#!=|8Q_#n?pT@85ieDw3mbI4DB^7&)GjK5n=)0S1?sKmE`HF^Wp#7llVOfG1g59 z_~@7gth(JCs`<_u#AO(|a%30$%6xtNPw?yCxj3VNxkIir2awb&7=FpZWzJsgn;czW2q5fz> z*<;;dl=|0S{ehQ4z)44nD6eJkeO>_NDjW_m)E(ZFu44ONcIO3K-oC#&_ri_>p#7I8 z@9GuFSF*sfX_AjKGka^MAZplJZX0RfQ4*Oww>=4YPFj{dDpF*C;B+FVH0 zG5jX=e!Y8l!d>w;*?*nkHl16=U(=r+VyKjH6qv?<_n1I?Z=NU$tu|KMQ$gwWhePwO z8KEr3zouS|y&&+n6S`f`68UQ`Dm*UT{Og3d{xYV24&n?o#4z&!2p%zh1`Zk}Q6=7^ zN6cJ8D9yhuITrKRJZOHT75b~e%Qr%<{MiKf=~LSmfA#r3%kF_svp@zthoV`~Wjwb0 zh+3fWNdA@IdZ^uf@A{v8`u13$eOb_|%a-5f+IztI&;izG#gr#y-5KME>BeOg@CjbaAILR_oHF36C&UG&Wq}w z#)7r@Ao#$7{r88vS{wK*!t4xs$Qq6(&6EH|=Ox>L-jmx39Bn%2t5vIlVMy)8LX)gY-cbFUbY)-Y=yG3t zR!8Gswrp82`{`Tvi6H}AN-~8mM@STNT{!Zfg!G>EU0CspBmy0;J8Qn91LVgCG>=GW zkUq{Ql5rmu0GlDhvPn%M&YX~ws~EmsdU1Ggn-EcT#i0N88hM*u;$h{4Sckp8Pu#4NO$*Px-g8Q@o-P9NoYQF`54G6~`FX7D3zs3h&D zbgb?31J*u&15!L06_}#zj-CK01@+9qN6GU`K=F}(c$oaJKtoqA#G(}^^rbu*e8DYQ zy?xqD`MCWVaf3ghqW=Vi{N{=BJMQ$)(Hp8$2v9VBd@j&7KaJI5RgZ~+Jh9UJX_@l3 zNYlS}_KX~lu{|k@Z@?`u2^N$OOsH+pmP`VGz+(Q}S*94m{Ld#-q`)!%wZ0S<-CJXC z3hmUjl`fu$rFiG~g{rc=oOM?-_xl&9q5nTQ9)t=6j3NIWj^_cNx%_LP%9y+6g_l$% zudAQ?MU+e+Dx9bRDW}~TY+C7{m1DSi{QJ@^s-?2hX=HcY=0A(Ua;#3xzwl^tM+;RiX;6n$}*PApwH7DOI$jdS3s)|j}` z{kzyoays8e;3Z>z%f4wgAVv=3ABHe?33}Q9WOj? z$2L%47iKrR#Mk_|Ir<8!kJ=GID%9B`ev> z$ob-e*+L(TWNhXPRIK;i|7ca@BqZxT@hn)?L$opdxmE(TPbdt8HZ1x?(b!kL}n141lu&N2}Fe5Q3UKqXcB7cz<)$3JkjHb ziW?wV*jWkQzd3W~8y^j#@J{6^7(00dsIUe7rqh-JA)HwR>_oz2fGN-oQM;4pM3R8w zL?(tuwvfS6A;r&s6Hp79fBbhJlKYBp@oOgTD&Vx@6?_v%OmZrX;rhLasYujq<;S3$ zNnZm~yKoYbWM!F1R`ysWR_9+gE}CVe~raT;* z=P{OB=2aY=|5b5aAc9)`=z43LP=-zEEOh{&Gjv&g@gQb-e~)c%}x;5?`(ni;& zL)>+#REWnvUnX1sykgSBW0m8U=M2Wdmk;Xdf{e?|B3qF_)}?6fDXX2Dd@p4G7v7wPM{D=e zmEK9()O=Yh=97d?b@Ry1pO-B=pwKviM6Cg8FS}HbJ)wi$oQB z+h{ug+Y@Ivhw%Uz`wHYg-%wu6xfs-hhuHwJ;YaTJ)&UafGl&2L_ko~6b!~qE?BlZH z{4;-p6h(g(V)`UI0{n$dh&XBXEga0pgU#mi0M zAwFI4na$|g_u2A8p0dfW3z9%_y8+VJHa6~%mzBE^hr!c5fa17u02rjae^zcwx$7KM z{@Ks&hJz3yx)n2em9t5cosaJ61U~XEwI!;U&+Sz2$QM92sap$2St4)rzxaX)ewu&v zrf@sWKg>`f8_)UU0Tm@lC20UEF0d%cmWL@97tlLbzJDKKgLh|flh$D0S( z<9uYko_Qq?d2(0ysZhJD3K%JmhRsAeTm^L0$-RQ56n$FISXTpjSh&LFd$On3TbG&) zIcOYwjetDfs<7*GBmOKJ%O~w`8qQi#y}G`kci}W&Q4ip8!M;i{Q71K7rv<=b)-~jx zVMzx|kYp#}mCNdVAa|}KukY#`zykI=F451vs=PY0LsG>+?Sq@tC{m>#;0j*>9`t;< zXIG}{As`mdsvHz4#uq&8-zMQL@4%qA8GC2hO`-`4r8qT}DgioUUa;i$^=GS2fK$mHACeo?`*jZk2?o>j{i_mGIJQ!S?WY6&e$+ z*oHKk02+>I}5mG^)W1sup z4@{eKnQ!vy9$-&<3M~Fh#iZh^oz6?NW_c$gwL*_`vEAgbs(HL28$I_iHf9 z9}#%#?eBIf)K6T~5AF)2Q)6~T?yW2mKTh1x`&}MC;`xMD_Oy+#u6$M2=dUwaM2vUe zaz*F$0@||{<|NR>Stq}4itUGTzSX$iUfih?E5#StZ`Ia4Fn6i%Q2aVPadKDud5&CS zeY-1i-*pYaB@0>=D!tD9U7lUNO2ha_ts6+YtFVPsg}ZujcixU!rEH?ZC!h6K?KDPH zs=jA6c?yk8X@h6RHO1b0l`qO~4qf!b?)1XVkV8(n|f1LW-#E)$j{F`g?x?Q6c0O2;GT*()xWm^<}jcStecYIWpC z9DeL!pqP{VJNO;Iq%-Gv1D}9M`P4CbJ`|^mge@jjzGML&--4@KA#QfCmrl% z)#mu7j+xKm`{+{A3oWo?yr z4Lgindj|hwr%m9Sjm{XY&Ar78SrvaU0=ozNe|zJm(EDOc$&beIRmeIop+!=*w#8fO zM-!Y@a?*E%xZZ*X=fCQ3`o`3J^>DWKvg2TmBJ~P6ZB(S}s zO;Bu(J|wr_v#5~v-qzK|jf7n~VC+fip`Xb)FUP66H?Ht}J^RM-ikDB*rwhj*kRUau z*r%9AgzFRbY(wA)Ds`D`m0eD%B1(q8;bKZ&{1)*s60t6s;yyA--jTX>Xn#37-ig;t zE1DbU)mM2|V6hD#MpuoUsWs0WJKbB;z*K+x3ag`H@2@jiEtt_xFwJ#T$ro-oWWZY6 zaeWUlU*EAkes`Cr`|kG(AtB;5U%t*uVhAlwplXD;G4~gLpJrT@g)^=V8F)tJwaqPB z3NG+^6V_=ieU?^;8Z77+>w}X?S%U3rqj@*14rm@TAHRFaUF?G{L{?n& z-m$wMlXgQZPJrr<*}dhq28zW_*dT}3PUO4ektZ5QziZ%GX;Q$KtSbhr)QTV^e-rUe^vq#3X3CjHAh&PIs)5IY)cyg0 z@V7#jz2*;^hvR>&GpX*sT^6!FE|NXHOMe_GLqrrblpzzwh^w#%cg{KtCkVFZ-p$W4 zb(ggb4AWaIyecfc98!?l2(%+jTG70gFURnPMmO58?x1mz=i^A#Qywj(ZDVJ>_N%L~ zTj8M-m%Oo3nv^Mz8{3*GKfuwvwizwwH=U5<`6$rh2ND*So{?W}z657%=-aE6zB9uW z<;GtU?nOI)EW?OnuO2U2;bT0aK#k>Q8UH?_uNUe=h^+Mnxst|S4ffRZZl+Y zH=q21QBE1?=u2YqY(EhV3MEZs4yN*p{2_!y$@NNwhfx%B&VDMZ=(1Jf|T$|(BM3F9`Zl`R98U7$ZieC`p86FQ< zgNx)=_?6dS=V6z*aZDga0bHiXkxdB~S2>Hj?}+Usyn#f_dc!2CH=

y; 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

8hA4gdS z@{`xOo~Ff&f=UAtSXXSDURul!;L;RO-Uif>rR^E3`{I@fi%n;#W@ej;zgOeev_kwi zlSh05VhdW2c3)k&l|QQEpAcI90J>dQFXhQl&T1} z+Ew3&+0LYNHR&W_e2KV$x?;JKnqDMc8qIn=)2&XHLR-vMDlx4}*MiTlICIydw_UnEWTYscreUN)l{2!So!w%S9@u9+Uvnq1OAv9yK69|+xf;!q-TjT zz=_xMY>pKfB>L>MR$lCxpT);b?mW!j-`n#hG)7hV?v7V)2$AchPy7zp@b2GGLfx8@ zL8l#r7s40rf&ewOUQQhg~KDY`Lr(ueA^S$As z*Tcwj)VWWeYeS*z(&9GJ(PQPYe)qAfPt!n~B}m-229>on#rQT4tFcu-@Qcb2pMXZ)sc#yqt8Rdmk0#U46T|jnAwB zwd}82r+WYN*y{9tjVyiTwUU;2A9apnTj~@W*-l#{vxJ(_L}B%jB$NK4I{l^nx*U}; zVorvp_Qo{nEQDbB_ziFwZFxh+FxJ2(z27>PCFv!3&tq0VdWw^0Nt?dI*w8boPG)A< z|4yf-q1os}cw7+qIYvXWyH_%jGqmk2w&`=d9HJ_{iOjQFrRGRzIb#Cbj2-Zv$Tcxa zBGr%ra4FIP#>gZ>?aWt`D9&eDdXG%8qCggE2xN|RO*Z4i%_~+XnvwlD2x@{~${Ofz z?YBZgU0<*J_+4_fwN`&qxB`R@GAPdGF~JO365O**7K)W(AH^;QQMMWhP4MRCJv-w_ zLO_Bc$any~@Y->BN+^1{Zzc9Dw`>xRacI-1`c90B;QER6Cbs~D#1pNYasJRZ&2{z@ zL!-v0znmS#2Lo|oBlJOq(~hRg9>yu zY;9#(JLG%~cj?UN+GmMC34Skt*BN96Udh|w$me!^seJm6vyhHG(c{%w?OoDm0}0(M1Q@Rt;~&FY$;do3a_3ZTKf5Qme!cl-Bdd$CQSARI8&96$1v^8fU1W{q}Y1D zH&`6Ehti0I^mwO9w1yjduv2SGH!-`518k-jVDN{v*Av+4W8jCjb8d-h+6FlhxRxL8 z*y#nC?@UD+$)1ocw439g_E01~+V208h)3&d#WV2i^^er;(;{FC8(pTa&HQ&_C;_?N z`?mZW7uWkZF-qy^!l1O?)CB5wm64`8CBF^{0>q{H+V|?!GDFKl+FbOhfYldw=A3<3 z;+oEWEO8KX)1Z?{3*K3`-^LY`=HER{ySgE|Q1L(-*|bQH!LQbP0)>=Gs7t?$psK;B zH4n<%;hRgnn~w|8U}T}GpwGgrHeJl-@fN97epVf>u0 z@4crE0)gRB z!S$6M@g|jSK|5oNH_FpRx{U*pgy%<#`y5@WOITN?UL{_#rP%;7WcmU@h6S)qIDcpa zv2Hgu39%m(r~Iu5$0feXySJk|%uM;ckO01f0&Yi0H`;45Vcv2sVJDD{I$clK`N4kI z??6{!BVwSw;*t-@c+ETkU069-wTC~yY(QWS%{>UPh?PH55vPs;sfcHM)_R=xC%F|C z!&_CMgS{Tmf!S3i%8T*5M|ED$C-slr>IvyOpJYbHl_L62x z_-IfI$SxkqW<-d*D9zD*wamD`Q&^}|#sPB<|J>?9E5Usu|DuP>TUMb*+nU&`9O7k< zydKQXZ;1zvxDDr)yBmz%cHk_Qq@};`nu{s`sviB)w?UAP8DD3Kht4p^6Xj4k<^lMH zHD!+7Yx8x(3Gwz_smJHf_&&l^2{;NJ)XJQsq>u>#m!Pug=D6C%Og`OJWt#2fYOP8( z1J7I0{h87;C^f;D0UM)(RPfp~j%Oh{wOP#ga|6XNH7#tWyGpuE+H!lj)a4sf@oyI~ zTe9?nu1ZMAK{d38r~2aPnZavnp|O`9R=^_~wq1v8Z-!CB8!AU&CW8yGu0cvtyGA^< zU@XYR5Q=kB@%y;$$il4+c4FeF9t^k~mqV!2B`fV*VNFqK~ zo}qeU$QP6leniid8o&(@$1jNSnRg-ITvu3p0csW(rS)?VQuNYv#kr8lKwaaGbYO7Y z8c<7kQL+)2TSG!DMx-`-S?qB{I@(W$L_3;KkdjM&{L#nG)Q{WMM92}qhDy(3BQi_V6IsYuV>R%F2EazAD%ra>Bozz5xg z&0IB1Al~iRUhLFz^=9WLKG-(TWciIj!13lxF(QQ2gYR!G9&Hx#G9-@ZjgAPXC6g@8 z(vNFYZ~u8r)^#~^91PzqU96*kOYOR4#Dhf}MsMYaN5Cg9&McGp#gAZOMu)TCc4fFH zN6-0su2fUDXXn_?M?W!ZkAr2!C{kPES&M{@7Huy`$fa#8pKlyB-r2vr7t1^8_iTTA zb;A~6ZCPXhlWE@H9M_u55BBGWcn#w$89Y*DlVW-XIn%$uz1$12M!P2}l0Ss-;SytI=Z@Qt25vYb3f|HGpApQQ12P2CX#;e> z0A5za0uV1ks=DO&e8LZa;}=gLippagruxU2{(#1X^aDszr!^hFN9colny^!@Q;tbayV?gapBDOyg)e~k2f!p2|#F67mjoBZAX|M7<% z3RpsK#Nt2s%HCE34iG^7vPll# zEz^%df!#bBsmWJK{fi-sxq+3-&D_`gKJg!aTt7fO%{6%c80q_jGrfTHo5_r6!O8!b z-v8}FNFIRvmiq7TzMswCe`vC>eqB=>_~^jk!>jm;8G!aAqb-OIgXpxgv$rj}b+w^u zl^ZA4WJ7Gz@66d_2b7>AY+@k=A3mw>#XTT@#~;ofh(EMq>q{8{evQ}Jb9TSy0=48# z$eZ5vwO;L+%#Y*O#pLPOs+!uI+E7LoA3v$uFAS6lomle?(Ucw*T6CLiv~Nic-41{} zc%mH46uz9(`igG@J6|aMenIMGml8>goE4^8!?|=lt*Xc>j3z zmlB2OA6SLNYwtKTnE(>PyILu&?=t@PA8VHZ#ZvMtW4n5IQU}BgVSu23>Uy&KJ#74; znzOe6tqYueB>PoQ^itS(fix0)c;(Ooio_CWV%G0~G*CCGB6IrCM=TJ)N8szaV@D26 z{9rQQQGWuzni^ozs)n>fsAoG4XaUpZ69b2a2!T4&@mN^I4m!IT7YSp5psU_?AYWz zr*E$c9S)gLWh5{}O{4Y0LmP5%D7z-WmxD8c5x)Y?3j@dH;$~EZK3LOeXVum}_|1P- z4>=%z@H|oq5xNwX1^SmwR8D#FBnwURi`UY?fcLspzZ1HBNJI|K{NPJeN7D{C4ku%c z4lf3M4!}+)am zA{Q`loY>HbLm&Eb6F4SePYJzTUqB3`y82;<)Z_<;;}?hg-Wbq313`4!ujKn5(#Vh= zu#@9gX_4}WHZ2o-Am3ZMlSlkR59AwQYS143h%}(Q>(9%_SpPYm|Jk}Vh6B}e&tm%p zR6S(m5+Irfbdp)bfqW0?PJB2tL`WYXy;aF$ixF@19?$~0y|qH zXybcmL;jL)L*UDt83B5~l5YsGCrgn=_2vg_D$zo=9hPs*fmXBKW(HL6KqL>p_doIe zaaRBT7Vl7FxLRH2P11CSdVWTbU$U%+&5-X*n*T=z**}<=Udwqol+GitW+_1wj5&PP zrU(l@2CrE{U3Z^s@f>&+f+G1r@)uPHT10|3p1 zxgK{&VsqG`xKdSz>s{Fh2vwUJU-~*;l~k5t#E1+3COL zHG30S_o++ehi<38p1lRGk^cViT^b2U*;?1|J$bWbb)rB zXJ2AcepklI;Prrk_w&PfH3DL;d$kq)Uqa?0WUuw4(EB<|V_oVRp(9?{wLjz7di|IP z*^++q@A7+WmB>WTE`0B{-5GuSL+uQu;(@_@rM++0ZQ5t`kP}K(`GX$Qd7P=f`WNKA zoj4Wz!Zd!eOLzv>6%CQ8-;UP@j8-)NA>T8g6N*79FdEv2Y^2Lc>g~1b`}s?~cR#9| zucg`L-!C%v2U5ed`V2V~p{?NPhk`aeU3(|3b@yV-MSvk(JFZu|wcgzOdT}&WONo-e zG#W1X(+!cSeWJqgPZ_%}7wmhgF3)Ao#1a^fFJIbzu1s?-afC$R z$uPA^>B*m^>5K7ET5J1a(mSbN+;+(a#McLA7k}l%8w2-ev6oWc^M4t!C(63OC7IIZ zIPr@ijn#om649AI^lwG~-R>ZQ)b({v{l$=uK*(F!PkC_h=js0yYHA)tkXK7$e&PDq z9mLZ8av2V{e%hPACYJdQSc2vh!tEDB79Vs4FrLwM{>4Rq{eaK>i!=+cqD%zf-zDC zJQVYYy+st1&pVJlv>%&8BijYMWgdTc0uWINIg-bty5Oj57TUXzG3kBZD~jbb53#M> zy*b2N27;{ zDEa8G&n645z}jY(Z8P8lc+q(_$3Fv zoOTWTvnl#ZPAw3C?8Bw}jDua6J81GX;=E%F({A zQDsi_bm%bk&$464^~Ig45r~+0@uZfg6>70!8f-N{8-n8+Mk8ehlsW1+5e)`5oCW@J z8k~8Uy+SQN>Z^^C98@P+++XLy>p1(g_|VnQ%4a0m7=`)7tkyrR4KPOa=D6KLDczmgjp_=Wku|1ZUbV$JUh3BpR+q@Ui6YD)~Z;*B%VBmY6FBL|wNW_~5zPwWM`` zE1|Pd&~pl$O{VVsD0(3Ss0&V9cUenjUlMnDue~+6wgzAw)seVsC6yf~cASx|#&ZXp z4m!W3s@(ovbB=G6S=Z5Y_l0c!(ft*eeM$_rKzQSJz5V_cWh2*omk`hO!6+r3Z=83p zSky?AJ?I0i{lbuQGkMB<}9<;}0g^fKfq>=oJ16{1l{ zH~nsjt=izO+cV}8+=0aR9VGhm7b{G7N8;q3se^gos+^nsi*p$iKXRRuUgc6Wr^d+E zvy|RrvR{UEP8MeD?f&UGg66z~-fH)rs~$#x!0g2nia%et?>);il0Xn`nW^X5hKL4|J%Ft3> zr&+*O7!(0K#uBL05iZ>q3WhYVp>*n9TfH}i1JknPJ*)BNGZt1ALJmSRQ_OLFtAJ1S zz&x4vecQ2d62r%a&EXO2C7egt7N-WWt$e1xZ#f60XG#mD#DX zN{`JBDUA8 zy7>0{y{A^|MN#XeL)&hqpxp*3#FHBp&jZ$v!!@)O2E8Zt;&6TvM|lXb7g9%F#C;pC z7JQW8v;4`?R=Ce^-k_RC$B653d9wsc^#EM;{wj@B8|7H=daH8}T?)eMa_mxVSbBi& zB8l-M$u8b7k0U(O9HDBpBfP(QZ8)!^-}RK58U_UoqQKVjF~dh=yCpX_Gqlw6>s{TG z`XWRctV&IUZdB>6(lgm|mTOjTN@Q>wj3a}f=FUMh{OIjJg&mu{9O;tl#r>b@ zCW!8@E}bim1E1kc5UKOk`Yo<3b+xmjXWPtZd4#=r4PJsX?i6_%2^M;@j}@F}?k?Wy z>Ggg$^*AQAwA*=SNPgH@4IJBwhLG*{h*nO{CcHm8p32~(!reFBOgp(Z({LRnY+?^P zQe78?x8X^l&fJb(BCcO2VoosYn}{`b>;mlicLzi+XAkMl(Tu8F9PclgArfDCz#HLr zY4{65+9aAysz-PkpXV(H+7+fQJBN-Fmv*J!B7XDh9a%KFsPA#LX$y(lRY6gfe5djv zcU~Y^cuy3mg`8MR{MaB94dIIu+N&=Nd$4;t-P3!w{JPK#aa(ukECgUtr`aj8grL$q zqMFN8ww`X=dZ(&on)0S&YX1;tr`nr!Fom%`xf0~V4+c5#3OU8wgaZ0SDD2K=oAkk@LMPLh!TU?dWo+19Q}M2eRnZ^;qjq!#i{_~;L8VZY}R|$H`K3x``Htk zy_?Ci#Ib=XK9bF&Z8a!I|I&T1*x9$=G6!2`3N=vNx2)ax6YKKzo86aghxre-ahlz` zGHqn2V!UgM)#K-W&~{6;sf-g2O@8qNv9@Q`i1Bo=*&8}v;-=;MXY3xQ;Ijp+aZP2r z0QNSvTF`3HlAqRGM)Ek7<=7wm=r-B@f~m1u&1WCxnZv1~*9WcVU^U`z?;;X>)v^%~ z*~jYb!M#e1kqTLT)>d+>M}o#O&qM`0C(1p27>|Bm$S?pMw0tBkqg%wdjU$H(>e3L* zYkOz2R9$Jv=#`}oEAN`K8G{Z-;No!)t5@Vn%9?!oN3*&=m6pN*h68B|*-uihzkK{E zh7;6AA+lxcDM)WMxc*GqzhRJl!}{<`XGH=O9V>PBKF5U5!(>I~t5$ypkrJShUp{%|^=;T?A{ZXcJ>0!@i zXI!>v|FsaC--JjcgH{7W{Qg&eLI&Dr|JX28p}?)({~O&RCduWL4LQVE8u=-V6xxj?z-R8VQ+UlTfMo~!Plwvc1Pbv zK`)6EcOI%o8?-f&!NG4VrJp2_Ur4QzI2_aETLFs>dDM0m^q_&ettBAMKd6(w8i+*l zHsk-4<68GOtG^*9U1AXX+pb|J3nfNjD?lMjMNFbcrk2>qh?4xEQCbE7$Nne6$sGOd zf!x|UBy?Vx52G7(;y0MJQzv9#aI0If)Oab#XO7{|LXy?i7lnImbDXI!EyZ9>XG4|# zYR*8ae%8Al21&2q$gjKvuEqh>c9CME^Do9(SdhmUTmT%hFxptiWI8|)OVY6LI(fQa zr%t3x{Cd#y3m~gL=V*w3M}^wdRlVH>{iH%IFm`T~1HCH|%wIJT!WXsF05~i|YcK^d z4NtFFcWme)Xn3Q;@U`V&EJxq2o{6OXsA&Gg>q1Bjcd!F^IC{hK9t^lkON2({-0yCU z6-sGzE7q2(yceTIMlh5^Td)c9v)FF;Rq2djIO}YlTb++0d4!@m(mxYCJHIwkf=}jZ z&N&1XLY=jXV2*_7mAM6-*188fLEE6|IjK*0+x{A_6l`SsF>Zc~VI^v8j0bS9#8=v^ zWy5{Qiyl!TuczGOdxg|IV~(_#$s@eZLu@C<0GDC#ssycGxQ<;gxx^1TbK)x7=0a|b zM$#}@BUAcR5wi1zcNli_d|_v_zF*%Z6LPr;1nwrcDywGJ)Z)5{EVN0fZiDz20@P4p)tYk-$=_q z9GdUsQ_E^N-xHvT3Yf=zoef$C+K`a3>@Q>eNxV}o0Pg*NtMegr$F{7M#c7rK)lVlp zUQCOd`N%0(|FNWU{d}s4rE{g(Fh9UoPE%~oJl<`MV!Lu#EhCn}M7u4tra?2%C@94v zH<7B*N7TIy`0p8I(=rHALlSfs>mECqn?6&|`+iDo5p;`qp1_}P_qA|~5{2#Sa;aS^ zP&rlS!{&Q$_@(%J9Z%UkGmehx(+z1EAajO$(M#w)cf%!-T7?kwyd1k`a~w^)ZP~(8 zc5EoqnW31@Y<={6^+Y6iLGUO%xYo%=?pu+)fbj#h2!`=}kIxHhk*QXt##~@4g;+nY z;hOGwSyagW=F>2Tr~?)!lTzi7n#TVs(-URPsjn#?DgyKfOgM-8ikYm-FiOL`dWB}k z>pHPCkM7S1B%d~0ze@vlD7vkoWRHB?csnz=k7K{i*W1~pLL$=Qre`zTD{5-%>fD#T z;v>WINPQq~_7iN=-d}-x1F9Sn8#luO{39EY@ex4pW) zq<6&fVHcYq2Fh>EwFP?=d7!gErOBg0Hq+>_Z;t8G@b#by<5coy)^%UYZNew*eSP|h zKITqF@w)+@!XxXDB&IlXGgGwM13)JYkh@XAN~z<`&zjCI*X{IT`zp8Vdxuuva}dez z5QNqoX|rT5=bJ`cA6T)WoI#HYSBuAG;R0^E1!ht8E2NrX;c`4LcaQW4h^Nj8>E*E8 z{NcJa%gRv7VSgl48GV|6DZPfR$*#a!R(eKYr>A<+wK6-g3y5RHRgsfrY;VA+iv|iP3i{X4py%XAtlFgVe%rJ26gH9i#&ug-HNFy{#Ni>Oc9s%+mYqzx` z-b0Ubn>KqFPAQ6-qt_++<+s*`lYYC}G~02IABdz7!$027QrTE6Q;Ihrrl6fK-pj50 zsK9_Rz{IA+-Hs1-uTz-StzL@T+p_Spu-Tp(-;&}sC$yC6jSn9!!Nm1W;gJ+GZ^B4_`|*v_-)eBYK(>C3uH5ln{@l_#4z*H z+bM@=2%^x_GwR8xNSL{fCnTu9KRXikBDhPI3Dafk^!7BaaSiac zuJ3*ezSjFxwd)*+rgj2@%v;_ehE#mcbI!o;<78?e9A8;=(xZwcKIcTQ?yI~Y)^H95Ig4-Q8=Bsq#tv!e{KH#*!e zrk`BX53xJ8F%jpSHnQGma({3NM0-+pd6fJytj#KJ?Z~Ll{$$0R`?Tn;2FHWR$l>XJ zC3$D=!miejwSFT#?!*4mRC-+DhOj#mVR=AcCc#dL8Fv3ryhz#}P2IT85yNvdh_5b? z@-(${2??sQ_9FqrLh5%71Xewi+oL(3;LoMEdR(;!>ih3MZhQW@*B-2)Wz8~c$oupO zXm`5@QWiE%mC`9^L%6Ph{2J|km+q69fAhp#@=o|!StHSEH!ULn$lD!K7F*R$!^evT zBjSfzdde}+z6u#?UE&bl{%?C&bsa5!o0g{Tk#Q5S+6AAO?%Hs zeZ?5-0FE^B>rlR2bl}7M+^6TomDQ{Fec(+Otj5C8GhSSqEX{*D5h7U7<_c`?n(I(b z_F$ubNmp@lfptDEM%?{_0F6FUxq?e*f6wYGG4^f%Z=3aaHSt=d=8~B|(ZE{^%pp_C zT9M;+@pIT|4WO+Uehpo+jQV;r+0t(lkwvsQLGD(kYFr{|ZSglsonGF)RDY)aEd{AqPJ>{y46o z(YA4gFCP!GPEduFM+|QPaIG5~2&E*}7U|dCSJuGEtdwb~0=m+g~ zsu*}%gsrB!`KD^!Fo|WP&d6_>im}GH7~8?=HHLP_t`21wmB`occ`F|jv$mH>3!Y@@ z%0)drG-zg{W)IHSGoGK(N}Y3BaFs`&`kA2n`*=}tcYd{~`tu&ld8OI??ZQW}?c8$o z=J2mn-6*&DI%nY|@M#lnXIKqa^X=t61gCY;tPJbUfByMJ@Pn%^J$A$IvJ?a;K z+|3W(RTrmVRACwIc!x&N>Itm#?t-mxJ+o#PHVZr>a(BW#w(+31VNnv2>}5L~r%-W9 zT0tf)U{xSZ*aqlD_&)`viYLl5&`jZbAE%0M(wxX5n`Y=IwQmEX8kd~9%4qy*KF|{ATC-E2>~_mqik6SaCpem{RPR>EMZ*$^vvXw+>82aA zYpi#j&c!8o-1N>@!F1RuveO^RHy1?%y}H|G$tx)O=^N)QA3uw)=K0zs5>RFL?7`AF zz{=drJp9V@hHgDl$Qv3eE&TqccO){2uZw;LPJ(Nf2*aXna>?hA3K zd=Yc{aCH>T?tS_9j}6Ogb=D><%_1<#Um$9f%K=`GQ{`jnO7!5?=g4kTs}Fy)Kr1I~ zxFdC346g5+NP9c${Oc7|M=?O{tIAZP(B@Be_aj6T&evrQ-Zr9#rvhxgzOr)C43l#C zApt({FhlkZN{8lMwSGT4oPQmeAr-Lf|GxLXj`)B3a#ifDG4WYc`dv=S5@hbFp{Ig?s=!Ow;Dzct~*U7$68)ypUPzbcMr0A=9q-a&nXpC`. - -After these tutorials, you will have the necessary knowledge to contribute to ``lambeq``. - -.. toctree:: - - ../tutorials/monoidal.ipynb - ../tutorials/discocat.ipynb diff --git a/docs/bibliography.rst b/docs/bibliography.rst deleted file mode 100644 index 3e14262c..00000000 --- a/docs/bibliography.rst +++ /dev/null @@ -1,54 +0,0 @@ -.. _sec-bibliography: - -Bibliography -============ - -.. [AC2004] Abramsky S, Coecke B. `A Categorical Semantics for Quantum Protocols `_, LiCS 2004 - -.. [SC2021] Clark S. `Something Old, Something New: Grammar-based CCG Parsing with Transformer Models `_, `arXiv:2109.10044`, 2021 - -.. [CSC2010] Coecke B, Sadrzadeh M, Clark S. `Mathematical Foundations for a Compositional Distributional Model of Meaning `_, `Lambek Festschirft`, special issue of `Linguistic Analysis`, 2010 - -.. [CW2021] Coecke B, Wang V. `Grammar Equations `_, `SemSpace 2021` - -.. [FTC2020] de Felice G, Toumi A, Coecke B. `DisCoPy: Monoidal Categories in Python `_, `ACT 2020` - -.. [GL2012] Gao F, Lixing H. `Implementing the Nelder-Mead Simplex Algorithm with Adaptive Parameters `_, `Computational Optimization and Applications`,` 51. 259-277.10.1007/s10589-010-9329-3, 2012 - -.. [Hea2019] Havlíček V, Córcoles A, Temme K, Harrow A, Kandala A, Chow J, Gambetta J. `Supervised Learning with Quantum-Enhanced Feature Spaces `_. `Nature`, 567, 2019 - -.. [HS2007] Hockenmaier J, Steedman M. `CCGbank: A Corpus of CCG Derivations and Dependency Structures Extracted from the Penn Treebank `_, `Computational Linguistics, Volume 33, Number 3`, September 2007 - -.. [HV2013] Heunen C, Vicary J. `Introduction to Categorical Quantum Mechanics `_, `Course Notes`, Oxford University, 2013 - -.. [Kar2016] Kartsaklis D. `Coordination in Categorical Compositional Distributional Semantics `_, `SemSpace 2016` - -.. [Kea2014] Kartsaklis D, Sadrzadeh M, Pulman S, Coecke B. `Reasoning about Meaning in Natural Language with Compact Closed Categories and Frobenius Algebras `_, `Logic and Algebraic Structures in Quantum Computing and Information`, 2014 - -.. [Kea2021] Kartsaklis D, Fan I, Yeung R, Pearson A, Lorenz R, Toumi A, de Felice G, Meichanetzidis K, Clark S, Coecke B. `lambeq: An Efficient High-Level Python Library for Quantum NLP `_, `arXiv:2110.04236`, 2021 - -.. [Lam1999] Lambek J. Type Grammar Revisited, `Logical Aspects of Computational Linguistics`, 1999 - -.. [Lea2021] Lorenz R, Pearson A, Meichanetzidis K, Kartsaklis D, Coecke B. `QNLP in Practice: Running Compositional Models of Meaning on a Quantum Computer `_ `arXiv:2102.12846`, 2021 - -.. [NM1965] Nelder J, Mead R. `A Simplex Method for Function Minimization `_, `The Computer Journal` 7: 308-13, 1965 - -.. [Mea2020] Meichanetzidis K, Toumi A, de Felice G, Coecke B. `Grammar-Aware Question-Answering on Quantum Computers `_, `arXiv:2012.03756`, 2020 - -.. [Oea2021] Ostaszewski M, Grant E, Benedetti M. `Structure Optimization for Parameterized Quantum Circuits `_, `Quantum`, 2021 - -.. [Rea2016] Rimell L, Maillard J, Polajnar T, Clark S. `RELPRON: A Relative Clause Evaluation Data Set for Compositional Distributional Semantics `_, `Computational Linguistics`, 2016 - -.. [SCC2014a] Sadrzadeh M, Clark S, Coecke B. `The Frobenius Anatomy of Word Meanings I: Subject and Object Relative Pronouns `_, `Journal of Logic and Computation`, 2014 - -.. [SCC2014b] Sadrzadeh M, Clark S, Coecke B. `The Frobenius Anatomy of Word Meanings II: Possessive Relative Pronouns `_, `Journal of Logic and Computation`, 2014 - -.. [SJA2019] Sim S, Johnson P, Aspuru-Guzik A. `Expressibility and Entangling Capability of Parameterized Quantum Circuits for Hybrid Quantum-Classical Algorithms `_, `arXiv:1905.10876`, 2019 - -.. [Spa1998] Spall J C. `Implementation of the simultaneous perturbation algorithm for stochastic optimization `_, `IEEE Transactions on Aerospace and Electronic Systems`, 1998 - -.. [Ste2000] Steedman M. The Syntactic Process, MIT Press, 2000 - -.. [YK2021] Yeung R, Kartsaklis D. `A CCG-Based Version of the DisCoCat Framework `_, `SemSpace 2021` - -.. [YNM2017] Yoshikawa M, Noji H, Matsumoto Y. `A* CCG Parsing with a Supertag and Dependency Factored Model `_, `ACL 2017` diff --git a/docs/cli.rst b/docs/cli.rst deleted file mode 100644 index 1b27d0f4..00000000 --- a/docs/cli.rst +++ /dev/null @@ -1,265 +0,0 @@ -.. highlight:: bash - -.. _sec-cli: - -Command-line interface -====================== - -While ``lambeq`` is primarily aimed for programmatic use, since Release :ref:`rel-0.2.0` it is also equipped with a command-line interface that provides immediate and easy access to most of the toolkit's functionality. For example, this addition allows ``lambeq`` to be used as a dual :term:`parser`, capable of providing syntactic derivations in both :term:`pregroup ` and :term:`CCG ` form. - -A summary of the available options is given below. - -:: - - lambeq [-h] [-v] [-m {string-diagram,pregroups,ccg}] [-i INPUT_FILE] - [-f {json,pickle,text-unicode,text-ascii,image}] - [-g {png,pdf,jpeg,jpg,eps,pgf,ps,raw,rgba,svg,svgz,tif,tiff}] - [-u [KEY=VAR ...]] [-o OUTPUT_FILE | -d OUTPUT_DIR] - [-p {bobcat,depccg}] [-t] [-s] [-r {spiders,stairs,cups,tree}] - [-c [ROOT_CAT ...]] [-w [REWRITE_RULE ...]] - [-a {iqp,tensor,spider,mps}] [-n [KEY=VAR ...]] [-y STORE_ARGS] - [-l LOAD_ARGS] - [input_sentence] - -To get detailed help about the available options, type: - -.. code-block:: console - - $ lambeq --help - -The following sections provide an introduction to the command-line interface usage via specific examples, while all available options are described in depth in Section :ref:`Detailed Options `. - -.. _sec-basic_usage: - -Basic usage ------------ - -The most straightforward use of the command-line interface of ``lambeq`` is to use it as a :term:`pregroup ` or :term:`CCG ` :term:`parser`. The output formalism is controlled by the ``--mode`` option, which can be set to ``string-diagram``, ``pregroups``, or ``ccg``. - -- The ``string-diagram`` mode is the default, producing a string diagram that faithfully follows the CCG derivation returned by the parser; this may include :term:`swaps ` introduced by certain CCG features such as cross-composition and "unary" type-changing rules. -- The ``pregroups`` mode removes any swaps from the string diagram by changing the ordering of the atomic types, converting it into a valid pregroup form as given in [Lam1999]_. (The ``pregroups`` mode is further described later in Section :ref:`Strict Pregroups Mode `.) -- The ``ccg`` mode returns the original CCG tree, instead of a string or pregroup diagram. - -For example, to get the default string diagram output for a sentence, use the following command: - -.. code-block:: console - - $ lambeq "John gave Mary a flower" - - John gave Mary a flower - ──── ───────────── ──── ───── ────── - n n.r·s·n.l·n.l n n·n.l n - ╰─────╯ │ │ ╰────╯ │ ╰─────╯ - │ ╰─────────────╯ - -``lambeq`` will use the default :py:class:`~lambeq.BobcatParser` to parse the sentence and output the string diagram in the console with text drawing characters. - -In order to get the corresponding CCG derivation, type: - -.. code-block:: console - - $ lambeq -m ccg "John gave Mary a flower" - - John gave Mary a flower - ════ ═══════════ ════ ═══ ══════ - n ((s\n)/n)/n n n/n n - ────────────────> ──────────> - (s\n)/n n - ─────────────────────────────> - s\n - ───────────────────────────────────< - s - -Use the following command to read an entire file of sentences, tokenise them, parse them with the default parser, and store the pregroup or CCG diagrams in a new file: - -.. code-block:: console - - $ lambeq -i sentences.txt -t -o diagrams.txt - -.. note:: - For the rest of this document, all examples use the default ``string-diagram`` mode. - -In the above example, file ``sentences.txt`` is expected to contain one sentence per line. The output will be written to file ``diagrams.txt``. -In case your input file does not contain one sentence per line, you can add the ``--split_sentences`` or ``-s`` flag. - -If the text output is not good enough for your purposes, you can ask ``lambeq`` to prepare images for the diagrams in a variety of formats and store them in a specific folder for you: - -.. code-block:: console - - $ lambeq -i sentences.txt -t -d image_folder -f image -g png - -``lambeq`` will prepare a ``png`` file for each one of the sentences, and store it in folder ``image_folder`` using the line number of the sentence in the input file to name the image file, e.g. ``diagram_1.png``, ``diagram_2.png`` and so on. - -.. note:: - Image generation is currently available only in ``string-diagram`` and ``pregroups`` modes. - -It is also possible to parse a single sentence and store it as an image -- for example, in PDF format in order to use it in a paper. In this case, you can name the file yourself and apply specific format options, such as the exact size of the figure or the font size used in the diagram. Note that it is not necessary to specify the image format if it is already contained in the file name (e.g. pdf). - -.. code-block:: console - - $ lambeq -f image -u fig_width=16 fig_height=3 fontsize=12 - > -o diagram.pdf - > "Mary does not like John" - -.. _sec-advanced_options: - -.. _sec-pregroups_mode: - -Strict pregroups mode ---------------------- -We already discussed that ``lambeq`` can provide its outputs as string diagrams or CCG trees. There is also a third mode available (``pregroups``), which removes any swaps from the string diagram and converts it into a strict pregroup form, conforming to the definition of a formal :term:`pregroup grammar`. Swaps can be introduced by cross-composition and unary rules in the original CCG derivation. For example, consider the following CCG tree: - -.. code-block:: console - - $ lambeq -t -m ccg "The best movie I've ever seen" - - The best movie I 've ever seen - ═══ ════ ═════ ═ ═══════════ ═══════════ ═══════ - n/n n/n n n (s\n)/(s\n) (s\n)\(s\n) (s\n)/n - ──────────> ─────>T ───────────────────── ───────────────────────────────>B - n (s\n)/n - ────────────────────────────────────────>B - s/n - ─────────────────────────────────────── - n\n - ───────────────────────────────────────────────────────────< - n - -Note that "'ve" and "ever" are combined using cross-composition (``Bx`` rule), while there is also a unary (````) type-changing rule, from ``s/n`` to ``n\n``. CCG parsers use these features to avoid associate a single word with many different types, keeping in that way the size of the vocabulary relatively small. When this derivation is converted into a string diagram, it takes the following form: - -.. code-block:: console - - $ lambeq -t "The best movie I've ever seen" - - The best movie I 've ever seen - ───── ───── ───── ─ ─────────── ─────────────── ───────── - n·n.l n·n.l n n n.r·s·s.l·n s.r·n.r.r·n.r·n n.r·s·n.r - │ ╰───╯ ╰─────╯ │ │ │ │ ╰─╮─╯ │ │ │ │ │ │ - │ │ │ │ │ ╭─╰─╮ │ │ │ │ │ │ - │ │ │ │ ╰╮─╯ ╰─╮──╯ │ │ │ │ │ - │ │ │ │ ╭╰─╮ ╭─╰──╮ │ │ │ │ │ - │ │ │ ╰──╯ ╰─╮─╯ ╰─╮──╯ │ │ │ │ - │ │ │ ╭─╰─╮ ╭─╰──╮ │ │ │ │ - │ │ ╰────────╯ ╰─╮──╯ ╰╮─╯ │ │ │ - │ │ ╭─╰──╮ ╭╰─╮ │ │ │ - │ ╰────────────────╯ ╰─╮──╯ ╰───╯ │ │ - │ ╭─╰──╮ │ │ - │ │ ╰─────────╯ │ - │ ╰────────╮────────╯ - │ ╭────────╰────────╮ - ╰──────────────────────────────────────────╯ │ - -Even for relativery short sentences like the above, the swaps may result in diagrams that are difficult to read and follow. In cases where diagrammatic clarity and conformance to a strict pregroup form is important, one can use ``pregroups`` mode: - -.. code-block:: console - - $ lambeq -t -m pregroups "The best movie I've ever seen" - - The best movie I 've ever seen - ───── ───── ───── ─ ───────────── ─────── - n·n.l n·n.l n n n.r·n.r·s.l·n n.r·s·n - │ ╰───╯ ╰─────╯ ╰───╯ │ │ ╰───╯ │ │ - ╰────────────────────────────╯ ╰─────────╯ │ - -Note that the order of the types in the new diagram has been changed in a way that does not require swaps, while the two words "'ve" and "ever", which in the original derivation were interwoven using swaps (result of cross-composition), now have been merged into a single token. - -.. Warning:: - The ``pregroups`` mode trades off diagrammatic simplicity and conformance to a formal pregroup grammar for a larger vocabulary, since each word is associated with more types than before and new words (combined tokens) are added to the vocabulary. Depending on the size of your dataset, this might lead to data sparsity problems during training. - -.. Note:: - To convert a string diagram into a strict pregroup diagram programmatically, one can use the :py:class:`.RemoveSwapsRewriter` class. - -Using a reader --------------- - -.. Note:: - Option only applicable to string and pregroup diagrams. - -Instead of the parser, users may prefer to apply one of the available :term:`readers `, each corresponding to a different :term:`compositional scheme `. For example, to encode a sentence as a :term:`tensor train`: - -.. code-block:: console - - $ lambeq -r cups "John gave Mary a flower" - - START John gave Mary a flower - ───── ───── ───── ───── ───── ────── - s s.r·s s.r·s s.r·s s.r·s s.r·s - ╰─────╯ ╰───╯ ╰───╯ ╰───╯ ╰───╯ │ - -Readers can be used for batch processing of entire files with the ``-i`` option, exactly as in the parser case. - -.. code-block:: console - - $ lambeq -r cups -i sentences.txt -o diagrams.txt - -.. note:: - Some readers, such as the :py:obj:`spiders_reader`, :py:obj:`stairs_reader` instances of the :py:class:`.LinearReader` class, or an instance of a :py:class:`.TreeReader`, may convert the pregroup diagram into a monoidal form that is too complicated to be rendered properly in a text console. In these cases, diagrams cannot be displayed as text. - -Rewrite rules and ansätze -------------------------- - -.. note:: - Option only applicable to string and pregroup diagrams. - -The command-line interface supports all stages of the ``lambeq`` :ref:`pipeline `, such as application of :term:`rewrite rules ` and use of :term:`ansätze ` for converting the sentences into :term:`quantum circuits ` or :term:`tensor networks `. For example, to read a file of sentences, parse them, apply the ``prepositional_phrase`` and ``determiner`` :term:`rewrite rules `, and use an :py:class:`.IQPAnsatz` with 1 :term:`qubit` assigned to sentence type, 1 :term:`qubit` to noun type, and 2 IQP layers, use the command: - -.. code-block:: console - - $ lambeq -i sentences.txt -t -f image -g png - > -w prepositional_phrase determiner - > -a iqp -n dim_n=1 dim_s=1 n_layers=2 - > -d image_folder - -.. note:: - Since :term:`rewrite rules ` and :term:`ansätze ` can produce output that is too complicated to be properly rendered in purely text form, text output in the console is not available for these cases. - -For the classical case, applying a :py:class:`.SpiderAnsatz` with 2 dimensions assigned to sentence type and 4 dimensions to noun type, and the same rewrite rules as above, can be done with the following command: - -.. code-block:: console - - $ lambeq -i sentences.txt -t -f image -g png - > -w prepositional_phrase determiner - > -a spider -n dim_n=4 dim_s=2 - > -d image_folder - -Other options -------------- - -To store the :py:class:`lambeq.backend.grammar.Diagram` (for string diagrams) or the :py:class:`.CCGTree` objects (for the CCG trees) in ``json`` or ``pickle`` format, type: - -.. code-block:: console - - $ lambeq -f pickle -i sentences.txt -o diagrams.pickle - -or - -.. code-block:: console - - $ lambeq -f json -i sentences.txt -o diagrams.json - -Text output is also available with ascii-only characters: - -.. code-block:: console - - $ lambeq -f text-ascii "John gave Mary a flower." - - John gave Mary a flower. - ____ _____________ ____ _____ _______ - n n.r s n.l n.l n n n.l n - \_____/ | | \____/ | \______/ - | \_____________/ - -To avoid repeated long commands, arguments can be stored into a YAML file ``conf.yaml`` by adding an argument ``-y conf.yaml``. -To load the configuration from this file next time, ``-l conf.yaml`` can be added. Any arguments that were not provided in the command line will be taken from that file. If an argument is specified both in the command line and in the configuration file, the command-line argument takes priority. - -.. _sec-detailed_options: - -Detailed options ----------------- - -.. argparse:: - :filename: ../lambeq/cli.py - :func: prepare_parser - :prog: lambeq diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index c90da4b5..00000000 --- a/docs/conf.py +++ /dev/null @@ -1,113 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -from lambeq import __version__ as version, __version_info__ as v -trim_version = f'{v[0]}.{v[1]}.{v[2]}' -if version.startswith(f'{trim_version}.'): - version = f'{v[0]}.{v[1]}.{int(v[2]) - 1} [git latest]' -release = version - - -project = 'lambeq' -copyright = '2021-2024 Cambridge Quantum Computing Ltd.' -author = 'Cambridge Quantum QNLP Dev Team' - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'nbsphinx', - 'numpydoc', - 'sphinx_mdinclude', - 'sphinx.ext.autodoc', - 'sphinx.ext.viewcode', - 'sphinx.ext.graphviz', - 'sphinx.ext.inheritance_diagram', - 'sphinx.ext.intersphinx', - 'sphinxarg.ext', - 'sphinxcontrib.jquery' -] - -intersphinx_mapping = { - 'discopy': ("https://docs.discopy.org/en/main/", None), - 'pennylane': ("https://pennylane.readthedocs.io/en/stable/", None), -} - -autodoc_default_options = { - 'members': True, - 'inherited-members': True, - 'undoc-members': True, - 'special-members': '__init__, __call__', -} - -# This disables the need to document methods in the class docstring. -numpydoc_show_class_members = False - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates', 'quantinuum-sphinx/_templates'] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'furo' -html_theme_options = { - 'navigation_depth': -1 -} -html_context = { - 'display_github': True, - 'github_user': 'CQCL', - 'github_repo': 'lambeq', - 'github_version': 'main', - 'conf_py_path': '/docs/' -} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['quantinuum-sphinx/_static', '_static'] -html_logo = '_static/images/lambeq_logo.png' -html_favicon = 'quantinuum-sphinx/_static/assets/quantinuum_favicon.svg' - -# CSS for allowing text wrapping within table cells -html_css_files = [ - 'css/table-wrap.css', -] - -def autodoc_skip_member(app, what, name, obj, skip, options): - if name == 'Symbol': - options['inherited-members'] = False - return False - return skip - - -def setup(app): - app.connect('autodoc-skip-member', autodoc_skip_member) - - -numfig = True diff --git a/docs/examples/circuit.ipynb b/docs/examples/circuit.ipynb deleted file mode 100644 index 66fd36f7..00000000 --- a/docs/examples/circuit.ipynb +++ /dev/null @@ -1,290 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Circuit" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from pytket.circuit.display import render_circuit_jupyter\n", - "\n", - "from lambeq import AtomicType, BobcatParser, IQPAnsatz\n", - "\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAEzCAYAAACPPpP3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZSElEQVR4nO3deXDU9f3H8ffmAgyCAiIBNUWQAMqhKHj0oIBW0U7F22rRUfqHjnXUYnWsVm3VWi2dTmvVGeVy2kq144nHCLSIWg5lVNoZC6JYdAADKCAqR8L+/vgNGaMcwQ/JN9k8HjOZLNnd8FoI3zyz2Q25fD6fDwAA+JqKsh4AAEDLJigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEhSkvUAWrfNmzfHqlWrYsWKFbFixYpYuXJlvdfr1q2Lrl27Rvfu3aOioqLe6+7du0fXrl2juLg465sBkKS2tjaqq6t3eiysrq6O/fbbb6fHwm7dukWbNm2yvhm0Yrl8Pp/PegSFZ3ehuP302rVr612vrKys3oGyY8eOsXr16rrrfPjhh7Ft27a6yxcVFcWBBx5Y78AqPIHmYnehuP30jo5t3bp1qzuOHXDAAbF+/fp619myZUu936tz5867PRYKTxqLoGSP7K1Q3NlBr1OnTpHL5Xb6+28/OH/59/vyBuEJNKa9FYo7Oybt7liUz+fjo48+2u2xUHjSVAQlEZF9KO5twhP4OrIOxb1NeNJUBGWBK7RQ3NuEJ7QOhRaKe5vwJJWgbKGEYtNKDc/d/Zm39E9GkBWh2LRSw3N3x0Lh2XIJymZGKLZswhP2DqHYsgnP1kdQNhGhyBcJT1orocgXCc/CISgTCUUak/CkpRCKNCbh2fwJyp34Yiju6gNYKNIcCE8ayxdDcVcfX0KR5kB4ZqfVBaVQpDUTnmwnFGnNhOfeVzBBKRRh7xGeLZdQhL1HeDZcsw9KoQjNl/BsOkIRmi/h2YyD8qabbor77rtPKEIBSA3P++67L37wgx9keAuy8+STT8Zll10mFKEApIbnZZddFr/61a8yWr9rJVkP2JlVq1ZFeXl5TJgwQShCC1dcXBwVFRVRUVERRx111E4v9+XwfP/99+Pyyy+PdevWNd3YZmbdunWxcuXKuPfee+Pggw8WitCC5XK56Ny5c3Tu3DmOOOKInV7uy+G5cuXK+MUvfhGrVq1qwrV7ptkGZUREt27d4qKLLsp6BtBEvhyeW7dujcsvvzzrWc3CuHHjorS0NOsZQBPYUXjee++9Ga/ataKsBwAA0LIJSgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKMjd79uzI5XKxbt26iIiYMmVK7LfffpluAgAaTlDSZObOnRvFxcVx6qmn7vJy5557bixZsqSJVgEAqQQlTWbixInxk5/8JObMmRMrVqzY6eXatWsXXbt2bcJlANnZsmVL1hMgmaCkSWzcuDH+9re/xWWXXRannnpqTJkyZaeX3dG3vJ9++uk45phjom3bttGlS5cYM2ZM3XmbN2+O8ePHR48ePaK8vDyGDRsWs2fPbpwbApBo+PDhccUVV8RVV10VXbp0ie9973uRy+XijTfeqLvMunXrIpfL1R3Ltj80aNasWXH00UfHPvvsE8cff3wsXry47jpvvvlmfPe734199903OnToEEOGDInXXnutiW8drZWgpEk88sgj0bdv36iqqooLL7wwJk2aFPl8vkHXfeaZZ2LMmDExevToeP3112PWrFkxdOjQuvOvuOKKmDt3bkybNi0WLVoUZ599dpx88snx9ttvN9bNAUgyderUKCsri1deeSXuv//+Bl/v5z//eUyYMCFee+21KCkpiUsuuaTuvAsuuCAOOuigePXVV2PhwoVx/fXXR2lpaWPMh68oyXoArcPEiRPjwgsvjIiIk08+OdavXx8vvvhiDB8+fLfXvf322+O8886LW2+9te5tgwYNioiI5cuXx+TJk2P58uXRvXv3iIgYP358PP/88zF58uS444479v6NAUh02GGHxV133RUREe+9916Dr3f77bfHd77znYiIuP766+PUU0+NTZs2Rdu2bWP58uVx7bXXRt++fet+D2gq7qGk0S1evDgWLFgQ559/fkRElJSUxLnnnhsTJ05s0PXfeOONGDly5A7P+/e//x21tbXRp0+faN++fd3Liy++GO+8885euw0Ae9OQIUO+1vUGDhxYd7qioiIiIqqrqyMi4pprrolx48bFqFGj4s4773QMpEm5h5JGN3HixKipqam7BzEiIp/PR5s2beKee+7Z7fXbtWu30/M2btwYxcXFsXDhwiguLq53Xvv27b/+aIBGVF5eXne6qOj/79v54sOAtm7dusPrffFb2LlcLiIitm3bFhERt9xyS/zwhz+MZ555Jp577rm4+eabY9q0afUecw6NxT2UNKqampp46KGHYsKECfHGG2/Uvbz55pvRvXv3ePjhh3f7PgYOHBizZs3a4XlHHnlk1NbWRnV1dfTu3bveS7du3fb2zQHY6w444ICIiFi5cmXd2774BJ090adPn7j66qvjhRdeiDPOOCMmT568NybCbrmHkkY1ffr0+Pjjj+PSSy+Njh071jvvzDPPjIkTJ8bdd9+9y/dx8803x8iRI6NXr15x3nnnRU1NTTz77LNx3XXXRZ8+feKCCy6IsWPHxoQJE+LII4+M1atXx6xZs2LgwIG7/ZmXAFlr165dHHvssXHnnXdGz549o7q6Om688cY9eh+ff/55XHvttXHWWWdFz54944MPPohXX301zjzzzEZaDfW5h5JGNXHixBg1atRXYjLi/4Pytddei0WLFu3yfQwfPjweffTReOqpp2Lw4MExYsSIWLBgQd35kydPjrFjx8ZPf/rTqKqqitNPPz1effXVOOSQQ/b67QFoDJMmTYqampoYMmRIXHXVVXHbbbft0fWLi4tj7dq1MXbs2OjTp0+cc845ccopp9R7MiM0ply+oT+7pYn9+Mc/jkWLFsX8+fOzngJkZOvWrVFWVhZTpkyJiy66KOs5mZg6dWpcfPHFsWXLFj8CBlqxYcOGxcCBA+OBBx7IesoOuYcSAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCQlWQ/YlU8++SReeeWVrGcAGampqcl6QrPxr3/9K0pKmvUhG2hEn3zySdYTdqnZHp169+4dDz74YHzzm9/MegqQoaKioujZs2fWMzLTs2fPKCoqiuHDh2c9BcjYRRddlPWEncrl8/l81iN2JJ/Px+LFi6OZzqMJzJw5M6688sp45ZVXYv/99896DhnZZ599orKyMusZmfrf//4Xn332WdYzCsqSJUvi9NNPj4cffjgGDRqU9ZyCMmDAgLjhhhvi/PPPz3pKQcnlclFVVRW5XC7rKTvUbO+hzOVy0bdv36xnkKHFixdHRESfPn2iS5cuGa+B7LT2oG4M2x9O0bNnz+jXr1/GawpLLpeLiooKf66tjCflAACQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAkAT27JlS9YTYK8SlBSs4cOHx5VXXhk/+9nPolOnTtGtW7e45ZZbsp4FFIA9Pb5cfPHFcfrpp8ftt98e3bt3j6qqqqYb24L8/e9/jwEDBkS7du2ic+fOMWrUqPj000+znkUDCEoK2tSpU6O8vDzmz58fd911V/zyl7+MGTNmZD0LKAB7enyZNWtWLF68OGbMmBHTp09vwqUtw8qVK+P888+PSy65JN56662YPXt2nHHGGZHP57OeRgOUZD0AGtPAgQPj5ptvjoiIww47LO65556YNWtWnHjiiRkvA1q6PT2+lJeXx4MPPhhlZWVNObPFWLlyZdTU1MQZZ5wRlZWVERExYMCAjFfRUO6hpKANHDiw3q8rKiqiuro6ozVAIdnT48uAAQPE5C4MGjQoRo4cGQMGDIizzz47Hnjggfj444+znkUDCUoKWmlpab1f53K52LZtW0ZrgEKyp8eX8vLyxp7UohUXF8eMGTPiueeei/79+8cf//jHqKqqimXLlmU9jQYQlABAs5DL5eKEE06IW2+9NV5//fUoKyuLxx9/POtZNIDHUALAXjZ27Njo0aNH/PrXv856Sosxf/78mDVrVpx00knRtWvXmD9/fqxevTr69euX9TQaQFACwF62fPnyKCryTcA90aFDh5gzZ078/ve/jw0bNkRlZWVMmDAhTjnllKyn0QCCkoI1e/bsr7ztiSeeaPIdQOHZ3fHly+dPmTKlUfcUgn79+sXzzz+f9Qy+Jl8+AQCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFDSbJWWlka/fv3839vAXldbWxv9+vXzw8dhL/EviWarTZs28dZbb8Wnn36a9RSgwHz66afx1ltvRXl5edZToCAISpqtTp06RUTE6tWrM14CFJo1a9ZERMT++++f8RIoDIKSZqtfv37Rtm3beOmll7KeAhSYOXPmRPfu3aNbt25ZT4GCIChpttq1axcjRoyIZ599NuspQIF59tlnY/To0ZHL5bKeAgVBUNKsjR49Ol566aXYsGFD1lOAAvHuu+/Gf//73xg9enTWU6BgCEqatdGjR8fWrVvjr3/9a9ZTgAIxderUKC0tjZEjR2Y9BQqGoKRZ69mzZ1x00UVxww03eHIOkOztt9+O3/zmNzF+/Pjo0KFD1nOgYAhKmr277747IiLGjx+f8RKgJcvn83H55ZdHRUVF3HjjjVnPgYIiKGn2DjjggLjrrrvioYceihdeeCHrOUAL9dBDD8XMmTPjT3/6U+yzzz5Zz4GCIihpES655JI46aST4owzzoiXX3456zlAC/Pkk0/GuHHjYuzYsZ6MA41AUNIiFBUVxWOPPRZDhw6Nk08+WVQCDfbkk0/GWWedFWPGjIkHH3ww6zlQkAQlLUZ5eXk8/fTTdVE5Z86crCcBzdwTTzxRF5N/+ctforS0NOtJUJAEJS1KeXl5TJ8+PYYNGxYjR46M2267LWpqarKeBTQzmzZtimuuuSbGjBkjJqEJCEpanH322Seee+65uO666+Lmm2+Ob33rW/H2229nPQtoJl5//fUYMmRI3HvvvfG73/0upk2bJiahkQlKWqSysrK47bbb4uWXX441a9bE4MGD47777ova2tqspwEZ2bJlS9xxxx0xdOjQKCsri9deey2uvvrqKCryqQ4am39ltGjHHXdcvP766/GjH/0oLr/88hg4cGA8+uijsW3btqynAU1k69atMWnSpKiqqoqbbroprr322pg/f34cccQRWU+DVkNQ0uK1b98+7r///pg3b14cfPDBcc4558TgwYPjscceE5ZQwGpqamLq1KnRt2/fuPTSS+Poo4+ON998M+64444oKyvLeh60KoKSgjFs2LB4/vnn4+WXX46uXbvGmWeeGUOGDIlp06bF5s2bs54H7CUbN26MSZMmRf/+/ePiiy+OgQMHxhtvvBGPPvqoeyUhI4KSgnPCCSfEzJkz48UXX4z9998/zj///OjevXtceeWV8eabb2Y9D/ga8vl8zJ07N8aNGxcVFRUxbty46Nu3byxcuDAef/zxGDRoUNYToVUTlBSsb3/72/GPf/wj3nrrrRg3blw88sgjMXjw4Lpnf3788cdZTwR248MPP4zf/va3cfjhh8fxxx8fM2fOjPHjx8eyZcviqaeeiqOOOirriUBE5PL5fD7rEdAUtm7dGs8991xMnDgxnnnmmSgpKYkRI0bEaaedFqeeempUVlZmPRGIiCVLlsT06dNj+vTpMWfOnCgpKYkxY8bEpZdeGiNGjPCs7WautLQ0/vCHP8Rll12W9RSakKCkVVq1alVMmzYtpk+fHi+++GLU1NTEEUccEaeddlqcdtppceyxx0ZxcXHWM6FV2LJlS7z88st1Efn2229HmzZtYuTIkfH9738/zjnnnOjUqVPWM2kgQdk6CUpavfXr18eMGTNi+vTp8cwzz8SaNWuic+fOceKJJ8axxx4bw4YNiyOPPDLatGmT9VQoCJ999lksXLgw5s2bF3Pnzo1Zs2bFhg0bokePHnXfMRgxYkSUl5dnPZWvQVC2ToISvqC2tjZeffXVmD59evzzn/+MhQsXxubNm6OsrCwGDx5cF5jHHnts9OzZM3K5XNaToVnbtm1bLFmyJObPnx/z5s2L+fPnx6JFi6K2tjbKy8vj6KOPjlGjRsVpp50WgwYN8m+qAAjK1klQwi5s2bIlFi1aVPeJcN68ebF06dKIiOjSpUtdYA4bNiyGDh0aHTt2zHgxZGvt2rX14nHBggWxbt26iIjo379/3Rdkw4YNi8MPPzxKSkqyHcxeJyhbJ0EJe2jNmjWxYMGCuk+Y8+fPj/Xr10cul4u+fftG//79o3fv3tGrV6+61wcddJAnElAwampq4v3334+lS5fGO++8U/f6P//5T70vuL4Yj8ccc0zst99+2Q6nSQjK1klQQqLt39KbN29eLFiwIJYsWRJLly6N999/v+5/6mnTpk307NnzK6HZu3fvqKys9L960Oxs2rQpli1bVi8Yt79etmxZ1NTUREREcXFxfOMb34hevXpF37596+6xP/TQQ337upUSlK2ToIRGsnnz5njvvffqfSLefnrZsmWxZcuWiIgoKiqKysrKr4Rmr1694tBDD/XEBBrNJ598ssNgXLp0aXzwwQex/dND27Zto1evXjv8GD3kkEOitLQ041tCcyIoWycPXoFG0qZNm6iqqoqqqqqvnFdbWxsffPDBV2Jz7ty58ec//zk2btxYd9mKioro1atXHHjggdGlS5fo3LlzdOnSZYenO3To4F6hVmzbtm2xfv36WLt2baxZsybWrFmzw9OrVq2Kd955J6qrq+uu27Fjx7pIPO644+pFY0VFhYdsALskKCEDxcXFUVlZGZWVlTFixIh65+Xz+aiurq4Xm++++26sXr063nvvvbow+GJ0bldSUrLb6PzyaRHaPG2Pw51F4Y5Or127Nmpra7/yvjp06FDv775Pnz5xyimn1LvXsVOnTj4OgK9NUEIzk8vl4sADD4wDDzwwjj/++J1ebtOmTXURsaPA2P7rhkToF2Ojffv20a5du2jbtu1XXu/obQ09r5B+UHxtbW18/vnnsWnTpq+83tHbGnrehg0b6v7uPvroowbFYWVlZQwZMmSnXzR07tzZY3SBRicooYVq27Zt9OjRI3r06NHg6zQkQjdu3BgbNmyI6urqncbP559/XveEo4YqLS3dZYi2adMmiouLo6io6Gu/dO3aNT788MPYtm1b5PP52LZt2x6/1NbW7jb+tj8hpaGKi4sbFOLiEGipBCW0Il8nQnckn89HTU3NLqOrIffKffEymzZtqhd2NTU1Owy+XYViVVVVLF68eJfRmcvldnpeSUlJFBUVRefOnb/WPbE7u6yftQgUOkc5YI/lcrkoLS2N0tLS2HfffbOeA0DGPG0PAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCSCEgCAJIISAIAkghIAgCQlWQ8AAArHihUron379lnPoInl8vl8PusRAAC0XL7lDQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAEASQQkAQBJBCQBAEkEJAECS/wPBvqVt0eqqqAAAAABJRU5ErkJggg==", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "parser = BobcatParser()\n", - "diagram = parser.sentence2diagram('Alice runs')\n", - "diagram.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAMzCAYAAACSq0y2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACKTElEQVR4nOzdeVhWdf7/8deNgIgopqDgJJnLGOUGKghq4pYrLpmaio5LpZmaX5esbNEaG7NIM02biUKTXMpSNJtcRhhXMBHLJDNLHQstVBwRDYHz+6Of90igAt54OPB8XBfXxX2Wz3mfWz5+zus+y20zDMMQAAAAAFiMk9kFAAAAAEBxEGYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWYAAAAAWBJhBgAAAIAlEWZKWE5OjtLT080uAwCAG8rIyNBvv/1mdhlAmZKenq6cnByzyyjTCDMlKCMjQ/369VNgYKAOHTpkdjkAABToxIkTatOmjbp06aK0tDSzywHKhEOHDikwMFAPPvigMjIyzC6nzCLMlJATJ06obdu2iouLk6urq0JCQvTFF1+YXRYAAHkkJCQoKChI58+f17fffqvg4GClpKSYXRZgaV988YVCQkJUsWJFbdu2TW3bttV//vMfs8sqkwgzJeDqwJCenq5du3YpMTFRbdu2Vc+ePbVo0SKzywMAQJK0cuVKtW/fXvXr11diYqISExNVqVIlhYSEaNOmTWaXB1jSwoUL1aNHD7Vr106JiYnauXOn0tPTFRQUpMTERLPLK3MIMw62atUqhYWF2QeGxo0bq2rVqoqNjdWECRM0fvx4TZgwQdnZ2WaXCgAopwzD0KxZszR48GANGDBAW7duVc2aNVW3bl3t2rVLoaGh6tGjh95++22zSwUsIzs7236c9+STT2rdunWqUqWKmjRposTERN19991q3769Vq9ebXapZYsBh8jNzTVmzZplSDKGDh1qXLp0qcDllixZYlSoUMHo2rWrkZ6efpurBACUd5mZmcbgwYMNScZf//pXIzc3N98yV65cMZ588klDkjFhwgTjypUrJlQKWEd6errxwAMPGM7OzsY777xT4DKXLl0yhgwZYkgyXnrppQL7HorOZhiGYW6csr7Lly9r1KhRWrFihV5++WXNmDFDNpvtustv2bJFAwYMUO3atbV+/XrVq1fvNlYLACivTp06pb59++qrr77SsmXL9NBDD91w+SVLlmj8+PHq0qWLVq5cKU9Pz9tUKWAdP/zwg3r16qXU1FR9/PHH6tSp03WXNQxDs2fP1vPPP68hQ4YoKipKbm5ut7Hasocwc4tOnz6tfv36af/+/Vq2bJkGDBhQqPW+/fZb9erVS+fPn9enn36qtm3blnClAIDy7KuvvlJ4eLiysrIUGxurVq1aFWq9LVu26KGHHtKdd96p9evX6+677y7hSgHr2LFjh/r166dq1appw4YNatSoUaHWW716tf7yl78oICBAa9euVc2aNUu40rKLe2Zuwddff62goCD9+OOPio+PL3SQkaR77rlHCQkJuvfee9WpUyd98MEHJVgpAKA8++yzz9SmTRtVr15diYmJhQ4yktS5c2ft2bNHly9fVlBQkHbu3FmClQLWsWzZMnXq1En33Xef9uzZU+ggI0kDBw5UfHy8fvjhBwUFBengwYMlWGnZRpgpps8++0yhoaG64447lJiYqKCgoCK3UaNGDW3evFkREREaPny4ZsyYodzc3BKoFgBQHhmGoXnz5ql3797q1KmTtm/frjp16hS5nWs/gOvYsaOWL19eAtUC1pCbm6tnn31Wf/nLXxQREaFNmzapRo0aRW7n6tPNqlWrptDQUG3cuLEEqi0HzLxhx4pyc3ONefPmGU5OTkbv3r2NCxcuOKTNuXPnGjabzejfv79x8eJFB1QKACjPsrKyjMcee8yQZDz11FNGTk7OLbf522+/GSNHjjQkGTNmzHBIm4CVZGRkGA8++KBhs9mM1157zSE38V+4cMHo3bu34eTkZMyfP58HAxQRYaYIsrKyjDFjxhiSjGnTphnZ2dkObX/t2rWGu7u70aJFC+Onn35yaNsAgPLj7NmzRseOHQ0XFxfjvffec2jbubm5xquvvmrYbDbjoYce4gM4lBsnT540AgMDjcqVKxvr1q1zaNvZ2dnG1KlTDUnG2LFjjaysLIe2X5bxAIBCOnfunAYMGKD4+Hi98847GjVqVIlsZ//+/erdu7cMw1BsbKwCAwNLZDsAgLLpyJEj6tWrl9LS0vTJJ5+offv2JbKdtWvXaujQobr33nu1bt061a5du0S2A5QGSUlJCg8Pl5OTk9avX6/mzZuXyHaioqI0duxYtW/fXh999JHuuOOOEtlOWcI9M4Vw5MgRtW7dWvv379fmzZtLLMhIUkBAgBITE1W7dm21a9dOn376aYltCwBQtsTFxSk4OFg2m00JCQklFmQkqW/fvtqxY4dSU1MVFBSk/fv3l9i2ADN98sknateunf70pz8pMTGxxIKMJI0ePVqbN2/W/v37FRISou+//77EtlVWEGZu4o8DQ1hYWIlv09fXV3FxcerZs6cefPBBvfrqq+IEGgDgRt5991116dJFLVq00O7du9WgQYMS3+bVD+B8fX3Vtm1brV27tsS3CdwuhmFozpw56t+/v3r16qX4+Hj5+vqW+HbDwsK0Z88eGYah4OBgxcfHl/g2rYwwcwNRUVHq0qWLAgMDiz0wLFq0SHXr1pWbm5uCg4OVmJhYqPXc3d21cuVKPf/883r66ac1cuRI/fbbb0XePgCgbMvJydHUqVP16KOP6pFHHtHGjRuLfGlKcccqSapdu7bi4+PVo0cPPoBDmfHbb79pxIgReuaZZ/TCCy9oxYoVqlSpUpHauJV+1bBhQ+3Zs0fNmzdXly5d9N577xV1F8oPE+/XKbWys7ONadOmGZKMMWPGFPsmrJUrVxqurq7Ge++9Z3zzzTfGo48+alSrVs04ffp0kdpZvny54erqarRr18749ddfi1ULAKDsuXDhghEeHm44OTkZb775ZrGeguSosSonJ8d47rnnDEnGyJEjjd9++63ItQClwa+//mq0bdvWqFixorF8+fJiteGofnXtUwmnTZvGEwQLQJj5gwsXLhh9+vRxyOPxgoKCjCeeeML+Oicnx6hdu7bxt7/9rcht7dy50/D29jbq1atnHDp0qNg1AQDKhuPHjxvNmjUzqlSpYmzcuLHY7ThyrDIMw/jggw8MV1dX4/777+cDOFjOoUOHjHr16hk1a9Y0du3aVex2HNmvrv1akD59+jjka0HKEi4zu8Z//vMftW3bVv/617+0fv16Pfnkk7LZbMVqKysrS/v27VPnzp3t05ycnNS5c2ft3r27yO2FhoYqMTFRlSpVUkhIiDZv3lysugAA1peQkKCgoCClp6dr165d6t69e7HacfRYJUkRERH617/+pZSUFLVu3VrffvttsdoBbrdNmzYpJCRE7u7uSkhIUEhISLHacXS/stlsmjRpkmJjY7V161a1a9dOJ0+eLFZtZRFh5v/bu3evfWDYuXOnevTocUvtpaWlKScnR7Vq1cozvVatWjp16lSx2qxbt6527dql0NBQde/eXYsXL76lGgEA1rNq1SqFhYWpfv36SkxMVOPGjYvdVkmMVZLUpk0bJSYmys3NTa1bt9aWLVuK3RZwO7z99tvq0aOH2rRpo507d6pu3brFbquk+lXPnj21a9cunTt3TkFBQdq7d2+x2ypLCDOSVq9erfvvv19169ZVQkKCmjRpYnZJ11W1alXFxsZq/PjxGjdunCZOnKjs7GyzywIAlDDDMPTSSy/p4YcfVv/+/bV161bVrFnT7LKu6+oHcCEhIerWrZuWLFlidklAPtnZ2Zo4caKeeOIJTZgwQbGxsapatarZZV1XkyZNlJCQoLvuukv333+/PvroI7NLMl25DjOGYeivf/2rBg0apH79+mnbtm35UnRxeXl5qUKFCjp9+nSe6adPn5aPj88tte3s7Kz58+fr7bff1ttvv63w8HCdP3/+ltoEAJRely9f1tChQ/Xiiy/q5Zdf1gcffCA3N7dbbrckxyrp9w/g1q9fryeeeEKPP/64nnzyST6AQ6lx/vx59erVS2+//bYWL16sefPmqUKFCrfcbkn3q1q1amnbtm3q16+fBg4cqL/+9a/l+gmC5TbMXL58WcOGDdPzzz+vl156STExMQ4ZGK5ydXVVixYttHXrVvu03Nxcbd26tdjXYP7R448/rs8//1y7d+9WmzZt9OOPPzqkXQBA6XH69Gl17NhRn376qVatWqXnnnuu2Pdz/tHtGKucnZ315ptvatGiRVq0aJF69+6t//73vw5pGyiuH3/8UaGhodqzZ4/++c9/auzYsQ5r+3b0Kzc3N8XExGjWrFl6/vnnNWzYMF2+fNkhbVuOyQ8gMMXp06eNkJAQw83NzVi1alWJbWflypVGxYoVjejoaOPQoUPGY489ZlSrVs04deqUQ7eTkpJi1K9f3/Dy8jJ27Njh0LYBAOb56quvDD8/P8PHx8dISEgokW3crrHKMAxj06ZNhqenp3HfffcZP/zwg8PbBwpj+/bthpeXl1G/fn0jJSWlRLZxO/vVypUrDTc3NyM0NLTIj34uC8pdmPn666+Nu+66y6hVq1aJDQzXeuuttww/Pz/D1dXVCAoKMvbs2VMi20lLSzPuv/9+w9XV1fjggw9KZBsAgNtnw4YNhoeHh9GsWTPjxIkTJbqt2zVWGcb/Hn3r7e1t7Ny5s8S2AxRk2bJl9keHp6Wllei2bme/2rNnj1GrVi2jbt26xtdff11i2ymNylWY+eyzz4wqVaoYzZo1M44fP252OQ7322+/GSNHjjQkGTNmzOCLlQDAgq79TonevXuXye+U+PXXX4127doZrq6uxf5SQqAocnJyjBkzZhiSjFGjRpXJL3U9fvy40bRp01v+7imrKRdhJjc313jzzTfL9MBwVW5urvHqq68aNpvNeOihh4yLFy+aXRIAoJCysrKMMWPG2L/tOzs72+ySSszly5eNESNGGJKM559/ng/gUGIuXrxoPPTQQ4bNZjPmzp17S1+IXtr997//NcLDww0nJydjwYIFZXpfryrzYSYrK8sYO3asIcmYOnVqmR4YrvXpp58a7u7uRsuWLY2ff/7Z7HIAADdx9uxZo1OnToazs7MRFRVldjm3xbUfwA0YMIAP4OBwP/30k9GyZUvD3d3dWLt2rdnl3BbZ2dnGlClTDEnG448/bmRlZZldUomyGUbZfZZbenq6BgwYoLi4OC1ZskSjR482u6Tbav/+/QoPD5fNZlNsbKwCAgLMLgkAUIAjR46oV69eSktL05o1axQWFmZ2SbfVp59+qoiICN13331at26dfH19zS4JZUB5Pw5699139fjjj6tDhw5avXq1qlWrZnZJJaLMPpr5+++/V0hIiJKSkrR58+ZyF2QkKSAgQImJifLx8VHbtm21du1as0sCAPxBXFycgoODZbPZlJCQUO6CjCT169dPO3bs0M8//6ygoCAlJyebXRIsbu3atWrbtq1q166txMTEchdkJOmRRx7Rpk2b9OWXXyokJERHjx41u6QSUSbDTHx8vIKDg5Wbm6s9e/aUy4Hhqtq1ays+Pl49evTQgw8+qLlz55brL1YCgNIkKipKXbp0UWBgoHbv3q0GDRqYXZJprn4AV6tWLbVt21br1q0zuyRYkGEYevXVV/Xggw+qZ8+eiouLK9dn+jp06KCEhATl5uYqODhY//73v80uyeHKXJh5//331aVLFzVv3lx79uxRw4YNzS7JdO7u7lq1apVmzJih6dOna/To0crKyjK7LAAot3JycjRt2jQ98sgjGj16tD7//HPdcccdZpdlutq1a+vf//63unfvrn79+um1117jAzgUWlZWlkaNGqWnn35azz33nFauXCl3d3ezyzJdw4YNtWfPHjVr1kydO3dWdHS02SU5lql37DhQTk6O8dRTTxmSjMcee6zM3+xUXB988IH9+eq//vqr2eUAQLlz4cIFo3fv3oaTk5Mxf/78cvG0oaIqD4/RhWP9+uuv9u/b43HfBcvKyjIeffRRQ5Ixffr0MvMEwTLxAICMjAxFREQoNjZWkZGRmjRpkmw2m9lllVo7d+5U37595enpqQ0bNuiee+4xuyQAKBf+85//KDw8XEePHtXKlSvVs2dPs0sq1T744AM98sgjCgkJ0Zo1a1SjRg2zS0IplJKSol69eunChQv69NNP1aZNG7NLKrUMw9D8+fM1ZcoU9enTR8uXL1flypXNLuuWWD7MnDx5UuHh4fr++++1YsUK9erVy+ySLOHHH39Ur1699NNPP+njjz9W586dzS4JAMq0xMRE9enTRxUrVtT69evVpEkTs0uyhB07dqhfv37y9PTUZ599pkaNGpldEkqRzZs3a8CAAbrzzju1YcMG1a1b1+ySLGH9+vUaMmSIGjZsqNjYWN15551ml1Rslr5n5ssvv1RQUJDOnj2rnTt3EmSK4O6779auXbsU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h3Tp0iUzygTyuHos9/PPP5tdCgpg1rGjJcLMiBEjZLPZZLPZ5OLiovDwcEnSb7/9Vug2Zs+erT59+qhu3br55nXt2lUVKlTQ3r17b9rO3r179dhjjxV6u6XV7NmzFRoaKnd3d1WrVi3f/HvvvVetW7fWG2+8cfuLAwCUmJycHA0ePFjr16+XJOXm5ha43NXpsbGxGjJkCGdocEv+eCx3991366mnntLly5cL3cbVY7natWuXYKXWc+bMGc2cOVOtWrWSt7e3/Pz81LNnT61cuTLPBxS36vLly3riiSdUo0YNeXh4qH///jp9+rR9vlnHjpYIM5LUrVs3paam6ocfftDkyZMlSe+8806h1s3MzFRUVJRGjx6db96JEye0a9cujR8/Xu+9995N2/L29pa7u3vRii+FsrKyNGDAAD3++OPXXWbkyJFavHixsrOzb2NlAICStGLFCq1bt+66IeaPcnNztXbtWq1YsaKEK0NZd+2x3Lx58/TOO+/oxRdfLNS6NzqWu8owjHJxzJKVlWX/fdOmTfrzn/+svXv3aurUqdq0aZM++eQT9erVSy+//LK6du3qsDMl//d//6f169fro48+Unx8vH7++Wc9+OCDeZYx49jRMmGmYsWK8vHxUZ06ddShQwdJ0p49eyRJM2fOtKf9a3+io6MlSRs3blTFihXVunXrfO2+//776tWrlx5//HGtWLHipqfS/3iZWXp6usaMGaNatWrJzc1NjRs31oYNG+zzd+zYoXbt2qlSpUqqU6eOJk6c6JA/qrp16+qVV17RqFGjVKVKFfn5+envf/97odefNWuW/u///k9NmjS57jJdunTR2bNnFR8ff8v1AgBKhwULFsjJqWjDv5OTkxYsWFBCFaG8uPZYrm/fvurcubM2b94sqXjHcl9++aVsNps+//xztWjRQhUrVtSOHTs0YsQI9e3bN8+2J02apLCwMPvrsLAwTZw4UU899ZSqV68uHx8fzZw50z7fMAzNnDlTfn5+qlixomrXrq2JEyfe8ntQnOO3sLAwjR8/XpMmTZKXl5e6du1q3//BgwcrOjpan332mQYNGqSAgAC1bNlSjz/+uA4cOKA777xTgwcPtreVlZWl8ePHy9fXV25ubrrrrrv0t7/97aZ1nz9/XlFRUXrjjTfUsWNHtWjRQu+//7527dplPx6XzDl2tEyYudb3338v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JXXt2lXPPPOMzp07pzvuuEOSFBUVpYceesh+X81VderU0TPPPKN//vOf6tmz5w233759e91///3q37+/3njjDTVo0EDffvutbDabunXrpunTp6t169YaP368HnnkEVWuXFmHDh3S5s2btXDhwpJ5UwrpxIkTOnv2rE6cOKGcnBwlJyfnu/ns2LFj+umnn/Lc7AUAsK7mzZurVatW2rdvX5HO5Ds5OalFixZq3rx5yRWHcmfAgAGaNm1akY/lbqZjx4567bXXtGzZMoWEhGj58uVFPsC++sF2cHCw3N3dtXz5clWqVKnQ95jcik6dOqlfv343fGBUQECALl26pG3btqlDhw6Kjo5WRESEJk2apIYNG6pv37569dVX1bZtW23atEne3t6SpDfeeEO+vr4KCAiQk5OTPvroI/n4+BT4nYPX8vT01OjRozV58mRVr15dVatW1YQJExQSEpLnCXNmHDta8szMVQMHDtTcuXO1ceNGZWRkKDQ0VL6+vvafVatWSZKaNGmiwMBArV69WtLvT2Q4cOCA+vfvn69NT09PderUSVFRUYWqYc2aNWrVqpUGDx6se++9V0899ZT9rE7Tpk0VHx+v7777Tu3atVNAQIBeeOGFUvFlTy+88IICAgL04osvKiMjQwEBARoyZEieZVasWKEHHnjgtnRcAMDtMXHixGI9zcwRj6UFruXs7Kzx48cX61juRrp27arnn39eTz31lFq1aqULFy7YHxpVWNWqVdM//vEPtWnTRk2bNtWWLVu0fv161ahRo1j7WhRHjx5VWlraDZex2Wx69dVX9Ze//EXHjh1Tjx499Ouvv+r48eM6dOiQ3n77baWnpysuLk733Xeffb0qVapo7ty5atmypVq1aqVjx45p48aNhXpc+7x589SrVy/1799f999/v3x8fPTJJ5/kWcaUY0fDgvbt22dIMvbt21fodTZs2GD4+/sbOTk5JViZtV37vv7222+Gn5+fsWPHDrPLAgA4UHZ2ttG3b1/DycnJkHTTHycnJ6Nfv35Gdna22aWjnLt6LLd3794iHweWVbNnzzZq1KhhvP7668Z//vMfwzAM4/Lly8YXX3xhtG3b1vjkk08K3VZxjq+vZdaxo6XPzBRFz5499dhjj+mnn34yuxRLOHHihJ599lm1adPG7FIAAA5UoUIFffjhh/ZH3l7vE9mr03v37q2Y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YMECJSYmqlu3bkVqZ9euXVq1apXmz5+vrVu32qe7u7vL09NTx48fv+VaAQCl09Ux9lo5OTkmVQOUDfSr28cSYaZDhw5avHixLl68qHnz5ik9PV3r1q2zz7/jjjsUFRWlrl27KjQ0VE8//XSe9S9duiQ3N7d87b733nuKiIiwv46IiFD79u311ltvFfiggD9KTk5WQECAPcj80YEDB7Rz5848Z2JycnJ0+fJlZWZm2s8cFVfTpk3tv1euXFlVq1bVL7/8UqQ2Dh48qD59+ujFF19USEhIvvmVKlWyX64HACh7ro6x10pISMgzPgIoGvrV7WOJMFO5cmX7GY/33ntPf/7zn/Mt8+9//1sVKlRQamqqLl68mCeMeHl56dy5c3mWP3TokPbs2aPExERNnz7dPj0nJ0crV67Uo48+etO6KlWqdMP5GRkZmjVrlh588MF88woKV0Xl4uKS57XNZrNf4lYYhw4dUqdOnfTYY4/pueeeU1JSUr5lzp49K29v71uuFQBQOl07xl518uRJk6oBygb61e1juXtmnJycNGrUKEnS5cuXJf1+mdSrr76q9evXy8PDQ+PHj8+zTkBAgA4dOpRnWlRUlO6//34dOHBAycnJ9p/JkycrKiqqULU0bdpUycnJ171PJTAwUIcPH1aDBg3y/fzxUrnb7ZtvvlGHDh30l7/85br38Bw9elSXL19WQEDAba4OAAAAuDnLhRlJ6ty5s6Tfn1J24cIFDRs2TBMnTlT37t0VExOjVatW6eOPP7Yv37VrV+3evdt+reKVK1f0wQcfaPDgwWrcuHGen0ceeUQJCQn65ptvblrH4MGD5ePjo759+2rnzp364YcftGbNGu3evVuS9MILL2jZsmWaNWuWvvnmG6WkpGjlypV67rnnSuBdKbyDBw+qQ4cOeuCBBzR58mSdOnVKp06dynf2avv27apXr57q169vUqUAAADA9VkyzDg7/3513LJlyzRx4kRVrlxZr7zyiiSpSZMmeuWVVzRmzBj99NNPkqTu3bvL2dlZW7ZskSTFxsbqzJkz6tevX762/f395e/vX6izM66urtq0aZNq1qypHj16qEmTJpozZ44qVKgg6fcQtWHDBm3atEmtWrVS69atNW/ePN11110OeR+K6+OPP9avv/6q5cuXy9fX1/4zbNiwPMutWLGiUJfbAQAAAGawGYZhmF1E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dcwuC4BFEGYAADCZl5eXNm/erMGDB9tvfM/NzTW7rBJ35coVjRs3TpMmTdKUKVP0ySefyMPDw+yyAFgIDwAAUGotWLBAX375pZYtW2Z2KUCJq1ixot5//335+/vr6aef1rfffqvo6Gi5u7ubXVqJOHfunAYMGKD4+HhFRUVp1KhRZpcEwII4MwOgVDIMQx9//LGWLl0qSTp8+LB8fHx04cKFQrfx9NNPa8KECSVVIuBwNptN06dP1yeffKLPPvtMYWFhSk1NNbssh/v+++8VEhKi/fv3a/PmzQQZAMVGmCkBI0aMUN++ffNNj4uLk81mU3p6+m2vCbCauLg4tW/fXjabTZL0zDPPaMKECapSpYp9fp8+feTr66vKlSurefPm+e41mDp1qpYuXaoffvjhttcP3Ip+/fpp+/bt+umnnxQUFKTk5OQS3d6iRYtUt25dubm5KTg4WImJiSW2rfj4eAUHB0uSEhISFBYWVmLbAlD2EWYAlErLly/X8OHDJUknTpzQhg0bNGLECPv8Xbt2qWnTplqzZo2++uorjRw5UsOHD9eGDRvsy3h5ealr165avHjx7S4fuGWBgYFKTExUrVq11LZtW61bt65EtrNq1SpNnjxZL774opKSktSsWTN17dpVv/zyi8O39d5776lLly4KCAjQ7t271aBBA4dvA0D5QpgBUOpcunRJP/30kxo2bChJWr16tZo1a6Y//elP9mWeffZZvfzyywoNDVX9+vX15JNPqlu3bvrkk0/ytBUeHq6VK1fe1voBR/nTn/6kf//73+rWrZv69eun1157TYZhOHQbb7zxhh599FGNHDlS9957r5YsWSJ3d3e99957DttGTk6OnnrqKY0ePVqjRo3S559/rjvuuMNh7QMovwgzAEyVkJCgAQMG6NVXX7VPW7dunfr06WN/vX37drVs2fKmbZ0/f17Vq1fPMy0oKEgnT57kCwlhWe7u7lq9erWeeeYZPfXUU3rkkUeUlZXlkLazsrK0b98+de7c2T7NyclJnTt31u7dux2yjYyMDPXv31+RkZGaP3++Fi9eLBcXF4e0DQCEmRKyYcMGeXh45Pnp3r272WUBpU69evXUs2fPPJ8Cr169Wg8//LD99fHjx1W7du0btrN69Wrt3btXI0eOzDP96nrHjx93YNXA7eXk5KTZs2dr2bJlWr58uR544AGdOXPm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9HS5u7vLxcXF7JJu6q9//avZJVyXYRj673//K0kKDg5W27ZtTa4IAAAAuDlLhhlnZ2etWLFCAwcO1N13363169fLz8/P7LIs6bffftOYMWO0dOlSvfDCCwoNDTW7JAAAAKBQLHvPTLdu3bR7927997//VVBQkBISEswuyXLS0tLUpUsXrVy5UsuXL9esWbPk5GTZPwkAAACUM5Y+cr3vvvuUmJioBg0aqH379lq5cqXZJVlGSkqKgoODdfjwYW3btk1Dhw41uyQAAACgSCwdZiTJ29tbW7du1cCBAzV48GDNmjVLhmGYXVaptmnTJoWEhMjd3V0JCQkKCQkxuyQAAACgyCwfZiSpYsWKWrp0qWbPnq2ZM2dq6NCh+n/t3V2IlWW/x/HfTCWTiVSGk1EgGGSRlGUz2gxm5FhaWE1RUlFZSUhoZK+UFURRCr6Q+HKgFmWRhDWUZjD5glk6K8ropKgDwSC1pBLMytLZB3v3sON59i51puU1fj6H98z6X39mncyXtda9fv7552qvdURasGBBxo0bl6ampnzwwQcZOHBgtVcCAIBD0iNiJvnv2wo/+uijef3119PW1pZLL700O3bsqPZaR4zff/89U6dOzT333JMpU6bkrbfeSt++fau9FgAAHLIeEzN/uP7667Nhw4Zs27YtjY2N+eyzz6q9UtXt3r07V111VRYsWJBFixZlzpw5vksGAIDi9biYSZJhw4alUqmkX79+aWpqysqVK6u9UtVs3bo1F198cTZv3px33303d999d7VXAgCALtEjYyZJTj/99GzYsCGjR4/O+PHjM3v27KPuxgAbN25MQ0NDfv3112zevDmjR4+u9koAANBlemzMJEmfPn2yYsWKPPTQQ7n//vtz991357fffqv2Wv+Il19+OZdddlnOOeecdHR0ZPDgwdVeCQAAulSPjpkkqa2tzXPPPZcXXnghL774Yq644op8//331V6r2xw4cCCPPfZYbr311txyyy1pb29Pv379qr0WAAB0uR4fM3+4/fbb89577+XTTz/N8OHD8+WXX1Z7pS63d+/e3HDDDXn22Wczc+bMLF68OL169ar2WgAA0C2OmphJkpEjR6ZSqeSYY47J8OHDs27dum4/c/78+Rk4cGDq6urS2NiYSqXSLed88803GTlyZFavXp0333wzDz74YGpqarrlLAAAOBIcVTGTJIMGDcqmTZsybNiwjBkzJosXL+62s5YvX55p06blySefzCeffJLzzjsvl19+eb799tsuPWfLli1paGjIzp07s3Hjxlx99dVdOh8AAI5ER13MJMmJJ56YVatWZdKkSZk0aVIeeOCB7N+/v8vPmT17diZNmpSJEyfmnHPOyaJFi9K7d+8sXbq0y85oa2tLc3NzTjvttFQqlQwdOrTLZgMAwJHsqIyZJDnuuOMyf/78PP/885kzZ06uvfba7Nmzp8vm79u3Lx9//PGfbodcW1ub0aNHZ9OmTYc9v7OzMzNmzEhra2uuvPLKrF+/PgMGDDjsuQAAUIqjNmaSpKamJlOmTMnKlSuzfv36NDc3Z9u2bV0ye9euXdm/f3/q6+v/dL2+vj47duw4rNn79u3LHXfckUceeSTTp0/Pa6+9lt69ex/WTAAAKM1RHTN/GDt2bD788MPs3r07DQ0N6ejoqPZK/6ddu3alpaUlr776apYtW5annnoqtbWeRgAAjj7+C/4f5557bjo6OjJo0KCMGjUqy5cvP6x5p5xySo455pjs3LnzT9d37tyZU0899ZBmfv7552lsbMznn3+etWvX5uabbz6sHQEAoGRi5n/p379/1qxZk+uuuy4TJkzIU089lc7OzkOa1atXr1x44YVZs2bNv64dOHAga9asyYgRIw56Xnt7e0aMGJHjjz8+lUolTU1Nh7QXAAD0FMdWe4EjTV1dXV5++eUMHjw4jz/+eL744ossXbo0dXV1Bz1r2rRpue222zJs2LA0NDRk7ty5+emnnzJx4sSDmrNw4cJMmTIlY8aMyWuvvZa+ffse9C4AANDTiJn/oKamJtOnT89ZZ52VW2+9NVu3bk1bW9u/fZj/r9x444357rvv8sQTT2THjh05//zz8+677/7tOb///numTZuWefPmZerUqZk1a1aOPdZTBgAASVLTeajvozpKfPTRRxk/fnx69eqVlStXZsiQIf/Iubt3786ECRPS3t6eefPmZfLkyf/IuQAAdI2zzz4748aNy6xZs6q9So/lMzN/4aKLLkqlUsnJJ5+ciy++OKtWrer2M7du3ZqmpqZs2rQpq1evFjIAAPAfiJm/4Ywzzsj777+fyy67LOPHj8/cuXMP+cYAf+XDDz9MY2Njfvnll2zevDktLS3dcg4AAJROzPxNffr0yRtvvJEHHngg9913XyZPnpzffvutS8945ZVXcumll+bss89OR0dHBg8e3KXzAQCgJxEzB6G2tjYzZszIkiVLsmTJkowdOzY//PDDYc89cOBAHn/88dxyyy256aab0t7enn79+nXBxgAA0HOJmUNwxx13pL29PVu2bMnw4cPz1VdfHfKsvXv35sYbb8wzzzyTGTNmZOnSpenVq1cXbgsAAD2TmDlEo0aNSkdHR2pqatLY2Jj169cf9Izt27fnkksuyTvvvJMVK1bkoYceSk1NTdcvCwAAPZCYOQxnnnlmNm3alAsuuCAtLS1ZsmTJ337sli1b0tDQkO3bt2fjxo259tpru3FTAADoecTMYTrppJOyevXq3Hnnnbnrrrvy4IMPZv/+/f/vY9ra2tLc3Jz6+vpUKpUMHTr0H9oWAAB6DjHTBY477rgsXLgwc+fOzezZs9Pa2po9e/b82+91dnZm5syZaW1tzbhx47Jhw4acdtppVdgYAADKJ2a6SE1NTe699968/fbbWbduXZqbm/P111//6+f79u3LnXfemYcffjiPPvpoli9fnt69e1dxYwAAKJuY6WLjxo3LBx98kB9//DENDQ2pVCrZtWtXWlpa8sorr+Sll17K008/ndpaf3oAADgcx1Z7gZ5oyJAhqVQqueaaa3LJJZekvr4+P/30U9auXZumpqZqrwcAAD2Clwe6Sf/+/bN27dq0trbmhBNOSKVSETIAANCFvDLTjerq6rJs2bL8/PPPPh8DAABdzCsz3aympkbIAABANxAzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAU6dhqLwAAAD3RnDlzMmDAgGqv0aPVdHZ2dlZ7CQAAgIPlbWYAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABTpvwBolt8BOKC7TQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ansatz = IQPAnsatz({N: 1, S: 1}, n_layers=2)\n", - "circuit = ansatz(diagram)\n", - "circuit.draw(figsize=(8, 8))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - " \n", - "
\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tket_circuit = ansatz(diagram).to_tk()\n", - "\n", - "# This does not render properly on GitHub, please view it at:\n", - "# https://cqcl.github.io/lambeq/examples/circuit.html\n", - "render_circuit_jupyter(tket_circuit)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{Alice__n_0: 0.0,\n", - " Alice__n_1: 0.001,\n", - " Alice__n_2: 0.002,\n", - " runs__n.r@s_0: 0.003,\n", - " runs__n.r@s_1: 0.004}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sympy import default_sort_key\n", - "\n", - "# Make sure you sort your symbols as they are returned as a set.\n", - "parameters = sorted(tket_circuit.free_symbols(), key=default_sort_key)\n", - "\n", - "param_dict = {p: i * 0.001 for i, p in enumerate(parameters)}\n", - "param_dict" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - " \n", - "
\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tket_circuit.symbol_substitution(param_dict)\n", - "\n", - "# This does not render properly on GitHub, please view it at:\n", - "# https://cqcl.github.io/lambeq/examples/circuit.html\n", - "render_circuit_jupyter(tket_circuit)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/classical-pipeline.ipynb b/docs/examples/classical-pipeline.ipynb deleted file mode 100644 index fc4538e0..00000000 --- a/docs/examples/classical-pipeline.ipynb +++ /dev/null @@ -1,329 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Classical pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "BATCH_SIZE = 30\n", - "EPOCHS = 25\n", - "LEARNING_RATE = 3e-2\n", - "SEED = 0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Input data" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = float(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('datasets/mc_train_data.txt')\n", - "dev_labels, dev_data = read_data('datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " dev_labels, dev_data = dev_labels[:2], dev_data[:2]\n", - " test_labels, test_data = test_labels[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "reader = BobcatParser(verbose='text')\n", - "\n", - "train_diagrams = reader.sentences2diagrams(train_data)\n", - "dev_diagrams = reader.sentences2diagrams(dev_data)\n", - "test_diagrams = reader.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.tensor import Dim\n", - "\n", - "from lambeq import AtomicType, SpiderAnsatz\n", - "\n", - "ansatz = SpiderAnsatz({AtomicType.NOUN: Dim(2),\n", - " AtomicType.SENTENCE: Dim(2)})\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits[-1].draw(figsize=(7, 1))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Parameterise" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PytorchModel\n", - "all_circuits = train_circuits + dev_circuits + test_circuits\n", - "model = PytorchModel.from_diagrams(all_circuits)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define Evaluation Metric" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "sig = torch.sigmoid\n", - "\n", - "def accuracy(y_hat, y):\n", - " return torch.sum(torch.eq(torch.round(sig(y_hat)), y))/len(y)/2 # half due to double-counting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize Trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PytorchTrainer\n", - "\n", - "trainer = PytorchTrainer(\n", - " model=model,\n", - " loss_function=torch.nn.BCEWithLogitsLoss(),\n", - " optimizer=torch.optim.AdamW, # type: ignore\n", - " learning_rate=LEARNING_RATE,\n", - " epochs=EPOCHS,\n", - " evaluate_functions={\"acc\": accuracy},\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " seed=SEED)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "dev_dataset = Dataset(dev_circuits, dev_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 5: train/loss: 0.6386 valid/loss: 0.7189 train/time: 0.68s valid/time: 1.47s train/acc: 0.5786 valid/acc: 0.5333\n", - "Epoch 10: train/loss: 0.5280 valid/loss: 0.6392 train/time: 0.49s valid/time: 0.15s train/acc: 0.5857 valid/acc: 0.5833\n", - "Epoch 15: train/loss: 0.4138 valid/loss: 0.4924 train/time: 0.38s valid/time: 0.27s train/acc: 0.7500 valid/acc: 0.7500\n", - "Epoch 20: train/loss: 0.1306 valid/loss: 0.2794 train/time: 0.60s valid/time: 0.14s train/acc: 0.9857 valid/acc: 0.9500\n", - "Epoch 25: train/loss: 0.0120 valid/loss: 0.0595 train/time: 0.37s valid/time: 0.21s train/acc: 0.9929 valid/acc: 0.9833\n", - "\n", - "Training completed!\n", - "train/time: 2.52s train/time_per_epoch: 0.10s train/time_per_step: 0.03s valid/time: 2.23s valid/time_per_eval: 0.09s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, dev_dataset, log_interval=5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show results" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test accuracy: 0.9833333492279053\n" - ] - }, - { - "data": { - "image/png": "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f4yhQ4cavr6+RmRkpNnRCtWTTz5pLFu2zDh06JCxatUqo3379oa/v78RHR1tdrQCl5iYaGzevNnYvHmzARjvvvuusXnzZuPIkSOGYRjG66+/bvj6+hpz5841tm3bZnTr1s0IDQ01zp07Z3Ly/HeltkhMTDSeeuopIyIiwjh06JCxaNEi46abbjKqVatmpKammh09Xw0fPtzw8fExli1bZpw6dSr7lpKSkr3Pww8/bFSsWNFYsmSJsWHDBqNFixZGixYtTExdMK7WFvv37zcmTJhgbNiwwTh06JAxd+5co0qVKkabNm1MTl68qW+yUd+kvskw1Dedp77pgqLQN9ll4WQYhvHRRx8ZFStWNFxcXIxmzZoZa9asMTtSoevbt69Rrlw5w8XFxShfvrzRt29fY//+/WbHKhRLly41gEtu/fv3NwzDtuzriy++aAQGBhqurq5Gu3btjD179pgbuoBcqS1SUlKM22+/3Shbtqzh7OxsVKpUyRgyZEiJ/Idcbm0AGF988UX2PufOnTMeeeQRw8/Pz/Dw8DB69OhhnDp1yrzQBeRqbXH06FGjTZs2RunSpQ1XV1ejatWqxtNPP23Ex8ebG7wEUN+kvkl9k436Jhv1TRcUhb7J8m8QERERERERuQy7O8dJREREREQkr1Q4iYiIiIiIXIUKJxERERERkatQ4SQiIiIiInIVKpxERERERESuQoWTiIiIiIjIVahwEhERERERuQoVTiIiIiIiIlehwklEREREROQqVDiJiIiIiIhchQonERERERGRq1DhJCIiIiIichUqnERERERERK5ChZOIiIiIiMhVqHASERERERG5ChVOIiIiIiIiV6HCSURERERE5CpUOImIiIiIiFyFCicREREREZGrcDI7QGGzWq2cPHkSLy8vLBaL2XFEROyKYRgkJiYSHByMg4O+uztPfZOIiDny0i/ZXeF08uRJQkJCzI4hImLXjh07RoUKFcyOUWSobxIRMde19Et2Vzh5eXkBtsbx9vY2OY2IiH1JSEggJCQk+1gsNuqbRETMkZd+ye4Kp/NTILy9vdU5iYiYRNPRclLfJCJirmvpl0ydYL5ixQq6dOlCcHAwFouFOXPmXPU5y5Yt46abbsLV1ZWqVasyY8aMAs8pIiIiIiL2zdTCKTk5mQYNGjB58uRr2v/QoUPceeed3HrrrWzZsoXHH3+c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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", - "\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Epochs')\n", - "ax_br.set_xlabel('Epochs')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs + 1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "# print test accuracy\n", - "test_acc = accuracy(model.forward(test_circuits), torch.tensor(test_labels))\n", - "print('Test accuracy:', test_acc.item())" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/datasets/mc_dev_data.txt b/docs/examples/datasets/mc_dev_data.txt deleted file mode 100644 index fa68eb83..00000000 --- a/docs/examples/datasets/mc_dev_data.txt +++ /dev/null @@ -1,30 +0,0 @@ -0 skillful person prepares application . -1 man prepares tasty meal . -1 man prepares tasty sauce . -1 person bakes tasty meal . -0 man prepares useful program . -0 man runs program . -1 person prepares dinner . -1 man bakes sauce . -0 woman prepares software . -0 person prepares useful software . -0 skillful person debugs program . -0 person debugs application . -1 person cooks tasty dinner . -0 skillful person debugs software . -1 woman bakes tasty sauce . -0 skillful woman runs software . -1 skillful person prepares sauce . -0 person debugs useful program . -0 man runs application . -1 person prepares tasty dinner . -0 woman debugs useful software . -0 man runs useful application . -1 woman bakes tasty dinner . -0 person prepares program . -0 woman debugs useful application . -0 skillful woman prepares application . -0 man debugs application . -0 woman prepares useful application . -0 man debugs useful program . -1 woman cooks sauce . diff --git a/docs/examples/datasets/mc_test_data.txt b/docs/examples/datasets/mc_test_data.txt deleted file mode 100644 index 3b549f7e..00000000 --- a/docs/examples/datasets/mc_test_data.txt +++ /dev/null @@ -1,30 +0,0 @@ -1 woman prepares tasty dinner . -1 woman cooks tasty sauce . -0 skillful woman prepares software . -1 skillful man prepares dinner . -1 skillful woman cooks sauce . -0 woman runs useful program . -0 skillful person runs software . -0 skillful person prepares program . -1 man prepares sauce . -1 person cooks tasty sauce . -1 man cooks sauce . -0 man prepares program . -0 skillful person prepares software . -1 woman bakes meal . -1 skillful man bakes sauce . -0 man prepares useful software . -0 woman debugs program . -0 skillful woman runs application . -0 man debugs software . -0 skillful woman debugs application . -0 person debugs software . -1 person bakes meal . -1 skillful woman bakes dinner . -1 skillful woman cooks dinner . -0 woman runs useful software . -1 man cooks meal . -0 person debugs program . -1 woman bakes sauce . -0 skillful woman debugs software . -1 woman prepares meal . diff --git a/docs/examples/datasets/mc_train_data.txt b/docs/examples/datasets/mc_train_data.txt deleted file mode 100644 index 3525e645..00000000 --- a/docs/examples/datasets/mc_train_data.txt +++ /dev/null @@ -1,70 +0,0 @@ -1 skillful man prepares sauce . -1 skillful man bakes dinner . -1 woman cooks tasty meal . -1 man prepares meal . -0 skillful woman debugs program . -1 woman prepares tasty meal . -0 person runs program . -0 person runs useful application . -1 woman prepares sauce . -1 woman prepares dinner . -1 skillful person prepares meal . -1 skillful person bakes dinner . -1 skillful woman bakes meal . -0 woman runs useful application . -1 man bakes tasty meal . -1 person prepares tasty meal . -0 woman runs application . -0 man prepares software . -1 man bakes tasty dinner . -0 person prepares useful program . -0 man debugs useful application . -0 person debugs useful application . -0 woman prepares program . -0 man prepares useful application . -1 skillful man cooks dinner . -0 man debugs useful software . -1 person cooks dinner . -1 skillful woman prepares meal . -0 man prepares application . -0 person debugs useful software . -0 person runs application . -1 skillful woman bakes sauce . -1 skillful man bakes meal . -1 woman cooks meal . -1 woman bakes dinner . -0 woman runs program . -0 skillful man prepares program . -1 skillful man cooks meal . -0 woman runs software . -0 skillful man debugs software . -1 man cooks dinner . -1 woman cooks tasty dinner . -1 woman cooks dinner . -1 man bakes tasty sauce . -1 man prepares dinner . -1 skillful person cooks sauce . -0 skillful man prepares software . -0 person prepares software . -0 person runs software . -1 person prepares tasty sauce . -1 skillful person bakes sauce . -1 skillful man cooks sauce . -0 man debugs program . -1 woman bakes tasty meal . -0 man runs software . -0 person prepares useful application . -1 person cooks meal . -0 woman debugs software . -0 skillful man runs software . -1 person bakes tasty sauce . -0 woman debugs application . -1 person bakes dinner . -0 woman debugs useful program . -1 man cooks tasty meal . -1 skillful person cooks meal . -1 person cooks sauce . -1 man cooks tasty sauce . -0 skillful woman runs program . -1 skillful person bakes meal . -0 person runs useful program . diff --git a/docs/examples/datasets/rp_test_data.txt b/docs/examples/datasets/rp_test_data.txt deleted file mode 100644 index 040c7c44..00000000 --- a/docs/examples/datasets/rp_test_data.txt +++ /dev/null @@ -1,31 +0,0 @@ -1 organization that fleet destroy . -1 person that teacher teach . -1 device that air enter . -1 device that water enter . -1 device that astronomer use . -1 document that student submit . -1 document that government sell . -1 player that pitcher face . -1 building that monk build . -1 quality that artist achieve . -1 quality that species share . -1 quality that vehicle increase . -1 room that ship have . -1 room that train feature . -1 activity that festival feature . -1 mammal that police have . -1 material that police use . -1 material that excavation remove . -1 material that water have . -0 organization that have team . -0 building that attract sailor . -0 device that show time . -0 player that hit run . -0 quality that win election . -0 vehicle that replace horse . -0 scientist that discover species . -0 phenomenon that hit island . -0 scientist that discover star . -0 vehicle that destroy vessel . -0 vehicle that cross river . -0 mammal that attack ship . \ No newline at end of file diff --git a/docs/examples/datasets/rp_train_data.txt b/docs/examples/datasets/rp_train_data.txt deleted file mode 100644 index 3d9350fb..00000000 --- a/docs/examples/datasets/rp_train_data.txt +++ /dev/null @@ -1,74 +0,0 @@ -1 organization that church establish . -1 organization that team join . -1 organization that company sell . -1 organization that soldier serve . -1 organization that sailor join . -1 organization that vessel serve . -1 organization that church represent . -1 person that school serve . -1 building that astronomer build . -1 building that astronomer own . -1 building that archaeologist discover . -1 building that archaeologist study . -1 player that batsman face . -1 building that audience fill . -1 device that shepherd play . -1 document that company publish . -1 device that people wear . -1 document that election use . -1 document that government offer . -1 document that person submit . -1 player that batter face . -1 player that pitcher strike . -1 person that train carry . -1 quality that election reflect . -1 organization that player join . -1 quality that church teach . -1 quality that vehicle offer . -1 room that vessel contain . -1 room that church have . -1 woman that child love . -1 material that fuel contain . -1 woman that soldier use . -1 woman that husband have . -1 woman that husband love . -1 vehicle that family own . -1 material that ship strike . -1 mammal that shepherd use . -1 material that officer carry . -1 phenomenon that engine lose . -1 room that archaeologist discover . -1 room that school include . -1 room that student enter . -1 vehicle that train have . -1 vehicle that horse pull . -1 vehicle that island have . -1 material that engine require . -0 organization that establish church . -0 organization that support child . -0 organization that use train . -0 person that join movement . -0 person that lose family . -0 building that hold festival . -0 device that carry water . -0 device that keep time . -0 player that strike batter . -0 player that allow run . -0 building that house monk . -0 person that take ship . -0 room that control movement . -0 room that hold engine . -0 woman that have child . -0 woman that raise child . -0 woman that carry pitcher . -0 woman that have husband . -0 woman that leave husband . -0 activity that fill air . -0 phenomenon that raise river . -0 scientist that visit island . -0 material that attract farmer . -0 phenomenon that require fuel . -0 vehicle that enter port . -0 vehicle that transport horse . -0 vehicle that haul material . -0 activity that build school . \ No newline at end of file diff --git a/docs/examples/parser.ipynb b/docs/examples/parser.ipynb deleted file mode 100644 index 5ebb486f..00000000 --- a/docs/examples/parser.ipynb +++ /dev/null @@ -1,64 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parser" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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5S6FujmFQgFnZ2c4OzvLXQqZgUKhgKOjI4O8FVIoFFCr1VCr1fDx8ZG7HOrlrO+DKkRERERkVgyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJIlCCCHkLoKop6quroZSqYRSqZS7FCIiItkwUBIRERGRJDzlTURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkvw/8pnx7YB7PS4AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser()\n", - "diagram = parser.sentence2diagram('This is a test sentence')\n", - "diagram.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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WiaTQa1Wm0OuVqu12KIbOXKkU27RSYmBsu+EELh27Zp52TEYDKioqDCvaHsyjv38/KBSqWwuO10/g4ODu11+jEYj7t+/b7Gyb2lpsVmvu7u7eZ7+/v7Q6XQWyw9DQf9pbW3F5cuXLfba1NbWml+z9vZ2m48bMmSIRXAYMmSI1fq163elUol79+51u541Go1WAbKzs9PmfJVKpXmeI0eOhF6vR3R0NPR6PbRarUufKUxKQgh88cUXFnuBy8vLzeuU5ubmbtcpvr6+FusUd3f3btcpISEhuH79unkd8ug4eXSjtGvD+VFyudw8T41Gg3HjxpnHiV6vR2BgYH+3zCEN2kD5OEIItLS0dLtF8nAA7AqGjw5Qo9GIsLAwVFVVWawEH10pqlQqqz2hj15UKhX3mDxhDJT9x2QyPXZPe9fydPfuXZvLTdfvYWFhuHbtmtUy03Xd3d3dIqB29+6Ct7c3N7gcVHt7+2PfkekaK/fv3+92PatQKHD37t1uA6dcLodCofjKcdK1g4Acj8lkstj50t04uXPnjs0x0nV99OjRqKqqsjlGutYpDwfU7saKUqnkOsUGBkoalBgoiYiInhzu9iIiIiIiuzBQEhEREZFdGCiJiIiIyC4MlERERERkFwZKIiIiIrILAyURERER2YWBkoiIiIjswkBJRERERHZhoCQiIiIiuzBQEhEREZFdGCiJiIiIyC4MlERERERkFwZKIiIiIrILAyURERER2YWBkoiIiIjswkBJRERERHZhoCQiIiIiuzBQEhEREZFdGCiJiIiIyC4MlERERERkFwZKIiIiIrILAyURERER2YWBkoiIiIjswkBJRERERHZhoCQiIiIiuzBQ0qDk4+ODhIQEKBQKqUshIiJyejIhhJC6CCIiIiJyXtxDSURERER2YaAkIiIiIrswUBIRERGRXRgoiYiIiMguDJREREREZBcGSiIiIiKyCwMlEREREdmFgZKIiIiI7MJASURERER2YaAkIiIiIrswUBIRERGRXRgoiYiIiMguDJREREREZBcGSiIiIiKyCwMlEREREdnlf6xmNbPz1o5nAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend import draw\n", - "\n", - "draw(diagram)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/pennylane.ipynb b/docs/examples/pennylane.ipynb deleted file mode 100644 index 2793c78c..00000000 --- a/docs/examples/pennylane.ipynb +++ /dev/null @@ -1,763 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training hybrid models using the Pennylane backend\n", - "\n", - "In this example, we will first train a pure quantum model using PennyLane and PyTorch to classify whether a sentence is about cooking or computing. We will then train a hybrid model that takes in pairs of sentences and determines whether they are talking about the same or different topics." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "BATCH_SIZE = 10\n", - "EPOCHS = 30\n", - "LEARNING_RATE = 0.1\n", - "SEED = 2" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import random\n", - "import numpy as np\n", - "\n", - "torch.manual_seed(SEED)\n", - "random.seed(SEED)\n", - "np.random.seed(SEED)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Read in the data and create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = float(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('datasets/mc_train_data.txt')\n", - "dev_labels, dev_data = read_data('datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:3], train_data[:3]\n", - " dev_labels, dev_data = dev_labels[:3], dev_data[:3]\n", - " test_labels, test_data = test_labels[:3], test_data[:3]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "reader = BobcatParser(verbose='text')\n", - "\n", - "raw_train_diagrams = reader.sentences2diagrams(train_data)\n", - "raw_dev_diagrams = reader.sentences2diagrams(dev_data)\n", - "raw_test_diagrams = reader.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Remove cups" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import RemoveCupsRewriter\n", - "\n", - "remove_cups = RemoveCupsRewriter()\n", - "\n", - "train_diagrams = [remove_cups(diagram) for diagram in raw_train_diagrams]\n", - "dev_diagrams = [remove_cups(diagram) for diagram in raw_dev_diagrams]\n", - "test_diagrams = [remove_cups(diagram) for diagram in raw_test_diagrams]\n", - "\n", - "train_diagrams[0].draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0MAAAMzCAYAAABk4skuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC4AElEQVR4nOzde1zO9/8/8MfVSV1FoVQOCRmXUyqiyJIsp4zFDCGzjY01I7PNRuNjMxPmy7CPtozmsI0ktsmhJoeiNEyOQ5tdbFGmouPr94df18clhw7X1bur9+N+u3XT9T683s/3W8/r/X6+D6+3QgghQEREREREJDNGUgdAREREREQkBRZDREREREQkSyyGiIiIiIhIllgMERERERGRLLEYIiIiIiIiWWIxREREREREssRiiIiIiIiIZInFEBERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGCIiIiIiIlliMURERERERLLEYoiIiIiIiGSJxRAREREREckSiyEiIiIiIpIlFkNERERERCRLLIaIiIiIiEiWWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQERERERHJEoshIiIiIiKSJRZDREREREQkSyyGiIiIiIhIllgMERERERGRLLEYIiIiIiIiWWIxREREREREssRiiIiIiIiIZInFEBERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGCIiIiIiIlliMURERERERLLEYoiIiIiIiGSJxRAREREREckSiyEiIiIiIpIlFkNERERERCRLLIaIiIiIiEiWWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQERERERHJEoshIiIiIiKSJRZDREREREQkSyyGiIiIiIhIllgMERERERGRLLEYIiIiIiIiWWIxREREREREssRiiIiIiIiIZInFEBERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGCIiIiIiIlliMURERERERLLEYoiIiIiIiGSJxRAREREREckSiyEiIiIiIpIlFkNERERERCRLLIaIiIiIiEiWWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQ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jfHtt99qukt+3C1zZcOHDh2K6Ojocg+5kzzxO792mTBhAn755RecOXMGrq6uMDMzQ7169RAcHIzevXtj6tSplW4zMDBQ523qW2ZmJt5//33NKz2ISFoG1ZucLpS9p0FKAwcOfOyL1vLy8sr1xFPm/fff13qB36OUvWvpUX788ccK3S4wfPjwGrnXnKgiLCws8P3332PTpk1YsWIFjh07Vm4aDw8PvPXWW3jppZdYCJGW2vCdL5XMzEx06NDhkePKunR+XPfbZ86c0boFUFe6dOmC77//HsXFxbhx4wbq1atX7Y569NHm40RHR2veUfWwli1b4rfffntqG2WdXxBR7SC7Yqg2WLduneYh34dZWFg8dlyjRo2e2nZ6evpjx5X1vkNkaIyNjREcHIzg4GCkp6dj8uTJuHnzJt555x14enqyswSqEF9fX52/hqBMSEgIQkJC9NJ2VTVt2vSJ+4SnzatPJiYmOt8n6aPNhw0dOvSx7y97uLtuIjIMLIYkoM8va55torqua9eucHFxgaWlJd8jRPQEJiYm3CfoWP369VG/fn2pwyAiHZLVM0NERERERERlWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQERERERHJEoshIiIiIiKSJYN+z1BGRobUIdQp3J5kKOrXr4979+5JHQZRhfH7Vbe4PYlIVwyyGLK1tYVSqURwcLDUodQ5SqUStra2UodB9ER37txBdna21GEQPRX3V/rD/RUR6YJBFkNOTk7IyMhAVlaW1KE81dKlS3Ho0CH88MMPUodSIba2tnBycpI6DCKiOsGQ9leTJ0+Gra0tFi5cKHUoFcL9FRHpgkEWQ8D9HYwhfAna29vD3Nwc7u7uUodCREQSMJT9Vf369dGoUSPur4hIVtiBAhERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGKpDrly5AoVCgfT09MdOk5CQAIVCgZycnBqLi8iQMa+IdI95RUS1BYshmfH29oZarYa1tTUAICoqCjY2NtIGRWTgmFdEuse8IqKaYLDvGaKqMTMzg4ODg9RhENUpzCsi3WNeEVFN4JWhWiQvLw/jx4+HlZUVHB0dERERAV9fX0yfPh0AoFAoEBMTozWPjY0NoqKitIadPXsW3t7eMDc3R6dOnZCYmKgZ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oYMuXLigNWvWKCQk5K70+/PPP6tLly7av3+/oqKicjy8IuAM7Ha7OnfuLA8PD23YsEGPPPLIXen3+++/V8eOHfXjjz/qk08+UcuWLe9Kv4AzCA8Pl7+/v6Kjo80uBbil/fv3q0GDBtq3b58SExO1bt06bd261eyy8iw2NlZhYWG5vpQ8r/76vtavX/+2yx86dEjh4eE6evSoU19dwWVytxEQECC73a6aNWsqLCzsrhwkDh06pKCgIKWmpio2NpYghCInKChISUlJKl26tIKDg7MuJShICQkJCgwM1KVLl5SYmEgQAoAi4LnnnlPTpk114cIFs0vJs5CQkGz3JhV2DodDH3zwgVMHIYkwlCM+Pj6KiYlRjx49FBkZqVdeeSXfRun4uy1btig4OFilS5dWUlKSgoKCCqQfwGyVKlVSXFycmjdvrvbt2+udd94psG/DoqOjFRYWppo1a8put2ddKw4AcG7FihXT+PHjVapUKbNLyTM3N7dsI6NGR0dnG477rz85uaJi0KBB/7j+zeaFhoZKkt54440c1duiRQu1bt06dxtbiBQzuwBnUaJECS1btkwBAQF66aWXdOTIEUVFReXb0+kNw9C7776r4cOHq3379oqOji4SOzZwK6VKldJnn32msWPH6oUXXlBKSormzZt3wzChuZWZmanJkyfrtddeU9++fbVo0SKVKFEiX9oGAKAgderU6R+/FM/JcXLKlCkaNWrUTeeVLl36hnmHDh1SRERE1vOZrIIwdAdsNpvGjBmj6tWrKzIyUs2bN9fatWvl7++fp3avXr2qF198UQsXLtTIkSM1ffr0bKOUAEWZq6urZs6cqZo1a2rw4MH69ttv9fHHH6tMmTJ5avfSpUvq27evPvnkE02bNk1jxozhAcUAAKdRqlSpPH0xXr58+WzDi99s/l9dHz25bNmyue7TGXGZXC506dJFcXFx+t///V8FBgYqOTk51239+uuvat++vZYsWaIlS5Zo5syZBCFY0jPPPKNt27Zp7969Cg4OzvaE8DvlcDjUvHlzbdy4UatXr9bYsWMJQgAA4AaEoVyqV6+ekpKS5Ovrq9DQUK1bt+6O20hNTVVwcLD27t2rbdu26ZlnnimASgHnERYWJrvdrszMTAUFBenLL7+84zaSk5MVGBiokydPateuXerSpUsBVAoAAIoCwlAeVKhQQV9++aXa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JRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFjS/wMjmnamoMZj7gAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import AtomicType, IQPAnsatz\n", - "\n", - "ansatz = IQPAnsatz({AtomicType.NOUN: 1, AtomicType.SENTENCE: 1},\n", - " n_layers=1, n_single_qubit_params=3)\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits[0].draw(figsize=(8, 8))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create (pure quantum) model and initialise parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PennyLaneModel\n", - "\n", - "all_circuits = train_circuits + dev_circuits + test_circuits\n", - "\n", - "model = PennyLaneModel.from_diagrams(all_circuits)\n", - "model.initialise_weights()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Prepare train dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "val_dataset = Dataset(dev_circuits, dev_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Training" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Using `PytorchTrainer`" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "def acc(y_hat, y):\n", - " return (torch.argmax(y_hat, dim=1) == \n", - " torch.argmax(y, dim=1)).sum().item()/len(y)\n", - "\n", - "def loss(y_hat, y):\n", - " return torch.nn.functional.mse_loss(y_hat, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 1: train/loss: 0.1542 valid/loss: 0.2271 train/time: 0.88s valid/time: 0.23s train/acc: 0.5571 valid/acc: 0.5333\n", - "Epoch 2: train/loss: 0.1318 valid/loss: 0.2877 train/time: 0.59s valid/time: 0.17s train/acc: 0.8571 valid/acc: 0.6000\n", - "Epoch 3: train/loss: 0.0677 valid/loss: 0.1879 train/time: 0.53s valid/time: 0.16s train/acc: 0.8429 valid/acc: 0.7333\n", - "Epoch 4: train/loss: 0.1274 valid/loss: 0.1289 train/time: 0.62s valid/time: 0.17s train/acc: 0.9000 valid/acc: 0.8333\n", - "Epoch 5: train/loss: 0.0604 valid/loss: 0.1909 train/time: 0.48s valid/time: 0.16s train/acc: 0.8571 valid/acc: 0.6667\n", - "Epoch 6: train/loss: 0.0572 valid/loss: 0.1599 train/time: 0.48s valid/time: 0.16s train/acc: 0.8857 valid/acc: 0.7333\n", - "Epoch 7: train/loss: 0.0147 valid/loss: 0.1156 train/time: 0.58s valid/time: 0.47s train/acc: 0.9286 valid/acc: 0.8000\n", - "Epoch 8: train/loss: 0.0057 valid/loss: 0.0661 train/time: 0.76s valid/time: 0.21s train/acc: 0.8857 valid/acc: 0.9333\n", - "Epoch 9: train/loss: 0.0988 valid/loss: 0.1100 train/time: 0.47s valid/time: 0.16s train/acc: 0.9429 valid/acc: 0.8667\n", - "Epoch 10: train/loss: 0.0067 valid/loss: 0.0928 train/time: 0.65s valid/time: 0.17s train/acc: 0.9714 valid/acc: 0.8667\n", - "Epoch 11: train/loss: 0.0854 valid/loss: 0.0410 train/time: 0.47s valid/time: 0.16s train/acc: 0.9714 valid/acc: 0.9667\n", - "Epoch 12: train/loss: 0.0434 valid/loss: 0.0416 train/time: 0.54s valid/time: 0.17s train/acc: 0.9714 valid/acc: 0.9333\n", - "Epoch 13: train/loss: 0.0368 valid/loss: 0.0262 train/time: 0.56s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 14: train/loss: 0.0007 valid/loss: 0.0239 train/time: 0.48s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 15: train/loss: 0.0002 valid/loss: 0.0109 train/time: 0.47s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 16: train/loss: 0.0002 valid/loss: 0.0057 train/time: 0.56s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 17: train/loss: 0.0014 valid/loss: 0.0078 train/time: 0.46s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 18: train/loss: 0.0048 valid/loss: 0.0071 train/time: 0.46s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 19: train/loss: 0.0021 valid/loss: 0.0060 train/time: 0.57s valid/time: 0.25s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 20: train/loss: 0.0007 valid/loss: 0.0051 train/time: 0.46s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 21: train/loss: 0.0002 valid/loss: 0.0046 train/time: 0.49s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 22: train/loss: 0.0001 valid/loss: 0.0054 train/time: 0.58s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 23: train/loss: 0.0001 valid/loss: 0.0057 train/time: 0.49s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 24: train/loss: 0.0000 valid/loss: 0.0058 train/time: 0.46s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 25: train/loss: 0.0000 valid/loss: 0.0058 train/time: 0.57s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 26: train/loss: 0.0000 valid/loss: 0.0058 train/time: 0.46s valid/time: 0.17s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 27: train/loss: 0.0000 valid/loss: 0.0059 train/time: 0.45s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 28: train/loss: 0.0000 valid/loss: 0.0059 train/time: 0.47s valid/time: 0.31s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 29: train/loss: 0.0000 valid/loss: 0.0059 train/time: 0.46s valid/time: 0.17s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 30: train/loss: 0.0000 valid/loss: 0.0059 train/time: 0.45s valid/time: 0.16s train/acc: 1.0000 valid/acc: 1.0000\n", - "\n", - "Training completed!\n", - "train/time: 15.95s train/time_per_epoch: 0.53s train/time_per_step: 0.08s valid/time: 5.52s valid/time_per_eval: 0.18s\n" - ] - } - ], - "source": [ - "from lambeq import PytorchTrainer\n", - "\n", - "trainer = PytorchTrainer(\n", - " model=model,\n", - " loss_function=loss,\n", - " optimizer=torch.optim.Adam,\n", - " learning_rate=LEARNING_RATE,\n", - " epochs=EPOCHS,\n", - " evaluate_functions={\"acc\": acc},\n", - " evaluate_on_train=True,\n", - " use_tensorboard=False,\n", - " verbose='text',\n", - " seed=SEED\n", - " )\n", - "\n", - "trainer.fit(train_dataset, val_dataset)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Determine test accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def accuracy(circs, labels):\n", - " probs = model(circs)\n", - " return (torch.argmax(probs, dim=1) == \n", - " torch.argmax(torch.tensor(labels), dim=1)).sum().item()/len(circs)\n", - "\n", - "accuracy(test_circuits, test_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Using standard PyTorch\n", - "\n", - "As we have a small dataset, we can use early stopping to prevent overfitting to the training data." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "def accuracy(circs, labels):\n", - " probs = model(circs)\n", - " return (torch.argmax(probs, dim=1) == \n", - " torch.argmax(torch.tensor(labels), dim=1)).sum().item()/len(circs)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch: 0\n", - "Train loss: 1.8844525068998337\n", - "Dev acc: 0.8\n", - "Epoch: 5\n", - "Train loss: 0.19278147350996733\n", - "Dev acc: 0.9666666666666667\n", - "Epoch: 10\n", - "Train loss: 0.014470159949269146\n", - "Dev acc: 0.9333333333333333\n", - "Epoch: 15\n", - "Train loss: 0.000635529821011005\n", - "Dev acc: 0.9666666666666667\n", - "Early stopping\n" - ] - } - ], - "source": [ - "import pickle\n", - "\n", - "model = PennyLaneModel.from_diagrams(all_circuits)\n", - "model.initialise_weights()\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)\n", - "\n", - "best = {'acc': 0, 'epoch': 0}\n", - "\n", - "for i in range(EPOCHS):\n", - " epoch_loss = 0\n", - " for circuits, labels in train_dataset:\n", - " optimizer.zero_grad()\n", - " probs = model(circuits)\n", - " d_type = model.weights[0].dtype\n", - " probs = probs.to(d_type)\n", - " loss = torch.nn.functional.mse_loss(probs, \n", - " torch.tensor(labels))\n", - " epoch_loss += loss.item()\n", - " loss.backward()\n", - " optimizer.step()\n", - " \n", - " if i % 5 == 0:\n", - " dev_acc = accuracy(dev_circuits, dev_labels)\n", - " \n", - " print(\"Epoch: {}\".format(i))\n", - " print(\"Train loss: {}\".format(epoch_loss))\n", - " print(\"Dev acc: {}\".format(dev_acc))\n", - " \n", - " if dev_acc > best['acc']:\n", - " best['acc'] = dev_acc\n", - " best['epoch'] = i\n", - " model.save(\"model.lt\")\n", - " elif i - best['epoch'] >= 10:\n", - " print(\"Early stopping\")\n", - " break\n", - " \n", - "if best[\"acc\"] > accuracy(dev_circuits, dev_labels): \n", - " model.load(\"model.lt\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Determine the test accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9666666666666667" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy(test_circuits, test_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a hybrid model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This model will take in pairs of diagrams and attempt to determine whether they are talking about the same or different topics. It does this by first running the circuits to get a probability ouput on the open wire, and then passes this output to a simple neural network. We expect the circuits to learn to output [0, 1] or [1, 0] depending on the topic they are referring to (cooking or computing), and the neural network to learn to XOR these outputs to determine whether the topics are the same (in which case it should ouput 0) or different (in which case it should output 1). PennyLane allows us to train both the circuits and the NN simultaneously using PyTorch autograd." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "BATCH_SIZE = 50\n", - "EPOCHS = 100\n", - "LEARNING_RATE = 0.1\n", - "SEED = 2" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "torch.manual_seed(SEED)\n", - "random.seed(SEED)\n", - "np.random.seed(SEED)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As the probability outputs from our circuits are guaranteed to be positive, we transform these outputs `x` by `2 * (x - 0.5)`, giving inputs to the neural network in the range [-1, 1]. This helps us to avoid \"dying ReLUs\", which could otherwise occur if all the input weights to a given neuron were negative, leading to the gradient of all these weights being 0. (A couple of alternative approaches could also involve initialising all the neural network weights to be positive, or using `LeakyReLU` as the activation function)." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "from torch import nn\n", - "\n", - "class XORSentenceModel(PennyLaneModel):\n", - " def __init__(self, **kwargs):\n", - " PennyLaneModel.__init__(self, **kwargs)\n", - " \n", - " self.xor_net = nn.Sequential(\n", - " nn.Linear(4, 10),\n", - " nn.ReLU(),\n", - " nn.Linear(10, 1),\n", - " nn.Sigmoid()\n", - " )\n", - " \n", - " def forward(self, diagram_pairs):\n", - " a, b = zip(*diagram_pairs)\n", - " evaluated_pairs = torch.cat((self.get_diagram_output(a),\n", - " self.get_diagram_output(b)),\n", - " dim=1)\n", - " evaluated_pairs = 2 * (evaluated_pairs - 0.5)\n", - " out = self.xor_net(evaluated_pairs)\n", - " return out" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Make paired dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations\n", - "\n", - "def make_pair_data(diagrams, labels):\n", - " pair_diags = list(combinations(diagrams, 2))\n", - " pair_labels = [int(x[0] == y[0]) for x, y in combinations(labels, 2)]\n", - " \n", - " return pair_diags, pair_labels\n", - "\n", - "train_pair_circuits, train_pair_labels = make_pair_data(train_circuits, \n", - " train_labels)\n", - "dev_pair_circuits, dev_pair_labels = make_pair_data(dev_circuits, dev_labels)\n", - "test_pair_circuits, test_pair_labels = make_pair_data(test_circuits, \n", - " test_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are lots of pairs (2415 train pairs), so we'll sample a subset to make this example train more quickly." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "TRAIN_SAMPLES, DEV_SAMPLES, TEST_SAMPLES = 300, 200, 200" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "if TESTING:\n", - " TRAIN_SAMPLES, DEV_SAMPLES, TEST_SAMPLES = 2, 2, 2" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "train_pair_circuits, train_pair_labels = (\n", - " zip(*random.sample(list(zip(train_pair_circuits, train_pair_labels)),\n", - " TRAIN_SAMPLES)))\n", - "dev_pair_circuits, dev_pair_labels = (\n", - " zip(*random.sample(list(zip(dev_pair_circuits, dev_pair_labels)), DEV_SAMPLES)))\n", - "test_pair_circuits, test_pair_labels = (\n", - " zip(*random.sample(list(zip(test_pair_circuits, test_pair_labels)), TEST_SAMPLES)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialise the model" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "all_pair_circuits = (train_pair_circuits +\n", - " dev_pair_circuits +\n", - " test_pair_circuits)\n", - "a, b = zip(*all_pair_circuits)\n", - "\n", - "model = XORSentenceModel.from_diagrams(a + b)\n", - "model.initialise_weights()\n", - "\n", - "train_pair_dataset = Dataset(train_pair_circuits,\n", - " train_pair_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train the model and log accuracies" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Only log every five epochs as evaluating is expensive." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "def accuracy(circs, labels):\n", - " predicted = model(circs)\n", - " return (torch.round(torch.flatten(predicted)) == \n", - " torch.Tensor(labels)).sum().item()/len(circs)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch: 0\n", - "Train loss: 4.250532507896423\n", - "Dev acc: 0.53\n", - "Epoch: 5\n", - "Train loss: 1.186747632920742\n", - "Dev acc: 0.825\n", - "Epoch: 10\n", - "Train loss: 0.35468656790908426\n", - "Dev acc: 0.545\n", - "Epoch: 15\n", - "Train loss: 0.41043267399072647\n", - "Dev acc: 0.875\n", - "Epoch: 20\n", - "Train loss: 0.0038383470964618027\n", - "Dev acc: 0.88\n", - "Epoch: 25\n", - "Train loss: 0.0011570464266696945\n", - "Dev acc: 0.88\n", - "Epoch: 30\n", - "Train loss: 0.0007703642331762239\n", - "Dev acc: 0.88\n", - "Early stopping\n" - ] - } - ], - "source": [ - "best = {'acc': 0, 'epoch': 0}\n", - "\n", - "for i in range(EPOCHS):\n", - " epoch_loss = 0\n", - " for circuits, labels in train_pair_dataset:\n", - " optimizer.zero_grad()\n", - " predicted = model(circuits)\n", - " loss = torch.nn.functional.binary_cross_entropy(\n", - " torch.flatten(predicted), torch.Tensor(labels))\n", - " epoch_loss += loss.item()\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " if i % 5 == 0:\n", - " dev_acc = accuracy(dev_pair_circuits, dev_pair_labels)\n", - "\n", - " print(\"Epoch: {}\".format(i))\n", - " print(\"Train loss: {}\".format(epoch_loss))\n", - " print(\"Dev acc: {}\".format(dev_acc))\n", - "\n", - " if dev_acc > best['acc']:\n", - " best['acc'] = dev_acc\n", - " best['epoch'] = i\n", - " model.save(\"xor_model.lt\")\n", - " elif i - best['epoch'] >= 10:\n", - " print(\"Early stopping\")\n", - " break\n", - " \n", - "if best[\"acc\"] > accuracy(dev_pair_circuits, dev_pair_labels): \n", - " model.load(\"xor_model.lt\")\n", - " model = model.double()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.89" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "accuracy(test_pair_circuits, test_pair_labels)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/quantum-pipeline-jax.ipynb b/docs/examples/quantum-pipeline-jax.ipynb deleted file mode 100644 index 06cf2ba6..00000000 --- a/docs/examples/quantum-pipeline-jax.ipynb +++ /dev/null @@ -1,375 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Quantum pipeline using JAX backend\n", - "\n", - "This performs an exact classical simulation." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import warnings\n", - "warnings.filterwarnings(\"ignore\")\n", - "\n", - "import os\n", - "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "BATCH_SIZE = 30\n", - "LEARNING_RATE = 3e-2\n", - "EPOCHS = 120\n", - "SEED = 0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Read in the data and create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = int(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return np.array(labels), sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('datasets/mc_train_data.txt')\n", - "dev_labels, dev_data = read_data('datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " dev_labels, dev_data = dev_labels[:2], dev_data[:2]\n", - " test_labels, test_data = test_labels[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='text')\n", - "\n", - "raw_train_diagrams = parser.sentences2diagrams(train_data)\n", - "raw_dev_diagrams = parser.sentences2diagrams(dev_data)\n", - "raw_test_diagrams = parser.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Remove the cups" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import RemoveCupsRewriter\n", - "\n", - "remove_cups = RemoveCupsRewriter()\n", - "\n", - "train_diagrams = [remove_cups(diagram) for diagram in raw_train_diagrams]\n", - "dev_diagrams = [remove_cups(diagram) for diagram in raw_dev_diagrams]\n", - "test_diagrams = [remove_cups(diagram) for diagram in raw_test_diagrams]\n", - "\n", - "train_diagrams[0].draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA50AAAOXCAYAAACntyUsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADD3klEQVR4nOzde3zP9f//8ft7J8wwDKPMEjFijmNjhYiIiI9zjkkHqRyiFKqPkkN8lKSSYSKfkpzKKZNTaBo5i1j5jHK2DTs9f3/08/5apuzw2st7u10vl11sr/fr/Xw93m977PW6v18nhzHGCAAAAAAAC7jZXQAAAAAAIO8idAIAAAAALEPoBAAAAABYhtAJAAAAALAMoRMAAAAAYBlCJwAAAADAMoROAAAAAIBlCJ0AAAAAAMsQOgEAAAAAliF0AgAAAAAsQ+gEAAAAAFiG0AkAAAAAsAyhEwAAAABgGUInAAAAAMAyhE4AAAAAgGUInQAAAAAAyxA6AQAAAACWIXQCAAAAACxD6AQAAAAAWIbQCQAAAACwDKETAAAAAGAZQicAAAAAwDKETgAAAACAZQidAAAAAADLEDoBAAAAAJYhdAIAAAAALEPoBAAAAABYhtAJAAAAALAMoRMAAAAAYBlCJwAAAADAMoROAAAAAIBlCJ0AAAAAAMsQOgEAAAAAliF0AgAAAAAsQ+gEAAAAAFiG0AkAAAAAsAyhEwAAAABgGUInAAAAAMAyhE4AAAAAgGUInQAAAAAAyxA6AQAAAACWIXQCAAAAACxD6AQAAAAAWIbQCQAAAACwDKETAAAAAGAZQicAAAAAwDKETgAAAACAZQidAAAAAADLEDoBAAAAAJYhdAIAAAAALEPoBAAAAABYhtAJAAAAALAMoRMAAAAAYBlCJwAAAADAMoROAAAAAIBlCJ0AAAAAAMsQOgEAAAAAliF0AgAAAAAsQ+gEAAAAAFiG0AkAAAAAsAyhEwAAAABgGUInAAAAAMAyhE4AAAAAgGUInQAAAAAAyxA6AQAAAACWIXQCAAAAACxD6AQAAAAAWIbQCQAAAACwDKETAAAAAGAZQicAAAAAwDKETgAAAACAZQidAAAAAADLEDoBAAAAAJYhdAIAAAAALEPoBAAAAABYhtAJAAAAALAMoRMAAAAAYBlCJwAAAADAMoROAAAAAIBlCJ0AAAAAAMsQOgEAAAAAliF0AgAAAAAsQ+i8DRhjNHHiRI0aNUppaWl2lwMgk86ePatOnTrpu+++s7sUAFmwYcMGderUSefOnbO7FACZlJaWplGjRmnSpEkyxthdDm7Cw+4C8rukpCQ99dRT+uSTT+RwOHTw4EHNnTtX3t7edpcG4BYcOnRIDz/8sH7++WctXbpUH374ofr06WN3WQBu0ezZszVw4EClpKTop59+0vLly1W5cmW7ywJwCxISEtSrVy99+eWXMsbowIEDev/99+Xl5WV3afgL9nTa6MyZM3rwwQcVGRmpuXPnasmSJfrmm29033336X//+5/d5QH4B+vXr1fDhg3l7u6uffv2qW/fvurbt69GjhzJUQvAbS4tLU0jRoxQv3791LdvX+3bt09ubm5q0KCBoqKi7C4PwD84ceKE7rvvPq1atUpLlizR3LlzNW/ePD344IM6c+aM3eXhLxyG/dC2OHDggB5++GFduHBBS5YsUaNGjSRJMTExatu2rYwxWrp0qerUqWNzpQAy8vHHH+upp55S06ZNtWjRIvn6+soYo6lTp2ro0KF65JFHFBkZqcKFC9tdKoC/iI+PV8+ePbVs2TJNnjxZzz33nBwOh86fP6/OnTtr/fr1mjFjhh5//HG7SwWQgZ07d6pt27Zyd3fXsmXLFBwcLEnatGmTOnToIF9fXy1fvlxVqlSxuVJcw55OG6xdu1YNGzZUgQIFtH37dmfglKRatWpp+/btKleunMLDw/Xll1/aWCmAv0pNTdWwYcM0YMAAPfHEE1q5cqV8fX0lSQ6HQy+88IKWLl2qtWvXKjw8XL/99pu9BQNI57ffflN4eLjWrVunpUuX6vnnn5fD4ZAk+fr6asWKFRowYIAGDBigYcOGKTU11eaKAVxv8eLFCg8P15133qnt27c7A6ckNW7cWNu2bZOXl5caNmyodevW2Vgp0jHIVTNmzDDu7u6mVatW5vz58zedLzEx0fzrX/8yksz48eNNWlpaLlYJICMXL140Dz/8sHFzczPvvvvu3867a9cuExAQYMqWLWt27NiRSxUC+Dvbt283ZcuWNRUqVDC7d+++6XxpaWlm2rRpxs3NzbRt29ZcunQpF6sEkJG0tDTz1ltvGUmmc+fOJjEx8abznj9/3rRs2dK4u7ubDz74IBerxM0QOnNJSkqKee6554wk8+yzz5rk5OR/fE5qaqp59dVXjSTTu3dvc+XKlVyoFEBGjh8/bmrWrGmKFClivv7661t6zsmTJ02DBg1MoUKFzH//+1+LKwTwdxYtWmQKFixoGjZsaE6ePHlLz1m5cqUpUqSICQ4ONsePH7e4QgA3c+XKFdOrVy8jyYwePdqkpqb+43OSk5PNoEGDjCTz/PPPm5SUlFyoFDdD6MwFFy5cMK1btzbu7u5m+vTpmX5+ZGSk8fLyMuHh4eaPP/6woEIAf+f77783ZcqUMYGBgeann37K1HMTExNN165djSQzbtw4jloAcllaWpr597//bSSZbt26mcuXL2fq+T/99JOpUKGCKVOmjPn+++8tqhLAzfzxxx+mcePGpkCBAiYyMjLTz3/vvfeMu7u7adOmjblw4YIFFeJWEDot9ssvv5h7773XFC1a1KxatSrL42zevNmUKlXKVKxY0ezbty8HKwTwdxYsWGAKFChgwsLCzKlTp7I0Rlpamhk7dqyRZB577DGOWgByyZUrV0zPnj2NJPPaa69l+UOfU6dOmbCwMFOwYEGzcOHCHK4SwM3s27fPVKxY0ZQuXdps2bIly+N88803pmjRoubee+81v/zyS84ViFvGhYQstGXLFoWEhCgxMVFbt27Vgw8+mOWxwsLCtH37dhUqVEihoaFas2ZNDlYK4K+MMXrttdfUrVs3/etf/9K6detUunTpLI3lcDg0ZswYLViwQIsWLdIDDzygP/74I4crBnC933//Xc2aNdPnn3+uhQsXavTo0c4LBmVW6dKltW7dOnXs2FFdu3bV66+/zk3oAYutXr1aoaGh8vb21rZt2xQaGprlsVq2bKmtW7cqISFBDRo00NatW3OwUtwKQqdF5s+fr6ZNm6pq1aratm2bqlWrlu0xAwMDtWXLFoWFhemhhx7SjBkzcqBSAH91+fJl9ejRQ2PHjtW///1vzZ07VwULFsz2uF27dlVUVJR+/vlnNWjQQHv37s2BagH81d69e9WgQQMdOXJEUVFR6tKlS7bHLFiwoObNm6c33nhDY8aMUY8ePXTlypUcqBbAX73//vtq3bq1GjVqpM2bNyswMDDbY1arVk3btm3TPffco6ZNm+rTTz/NfqG4dXbvas1rcuPiP8nJyZm+KBGAW3Py5EnTsGFDSy/+c+2iREWLFr3lixIBuDVff/21KVKkiKlZs6ZlF//JykWJAPyz5ORk8+yzz1p68Z+/XpSIay3kDkJnDkpMTDSdO3fOtduc3OrtVwDcmt27d+fabU4yc/sVAP/sr7c5uXjxoqXL2759u/H39zcBAQF/e/sVALcmN29zcv3tV7p06fK3t19BziB05pD//e9/JiQkxHh7e5vFixfn2nLXrFljihUrZqpXr26OHj2aa8sF8prly5cbHx8fU6tWLfPrr7/myjJTUlLM0KFDjSTz9NNPc9QCkEVJSUnmqaeeMpLM0KFDc+3WCLGxsaZWrVrGx8fHLF++PFeWCeRFR48eNdWqVTPFihUza9asybXlfvHFF6ZQoUImJCTExMXF5dpy8yPO6cwBMTExCgkJ0W+//aaNGzeqQ4cOubbs5s2b6/vvv9eVK1cUEhKizZs359qygbzAGKMpU6aoXbt2at68uTZu3Kg777wzV5bt7u6uSZMm6cMPP9SHH36oNm3a6Pz587mybCCvOH/+vNq0aaOPPvpIH330kSZNmiR3d/dcWXb58uW1ceNGPfDAA2rXrp2mTp3KBYaATNq0aZNCQkJ09epVff/992revHmuLfvRRx/Vxo0b9dtvvykkJES7du3KtWXnN4TObFq6dKkaN26s0qVLa/v27apTp06u13D9xYqaNWumyMjIXK8BcEXJycl68sknNWTIEA0bNkxffPGFfHx8cr2OAQMGaNWqVdq+fbtCQ0N15MiRXK8BcEVHjhxRaGiofvjhB61evVqPP/54rtfg4+OjxYsXa9iwYXrhhRf01FNPKTk5OdfrAFzRvHnz9MADDzgv8lO1atVcr6Fu3bravn27SpUqpUaNGmnZsmW5XkO+YPeuVleVlpZmJk6caBwOh3n00UdNfHx8tsZ77733TIUKFUyBAgVMSEiI2bZtW6bHuHr1qunbt6+RZEaNGmVSU1OzVROQl509e9Y0a9bMeHp6mk8++SRbY+VE/xpjzMGDB03lypVNyZIlzXfffZetmoC8bsOGDaZkyZKmcuXK5uDBg9kaK6d6eNasWcbDw8M88MAD5uzZs9mqCcjLUlNTzcsvv2wkmX79+pmrV69meayc6t/4+HjToUMH43A4zKRJk7jAUA4jdGbB1atXTf/+/Y0k89JLL2U73C1cuNB4eXmZTz75xOzdu9cMGDDA+Pr6ZulG9Glpaebtt982DofDdOrUySQkJGSrNiAvOnTokLnnnntMiRIlTFRUVLbGysn+NcaYM2fOmKZNmxpPT08ze/bsbNUG5FWzZ882np6epmnTpubMmTPZGiune3j9+vWmRIkS5p577jGHDh3KVm1AXpSQkGA6duxoHA6HmTBhQrbCXU73b2pqqnnppZeMJNO/f/9shWGkR+jMpNOnT5v777/feHp6mjlz5uTImCEhIeaZZ55x/pyammrKlStn3nrrrSyP+eWXXxpvb29Tr149c+LEiZwoE8gT1q9fb4oXL26qVKliDh8+nO3xrOjfq1evmscff9xIMiNHjuSoBeD/S01NNSNGjDCSzIABA0xSUlK2x7Sihw8fPmyqVKliihcvbtavX5/tGoG84sSJE6Zu3brG29vbLFmyJNvjWdG/xhgTERFhPD09TZMmTbL9wRb+xDmdmXDw4EE1bNhQe/fu1bfffqtevXple8ykpCRFR0enO2nazc1NzZs319atW7M8bvv27bVp0ybFxcUpJCREP/74Y7ZrBVzdxx9/rBYtWqhu3braunWrKlWqlK3xrOpfLy8vffjhh5o8ebLefvttderUSQkJCdmqFXB1CQkJ6tixoyZMmKB33nlHM2fOlKenZ7bGtKqHK1WqpK1bt6pOnTpq0aKFZs2ala06gbxg586dCgkJ0alTp7Rp0yY98sgj2RrPqv6VpN69e2vdunX66aef1LBhQx06dChb44ELCd2ydevWqWHDhvL09NS2bdvUuHHjHBn39OnTSk1NVZkyZdJNL1OmjE6ePJmtsWvXrq3t27erbNmyaty4sZYsWZKt8QBXlZqaqmHDhmnAgAF6/PHHtXLlShUvXjzb41rZvw6HQ0OGDNFXX32l1atXKzw8XCdOnMjWmICr+u233xQeHq61a9fqq6++0gsvvCCHw5Htca3s4eLFi+vrr79W//799fjjj2v48OFKTU3N1piAq/ryyy8VHh6usmXLavv27apdu3a2x7SyfyUpPDxc27Ztk4eHhxo0aKB169Zle8z8jNB5C2bOnKmWLVsqJCREW7duVcWKFe0u6ZaVK1dOGzZsUOvWrfXoo49qwoQJXM4d+Up8fLw6dOigKVOm6D//+Y/ef//9bO8dyU1t27bV5s2bdfr0aYWEhCg6OtrukoBc9cMPPygkJERnzpzR5s2b1bZtW7tLumWenp6aMWOGpk6dqnfeeUePPvqo4uPj7S4LyDXGGL399tt69NFH1bp1a23YsEFly5a1u6xbdvfdd2vr1q0KCQlRq1at9OGHH9pdkssidP6N1NRUvfDCC3ryySf11FNPacWKFSpWrFiOLsPPz0/u7u46depUuumnTp2Sv79/jizD29tbn332mV5++WWNGDFC/fv3V1JSUo6MDdzOYmNj1bhxY0VFRWn58uUaPHhwjuwduSY3+leSgoODtX37dt15550KDw/X4sWLc2xs4Hb2xRdf6L777lNAQIC2bdummjVr5uj4udHDDodDzz33nJYtW6b169ercePG+vXXX3NkbOB2lpSUpH79+mnkyJF65ZVX9Nlnn8nb2zvHxs+tdXCxYsW0YsUKDRw4UAMHDtSQIUM4aiELCJ03cfHiRT3yyCN699139d577+ndd9+Vh4dHji/Hy8tLdevWTbfLPi0tTevWrVNoaGiOLcfNzU3//ve/NXfuXM2fP18tWrTQ6dOnc2x84Hazbds2hYSE6Pz589qyZYseeuihHF9GbvWvJPn7+ysqKkrt2rVTx44d9dZbb3HUAvIsY4zefPNNderUSY888ojWr1+foxuR1+RmD7du3VqbN2/W+fPnFRISou3bt+fo+MDt5PTp02rRooU+/fRTzZs3T2+88Ybc3HI2duRm/3p4eDjzwH/+8x898sgjunTpUo4uI8+z9zpGt6dffvnF3HvvvaZo0aLmm2++sXx5CxcuNAUKFDARERFm37595oknnjC+vr7m5MmTlixv06ZNxs/Pz9x9991m//79liwDsNPChQtNwYIFTVhYWJYvm56ZZeVm/6alpZkxY8YYSaZXr17mypUrliwHsMuVK1fMY489ZiSZsWPHWn6vvNzu4VOnTpnQ0FBTsGBB89lnn1myDMBO+/btMxUrVjSlSpUymzZtsnRZud2/xhjz9ddfm6JFi5oaNWqYY8eOWbacvIbQ+RdbtmwxpUuXNnfddZfZu3dvri333XffNQEBAcbLy8uEhISY77//3tLlHT161FSrVs0UK1bMrFmzxtJlAbklLS3NvPbaa0aS6dGjh7l8+XKuLDe3+9cYYz799FNToEAB07hxY/P7779bvjwgN/z++++mUaNGpkCBAmbBggW5ttzc7uHLly+b7t27G0nm9ddf5yb0yDNWr15tihUrZqpXr25++eWXXFmmHevgPXv2mMDAQFO6dGmzdetWy5eXFxA6rzN//nxToEAB06hRo3yxEXf+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3n33XY0YMUKSlJCQoCFDhqhmzZqKj4/X6NGj1aFDB8XExKTbUzJq1ChNmjRJlStX1qhRo9StWzf9/PPP8vDI3n9PYmKiJk2apHnz5snNzU09e/bUsGHDNH/+/GyNe72QkBCNGzfO5T+NBm7F9u3bs/X8OXPm6MyZMzlUDfKyuLg4xcfHa926dZKkX375RVFRUSpdurTWrVunevXqadGiRc75161bpzlz5iglJUXr1q3Tp59+qsDAQOfzpf+7tc/TTz+tZ555RsWLF9cnn3yiFi1aKCIiQh4eHtq3b58SEhL08ssv68knn1TRokW1d+9ePf3004qNjdXw4cNVsmRJbdq0SQ8++KA++ugj3Xnnnfrll18kSZ988onmzp0rLy8vPf300+ratas2b94s6c/DQFu3bq1x48apQIECmjt3rtq2bauDBw8qICDAWeekSZM0evRo517dI0eOqFWrVvr3v/+tTz75RH/88YcGDRqkQYMGafbs2frhhx80ePBgzZs3T2FhYTp79qw2btyYI/8Pc+bM0ZAhQ7Rt2zZt3bpVffr0UaNGjdSiRYubPmfdunUqWrSo8wMCSRo5cqT69u2rAQMG6LffftOTTz6p7du3q3bt2mrcuLFOnDihDz74QFFRUYqMjFTfvn31xRdfaMqUKVq4cKGqV6+ukydPateuXRmO+fXXX0uSmjdvrvr16990zGtee+01TZgwQRMnTtS7776rHj166Pjx4ypRokS23q/o6GglJyerefPmzmlVq1ZVQECAtm7d6vwQxMvLS7Vq1dLGjRv1wAMPZGuZAFyEySOio6ONJPPwww8bd3d3U7hwYVOgQAEjybi5uZnPP//8huds3brVFCxY0Hz22WfOaY888ojp169fuvnWr19vJJm1a9c6p7311ltGkjly5Ihz2sCBA03Lli1vWuMff/xhJJmffvrJGGPML7/8YiSZjz/+2DnP3r17jSSzf//+zL8J15k9e7aRZH7++WfntOnTp5syZcpkeqwKFSqYKVOmZPjYrl27jCSzfPlyI8lER0dntWTgtjdp0iTj7u5uJPHFF18ZfEVERDj7Zf/+/UaS2bZt2017qnr16ubdd991/lyhQgXTvn37dPP079/fPPHEE+mmbdy40bi5uZnLly+bL774whQtWtRcvHgxhzr9T/fff79p3Lhxumn169c3I0aMuOlzevfu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wDKETgAAAACAZQidAAAAAADLEDoBAAAAAJYhdAIAAAAALEPoBAAAAABYhtAJAAAAALAMoRMAAAAAYBlCJwAAAADAMoROAAAAAIBlCJ0AACDfiomJUVRUlCTpo48+UkxMjK31AEBeROgEAAD5SmpqqiIjIxUSEqLatWtrzpw5kqSnn35atWvXVkhIiCIjI5WammpzpQCQNxA6M3Dw4EH5+/vr0qVLdpdy20pKSlJgYKB++OEHu0sBAOCWXb58WR07dtRjjz2m6OjoDOeJjo7WY489pk6dOuny5cu5XCEgnTlzRqVLl9axY8fsLgUuLjAwUFOnTs2RsU6fPq3SpUvrt99+y/Rz81zorFu3rhwOhzw9PXXXXXfpxRdf1JUrVzI1xksvvaRnn31WRYoUsajK299bb72l+vXrq0iRIipdurTat2+vgwcPOh/38vLSsGHDNGLECBurBOzVp08ftW/f/obpUVFRcjgcOn/+fK7XBODmUlNT1a1bNy1btkySlJaWluF816YvXbpU3bt3Z48nMqVPnz5yOBzZ2h4dN26cHnnkEQUGBlpXKDIlPj5ekydPVuPGjeXv76877rhDzZo108yZM5WSkpKtMfv16ydJatWqVbbHzI4PP/xQTZo0UdGiRTPcjvHz81OvXr00ZsyYTI+d50JnWFiY4uLidPToUU2ZMkUzZ87M1BsTGxur5cuXq0+fPtYV6QI2bNigZ555Rt9//73WrFmj5ORkPfjgg0pISHDO06NHD23atEl79+61sVIAAG7NggUL9NVXX900bP5VWlqalixZogULFlhcGfKaVq1aZXl7NDExUbNmzVL//v2zVUNqauot/65bISkpybZl54Tr64+Ojla1atW0ZMkSDRgwQEuXLtXy5cvVu3dvRUREqH79+vr9998zNf71Y3bo0EGSNHXq1GyNmV2JiYlq1aqVXn755ZvO07dvX82fP19nz57N1Nh5LnR6enrK399f5cuXV/v27dW8eXOtWbNGkjR37lz5+Pjo8OHDzvmffvppVa1aVYmJiZKkRYsWKTg4WHfccYdznoiICPn6+mr58uWqUqWKvL291alTJyUmJmrOnDkKDAxU8eLFNXjw4HSfhs6bN0/16tVTkSJF5O/vr+7du6f75bm2N2TdunWqV6+evL29FRYWlm6PYlaNHTtWtWrV0rx58xQYGKhixYqpa9eut3zI8DfffKM+ffqoevXqCg4OVkREhGJjY9MdilS8eHE1atRICxcuzHa9AABYbdq0aXJzy9ymj5ubm6ZNm2ZRRcirChQocNPt0bFjxzr3hF7/FRERIUlauXKlChQooIYNGzrHu7bNuGLFCtWsWVMFCxZUw4YNtWfPHuc817ZXly5dqmrVqqlAgQKKjY3V1atXNWzYMN1xxx0qXLiwGjRo4Lx41rXn3X///ZKk9u3bq2DBgmrZsqV+/fVX5zxHjhzRI488ojJlysjHx0f169fX2rVr073mwMBAvfHGG+rVq5eKFi2qJ554QpK0adMmhYeHq1ChQipfvrwGDx6cbifG+++/r8qVK6tgwYIqU6aMOnXqlO33v0mTJho8eLBefPFFlShRQv7+/ho7duzfPufa0Uvjxo1TuXLlVKVKFUnS8ePH1bp1a7366qvauHGjevfu7TwfvHfv3tqyZYvatm2rhx56SMnJyZIkY4zGjh2rgIAAFShQQOXKldPgwYOdy/rrmG3btpUkVa1a9aZjSpLD4dDHH3+sDh06yNvbW5UrV9bSpUuz/X5d8/zzz2vkyJHpfvf+qnr16ipXrpy+/PLLTI3tkd3ibmd79uzRli1bVKFCBUlSr169tHz5cvXo0UNbtmzRqlWr9PHHH2vr1q3y9vaWJG3cuFH16tW7YazExERNmzZNCxcu1KVLl/Too4+qQ4cO8vX11cqVK3X06FF17NhRjRo1UpcuXSRJycnJeuONN1SlShX9/vvvGjJkiPr06aOVK1emG3vUqFGaPHmySpUqpSeffFL9+vXT5s2bs/36jxw5oiVLlmj58uU6d+6cOnfurPHjx2vcuHGZHuvChQuSpBIlSqSbHhISoo0bNzo/oQEA4HYUExOjHTt2ZPp5aWlp2rFjhxYtWqSqVataUBnymnPnzunSpUvavXu3JOnw4cP67rvvVLZsWe3evVutWrXSfffd55x/xYoVev/991WkSBHt3r1bX375pe655x7n86U/t+kkOYOUn5+fpk2bppYtW2rp0qXy9PTUr7/+qoSEBI0ZM0YjR46Ur6+vTp06paFDh+ro0aMaN26cSpUqpW+//VYtW7bU559/rgoVKujXX391Hvr7+uuvq0aNGnr66afVtWtX5/ZofHy8WrdurXHjxqlAgQKaO3eu2rZtq4MHDyogIMBZ56RJkzR69GjnXt0jR46oVatW+ve//61PPvlEf/zxhwYNGqRBgwZp9uzZ+uGHHzR48GDNmzdPYWFhOnv2rDZu3Jgj/w9z5szRkCFDtG3bNm3dulV9+vRRo0aN1KJFi5s+Z926dSpatKjzAwJJGjlypPr27asBAwbot99+05NPPqnt27erdu3aaty4sU6cOKEPPvhAUVFRioyMVN++ffXFF19oypQpWrhwoapXr66TJ09q165dNx3zueeekyQ988wzat26dYZjXvPaa69pwoQJmjhxot5991316NFDx48fv2Eb3UrXtv8ztTfe5BHR0dFGknF3dzeFCxc2BQoUMJKMm5ub+fzzz53znT171tx5553mqaeeMmXKlDHjxo1LN05wcLB5/fXX002bPXu2kWR+/vln57SBAwcab29vc+nSJee0li1bmoEDB960xh07dhhJzuesX7/eSDJr1651zrNixQojyVy+fDlrb8T/N2bMGOPt7W0uXrzonDZ8+HDToEGDTI+Vmppq2rRpYxo1anTDY//5z39MYGCg8/2Pjo7OVt3Iv1zxd6h3797OvznXfxUsWNBIMufOnbO7xFvmiu8/kBkzZ840kvjii6+/+bq2Dti/f7+RZLZt23bTnqpevbp59913nT9XqFDBtG/fPt08/fv3N0888US6aRs3bjRubm7m8uXL5osvvjBFixZNt72aE+6//37TuHHjdNPq169vRowYcdPn9O7d25QpU8ZcvXrVOe3SpUumSJEi5vTp08YYY5o1a2batWtnoqOjTWRkpPHx8TG9e/c2xhjz8ccfmy5duhhjjJk8ebK55557TFJS0g3LyWjM+++/30gyb7zxxk3HNMYYSeaVV15x/hwfH28kma+//vqmr6tChQpmypQpN308I9cyys22Y1544QXTpEmTTI2Z5/Z01qtXT5GRkUpISNCUKVPk4eGhjh07Oh8vXry4Zs2apZYtWyosLEwjR45M9/zLly+rYMGCN4zr7e2tu+++2/lzmTJlFBgYKB8fn3TTrj98Njo6WmPHjtWuXbt07tw553H1sbGxqlatmnO+mjVrOr8vW7asJOn3339P98lRVgQGBqa7GFLZsmWzdGz4M888oz179mjTpk03PFaoUCHnoclAftS0aVPNmDEj3bRt27apZ8+eNlUEICOXLl2Su7t7li4K5ObmpkGDBtHXuCWvvfaa/vjjD40YMUKX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atVS/fr1s3T12vr163M+JwDgtnD9tvilS5f06quvSpIaNWqk+fPn67PPPtPnn3/unL9ly5baunXr395z+vLlyxo0aJCioqJ0/Phxbd68WTt27HBuj1euXFlr1qzRli1btH//fg0cONC5R++aZs2aad68edq4caN++ukn9e7dO90pcffff7/uu+8+dezYUWvWrNEvv/yir7/+Wt98840kacSIEdqyZYsGDRqkmJgYHT58WF999dUNIfp28uCDD+quu+6SJB06dEirVq3SK6+8omeeeUYFChRwzrdx40ZVrFgx3WlwrsSW0Onh4aFBgwZpwoQJWrlypeLj4xUWFqayZcs6v64dwlajRg3VqVNHixYt+tsxr+3a7tSpk1q1aqV77rlH77//fobzTpkyRZ07d1azZs1u+klJZrVs2VKvvvqqXnzxRdWvX1+XLl1Sr169cmTszKpUqZL+9a9/qVu3bkpMTNSrr76qixcv6n//+5+WLl2qlStX6vz5885bpGTGhQsXdPDgwRyvuVixYs5LRtetW1dDhw7V6NGj9cQTT6Sbb+HChRowYECOLx+4VYMHD87S1WszOtQHAAA7XL8tPnjw4HQf5teoUUNvvvmmBg4cqBMnTkiSHnroIXl4eDjv4JARd3d3nTlzRr169dI999yjzp0766GHHtJrr70mSXrllVdUp04dtWzZUk2aNJG/v/8Ntxt86aWXdP/99+vhhx9WmzZt1L59+xtC1hdffKH69eurW7duqlatml588UVnGK5Zs6Y2bNigQ4cOKTw8XLVr19bo0aNv6aKkdnF3d9d//vMfSX9eqKhnz57q1avXDaccLliwwLW3gY0LWL58uQkKCjKpqak3nSc6OtpIMtHR0blYWfatX7/eWPHfcPXqVdOuXTsTFBRkFixYYM6fP2+MMebcuXNm1qxZpnr16ubXX3/NseXlxvu/cuVKExQUZJKTky1bBvBPUlJSTPv27Y2bm5uR9I9fbm5upkOHDiYlJcXu0gHcxOzZs40k1i/It25lO+69994zDz74YC5WZR2rtr+z6p/e/z179pjSpUs7t+ddkS17OjOrTZs2euKJJ5yftuQlYWFhN5wLmhO8vLy0ZMkSvfjii3r77bfl6+urAgUKqFSpUoqMjNS0adN055135vhyrZSQkKDZs2fLwyNXrn8FZMjd3V2ffvqp2rVrJ0k3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bdrU8PDwMEqUKGHUrVvX+OabbwzDMIzz588bzz//vFG+fHnDzc3NqF69uvHpp59mef6jjz5qTJ8+PcuyWrVqGWPHjs18fOnSJeOll14yypYtaxQrVsx48sknjbVr12au37lzp/HUU08Zrq6uRoUKFYzBgwcbKSkphmEYRpMmTQxJd/189NFHD9w3Sca8efOMDh06GG5ubkblypWN1atXP/B52bFv374sr//AgQONZs2aZdlmx44dhouLi3H9+vU86TO/cabzPsqVK6cdO3YoPDxcEREReuedd0y5Cf2tW7e0b98+hYWFZS5zcHBQWFiY9u7dm6d9zZkzR23atFFoaKj27NmjgICAPG0fKEieeeYZ7d69W5cuXVJQUJC++eabPO8jP8fvtWvX1L59e82cOVP/+Mc/NGvWLDk5OeVpHwCAou/w4cPas2ePXFxcJEk9e/ZUw4YNJUnp6elav3695s+fr8WLF2fO9bFz507Vr1//gW2/8MILqlChgr755hvt27dPI0eOlLOzsyTp119/Vb169bR+/XodPnxYL730kv76178+1FdSbt++rTZt2mj37t1atGiRjhw5okmTJsnR0VGSdOLECbVu3VoRERE6dOiQli1bpl27dmnQoEGSpJUrVyo5OVmff/65JCk5OVnJycnq2rVrtvofP368unTpokOHDqlt27Z64YUXdPHixWzXn11XrlyRl5dXlmX169dXenq64uPj87y/fGF16i3oMjIyjDfeeMOQZPTs2dP49ddf87T9n3/+2ZBk7NmzJ8vy4cOHG0FBQXnSR1pamjF48GBDkvG3v/2NT3JhV86ePWs0aNDAcHV1NZYvX56nbefH+DUMwzh9+rRRo0YNo2TJksbGjRvzrF0Av+FMJ4qyXr16GY6Ojkbx4sWNYsWKGZIMBwcH47PPPsvcZvv27YYko1OnTsYjjzxiTJgwIUsbtWrVMt58880H9lWiRAkjJiYm27U988wzxrBhwzIfP+hM5+bNmw0HBwfjhx9+uGd7ffr0MV566aUsy3bu3Gk4ODgYN27cyFx2Z38fhiRjzJgxmY9TUlIMSXlyXP79mc7du3cbTk5OxubNm+/arnTp0g/1+hYknOl8AAcHB40fP16LFi3SsmXLFBYWpvPnz1tdVrZduXJF4eHh+uc//6l//vOfmjlzJmdHYFceeeQRbd++Xc8995y6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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import AtomicType, IQPAnsatz\n", - "\n", - "ansatz = IQPAnsatz({AtomicType.NOUN: 1, AtomicType.SENTENCE: 1},\n", - " n_layers=1, n_single_qubit_params=3)\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits[0].draw(figsize=(9, 9))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Parameterise" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import NumpyModel\n", - "\n", - "all_circuits = train_circuits + dev_circuits + test_circuits\n", - "\n", - "model = NumpyModel.from_diagrams(all_circuits, use_jit=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define evaluation metric" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BinaryCrossEntropyLoss\n", - "\n", - "# Using the builtin binary cross-entropy error from lambeq\n", - "bce = BinaryCrossEntropyLoss(use_jax=True)\n", - "\n", - "acc = lambda y_hat, y: np.sum(np.round(y_hat) == y) / len(y) / 2 # half due to double-counting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import QuantumTrainer, SPSAOptimizer\n", - "\n", - "trainer = QuantumTrainer(\n", - " model,\n", - " loss_function=bce,\n", - " epochs=EPOCHS,\n", - " optimizer=SPSAOptimizer,\n", - " optim_hyperparams={'a': 0.2, 'c': 0.06, 'A':0.01*EPOCHS},\n", - " evaluate_functions={'acc': acc},\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " seed=0\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "val_dataset = Dataset(dev_circuits, dev_labels, shuffle=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 12: train/loss: 0.6881 valid/loss: 0.6194 train/time: 7.73s valid/time: 3.04s train/acc: 0.6429 valid/acc: 0.7000\n", - "Epoch 24: train/loss: 0.5321 valid/loss: 0.5429 train/time: 0.23s valid/time: 0.05s train/acc: 0.7143 valid/acc: 0.7333\n", - "Epoch 36: train/loss: 0.4615 valid/loss: 0.4834 train/time: 0.23s valid/time: 0.05s train/acc: 0.7714 valid/acc: 0.8000\n", - "Epoch 48: train/loss: 0.2858 valid/loss: 0.4100 train/time: 0.24s valid/time: 0.05s train/acc: 0.8429 valid/acc: 0.7667\n", - "Epoch 60: train/loss: 0.1604 valid/loss: 0.3585 train/time: 0.23s valid/time: 0.05s train/acc: 0.9143 valid/acc: 0.8333\n", - "Epoch 72: train/loss: 0.2836 valid/loss: 0.3231 train/time: 0.23s valid/time: 0.05s train/acc: 0.9429 valid/acc: 0.8333\n", - "Epoch 84: train/loss: 0.3280 valid/loss: 0.3091 train/time: 0.23s valid/time: 0.05s train/acc: 0.9143 valid/acc: 0.8333\n", - "Epoch 96: train/loss: 0.2500 valid/loss: 0.2911 train/time: 0.23s valid/time: 0.05s train/acc: 0.9429 valid/acc: 0.8333\n", - "Epoch 108: train/loss: 0.1780 valid/loss: 0.3062 train/time: 0.24s valid/time: 0.05s train/acc: 0.9286 valid/acc: 0.8333\n", - "Epoch 120: train/loss: 0.0662 valid/loss: 0.2910 train/time: 0.25s valid/time: 0.05s train/acc: 0.9429 valid/acc: 0.8333\n", - "\n", - "Training completed!\n", - "train/time: 9.83s train/time_per_epoch: 0.08s train/time_per_step: 0.03s valid/time: 3.49s valid/time_per_eval: 0.03s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, val_dataset, log_interval=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show results" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test accuracy: 0.96666664\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADL0ElEQVR4nOzdd3xUVfrH8c/MpEx6rxBaQHqTJmBBAREVu6KuoujaVtx12V1/4irYcV112VVc7FjWFXetawGpNhCQooD0lkB6Qnqfub8/LjPJkARIT8j3/XrNKzP3nnvn3EFz88xzznMshmEYiIiIiIiISKNYW7sDIiIiIiIipwIFVyIiIiIiIk1AwZWIiIiIiEgTUHAlIiIiIiLSBBRciYiIiIiINAEFVyIiIiIiIk1AwZWIiIiIiEgTUHAlIiIiIiLSBBRciYiIiIiINAEFVyKt6Oabb6Zbt24NOvbhhx/GYrE0bYdERKRDOXDgABaLhYULF7Z2V0ROCQquRGphsVhO6rFq1arW7mq79+677zJv3rzW7oaISJNZuHChx73CbrcTHx/PpEmT+Mc//kFBQUFrd1GAJ598ko8//rjF3zclJYWHH36YzZs3t/h7S/OzGIZhtHYnRNqad955x+P1W2+9xdKlS3n77bc9tk+cOJGYmJgGv09FRQVOpxNfX996H1tZWUllZSV2u73B798WXHzxxWzdupUDBw60dldERJrEwoULmT59Oo8++ijdu3enoqKCtLQ0Vq1axdKlS+nSpQuffvopgwYNau2ucuDAAbp3784bb7zBzTff3NrdaVGBgYFcddVVLZ61+/HHHxkxYkSH/Mw7Aq/W7oBIW3TDDTd4vP7hhx9YunRpje3HKi4uxt/f/6Tfx9vbu0H9A/Dy8sLLS/8Li4i0VZMnT2b48OHu17NmzWLFihVcfPHFXHLJJWzfvh0/P79W7KGINDUNCxRpoHHjxjFgwAA2bNjA2Wefjb+/Pw888AAAn3zyCRdddBHx8fH4+vqSmJjIY489hsPh8DjHsXOuXGPfn3nmGV5++WUSExPx9fVlxIgRrF+/3uPY2uZcWSwWZsyYwccff8yAAQPw9fWlf//+LF68uEb/V61axfDhw7Hb7SQmJvLSSy+d9Dyu3bt3c+WVVxIbG4vdbqdz585ce+215OXlebR75513GDZsGH5+foSHh3PttdeSnJzs8Rl+/vnnHDx40D18pqFz0ERE2oPzzjuPhx56iIMHD9YYJbFjxw6uuuoqwsPDsdvtDB8+nE8//dS9/8cff8RisfDmm2/WOO+SJUuwWCx89tln7m2HDx/mlltuISYmxn0/eP3110+qnytWrOCss84iICCA0NBQLr30UrZv3+7RxnXP2LFjB9dccw3BwcFERETwu9/9jtLSUo+2rvvTf/7zH/r164efnx+jR49my5YtALz00kv07NkTu93OuHHjah3NsHbtWi644AJCQkLw9/fnnHPO4fvvv6+1T3v27OHmm28mNDSUkJAQpk+fTnFxsUd/ioqKePPNN933nxNlkZ5//nn69++Pv78/YWFhDB8+nHfffdejzYk+81WrVjFixAgApk+f7n5vzXk7dehrb5FGyM7OZvLkyVx77bXccMMN7iGCCxcuJDAwkJkzZxIYGMiKFSuYPXs2+fn5/PWvfz3hed99910KCgq44447sFgsPP3001xxxRXs27fvhNmu7777jg8//JDf/OY3BAUF8Y9//IMrr7ySpKQkIiIiANi0aRMXXHABcXFxPPLIIzgcDh599FGioqJO2Lfy8nImTZpEWVkZ99xzD7GxsRw+fJjPPvuM3NxcQkJCAHjiiSd46KGHuOaaa/j1r39NZmYmzz//PGeffTabNm0iNDSUP//5z+Tl5XHo0CH+9re/AeYwDRGRU9mNN97IAw88wFdffcVtt90GwLZt2xg7diydOnXi/vvvJyAggPfff5/LLruMDz74gMsvv5zhw4fTo0cP3n//fW666SaPcy5atIiwsDAmTZoEQHp6OmeccYY7qImKiuLLL7/k1ltvJT8/n3vvvbfO/i1btozJkyfTo0cPHn74YUpKSnj++ecZO3YsGzdurPEl2DXXXEO3bt2YO3cuP/zwA//4xz84cuQIb731lke7b7/9lk8//ZS7774bgLlz53LxxRdz33338eKLL/Kb3/yGI0eO8PTTT3PLLbewYsUK97ErVqxg8uTJDBs2jDlz5mC1WnnjjTc477zz+Pbbbxk5cmSNPnXv3p25c+eyceNGXn31VaKjo/nLX/4CwNtvv82vf/1rRo4cye233w5AYmJinZ/JK6+8wm9/+1uuuuoqd/D4888/s3btWq6//vqT/sz79u3Lo48+yuzZs7n99ts566yzABgzZkyd7y3tjCEiJ3T33Xcbx/7vcs455xiAsWDBghrti4uLa2y74447DH9/f6O0tNS97aabbjK6du3qfr1//34DMCIiIoycnBz39k8++cQAjP/973/ubXPmzKnRJ8Dw8fEx9uzZ4972008/GYDx/PPPu7dNmTLF8Pf3Nw4fPuzetnv3bsPLy6vGOY+1adMmAzD+85//1NnmwIEDhs1mM5544gmP7Vu2bDG8vLw8tl900UUen4GISHv3xhtvGICxfv36OtuEhIQYQ4cOdb8eP368MXDgQI97hNPpNMaMGWP06tXLvW3WrFmGt7e3xz2irKzMCA0NNW655Rb3tltvvdWIi4szsrKyPN732muvNUJCQtz3Kdd954033nC3GTJkiBEdHW1kZ2e7t/3000+G1Wo1pk2b5t7mug9dcsklHu/xm9/8xgCMn376yb0NMHx9fY39+/e7t7300ksGYMTGxhr5+fke1wi42zqdTqNXr17GpEmTDKfT6W5XXFxsdO/e3Zg4cWKNPlX/LAzDMC6//HIjIiLCY1tAQIBx0003GSfj0ksvNfr373/cNif7ma9fv77GZy6nDg0LFGkEX19fpk+fXmN79TH0BQUFZGVlcdZZZ1FcXMyOHTtOeN6pU6cSFhbmfu36Zmvfvn0nPHbChAke374NGjSI4OBg97EOh4Nly5Zx2WWXER8f727Xs2dPJk+efMLzuzJTS5Ys8RhiUd2HH36I0+nkmmuuISsry/2IjY2lV69erFy58oTvIyJyKgsMDHRXDczJyWHFihVcc8017ntGVlYW2dnZTJo0id27d3P48GHAvD9UVFTw4Ycfus/11VdfkZuby9SpUwEwDIMPPviAKVOmYBiGx+/hSZMmkZeXx8aNG2vtV2pqKps3b+bmm28mPDzcvX3QoEFMnDiRL774osYxrkyUyz333ANQo+348eM9sl6jRo0C4MorryQoKKjGdtd9a/PmzezevZvrr7+e7Oxs97UUFRUxfvx4vvnmG5xOp8d73XnnnR6vzzrrLLKzs8nPz6/1uk8kNDSUQ4cO1Rii79KYz1xOLRoWKNIInTp1wsfHp8b2bdu28eCDD7JixYoav8iPnZdUmy5duni8dgVaR44cqfexruNdx2ZkZFBSUkLPnj1rtKtt27G6d+/OzJkzee655/jXv/7FWWedxSWXXMINN9zgDrx2796NYRj06tWr1nM0ppCHiMipoLCwkOjoaAD27NmDYRg89NBDPPTQQ7W2z8jIoFOnTgwePJg+ffqwaNEibr31VsAcEhgZGcl5550HQGZmJrm5ubz88su8/PLLdZ6vNgcPHgSgd+/eNfb17duXJUuWUFRUREBAgHv7sb/rExMTsVqtNeZNHXt/ct0zEhISat3uum/t3r0boMZQyOry8vI8vpQ83n00ODi4zvPU5f/+7/9YtmwZI0eOpGfPnpx//vlcf/31jB07FmjcZy6nFgVXIo1QW5Wn3NxczjnnHIKDg3n00UdJTEzEbrezceNG/u///q/Gt2u1sdlstW43TmLlhMYce7KeffZZbr75Zj755BO++uorfvvb37rH2nfu3Bmn04nFYuHLL7+stT+aVyUiHdmhQ4fIy8tzf6Hlui/88Y9/dM+ZOlb1L7+mTp3KE088QVZWFkFBQXz66adcd9117gqyrvPdcMMNdQYkzVkGvq7CSHXdn05033Jdz1//+leGDBlSa9tj7ytNfS/s27cvO3fu5LPPPmPx4sV88MEHvPjii8yePZtHHnmk1T9zaTsUXIk0sVWrVpGdnc2HH37I2Wef7d6+f//+VuxVlejoaOx2O3v27Kmxr7ZtdRk4cCADBw7kwQcfZPXq1YwdO5YFCxbw+OOPk5iYiGEYdO/endNOO+245zmZ6oQiIqcS15qJrkCqR48egJnVnzBhwgmPnzp1Ko888ggffPABMTEx5Ofnc+2117r3R0VFERQUhMPhOKnzVde1a1cAdu7cWWPfjh07iIyM9MhagZlZ6t69u/v1nj17cDqdTVb91TXUPTg4uN7Xczz1vf8EBAQwdepUpk6dSnl5OVdccQVPPPEEs2bNqtdnrvveqU1zrkSamOvbsurfjpWXl/Piiy+2Vpc82Gw2JkyYwMcff0xKSop7+549e/jyyy9PeHx+fj6VlZUe2wYOHIjVaqWsrAyAK664ApvNxiOPPFLjW0LDMMjOzna/DggIOKmhkiIip4IVK1bw2GOP0b17d371q18B5pde48aN46WXXiI1NbXGMZmZmR6v+/bty8CBA1m0aBGLFi0iLi7O48s8m83GlVdeyQcffMDWrVtPeL7q4uLiGDJkCG+++Sa5ubnu7Vu3buWrr77iwgsvrHHM/PnzPV4///zzACc1j/dkDBs2jMTERJ555hkKCwtr7D/e9RxPQECAxzUeT/X7FoCPjw/9+vXDMAwqKirq9Zm7gtOTfW9pX5S5EmliY8aMISwsjJtuuonf/va3WCwW3n777SYdltdYDz/8MF999RVjx47lrrvuwuFw8MILLzBgwAA2b9583GNXrFjBjBkzuPrqqznttNOorKzk7bffdt9YwPyW8fHHH2fWrFkcOHCAyy67jKCgIPbv389HH33E7bffzh//+EfAvGkuWrSImTNnMmLECAIDA5kyZUpzfwQiIs3uyy+/ZMeOHVRWVpKens6KFStYunQpXbt25dNPP8Vut7vbzp8/nzPPPJOBAwdy22230aNHD9LT01mzZg2HDh3ip59+8jj31KlTmT17Nna7nVtvvRWr1fP78qeeeoqVK1cyatQobrvtNvr160dOTg4bN25k2bJl5OTk1Nnvv/71r0yePJnRo0dz6623ukuxh4SE8PDDD9dov3//fi655BIuuOAC1qxZwzvvvMP111/P4MGDG/cBHmW1Wnn11VeZPHky/fv3Z/r06XTq1InDhw+zcuVKgoOD+d///lfv8w4bNoxly5bx3HPPER8fT/fu3d3FNI51/vnnExsby9ixY4mJiWH79u288MILXHTRRe5iHCf7mScmJhIaGsqCBQsICgoiICCAUaNGeWT/pB1r+QKFIu1PXaXY6yrL+v333xtnnHGG4efnZ8THxxv33XefsWTJEgMwVq5c6W5XVyn2v/71rzXOCRhz5sxxv66rFPvdd99d49iuXbvWKDe7fPlyY+jQoYaPj4+RmJhovPrqq8Yf/vAHw2631/EpmPbt22fccsstRmJiomG3243w8HDj3HPPNZYtW1aj7QcffGCceeaZRkBAgBEQEGD06dPHuPvuu42dO3e62xQWFhrXX3+9ERoaagAqyy4i7Z6rFLvr4ePjY8TGxhoTJ040/v73v3uUHa9u7969xrRp04zY2FjD29vb6NSpk3HxxRcb//3vf2u03b17t/v83333Xa3nS09PN+6++24jISHB8Pb2NmJjY43x48cbL7/8srtNbaXYDcMwli1bZowdO9bw8/MzgoODjSlTphi//PKLRxvXfeiXX34xrrrqKiMoKMgICwszZsyYYZSUlHi0re3+VNc9b+XKlbUu+bFp0ybjiiuuMCIiIgxfX1+ja9euxjXXXGMsX768Rp8yMzM9jnX9m1QvBb9jxw7j7LPPNvz8/AzguGXZX3rpJePss892v3diYqLxpz/9ycjLy/NodzKfuWGYS6z069fPvQSKyrKfOiyG0Ya+TheRVnXZZZexbds2d2UmERGRujz88MM88sgjZGZmEhkZ2drdEWkTNOdKpIMqKSnxeL17926++OILxo0b1zodEhEREWnnNOdKpIPq0aMHN998Mz169ODgwYP885//xMfHh/vuu6+1uyYiIiLSLim4EumgLrjgAv7973+TlpaGr68vo0eP5sknn6xz4V8REREROT7NuRIREREREWkCmnMlIiIiIiLSBBRciYiIiIiINAHNuaqF0+kkJSWFoKAgLBZLa3dHRKTDMAyDgoIC4uPjayyK2tHp3iQi0jrqc29ScFWLlJQUEhISWrsbIiIdVnJyMp07d27tbrQpujeJiLSuk7k3KbiqRVBQEGB+gMHBwa3cGxGRjiM/P5+EhAT372GponuTiEjrqM+9ScFVLVzDLYKDg3UDExFpBRr2VpPuTSIiretk7k0a0C4iIiIiItIEFFyJiIiIiIg0AQVXIiIiIiIiTUDBlYiIiIiISBNQcCUiIiIiItIEFFyJiIh0cA6ng9nfz+aDXR+0dldERNo1BVciIiId3I6cHXy05yNe+vml1u6KiEi7puBKRESkgyusKASgzFHWyj0REWnfWjW4+uabb5gyZQrx8fFYLBY+/vjj47ZftWoVFoulxiMtLc2j3fz58+nWrRt2u51Ro0axbt26ZrwKERGR9q2ksgSAckd5K/dERKR9a9XgqqioiMGDBzN//vx6Hbdz505SU1Pdj+joaPe+RYsWMXPmTObMmcPGjRsZPHgwkyZNIiMjo6m7LyIickpwBVcVzopW7omISPvm1ZpvPnnyZCZPnlzv46KjowkNDa1133PPPcdtt93G9OnTAViwYAGff/45r7/+Ovfff39juisiInJKqp65MgwDi8XSyj0SEWmf2uWcqyFDhhAXF8fEiRP5/vvv3dvLy8vZsGEDEyZMcG+zWq1MmDCBNWvW1Hm+srIy8vPzPR4iIiKtqSXvTa7gysCg0qhstvcRETnVtavgKi4ujgULFvDBBx/wwQcfkJCQwLhx49i4cSMAWVlZOBwOYmJiPI6LiYmpMS+rurlz5xISEuJ+JCQkNOt1iIiInEhT3psO5h/kxc0v8t6O92rd7wquACocGhooItJQ7Sq46t27N3fccQfDhg1jzJgxvP7664wZM4a//e1vjTrvrFmzyMvLcz+Sk5ObqMciIiIN05T3pkMFh/jnT//kg921r2NVXFHsfq55VyIiDdeqc66awsiRI/nuu+8AiIyMxGazkZ6e7tEmPT2d2NjYOs/h6+uLr69vs/ZTRESkPpry3uRrM89TWlla636PzJWCKxGRBmtXmavabN68mbi4OAB8fHwYNmwYy5cvd+93Op0sX76c0aNHt1YXRUREWpWflx8ApY4TB1cqxy4i0nCtmrkqLCxkz5497tf79+9n8+bNhIeH06VLF2bNmsXhw4d56623AJg3bx7du3enf//+lJaW8uqrr7JixQq++uor9zlmzpzJTTfdxPDhwxk5ciTz5s2jqKjIXT1QRESko3Flrsoqa18kWMGViEjTaNXg6scff+Tcc891v545cyYAN910EwsXLiQ1NZWkpCT3/vLycv7whz9w+PBh/P39GTRoEMuWLfM4x9SpU8nMzGT27NmkpaUxZMgQFi9eXKPIhYiISEdh97IDJ5e50rBAEZGGa9Xgaty4cRiGUef+hQsXery+7777uO+++0543hkzZjBjxozGdk9EROSU4A6uKktrXcfKI3PlVOZKRKSh2v2cKxERETk+u80MrgyMWoMnlWIXEWkaCq5EREROcb5eVVUHa6sYqGGBIiJNQ8GViIjIKc7b6o2XxZwJcKLgSgUtREQaTsGViIhIB3C8ohbKXImINA0FVyIiIh3A8RYSVuZKRKRpKLgSERHpAOrKXBmGocyViEgTUXAlIiLSAbgqBh67kHC5sxyn4ax6rcyViEiDKbgSERHpAOrKXJVUlHi8VuZKRKThFFyJiIh0AHXNuao+JBAUXImINIaCKxERkQ7Az8sPqCVzdUxwpWGBIiINp+BKRESkA1DmSkSk+Sm4EhER6QDcc66OCa6KK4s9XitzJSLScAquREREOoCTHhboVHAlItJQCq5EREQ6gJMeFujQsEARkYZScCUiItIB1FmKXXOuRESajIIrERGRDqCuRYRVLVBEpOkouBIREekAlLkSEWl+Cq5EREQ6gJOdc6XMlYhIwym4EhER6QDqrBZYYQZXQd5BgDJXIiKNoeBKRESkA3BlruqacxXsGwyoFLuISGMouBIREekAXHOuShyewwDdwZWPGVypFLuISMMpuBIREekA3AUt6phzFeIbAmhYoIhIYyi4EhER6QDcpdgddQwLPJq5UkELEZGGa9Xg6ptvvmHKlCnEx8djsVj4+OOPj9v+ww8/ZOLEiURFRREcHMzo0aNZsmSJR5uHH34Yi8Xi8ejTp08zXoWIiEjb5x4WWFn7sEBlrkREGq9Vg6uioiIGDx7M/PnzT6r9N998w8SJE/niiy/YsGED5557LlOmTGHTpk0e7fr3709qaqr78d133zVH90VERNoNZa5ERJqfV2u++eTJk5k8efJJt583b57H6yeffJJPPvmE//3vfwwdOtS93cvLi9jY2KbqpoiISLunOVciIs2vVYOrxnI6nRQUFBAeHu6xfffu3cTHx2O32xk9ejRz586lS5cudZ6nrKyMsrKqb/Ly8/Obrc8iIiIno6nvTe5S7I4ynIYTq8UcvFIjuFK1QBGRBmvXBS2eeeYZCgsLueaaa9zbRo0axcKFC1m8eDH//Oc/2b9/P2eddRYFBQV1nmfu3LmEhIS4HwkJCS3RfRERkTo19b3JtYgweA4NrDEsUOtciYg0WLsNrt59910eeeQR3n//faKjo93bJ0+ezNVXX82gQYOYNGkSX3zxBbm5ubz//vt1nmvWrFnk5eW5H8nJyS1xCSIiInVq6nuTK3MFngsJa1igiEjTaZfDAt977z1+/etf85///IcJEyYct21oaCinnXYae/bsqbONr68vvr6+de4XERFpaU19b7JZbXhbvalwVlDqMOddVTor3cGUClqIiDReu8tc/fvf/2b69On8+9//5qKLLjph+8LCQvbu3UtcXFwL9E5ERKTtOrYce/Wy7NUzV4ZhtHznREROAa0aXBUWFrJ582Y2b94MwP79+9m8eTNJSUmAOSRi2rRp7vbvvvsu06ZN49lnn2XUqFGkpaWRlpZGXl6eu80f//hHvv76aw4cOMDq1au5/PLLsdlsXHfddS16bSIiIm3NseXYXcGVzWLD39vf3a7SWdnynRMROQW0anD1448/MnToUHcZ9ZkzZzJ06FBmz54NQGpqqjvQAnj55ZeprKzk7rvvJi4uzv343e9+525z6NAhrrvuOnr37s0111xDREQEP/zwA1FRUS17cSIiIm3MseXYXcGVn5cfPlYfdzsVtRARaZhWnXM1bty44w49WLhwocfrVatWnfCc7733XiN7JSIicmpyFbVwzbmqHlx5W73d7SocFeBd83gRETm+djfnSkRERBrGVY69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ZePrZcPXy0pqXgk70wrYnVFIbnEFxeUOwIHFYs4viwr0xdtmxdtmpXqNjogAn+a4dBERkTZNwZWIyCnAYrEQH+pHfKjfCdvZjlOocFzvaMbVMeeqpNxBWn4ppRUOukcGYPeuuyqiiIhIR6TgSkREToqfj43ukQGt3Q0REZE2q2MsnCIiIiIiItLMFFyJiIiIiIg0AQVXIiIiIiIiTUDBlYiIiIiISBNQcCUiIiIiItIEFFyJiIiIiIg0AZVir4VhGIC5GrOIiLQc1+9d1+9hqaJ7k4hI66jPvUnBVS0KCgoASEhIaOWeiIh0TAUFBYSEhLR2N9oU3ZtERFrXydybLIa+HqzB6XSSkpJCUFAQFovlpI7Jz88nISGB5ORkgoODm7mHLUfX1b7outqPU/GaoPHXZRgGBQUFxMfHY7Vq5Hp1ujdV0XW1L6fidZ2K1wS6rrrU596kzFUtrFYrnTt3btCxwcHBp9R/jC66rvZF19V+nIrXBI27LmWsaqd7U026rvblVLyuU/GaQNdVm5O9N+lrQRERERERkSag4EpERERERKQJKLhqIr6+vsyZMwdfX9/W7kqT0nW1L7qu9uNUvCY4da+rvTpV/z10Xe3LqXhdp+I1ga6rKaighYiIiIiISBNQ5kpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAgquREREREREmoCCKxERERERkSag4EpERERERKQJKLgSERERERFpAl6t3YG2yOl0kpKSQlBQEBaLpbW7IyLSYRiGQUFBAfHx8Vit+v6vOt2bRERaR33uTQquapGSkkJCQkJrd0NEpMNKTk6mc+fOrd2NNkX3JhGR1nUy9yYF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z1VdXS3u27dP3LdvnwhAXL58ubhv3z6lOpE/z/Czn/1MHDlypLhz505x+/bt4oABAzq9ZHlzz2WxWMQbb7xR7NWrl7h//363vyONjY3KNYLxucIZ+6bQwb4peP6GN8W+KXj7pmDtlxhcBcjLL78s9u7dWzSZTOK4cePEb775prOb5DcAXl+vvfaackx9fb344IMPiomJiWJUVJR48803i0VFRZ3X6DZq2oGF6nP9+9//FocNGyaazWZx8ODB4t///ne3/Q6HQ3ziiSfElJQU0Ww2i5MnTxaPHTvWSa31T1VVlThv3jyxd+/eYkREhNivXz/x8ccfd/sjGArPtXnzZq//f5o5c6Yoiv49w4ULF8Tp06eLMTExYlxcnDhr1iyxurq6E57GpbnnOnnypM+/I5s3b1auEYzPFe7YN4UG9k3Bi32TS7D9DQ/WfkkQRdUS00RERERERNQmnHNFREREREQUAAyuiIiIiIiIAoDBFRERERERUQAwuCIiIiIiIgoABldEREREREQBwOCKiIiIiIgoABhcERERERERBQCDKyIiIiIiogBgcEXURWRmZmLFihWd3QwiIiIF+yYKNwyuiDRw9913Y+rUqQCAq666CvPnz++we69duxYJCQke23fv3o377ruvw9pBRETBhX0TkfYMnd0AIvKPxWKByWRq8/k9evQIYGuIiIjYNxE1xZErIg3dfffd2Lp1K1588UUIggBBEHDq1CkAwKFDh3DttdciJiYGKSkpuOuuu1BWVqace9VVV2Hu3LmYP38+kpKSMGXKFADA8uXLkZ2djejoaGRkZODBBx9ETU0NAGDLli2YNWsWKisrlfs99dRTADxTLwoLC3HTTTchJiYGcXFxuO2221BSUqLsf+qppzBixAi8/vrryMzMRHx8PG6//XZUV1crx7z77rvIzs5GZGQkunfvjtzcXNTW1mr0T5OIiAKBfRORdhhcEWnoxRdfRE5ODmbPno2ioiIUFRUhIyMDFRUVuOaaazBy5Ejs2bMHn332GUpKSnDbbbe5nb9u3TqYTCZ89dVXWLVqFQBAp9PhpZdewuHDh7Fu3Tps2rQJv//97wEAEydOxIoVKxAXF6fc7+GHH/Zol8PhwE033YTy8nJs3boVGzduREFBAaZNm+Z23A8//IAPPvgAH3/8MT7++GNs3boVy5YtAwAUFRVh+vTpuOeee3D06FFs2bIFt9xyC0RR1OIfJRERBQj7JiLtMC2QSEPx8fEwmUyIiopCamqqsv2VV17ByJEjsWTJEmXbmjVrkJGRgePHj2PgwIEAgAEDBuC5555zu6Y6Rz4zMxPPPPMM7r//fvzlL3+ByWRCfHw8BEFwu19TeXl5OHjwIE6ePImMjAwAwD//+U8MHToUu3fvxtixYwFIHd3atWsRGxsLALjrrruQl5eHZ599FkVFRbDZbLjlllvQp08fAEB2dnY7/mkREVFHYN9EpB2OXBF1ggMHDmDz5s2IiYlRXoMHDwYg/SInGz16tMe5X3zxBSZPnoyePXsiNjYWd911Fy5cuIC6ujq/73/06FFkZGQonRcAZGVlISEhAUePHlW2ZWZmKp0XAKSlpaG0tBQAMHz4cEyePBnZ2dm49dZbsXr1aly8eNH/fwhERBRU2DcRtR+DK6JOUFNTgxtuuAH79+93e504cQJXXHGFclx0dLTbeadOncLPf/5zXHrppfjXv/6FvXv3YuXKlQCkScWBZjQa3b4LggCHwwEA0Ov12LhxI/7zn/8gKysLL7/8MgYNGoSTJ08GvB1ERKQ99k1E7cfgikhjJpMJdrvdbduoUaNw+PBhZGZmon///m6vpp2W2t69e+FwOPD8889jwoQJGDhwIM6dO9fi/ZoaMmQIzpw5gzNnzijbjhw5goqKCmRlZfn9bIIgYNKkSfjjH/+Iffv2wWQy4f333/f7fCIi6hzsm4i0weCKSGOZmZnYuXMnTp06hbKyMjgcDsyZMwfl5eWYPn06du/ejR9++AGff/45Zs2a1Wzn079/f1itVrz88ssoKCjA66+/rkwmVt+vpqYGeXl5KCsr85qSkZubi+zsbNxxxx3Iz8/Hrl27MGPGDFx55ZUYM2aMX8+1c+dOLFmyBHv27EFhYSHee+89nD9/HkOGDGndPyAiIupw7JuItMHgikhjDz/8MPR6PbKystCjRw8UFhYiPT0dX331Fex2O376058iOzsb8+fPR0JCAnQ63/+3HD58OJYvX44//elPGDZsGN58800sXbrU7ZiJEyfi/vvvx7Rp09CjRw+PSceA9Kvehx9+iMTERFxxxRXIzc1Fv379sGHDBr+fKy4uDtu2bcN1112HgQMH4g9/+AOef/55XHvttf7/wyEiok7BvolIG4LI2pRERERERETtxpErIiIiIiKiAGBwRUREREREFAAMroiIiIiIiAKAwRUREREREVEAMLgiIiIiIiIKAAZXREREREREAcDgioiIiIiIKAAYXBEREREREQUAgysiIiIiIqIAYHBFREREREQUAAyuiIiIiIiIAuD/A7OLCjZXvRQhAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "fig, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharex=True, sharey='row', figsize=(10, 6))\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Iterations')\n", - "ax_br.set_xlabel('Iterations')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs + 1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "test_acc = acc(model(test_circuits), np.array(test_labels))\n", - "print('Test accuracy:', test_acc)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/quantum-pipeline.ipynb b/docs/examples/quantum-pipeline.ipynb deleted file mode 100644 index c6a5f804..00000000 --- a/docs/examples/quantum-pipeline.ipynb +++ /dev/null @@ -1,378 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Quantum pipeline using the Quantum Trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import warnings\n", - "warnings.filterwarnings(\"ignore\")\n", - "\n", - "import os\n", - "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "BATCH_SIZE = 30\n", - "EPOCHS = 120\n", - "SEED = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Read in the data and create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = int(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('datasets/mc_train_data.txt')\n", - "dev_labels, dev_data = read_data('datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " dev_labels, dev_data = dev_labels[:2], dev_data[:2]\n", - " test_labels, test_data = test_labels[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create diagrams" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='text')\n", - "\n", - "raw_train_diagrams = parser.sentences2diagrams(train_data)\n", - "raw_dev_diagrams = parser.sentences2diagrams(dev_data)\n", - "raw_test_diagrams = parser.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Remove the cups" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import RemoveCupsRewriter\n", - "\n", - "remove_cups = RemoveCupsRewriter()\n", - "\n", - "train_diagrams = [remove_cups(diagram) for diagram in raw_train_diagrams]\n", - "dev_diagrams = [remove_cups(diagram) for diagram in raw_dev_diagrams]\n", - "test_diagrams = [remove_cups(diagram) for diagram in raw_test_diagrams]\n", - "\n", - "train_diagrams[0].draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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y5a1u6xbdvfdd2vr1q0KCQlRq1at9OGHH9pdkssidP6N1NRUvfDCC3ryySf11FNPacWKFSpWrFiOLsPPz0/u7u46depUuumnTp2Sv79/jizD29tbn332mV5++WWNGDFC/fv3V1JSUo6MDdzOYmNj1bhxY0VFRWn58uUaPHhwjuwduSY3+leSgoODtX37dt15550KDw/X4sWLc2xs4Hb2xRdf6L777lNAQIC2bdummjVr5uj4udHDDodDzz33nJYtW6b169ercePG+vXXX3NkbOB2lpSUpH79+mnkyJF65ZVX9Nlnn8nb2zvHxs+tdXCxYsW0YsUKDRw4UAMHDtSQIUM4aiELCJ03cfHiRT3yyCN699139d577+ndd9+Vh4dHji/Hy8tLdevWTbfLPi0tTevWrVNoaGiOLcfNzU3//ve/NXfuXM2fP18tWrTQ6dOnc2x84Hazbds2hYSE6Pz589qyZYseeuihHF9GbvWvJPn7+ysqKkrt2rVTx44d9dZbb3HUAvIsY4zefPNNderUSY888ojWr1+foxuR1+RmD7du3VqbN2/W+fPnFRISou3bt+fo+MDt5PTp02rRooU+/fRTzZs3T2+88Ybc3HI2duRm/3p4eDjzwH/+8x898sgjunTpUo4uI8+z9zpGt6dffvnF3HvvvaZo0aLmm2++sXx5CxcuNAUKFDARERFm37595oknnjC+vr7m5MmTlixv06ZNxs/Pz9x9991m//79liwDsNPChQtNwYIFTVhYWJYvm56ZZeVm/6alpZkxY8YYSaZXr17mypUrliwHsMuVK1fMY489ZiSZsWPHWn6vvNzu4VOnTpnQ0FBTsGBB89lnn1myDMBO+/btMxUrVjSlSpUymzZtsnRZud2/xhjz9ddfm6JFi5oaNWqYY8eOWbacvIbQ+RdbtmwxpUuXNnfddZfZu3dvri333XffNQEBAcbLy8uEhISY77//3tLlHT161FSrVs0UK1bMrFmzxtJlAbklLS3NvPbaa0aS6dGjh7l8+XKuLDe3+9cYYz799FNToEAB07hxY/P7779bvjwgN/z++++mUaNGpkCBAmbBggW5ttzc7uHLly+b7t27G0nm9ddf5yb0yDNWr15tihUrZqpXr25++eWXXFmmHevgPXv2mMDAQFO6dGmzdetWy5eXFxA6rzN//nxToEAB06hRo3yxEXf+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3n33XY0YMUKSlJCQoCFDhqhmzZqKj4/X6NGj1aFDB8XExKTbUzJq1ChNmjRJlStX1qhRo9StWzf9/PPP8vDI3n9PYmKiJk2apHnz5snNzU09e/bUsGHDNH/+/GyNe72QkBCNGzfO5T+NBm7F9u3bs/X8OXPm6MyZMzlUDfKyuLg4xcfHa926dZKkX375RVFRUSpdurTWrVunevXqadGiRc75161bpzlz5iglJUXr1q3Tp59+qsDAQOfzpf+7tc/TTz+tZ555RsWLF9cnn3yiFi1aKCIiQh4eHtq3b58SEhL08ssv68knn1TRokW1d+9ePf3004qNjdXw4cNVsmRJbdq0SQ8++KA++ugj3Xnnnfrll18kSZ988onmzp0rLy8vPf300+ratas2b94s6c/DQFu3bq1x48apQIECmjt3rtq2bauDBw8qICDAWeekSZM0evRo517dI0eOqFWrVvr3v/+tTz75RH/88YcGDRqkQYMGafbs2frhhx80ePBgzZs3T2FhYTp79qw2btyYI/8Pc+bM0ZAhQ7Rt2zZt3bpVffr0UaNGjdSiRYubPmfdunUqWrSo8wMCSRo5cqT69u2rAQMG6LffftOTTz6p7du3q3bt2mrcuLFOnDihDz74QFFRUYqMjFTfvn31xRdfaMqUKVq4cKGqV6+ukydPateuXRmO+fXXX0uSmjdvrvr16990zGtee+01TZgwQRMnTtS7776rHj166Pjx4ypRokS23q/o6GglJyerefPmzmlVq1ZVQECAtm7d6vwQxMvLS7Vq1dLGjRv1wAMPZGuZAFyEySOio6ONJPPwww8bd3d3U7hwYVOgQAEjybi5uZnPP//8huds3brVFCxY0Hz22WfOaY888ojp169fuvnWr19vJJm1a9c6p7311ltGkjly5Ihz2sCBA03Lli1vWuMff/xhJJmffvrJGGPML7/8YiSZjz/+2DnP3r17jSSzf//+zL8J15k9e7aRZH7++WfntOnTp5syZcpkeqwKFSqYKVOmZPjYrl27jCSzfPlyI8lER0dntWTgtjdp0iTj7u5uJPHFF18ZfEVERDj7Zf/+/UaS2bZt2017qnr16ubdd991/lyhQgXTvn37dPP079/fPPHEE+mmbdy40bi5uZnLly+bL774whQtWtRcvHgxhzr9T/fff79p3Lhxumn169c3I0aMuOlzevfu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wDKETgAAAACAZQidAAAAAADLEDoBAAAAAJYhdAIAAAAALEPoBAAAAABYhtAJAAAAALAMoRMAAAAAYBlCJwAAAADAMoROAAAAAIBlCJ0AACDfiomJUVRUlCTpo48+UkxMjK31AEBeROgEAAD5SmpqqiIjIxUSEqLatWtrzpw5kqSnn35atWvXVkhIiCIjI5WammpzpQCQNxA6M3Dw4EH5+/vr0qVLdpdy20pKSlJgYKB++OEHu0sBAOCWXb58WR07dtRjjz2m6OjoDOeJjo7WY489pk6dOuny5cu5XCEgnTlzRqVLl9axY8fsLgUuLjAwUFOnTs2RsU6fPq3SpUvrt99+y/Rz81zorFu3rhwOhzw9PXXXXXfpxRdf1JUrVzI1xksvvaRnn31WRYoUsajK299bb72l+vXrq0iRIipdurTat2+vgwcPOh/38vLSsGHDNGLECBurBOzVp08ftW/f/obpUVFRcjgcOn/+fK7XBODmUlNT1a1bNy1btkySlJaWluF816YvXbpU3bt3Z48nMqVPnz5yOBzZ2h4dN26cHnnkEQUGBlpXKDIlPj5ekydPVuPGjeXv76877rhDzZo108yZM5WSkpKtMfv16ydJatWqVbbHzI4PP/xQTZo0UdGiRTPcjvHz81OvXr00ZsyYTI+d50JnWFiY4uLidPToUU2ZMkUzZ87M1BsTGxur5cuXq0+fPtYV6QI2bNigZ555Rt9//73WrFmj5ORkPfjgg0pISHDO06NHD23atEl79+61sVIAAG7NggUL9NVXX900bP5VWlqalixZogULFlhcGfKaVq1aZXl7NDExUbNmzVL//v2zVUNqauot/65bISkpybZl54Tr64+Ojla1atW0ZMkSDRgwQEuXLtXy5cvVu3dvRUREqH79+vr9998zNf71Y3bo0EGSNHXq1GyNmV2JiYlq1aqVXn755ZvO07dvX82fP19nz57N1Nh5LnR6enrK399f5cuXV/v27dW8eXOtWbNGkjR37lz5+Pjo8OHDzvmffvppVa1aVYmJiZKkRYsWKTg4WHfccYdznoiICPn6+mr58uWqUqWKvL291alTJyUmJmrOnDkKDAxU8eLFNXjw4HSfhs6bN0/16tVTkSJF5O/vr+7du6f75bm2N2TdunWqV6+evL29FRYWlm6PYlaNHTtWtWrV0rx58xQYGKhixYqpa9eut3zI8DfffKM+ffqoevXqCg4OVkREhGJjY9MdilS8eHE1atRICxcuzHa9AABYbdq0aXJzy9ymj5ubm6ZNm2ZRRcirChQocNPt0bFjxzr3hF7/FRERIUlauXKlChQooIYNGzrHu7bNuGLFCtWsWVMFCxZUw4YNtWfPHuc817ZXly5dqmrVqqlAgQKKjY3V1atXNWzYMN1xxx0qXLiwGjRo4Lx41rXn3X///ZKk9u3bq2DBgmrZsqV+/fVX5zxHjhzRI488ojJlysjHx0f169fX2rVr073mwMBAvfHGG+rVq5eKFi2qJ554QpK0adMmhYeHq1ChQipfvrwGDx6cbifG+++/r8qVK6tgwYIqU6aMOnXqlO33v0mTJho8eLBefPFFlShRQv7+/ho7duzfPufa0Uvjxo1TuXLlVKVKFUnS8ePH1bp1a7366qvauHGjevfu7TwfvHfv3tqyZYvatm2rhx56SMnJyZIkY4zGjh2rgIAAFShQQOXKldPgwYOdy/rrmG3btpUkVa1a9aZjSpLD4dDHH3+sDh06yNvbW5UrV9bSpUuz/X5d8/zzz2vkyJHpfvf+qnr16ipXrpy+/PLLTI3tkd3ibmd79uzRli1bVKFCBUlSr169tHz5cvXo0UNbtmzRqlWr9PHHH2vr1q3y9vaWJG3cuFH16tW7YazExERNmzZNCxcu1KVLl/Too4+qQ4cO8vX11cqVK3X06FF17NhRjRo1UpcuXSRJycnJeuONN1SlShX9/vvvGjJkiPr06aOVK1emG3vUqFGaPHmySpUqpSeffFL9+vXT5s2bs/36jxw5oiVLlmj58uU6d+6cOnfurPHjx2vcuHGZHuvChQuSpBIlSqSbHhISoo0bNzo/oQEA4HYUExOjHTt2ZPp5aWlp2rFjhxYtWqSqVataUBnymnPnzunSpUvavXu3JOnw4cP67rvvVLZsWe3evVutWrXSfffd55x/xYoVev/991WkSBHt3r1bX375pe655x7n86U/t+kkOYOUn5+fpk2bppYtW2rp0qXy9PTUr7/+qoSEBI0ZM0YjR46Ur6+vTp06paFDh+ro0aMaN26cSpUqpW+//VYtW7bU559/rgoVKujXX391Hvr7+uuvq0aNGnr66afVtWtX5/ZofHy8WrdurXHjxqlAgQKaO3eu2rZtq4MHDyogIMBZ56RJkzR69GjnXt0jR46oVatW+ve//61PPvlEf/zxhwYNGqRBgwZp9uzZ+uGHHzR48GDNmzdPYWFhOnv2rDZu3Jgj/w9z5szRkCFDtG3bNm3dulV9+vRRo0aN1KJFi5s+Z926dSpatKjzAwJJGjlypPr27asBAwbot99+05NPPqnt27erdu3aaty4sU6cOKEPPvhAUVFRioyMVN++ffXFF19oypQpWrhwoapXr66TJ09q165dNx3zueeekyQ988wzat26dYZjXvPaa69pwoQJmjhxot5991316NFDx48fv2Eb3UrXtv8ztTfe5BHR0dFGknF3dzeFCxc2BQoUMJKMm5ub+fzzz53znT171tx5553mqaeeMmXKlDHjxo1LN05wcLB5/fXX002bPXu2kWR+/vln57SBAwcab29vc+nSJee0li1bmoEDB960xh07dhhJzuesX7/eSDJr1651zrNixQojyVy+fDlrb8T/N2bMGOPt7W0uXrzonDZ8+HDToEGDTI+Vmppq2rRpYxo1anTDY//5z39MYGCg8/2Pjo7OVt3Iv1zxd6h3797OvznXfxUsWNBIMufOnbO7xFvmiu8/kBkzZ840kvjii6+/+bq2Dti/f7+RZLZt23bTnqpevbp59913nT9XqFDBtG/fPt08/fv3N0888US6aRs3bjRubm7m8uXL5osvvjBFixZNt72aE+6//37TuHHjdNPq169vRowYcdPn9O7d25QpU8ZcvXrVOe3SpUumSJEi5vTp08YYY5o1a2batWtnoqOjTWRkpPHx8TG9e/c2xhjz8ccfmy5duhhjjJk8ebK55557TFJS0g3LyWjM+++/30gyb7zxxk3HNMYYSeaVV15x/hwfH28kma+//vqmr6tChQpmypQpN308I9cyys22Y1544QXTpEmTTI2Z5/Z01qtXT5GRkUpISNCUKVPk4eGhjh07Oh8vXry4Zs2apZYtWyosLEwjR45M9/zLly+rYMGCN4zr7e2tu+++2/lzmTJlFBgYKB8fn3TTrj98Njo6WmPHjtWuXbt07tw553H1sbGxqlatmnO+mjVrOr8vW7asJOn3339P98lRVgQGBqa7GFLZsmWzdGz4M888oz179mjTpk03PFaoUCHnoclAftS0aVPNmDEj3bRt27apZ8+eNlUEICOXLl2Su7t7li4K5ObmpkGDBtHXuCWvvfaa/vjjD40YMUKX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atVS/fr1s3T12vr163M+JwDgtnD9tvilS5f06quvSpIaNWqk+fPn67PPPtPnn3/unL9ly5baunXr395z+vLlyxo0aJCioqJ0/Phxbd68WTt27HBuj1euXFlr1qzRli1btH//fg0cONC5R++aZs2aad68edq4caN++ukn9e7dO90pcffff7/uu+8+dezYUWvWrNEvv/yir7/+Wt98840kacSIEdqyZYsGDRqkmJgYHT58WF999dUNIfp28uCDD+quu+6SJB06dEirVq3SK6+8omeeeUYFChRwzrdx40ZVrFgx3WlwrsSW0Onh4aFBgwZpwoQJWrlypeLj4xUWFqayZcs6v64dwlajRg3VqVNHixYt+tsxr+3a7tSpk1q1aqV77rlH77//fobzTpkyRZ07d1azZs1u+klJZrVs2VKvvvqqXnzxRdWvX1+XLl1Sr169cmTszKpUqZL+9a9/qVu3bkpMTNSrr76qixcv6n//+5+WLl2qlStX6vz5885bpGTGhQsXdPDgwRyvuVixYs5LRtetW1dDhw7V6NGj9cQTT6Sbb+HChRowYECOLx+4VYMHD87S1WszOtQHAAA7XL8tPnjw4HQf5teoUUNvvvmmBg4cqBMnTkiSHnroIXl4eDjv4JARd3d3nTlzRr169dI999yjzp0766GHHtJrr70mSXrllVdUp04dtWzZUk2aNJG/v/8Ntxt86aWXdP/99+vhhx9WmzZt1L59+xtC1hdffKH69eurW7duqlatml588UVnGK5Zs6Y2bNigQ4cOKTw8XLVr19bo0aNv6aKkdnF3d9d//vMfSX9eqKhnz57q1avXDaccLliwwLW3gY0LWL58uQkKCjKpqak3nSc6OtpIMtHR0blYWfatX7/eWPHfcPXqVdOuXTsTFBRkFixYYM6fP2+MMebcuXNm1qxZpnr16ubXX3/NseXlxvu/cuVKExQUZJKTky1bBvBPUlJSTPv27Y2bm5uR9I9fbm5upkOHDiYlJcXu0gHcxOzZs40k1i/It25lO+69994zDz74YC5WZR2rtr+z6p/e/z179pjSpUs7t+ddkS17OjOrTZs2euKJJ5yftuQlYWFhN5wLmhO8vLy0ZMkSvfjii3r77bfl6+urAgUKqFSpUoqMjNS0adN055135vhyrZSQkKDZs2fLwyNXrn8FZMjd3V2ffvqp2rVrJ0k3PdT22vR27dpp/vz/196dh2VR7/8ff91sAqIogqFHCFNTyl2/IJg75lKoiUuaR0Ezl/QcU0xTS600y72jxzxqYWlupblvmZgbUC6ZR0xzicsO2nEXNAWc3x/95ERqIjAMcD8f18V1cc/M/fm859YPc7/umfsziwv9jNkAAPvWr18/NW7cuEjMxG7W+2+zJCcn6+OPP5anp6fVpeRYoQidkjRkyBD5+flZXUaec3FxyTIz1eLFizPvXfrHn4edPMdmsykyMlIHDhzQtWvXdPz4cV29elVfffWVmjdvnte7Ium3iYvuVbvNZrvvfk2cODFbbXfq1EnBwcGm1A08DDc3N3322Wf65JNPstzH7PcTodWrV0+LFi3SZ599xneQAQCFnpOTk0aPHl0kZmLP6/ff/fv3v+/zH7QuO8LCwtSqVasc729BwCmjAqZdu3b3DVZ/nKb5Ydz5z222JUuW3HNwurm5ZU4O9Ud/vCEuUBg4OjqqR48e6tGjh7799lv93//9X+Z3xYOCgpg0CACAQiK377/ffPNNRUdH33NdyZIl/3SdvSB0FjAlSpQo1J8g+fn5Zd4HCrAXdwJm69atFRkZaWktAADg4eT2/XfZsmWz3DbmXuvtXaG5vBYAAAAAUPgQOgEAAAAApiF0AgAAAABMQ+gEAAAAAJiG0AkAAAAAMA2hEwAAAABgGkInAAAAAMA0hE4AAAAAgGkInQAAAAAA0zhZXUBeS0xMtLoEu8TrDntmGIZKlCghm81mdSkAAOQY7+esYQ+ve5EJnd7e3nJ3d1ePHj2sLsVuubu7y9vb2+oygHxns9l07do1GYZhdSkAADw03kdbr6i/jy4yodPf31+JiYk6f/681aXkyMiRI3XlyhXNmTPH6lJyzNvbW/7+/laXAQAAgIdQ2N9HDxgwQJ6enpo0aZLVpeRYUX8fXWRCp/TbgCms/1heXl4yDEN169a1uhQAAADYmcL8PrpkyZLy8vLifXQBxkRCAAAAAADTEDoBAAAAAKYhdAIAAAAATEPoBAAAAACYhtAJAAAAADANoRMAAAAAYBpCp506ffq0bDabDh48eN9tYmNjZbPZdPny5XyrC0D2MIYBALAGx+CHR+jEfYWGhio5OVmenp6SpJiYGJUqVcraogBkG2MYAABrcAzOysnqAlBwubi4yNfX1+oyAOQQYxgAAGtwDM6KM52FVGpqqnr27CkPDw+VK1dOU6dOVdOmTTVkyBBJks1m0xdffJHlOaVKlVJMTEyWZUePHlVoaKhcXV1VvXp17dixI3Pd7y8LiI2NVVRUlK5cuSKbzSabzaZx48aZu5NAEcYYBgDAGhyD8x+hs5AaPny4duzYodWrV2vLli2KjY3V/v37c9TOsGHDdODAAYWEhCg8PFwXLly4a7vQ0FDNmDFDJUuWVHJyspKTkxUdHZ0XuwLYJcYwAADW4Bic/widhVBKSooWLFigKVOmqEWLFqpRo4YWLlyo9PT0h25r0KBBioiIUGBgoObMmSNPT08tWLDgru1cXFzk6ekpm80mX19f+fr6ysPDIy92B7A7jGEAAKzBMdgahM5C6MSJE7p165aCg4Mzl3l5ealq1aoP3VZISEjm705OTqpfv74SExPzpE4A98YYBgDAGhyDrUHoLKJsNpsMw8iyLC0tzaJqADwsxjAAANbgGJz3CJ2FUKVKleTs7Kz4+PjMZZcuXdKxY8cyH/v4+Cg5OTnz8fHjx3X9+vW72oqLi8v8PT09Xfv27VNgYOA9+3VxcVFGRkZe7AJg1xjDAABYg2OwNbhlSiHk4eGhPn36aPjw4SpTpozKli2r0aNHy8Hhf58hNG/eXLNmzVJISIgyMjI0YsQIOTs739XW7NmzVaVKFQUGBmr69Om6dOmSevfufc9+AwIClJKSom3btqlWrVpyd3eXu7u7afsJFFWMYQAArMEx2Bqc6SykJk+erEaNGik8PFxhYWF66qmnVK9evcz1U6dOlZ+fnxo1aqTu3bsrOjr6nv+xJ02apEmTJqlWrVratWuX1qxZI29v73v2GRoaqv79+6tr167y8fHRe++9Z9r+AUUdYxgAAGtwDM5/NuOPFyzDEs8//7wuXLigrVu35riNpk2bqnbt2poxY0beFQbggdLT0+Xs7KyPPvpIkZGROW6HMQxYIyYmRlFRUUpLS5OTExeBAYVNy5YtVaZMGS1dujTHbXAMNhdnOgEAAAAApiF0AgAAAABMwzUkRUhsbKzVJQDIBcYwAADW4BhsLs50AgAAAABMQ+gEAAAAAJiG0AkAAAAAMA2hEwAAAABgGkInAAAAAMA0hE4AAAAAgGkInQAAAAAA0xA6AQAAAACmIXQCAAAAAExD6AQAAAAAmIbQCQAAAAAwDaETAAAAAGAaQicAAAAAwDSETgAAAACAaQidAAAAAADTOFldQF5KSkrS+fPnrS4jRy5evKirV69q//79VpeSY97e3vL397e6DBRihXUMp6enS5JOnz7NGAYAFEqF9RgsSVevXpXNZuMYXIDZDMMwrC4iLyQlJSkwMFDXr1+3uhS75e7ursTExCI9YGAexrD1GMOwVzExMYqKilJaWpqcnIrU5/FAtnAMtl5RPwYXmb+s58+f1/Xr17Vo0SIFBgZaXY7dSUxMVI8ePXT+/PkiO1hgLsawtRjDAGC/OAZbyx6OwUUmdN4RGBiounXrWl0GgBxiDAMAYA2OwTALEwkBAAAAAExD6AQAAAAAmIbQCQAAAAAwDaETAAAAAGAaQicAAAAAwDSETgAAAACAaQidAAAAAADTEDoBAAAAAKYhdAIAAAAATEPoBAAAAACYhtAJAAAAADANoRMAAAAAYBpCJwAAAID7unDhgsqWLavTp09bXYrdOXLkiCpUqKDU1FSrS8kVQqeFIiMj1aFDh7uWx8bGymaz6fLly/leE4DsYwwDAAq6yMhI2Ww22Ww2OTs7q2LFinr11Vf166+/ZruNCRMmqH379goICDCv0Hxy+vRp2Wy2AhOgJ0yYoKioKElSkyZN7lr/xBNPqEGDBpo2bVp+l5anCJ0AAABAEda6dWslJyfr5MmTmj59uubOnauxY8dm67nXr1/XggUL1KdPH5OrtE+3bt1SWFjYn24TFRWlOXPmKD09PZ+qynuETgAAAKAIK1asmHx9feXn56cOHTooLCxMW7dulSSNGzdO9erVkyTVq1cv86xoTEyMJGnDhg0qVqyYGjRo8Kd9/PTTTwoPD1fp0qVVvHhxPfnkk9qwYYMkKSMjQ3369FHFihXl5uamqlWraubMmVme37RpUw0ZMiTLsg4dOigyMjLz8c2bNzVixAj5+fmpWLFiqly5shYsWJC5/vDhw2rTpo08PDz0yCOP6K9//avOnz8v6X9nfCtWrChJqlixomw2m8aNG/fA1y8gIEATJ05U7969VaJECfn7++tf//rXA5+XHePHj9cLL7zwp9u0bNlSFy9e1I4dO/KkTysQOgEAAAA7cfjwYe3Zs0cuLi6SpOjoaG3evFmStHnzZk2ZMkXu7u6qX7++JGnnzp2ZofTPvPzyy7p586a+/vprff/993r33Xfl4eEhSbp9+7YqVKigFStW6MiRI3rjjTc0atQoLV++/KFq79mzp5YsWaL3339fiYmJmjt3bmYfly9fVvPmzVWnTh19++232rRpk86dO6cuXbpIkmbOnKnk5GQlJCRIkhISEpScnKzo6Ohs9T116lTVr19fBw4c0MCBAzVgwAD98MMPD1V/Trm4uKh27drauXNnvvRnBierC7B369atyxwsd2RkZFhUDYCHxRgGABR0d45V6enpunnzphwcHDRr1ixJkoeHh7y9vSVJycnJGjNmjBYuXKjq1atL+u0MZvny5R/YR1JSkiIiIlSjRg1J0mOPPZa5ztnZWePHj898XLFiRe3du1fLly/PDIUPcuzYMS1fvlxbt27NvBz1933MmjVLderU0cSJEzOXffjhh/Lz89OxY8f0+OOPy9PTM/O7rD4+PvL19c1W35LUtm1bDRw4UJI0YsQITZ8+Xdu3b1fVqlWz3UZulC9fXj/99FO+9GUGQqfFmjVrpjlz5mRZFh8frx49elhUEYCHwRgGABR0d45Vqampmj59upycnBQREXHXdsOGDVN0dHSWIHjjxg25urpm2e7JJ5/MDECNGjXSxo0b9be//U0DBgzQli1bFBYWpoiICNWsWTPzObNnz9aHH36opKQk3bhxQ7du3VLt2rWzvQ8HDx6Uo6PjPSfbkaTvvvtO27dvv+uDYEk6ceKEHn/88Wz3dS+/3xebzSZfX1/98ssvuWrzYbi5uen69ev51l9eI3RarHjx4qpcuXKWZWfOnLGoGgAPizEMACjofn+s+vDDD1WrVq0skwPduHFDklSjRg29+eabWZ7r7e2tS5cuZVm2YcMGpaWlSfotDEnSiy++qFatWmn9+vXasmWL3nnnHU2dOlWDBw/W0qVLFR0dralTpyokJEQlSpTQ5MmTFR8fn9mmg4ODDMPI0s+dPn7fz/2kpKQoPDxc77777l3rypUr96fPzQ5nZ+csj202m27fvp3rdrPr4sWLqlSpUr71l9f4TicAAABgJxwcHDRq1CiNGTNGN27ckGEYGjNmjCTprbfeks1my7J9nTp1dOTIkSzLHn30UVWuXFmVK1fWX/7yl8zlfn5+6t+/v1auXKlhw4Zp3rx5kqTdu3crNDRUAwcOVJ06dVS5cmWdOHEiS5s+Pj5KTk7OfJyRkaHDhw9nPq5Ro4Zu375938l06tatq3//+98KCAjIrO3OT/HixXPwShUshw8fVp06dawuI8cInQAAAIAd6dy5sxwdHTV79myNGzcuc3Kd69ev6+zZszp79mzm2c9WrVrp3//+911nO/9oyJAh2rx5s06dOqX9+/dr+/btCgwMlCRVqVJF3377rTZv3qxjx47p9ddf1zfffJPl+c2bN9f69eu1fv16HT16VAMGDMhyv+uAgAD16tVLvXv31hdffKFTp04pNjY2czKil19+WRcvXlS3bt30zTff6MSJE9q8ebOioqIK9FwLSUlJmRMS3b59WwcPHtTBgweVkpKSuc3p06f1888/P/DWKgUZoRMAAACwI05OTho0aJDee+89bdiwIfO7gq1atVK5cuVUrlw5LVu2TNJvZxjr1q37wJlmMzIy9PLLLyswMFCtW7fW448/rn/+85+SpH79+qljx47q2rWrgoODdeHChcxJee7o3bu3evXqpZ49e6pJkyZ67LHH1KxZsyzbzJkzR506ddLAgQNVrVo19e3bV6mpqZJ+m2hn9+7dysjI0NNPP60aNWpoyJAhKlWqlBwcCm7keeONN9S9e3dJv4X+OnXqZM7Ae8eSJUv09NNP69FHH7WqzFyzGX+8eLqQ2r9/v+rVq6d9+/apbt26Vpdjd3j9kVv8H7IWrz/sWUxMjKKiopSWliYnJ6a7gP150DFg/fr1Gj58uA4fPlygA1x2nD59WhUrVtSpU6cUEBBgdTmS/vz1v3XrlqpUqaJPP/1UDRs2tKjC3OMvKwAAAID7euaZZ3T8+HH9/PPP8vPzs7qcXPHz81NycrJ8fHysLiVbkpKSNGrUqEIdOCVCJwAAAIAHGDJkiNUl5AlHR8cs9+fcuXOn2rRpc9/tf//dynuZOHFilnuD/l5qaup9JzG6c6uZB7kzGVJhR+gEAAAAYJfq16+vgwcP5vj5/fv3z3Jf099zc3PLnJDpXuvsCaETAAAAgF1yc3PL1ZlELy8veXl55WFFRVPh/iYwAAAAAKBAI3QCAAAAAExD6AQAAAAAmIbQCQAAAAAwDaETAAAAAGAaQicAAAAAwDSETgAAAACAaQidAAAAAADTEDoBAAAAAKZxsrqAvJaYmGh1CXaJ1x15hf9L1uB1BwBwLLCGPbzuRSZ0ent7y93dXT169LC6FLvl7u4ub29vq8tAIcUYth5jGADsE8dg6xX1Y3CRCZ3+/v5KTEzU+fPnrS4lR0aOHKkrV65ozpw5VpeSY97e3vL397e6DBRShXkMp6enKzg4WGPHjlW7du2sLifHGMMAYJ8K8zFYkgYMGCBPT09NmjTJ6lJyrKgfg4tM6JR+GzCF9R/Ly8tLhmGobt26VpcCWKawjuH09HRJUkBAAGMYAFAoFdZjsCSVLFlSXl5eHIMLMCYSAgAAAACYhtAJAAAAADANoRMAAAAAYBpCJwAAAADANIROAAAAAIBpCJ0AAAAAANMQOu3U6dOnZbPZdPDgwftuExsbK5vNpsuXL+dbXQCyhzEMAIA1OAY/PEIn7is0NFTJycny9PSUJMXExKhUqVLWFgUg2xjDAABYg2NwVk5WF4CCy8XFRb6+vlaXASCHGMMAAFiDY3BWnOkspFJTU9WzZ095eHioXLlymjp1qpo2baohQ4ZIkmw2m7744osszylVqpRiYmKyLDt69KhCQ0Pl6uqq6tWra8eOHZnrfn9ZQGxsrKKionTlyhXZbDbZbDaNGzfO3J0EijDGMAAA1uAYnP8InYXU8OHDtWPHDq1evVpbtmxRbGys9u/fn6N2hg0bpgMHDigkJETh4eG6cOHCXduFhoZqxowZKlmypJKTk5WcnKzo6Oi82BXALjGGAQCwBsfg/EfoLIRSUlK0YMECTZkyRS1atFCNGjW0cOFCpaenP3RbgwYNUkREhAIDAzVnzhx5enpqwYIFd23n4uIiT09P2Ww2+fr6ytfXVx4eHnmxO4DdYQwDAGANjsHWIHQWQidOnNCtW7cUHBycuczLy0tVq1Z96LZCQkIyf3dyclL9+vWVmJiYJ3UCuDfGMAAA1uAYbA1CZxFls9lkGEaWZWlpaRZVA+BhMYYBALAGx+C8R+gshCpVqiRnZ2fFx8dnLrt06ZKOHTuW+djHx0fJycmZj48fP67r16/f1VZcXFzm7+np6dq3b58CAwPv2a+Li4syMjLyYhcAu8YYBgDAGhyDrcEtUwohDw8P9enTR8OHD1eZMmVUtmxZjR49Wg4O//sMoXnz5po1a5ZCQkKUkZGhESNGyNnZ+a62Zs+erSpVqigwMFDTp0/XpUuX1Lt373v2GxAQoJSUFG3btk21atWSu7u73N3dTdtPoKhiDAMAYA2OwdbgTGchNXnyZDVq1Ejh4eEKCwvTU089pXr16mWunzp1qvz8/NSoUSN1795d0dHR9/yPPWnSJE2aNEm1atXSrl27tGbNGnl7e9+zz9DQUPXv319du3aVj4+P3nvvPdP2DyjqGMMAAFiDY3D+sxl/vGAZlnj++ed14cIFbd26NcdtNG3aVLVr19aMGTPyrjAAD5Seni5nZ2d99NFHioyMzHE7jGHAGjExMYqKilJaWpqcnLgIDChsWrZsqTJlymjp0qU5boNjsLk40wkAAAAAMA2hEwAAAABgGq4hKUJiY2OtLgFALjCGAQCwBsdgc3GmEwAAAABgGkInAAAAAMA0hE4AAAAAgGkInQAAAAAA0xA6AQAAAACmIXQCAAAAAExD6AQAAAAAmIbQCQAAAAAwDaETAAAAAGAaQicAAAAAwDSETgAAAACAaQidAAAAAADTEDoBAAAAAKYhdAIAAAAATEPoBAAAAACYxsnqAvJKenq6zpw5Y3UZOZaamqobN27o9OnTVpeSY+XLl5eLi4vVZaCQunz5si5fvmx1GTmSnp4uSTp//nyhHcPOzs76y1/+YnUZAACgCLIZhmFYXUReWLlypSIiIqwuw67NmzdPL774otVloJDq2LGjVq1aZXUZdsvFxUVnz55V6dKlrS4FyHcxMTGKiopSWlqanJyKzOfxwENJSkrS+fPnrS4jR5YvXy5XV1e1a9fO6lJyzNvbW/7+/laXYZoi85e1SpUq8vPz088//6yJEyeqfv36VpdkF44cOaLo6GiVKlVK1atXt7ocFGLNmjXT6tWr5efnp5kzZ8rDw8PqkuzCvHnztGzZMjVr1ow32wBgp5KSkhQYGKjr169bXUqujB8/3uoScszd3V2JiYlFNngWmTOdknT27Fm1b99e33//vT755BPOfJps8+bN6tKli/z9/bV27VoFBARYXRIKuQ0bNuj555/XY489prVr18rPz8/qkoqsjIwMRUdHa8aMGRo8eLCmTZtG6ITd4kwn7N3+/ftVr149LVq0SIGBgVaXY3cSExPVo0cP7du3T3Xr1rW6HFMUqb+svr6+io2NVVRUlDp16qQJEybotddek81ms7q0Imf27Nn6+9//rlatWmnJkiUqWbKk1SWhCGjbtq12796t8PBwBQUFafXq1QoKCrK6rCLn6tWr6t69uzZt2qTZs2dr4MCBVpcEACgAAgMDi2zogbWK3Oy1bm5uWrJkicaOHavRo0erV69eunnzptVlFRnp6ekaPHiwBg0apMGDB2vNmjUETuSpGjVqKCEhQRUrVlSTJk20fPlyq0sqUk6fPq2GDRtq586dWr9+PYETAACYrsiFTkmy2WwaN26cPv30Uy1fvlwtWrTQf//7X6vLKvSuXLmiZ599VnPmzNGcOXM0ffp0OTo6Wl0WiqCyZcvqq6++UseOHdW1a1e99dZbKkLfBLDM3r17FRwcrNTUVO3du1etWrWyuiQAAGAHimTovKNbt27avn27jh8/ruDgYB05csTqkgqtU6dOKTQ0VHFxcdq0aZP69+9vdUko4lxdXbVo0SK9+eabeuONN9SjRw/9+uuvVpdVaH366adq1qyZHn/8ccXHx+uJJ56wuiQAAGAninTolKSQkBAlJCSoePHiCgkJ0ebNm60uqdDZtWuXgoKCdPPmTcXFxSksLMzqkmAnbDabXn/9dS1btkwrV65U8+bN9csvv1hdVqFiGIbGjh2rF154QV27dtWXX34pHx8fq8sCAAB2pMiHTkl69NFHtWfPHjVq1Eht27bVrFmzrC6p0Pjkk0/UokULPfHEE4qPj1e1atWsLgl2qEuXLtqxY4dOnjypoKAgHT582OqSCoUbN26oW7duevPNN/XOO+8oJiZGxYoVs7osAABgZ+widEpSiRIltHr1av3973/PnAgnPT3d6rIKrNu3b2v06NHq2bOnevTooa1bt6pMmTJWlwU7FhQUpISEBJUqVUqhoaHasGGD1SUVaGfPnlXTpk21Zs0aff755xo5ciQzeQMAAEvYTeiUJEdHR02bNk1z587V3Llz9cwzz+jKlStWl1XgXL9+XV26dNE777yj9957T/Pnz5eLi4vVZQHy9/fXrl271KxZM4WHh2vmzJlMMHQP3333nYKCgnTmzBnt3LlTHTt2tLokAABgx+wqdN7x0ksvadOmTUpISFBISIhOnjxpdUkFxn/+8x81btxYGzdu1KpVqzR8+HDOjqBA8fDw0MqVKzV06FANGTJEAwcOVFpamtVlFRhr165Vw4YN5ePjo4SEBNWrV8/qkgAAgJ2zy9ApSS1atFBcXJzS0tIUFBSknTt3Wl2S5fbv36+goCCdO3dOu3btUvv27a0uCbgnR0dHTZ48WfPnz9f8+fPVpk0bXbp0yeqyLGUYhqZOnar27durVatW+vrrr/WXv/zF6rIAAADsN3RKUtWqVRUXF6caNWqoRYsWWrhwodUlWWbVqlVq1KiRypcvr4SEBNWpU8fqkoAH6tOnj7Zu3aoDBw4oJCREP/74o9UlWeLWrVvq27evoqOjNXLkSK1YsULFixe3uiwAAABJdh46JalMmTLavHmzevbsqcjISL322mu6ffu21WXlG8Mw9O6776pjx45q27atYmNjVa5cOavLArKtadOmiouLk2EYCg4O1o4dO6wuKV9dvHhRrVq10scff6yFCxdq4sSJcnCw+z/tAACgAOGdiSQXFxfNmzdPU6ZM0bvvvqvOnTsrNTXV6rJMd+vWLfXu3VsjR47UmDFjtGzZMrm7u1tdFvDQqlSpori4ONWuXVstW7bUhx9+aHVJ+eLYsWNq0KCBvv/+e23btk09e/a0uiQAQBH1ww8/yNfXV9euXbO6FLvzwQcfKDw83OoycoXQ+f/ZbDYNGzZMX3zxhTZv3qzGjRvr559/zrf+Z8+erYCAALm6uio4OFgJCQmm9nf+/Hm1bNlSn376qT755BO99dZbnB1BoVa6dGlt2rRJUVFR6tOnj1599VVlZGTkS9/5PX4ladu2bQoODpaTk5Pi4+PVqFEj0/sEABQ+kZGRstlsstlscnZ2VsWKFfXqq6/q119/fah2XnvtNQ0ePFglSpQwqdL8ExsbW2Amyvzuu+80atQoSVJoaKgCAwM1c+bMLNv07t1b+/fvL9Rz0JAy/qBdu3bavXu3/vvf/yooKEj79u0zvc9ly5Zp6NChGjt2rPbv369atWqpVatW+uWXX0zpLzExUcHBwUpMTNRXX32lHj16mNIPkN+cnZ31wQcfaPr06Zo6daoiIiKUkpJiap/5PX4l6V//+pdat26toKAg7d27V5UqVTKtLwBA4de6dWslJyfr5MmTmj59uubOnauxY8dm+/lJSUlat26dIiMjzSvSTu3bt0+lS5eWJC1fvlyjR4/Wa6+9plmzZmVu4+Liou7du+v999+3qszcM3BP//nPf4z/+7//M9zc3IzPP//c1L6CgoKMl19+OfNxRkaGUb58eeOdd97J8762bNlieHp6Gk8++aRx6tSpPG8fKCjWrVtneHh4GLVq1TKSkpJM6yc/x296errxyiuvGJKMl19+2UhLS8vzPgB79NFHHxmSGFMoknr16mW0b98+y7KOHTsaderUMQzDMBYuXGi4ubkZkox9+/YZhmEYAwYMMKpWrWqkpqYahmEYkydPNurXr//Avg4ePGg0bdrU8PDwMEqUKGHUrVvX+OabbwzDMIzz588bzz//vFG+fHnDzc3NqF69uvHpp59mef6jjz5qTJ8+PcuyWrVqGWPHjs18fOnSJeOll14yypYtaxQrVsx48sknjbVr12au37lzp/HUU08Zrq6uRoUKFYzBgwcbKSkphmEYRpMmTQxJd/189NFHD9w3Sca8efOMDh06GG5ubkblypWN1atXP/B52bFv374sr//AgQONZs2aZdlmx44dhouLi3H9+vU86TO/cabzPsqVK6cdO3YoPDxcEREReuedd0y5Cf2tW7e0b98+hYWFZS5zcHBQWFiY9u7dm6d9zZkzR23atFFoaKj27NmjgICAPG0fKEieeeYZ7d69W5cuXVJQUJC++eabPO8jP8fvtWvX1L59e82cOVP/+Mc/NGvWLDk5OeVpHwCAou/w4cPas2ePXFxcJEk9e/ZUw4YNJUnp6elav3695s+fr8WLF2fO9bFz507Vr1//gW2/8MILqlChgr755hvt27dPI0eOlLOzsyTp119/Vb169bR+/XodPnxYL730kv76178+1FdSbt++rTZt2mj37t1atGiRjhw5okmTJsnR0VGSdOLECbVu3VoRERE6dOiQli1bpl27dmnQoEGSpJUrVyo5OVmff/65JCk5OVnJycnq2rVrtvofP368unTpokOHDqlt27Z64YUXdPHixWzXn11XrlyRl5dXlmX169dXenq64uPj87y/fGF16i3oMjIyjDfeeMOQZPTs2dP49ddf87T9n3/+2ZBk7NmzJ8vy4cOHG0FBQXnSR1pamjF48GBDkvG3v/2NT3JhV86ePWs0aNDAcHV1NZYvX56nbefH+DUMwzh9+rRRo0YNo2TJksbGjRvzrF0Av+FMJ4qyXr16GY6Ojkbx4sWNYsWKGZIMBwcH47PPPsvcZvv27YYko1OnTsYjjzxiTJgwIUsbtWrVMt58880H9lWiRAkjJiYm27U988wzxrBhwzIfP+hM5+bNmw0HBwfjhx9+uGd7ffr0MV566aUsy3bu3Gk4ODgYN27cyFx2Z38fhiRjzJgxmY9TUlIMSXlyXP79mc7du3cbTk5OxubNm+/arnTp0g/1+hYknOl8AAcHB40fP16LFi3SsmXLFBYWpvPnz1tdVrZduXJF4eHh+uc//6l//vOfmjlzJmdHYFceeeQRbd++Xc8995y6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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import AtomicType, IQPAnsatz\n", - "\n", - "ansatz = IQPAnsatz({AtomicType.NOUN: 1, AtomicType.SENTENCE: 1},\n", - " n_layers=1, n_single_qubit_params=3)\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits[0].draw(figsize=(9, 9))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Parameterise" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from pytket.extensions.qiskit import AerBackend\n", - "from lambeq import TketModel\n", - "\n", - "all_circuits = train_circuits+dev_circuits+test_circuits\n", - "\n", - "backend = AerBackend()\n", - "backend_config = {\n", - " 'backend': backend,\n", - " 'compilation': backend.default_compilation_pass(2),\n", - " 'shots': 8192\n", - "}\n", - "model = TketModel.from_diagrams(all_circuits, backend_config=backend_config)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define evaluation metric" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BinaryCrossEntropyLoss\n", - "\n", - "# Using the builtin binary cross-entropy error from lambeq\n", - "bce = BinaryCrossEntropyLoss()\n", - "\n", - "acc = lambda y_hat, y: np.sum(np.round(y_hat) == y) / len(y) / 2 # half due to double-counting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import QuantumTrainer, SPSAOptimizer\n", - "\n", - "trainer = QuantumTrainer(\n", - " model,\n", - " loss_function=bce,\n", - " epochs=EPOCHS,\n", - " optimizer=SPSAOptimizer,\n", - " optim_hyperparams={'a': 0.05, 'c': 0.06, 'A':0.01*EPOCHS},\n", - " evaluate_functions={'acc': acc},\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " seed=0\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "val_dataset = Dataset(dev_circuits, dev_labels, shuffle=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 12: train/loss: 2.1017 valid/loss: 0.8054 train/time: 2m21s valid/time: 29.87s train/acc: 0.5929 valid/acc: 0.5167\n", - "Epoch 24: train/loss: 0.8344 valid/loss: 0.7573 train/time: 2m16s valid/time: 30.83s train/acc: 0.5786 valid/acc: 0.5500\n", - "Epoch 36: train/loss: 1.8189 valid/loss: 0.9036 train/time: 2m17s valid/time: 30.32s train/acc: 0.5286 valid/acc: 0.4667\n", - "Epoch 48: train/loss: 1.8901 valid/loss: 0.7692 train/time: 2m11s valid/time: 28.47s train/acc: 0.5857 valid/acc: 0.6500\n", - "Epoch 60: train/loss: 0.5390 valid/loss: 0.4898 train/time: 2m16s valid/time: 28.18s train/acc: 0.7571 valid/acc: 0.7333\n", - "Epoch 72: train/loss: 0.4840 valid/loss: 0.4777 train/time: 2m10s valid/time: 28.43s train/acc: 0.8000 valid/acc: 0.7333\n", - "Epoch 84: train/loss: 0.3344 valid/loss: 0.4273 train/time: 2m14s valid/time: 28.68s train/acc: 0.8071 valid/acc: 0.8333\n", - "Epoch 96: train/loss: 0.4518 valid/loss: 0.4237 train/time: 2m12s valid/time: 29.25s train/acc: 0.8286 valid/acc: 0.7667\n", - "Epoch 108: train/loss: 0.3554 valid/loss: 0.4414 train/time: 2m12s valid/time: 28.41s train/acc: 0.8714 valid/acc: 0.7667\n", - "Epoch 120: train/loss: 0.2696 valid/loss: 0.4609 train/time: 2m12s valid/time: 28.06s train/acc: 0.7857 valid/acc: 0.7333\n", - "\n", - "Training completed!\n", - "train/time: 22m20s train/time_per_epoch: 11.17s train/time_per_step: 3.72s valid/time: 4m50s valid/time_per_eval: 2.42s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, val_dataset, log_interval=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show results" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test accuracy: 0.8166666666666667\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hb5dkG8FvLkry3HSeOYzuL7JBFEgghCYRN2KuMMNoy2lLa8pW9SVvKKnsUwigtpWGvTAIJBALZe8fx3pa3rHG+P47eo6NlybZsedy/68oVW9Y4UsBHt57nfV6NJEkSiIiIiIiIKCBtpA+AiIiIiIiot2NwIiIiIiIiCoLBiYiIiIiIKAgGJyIiIiIioiAYnIiIiIiIiIJgcCIiIiIiIgqCwYmIiIiIiCgIBiciIiIiIqIgGJyIiIiIiIiCYHAi6ibXXnsthg0b1qnbPvDAA9BoNOE9ICIiGlCOHj0KjUaDpUuXRvpQiPoFBicacDQaTUh/1q5dG+lD7fPeffddPP3005E+DCKisFm6dKnHucJkMiErKwsLFy7EP/7xDzQ0NET6EAnAY489ho8++qjHH7ekpAQPPPAAtm7d2uOPTd1PI0mSFOmDIOpJ77zzjsf3b731FlauXIm3337b4/JTTz0VGRkZnX4cm80Gp9MJo9HY4dva7XbY7XaYTKZOP35vcPbZZ2Pnzp04evRopA+FiCgsli5disWLF+Ohhx5Cbm4ubDYbysrKsHbtWqxcuRJDhw7FJ598ggkTJkT6UHH06FHk5ubijTfewLXXXhvpw+lRsbGxuOiii3q82vbzzz9j2rRpA/I1Hwj0kT4Aop72i1/8wuP7H374AStXrvS53FtzczOio6NDfhyDwdCp4wMAvV4PvZ7/exIR9VZnnHEGpk6dqnx/5513Ys2aNTj77LNx7rnnYs+ePTCbzRE8QiIKN7bqEfkxd+5cjBs3Dps2bcKcOXMQHR2Nu+66CwDw8ccf46yzzkJWVhaMRiPy8/Px8MMPw+FweNyH9xon0Wv+97//Ha+88gry8/NhNBoxbdo0/PTTTx639bfGSaPR4NZbb8VHH32EcePGwWg0YuzYsfjqq698jn/t2rWYOnUqTCYT8vPz8fLLL4e8burAgQO48MILkZmZCZPJhCFDhuCyyy6DxWLxuN4777yDKVOmwGw2Izk5GZdddhkKCws9XsPPP/8cBQUFSktLZ9d8ERH1BfPmzcO9996LgoICn+6GvXv34qKLLkJycjJMJhOmTp2KTz75RPn5zz//DI1GgzfffNPnfpcvXw6NRoPPPvtMuay4uBjXXXcdMjIylPPB66+/HtJxrlmzBieddBJiYmKQmJiI8847D3v27PG4jjhn7N27F5dccgni4+ORkpKC3/3ud2htbfW4rjg/vf/++xgzZgzMZjNmzpyJHTt2AABefvllDB8+HCaTCXPnzvXbhfDjjz/i9NNPR0JCAqKjo3HyySfju+++83tMBw8exLXXXovExEQkJCRg8eLFaG5u9jiepqYmvPnmm8r5J1j159lnn8XYsWMRHR2NpKQkTJ06Fe+++67HdYK95mvXrsW0adMAAIsXL1Yem2vM+g9+pE0UQHV1Nc444wxcdtll+MUvfqG07S1duhSxsbG4/fbbERsbizVr1uC+++5DfX09Hn/88aD3++6776KhoQG/+tWvoNFo8Le//Q0XXHABDh8+HLRKtX79enzwwQe4+eabERcXh3/84x+48MILcezYMaSkpAAAtmzZgtNPPx2DBg3Cgw8+CIfDgYceeghpaWlBj62trQ0LFy6E1WrFb37zG2RmZqK4uBifffYZ6urqkJCQAAB49NFHce+99+KSSy7BDTfcgMrKSjz77LOYM2cOtmzZgsTERNx9992wWCwoKirCU089BUBunSAi6s+uuuoq3HXXXVixYgVuvPFGAMCuXbswe/ZsDB48GH/+858RExOD//73v1i0aBGWLVuG888/H1OnTkVeXh7++9//4pprrvG4z/feew9JSUlYuHAhAKC8vBwnnHCCEljS0tLw5Zdf4vrrr0d9fT1uu+22gMe3atUqnHHGGcjLy8MDDzyAlpYWPPvss5g9ezY2b97s8wHXJZdcgmHDhmHJkiX44Ycf8I9//AO1tbV46623PK63bt06fPLJJ7jlllsAAEuWLMHZZ5+NO+64Ay+88AJuvvlm1NbW4m9/+xuuu+46rFmzRrntmjVrcMYZZ2DKlCm4//77odVq8cYbb2DevHlYt24dpk+f7nNMubm5WLJkCTZv3ozXXnsN6enp+Otf/woAePvtt3HDDTdg+vTp+OUvfwkAyM/PD/iavPrqq/jtb3+Liy66SAmG27dvx48//ogrrrgi5Nf8uOOOw0MPPYT77rsPv/zlL3HS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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "fig, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharex=True, sharey='row', figsize=(10, 6))\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Iterations')\n", - "ax_br.set_xlabel('Iterations')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs + 1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "test_acc = acc(model(test_circuits), test_labels)\n", - "print('Test accuracy:', test_acc)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/reader.ipynb b/docs/examples/reader.ipynb deleted file mode 100644 index 460c9397..00000000 --- a/docs/examples/reader.ipynb +++ /dev/null @@ -1,96 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Reader" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Reader, cups_reader, spiders_reader, stairs_reader" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "sentence = 'This is a sentence'" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Can't instantiate abstract class Reader with abstract method sentence2diagram\n" - ] - } - ], - "source": [ - "try:\n", - " Reader()\n", - "except TypeError as e:\n", - " print(e)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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np7QaDQIDAzsMF/VYKA0jYGyE6qpqdGHy5s3b5rcylh/i6RCoYCVlZXBVkulUtnoFk1ra2u4urrC1dUVdnZ2XIG0MUIIlJeXo7CwEFVVVQ22ThjbYqFSqVBbW2tyC4i1tTWcnZ3h6ekJe3t79l4mQghUVVWhqKgI5eXlze7xrVu3mtVje3t7eHl5wdnZmT2WUXV1NYqLi1FSUtKsHisUCmi12mb12NbWFh4eHnBzc4NSqZT7qcqCgdK0jvHRge6KjY0NfHx84OPjI3cpJDOFQgEXFxe4uLjIXQpZiEKhgIODQ4f9bjHdZmtriy5duqBLly5yl0KdVOf5ogoRERERWQQDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUmiEEIIuYsgIiIiaquEEKipqYG1tTWUSqXc5bRJDJREREREJAl3eRMRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkST/B+NPdJBgAFhxAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cups_reader.sentence2diagram(sentence).draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAADMCAYAAADNjTOPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAbR0lEQVR4nO3de3BU9f3/8dfmngVCuBMaE8QaiBCTEIxCFLCEq4oGwcpotdoW7aixY2lHB+Xipe3QMqVqdQSn1lERNOKAFRBIzYDKBBNIQCYgVSBcolwMlwRy2c35/cFv95uQC4FPknPWPB8zZ3L27Dkn7z373j2vPWcvLsuyLAEAAACXKcjuAgAAABDYCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABgJsbuAlpSWlur48eN2l+EovXv3VlxcnN1l4AL0amP0qjPRq43Rq85Erzbm5F51bKAsLS1VYmKizp49a3cpjuJ2u1VSUuLYhuqM6NWm0avOQ682jV51Hnq1aU7uVccGyuPHj+vs2bN6++23lZiYaHc5jlBSUqJ7771Xx48fd2QzdVb0amP0qjPRq43Rq85Erzbm9F51bKD0SUxM1PDhw+0uA7goehWBgl5FoKBXAwcfygEAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoLxAXl6eXC6XTp482ew88+fPV0pKSofVBDRn7Nix+t3vfmd3GQCATq5TBUqXy9XiMH/+/FatZ/bs2crNzW3fYoFWWLlypZ577jm7ywCAgPfvf/9b0dHRdpcRsBz/04ttqayszD++YsUKzZ07V3v27PFP69q1qwoKCi66nq5du6pr167tUiNwKXr27Gl3CQAAdK4jlP379/cP3bt3l8vlajCtfkgsLCzUiBEj5Ha7NWrUqAbB88JT3nl5eUpPT1eXLl0UHR2tjIwMHThwoCNvGjqp+qe8X3nlFV199dWKiIhQv379NH36dHuLA5qwbt063XjjjYqOjlavXr1066236ptvvrG7LASInJwcJSUlKTIyUr169VJmZqYqKyslSa+//roSExMVERGhIUOG6JVXXvEvt3//frlcLq1cuVI333yz3G63kpOTtWXLFknn9+MPPPCATp061eisZXV1tWbPnq2f/OQn6tKli66//nrl5eX51+07svnJJ58oMTFRXbt21aRJkxocxJKkf/3rXxo6dKjCw8MVExOjRx991H/dyZMn9etf/1p9+vRRVFSUfvazn6m4uLidtmL76FSB8lLMmTNHixYtUkFBgUJCQvTggw82OZ/H49Edd9yhMWPGaMeOHdqyZYtmzZoll8vVwRWjMysoKFB2draeffZZ7dmzR+vWrdPo0aPtLgtopLKyUk888YQKCgqUm5uroKAgZWVlqa6uzu7S4HBlZWWaOXOmHnzwQZWUlCgvL0/Tpk2TZVl65513NHfuXL3wwgsqKSnRn/70Jz3zzDN68803G6xjzpw5mj17toqKipSQkKCZM2fK4/Fo1KhRWrx4saKiolRWVqaysjLNnj1bkvToo49qy5YtWr58uXbs2KEZM2Zo0qRJ2rt3r3+9Z8+e1d/+9je99dZb2rRpk0pLS/3LS9Krr76qRx55RLNmzdLOnTu1evVq/fSnP/VfP2PGDB09elRr165VYWGhhg8frnHjxumHH35o563ahiyHKiwstCRZhYWF7bL+N954w+revXuj6Z9++qklydq4caN/2scff2xJss6dO2dZlmXNmzfPSk5OtizLsk6cOGFJsvLy8tqlzvrae5vg8th5v4wZM8Z6/PHHrQ8++MCKioqyTp8+3eE1NIVedSYn3i/Hjh2zJFk7d+605f87cZug6fvFN23//v2N5r/qqqusZcuWNZj23HPPWSNHjrQsy7L27dtnSbJef/11//W7du2yJFklJSWWZTWdCw4cOGAFBwdbhw8fbjB93Lhx1lNPPeVfTpL1v//9z3/9P//5T6tfv37+ywMGDLDmzJnT5G3dvHmzFRUVZVVVVTW6Ta+99lqL28RJOtV7KC/Ftdde6x+PiYmRJB09elRxcXEN5uvZs6d++ctfauLEiRo/frwyMzN11113+ZcBOsL48eMVHx+vQYMGadKkSZo0aZKysrLkdrvtLg1oYO/evZo7d67y8/N1/Phx/5HJ0tJSDRs2zObq4GTJyckaN26ckpKSNHHiRE2YMEHTp09XWFiYvvnmG/3qV7/Sb37zG//8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AAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECZStZlmV3CUCr0KtwOnoUgYJebT0C5UUMGjRIoaGh2r17t92lAC3q0qWLwsPDVVlZaXcpQIsqKioUHh6uLl262F0K0KLdu3crNDRUgwYNsrsUxyNQXkRqaqpiYmKUlZWlw4cP210O0KxBgwaptrZWW7dutbsUoEVbt25VbW0tO2k42uHDh5WVlaWYmBilpqbaXY7jESgvIioqSnl5eaqpqdHYsWO1efNmDoHDkfr06aMxY8Zo+fLldpcCtGjFihUaO3as+vTpY3cpQCOWZWnz5s0aO3asampqlJeXp6ioKLvLcjwCZStceeWVysvLk9vt1ujRo5WRkaHVq1errq7O7tKABmbNmqXc3Fy9//77dpcCNOm9995Tbm6uZs2aZXcpQAN1dXVatWqVMjIyNHr0aLndbuXl5enKK6+0u7SA4LI43NZqlmVpzZo1+stf/qLPPvtMiYmJuvvuuzVlyhQNHz5cQUHkc9jLsizdfffdWr9+vTZv3qxhw4bZXRLg99VXX+mmm27SxIkT9e6778rlctldEjq5uro6bdu2TWvWrNHy5ctVUlKiG2+8UU8++aSmTJlCj14CAuVl+vzzz/Xiiy9q3bp1On36tPr27avJkydrypQpGj9+vHr06GF3ieikysvLdfPNN2vfvn364IMPlJmZaXdJgDZu3Kg777xTV155pT799FOeI2Gb8vJyrV+/XmvXrtXatWt19OhRRUVFadKkScrOzlZGRobdJQYkAqWh2tpaffHFF1qzZo3WrFmjr776SkFBQUpISFBycrJSUlKUnJys5ORkxcTE8GoHHeLMmTO66667tHHjRj322GN6+umn1bNnT7vLQid04sQJPf/883r55Zc1fvx4rVixQt26dbO7LHQClmWprKxMxcXFKi4uVlFRkYqLi/X111+rrq5OSUlJmjJliqZMmaKRI0cqNDTU7pIDGoGyjR08eFDr16/X9u3b/U185swZSVLv3r0bBMzk5GQlJibSxGgXHo9HCxcu1J///GeFhITo6aef1qOPPqrw8HC7S0MnUFVVpZdfflkvvPCCPB6PnnrqKf3xj39USEiI3aXhR6i2tlYlJSWNwuPx48clSd26dfPvd1NTUzVhwgRdccUVNlf940KgbGd1dXXav3+/v8l9w759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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "spiders_reader.sentence2diagram(sentence).draw()" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/rewrite.ipynb b/docs/examples/rewrite.ipynb deleted file mode 100644 index 14783b83..00000000 --- a/docs/examples/rewrite.ipynb +++ /dev/null @@ -1,753 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Rewrite" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq.backend.grammar import Cup, Diagram, Id, Word\n", - "from lambeq.backend.drawing import draw\n", - "\n", - "from lambeq import AtomicType\n", - "\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Rewriter\n", - "\n", - "rewriter = Rewriter()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Auxiliary rule" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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LmVUBdeut0FkZmYqMzOz37zTp0/32+JrbGzUP/7xD7W3t6unp2fA54mMjOzXtBISEq5pZOPHj1doaKjCwsL6XV49LywsTF6vV729verr6xvysqenZ8CgeOXU0dEx4JeRDMNQbGyskpKSlJ2drdLSUl9DcrvdcrlcozLmADBSLpdLRUVFKioq8s3r6+vTF1980W+HwN///nedOnVK586dG/Czl4ZhaMKECQP26Kt3EgzUrwe69Hg81+3VfX196uzsvG6/7uzsHHT54+PjlZaWppycHH3729/2HVWbNGkS4RG2IlAO4itf+YoefPBBPfjgg/3mm6apS5cuXbchXJ5aWlr6bWEOFkavlp+fr7q6umE99nIovLoZTp48edBGebmRTpgwIaC31AFgKKGhobrjjjt0xx136PHHH+9331BHZgY6UnP48GHf7cHC6EDuv/9+7dy5c1iPvRwKr5xuueUW5eTkDLkzIj4+XlFRUYRGBCwC5QgZhqGoqChFRUWN+FcGTNNUX19fv+nqrdfL171erwzDGHQv5tXXQ0KC5vtVADAsISEhiouLU1xc3Ii/iGKa5jV9ebC+7fV6h+zRV84LDQ0lFMKRCJR+ZBiG73A2ACBwGYYhl8vFx36AYWK3FgAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAMISMjQzExMXaXAWAM6uvrU3Z2tuLj4+0uZdQRKAFgCMnJyXr33XdVXl4ur9drdzkAxojOzk49/fTT2rVrl2677Ta7yxl1BEoAGMKKFSv01FNPqbS0VG63W6+88opOnz5td1kAAlRTU5N+/OMfKzU1VW+99ZbKy8s1ffp0u8sadYZpmqbdRQAYmbKyMjU0NKi6utruUoKCaZr67LPP9Prrr+v999+XaZqaPn26CgoKdM8996igoEBut1shIWyjA8Gku7tbjY2NqqmpUW1trT7//HM1NDQoOTlZixcvVllZmb72ta/ZXaZfECiBMYhAaZ8zZ85o/fr1qqqqUk1NjQ4fPixJiomJ0d133+0LmHl5ecrIyND48eNtrhiAVaZp6syZMzp06JDq6upUW1urmpoaNTU1qbe3V2FhYZo6daoKCgo0Z84cFRcXKzw83O6y/YpACYxBBMrA0d7e7lvBXF7JXA6ZkhQbG6v09HTdcsstvssrr6enpxM6ARtdDotHjhzR0aNHdfToUd/1K+d1d3dLUr/weHnKzc3VuHHjbF4SexEogTGIQBnY2tvbtWfPngFXTEeOHNHJkyf7Pf5y6ExOTlZsbGy/KS4u7pp5V04RERE2LSUQOEzTVFdXlzo6Oq6Zzp07N+j848eP9wuL0peBMS0tbcANwIyMDE2ZMiXow+NAwuwuAACcJiEhQYWFhYPe39PTo2PHjl2zN+TkyZPq6OjQ8ePH+634Ojs7B32uiIiIAYPm9YJoTEyMwsPDfZPL5fJdDw0NlWEYozE0gEzTlMfjUU9Pj+/y8vXu7m6dP39+wAA4VDjs6OhQX1/fgP+fYRiaMGHCNe+B9PR0TZs27ZojCMnJyXwe+gYQKAHAz8LDwzV58mRNnjx5WI/v7e31rWSHWqFeOV0ZSs+dO6eurq4R13h10AzU6y6XS4ZhyDAMhYSE+K47kWma10xer/eaYHYzrt/M57ryem9v77CXd7AwmJaWpuzs7GFtTI0fP56A6AcESgAIcGFhYUpISFBCQsINP4fH4+m35+fChQuD7iWyEjo6OztH/G9G00BB88ppsPkj+Te5ublqaGjwhbvBQt9A80f6b0ZznCIiIgYN74OF+aioqGGF/+FuJISHh/cLkDExMYTBMYJACQBBwOVyKTExUYmJiXaX0o9pmurr67O852y44W007o+NjVV+fv51A+po3R8SEjLi0Hb1faGhoXa/FDDGESgBALYxDENhYWEKCwtTVFSU3eUAuEHsRwYAAIAlBEoAAABYQqAEAACAJQRKAAAAWEKgBAAAgCUESgAAAFhCoAQAAIAlBEoAAABYQqAEAACAJQRKAAAAWEKgBAAAgCUESgAAAFhCoAQAAIAlBEoAAABYQqAEAACAJQRKAAAAWEKgBAAAgCUESgAAAFhCoAQAAIAlBEoAAABYQqAEAACAJQRKAAAAWEKgBAAAgCUESgAAAFhCoAQAAIAlBEoAAABYQqAEAACAJQRKAAAAWEKgBAAAgCUESgAAAFhCoAQAAIAlBEoAAABYQqAEAACAJQRKAAAAWGKYpmnaXQSAkTly5Ii6u7vldrvtLgUAAAIlAAAArOGQNwAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMCS/wHNtAGxS3J/SwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (auxiliary rule)\n" - ] - }, - { - "data": { - "image/png": "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eOhBIFACwAgLCgrSxRdfrIsvvrhfz+/o6PB0sn11qGdPZ4fShoYGtba2DrjGc4Omr84HBgbKMAwZhiGHw+GZ90emaXab3G53t2A2FPND+V5nz3d0dPT79+0tDCYnJysrK6tfO1Pjx48nII4AAiUA+LiAgADFxMQoJiZm0O/hcrm8Rn6am5t7HSWyEjpaWloG/Jrh1FPQPHvqbflAXpOTk6OKigpPuOst9PW0fKCvGc71FBwc3Gt47y3Mh4aG9iv893cnISgoyCtAhoeHEwZHCQIlAIwBgYGBio2NVWxsrN2leDFNU52dnZZHzvob3obj8cjISOXl5Z03oA7X4w6HY8Ch7dzHnE6n3ZsCRjkCJQDANoZhKCAgQAEBAQoNDbW7HACDxDgyAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASwzRN0+4iAAxMdXW12tralJ6ebncpAAAQKAEAAGANH3kDAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALCFQAgAAwBICJQAAACwhUAIAAMASAiUAAAAsIVACAADAEgIlAAAALPl/MaxmRw6XIzIAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "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BCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJ2mc94HJWXFwcTU1NWc8AEhQUFES7du2yngGQ1zxD2UI6deoUjY2NcezYsaynAAkOHjwYHTp0yHoGQF4TlC2kR48eUVxcHO+8807WU4CLlMvl4t13341evXplPQUgrwnKFtKuXbsYN25cvPLKK1lPAS7SihUroqGhIW677baspwDkNUHZgm6//fZ44403Ytu2bVlPAS7Cyy+/HGVlZVFTU5P1FIC8Jihb0IQJE6Jr167x0EMPZT0FuEDvv/9+PPvss/H1r3892rf3/kWA8xGULai0tDSeeeaZ+P3vfx9//OMfs54DfEInTpyIqVOnRvfu3ePxxx/Peg5A3vNldwubOnVqLFiwIO67774YNGhQDB06NOtJwHnkcrl48MEH480334zXX389SktLs54EkPc8Q3kJPPPMM9G/f/8YPXp0/O1vf8t6DnAOjY2Ncdddd8XMmTNj5syZMWrUqKwnAbQKgvISKC0tjUWLFkVNTU2MHz8+fv3rX0cul8t6FvA/9u7dG+PGjYuXXnopXnzxxZgxY0bWkwBaDUF5iXTp0iVqa2vj/vvvj/vuuy9uueWW2LRpU9azoM07efJkzJ49O6655ppYs2ZN/P3vf4877rgj61kArYqgvITatWsXTz/9dMydOzc2b94cgwcPjoceeigOHz6c9TRok1auXBmjR4+OadOmxc033xz//ve/o7q6OutZAK2OoMzAV77ylVi3bl388Ic/jJkzZ0b//v3j8ccfj927d2c9DS57uVwuli5dGl/72tdixIgRceDAgaivr485c+ZEeXl51vMAWiVBmZFOnTrFI488EuvXr4+JEyfGT37yk+jTp0/cc889sW7duqznwWXn+PHj8eKLL8bIkSNj9OjRsXbt2njmmWdi5cqVMWbMmKznAbRqgjJj/fr1i2effTa2bdsWDz/8cMyfPz8GDx4cN9xwQ/zsZz+LzZs3Zz0RWq3GxsZ49dVX4/7774+KioqYMmVKdO/ePebPnx/r16+Pe++9N4qKirKeCdDqFeS83TivNDY2xp///Od4+eWX49VXX42jR49GZWVlTJo0KSZNmhQjRoyIwkJfB8C57N+/PxYsWBC1tbUxf/78OHjwYPTr1y8mTpwY06ZNi8GDB2c9EbjE6urqYuzYsbF169aoqKjIes5lSVDmsSNHjkRdXV3U1tbGX//619izZ0+Ul5fHxIkTY+LEiVFdXR0lJSVZz4RM5XK52LZtW8yfPz9qa2vjH//4Rxw/fjyGDRvW/IXY4MGDo6CgIOupQEYEZcsTlK3EiRMnYunSpVFbWxu1tbXx/vvvR2FhYQwaNCiGDx/efLn22mtFJpetXC4XO3bsiOXLl8fbb78dy5cvj+XLl8cHH3wQ7dq1i5qampg0aVJMmDDBgwbQTFC2PEHZCuVyuVi7dm289dZbzQ+oa9asicbGRpHJZeN88RgRcdVVV8Xw4cNjxIgRMXz48Kiuro4ePXpkvBrIR4Ky5QnKy0RjY2OsXbu2+UH3fJE5YsSIGDRokH+jmLzR1NQU27dvj1WrVp0WkOeKx+HDh0fv3r29jA18IoKy5QnKy9j5IjMi4oorroi+fftGRUVF9O3bt/ly6rhnz57eAMSn4ujRo9HQ0BBbt25t/u+pS0NDQ2zfvj1OnDgREeIR+PQJypYnKNuYU5G5efPmsz6w79+/v/m+RUVF0adPnzNC89SlT58+0aFDhww/G/JBLpeLvXv3nhGL/3t9165dzfcvLCyM8vLys34hU1VVJR6BT52gbHmCktPs37//rEFw6vrOnTtPu3/Pnj3js5/9bHTv3v2clx49epx23K1bt2jfvn1GnyHnksvl4ujRo7Fv377Yu3dv7Nu372Mve/fuje3bt5/2z4d27NixORbPFo2f+9zn/N2PwCUlKFueR3VOU1paGlVVVVFVVXXW2z/88MPYvn37ac9s7tq1qzkw/vvf/54WHKdexvyorl27fmx8duvWLTp16hQdO3aMDh06RIcOHc55vUOHDlFcXNxmntlqamqKDz/8sPly7Nixcx4fO3YsDh069IlC8dS3Q3xU586dz/i1GjhwYHTv3j169+59WjR+5jOfaTO/DgD8P0HJBenQoUNcffXVcfXVV3/sfXO5XHPIfJLLjh07Tjtuamq6qH1ni83zHXfs2DGKioqisLAwCgoKorCwsPnyv8dnu15SUhJHjx6NkydPRi6Xi5MnT55x/Vy3NTU1RWNj4xnxd74wPHX9XKF+PiUlJWc8W3wqCs8X9926dYvi4uIL/v8B0HYISlpMQUFBdO3aNbp27XrBLzHkcrk4fPhwHD169GPj6ny3ne/6gQMHmo8bGxubQ+9s8XeuWPz85z8fW7Zs+cQB+tFg/WjklpaWfuyzsZ/0Gdv/Pe7SpYsoBKDFCEryUkFBQXTp0iW6dOmS9RQA4GP4O2EAAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASFKQy+VyWY8AAGgpBw8ejC1btkRlZWUUFxdnPeeyJCgBAEjiJW8AAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACSCEoAAJIISgAAkghKAACS/B8m56odHuHYpwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "diagram = ((Word('we', N) @ Word('will', (N >> S) << (N >> S)) @\n", - " Word('go', N >> S)) >>\n", - " Cup(N, N.r) @ Id(S) @ Diagram.cups((N >> S).l, N >> S))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (auxiliary rule)')\n", - "draw(Rewriter(['auxiliary'])(diagram))\n", - "print('↓ normal form')\n", - "draw(rewriter(diagram).normal_form())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Connector rule" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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aDQaKBQKGdeQnMnDhw9RXV2N6upq3Lt3T7z95FBZWWkWIBsbG8VluLq6olu3bggNDUVUVJR4hl6v16NTp04yrp1tMVBSh8RASWR71dXVKC8vb3Fmp7y8HDdv3jQ7gJtMplaXoVQq4e3t/dTA+fjg4eEBtVoNV1dXqNXqFrefNa35tkqlsnErdWwmkwmPHj3Co0eP0NjYKA6Pjz/tdvP4w4cPUVNT89Rw+PjweDB8kkajEbclPz8/szPszX9DQkIQGBgIpZKXpPAzlEREZBPNB+fn/RMnCAJqa2stCgTNZ5VKS0vN7q+pqXlqKLWGUqm0KHhaGlCbb6tUKigUilYHpVL51GmWPkatVqOxsREmkwmCIDxzaOtjnhfsLA2Aj99uamqS/JoBgKenp9k/F1qtFgEBAejVq9cz/wlpPjvu7e3NfyasxEBJRER2RaFQwMvLC15eXggJCWnTMgRBsDjYvIjb9fX14hmw1h5jNBqtCnfPCn2tTYuIiMD169etDqPWTHtecPbw8IBWq7UqaLfXbYZB22OgJCIip6NQKODm5gY3Nze5SyHqEPimPxERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIoBEEQ5C6CiIiIiBwXz1ASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJMn/A40UHqn4TwdWAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (connector rule)\n" - ] - }, - { - "data": { - "image/png": "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ClNJSQlcXFyQnp6O1157DRqNRuoyHzuZ0Wg0Sl0EkbUdP34cw4cPR0lJCRISEqQuh8hu6fV67N+/H/n5+cLg2dDQAACIiIjAwIEDERkZifDwcISFhQm3ISEhcHZ2lrh6os4zGo24ceMGrly5gsrKSuG2srISpaWlKCkpgV6vh5OTE/r164chQ4bg6aefxrRp06BSqaQu/4lhoKRuiYGS6MkwGAy4cOGCEC6LioqEwfbWrVvCfDKZDEFBQULADAoKgo+PD3x8fKBSqYT790+enp6QyWQSriE5kjt37qC+vh719fW4efOmcP/+qbq62iRAtra2Cq/h7OyM0NBQhIeHIzY2VjhCr1ar4ebmJuHaWRcDJXVLDJRE1ldfX48rV66YHdm5cuUKrl27ZjKAGwyGDl9DLpfD29v7gYHz3kmpVMLFxQXOzs5wcXExu/+w59rvKxQKK7dS92YwGNDW1oa2tja0trYK072PH3S//fGdO3fQ0NDwwHB473RvMLyfp6ensC35+fmZHGFvvw0LC0NAQADkcl6SwnMoiYjIKtoH50f9EWc0GnHr1i2LAkH7UaWKigqTnzc0NDwwlHaGXC63KHhaGlDb7ysUCshksg4nuVz+wOcsncfFxQWtra0wGAwwGo0Pnbo6z6OCnaUB8N77Op1O9O8MADw8PEz+uFCpVOjZsyf69Onz0D9C2o+Oe3t784+JTmKgJCIimyKTyeDl5QUvLy+EhYV16TWMRqPFweZJ3G9ubhaOgHU0j16v71S4e1jo6+i5qKgoXL58udNhtDPPPSo4K5VKqFSqTgXtx3WfYdD6GCiJiMjhyGQyuLq6wtXVVepSiLoFfuhPRERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKDKj0WiUuggiIiIisl88QklEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKP8PWg70KPR1kYAAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "diagram = ((Word('I', N) @ Word('hope', N >> S << S) @\n", - " Word('that', S << S) @ Word('this', N) @\n", - " Word('succeeds', N >> S)) >>\n", - " (Cup(N, N.r) @ Id(S) @ Cup(S.l, S) @\n", - " Diagram.cups((N >> S).l, N >> S)))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (connector rule)')\n", - "Rewriter(['connector'])(diagram).draw()\n", - "print('↓ normal form')\n", - "rewriter(diagram).normal_form().draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Determiner rule" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAEZCAYAAAApCbWnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAATk0lEQVR4nO3de4xU9f3/8dfAssCKX1DRSIUFiWhBJA2gImKKNVSkKDZRW6OhtIm1RBNta1qq9a79Q4uXWK2mptVUjTFpC9bSFGtaYqnSgIogW6WNMtRqFa/VlevO74+Gjfzk/hFmd3k8kknO2dnZec8yZ89zz+wcKrVarRYAANhN3eo9AAAAnZugBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgSEO9B9iearWaNWvW1HsMgE6tf//+aW5urvcYdHL2yfXXkbflDhuU1Wo1w4cPT2tra71HAejUmpqa0tLS0mF3RHR89skdQ0feljtsUK5Zsyatra154IEHMnz48HqPA9AptbS05Pzzz8+aNWs65E6IzsE+uf46+rbcYYNys+HDh2f06NH1HgMA9nn2yWyLN+UAAFBEUAIAUERQAgBQRFACAFBEUAIAUERQAgBQRFACAFBEUAIAUERQAgBQRFACAFBEUAIAUERQAgBQRFACAFBEUAIAUERQAgBQRFDCTvrzn/+cSqWSd999t96jAOyTJk6cmEsvvXSP3seQIUNy22237dH76IoEJWzD3vjBBQBdgaAEAKCIoIStmDFjRhYsWJDbb789lUollUolr7zySpJkyZIlGTt2bJqamjJ+/Pi8+OKLW9x27ty5GT16dHr16pWhQ4fm2muvzcaNG+vwKAC6no0bN+biiy9O3759079//1x55ZWp1WpJknfeeSfTp0/PAQcckKamppx22mlZuXLlFrf/1a9+laOPPjo9e/bMkCFDMnv27O3e37333pt+/frliSee2GOPqSsQlLAVt99+e0444YRccMEFee211/Laa69l0KBBSZIrrrgis2fPzuLFi9PQ0JBvfOMb7bd78sknM3369FxyySVZsWJF7rnnntx333258cYb6/VQALqU+++/Pw0NDfnb3/6W22+/PbfcckvuvffeJP87GLB48eI8+uijeeqpp1Kr1TJlypRs2LAhyf8OCJxzzjn56le/mmXLluWaa67JlVdemfvuu2+r93XTTTdl1qxZmT9/fk455ZS99RA7pYZ6DwAdUd++fdPY2JimpqYceuihSZK///3vSZIbb7wxn//855Mks2bNype+9KWsXbs2vXr1yrXXXptZs2bla1/7WpJk6NChuf766/O9730vV199dX0eDEAXMmjQoNx6662pVCo56qijsmzZstx6662ZOHFiHn300SxcuDDjx49Pkjz44IMZNGhQ5syZk7PPPju33HJLTjnllFx55ZVJkiOPPDIrVqzIzTffnBkzZmxxP9///vfzy1/+MgsWLMjRRx+9tx9mp+MIJeyiUaNGtS8PGDAgSfLGG28kSZYuXZrrrrsuffr0ab9sPsrZ2tpal3kBupJx48alUqm0r59wwglZuXJlVqxYkYaGhhx//PHt1x100EE56qij0tLSkiRpaWnJiSeeuMXXO/HEE7Ny5cps2rSp/WOzZ8/Oz372s/zlL38RkztJUMIu6tGjR/vy5h9qbW1tSZIPPvgg1157bZ577rn2y7Jly7Jy5cr06tWrLvMCsGtOOumkbNq0KY888ki9R+k0vOQN29DY2LjFb6w7Y/To0XnxxRdzxBFH7KGpAPZtixYt2mL96aefzrBhwzJixIhs3LgxixYtan/J+6233sqLL76YESNGJEmGDx+ehQsXbnH7hQsX5sgjj0z37t3bP3bcccfl4osvzuTJk9PQ0JDLLrtsDz+qzk9QwjYMGTIkixYtyiuvvJI+ffq0H4XcnquuuipTp05Nc3NzzjrrrHTr1i1Lly7N8uXLc8MNN+yFqQG6tmq1mu985zu58MIL88wzz+SOO+7I7NmzM2zYsEybNi0XXHBB7rnnnuy///6ZNWtWDjvssEybNi1J8t3vfjfHHntsrr/++nzlK1/JU089lZ/85Ce56667PnE/48ePz7x583LaaaeloaHBeYl3wEvesA2XXXZZunfvnhEjRuTggw9OtVrd4W1OPfXUPPbYY5k/f36OPfbYjBs3LrfeemsGDx68FyYG6PqmT5+ejz76KMcdd1wuuuiiXHLJJfnmN7+ZJPnFL36RMWPGZOrUqTnhhBNSq9Uyb9689j9VGj16dB555JE8/PDDGTlyZK666qpcd911n3hDzmYTJkzI7373u/zwhz/MHXfcsbceYqdUqW0+eVMH88wzz2TMmDFZsmRJRo8eXe9xADolP0v5NHge1V9H/zdwhBIAgCKCEgCAIoISAIAighIAgCKCEgCAIoISAIAighIAgCKCEgCAIoISAIAighIAgCKCEgCAIoISAIAighIAgCKCEgCAIoISAIAighIAgCKCEgCAIg31HmBHWlpa6j0CQKflZyifJs+n+uno3/sOG5T9+/dPU1NTzj///HqPAtCpNTU1pX///vUeg07MPrlj6MjbcqVWq9XqPcS2VKvVrFmzpt5j7JbXXnstU6dOzZ133plx48bVexxgN1166aVJkttuu62uc5To379/mpub6z0GnVxn3ic//fTTueiii/LYY49lwIAB9R5nt3XkbbnDHqFMkubm5g77jduRarWaJBk2bFhGjx5d52mA3dWvX78ksR2zz+vM++S33norSXLMMcd02sfQ0XlTDgAARQQlAABFBCUAAEUEJQAARQQlAABFBCUAAEUEJQAARQQlAABFBCVAHc2YMSNnnnlmvccAKCIoAQAoIigBACjSof8v733NxIkTM2rUqPTq1Sv33ntvGhsb861vfSvXXHNNvUcDdpLtGDo/2/Guc4Syg7n//vuz3377ZdGiRbnpppty3XXX5fHHH6/3WMAusB1D52c73jWCsoMZNWpUrr766gwbNizTp0/P2LFj88QTT9R7LGAX2I6h87Md7xpB2cGMGjVqi/UBAwbkjTfeqNM0wO6wHUPnZzveNYKyg+nRo8cW65VKJW1tbXWaBtgdtmPo/GzHu0ZQAgBQRFAC7EXTp0/PD37wg3qPAfCpctoggL2oWq2mWze/ywNdS6VWq9XqPURXVK1WM3jw4MyfPz+TJk2q9zjAbjrjjDOSJI8++midJwF21+OPP54vfvGLWbVqVZqbm+s9Tpfk12QAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISoDtaGhoSKVSqfcYQIFNmzalsbGx3mN0aYISYDt69uyZDz74oN5jAAU++uijrF+/Pk1NTfUepcsSlADbceihh+Yf//hHarVavUcBdtM///nPNDY25oADDqj3KF2WoATYjilTpqRarebZZ5+t9yjAbvr1r3+dyZMnp3v37vUepcsSlADbcfLJJ+eggw7KI488Uu9RgN2wevXqPPXUUzn77LPrPUqXJigBtqOhoSHnnntu7r777qxatare4wC76PLLL8/++++f008/vd6jdGmCEmAHrr/++vTr1y/nn39+Nm7cWO9xgJ300EMP5YEHHshPf/rT9O3bt97jdGmCEmAH+vXrlwceeCB//etfM2vWLG/QgU5g6dKlmTlzZs4777ycd9559R6nyxOUADthwoQJ+fGPf5zZs2dnxowZWb9+fb1HArbh97//fSZMmJAjjjgid955Z73H2ScISoCd9O1vfzsPPfRQHn744UyePDlvv/12vUcCPqZWq+Xuu+/O6aefnpNPPjkLFizwUvdeIigBdsG5556bP/7xj1m6dGk++9nP5r777ktbW1u9x4J93ksvvZTJkydn5syZmTlzZn7zm9+kT58+9R5rnyEoAXbRSSedlGXLlmXSpEn5+te/ngkTJjhPJdTJhx9+mMsvvzwjR47MypUr89vf/jZ33HGHc07uZYISYDd85jOfyYMPPpg//elPef/99zN27NicddZZWbhwoTftwF7w5ptv5oYbbsgRRxyRW265JVdccUVeeOGFTJ06td6j7ZMEJUCBiRMn5tlnn81dd92V5cuXZ8KECTn++OPz0EMPZcOGDfUeD7qc5cuX54ILLkhzc3N+9KMfZdq0aVmxYkWuvvrq9O7du97j7bMEJUChHj165MILL8yKFSsyb9689OvXL+edd16am5szc+bM/OEPf/CucCjw0ksv5eabb8748eNzzDHHZN68ebnqqquyevXq3H333Rk6dGi9R9znVWpem9kjqtVqBg8enPnz52fSpEn1HgfYy5YvX56f//znmTNnTl5++eX83//9X6ZMmZJp06bltNNO885T2I62trYsXrw4c+bMyZw5c9LS0pLevXvn1FNPzTnnnJOzzjorPXr0qPeYfIyg3EMEJZD87zQmy5cvb98xPvPMM+nRo0e+8IUv5Mwzz8yUKVMyaNCgVCqVeo8KddXa2ponn3wyc+fOzdy5c/Pvf/87Bx10UM4444xMmzYtkyZNSlNTU73HZBsE5R4iKIGtqVarmTt3bubMmZMFCxZk06ZNOeSQQzJmzJiMHTs2Y8aMyZgxY3LYYYeJTLqs1tbWPPfcc1myZEn7ZcWKFWlra8uQIUPy5S9/OWeeeWbGjx+fhoaGeo/LThCUe4igBHbk7bffzpNPPpklS5Zk8eLFWbJkSd54440kEZl0GduLx8bGxowaNar9OT5u3LiMHDnS87wTEpR7iKAEdlWtVsurr77avtPdWmR+PDA/97nPZeDAgc63R4fx3nvv5YUXXtipeBwzZkxGjhyZxsbGeo/Np0BQ7iGCEvg07CgyGxoaMnDgwAwePDjNzc0ZPHjwFsvNzc1OpcKnoq2tLa+//npWrVqVVatWpVqtfmL5/fffTxLxuA8SlHuIoAT2lM2R+fzzz291x/7qq69ucXL1gw8+uD00txaeBx54oJcYybp161KtVrcaiqtWrcrq1au3OLdq3759t3gubX4+DRs2TDzug/ylK0AnU6lUMnDgwAwcOHCr12/YsCH/+te/thqbjz32WKrVatauXdv++fvtt18GDhyYAw88MAcccMB2Lx//nN69ewvRDmjjxo15991388477+Sdd97J22+/3b68rct//vOfvP7661t8nQEDBrRH4tixYz/xC4lTX/FxghKgi+nRo0cOP/zwHH744Vu9vlar5c0332wPzVWrVuXVV19tj4vVq1fn+eefb1//8MMPt/p1Ghsbdyo++/Tpk169eqVnz57p2bPnFstbW99X/ia0Vqtl/fr1WbduXdatW5e1a9e2L///62vXrs1HH320U6H43//+d6v319DQ8Il/owEDBmTEiBGfOIo9cODA9OzZcy9/R+jMBCXAPqZSqeSQQw7JIYcckmOPPXaHn79+/fr2kNnR0a7NMbr581pbW3d5voaGhq3G5vZCtFevXmlsbEz37t3TrVu3VCqVdOvW7RPL27qud+/eaW1tTVtbW2q1Wtra2ra7/PH1DRs2fCL+theGH79uV3Xv3v0Twb45CncU9/vtt58jyuwxghKA7WpsbGwP0F21fv36fPDBB7scWzuzvG7durz33ntbrG8t+HYmEIcOHZqXX355u9G5rY81NjZuEbq9e/dOv379thvEuxLKH/+6opCOSlACsMc0NjbmwAMPrPcYwB7Wrd4DAADQuQlKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKCEoAAIoISgAAighKAACKVGq1Wq3eQ3RF69evT0tLS4YOHZr999+/3uMAAOwxghIAgCJe8gYAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKCIoAQAoIigBACgiKAEAKDI/wPTvpFVcxNtdQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (determiner rule)\n" - ] - }, - { - "data": { - "image/png": "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VVXb9H3rfgfb+t175ZVX4rHHHtvgd7C4uDh69+7dZmyuO92tW7cvevMAttnZZ58dq1atikMPPTSKi4vjkksuiR/84AcREXHPPffEJZdcEqNHj46mpqYYPnx4TJ06NUpLSyMiYvDgwfHwww/Hr371qxg/fnzsvvvucd111230hpx1vv71r8eUKVNi1KhRUVxcHBdffPGXtZkdQi6/7gOd2KJ8Ph/vv/9+zJo1a4Nl/UOVXbt23ejBef313r172zvEl27FihXR0NCwyT3ln99Lvvfee8eQIUM2WCorKzPcAmBHmT17dgwZMiRmzZoVgwcPznocNqHQf07KZhM+H48zZ86M2bNnt8Zj3759Y8iQIXHppZfGoEGDWqPR69coRDvttFMMGjSo9bVFn7dmzZr46KOPor6+Pj744IN4/fXXY9asWXH99de3vmZXZAKwKYIyti0ehw4dGoMHD45dd90126HhC1RaWtr6pGj48OGt57e0tMS7774bM2fObP37EJkAfF6nDcp33303Jk2aFP/4xz82OGwtHuH/KyoqigEDBsSAAQPizDPPjIgtR+Zee+0Vw4YNi5NOOilGjhwZFRUVWW4CAF+CThOU+Xw+Zs6cGXV1dVFXVxdz586NLl26xHHHHSceYRtsTWQ+++yz8dBDD0VpaWkce+yxUVtbGyeddFLsscceGU8PwI7QoYOyqakpnnvuuairq4tJkybFggULoqqqKr797W/Hr3/96zj++OO9oxq+AG1FZkNDQ0yaNCnq6urioosuih//+Mdx2GGHRW1tbdTW1sZ+++2X8dQAfFE65P+Ce+WVV+Kcc86JXXfdNU444YSYMmVKnHLKKfHMM8/EwoUL4957743a2loxCTtQTU1NXHzxxfH000/HokWL4v77748+ffrE+PHjY+DAgbHffvvF+PHjY9GiRVmPCkCiDhOUzc3N8eijj8aRRx4Zhx56aLzwwgvx05/+NF577bX44IMP4tZbb40RI0b4yB7IQFVVVZx11lnx6KOPxuLFi+Nvf/tbHHHEEfGb3/wmampq4nvf+17MmTMn6zEB2E7tPigbGxvj5ptvjn322SfGjh0bpaWlUVdXF++8805cffXVcdBBB/kYHyggXbt2jdGjR8fdd98dH374YVxzzTXxxBNPxIEHHhjHH398PPXUU1mPCMA2atdBOWXKlNh///3j8ssv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67E6NUEJdBi9e/eO6dOnx4033hh33313DBgwIO6///7I5/NZjwZ8ARYuXBjnnHNOHHXUUdGlS5eYMWNGXHnllQ5zFwBBCXQopaWlcemll8Zbb70Vxx13XJxzzjkxdOjQeOCBB6KpqSnr8YDtUF9fH5dddln0798/pkyZEn/5y19i2rRpMXTo0KxH438EJdAh9e7dOx588MF49tlno7q6OsaNGxd77bVX3HDDDbFkyZKsxwO2IJ/Px0svvRRjx46NvffeO+6+++644IIL4p133onvf//7UVQkYQqJnwbQoR199NHxxBNPxJtvvhmjRo2K6667Lvr27Rvf/e53Y8qUKdHY2Jj1iMB66uvr4w9/+EMcdthhceSRR8Ybb7wRt99+e8yfPz9++9vfRlVVVdYj0oZcvkBfXHT++efHG2+8EdOnT896FKAD+eSTT+KOO+6I++67L957773o3r17jBw5MsaMGRPf+ta3orKyMusRoVPJ5/MxZ86cqKuri7q6unj11VejtLQ0vvGNb8SFF14YI0eOtDeyHRCUQKeUz+dj3rx5UVdXF5MmTYoZM2ZESUlJHH300VFbWxtjxoyJvn37Zj0mdEjNzc3x4osvtkbkv//97+jRo0eMGjUqamtrY+TIkdGjR4+sx2QbCEqAiFiwYEFMnjw56urq4l//+lc0NzfHkCFD4thjj40hQ4bEkCFD4qtf/ap3k8J2WLlyZbz22msxa9asmDFjRjz++OOxZMmS2H333aO2tjZqa2tjxIgRUVZWlvWobCdBCfA5y5Yti8cffzwmT54cL730UjQ0NERERM+ePWPw4MGtgSkyYWPrx+O6Ze7cudHS0hJlZWXxta99LU444YSora2NoUOHOpzdQQhKgC345JNPNnhwnDlzZsyfPz8iRCad25bi8cADD9zgb+OAAw6wF7KDEpQA22H9yJw5c2bMmjWrNTIrKipaH0APPvjg2GuvvaJfv37Rq1cve2Nol1atWhUNDQ3R0NAQb7311ib3PA4dOlQ8dlKCEuALsmjRopg9e3ZrYK4fmRERZWVl0bdv3+jXr1/069cvampqWtf79esXffr0ifLy8gy3gM4on8/H0qVLo76+PhoaGqK+vr51WXd60aJFrZdfF49DhgxpDUjxiKAE2IGWLl26wYP05x+wFy5c2HrZXC4Xu+222yaDs6amJioqKjLcGtqjtWvXxn/+85/NBuOKFStaL19eXh41NTVt/v6te+IjHvm8kqwHAOjIKisro7KyMg466KA2v97Y2Bjz589v88H+lVdeifnz58eaNWtaL19RURF77LFH6/Vu7dK1a1ev62znWlpaYvny5bF06dKNlk8//bTN85csWRILFiyI5ubm1uvp2bNnayQec8wxG0Xjrrvu6qUZbDNBCZChLl26RP/+/aN///5tfn3t2rXx8ccfbxCbH3/8cWsw1NfXx2uvvdZ6euXKlW1eT1lZ2VaFZ1VVVVRWVkb37t2jvLw8ysvLo0uXLhusl5aWitOt1NLSEqtXr47GxsZYvXr1BuuNjY2bDMS2luXLl0dbBxVzuVz07Nlzg5/hLrvsEvvss09UVVVFnz59NghGn+/IjiAoAQpYcXFx9O7dO3r37h2HH374Fi/f1NS01YEyf/78eP3117cYo21pKzRT14uLi6OoqCiKiooil8tttN7WeevWS0pKYu3atZHP56OlpSVaWlraXN/c15uamjYZf9u7vv6ewc0pKiraIAorKytbo3BLTwJ69OhhjyKZE5QAHUhZWVn06tUrevXqtc3fu36Mrly5cqNA2t6oWr58+VZdPsWgQYNi7ty5SddRXFy8VQFcXl4ePXr0+EJiuqKiIiorK2PnnXcWhbRrghKAiEiL0VT5fH6r9iJuan3t2rVb3Iu5NXs/ge0jKAHIXC6XE3XQjvnLBQAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgiaAEACCJoAQAIImgBAAgSS6fz+ezHqIt9fX1sXLlyhg4cGDWowAAsBkFG5QAALQPDnkDAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkOT/ANrlSDyZiN3rAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAHzCAYAAAAw1uYzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAALrklEQVR4nO3bTWhc9RrH8Sc3qS9xYcXZBCF2E2VSyCJKfakvBXFhEboTkRC6UVwoKda3TbW24KJYrejOgAYEISCIYAUl4KJBK0YQxaHNLksZcVdB2567uTfcXOVy77Vz0vz6+ezOGWae57/5cphJhpqmaQqALe9vm70AAJeGoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCDHS1qC1tbXq9/ttjQO4bHQ6nRofHx/4nFaCvra2Vt1ut86dO9fGOIDLyujoaPV6vYFHvZWg9/v9OnfuXL3//vvV7XbbGAlwWej1ejUzM1P9fj8j6P/U7XZrenq6zZEAVww/igKEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEnS1hz549deDAgYHO2LFjR504cWKgM2CQBB0ghKADhBB0tozz58/XU089Vddff311Op06dOhQNU1TVVW//PJLzc7O1g033FCjo6P10EMP1erq6ob3f/jhh7Vz5866+uqra8eOHXX8+PH/OG9+fr62b99eS0tLAzsTXEqCzpaxsLBQIyMj9fXXX9ebb75Zr7/+es3Pz1dV1f79++ubb76pjz/+uL788stqmqb27t1bv//+e1VVrays1COPPFKPPvpoff/993X48OE6dOhQvffee38669ixY/Xiiy/WZ599Vg888EBbR4S/pmnByspKU1XNyspKG+MIdP/99zfdbre5ePHi+r0XXnih6Xa7zdmzZ5uqapaXl9df6/f7zbXXXtssLi42TdM0jz32WPPggw9u+MznnnuumZycXL+++eabmzfeeKN5/vnnm7GxseaHH34Y8Km4ErTZP0/obBl33nlnDQ0NrV/fddddtbq6Wj/++GONjIzUHXfcsf7ajTfeWLfeemv1er2qqur1erV79+4Nn7d79+5aXV2tCxcurN87fvx4vfPOO3Xq1KnauXPngE8El5agw7+4995768KFC7W4uLjZq8D/TNDZMk6fPr3h+quvvqqJiYmanJys8+fPb3j9559/rjNnztTk5GRVVXW73VpeXt7w/uXl5brllltqeHh4/d6uXbvq008/rVdffbVee+21AZ4GLj1BZ8tYW1urZ555ps6cOVMffPBBvfXWWzU3N1cTExO1b9++evzxx+vUqVP13Xff1czMTN100021b9++qqo6ePBgLS0t1dGjR+vs2bO1sLBQb7/9dj377LN/mHP33XfXyZMn65VXXvGPRmwpI5u9APy3Zmdn69dff61du3bV8PBwzc3N1RNPPFFVVe+++27Nzc3Vww8/XL/99lvdd999dfLkydq2bVtVVU1PT9fi4mK99NJLdfTo0RobG6sjR47U/v37/3TWPffcU5988knt3bu3hoeH6+mnn27rmPB/G2qaf/wh7wB9++23ddttt9XKykpNT08PehzAZaPN/vnKBSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSDESJvDer1em+MANl2b3Wsl6J1Op0ZHR2tmZqaNcQCXldHR0ep0OgOfM9Q0TTPwKVW1trZW/X6/jVGwwYEDB6qq6sSJE5u6B1euTqdT4+PjA5/T2lcu4+PjrRwI/t327durqmp6enpzF4EB86MoQAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpAiJHNXgCuFHv27Kmpqam65ppran5+vq666qp68skn6/Dhw5u9GiE8oUOLFhYW6rrrrqvTp0/XsWPH6siRI/X5559v9lqEEHRo0dTUVL388ss1MTFRs7Ozdfvtt9fS0tJmr0UIQYcWTU1NbbgeGxurn376aZO2IY2gQ4u2bdu24XpoaKguXry4SduQRtABQgg6QAhBBwjh79ChJV988cUf7n300Uet70EuT+gAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QYapqm2ewlAPjrPKEDhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhPg7fcjbQcDz5T4AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "diagram = (Word('the', N << N) @ Word('book', N) >>\n", - " Id(N) @ Cup(N.l, N))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (determiner rule)')\n", - "draw(Rewriter(['determiner'])(diagram))\n", - "print('↓ normal form')\n", - "draw(rewriter(diagram).normal_form())" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Adverb rules" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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flc2DwgKYREok5KSlJ2drZUrV/rD4/jx47V9+3bt3bvXHzIfffRRbdq0STNnztSOHTtUXV2tt99+m4ty+oC4uDjde++9mjt3rtatW6ePP/5YpaWlcjgcsixLmZmZuv322/XAAw9o48aN2rlzp2bMmKHU1FTdfvvtdpcPwEC/fv1UWlqquXPnqqysTB999JFKSkrkcPz/t8CbbrpJixcvVlVVlbZt26YHH3yw0yOKM2fO1PHjx3XXXXdp27Ztqq6u1ooVK7Rnz542yw0aNEhlZWX65JNPNH369HYv2mk1ceJExcfH65e//KV++MMfmm840IvCIlBKZ8+j9Hq9/kDZv39/jRo1SoMHD/afJ5Odna2Kigrt3btXBQUFGjt2rJ544gn/hRkIb88995yuv/563XbbbZowYYLy8/M1cuRI/8VYS5cuVU5Ojm677TZdf/318vl8+te//tXpmwqA0PDss8+qoKBAkydP1oQJE3TjjTcqJyfHP3/hwoVKT09XQUGB7r77bs2ZM0cxMTEdrm/AgAEqKytTQ0ODCgsLlZOToyVLlrTbXwwePFhlZWX68MMPdc899/i/5u58DodDJSUl8nq9Ki4uNt9ooBdZvvNPGgkS27dvV05OjiorK4PiPrzBVk9PCudt60xjY6NSU1O1cOFClZaW2l2OLcL5fx/O24aeUVRUpDFjxuj555+3uxS/0tJSff3111q1apXdpSDIBHufFhYX5QBdUVVVpU8++UTjxo1TfX29nnrqKUniI20Atquvr9eHH36o1157jTCJkESgRJ+yYMEC7dmzR5GRkcrJydGGDRu4Ny8A291+++364IMP9OCDD+qWW26xuxzgkgV9oAyW7wAMljoCqS9s45IlS9o8bm5uNrpbRqjrC//zvrCN6J7nnntOkoKiD2itRQqOehB8gr0vC9pAmZycrJiYGP89uINBTExMWB7NCsa2Ru/heQ0AoSGY++ugvShHkmpqanTkyBGjdbz++utatGiR/+4DJpKTk8P2C9B7oq3/+Mc/6p133tE777zTQ1WhI08//bSqq6v1yiuvGK+L53XnWm/VGkwXboSr4uJiZWZm6vHHH7e7lLA3adIkTZo0SQ899JDdpYS96667TrNnz77o3ZK6Ipj766A9QimdvXuNacNt2rRJDocjKK+ICiY90dYpKSlyu920dS9ITk7WF198QVtf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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (postadverb rule)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cod = (N >> S) >> (N >> S)\n", - "diagram = (Word('we', N) @ Word('go', N >> S) @ Word('quickly', cod) >>\n", - " Diagram.cups(cod[:3].l, cod[:3]) @ Id(S))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (postadverb rule)')\n", - "draw(Rewriter(['postadverb'])(diagram))\n", - "print('↓ normal form')\n", - "draw(rewriter(diagram).normal_form())" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (preadverb rule)\n" - ] - }, - { - "data": { - "image/png": "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uvHGG5u8/qmnntJll13WJtngvqKjo/Xqq68qKytLGRkZKiwstDqSxzAMQ6tXr9agQYNUWVmpN954Q3a73epY8CAeXyglqVevXsrJydGoUaM0bdo0DRs2TB988IF++uknq6N1Wjt37tQjjzyigQMHaufOncrKytLvf/97q2PBTcTGxurQoUO69NJLrY6CTmbcuHH697//raNHjyo1NVX33HOPCgoKZBiG1dE6paqqKq1du1ajR4/WhAkTlJqaqry8PMXGxlodDR6mSxRK6ZfvIl2xYoWys7NVXV2tcePGKTw8XLfeequysrJ0+vRpqyO6tbq6Ou3YsUPz5s3TwIEDNXDgQC1evFhz587Vzp07deONN/L2FFzsdrv69Okjb2+P36sG7WDEiBHavn27FixYoLffflupqalKSEjQY489pry8PNXW1lod0a399NNPWrt2raZNm6aIiAhdd911OnjwoD766CN9+OGH6tevn9UR4YG6TKE8KyMjQ7m5uSouLtbDDz+sHTt2aPz48QoICFB8fLzGjRunJ554Qu+++6527dqlmpoaqyN3uNLSUn322Wd64YUXNGPGDA0dOlSBgYFyOBzKzMxUamqqPvzwQ5WUlOjpp5+Wv7+/1ZHRxioqKjRlyhT17NlTkZGRyszMlNPp1Jw5cyT9sivJ+ccBDA4Odh2TrrG3vL/++mtdf/31CgwMVEBAgNLT07V3795Gf/5XX32l3r1765lnnmlw3aZNm+Tj46PDhw/Xmz9nzhylp6e3+jnDvfj6+mru3Lk6fPiwPv30UzmdTr3yyisaPHiwaxemO++8U88995zWrVunw4cPd7mtmHV1dfr222+VlZWl+fPn6+abb1ZiYqJ69uyp6667Tlu2bNE999yjbdu2uf7/gPbSZTcfDBgwQI8//rgef/xx7d69W59//rmKiopUVFSkV155RUeOHJEkdevWTcnJyXI4HIqPj1evXr2anLp162bxs2paXV2dTp48qePHjzeYysrKVFJSoh07dqioqEiHDh2S9MuAfva533TTTRo0aJCGDx+u7t27W/xs0N7mzp2rjRs36sMPP1R4eLj+9Kc/KT8/v9X7Mf7www8aPny4nE6nNmzYoMDAQG3durXRF2wbNmzQ+PHjtXDhwkZ3oxg+fLguueQSvfnmm5o7d64kqbq6WitXrtTChQtblQ/uy8fHR6NG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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAADiCAYAAADwK1fJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAY7UlEQVR4nO3de1BU993H8c9yFVZABCxy0fFCyJpRUIz1UgLeGjVmtBptrY4SsZNkxrH2Ym3/SJtk4jjNE5tMapqZGBHH6DSNo8Y6pokjrpdEjSAQaxTRmiItmahBQIFw2+ePDFtRRODnchZ4v2Z22BvLd/F4znv37C42l8vlEgAAANBJPlYPAAAAgO6NoAQAAIARghIAAABGCEoAAAAYISgBAABghKAEAACAEYISAAAARghKAAAAGCEoAQAAYISgBAAAgBGCEgAAAEYISgAAABghKAEAAGCEoAQAAIARghIAAABGCEoAAAAYISgBAABghKAEAACAEYISAAAARghKAAAAGCEoAQAAYISgBAAAgBGCEgAAAEYISgAAABghKAEAAGDEz+oB2lJSUqJr165ZPQbgMZGRkRo0aJDVY3RbPW0dwfJgpqctD8CdvHkd4bVBWVJSIofDoerqaqtHATwmODhY586d89oVhDfriesIlofO64nLA3Anb15HeG1QXrt2TdXV1Xr33XflcDisHgd44M6dO6clS5bo2rVrXrly8HY9bR3B8mCmpy0PwJ28fR3htUHZzOFwaMyYMVaPAcBLsY7A7VgeAGvwphwAAAAYISgBAABghKAEAACAEYKyF/ryyy9ls9lUUFDQrutnZGRo7ty597z8hRdeUHJy8gOZDQAAdD9e/6YcPHjx8fEqKytTZGSk1aMAAIAegKDshXx9fRUdHW31GAAAoIdgl3c3dOvWLS1dulR9+/bVwIEDtWHDBqWnp2v16tWSJJvNpj179rT4nn79+ik7O1tS67u8z549q9mzZys0NFQhISFKTU3VpUuXWv35p06dUlRUlP74xz/eddmRI0fk7++vr776qsX5q1evVmpqaqfvM+Ap+/btU79+/dTY2ChJKigokM1m029/+1v3dVasWKElS5ZIko4dO6bU1FQFBQUpPj5eq1at0q1btyyZHfC0qqoqLV68WHa7XQMHDtRrr73WYntTXl6upUuXKjw8XMHBwZo5c6aKi4utHRqW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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "diagram = ((Word('we', N) @ Word('quickly', (N >> S) << (N >> S)) @\n", - " Word('go', N >> S)) >>\n", - " Cup(N, N.r) @ Id(S) @ Diagram.cups((N >> S).l, N >> S))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (preadverb rule)')\n", - "draw(Rewriter(['preadverb'])(diagram))\n", - "print('↓ normal form')\n", - "draw(rewriter(diagram).normal_form())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Prepositional phrase rule" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAChCAYAAAB55y8LAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZM0lEQVR4nO3deXDU9f3H8dc32RxssuTiSiThqDk2sCAElZRKI9iCjC1oRetgKYWJQzUqg3hNvbAtOlYNVEar0AL1plZtWpGRoZLKIQhWiRghUjGgEQkmhLACOb6/P5jsLyGHJN9svrvZ52PmO3t893jvJ9/v5/v6fna/3ximaZoCAAAAuijM7gIAAAAQ3AiUAAAAsIRACQAAAEsIlAAAALCEQAkAAABLCJQAAACwhEAJAAAASwiUAAAAsIRACQAAAEsIlAAAALCEQAkAAABLCJQAAACwhEAJAAAASwiUAAAAsIRACQAAAEsIlAAAALCEQAkAAABLCJQAAACwhEAJAAAASxx2F9CR8vJyVVZW9tj79evXT2lpaT32fl3R022C1oJhOZFYVgAEt2Doa8kp/y9gA2V5ebncbre8Xm+PvafT6VRpaWnA/rHsaBO0FujLicSyAiD4BXpfS05pKWADZWVlpbxer5577jm53W6/v19paamuv/56VVZWBuQfSur5NkFrwbCcSCwrAIJbMPS1zfvZwsJCZWRkaNGiRd32+kVFRXrsscdUXFwsKfDbJGADZRO3262xY8ee8+PnzJmj6upqvf766/4rymadbROELpYVdIe8vDxdcMEFWrp0qd2lAAHH7XYrNjZWAwYM6Nb+dvfu3QoPDw+aPpyDcgAAAGAJgRJ+cfz4cc2aNUsxMTFKTk5WYWGh8vLytGDBAklSVVWVZs+erYSEBDmdTl1++eUqKyuzt2gArcyZM0fFxcVatmyZDMOQYRg6cOCAiouLddFFFykqKkrJycm66667VF9fb3e5gG3q6+tVUFCguLg49evXT/fee69M05QknTp1SosWLdJ5552nmJgYXXzxxdq0aVOL569evVppaWlyOp268sordfToURs+RdcRKOEXCxcu1JYtW1RUVKQNGzbonXfe0fvvv++bP2fOHO3cuVNFRUXatm2bTNPUtGnTVFdXZ2PVAM62bNky5ebmKj8/XxUVFaqoqFBERISmTZumCy+8UB9++KGe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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (prepositional phrase rule)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cod = (N >> S) >> (N >> S << N)\n", - "diagram = ((Word('I', N) @ Word('go', N >> S) @ Word('to', cod) @\n", - " Word('bed', N)) >>\n", - " Diagram.cups(cod[:3].l, cod[:3]) @ Id(S) @ Cup(N.l, N))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (prepositional phrase rule)')\n", - "draw(Rewriter(['prepositional_phrase'])(diagram))\n", - "print('↓ normal form')\n", - "draw(rewriter(diagram).normal_form())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Relative Pronoun rules" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAACACAYAAAC1F/mYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAapklEQVR4nO3dfVRT9/0H8HcCQQmER3moIqAtgYABN2xXoVVWdNVuaKfFFrQ+1KqnE516cM6f0lq1tXbWh6o7bdFV3EOtWF13aj0+VVDBOUAUkYhVB6ijVRAEBAXC/f3h4R7SoAIXuCG8X+fkkISb5JNv7vebd76590YhCIIAIiIiIqIOUspdABERERH1bAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSS2chfwKCUlJSgrK+u2x+vXrx98fX277fE6orvbhIg6jmMKUcex/5iz5Dax2EBZUlICnU6H2trabntMtVoNg8FgsS+WHG1CRB3HMYWo49h/zFlym1hsoCwrK0NtbS3+9re/QafTdfnjGQwGTJkyBWVlZRb5QgHd3ybUMbNnz4ZWq0ViYiIAIDs7G3PmzEFaWho0Gk2H7/c3v/kN4uPjER8f31mlUhfimEItvfPOO6iursb69evlLqVHYP8xZ+ltYrGBsplOp8PPf/5zucuwKGwTy+bo6AhPT0/xNaqqqgIAhIWFwcXFpcP3a2dnBx8fH7721Ok4pnQ9d3d32NjYsJ2t0OP6T319Pezs7LqxInlY5E45TU1NSElJAQA8++yz8PX1xXvvvQcAOH/+PF544QXY29vD3d0ds2fPRk1NDQAgPz8fSqUSt27dAgDcvn0bSqUSr732mnjfq1evxnPPPQcAqKiowOTJk+Hh4YGIiAgAwL/+9a9ue55kfaZPn4709HRs2rQJCoUCCoUCRUVFAICcnBwMGzYMarUaERERKCwsFG935coVjB8/Hl5eXnB0dMTTTz+NI0eOiP+PiopCcXExFi5cKN4vEXWfpqYmrFmzBoMGDYK9vT3CwsKwZ88eAIDRaMTMmTPF/wUGBmLTpk3ibVesWIGUlBR8/fXX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nkJQUJBFz6aS9RkwYAAGDBhgchilhoYGFBYW4vvvv8ft27db7T/Xr183udzWzdja856sUqnM+snAgQMRGhpqcr27uzuCgoIwePBgi55N7Q69KlC2xsbGBgEBAQgICGjT8oIgoLa2Vvx03zzT+NNPPEajUfw01HJ24aezDU5OTnBzc4OjoyMUCkUXP1si6mpKpRKDBw/G4MGD27S8IAioq6tDRUUFKisrzcaUluNK85jy03Gk5XmNRgM3NzdoNBqOKdTjqFQqDBkyBEOGDGnT8oIgoLq6WvwWr7X34ubLzd8attZvmmc2nZ2d4erqCrVazf7TTr0+ULaXQqGAg4MDHBwcrH57CCLqegqFAmq1Gmq1mpusELWTQqGAk5MTnJyc5C6l17PKvbyJiIiIqPswUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEQkio6ORkFBAQRBkLsUoh4lJycHw4cPh6urq9ylEMmCgZKIRKNGjcKnn36K8PBwJCcno6amRu6SiCyW0WjEt99+i3HjxmHGjBnw9vbGU089JXdZRLJQCJyKoF7o1KlTiIiIQH5+PkJCQuQux6IcOnQImzdvxv79+9G3b1/87Gc/Q3h4uHgKCgqCra2t3GUSdStBEFBSUoKcnByTU1lZGYYOHYq33noL06dPh52dndylEsmCgZJ6JQbKxysuLsZXX32F7Oxs5OTk4NKlSwAAe3t7DB06FEFBQfDx8cHAgQNN/jo7O0OhUMhcPVH71dXV4fr167h+/TquXbsm/r169SrOnDmDsrIyAIC3tzfCw8MxbNgwjB07Fs888wzXeer1GCipV2KgbL87d+4gNzdXnJm5evUqrl27htLSUpNtLh0dHcWAOWDAALi5ucHZ2RnOzs5wcXERz//0pFKpZHx2ZE2MRiOqq6tx584d8VRZWWlyufm6//3vf2JwLC8vN7kfd3d3+Pj4wM/Pz2Smvn///jI9MyLLxUBJvRIDZedpaGhAaWlpqzM7N27cQEVFhfgGXldX99D7sbe3f2jYbHnSaDTo06cP7OzsoFKpYGdnZ3b+Uf9TqVRQqVScUepGgiDAaDSivr4eDQ0NqK+vF08tLz/sfPPlmpoas1DY2qm6uvqhtahUKpP1qX///q3OtPv4+MDe3r4bW4moZ+OGUEQkiUqlgq+vL3x9fR+7bH19fZsCQfPsUWVlJYqLi02uv3fvXqfV/bjg2daA2nze1tYWCoUCSqUSCoXisae2LNdyGbVajdraWgiCYHZqampq9fr2LtPY2PjYYNfWANjyfGfMXdja2pp9wHBxcUFAQMBjP4g0z4737duXHyaIugADJRF1Gzs7O3h4eMDDw6PD99HY2NjmYNMV5+vq6h66THNwelR4e1Soe9z/hg8fjlOnTrUpkHb0f7a2to8Nzmq1ul1BuzPOc2aZyLIxUBJRj2Jra8u9zImILAyPQ0lEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkCkEQBLmLICIiIqKeizOURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUny/7BzPZG2nhceAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (subject relative pronoun rule)\n" - ] - }, - { - "data": { - "image/png": "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eXl5mDZtGrp27Yoffvih3mEnTpyIiRMnWp4PHDiQtxMih5Ofn4+UlBR88MEH8PX1RadOncQuiUgUDJREZLFmzRoEBgZi9erVWLVqFXr16oV+/fohKioKUVFR6NSpE+RyHtggx5WXl4cjR47g8OHD+P333/Hvf/8bCoUCY8eOxdKlS9lCSQ5LJrBJgRzQwYMH0adPH5w8eRLh4eFilyM51dXV+Pbbb7F582YcPnwY2dnZAAAvLy88/vjjiIqKQpcuXRAYGIj27dsjMDAQnp6eIldN9HBUVVUhNzcXubm5uHTpEi5cuIAjR47gyJEjuHz5MgDAx8cHUVFRGDp0KCZMmABfX1+RqyYSFwMlOSQGysYpKCiwbFBrW2cuXbpkdYjb09PTKmC2b98e7dq1g6+vL7y8vODl5QVvb29Lv7Ozs4hTRI7EaDSirKwMpaWlVo+SkhJcuXLFEhxru9evX7f6vEajQWRkJKKiotCjRw9ERUUhODgYMplMpCkikh4GSnJIDJT2q66urrMxvnvDnJeX1+B5lSqVyhIuG/Pw8PCAi4sLnJ2doVQq4ezsbOlXKBTcyDdzZrMZ1dXVqKmpQXV1teVRU1ODmzdv1gmFtjxu3rzZ4Ph8fHzq7AgFBgZa7RS5u7s34Rwgap54DiURPRBnZ2cEBwcjODi4wWGMRqNNG/ySkhJLf25urtV75eXlNtckk8msAub9+h/2cE5OTpDJZJDL5ZDJZPd92DLcncPI5XKYzWYIglDn0dDrjR3GaDRahbn6gt39+u0ZzmQyNWoZrG+no23btjbvoKhUKpvHR0QNY6AkokfGyckJGo0GGo3mgb+jpqbG6nDljRs3bA4stoacqqoqy/c25rubWp8+fZCWltbk43VycnqggO3u7t7ozzQ0HqVSCTc3N4ZBIolioCQiSVMqlXaH0kehtjXvzoBZU1Nz39bAe7US3u89mUwGQRBsauF80PecnJyswpxSqeSV/UR0XwyUREQPQCaTWQIXbxVDRI6Ou51EREREZBcGSiIiIiKyCwMlEREREdmFgZKIiIiI7MJASURERER2YaAkIiIiIrswUBIRERGRXRgoiYiIiMguDJREREREZBcGSiIiIiKyCwMlEREREdmFgZKIiIiI7MJASURERER2YaAkIiIiIrswUBIRERGRXRgoiYiIiMguDJREREREZBcGSiIiIiKyCwMlEREREdmFgZKIiIiI7MJASURERER2YaAkIiIiIrswUBIRERGRXRgoiYiIiMguDJREREREZBeZIAiC2EUQNbUbN24gIyMD3bt3h6urq9jlEBERNWsMlERERERkFx7yJiIiIiK7MFASERERkV0YKImIiIjILgyURERERGQXBkoiIiIisgsDJRERERHZhYGSiIiIiOzCQElEREREdmGgJCIiIiK7MFASERERkV0YKImIiIjILgyURERERGQXBkoiIiIisgsDJRERERHZhYGSiIiIiOzCQElEREREdmGgJCIiIiK7MFASERERkV0YKImIiIjILgyURERERGSX/wdhyJ8mlwjz9AAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cows = Word('cows', N)\n", - "that_subj = Word('that', N.r @ N @ S.l @ N)\n", - "that_obj = Word('that', N.r @ N @ N.l.l @ S.l)\n", - "eat = Word('eat', N >> S << N)\n", - "grass = Word('grass', N)\n", - "\n", - "rewriter = Rewriter(['subject_rel_pronoun'])\n", - "\n", - "diagram = Id().tensor(cows, that_subj, eat, grass)\n", - "diagram >>= Cup(N, N.r) @ Id(N) @ Diagram.cups(S.l @ N, N.r @ S) @ Cup(N.l, N)\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (subject relative pronoun rule)')\n", - "draw(Rewriter(['subject_rel_pronoun'])(diagram))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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aRkGGlJGRkaNx6BnZGQoPj5eAQEB7nEJCQlyuVzuQzUGDx7s/ooyOTlZQ4YM0aBBg5SUlKT9+/erpKTEfejSb37zG61fv1733nuvpPJDkNC8/ec//9GlS5d00003yeFwuId33nnH/fn6+9//Xv369VNYWJgcDodWrFhBn9aCeVSgvFqXd3KS9Pnnn2vMmDEaPny4PvroI6WmpurZZ5+t1FnOnTtXX375pW677Tbt2LFDvXr10ubNmyWVf93z4YcfSipfSfr37+/+agZoKBWHWEhyHwNZcQzb7NmztXnzZi1cuFC7d+/WwYMH5XQ6OekMjaZt27ampk9MTFR6err+/e9/Kz09XTfccIMSExOVlJSk5ORk9/HCknTrrbcqKytL9913n6TygDl79mzT8wDrVBxPu2XLFh08eNA9pKena9OmTVq/fr1mz56tyZMna+vWrTp48KAmTpxIn9aCeVSgvOaaa+Tj46P9+/e7x+Xn5+vYsWO1Trd3715FR0fr2WefVf/+/dW9e3dlZWVVeV6PHj00a9Ysbd26VaNGjap0UHhERISk8uMzH3vsMa1cubKB5gqtja+vr8rKyuo0zZ49ezRhwgT96le/ktPpVEREhPtkHjOvC9Ske/fuatOmTbWPxcbG6tChQ7p48aJ73J49e2S3293fGDmdToWEhGjBggXq06ePHA6HEhMTlZycrKSkJPfxkxXCwsI0YsQISdJjjz2mFStWNM6MoUn06tVLbdq0UXZ2trp161Zp6Ny5s/bs2aOBAwdq+vTp6tu3r7p161bpm0GJPq2l8ahAGRgYqPHjx+vxxx93h8r58+fLbrfXelZr9+7dlZ2drfXr1yszM1Nvv/22e++jJBUUFGjGjBlKSkpSVlaW9uzZo/3797svWDtz5kzt3btXUvlXPTt37uRitqi3mJgY7du3T998841Onz7t3gtZm+7du+u9997TwYMHdejQId13331VpouJidGuXbv03Xff8ZNwMM3Pz08TJkyQJH300UfKzMzUv/71L/3xj3/UmDFj5Ofnp/Hjx+vIkSPauXOnHn74YY0bN07h4eGSyveyDxo0yH0lDqn8sI6ioiJt375dgwcPdr/X888/rw8++EA5OTmSyk/ioY9t3gIDAzV79mzNmjVLa9euVWZmpr744gstWbJEa9euVffu3XXgwAF98sknOnbsmObMmVNpZ5FU3qcdPnxYR48e1enTpytdmQXNj0cFSkl64403dP3117sv4xMfH6/Y2Fj5+fnVOM3tt9+uWbNmacaMGerTp4/27t3rPvtbkry8vHTmzBndf//96tGjh0aPHq1bb71V8+bNk1R+eYNXXnlFkvTwww+rR48eWrZsWePNJFq02bNny8vLS7169VJYWNhVHTP0xhtvKCQkRAMHDtSIESM0bNiwKhdUfvHFF/XNN9+oa9euCgsLa6zy0YpMmTJFUvmx47Gxsbrnnnt06tQp+fv765NPPtHZs2c1YMAA3XXXXRo6dKj7rPAKgwcPVllZmTtQ2u12DRo0SDabzX38pFS+J+rpp5/WPffc437e+vXrm2Ym0Wjmz5+vOXPmaNGiRYqNjdUtt9yiLVu2qEuXLpo2bZpGjRqle+65R9ddd53OnDmj6dOnV5p+6tSp6tmzp/r376+wsDDt2bPHojlBg7D6rKCaVJzN9Nlnnxnt2rUzVq1a1STv56lnTxlG86gRQLnmsL42dY3NoU0Mo/nUidbF05dLj/vpxdTUVH311Vfug7kfffRRlZWVKSYmpsr1KBtSRkZGo712Q2tOtQKtVXNaT5uq1ubUJlLzqxctm6cvjx4XKKXyE2O++uorSeW/LiJJN954Y6O/r7+/v0dfbDc0NFT+/v4aO3as1aUAuAr0KVV5eptI9LXwXJ68/tgMwzCsLqIm2dnZdT75YOrUqQoPD9eCBQvq/H6hoaGKioqq83RNqT5tsnLlSm3cuFFbt25tpKqan8OHD2vixIl699131bVrV6vL8RgJCQmaMWOG+3qBkPt47rfeeqvO07bUPuVvf/ubli5dWq9j3ppDm0h1b5fMzEyNHj1aq1evrnTN2dbu5ptv1t13362pU6daXYrHeO6553Ty5Ml6XU3Gk9cfj9xDWSEqKqrODRcYGKgOHTpUOaGhpahPm3Tq1Ek+Pj4ttk3qo6ioSFL5pS/i4uIsrsZz2O12de7cmWXlMsHBwZLUYtukPn3KZ599Jrvd3mLbRKp7u1Rcgqlnz54tul3qysfHR506daJNLtOhQwddunSpxbWJx53lDaB5mzBhgkaOHFnj42vWrHGHtJYuKSlJNptN58+ft7oUAC3IlfpZKxAoAQAAYAqBEvXCz2cBQOOjr0Vz0SoCZWJioh555BE98cQTat++vSIiIjR37lyry7JUXdukYvf6Sy+9pE6dOrl/fq0lYTmpHu1S1aZNm+R0OtW2bVt16NBBN954Y6WfKWyNWE6qR19bFetPVS1h/WkVgVKS1q5dq4CAAO3bt0+vvvqqXnzxRX366adWl2WpurbJ9u3bdfToUX366af66KOPmrDSpsNyUj3a5QfHjx/Xvffeq0mTJikjI0NJSUkaNWqUPPiCGU2G5aR69LU/YP2pWXNffzz6LO+G1Lt3b73wwguSyn83eenSpdq+fbtuuukmiyuzTl3bJCAgQKtWrZKvr29TltmkWE6qR7v84Pjx4yotLdWoUaMUHR0tSXI6nRZX5RlYTqpHX/sD1p+aNff1p9XsofzxdcE6duyoU6dOWVSNZ6hrmzidzhbZwV2O5aR6tMsP4uPjNXToUDmdTt19991auXKlzp07Z3VZHoHlpHr0tT9g/alZc19/Wk2g9PHxqXTfZrPJ5XJZVI1nqGubBAQENHZJlmM5qR7t8gMvLy99+umn+uc//6levXppyZIl6tmzp77++murS7Mcy0n16Gt/wPpTs+a+/rSaQAkADcVmsykhIUHz5s1TamqqfH19tXnzZqvLApoF1p+WiUCJat1///16+umnrS4DzcCVlpWlS5dq6NChTVhR49q3b58WLlyoAwcOKDs7W++9956+//57xcbGavPmzfrZz35mdYloRlpbX1vb+oOaNYflpNWclIO6yc7Olt3O9gau7ErLyunTp5WZmdmEFTWuoKAg7dq1S2+99Zby8vIUHR2t119/XbfeeqvWrFmjo0ePWl0impHW1tfWtv6gZs1hObEZLexc/WnTpunUqVPsPr/MrFmzlJGRoY8//tjqUjzG559/roEDB+rIkSP8lvdlAgICtGjRIj3yyCNWl+Ixbr/9dknShx9+aHElnmPDhg168sknlZaWpsDAQKvL8Qg7duzQtGnT9Pe//5291Jfp2LGjpk+frjlz5lhdiscYN26ccnJylJSUZHUpDcqz4249xMfH6/333yc8/b/09HQtX76cDg5AgxkwYIBOnTqlxx9/3OpSPEJJSYmeeuopGYahLl26WF0OYIkWFygffPBBDRs2THfeeacWLVqkoqIiq0uyhMvl0p/+9CcNHjxYXbp00cKFC60uCUALcc011+jNN9/UH/7wB40ePVrffvut1SVZJiUlRTfccINSU1O1bt06tWnTxuqSAEu0uEBp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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (object relative pronoun rule)\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAC7CAYAAADbqg72AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAqPUlEQVR4nO3de1hUdf4H8PdcmAEGhxkwURDBC964qcN6gxLF1txNM9bK1MTK9eHR3S6mtv5aBa00XZV2s23b3FZyt3XJssxLZSpravEgWoEiiaaYmYgMF7kNzMzvDx9OILfBMzNnGN6v5znPnDmXmc8Xzsx5z/fMOSOzWq1WEBERERHdIbnUBRARERFR18ZASURERESiMFASERERkSgMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJopS6gPYUFRWhpKTE7o/bs2dP9OvXz+6PS0REzuHu+wdHtY+6NlfZPlvjsoGyqKgIw4YNQ3V1td0f29vbG/n5+S77TyEicobc3Fx88MEHKCsrg06nQ2JiIiIjI6Uuq0Puvn9wZPuoa3OF7bMtLhsoS0pKUF1djX/9618YNmyY3R43Pz8fc+fORUlJiUv+Q4iIHK2wsBBJSUk4fvw4FAoF5HI5LBYLUlNTERsbi23btmHQoEFSl9kmd98/OKp97iYlJQWVlZXYvHmz1KU4hatsn21x2UDZaNiwYRg1alSzaSaTCSqVSqKKiIi6rsLCQowZMwbl5eUAALPZDLPZLMz/6quvMGbMGGRlZbl0qARa3z+4E3dvn1j+/v5QKBT8G7kIlzgpp7KyEnPmzIFGo0GfPn2QlpaGhQsXCvNDQ0Px4osvYt68edBqtcK8559/HoMHD4a3tzcGDBiAlStXor6+Xljvm2++wcSJE9GjRw9otVoYDAacOXMGAHD16lVMmzYNer0eGo0G4eHh2Ldvn3MbTkTkZElJSSgvL28WIpsym80oLy/H/PnznVtYOywWCzZs2IBBgwZBrVbjV7/6lTAvNzcXkyZNgpeXF/z9/bFw4ULcvHkTAJCXlwe5XI7r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fft2WK3WdtcpKirC1atXnVRh51itVnzyyScYM2YM5s+fj0ceeQQLFy7s1GN01L6SkhKcP39ebKlEROQkMmtHezYiB1uxYgUyMjLcPkB88803SElJwUcffQR/f38YDIZmQ0hICGQymdRltnDt2jXk5OQgJycHJ06cQE5ODq5cuYJx48bhxRdfxKRJk1yybnuZPn06AGD37t0SV0JE7katViMtLQ2LFi2SuhTReGFzIieJjo7Ghx9+iJycHOzZswc5OTlIT0/HunXrAEAImYMHD4Zer2938Pb2FhXiamtrYTQa2x2+//57ITwCgF6vh8FgwNy5czF58mQkJCS4dZAkIiLbMVASOVljj2Sjq1evCj2AOTk5OHToEEpLS1FWVoba2tpWH0Mmk0GpVEIulzeb1sjDw0P4vmbjQYjG24aGhjZPEFKr1fD19YVer0dwcDDmzp2LmJgYGAwGhIaGMkASEVGrGCiJJGK1WnHhwoVmh5NPnjyJsrKyVpf38fGBRqOBl5cXVCpVs0B5e9BrGigbnwsALBYLzGYzTCYTamtrUVVVhcrKSmF+XV0diouLUVxcjMuXL6O6urrZMHToUCgUCgf8NYiIqCtjoCRyopqaGrz11lvYvXs3Tp48CaPRCADo27cvYmJi8NxzzwmHvP38/IRD3Fqt1mFBzmKxoLKyss1D3p988glee+01AIC3tzdGjBiByZMn4+mnn4afn59DaiIioq6FgZLICerq6rB161asXbsW165dw9SpU7FkyRLh8HevXr0kq00ul8PX1xe+vr4IDQ1tdZny8nKcPHlS6EnduHEjXn31VTz77LN45plnoNPpnFozERG5FgZKIgezWq34zW9+g3379mHOnDlYtWoVwsLCpC6rU3x9fTFx4kRMnDgRwK0zvzds2ID169cjIyMDJ06cgLe3t8RVEhGRVHgdSiIH+/e//429e/fio48+wvbt27tcmGxNQEAANm3ahOzsbHz//fd46aWXpC6JiIgkxEBJ5GBXrlzBjBkzMG3aNKlLsbuIiAg88cQTKC8vl7oUIiKSEA95EzlYUVERLl26JHUZDlNRUYHLly9LXQYREUmIPZREREREJAoDJRERERGJwkBJ1AXMnz8fM2bMaHP+tm3buvSlezpqHxERuTYGSiIiIiIShYGSiIiIiEThWd5EEoiPj0dUVBQ8PT2xdetWqFQqJCcnIzU1VerS7MLd20dERM2xh5JIIunp6dBoNMjKysKGDRuwZs0aHDhwQOqy7Mbd20dERD9joCSSSFRUFFJSUhAWFoZ58+YhJiYGBw8elLosu3H39hER0c8YKIkkEhUV1ex+nz59UFxcLFE19ufu7SMiop/xO5REEvHw8Gh2XyaTwWKxSFTNnevbty8aGhpaTHeX9vXs2RM+Pj5Sl0FE5NLYQ0lEomi1WnzwwQc4ffq01KXY3fnz55GRkQGNRiN1KURELo2BksgFzZs3DytWrGhz/pYtW5CQkODEitr2zDPPICwsDHfffTfWrVuHmzdvdrhOR+2TWk1NDTZv3oxx48YhICDApWslInIFPORN5IKKioogl7f9ea+kpATnz593YkVt8/LywoEDB/Dyyy8jJSUFaWlpUKvV8Pb2xvnz5zFgwADIZLJm63TUPmezWq24dOkScnJykJ2djXfeeQfFxcV4/PHHsXLlSmi1WqlLJCJyaTKr1WqVugjq3lasWIGMjAyXCUj2tnjxYnz55Zc4efKk1KU4XFFREdauXYt9+/bh8uXLAACdTodRo0YhJiYGBoMBgwYNgl6vh16vh1ardVqwtFqtqKiogNFohNFoxIULF3DixAnk5OQgJycHpaWlAIDAwEBMmTIFL7zwAgYOHOiU2oioe1Kr1UhLS8OiRYukLkU09lASkd3069cPf/vb3wAAxcXFOHnypBDa/vOf/2DDhg3NlpfL5dDpdELAbDrodDp4eHhAoVBAoVBAqVQK4wBgNpthNpvR0NAgjNfX16O8vFwIjbcPt58UFBgYiJiYGDz99NMwGAwwGAzo3bu3c/5YRERuhIGSiByiV69euO+++3DfffcJ04qLi3H58mWUlpa2GfpKSkpw7tw5lJeXo6GhoVlgbBxXq9VoaGhoETSVSiV8fX2h1+vh5+eHfv36tQiqfn5+0Ov16Nu3L8MjEZGdMFASkdP06tULvXr1kroMIiKyM9f5VjwRERERdUkMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlkRPU1dXBYrFIXQYREbmIuro6WK1WqcuwG6XUBRC5u1//+td44403MGTIEEyfPh2RkZGIjIzEsGHD4O3tLXV5RETkBOXl5cjLy0Nubi6+/fZbvP/++1AqlZg8ebLUpdkFAyWRg02dOhXHjh3DX//6V3z44YfYvHkzAEAmk2HQoEEYMGAA/P394efnB39//zbHfX19IZPJJG4NEREBgNlsRllZGW7cuIHS0lLcuHGj1fGSkhJ89913uHz5MgBAoVBgyJAheOihh7B48WIMHjxY4pbYBwMlkYPJZDKMGzcO48aNAwDcvHkTZ86cQW5uLnJzc3H58mVcuXIFubm5wptQXV1di8dRKBTw8/PrMHj6+fnB29sbarUanp6eUKvVLcY9PDwYTomo27FarTCZTKirq0NtbS3q6uqEofF+VVVVq+Hw9vtlZWWtHrLWaDQt3ptnz56NyMhIREREYOjQoVCr1RK03rEYKImczMfHB6NHj8bo0aNbnW+1WlFTU2PTG9q5c+fw1VdfCdNt/Z6mTCZrNWi2NW7rcp0dZ7glcn9NQ9ztQU7M+J2uYysPD48WH9zDw8M7/EDv6enpwL+m62KgJHIxMpkM3t7e8Pb2RnBwsM3rWSwWVFRUoLS0FDU1NXZ7Q66trUVZWZlN69xpe1sLmwqFAgqFAnK5vM3bO53nLuvLZDIhjDvq1t6PabVahfuNvTuOurX3Y1qtVpjNZlgslha3rU3rzDJSr2+v52hoaBAV4ppqfG+w5cOtp6cndDqdXT4Qe3t7w9/fHz4+Pvyw2wkMlERuQi6XQ6fTQafTSfL87fVC3ElPgtidY0NDA0wmkyQ7V57R3zZ/f3/cuHFD6jJcmtQfYlQq1R2vr1Qq7XbkQ6lUMtB1IQyURGQXTXsau7vG3ixH9xY1BteOetU6WsaZt005unfV3rfOCHRyOa/mR10TAyURkZ01Hopu7LEhInJ3/ChERERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlEREREYnCQElEREREojBQEhEREZEoDJREREREJAoDJRERERGJwkBJRERERKIwUBIRERGRKAyURERERCQKAyURERERicJASURERESiMFASERERkSgMlEREREQkCgMlEREREYkis1qtVqmLoO7NbDbDarVCqVRKXQoRERHdAQZKIiIiIhKFh7yJiIiISBQGSiIiIiIShYGSiIiIiERhoCQiIiIiURgoiYiIiEgUBkoiIiIiEoWBkoiIiIhEYaAkIiIiIlEYKImIiIhIFAZKIiIiIhKFgZKIiIiIRGGgJCIiIiJRGCiJiIiISBQGSiIiIiIShYGSiIiIiERhoCQiIiIiURgoiYiIiEgUBkoiIiIiEoWBkoiIiIhEYaAkIiIiIlEYKImIiIhIFAZKIiIiIhLl/wGvRvd/pp36WQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "diagram = Id().tensor(grass, that_obj, cows, eat)\n", - "diagram >>= Cup(N, N.r) @ Id(N) @ Id(N.l.l @ S.l) @ Cup(N, N.r) @ Id(S @ N.l)\n", - "diagram >>= Id(N) @ Diagram.cups(N.l.l @ S.l, S @ N.l)\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (object relative pronoun rule)')\n", - "draw(Rewriter(['object_rel_pronoun'])(diagram))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Coordination" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewriting (coordination rule)\n" - ] - }, - { - "data": { - "image/png": "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V61apfhDzYmIXAUDJRHRY9LS0pCTk4OoqCgAD/+0rVKppDuwo6KikJOTg7S0NAWrJCJyLbyGkoioCUIIHDx4EAsXLoTVasUbb7yB8ePH45VXXuGfuYmInsBASUTUgtdeew0AsG/fPoUrISJyXfyTNxERERHJwo9lICJqgYcHj7uJiJ6FgZKIqAUtffY2ERE9xENvIiIiIpKFgZKIiIiIZGGgJCIiIiJZGCiJiIiISBYGSiIiIiKShYGSiIiIiGRhoCQiIiIiWfgcSiKiF5SQkIC4uDh4e3sjOzsbXl5eWLBgAdLS0pQujYioXfEMJRGRDNu3b4dOp8Px48exfv16pKenIz8/X+myiIjaFQMlEZEMcXFxWLVqFaKjo5GSkoKhQ4fi4MGDSpdFRNSuGCiJiGSIi4tzeN29e3fcunVLoWqIiJTBQElEJIOnp6fDa5VKxc//JqJOh4GSiIiIiGRhoCQiIiIiWRgoiYiIiEgWPoeSiOgFHT58+Kl5e/bsafc6iIiUxjOURERERCQLAyURERERycJASURERESyMFASERERkSwMlEREREQkCwMlEREREcnCQElEREREsjBQEhEREZEsDJREREREJAsDJRERERHJwkBJRERERLIwUBIRERGRLAyURERERCQLAyURERERycJASURERESyqIQQQukiiIhc1fHjxwEAI0aMULgSIiLXxUBJRERERLLwT95EREREJAsDJRERERHJwkBJRERERLIwUBIRERGRLAyURERERCQLAyURERERycJASURERESyMFASERERkSwMlEREREQkCwMlEREREcnCQElEREREsjBQEhEREZEsDJREREREJAsDJRERERHJwkBJRERERLIwUBIRERGRLAyURERERCQLAyURERERyfI/ivdTNygaXDUAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "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LB5++OHo0qXLIb9Bp7S0NLp06RK//e1vxSRQ0AQlUPC6desWS5cujaqqqigqKjrgoes961RVVcWyZcuia9euzTQpQH4SlADx/1FZU1MTVVVVERF77bHcs3ziiSfG7bffHkuXLhWTAOEcSoC95HK5WLJkSdxzzz3xi1/8Inbt2hXDhw+Pbt26xYUXXhhDhw71BhyAtxCUAPtxzjnnRETEr3/964wnAchfDnkDAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkERQAgCQRFACAJBEUAIAkKQ06wEA8lm7du2yHgEg7wlKgP3YsWNH1iMA5D2HvAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASCIoAQBIIigBAEgiKAEASFKa9QAAhWLEiBFRXV0d7dq1ix/96EfRpk2bmDRpUkydOjXr0QCS2EMJ0Ixmz54d7du3j6VLl8aNN94Y3/rWt+KRRx7JeiyAJIISoBlVV1fHtddeG717946LLrooTj311HjssceyHgsgiaAEaEbV1dWNlrt27RobNmzIaBqApiEoAZpRWVlZo+WioqKor6/PaBqApiEoAQBIIigBAEgiKAEASOJzKAGayeOPP77Xdb/85S+bfQ6ApmYPJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJSrMeACCfffjDH856BIC8V5TL5XJZDwEAQMvlkDcAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEkEJQAASQQlAABJBCUAAEn+D1gB1Vu/tCkjAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "diagram = (Word('eggs', N) @ Word('and', N >> N << N)\n", - " @ Word('ham', N) >> Cup(N, N.r) @ Id(N) @ Cup(N.l, N))\n", - "\n", - "draw(diagram)\n", - "print('↓ rewriting (coordination rule)')\n", - "draw(Rewriter(['coordination'])(diagram))\n", - "print('↓ normal form')\n", - "draw(Rewriter(['coordination'])(diagram).normal_form())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Remove cups" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ remove cups by bending wires\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAEFCAYAAABdHXdHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAV9UlEQVR4nO3debCVBf0/8PcVXLgI44IrA4QLiAoq5lg6NuaKJuKoqAyuuWSpZEEqOZoGCDK5lWO5xWjCiOUSbqlDkqIGCYKmhAQXFaMEtSEkWc/vD0d+Meo37YHz3HPP6/UX9z7Pc3gfhsvnfT/nPJeGSqVSCQAA/I82KjsAAAC1TaEEAKAQhRIAgEIUSgAAClEoAQAoRKEEAKAQhRIAgEIUSgAAClEoAQAoRKEEAKAQhRIAgEIUSgAAClEoAQAoRKEEAKAQhRIAgEIUSgAAClEoAQAoRKEEAKAQhRIAgEIUSgAAClEoAQAoRKEEAKAQhRIAgEIUSgAAClEoAQAoRKEEAKAQhRIAgEJalx2gDLNnz86iRYvKjgEA8Lk0NDTkgAMOSENDQ9lRPlXdFcrXX389vXr1yooVK8qOAgDwuY0fPz4nnXRS2TE+Vd0VysWLF2fFihV5+OGHs8suu5QdBwDg/3TPPfdkxIgR2X333cuO8pnqrlB+bKeddspuu+1WdgwAgM+0cuXKjB07Nv3798+ee+5ZdpzPVLeFEgCgubv77rszf/78PPzww2VH+T+5yxsAoBlauXJlhg8f3uy3k4kNJQBAs1Qr28nEhhIAoNmppe1kYkMJANDs1NJ2MrGhBABoVmptO5nYUAIANCu1tp1MbCgBAJqNWtxOJjaUAADNRi1uJxMbSgCAZqFWt5OJDSUAQLNQq9vJxIYSAKB0tbydTGwoAQBKV8vbycSGEgCgVLW+nUxsKIE6c/DBB2fvvffOjTfeWHYUgCS1v51MbCgBAErTEraTiQ0lAEBpWsJ2MrGhBOrY+++/n9NPPz1bbrllGhsbc9RRR2XOnDlJkiVLlqRNmzZ5/PHH17nmwQcfTLt27bJs2bIkyVtvvZWTTjopW2yxRbbaaqv069cv8+fPr/ZTAWpQS9lOJgolUMfOPPPMvPjii5kwYUJeeOGFVCqVHH300Vm5cmXat2+fY445JuPGjVvnmrFjx+a4445LY2NjVq5cmSOPPDLt2rXLs88+m+eeey6bb755+vTpkxUrVpT0rIBa8fF28sorryw7SmFe8gbq0pw5czJhwoQ899xzOeCAA5J8VBY7deqUhx56KP3798/AgQNz2mmnZdmyZWlsbMySJUvy6KOP5sEHH0ySjB8/PmvWrMkdd9yRhoaGJMmYMWOyxRZbZNKkSTniiCNKe35A89aStpOJQgnUqVmzZqV169bZf//9135u6623Tvfu3TNr1qwkydFHH52NN944EyZMyCmnnJL7778/7du3z2GHHZYkmTlzZv7617+mXbt26zz2hx9+mLlz51bvyQA1p6W8d/JjCiXAZ9hkk01y4oknZty4cTnllFMybty4nHzyyWnd+qN/OpcuXZp99903Y8eO/cS122yzTbXjAjWipW0nE4USqFM9evTIqlWrMmXKlLUveb/77ruZPXt2dt9997XnDRw4MIcffnheffXV/P73v8/w4cPXHuvdu3fGjx+fbbfdNu3bt6/6cwBqU0vbTiZuygHq1K677pp+/frl3HPPzeTJkzNz5syceuqp6dixY/r167f2vK997WvZfvvtM3DgwHTt2nWdl8gHDhyYDh06pF+/fnn22WfT1NSUSZMmZdCgQVmwYEEZTwto5lridjJRKIE6NmbMmOy777455phj8tWvfjWVSiWPPfZYNt5447XnNDQ0ZMCAAZk5c2YGDhy4zvWNjY155pln0rlz5xx//PHp0aNHzj777Hz44Yc2lsCnakl3dv+nhkqlUik7RDU9//zzOfDAA/Pqq6+u87IWAMCGtHLlynTr1i377bdf7rvvvrLjrFfeQwkAUAUt8b2TH/OSNwDABtZS3zv5MRtKAIANrCVvJxMbSgCADaqlbycTG0oAgA2qpW8nExtKAIANph62k4kNJQDABlMP28nEhhIAYIOol+1kYkMJALBB1Mt2MrGhBABY7+ppO5nYUAIArHf1tJ1MbCgBANarettOJjaUAADrVb1tJxMbSgCA9aYet5OJDSUAwHpTj9vJpI4L5W233ZZtt9227BgAQAty66231t12MkkaKpVKpewQ1bR48eIceeSRWbBgQdlRPrcVK1Zk+fLladeuXdlRoO4sW7YsSdLY2FhyEqg///rXv7Lppptmk002KTvKFzJx4kSFkuZn1KhRue6667Jo0aKyo0DdOfbYY5MkEyZMKDkJ1J9tttkmgwcPzmWXXVZ2FP4LN+UAAFCIQgkAQCEKJQAAhSiUAAAUolACAFCIQgkAQCEKJQAAhSiUAAAUolACAHXnzDPPzHHHHVd2jBZDoQQAoBCFknWsWLGi7AgAQI1RKFuYgw8+OIMGDcoll1ySrbbaKttvv32uuuqqzzz/45X/iBEjsuOOO6Z79+7VCwst0G9+85v07Nkzbdq0ydZbb53DDjssH3zwQdmxoMX7ovOP9UuhbIHuuuuutG3bNlOmTMno0aPz4x//OE899dRnnj9x4sTMnj07Tz31VB555JEqJoWWZeHChRkwYEC++c1vZtasWZk0aVKOP/74VCqVsqNBXfii84/1p3XZAVj/evXqlR/96EdJkl133TU333xzJk6cmMMPP/xTz2/btm3uuOOObLLJJtWMCS3OwoULs2rVqhx//PHp0qVLkqRnz54lp4L68UXnH+uPDWUL1KtXr3U+3mGHHfLOO+985vk9e/ZUJmE92GuvvXLooYemZ8+e6d+/f26//fa8//77ZceCuvFF5x/rj0LZAm288cbrfNzQ0JA1a9Z85vlt27bd0JGgLrRq1SpPPfVUHn/88ey+++752c9+lu7du6epqansaFAXvuj8Y/1RKAHWo4aGhhx44IG5+uqr89JLL2WTTTbJgw8+WHYsgA3KeyjrzOmnn56OHTtm5MiRZUeBFmfKlCmZOHFijjjiiGy77baZMmVKFi1alB49epQdDeqe+bdhKZR15s0338xGG1lMw4bQvn37PPPMM7nxxhuzZMmSdOnSJdddd12OOuqosqNB3TP/NqyGip9n0eyNGjUq1113XRYtWlR2FKg7xx57bJJkwoQJJSeB+rPNNttk8ODBueyyy8qOwn+hqgMAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIa3LDlBtlUolM2bMSKVSKTvK57Zw4cIkyfTp00tO8sV06NAhnTt3LjsGAKnN+Zd8NAPNv+avoVJrf7MKeuKJJ9KnT5+yY9SFxsbGzJo1q+6+qGhZjj322CTJhAkTSk4CxZh/1VOP86+uNpSVSiXDhg3Lfvvtl1/84hdlx2nRZs2alVNPPTWLFy+uqy8ogObI/Kueep1/dVUoJ02alOeeey4PP/xwevfuXXYcAKgK848Nra5uyhk2bFj22WeffOMb3yg7CgBUjfnHhlY3G8rJkyfn6aefzgMPPJCGhoay4wBAVZh/VEPdbCiHDRuWPffcM/369Ss7CgBUjflHNdTFhnLq1Kl58sknc++992ajjeqmQwNQ58w/qqUu/nYNGzYs3bt3z4knnlh2FACoGvOPamnxG8qXXnopjzzySO6+++60atWq7DgAUBXmH9XU4jeUw4cPz84775wBAwaUHQUAqsb8o5pa9IbylVdeyQMPPJA777wzrVu36KcKAGuZf1Rbi95QjhgxIl26dMlpp51WdhQAqBrzj2prsd+2/OUvf8l9992XW265JRtvvHHZcQCgKsw/ytBiN5TXXHNNdtxxx5x11lllRwGAqjH/KEOL3FDOnTs348aNy/XXX59NN9207DgAUBXmH2VpkRvKkSNHpkOHDjn33HPLjgIAVWP+UZYWVyjfeOON3HXXXfnBD36QNm3alB0HAKqiucy/+fPnp6GhITNmzCgtA9XX4grlqFGjssUWW+T8888vO0ohZ555Zo477ri1H3/8BTp//vzSMgHQfLWU+VdNZuv606IK5dtvv51f/vKX+f73v5+2bduWHQcAqsL8o2wtqlCOHj06bdu2zQUXXFB2lPXmzDPPTENDQ7p27Zok6dq1axoaGnLVVVeVGwyAZqOM+bdmzZqMHj06u+yySzbddNN07tw5I0aMWHt83rx5+frXv57GxsbstddeeeGFF9a5fvLkyTnooIPSpk2bdOrUKYMGDcoHH3yw9vjy5cszZMiQdOzYMW3bts3++++fSZMmrT3+xhtvpG/fvtlyyy3Ttm3b7LHHHnnsscfWHv/zn/+co446Kptvvnm22267nHbaaVm8eHESs3VDaDGF8u9//3tuu+22fPe730379u3LjrPe3HTTTVm4cGGmTp2aJJk6dWoWLlyYIUOGlJwMgOagrPk3dOjQjBo1KldccUVee+21jBs3Ltttt93a45dffnmGDBmSGTNmpFu3bhkwYEBWrVqV5KO70fv06ZMTTjghL7/8csaPH5/JkyfnwgsvXHv9hRdemBdeeCH33ntvXn755fTv3z99+vTJnDlzkiQXXHBBli9fnmeeeSavvPJKrr322my++eZJkn/+85855JBDss8+++TFF1/M7373u/zjH//ISSedlMRs3SAqLcSQIUMq7dq1q7z33ntlR1kvzjjjjEq/fv3WftzU1FRJUmlqaiot0xcxbdq0SpLKtGnTyo4ChfTt27fSt2/fsmPAZypj/i1ZsqSy6aabVm6//fZPHPt4Xt1xxx1rP/fqq69WklRmzZpVqVQqlbPPPrty3nnnrXPds88+W9loo40q//73vytvvPFGpVWrVpW33357nXMOPfTQytChQyuVSqXSs2fPylVXXfWp+YYNG1Y54ogj1vncW2+9VUlSmT179ieyrs/ZWq/zr0X8HMpFixbllltuycUXX5wtt9yy7DgAUBVlzb9Zs2Zl+fLlOfTQQz/znF69eq399Q477JAkeeedd7Lbbrtl5syZefnllzN27Ni151QqlaxZsyZNTU2ZN29eVq9enW7duq3zmMuXL8/WW2+dJBk0aFC+/e1v58knn8xhhx2WE044Ye3vOXPmzDz99NNrN5b/ae7cuZ94XIprEYXyhhtuSENDQ773ve+VHQUAqqas+fd5fizRf/63jw0NDUk+et9lkixdujTf+ta3MmjQoE9c17lz57z88stp1apVpk2bllatWq1z/OOSeM455+TII4/Mo48+mieffDIjR47Mddddl4suuihLly5N3759c+21137i8T8ut6xfNV8o33vvvdx88835zne+kw4dOpQdBwCqosz5t+uuu6ZNmzaZOHFizjnnnC98fe/evfPaa69ll112+dTj++yzT1avXp133nknBx100Gc+TqdOnXL++efn/PPPz9ChQ3P77bfnoosuSu/evXP//ffnS1/6Ulq3rvmqUxNq/qacn/70p1m1alUGDx5cdhQAqJoy599mm22WSy+9NJdccknuvvvuzJ07N3/84x9z5513fq7rL7300jz//PO58MILM2PGjMyZMye//e1v196U061btwwcODCnn356HnjggTQ1NWXq1KkZOXJkHn300STJxRdfnCeeeCJNTU2ZPn16nn766fTo0SPJRzfsvPfeexkwYED+9Kc/Ze7cuXniiSdy1llnZfXq1RvmD6XO1XRtX7JkSW666aacd95569xZBgAtWXOYf1dccUVat26dK6+8Mn/729+yww47fO4fqt6rV6/84Q9/yOWXX56DDjoolUolO++8c04++eS154wZMybDhw/P4MGD8/bbb6dDhw75yle+kmOOOSZJsnr16lxwwQVZsGBB2rdvnz59+uSGG25Ikuy444557rnncumll+aII47I8uXL06VLl/Tp0ycbbVTzu7RmqaFSqVTKDvG/uuaaa3L11Vdn3rx56dixY9lxNqj58+ena9euaWpqype+9KWy4/xX06dPz7777ptp06ald+/eZceB/9mxxx6bJJkwYULJSeD/q6f5tyFtiNlar/OvZjeUS5cuzfXXX5+zzz67Lr6YOnXqlIULF2abbbYpOwoAJaq3+bchma3rT80Wyp///OdZsmRJLrvssrKjVEWrVq2y/fbblx0DgJLV2/zbkMzW9acm30iwbNmy/OQnP8kZZ5yRzp07lx0HAKrC/KO5qslCefvtt+fdd9/N0KFDy44CAFVj/tFc1Vyh/PDDDzN69OgMHDgwO+20U9lxAKAqzD+as5orlGPGjMnChQvzwx/+sOwoAFA15h/NWU0VyhUrVmTUqFE5+eST071797LjAEBVmH80dzV1l/evfvWrvPnmm3nsscfKjgIAVWP+0dzVzIZy1apVueaaa3LCCSdkjz32KDsOAFSF+UctqJkN5bhx4zJv3rzcf//9ZUcBgKox/6gFNbGhXL16dUaMGJG+fftm7733LjsOAFSF+UetqIkN5a9//eu8/vrrueeee8qOAgBVY/5RK5r9hnLNmjUZPnx4jjzyyOy3335lxwGAqjD/qCXNfkP50EMP5dVXX82tt95adhQAqBrzj1rSrDeUlUolw4YNyyGHHJIDDzyw7DgAUBXmH7WmWW8oH3nkkcyYMSNPP/102VEAoGrMP2pNsy2UH3931q1bt7Rr1y7Tp08vOxJfwKxZs8qOAFCTzL/aVq/zr9kWyuXLl2fhwoVZsGBBvvzlL5cdh/9BY2NjOnToUHYMgJpi/tW+epx/zbZQbrbZZnn++eezaNGisqPwP+rQoUM6d+5cdgyAmmL+1b56nH/NtlAmSadOndKpU6eyYwBAVZl/1JpmfZc3AADNn0IJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIUolAAAFKJQAgBQiEIJAEAhCiUAAIW0LjsAQHO2ww47lB0BoNlrqFQqlbJDAABQu7zkDQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIQolAACFKJQAABSiUAIAUIhCCQBAIf8P7t3BB7vUEsAAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import RemoveCupsRewriter\n", - "\n", - "\n", - "diagram = (Word('I', N) @ Word('love', N >> S << N)\n", - " @ Word('cheese', N) >> Cup(N, N.r) @ Id(S) @ Cup(N.l, N))\n", - "remove_cups = RemoveCupsRewriter()\n", - "\n", - "draw(diagram)\n", - "print('↓ remove cups by bending wires')\n", - "remove_cups(diagram).draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Curry functor" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ rewrite by using the map-state duality\n" - ] - }, - { - "data": { - "image/png": "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JSAgAOHh4Sa/y8vL63C5HTt29E4gIhvH91ASEdmoAQMG4NChQ9i2bZvUUWzK999/jx07dsDLy0vqKER2g4WSiMhG3XrrrZg9ezYee+wxFBYWSh3HJrTv0H/w4MFYsGCB1HGI7AYLJRGRDXv55ZcRERGBuLg4LFiwADU1NVJHskotLS3IyspCREQEzp8/j3feeYdvEyDqRiyUREQ2zMvLCwUFBcjOzsY777yDoKAg3HvvvXjvvffQ0NAgdTxJGQwGfP7551iwYAEGDBiAJUuWYObMmSgrK+uwA3MisoxM8It7iexeTk4O/vjHP+LixYtQKpVSx6Ee8vPPP2Pz5s3Yvn07vvnmG3h4eGDUqFHQaDTGQ2RkpF2+d1Cv16O0tBTFxcXQarXQarX4+uuvceHCBYSGhiI5ORmzZs1CZGSk1FGJ7BILJZEDYKF0POXl5cjJyUFhYSG0Wi3KysqM3/gycOBAY7kMCAhA3759Oz24ublJfC9+2cpYW1sLnU7X4VBdXY3jx49Dq9XixIkTaG1tBQAEBwdDo9HglltuQVJSEkaOHAmZTCbxPSGybyyURA6AhZKamppQUlJisgXv+++/R1VVFVpaWjq9jlwuh1Kp7LRs+vj4wNXVFc7OznBxcen02MPDA01NTTAYDGhtbe3y+NKlS50WRp1Oh7q6uk6zOTk5QalUIiIiwrj1NSoqCpGRkfD19e3BkSSiznA/lEREDqBPnz6IiYlBTEyMye+FEGhsbOyy0LUfampqoNPpcOLECWPRay+FVxfE9tMAMG7cOOTn5wP45bvjry6bV5/29PQ0FlWVSoXBgwcbf+6q0Hp5ecHJiR8DILIWLJRERA5MJpNBoVBAoVAgKCio2263ra0NBoMBTk5OcHJy4r+ciewcCyUREXW79iJJRI6Bj3YiIiIisggLJRERERFZhIWSiIiIiCzCQklEREREFmGhJCIiIiKLsFASERERkUVYKImIiIjIIiyURERERGQRFkoiIiIisggLJRERERFZhIWSiIiIiCzCQklEREREFmGhJCIiIiKLsFASERERkUVYKImIiIjIIiyURERERGQRFkoiIiIisggLJRERERFZhIWSiIiIiCzCQklEREREFmGhJCIiIiKLsFASERERkUVYKImIiIjIIiyURERERGQRFkoiIiIisggLJRERERFZhIWSiIiIiCzCQklEREREFmGhJHIASqUScXFxcHFxkToKERHZIZkQQkgdgoiIiIhsF7dQEhEREZFFWCiJiIiIyCIslERERERkERZKIiIiIrIICyURERERWYSFkoiIiIgswkJJRERERBZhoSQiIiIii7BQEhEREZFFWCiJiIiIyCIslERERERkERZKIiIiIrIICyURERERWYSFkoiIiIgswkJJRERERBZhoSQiIiIii7BQEhEREZFFWCiJiIiIyCIslERERERkkf8CoxycL7ZaK0gAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "↓ normal form\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe0AAAHzCAYAAAANaEUQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAXEklEQVR4nO3df6yWdf3H8dcJMDv8iPTOpacO/RI7tgPz4NTG2nSU2KphlC4HIdly/UHhApebqaBFGwzErL5r0k5suoLMbK1lMraj7JQ4oSWtMzGjjjKXntZKJEHwfP+omKQV/uBcvjmPx3b+uO+L+/6873PY57nrOvc5p214eHg4AMBr3uuaHgAAODKiDQBFiDYAFCHaAFCEaANAEaINAEWINgAUIdoAUIRoA0ARog0ARYg2ABQh2gBQhGgDQBGiDQBFiDYAFCHaAFCEaANAEaINAEWINgAUIdoAUIRoA0ARog0ARYg2ABQh2gBQhGgDQBGiDQBFiDYAFCHaAFCEaANAEaINAEWINgAUIdoAUIRoA0ARog0ARYg2ABQh2gBQhGgDQBGiDQBFiDYAFCHaAFCEaANAEaINAEWINgAUIdoAUIRoA0ARog0ARYg2ABQxtukBBgcHMzQ01PQYjIBWq5XOzs6mx4Cjwl42ejS5lzUa7cHBwXR1dWXv3r1NjsEIaW9vz8DAgHBzzLGXjS5N7mWNRntoaCh79+7Nrbfemq6uriZH4SgbGBjI/PnzMzQ0JNocc+xlo0fTe1njl8eTpKurKz09PU2PAfCK2Ms42rwRDQCKEG0AKEK0AaAI0QaAIkQbAIoQbQAoQrQBoAjRBoAiRBsAihBtAChCtAGgCNEGgCJEGwCKEG0AKEK0AaAI0QaAIkQbAIoQbQAoQrQBoAjRBoAiRBsAihBtAChCtAEYEW1tbbnzzjubHqM00R5hCxcuzIUXXtj0GAAUJNoAUIRoAxzjzj333CxatCiLFi3KG9/4xrRarVxzzTUZHh5Okuzbty9Lly5NR0dHxo8fn7PPPjt9fX2HPccPf/jDvPe9783rX//6vP3tb8/q1asPO/72t789N9xwQy655JKMHz8+HR0d+eY3v/lf53r00Udz8cUXZ/LkyTnhhBMyZ86c/OEPf3g1X/oxR7QBRoH169dn7Nixuf/++3PTTTdlzZo1WbduXZJk0aJF+eUvf5nvf//7efDBB3PRRRflggsuyMMPP5wk2bZtWy6++OJ88pOfzI4dO7Js2bJcc801+e53v3vYGqtWrcr06dPzq1/9KldddVUWL16cTZs2veg8zz77bGbPnp2JEydmy5Yt6e/vz4QJE3LBBRdk//79R/VzUdnYpgcA4Oh729velhtvvDFtbW057bTTsmPHjtx4442ZPXt2ent7Mzg4mFNOOSVJsnTp0tx1113p7e3NihUrsmbNmsyaNSvXXHNNkmTq1Kn57W9/m1WrVmXhwoWH1pg5c2auuuqqQ/+mv78/N954Yz74wQ++YJ4NGzbkueeey7p169LW1pYk6e3tzeTJk9PX15fzzz//KH9GanKmDTAKnHPOOYfimCTve9/78vDDD2fHjh05ePBgpk6dmgkTJhz6uOeee/LII48kSQYGBjJz5szDnm/mzJl5+OGHc/DgwcOe8/ne9773ZWBg4EXn+fWvf53f/e53mThx4qE1TzjhhDzzzDOH1uWFnGkDjGJ79uzJmDFjsm3btowZM+awYxMmTDiq686YMSO33XbbC469+c1vPmrrVifaAKPA1q1bD7t933335dRTT80ZZ5yRgwcP5oknnsj73//+F31sV1dX+vv7D7uvv78/U6dOPSz099133wvW6OrqetHn7OnpyYYNG3LSSSdl0qRJL+cljUoujwOMAoODg/niF7+Yhx56KN/73vdy8803Z/HixZk6dWrmzZuXBQsW5I477siuXbty//3352tf+1p++tOfJkmWLFmSzZs354YbbsjOnTuzfv36fOMb38jSpUsPW6O/vz8rV67Mzp07881vfjM/+MEPsnjx4hedZ968eWm1WpkzZ062bNmSXbt2pa+vL1/4whfy2GOPHfXPR1XOtAFGgQULFuTvf/97zjrrrIwZMyaLFy/O5ZdfnuQfbwD7yle+kiVLlmT37t1ptVo555xz8pGPfCTJP86KN27cmGuvvTY33HBDTj755Fx//fWHvQkt+UfcH3jggSxfvjyTJk3KmjVrMnv27Bedp729Pffee2++9KUvZe7cuXnqqafS0dGRWbNmOfP+L0R7hP37j0gAjIRx48Zl7dq1+b//+78XPbZ8+fIsX778Pz7+4x//eD7+8Y//1zUmTZqUjRs3/sfj//q58H95y1vekvXr1/+PyXk+l8cBoAjRBoAiXB4HOMb9+68kPRr8+tGR4UwbAIoQ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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rewriter = Rewriter(['curry'])\n", - "\n", - "diagram = (\n", - " Word('I', N) @ Word('see', N >> S << N) @\n", - " Word('dead', N @ N.l) @ Word('people', N) >>\n", - " Cup(N, N.r) @ Id(S) @ Cup(N.l, N) @ Cup(N.l, N)\n", - ")\n", - "draw(diagram)\n", - "print('↓ rewrite by using the map-state duality')\n", - "rewriter(diagram).draw()\n", - "print('↓ normal form')\n", - "rewriter(diagram).normal_form().draw()" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/rotosolve-optimizer.ipynb b/docs/examples/rotosolve-optimizer.ipynb deleted file mode 100644 index a497a438..00000000 --- a/docs/examples/rotosolve-optimizer.ipynb +++ /dev/null @@ -1,287 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Rotosolve optimizer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create diagram" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser()\n", - "train_diagram = parser.sentence2diagram('Alice loves Bob')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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AgAKgS+++EJ169aVJK1cuVJ33333Bfdxt25Ur15d8fHxatWqle644w49++yzfNiIAuHsv9RavXq1mjRpct593M0L6d8rY6688ko1bdpU77zzDlfGoEA4ceKE+vTpozvvvFOtWrVSfHy8qlevft59spMbd999t+Lj4yVJdevW1RdffJGn8QMALq4//vhDLVu21NChQ93+Sy1364afn5+GDh2qadOmad68eapbt642bNiQH4eBnDJ4hUmTJlmJEiWsRo0atmnTJrf2+fzzz83f39/Gjh1rGzZssIceeshKly5tf/zxx3n3+/HHH+3SSy+1yy67zJYsWZIX4QMALqJjx47ZE088YZLsnnvusX/++cet/XJSN9LT0+3tt9+2YsWK2fXXX2+//fZbXh0GkOf+/vtvu/POO02S9enTx44fP37BfXL6eur48eP2zDPPmCS766677O+//86rwwDy3G+//WaNGzc2X19fGz58uKWnp19wn5zmxj///GMdOnQwSfbkk0+6lYcAAO+yePFiu+yyy+zSSy+1uLg4t/bJad3YtGmT1ahRw0qUKGGTJ0/Oi/CRB2gYe9ixY8fs0UcfNUnWqVMnO3z4sNv71qtXz3r37u18nJaWZpdddpkNGTLkgvvu2bPHGjVqZL6+vvbuu++69aIRAOB5u3fvttjYWPP19bURI0Zka/7OTd346aefrHz58hYeHm4//fRTjmIH8tOGDRusWrVqdskll9i0adPc3i83eWFm9uWXX9oll1xiV199tW3YsCHbcQP5beHChRYeHm7ly5e3RYsWub1fbnIjPT3dRowYYb6+vtawYUPbs2dPjmIHAFxc6enp9s4775ivr681atQoWxeL5KZuHD582Dp27GiS7NFHH7Vjx47lKH7kHb6SwoN27dqlJk2a6MMPP9SoUaP06aefqmTJkm7te/z4cSUkJKh58+bOZT4+PmrevLmWLVt2wf0vu+wy/fDDD3rsscf0xBNP6N577+UGFQDg5X788UdFRUXp119/1U8//aTHHnvM7e9kzW3daNy4sRITE1WtWjXdcMMNevvtt/kzfHiNKVOmqF69evL19VV8fLzuuOMOt/bLbV5I0p133qn4+Hj5+PioXr16+vzzz3N0DEBeMzMNGzZMN954o6pVq6bExEQ1atTIrX1zmxsOh0OPPfaYFi5cqB07dqh27dqKi4vL6aEAAC6Cf/75R/fcc4+efPJJPf744/rhhx/cvqdWbutGyZIl9dlnn2nUqFH68MMP1aRJE+3evTvHx4Lco2HsIQsWLFBUVJT27NmjxYsX6+GHH87WjVj27duntLQ0XXrppZmWX3rppfr999/dGsPPz09vv/22vvjiC3377beqV6+ekpKSsnUcAID8Z2Z644031Lx5c9WoUUOJiYmKiYnJ1hh5UTfCw8O1YMECPf3003rmmWd011136e+//85WHEBeOn78uB5//HHdd999uuWWW7RixQpVq1bN7f3zIi8kqVq1alqxYoXat2+ve++9V0888YSOHz/u9v5AXvv777915513qk+fPnrmmWe0YMEChYeHu71/XuVGbGysEhMTVaNGDTVr1kxvvvkmHzYCgBf6+eefVa9ePc2ZM0dffvmlhg0blq0baedF3XA4HHr44Ye1aNEi7dmzR7Vr19b333+freNA3qFhfJGlp6dr8ODBatmypaKiopSYmKh69ep5NKa77rpL8fHxcjgcqlu3rqZOnerReAAA/zp06JBuu+02Pf/883r++ec1f/58hYWFeSweX19fvfnmm5o+fbrmz5+vunXrav369R6LB0XX7t271aRJE33wwQcaOXKkJk6c6PZfauWHoKAgTZo0Se+//75Gjx6tpk2bcmUMPGL9+vWqU6eOFixYoK+++kpvvPGGfH19PRZPWFiY5s+fr+eff159+/bV7bffrr/++stj8QAAMvv8889Vr149+fj4aNWqVbrzzjs9Gk/9+vWVmJio2rVrq2XLlnrttdeUnp7u0ZiKIhrGF9HBgwfVvn179evXT//3f/+nOXPmKCQkJEdjhYSEqFixYvrjjz8yLf/jjz+ydfVAhquvvtp5ZUzGnyBwZQwAeNbatWtVp04dxcXFafbs2Ro8eLCKFSuWo7Hyum7cfvvtWrVqlfz9/VW/fn1NmjQpR3EBOfH999+rdu3a2r17txYtWqRHHnkkW3+plSGv88LhcKh379766aeftGvXLkVFRXFlDC6qSZMmqX79+ipevLhWrVql2267LUfj5HVuFCtWTIMHD9bs2bP1448/qk6dOvrf//6Xo9gAAHnj+PHjzq8obd++fbb/UutMeV03QkJCNHfuXPXr108vvfSSbrnlFh08eDBHsSFnaBhfJImJiYqOjtbSpUv17bff6pVXXsnxm35J8vf3V3R0dKY3Ienp6fr++++z/WfKGTKujHnvvfc0atQo3XDDDdqzZ0+OYwQA5NyECRPUoEEDXXLJJUpMTFS7du1yNV5+1I2rrrpKy5cv1+23365OnTrp0Ucf1bFjx3IVJ3A+6enpeu2119SyZUvVrl1biYmJql+/fo7Hy4+8kKQGDRooMTFRNWvWVMuWLTVkyBCujEG+OnbsmHr37q1OnTrpjjvu0PLly/Wf//wnx+PlV260a9dOCQkJCgoKUoMGDfTpp5/meCwAQM7t3r1bTZs21ejRo/X+++9r0qRJCgoKyvF4+VE3ihUrpldeeUXffvutlixZoujoaK1evTrHMSKbPHvPvaLhk08+sYCAAIuOjrbt27fn2biff/65BQQE2Pjx4+3nn3+2Hj16WOnSpe3333/P9dhLly61ChUqWGhoqH3//fd5EC0AwB2pqanWo0cPk2TdunWzlJSUPBs7v+pGenq6jR492vz9/a1+/fq2c+fOPIoY+NeBAwfs5ptvNkn2f//3f3by5Mk8GTc/X0+dPHnS+vXrZ5KsXbt2duDAgTyIGMjs119/tXr16pm/v7998MEHlp6enifj5mdupKSkWNeuXU2S9ezZ01JTU/MgYgCAO77//nsLDQ21ihUr2rJly/Js3PysG9u3b7fo6GgLCAiwMWPG5EG0uBAaxvkoJSXFunXrZpKsR48e+fJC6L333rPKlSubv7+/1atXz5YvX55nY+/du9eaNWtmPj4+NmTIEEtLS8uzsQEAWZ35QuiTTz7Jl+fIz7qxYsUKq1y5spUrV87mz5+fZ+MCiYmJVqVKFStTpox98803eT5+fuaFmdk333xjpUuXtiuuuMJWr16dp2OjaJs3b56VK1fOKleubCtXrszz8fM7NzIurKlTp06eXlgDAMgqLS3NhgwZYj4+Pta8eXPbu3dvnj9HftaNMy+s6d69e55eWIOsHGbcpjY/bNu2TXfccYc2btyo0aNHq0uXLp4OKUfS0tLUv39/DR48WO3bt9eECRNUunRpT4cFAIXO3Llz1bFjR5UuXVrTpk1TVFSUp0PKkX379qljx47673//q4EDB+rFF1+Ujw/fgIWcGzt2rB555BFVr15d06ZNU5UqVTwdUo5s375dd9xxh5KSkjRq1Ch17drV0yGhAMu4kXb//v3VsmVLTZo0SeXKlfN0WDmSmJioO+64Q3///bcmTZqk1q1bezokACh0Dh06pM6dO2v27Nnq16+fBgwYkKuvSfWk8ePH6+GHH1ZkZKSmTZumK664wtMhFUq8g8sHX3/9taKjo/XPP/9o+fLlBbZZLJ36zphXX31VX3/9tX766SfVqVNHa9as8XRYAFBoZHww17ZtW8XGxiohIaHANoulUzeomDNnjl5++WW9/PLLateunQ4cOODpsFAApaam6sEHH1T37t31wAMPaMmSJQW2WSxJVapU0dKlS9WpUyd169ZNDz30kI4ePerpsFAAHThwQDfffLP69++v/v3769tvvy2wzWJJioqKUkJCgho0aKCbbrpJAwYMUFpamqfDAoBCY82aNYqOjtZPP/2kb775RoMGDSqwzWJJ6tKli5YtW6a//vpL0dHR+uabbzwdUqFEwzgPpaWl6aWXXlL79u11/fXXa9WqVapZs6anw8oTN998sxISEhQcHKyYmBiNHz/e0yEBQIG3b98+3XTTTRo0aJAGDRqk2bNnq0yZMp4OK9eKFSumAQMG6Ntvv9Xy5csVHR2thIQET4eFAmTbtm1q2LChJk2apLFjx+qjjz5S8eLFPR1WrhUvXlwff/yxxowZo4kTJ6phw4bavn27p8NCAZLxoeKKFSs0Z84c9e/fv0C/6c9QtmxZff311xo4cKAGDhyotm3bat++fZ4OCwAKvPHjxysmJkalSpVSYmKi2rZt6+mQ8kStWrWUkJCgxo0bq127durXrx8fNuYxGsZ5ZO/evWrVqpVef/11vf7665oxY0ah++qGK664QkuWLFHHjh3VtWtX9ejRgytjACCHVq5cqaioKCUmJmrevHl66aWXCt1XN7Rp00YJCQkqV66cGjZsqE8++UR8ExYu5JtvvlF0dLT++usvLVu2rFB+dUO3bt20dOlSHTp0SFFRUfr22289HRK8nJnp448/VmxsrEJDQ5WYmFjovrrBx8dH/fr107x587Rq1SpFR0crPj7e02EBQIF09OhR9ejRQ127dlWnTp20dOnSAv2XWq6ULl1aM2fO1JAhQzRkyBC1atVKf/75p6fDKjQK1ztTD1m2bJmioqK0bt06LViwQH379i10b/ozBAYG6pNPPtEnn3yiTz/9lCtjACCbzEyjR49Wo0aNdNlllykxMVEtWrTwdFj55vLLL9fixYvVuXNnPfTQQ+revbtSU1M9HRa8UFpamvr166d27dqpcePGSkhIUK1atTwdVr6pXbu2Vq1apUaNGunmm2/W//3f/3FlDFxKSUlRt27dnG/8Fy9erIiICE+HlW9atGihxMREhYeHq1GjRvrggw/4sBEAsmH79u1q2LChPv30U40ZM0Yff/xxofhLLVd8fHz0/PPP67///a/+97//KSoqSsuXL/d0WIVC4exqXiRmpvfee0/XX3+9IiIilJiYqBtuuMHTYV0U3bt319KlS3Xw4EFFR0drzpw5ng4JALxeSkqKHnjgAT3yyCPq2bOnfvrpJ1WqVMnTYeW74sWL68MPP9S4ceM0ZcoUxcTEaOvWrZ4OC17kzz//VOvWrTVkyBC99tprmjlzZqH7Sy1XypQpo1mzZmnw4MF67bXX1Lp1a66MQSZbt25VbGysPv/8c40fP14ffPCBAgICPB1WvqtcubJ++uknPfTQQ3r44YfVuXNnpaSkeDosAPB6c+bMUXR0tA4ePKhly5apW7dung7porjxxhu1evVqVapUSddff73ef/99PmzMJRrGOXT48GF17NhRjz/+uB599FHFxcWpQoUKng7rosq4QUVsbKzatm2rl19+mStjAOActmzZogYNGuirr77SpEmT9N5778nf39/TYV1UXbp00fLly3X48GFFR0fr66+/9nRI8ALLly9XVFSU1q5dq/nz5+uFF14otH+p5YqPj49efPFFzZs3z3lTmhUrVng6LHiB2bNnKzo6WocPH9by5cvVuXNnT4d0UQUEBOj999/XxIkTNX36dDVo0EBbtmzxdFgA4JXS0tL08ssvq23btmrYsKESEhJUu3ZtT4d1UVWoUEFxcXF65JFH9Nhjj6lTp046cuSIp8MqsIrOq/E8tHHjRtWvX1+zZ8/W1KlTNXz4cPn5+Xk6LI8oU6aMZs+ercGDB2vw4MG66aabuEEFAJxlxowZqlOnjo4dO6aVK1fqvvvu83RIHlOzZk2tWrVKTZo0Ufv27fXiiy/q5MmTng4LHmBmGjlypK6//npVqlRJiYmJatasmafD8pjmzZtr9erVqlChgho3bqxRo0ZxZUwRdfLkSb344ou65ZZb1LRp00J1I+2c6Nixo1asWKFjx46pTp06mjlzpqdDAgCvsm/fPrVp08bZl5k1a1ahuJF2Tvj7++udd97R559/rlmzZql+/fratGmTp8MqkGgYZ9OXX36punXryswUHx+vu+++29MhedyZV8YkJiYqKipKK1eu9HRYAOBxJ0+e1HPPPafbb79dLVu2VHx8vKpXr+7psDyudOnSmjFjhl5//XW98cYbatWqlfbu3evpsHARHTlyRJ06ddKjjz6qhx9+WHFxcapYsaKnw/K4ihUrauHCherVq5d69+6t+++/nytjipiMG2m/8cYbeuONNwrljbRzokaNGoqPj1eLFi102223qW/fvnzYCACSVqxYoaioKK1evVrz5s3Tiy++WKT+UutcOnTooPj4eKWlpalOnTqaNm2ap0MqcPgtctOJEyf09NNP6+6771bbtm21cuVKRUZGejosr9K8eXMlJiaqQoUKatSokUaPHs2VMQCKrN9//13NmjXT22+/rbfffltffPGFgoODPR2W1/Dx8VHfvn21YMECrV+/XlFRUVq6dKmnw8JFsGnTJtWvX1+zZs3SlClT9O677xa5r2c5H39/f40YMUKTJ0/WjBkzuDKmCFm6dKlq166t9evX6/vvv9dzzz0nh8Ph6bC8RnBwsL788ksNGzZMw4YNU/PmzfX77797OiwA8Agz06hRo9S4cWNVqFBBq1evVvPmzT0dlleJjIzUypUr1bZtW91111165plndOLECU+HVWDQMHbDb7/9phtuuEHvvfeeRowYoSlTpigoKMjTYXmlSpUqOa+MeeSRR/TAAw9wZQyAImfRokWqXbu2tmzZoh9//FFPPfUUb/rP4YYbblBiYqIiIiLUpEkTjRgxgg8bC7Fp06apTp06SktL08qVK3XPPfd4OiSvde+992rlypU6efKk6tatq+nTp3s6JOQTM9OIESPUpEkTValSRatXr1bTpk09HZZXcjgcevrpp/Xjjz9q06ZNioqK0uLFiz0dFgBcVEeOHNH999+v3r17q1evXlq4cCF/qXUOl1xyifMChREjRujGG2/Ub7/95umwCgSH8a7sgu655x5NnTpVvr6+Xnl1mJl5ZSPiwIEDkqTXXntNL7zwgoejAYCLIz09XWFhYdq/f78CAwMVGBjo6ZCy8Ma6cfLkSf3999+SpPj4eNWpU8fDESGv7d+/X6GhoTIzBQUFcVWxm44fP67Dhw/L4XDozz//VLly5TwdEvLYqlWrVLduXUmnrqL19fX1cESZeWPNkKTU1FSlpqaqXLly2rt3L3+CDaDIGDJkiF58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b+TquHMyj5/pP//5T5a/wsnY/8xzt3btWpNkO3bsyFW8hRHfYXxaxvearFixQp07d1bXrl11xx13ZNomOTlZt956q/r06aO7777buTw1NVXFixfPMubYsWPVoUMH+fr6SpLuvfdeLVmyRFu3bnUrpjVr1qhixYq66qqrXK5fu3atxo8fr6CgIOdPq1atlJ6eru3bt7t76Od03XXXOf/tcDgUHh6uvXv35nrcMwUGBiolJSVPxwRQ+LkzZ+/cuTNbc/aZkpKS1LBhw0zLGjZsqC1btji/I7Fjx46aPHmyJMnMNGXKFHXs2NG5/e7du9W9e/dMc/Srr77qrAFdunTRmjVrVK1aNT3++OOaP39+zk/IWc6cv0uWLKng4OALzt916tTJ9HjdunWKjY2VJC1dulTlypXTK6+8olq1aunVV19VlSpVnNuWL19eBw8elCQ9/PDD+vzzz1WrVi0999xzmb4nLDtjhoSEOMd0dVzly5eXpDyvSxfi7XWL3Dg/ciNnhg8frsTERM2aNUtbt27V008/nWUbcoPcKEq5kZ6erhMnTmjEiBFq1aqVGjRooClTpmjLli368ccfM23r7bkBwPudXcPatWuXZZuc1LCpU6dqzZo1Wrt2rb744gvNmjVLzz//vCTp77//1m+//eaytiUlJWVaFhMT4/y3r6+v6tSpk2WbnMrv1ziBgYGSxDztAg3j00qWLKmqVauqZs2aGjt2rFasWKExY8Zk2ubpp59WTEyMBg4cmGm5qxcnBw4c0IwZMzRq1Cj5+vrK19dXFSpU0MmTJ93+EvGMX9xzOXz4sHr27Kk1a9Y4f9auXastW7boyiuvdOs5zsfPzy/TY4fDofT09Avu56qxfPLkSR04cEDh4eGZlh84cEChoaG5jhVA0XKhOfvIkSNq376923N2Ttx7773atGmTEhMTtXTpUu3atUsdOnTItM3HH3+caY5ev369li9fLkmKiorS9u3bNWjQIKWmpuruu+/WnXfemeu4pJzN3yVLlsz0+OTJk846dPz48Szrg4KCnP9OTExU1apVJUlt2rTRr7/+qqeeekq//fabmjVrpj59+mR7zI0bNzrHdHVcDodDktyqSxcSHh6uP/74I9OyjMcFrW6RG+dHbuRMeHi4rr76arVv314ffvihRo8ereTk5EzbkBsXRm4UntzIaFpcc801zmWhoaEKCQnRzp07M23r7bkBwPudXcPWr1+faX1Oa1ilSpVUtWpVRUZG6q677tKTTz6pYcOG6ejRo/l2LNmV03n8XK/vz64jBw4ckCTmaRdoGLvg4+OjF198Uf369VNqaqrMTNKpX8rPPvvM+UuaoXbt2vr5558zLZs0aZIqVqyotWvXZnrRN2zYMI0fP96tu/hed9112r17tzZv3uxyfVRUlH7++WdVrVo1y4+/v38Ojz73YmJidOjQISUkJDiXxcfHKz09XfXr13cuO3r0qLZu3aratWt7IkwAhYSrObtTp07ZmrPPFhkZqSVLlmRatmTJEl111VUqVqyYJKlixYpq0qSJJk2apEmTJqlFixYKCwtzbh8aGqpt27ZlmZ/PvBoqODhYHTp00Mcff6ypU6dq+vTpzhctnla1alWtW7dOklS3bl1t3LhRs2bNUnp6umbNmqW1a9cqNTVVQ4cO1a5du9S+fXvnvqGhoercubMmTpyod955Rx999JHbYx47dkzSqRd0Z46Zn2JiYrRu3bpMH3b+97//VXBwcKZmwNatW3X06NECU7fIjfxRlHLDlYw3aRnxSOSGRG5IRSs3Mq6427Rpk3PZgQMHtG/fPkVERDiX8X4HQF7z8fFRt27dJJ2aY/KihmUoVqyYTp48qePHjys4OFiXXXaZy9p25utjSc4PNqVTH/QlJCQoMjIyJ4eXZ2JiYvT9999nWvbf//430xXLkrR+/XpVrFhRISEhFzO8gsFz34bhPVzddfLEiRNWoUIFGzp0qD300EPOu0ye+WXiGXeC/t///me+vr524MAB5/41a9a0vn37ZnmuQ4cOmb+/v/NGeOf7DmMzs6ZNm1qNGjVs/vz5tm3bNpszZ47z+8TWrl1rgYGB1rt3b1u9erVt3rzZZs6cab179871OTk7joxj6t+/v1v7t27d2mrXrm0TJkwwSVa5cmW79957M23z448/WlBQkB05ciTX8QIoOi40Z7/88ssWFBRkS5cudXvOPvu7KBMSEjLdvGj8+PGZbl6U4eOPP7bLLrvMQkJC7LPPPnPuq9PfBxkYGGjvvvuubdq0yf73v//Z2LFjbdiwYWZmNmzYMJs8ebIlJSXZpk2brHv37hYeHm5paWm5Oj+SbMaMGZmWlSpVKlPs1apVy3QTUldz/l9//WVly5Z1fo/+mDFjLDAw0IoVK2YNGjSw1q1bm5+fn7Vv39527drl3O///u//bObMmbZlyxZbv3693XzzzVavXj23x/T19c3y3cFn//+Yma1evdok2fbt283MbMWKFVatWjXbvXu3mWXvuyhPnjxpNWrUsJYtW9qaNWvsu+++s9DQUHvhhRcybTdu3Di74oorLjiep5Ab50duZD83vv32Wxs7dqytW7fOtm/fbt98841FRkZaw4YNM21HbpAbZkUrN8xOfS9o9erVbcmSJbZu3Tq7+eab7ZprrrHjx49nioP3OwByw1UNW7FihUmyJ554Ikc1LGO+W7BggSUnJ9uuXbtszpw5VqFCBbvhhhuc2w0fPtyCg4Pt888/t40bN1rfvn1d3vSucuXK9tVXX1lSUpL16NHDgoKC7M8//8zVcbszj5/Ptm3brESJEvbss89aUlKSjRw50ooVK2bvvfdepu8w7ty5s8t7koGb3pmZ6wQ0O3Uzg9DQULvmmmucX4x95s+ZL6Lq1atnH3zwgZmdukuyJFu5cqXL52vTpo3ddtttZnbhhvH+/futa9euVq5cOStevLjVqFHD2Ww2M1u5cqW1aNHCgoKCrGTJknbddddl+VLynMhtw3j//v127733WokSJUyStW/f3v75559M2/To0cN69uyZ61gBFC0XmrPr1KmTrTnbzPULkmnTptk111xjfn5+VrlyZRs6dGiW5zx48KAFBARYiRIlnHPcmTf7nDRpktWqVcv8/f2tTJkydv311zvfcH/00UdWq1YtK1mypAUHB1uzZs0sMTEx1+fHnTf+Z58PV3O+mdkbb7xhNWvWdN7l+NixY/bbb7+Zmdm+ffucL0TPNGjQIIuMjLTAwEArW7as3XLLLbZt2za3x1yyZEmWm3i484IxY5uMx9l9479jxw5r06aNBQYGWkhIiD3zzDPOm9ZmaNmypQ0ZMsSt8TyB3Dg/cuPU4+zkxg8//GAxMTFWqlQpK168uP3nP/+xvn37Zno+M3IjA7lRdHLD7FQzu1u3bla6dGkrW7as3XbbbbZz585M2/B+B0BuuaphGXWjTJkyOaphGfNdxk+xYsWsYsWK9tBDD9nevXud26WlpdmAAQOsQoUK5ufnZzVr1sx0Q9SMcSZPnmz16tUzf39/u+aaa+yHH37I9XHntmGcMUZGTb3iiits3LhxmWpuamqqlSpVypYtW5breAsjGsZuOPMX6lwyrrjI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ULt27TwdhteiYaxTTVuHwyGHwyE/Pz9VqVJFzz33nI4ePer2GB988IGqVKmi2NjYLOt69uypYsWK6csvv7zgOF999ZUGDRqUrfi90UcffaSmTZvq+uuvlyT9888/mdaHhITogQceUP/+/T0RHoACLL/nbGS1f/9+DRgwQHXr1lVoaKgqV66stm3b6vPPP5eZ5emY8+bNy+Po3TN48GDFxsaqRIkSKl26dJb111xzjRo0aKC333774gfnJnLj4isKuZHh2LFjqlWrVpYmaevWreXn56dJkyZ5LrgLIDcuvsKeG3Fxcc7fqbN/4uPjJRWM3ADg/VzVsHfffTdbY7iqYWfOW76+vqpcubKefvppHTt2LK8PwSOOHj2qLl266Nprr5Wvr2+mCzUzdOvWTYmJiVq0aNHFD7AAoGF8WuvWrZWcnKxt27Zp+PDh+vDDD91uZpqZ3n//fXXv3j3LupSUFH3++ed67rnnNHbs2AuOVbZsWV1yySXZjt/bpKSkqHXr1urates5t+natasmTZqkAwcOXMTIABQG+TVn45Tjx487/z1//nxdddVVio+PV58+fTR//nx99dVXuvnmmzVo0CC1atUq21fdnm/MTz75RJKUmpqap8d0IcePH9ddd92lhx9++JzbdO3aVaNHj9bJkycvYmTZQ27kr6KYGxmee+45XXbZZS7XdenSRSNGjLjIEWUPuZG/ilpuxMbGKjk5OdPPgw8+qCpVqqhOnTrO7QpCbgDwfmfXsOnTp7u97/lq2Lhx45ScnKzt27dr1KhR+uyzz/Tqq6/mZegek5aWpsDAQD3++ONq3ry5y238/f113333MU+fi8E6d+5st9xyS6Zlt99+u9WuXdteeeUVu/LKK02SJSQkONfXrFnT+vXrZ2Zm8fHx5uPjY3///XeWscePH28NGjSwQ4cOWYkSJWznzp3nfe4mTZrYE0884Xx89OhRe+6556xixYrm7+9vV155pX3yySfO9evWrbPWrVtbyZIlLSwszDp16mR//vlnLs7Gv3E89thj9uyzz1qZMmXs0ksvtf79+2d7nA8//NAkWVxcnMv1VapUyXQ8AHAhF5qzq1evnmWfC83Z27dvN0m2evVq57K4uDirW7eu+fv7W3h4uPXt29dOnDhhZqfmtvLly1taWlqm52nfvr21b9/eWTNmzpxptWvXtoCAAKtSpYoNGDDAOUZ6err179/fKlWqZP7+/la+fHl77LHHcn1+IiIibPDgwda1a1cLCgqySpUq2YcffnjefZo0aWK9e/e2J554wsqVK2dNmzZ1nquyZcva7NmzXe534sQJ69q1q7Vr18657NixY9a7d28LDw+3gIAAq1y5sr322mvO9Rcac8WKFSbJrr/+eueyjP+f6dOnW9OmTS0wMNCuu+46W7p06XmPS5LNmDHjvNucbdy4cVaqVCmX644dO2YBAQG2YMGCbI15sZAb50du/Cu7uTFnzhy7+uqrbcOGDVl+H8zMfv31V5Nkv/zyi9tjXkzkxvmRG//KSd0wMzt+/LiFhobawIEDMy339twA4P1c1bAbb7zRJFnPnj1zVMPMXM933bt3t5tuuinTslGjRtkVV1xhfn5+dtVVV9mnn36aZZxRo0ZZ69atrXjx4lalShX78ssvc3i0/8rpPO7KmecwISEhU39v4cKF5u/vbykpKbmOubChYWxZE3DdunUWHh5u9evXt127dpmPj0+mX6jExERzOBy2detWMzN7++237eqrr3Y5duPGje399983M7M77rgjy4uICzWM7777bqtUqZJ99dVXtnXrVluwYIF9/vnnZmZ28OBBCw0NtRdeeMGSkpIsMTHRWrRoYTfccENuT4k1adLEgoODbcCAAbZ582abMGGCORwOmz9/frbGuVDDuEOHDta5c+dcxwug6HBnzl65cqVzvTtz9tlv/Hfv3m0lSpSwRx55xJKSkmzGjBkWEhLi/ODswIED5u/vn6lxuH//fvP397fRo0ebJPvkk08sODjYxo8fb1u3brX58+fb5ZdfbgMGDDAzsy+//NKCg4Ntzpw59uuvv9qKFSvso48+yvX5iYiIsLJly9rIkSNty5YtNmTIEPPx8bGNGzeec58mTZpYUFCQPfvss7Zx40bntg0aNLDRo0ebmdmGDRvs+uuvt5CQELvrrrvsqaeessGDB9uxY8fsyiuvtB9++MHMzIYOHWqVKlWyn376yXbs2GGLFi2yyZMnO5/rQmP27t3bJFnFihWdY2b8/1x99dX2zTff2KZNm+zOO++0iIgIZyPFlbxuGJuZ1a9fP0cfoF4M5Mb5kRv/yk5u/P7771ahQgWLj4932STNcOmll9q4cePcGvNiIzfOj9z4V04bxtOmTTMfHx/btWtXlnXenBsAvJ+rGlauXDmTZHPmzMlRDTPLOt9t2rTJqlSpYq+88opz2VdffWV+fn42cuRI27Rpkw0bNsyKFSvmnGszxilXrpx9/PHHtmnTJuvXr58VK1bMfv7551wdd07ncVfO1zA+cuSI+fj42I8//pireAsjGsZ26penWLFiVrJkSQsICDBJ5uPjY9OmTTMzs4YNG2b6hXrsscecn6KbmT3xxBN24403Zhl38+bN5ufn57zid8aMGValShVLT0/P9Nznahhv2rTJJNl///tfl3EPGjTIWrZsmWnZrl27TJJt2rQp+yfiDE2aNLFGjRplWla3bl3r27dvtsa5UMP4qaeeynQuAeBCLjRnt2nTxh5++GHn9u7M2We/8X/xxRetWrVqmebrkSNHWlBQkPPqsFtuucW6devmXP/hhx/aZZddZvHx8SbJ6tWrl+kKKTOzzz77zMqXL29mZsOGDbOrrrrKjh8/ngdn5V8RERHWqVMn5+P09HQLCwtzvtl2pUmTJla7du1MyzZv3mzh4eF24sQJO3nypF111VXWo0cPW716tY0YMcJ8fX2djZB+/fo568Njjz1mN954Y6Zzl50xe/ToYZKse/fuzjEz/n/O/IuUjCsdk5KSznlc+dEwvu2226xLly7ZGvNiITfOj9z4l7u5kZ6ebq1bt7ZBgwZlej5XDePatWs7G5vehtw4P3LjXzltGLdp08batGnjcp035wYA73euGpbRo8pJDTM7Nd8VL14807g333xzphoTGxtrDz30UKb97rrrrkxXIUuyXr16Zdqmfv36mWLKiZzO466cr2FsZlamTBkbP358ruItjPgO49NuuOEGrVmzRitWrFDnzp3VtWtX3XHHHZLk/HLsY8eO6fjx45o8ebK6devm3Dc1NVXFixfPMubYsWPVqlUrhYSESJJuuukm/fXXX/rhhx/cimnNmjUqVqyYmjRp4nL92rVr9eOPPyooKMj5c/XVV0uStm7d6vaxn8t1112X6XH58uW1d+/eXI97psDAQKWkpOTpmAAKv/PN2Q899JCmTJmio0ePZmvOPlNSUpJiYmLkcDicyxo2bKjDhw9r9+7dkqSOHTtq+vTpzhtDTJo0Sffcc498fE6V1s2bN2vgwIGZ5uiHHnpIycnJSklJ0V133aXU1FRdccUVeuihhzRjxow8+27cM+dvh8Oh8PDwC87f0dHRmR6vW7dOdevWla+vrzZt2qQ9e/bo/fffV61atfTYY4+padOmzm3Lly+vgwcPSjr1fY1r1qxRtWrV9Pjjj2v+/Pk5GjMkJMQ5pqvjKl++vCTleV26EG+vW+TG+ZEb2fPee+/pn3/+0QsvvHDBbckNcqMo5caZdu/erXnz5p3zO669PTcAeL+za1i7du2c63JTw4YPH641a9Zo7dq1+uabb7R582bdf//9zvVJSUlq2LBhpn0aNmyopKSkTMtiYmKyPD57m5y6GPM487RrNIxPK1mypKpWraqaNWtq7NixWrFihcaMGSNJuv766yVJP/74o77++mudOHFCd955p3NfVy9O0tLSNGHCBH377bfy9fWVr6+vSpQooQMHDrh18zvp1C/t+Rw+fFjt2rXTmjVrMv1s2bLFGXNu+Pn5ZXrscDiUnp6e63HPdODAAYWGhubpmAAKv/PN2e3atVNAQIBmzJjh9pydE+3atZOZ6dtvv9WuXbu0aNEidezY0bk+NTVVr7zySqb5ed26ddqyZYuKFy+uSpUqadOmTRo1apQCAwP1yCOP6Prrr9eJEydyHVtO5u+SJUtmenzy5ElnHTp+/Lj8/PwyjRsUFOT8d2JioqpWrSpJioqK0vbt2zVo0CClpqbq7rvvdp7/7Iy5ceNG55iujiujKZPXdelCvL1ukRvnR25kzw8//KBly5YpICBAvr6+zuetU6eOOnfunGlbcuPCyI3CkxtnGjdunMqVK6f27du7XO/tuQHA+51dw9avX+9cl5saFh4erqpVq6patWpq27atXnnlFU2dOlW//PJLvh+Tuy7GPM487RoNYxd8fHz04osvql+/fkpNTZWvr68kafbs2Ro3bpzuueeeTM3c2rVra+PGjTIz57I5c+bon3/+0erVqzO96JsyZYq++uorHTp06IJxXHvttUpPT9fChQtdro+KitKGDRt0+eWXq2rVqpl+zn4B563Wr1+v2rVrezoMAAWYqzm7c+fOGjdunNtz9tkiIyO1bNmyTNssWbJEl1xyiSpWrChJKl68uG6//XZNmjRJU6ZMUbVq1RQVFeXc/uqrr9amTZuyzM9Vq1Z1Xk0WGBiodu3aacSIEYqLi9OyZcu0bt26vD5FOVK1alVnLNWqVZOfn5/ef/99paWlafny5Zo3b55OnDihCRMmaO7cuerSpYtz3+DgYHXo0EEff/yxpk6dqunTp+vAgQNujZlxtdzSpUszjektClLdIjfyR1HKjREjRmjt2rXO17Fz5syRJE2dOlWDBw92bnf06FFt3bqV3CA3ikxuZDAzjRs3Tg888ECWprtU8HIDgPfz8fFxXkF89OjRPKlhGYoVKybp1AeY0qnatmTJkkzbLFmyRNdcc02mZcuXL8/yODIyMvsH5wFbt27V0aNHmaddoGF8DnfddZeKFSumkSNHOpetWrVK3333XabL+6VTfx5w+PBhbdiwwblszJgxatu2rWrWrKkaNWo4f+6++26VLl1akyZNumAMl19+uTp37qxu3bpp5syZ2r59u+Li4vTFF19Iknr37q0DBw7o3nvvVXx8vLZu3ap58+apa9euSktLy6MzkTO///671qxZo127dkmSfvnlF61Zs0YHDhxwbpOSkqKEhAS1bNnSU2ECKCTOnrMffPBB/fDDD27P2Wd75JFHtGvXLj322GPauHGjZs2apf79++vpp592vmmXTv158bfffquxY8dmukosI4ZPP/1Ur7zyijZs2KCkpCR9/vnn6tevnyRp/PjxGjNmjNavX69t27Zp4sSJCgwMVERERF6dlnNq1qyZ3n///fNuU7t2baWmpurHH39UYGCgxo8fr5dfflkBAQHq2rWrbr31Vr3xxhsaN26c5s+f7/xU/u2339aUKVO0ceNGbd68WV9++aXCw8NVunRpt8acMGGCJGnkyJHZ+qR/z549uvrqq7Vy5cocnZOdO3dqzZo12rlzp9LS0pwNssOHDzu32bFjh/bs2aPmzZvn6Dk8gdzIHnIjs8qVK2d6HXvVVVdJkq688kpnE1Q69cYwICAgy5+kejNyI3vIDdd++OEHbd++XQ8++KDL9QUxNwB4v4zXohm9oZzWsEOHDun333/Xb7/9poULF2rgwIG66qqrnM3eZ599VuPHj9fo0aO1ZcsWvf322/rqq6/Up0+fTON8+eWXGjt2rDZv3qz+/ftr5cqVevTRR/Pj0LPl559/dvah/vrrL61Zs0abNm3KtM2iRYt0xRVX6Morr/RQlF7MM1+d7F3OvvFchiFDhlhoaKgtXrzYJFnt2rWtevXqLse4++677fnnnzezU3eT9vX1tS+++MLltg8//LDzJhHnu+mdmVlqaqo99dRTVr58efP397eqVava2LFjnes3b95st912m5UuXdoCAwPt6quvtief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6XrxxRczbdelSxeNGDHCEyECKODya87GKWd+wPfZZ5+pRo0a2rNnjwYMGKDvv/9eU6ZMUYMGDdSjRw898MADSktLy9b45xvz1VdflaRsj5kbCQkJCgsL08SJE7Vhwwa99NJLeuGFF/T+++87t/H399d9993n9XWL3MhfRS03MowbN07JycnOn1tvvdW5jtyAVPRy4/Dhw2rdurUqV66sFStWaPHixbrkkkvUqlUrnThxwrkd73cA5IWza9j06dPd3vd8NWzBggVKTk7Wli1b9Morr2jw4MFu9a0Kgp9++kktWrTQnDlzlJCQoBtuuEHt2rXTxo0bndvUqFFDV155pSZOnOjBSL2YwTp37my33HJLpmW333671a5d28zMevToYZKy/IwbN87MzL788ksLDQ11OfaAAQPsnnvusaSkJCtVqpSlpKRkWt+kSRN74oknnI8jIiJs+PDhzscHDx60Hj16WFhYmAUEBFj16tXt66+/dq5ftGiRNWrUyIoXL24VK1a0xx57zA4fPpzzk3FGHIMHD7auXbtaUFCQVapUyT788MNsj5OQkGCS7IknnrAqVapkWvfrr7+aJPvll19yHS+AouNCc3b//v2zPWf/+OOPJskOHjzoXDZt2jS75pprzN/f3yIiIuytt95yrnvhhResXr16WWK77rrrrGfPnibJEhIS7OOPP7arr77aAgICrFq1ajZy5EjntseOHbPevXtbeHi4BQQEWOXKle21117L5dkxk2Qff/yx3XrrrRYYGGhVq1a1WbNmnXefiIgIGzhwoN1///12ySWXWOfOnc3MbPbs2XbppZfasmXLXO53+PBha9WqlT366KPOZQcOHLD77rvPQkJCrHjx4la1alUbO3asc/2Fxly8eLFJsg4dOjiXZfz/LFiwwKKjoy0wMNBiYmJs48aN5zym7du3myRbvXr1eY/9XB555BG74YYbMi1buHCh+fv7Z6nl3oLcOD9y45Ts5oYkmzFjxnm3ITdOITeKTm7Ex8ebJNu5c6dz2f/+9z+TZFu2bHEu4/0OgNxyVcNuvPFGZ93ISQ0713zXrFkze+SRR5yP09LS7JVXXrEKFSqYv7+/1axZ0+bOnZtlnClTplhMTIyzZxUXF5fr487JPH4h11xzTaaaa2b2yiuvWKNGjXIdb2FEw9iyJuC6dessPDzc6tevb2anmrKSbN68eZacnGxvvfWWlShRwtatW2dmZo8//ri1bt06y7jp6ekWERFh33zzjZmZRUdH26effpppm/M1jNPS0qxBgwZWvXp1mz9/vm3dutW+/vprmzNnjpmZ/fLLL1ayZEkbPny4bd682ZYsWWK1a9e2Ll265PqcREREWNmyZW3kyJG2ZcsWGzJkiPn4+GQ7OTMaxt27d7fo6Ogs6y+99FLnRAYA7rjQnP3PP/9YcnKy88edOfvsN/6rVq0yHx8fGzhwoG3atMnGjRtngYGBzvlq/fr1Wd4AZiybOXOmSbJBgwZZ+fLlbfr06bZt2zabPn26lS1b1saPH29mZkOHDrVKlSrZTz/9ZDt27LBFixbZ5MmTc31+JFnFihVt8uTJtmXLFnv88cctKCjI9u/ff859IiIiLDg42N566y375Zdf7JdffrFjx45Z5cqVnS8KFy1aZNHR0RYWFmY9e/a0+++/3yZOnGj79u2zsmXLOs9F7969rVatWhYfH2/bt2+3//73vzZ79mwzM7fGHDRokEmyUqVKOcfM+P+pX7++xcXF2YYNG6xx48YWGxt7zmPKbcO4Y8eOdscdd2RaduTIEfPx8bEff/wxR2PmN3Lj/MiNU3LSML7sssusXLlyVrduXRszZoylp6dn2obcIDeKWm78/fffVq5cOevfv78dO3bMUlJS7IknnrDIyEg7ceJEpm15vwMgN1zVsHLlyjmbnjmpYa7mu/j4eCtdurRNmDDBueztt9+24OBgmzJlim3cuNGee+458/Pzs82bN2cap2LFijZt2jT7+eef7cEHH7RLLrnE9u3bl6vjzsk8fj5paWlWqVIle+655zI1jOfOnWv+/v529OjRXMVbGNEwtlMJWKxYMStZsqQFBASYJPPx8bFp06aZ2b9Nz4SEBFu2bJkVL17cpk6d6tz/lltusW7dumUZd/78+RYaGup80TB8+HBr0qRJpm3O1zCeN2+e+fj42KZNm1zG3b17d+vRo0emZYsWLTIfHx9LTU3N7mnIJCIiwjp16uR8nJ6ebmFhYTZ69OhsjZNx7kqWLGkfffRRlvW1a9e2AQMG5CpWAEXLhebsM7k7Z5/9xv++++6zFi1aZNrm2WeftWuuucb5uGbNmjZw4EDn4xdeeMHq16/vnPcy3nyfadCgQRYTE2NmZo899pjdeOONWRovuSXJ+vXr53x8+PBhk5TpaoCzRURE2K233ppp2fz5850f9B08eNDKli1rL7/8sq1evdpeeuklK1asmPMNcKdOnZz1oV27dta1a1eXz+POmBlXSdx0003OMc+8wiDDt99+a5LOWe9y0zBesmSJ+fr62rx587KsK1OmjLN5423IjfMjN07Jbm4MHDjQFi9ebImJifb6669bQECAvfvuu1m2IzfIjaKWG+vWrbMrr7zSfHx8zMfHx6pVq2Y7duzIsh3vdwDkxrlq2JlNzwzu1rCM+S4wMNBKlixpfn5+JilLf+myyy6zwYMHZ1pWt25d51XIGeO8/vrrzvUnTpywihUr2htvvJGr487JPH4+b7zxhpUpU8b++9//Zjp3a9euNUku5++iju8wPu2GG27QmjVrtGLFCnXu3Fldu3bVHXfckWmbjO9s69Onj+6++27n8tTUVBUvXjzLmGPHjlWHDh3k6+srSbr33nu1ZMkSbd261a2Y1qxZo4oVK+qqq65yuX7t2rUaP368goKCnD+tWrVSenq6tm/f7u6hn9N1113n/LfD4VB4eLj27t2brTEytm/evLkeeuihLOsDAwOVkpKSu0ABFDnuzNk7d+7M1px9pqSkJDVs2DDTsoYNG2rLli3O70js2LGjJk+eLEkyM02ZMkUdO3Z0br97925179490xz96quvOmtAly5dtGbNGlWrVk2PP/645s+fn/MTcpYz5++SJUsqODj4gvN3nTp1Mj1et26d88alS5cuVbly5fTKK6+oVq1aevXVV1WlShXntuXLl9fBgwclSQ8//LA+//xz1apVS88991ymmxFlZ8yQkBDnmK6Oq3z58pKU7bp0IevXr9ctt9yi/v37q2XLllnWe3vdIjfOj9zIvv/7v/9Tw4YNVbt2bfXt21fPPfechg4dmmU7coPcKEq5kZqaqu7du6thw4Zavny5lixZoho1aqht27ZKTU3NtK235wYA73d2DWvXrl2WbXJSw6ZOnao1a9Zo7dq1+uKLLzRr1iw9//zzkqS///5bv/32m8valpSUlGlZTEyM89++vr6qU6dOlm1yKi/m8cmTJ+uVV17RF198obJly2ZaFxgYKEnM0y7QMD6tZMmSqlq1qmrWrKmxY8dqxYoVGjNmTKZtnn76acXExGjgwIGZlrt6cXLgwAHNmDFDo0aNkq+vr3x9fVWhQgWdPHnS7S8Rz/jFPZfDhw+rZ8+eWrNmjfNn7dq12rJli6688kq3nuN8/Pz8Mj12OBxKT093e//ffvtNPXv2lHTq7pOuHDhwQKGhoTkPEkCRdKE5+8iRI2rfvr3bc3ZO3Hvvvdq0aZMSExO1dOlS7dq1Sx06dMi0zccff5xpjl6/fr2WL18uSYqKitL27ds1aNAgpaam6u6779add96Z67iknM3fJUuWzPT45MmTzjp0/PjxLOuDgoKc/05MTFTVqlUlSW3atNGvv/6qp556Sr/99puaNWumPn36ZHvMjRs3Osd0dVwOh0OSslWXLuTnn39Ws2bN1KNHjwJbt8iN8yM3cq9+/fravXu3jh07lmk5uXFh5EbhyY3Jkydrx44dGjdunOrWrasGDRpo8uTJ2r59u2bNmpVpW2/PDQDe7+watn79+kzrc1rDKlWqpKpVqyoyMlJ33XWXnnzySQ0bNkxHjx7Nt2PJrtzO459//rkefPBBffHFF2revHmW9QcOHJAk5mkXaBi74OPjoxdffFH9+vVTamqqzEzSqV/Kzz77zPlLmqF27dr6+eefMy2bNGmSKlasqLVr12Z60Tds2DCNHz/erbv4Xnfdddq9e7c2b97scn1UVJR+/vlnVa1aNcuPv79/Do8+b+zZs0dNmzZVZGSkpFPn9GxHjx7V1q1bVbt27YsdHoBCxNWc3alTp2zN2WeLjIzUkiVLMi1bsmSJrrrqKhUrVkySVLFiRTVp0kSTJk3SpEmT1KJFC4WFhTm3Dw0N1bZt27LMz2deDRUcHKwOHTro448/1tSpUzV9+nTnixZPq1q1qtatWydJqlu3rjZu3KhZs2YpPT1ds2bN0tq1a5WamqqhQ4dq165dat++vXPf0NBQde7cWRMnTtQ777yjjz76yO0xM5pQf/zxR6Yx89uGDRt0ww03qHPnzho8eLDLbbZu3aqjR48WmLpFbuSPopYbZ1uzZo3KlCmjgIAA5zJyg9yQilZupKSkyMfHJ9PvSsbjMxsZvN8BkNd8fHzUrVs3SafmmLyoYRmKFSumkydP6vjx4woODtZll13msrZdc801mZZlfLApnfqgLyEhwdkL8qQpU6aoa9eumjJlitq2betym/Xr16tixYoKCQm5yNEVAJ77Ngzv4equkydOnLAKFSrY0KFD7aGHHnLeZfLMLxPPuBP0//73P/P19bUDBw44969Zs6b17ds3y3MdOnTI/P39nTfCO993GJuZNW3a1GrUqGHz58+3bdu22Zw5c5zfJ7Z27VoLDAy03r172+rVq23z5s02c+ZM6927d67PydlxZBxT//79L7jv7t27rWrVqtasWTObO3duphsGnunHH3+0oKAgO3LkSK7jBVB0XGjOfvnlly0oKMiWLl3q9px99ndRJiQkZLp50fjx4zPdvCjDxx9/bJdddpmFhITYZ5995txXp78PMjAw0N59913btGmT/e9//7OxY8fasGHDzMxs2LBhNnnyZEtKSrJNmzZZ9+7dLTw83NLS0nJ1fiTZjBkzMi0rVapUptirVatmX331lfOxqzn/r7/+srJlyzq/R3/MmDEWGBhoxYoVswYNGljr1q3Nz8/P2rdvb7t27XLu93//9382c+ZM27Jli61fv95uvvlmq1evnttj+vr6miTnDV7Nsv7/mJmtXr3aJNn27dvNzGzFihVWrVo12717t5ll77so161bZ6GhodapU6dMvzN79+7NtN24cePsiiuuuOB4nkJunB+5kf3cmD17tn388ce2bt0627Jli40aNcpKlChhL7/8cqbtyA1yw6xo5UZSUpIFBATYww8/bD///LOtX7/eOnXqZKVKlbLffvstUxy83wGQG65q2IoVK0ySPfHEEzmqYRnz3YIFCyw5Odl27dplc+bMsQoVKtgNN9zg3G748OEWHBxsn3/+uW3cuNH69u3r8qZ3lStXtq+++sqSkpKsR48eFhQUZH/++Weujtudefx8Jk2aZL6+vjZy5MhM5yUuLi7Tdxh37tzZ5T3JwE3vzMx1ApqZDRkyxEJDQ+2aa64xSVl+znwRVa9ePfvggw/M7NRdkiXZypUrXT5fmzZt7LbbbjOzCzeM9+/fb127drVy5cpZ8eLFrUaNGs5ms5nZypUrrUWLFhYUFGQlS5a06667LsuXkudEbhrG48aNc3m+zv58okePHtazZ89cxwqgaLnQnF2nTp1szdlmrl+QTJs2za655hrz8/OzypUr29ChQ7M858GDBy0gIMBKlChh//zzj5llvlHqpEmTrFatWubv729lypSx66+/3vmG+6OPPrJatWpZyZIlLTg42Jo1a2aJiYm5Pj/uvPE/+3y4mvPNTt0combNms67HB87dsz5Rnjfvn3OF6JnGjRokEVGRlpgYKCVLVvWbrnlFtu2bZvbYy5ZsiTL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Ki0t1aeffqqsrCwtWbJEjzzyyHnta4zRggULlJaW1sRVtlwnTpxwfp+fn68+ffron//8p6ZPn678/Hy9+uqr+tnPfqbHH39c119/vSorKxu0flOseaFOnDih2267Tb/4xS9cjtfU1OinP/2pTpw4oXfffVcrV65Ubm6ufvvb3zrn+Pn5KSUlRX/605+aq+x6yEbTIhv1tWnTRqNHj9batWu1e/du5ebmqqCgQFOnTnXOsTsb5KJpkQvXnnrqKT300EP61a9+pR07dqigoEDXX399nTmpqam2/s4AAOC8GbRo69atM5LMgQMH7C4FAJrEpEmTzOjRo+tsGzNmjBkwYIB59NFHTb9+/ertExMTYx5++GFjjDH//Oc/TZs2bcx//vMf5/i+ffuMJLNt2zbntsLCQnPVVVcZPz8/Ex4ebmbOnGmqq6uNMcYsWbLEREREmJqamjrHGTVqlJk8ebLz9WuvvWaioqKMJHPxxRebWbNmOdc4deqUeeSRR0z37t2Nn5+fiYiIMPfee+8FvTfGGNOzZ0/z+9//3kyePNkEBgaa7t27myVLlpxzn8GDB5u7777b3H///aZLly5myJAhxpjv3qvOnTubtWvXutyvurraTJ482YwcOdK57dtvvzV33323CQ8PN+3atTM9evQwf/jDH5zjDV1zy5YtRpKRZF555RUzZMgQ4+/vb6644grz7rvvnvO8JJnVq1efc873rVixwjgcjnrb161bZ9q0aWM+//xz57ZFixaZoKAg8+233zq3bdiwwfj5+Zljx4416LjuQDbOjWz8lzuz4cof//hH061btzrb7MpGS8vFgAEDjJ+fn5Fk7rzzTnLRiDX/7//+z0gyc+fOtS0XX3/9tfH39zcFBQXn3P/f//63kWQ++eSTBh0XAFqKAwcOGElm3bp1dpeCC0TDuIWjYQzA233/w//27dtNeHi4iY+PN5999plp06aN+cc//uEc37p1q7Esy+zdu9cYY8xTTz1lLrvssjprfv/D/4EDB0xAQIC56667zM6dO83q1atNSEiIeeSRR4wx330Q9PPzq/NB8MiRI3W2bdy40QQFBZlZs2YZSWbhwoWmV69eZtasWcYYY1566SUTFBRk1q1bZ/7973+bTZs2maVLl17w+9OzZ0/TuXNns3DhQrNnzx7zxBNPmDZt2phdu3addZ/BgwebwMBAM2PGDLNr1y7n3B//+Mdm0aJFxhhjduzYYQYNGmRCQkLMbbfdZh544AHz+9//3nz77bfm0ksvNW+++aYxxpi5c+ea7t27m40bN5qSkhJTVFRk8vLynMdq6JpnNsUuu+wy85e//MV8/PHH5tZbbzU9e/Z0NlNcceeH///3//6fiYmJqbPt008/NZLM1q1bndsqKytNmzZtzFtvvdWg47oD2Tg3svFfTdkwPnjwoBk8eLAZP358ne12ZaOl5SI3N9esWbPGSDJdu3YlF41Y83TDuFevXrbl4sUXXzTt2rUzK1euNJdddpm5+OKLzW233Wb2799fb+5FF11kVqxY0aDjAkBLQcPYe9AwbuFoGAPwdpMmTTJt27Y1HTp0MO3atTOSTJs2bczLL79sjDFmxIgR5he/+IVz/r333uu8+skYY+6//35z7bXX1lnz+x/+f/Ob35ioqChz6tQp55yFCxeawMBA5xVio0ePNlOmTHGOL1myxHTt2tU5PnToUPOHP/zB2dTZsmWL+fOf/2wiIiKMMcbMnz/f9OnTx5w4ccKN7853H/4nTJjgfH3q1CkTFhbm/MDtyuDBg82AAQPqbNu9e7cJDw831dXV5uTJk6ZPnz4mIyPDbNu2zfzpT38yPj4+zmbIww8/bGbOnGmM+e79vvbaa+u8dxey5plNsWXLljnX2rFjh5Fkdu7cedbzcueH/zvuuMMMHz68zrbKykqX/we4U6dOJjc3t0HHdQeycW5k47+aomH8P//zP8bf399IMiNHjjRVVVX15tiRjZaWC2P+e/X4448/Ti4asebphvH/+3//z7lWc+fiiSeeML6+viYqKsq88cYb5r333jNDhw41UVFRdf4qxRhjBgwY4PyHAQDwNjSMvQf3MAYAeLyf/OQnKi4u1qZNmzRp0iRNnjxZt9xyiyTpjjvu0KpVq3T8+HGdOHFCeXl5mjJlinPfqqoqtW/f/pzr79y5UwkJCbIsy7ntmmuuUUVFhQ4cOCBJGj9+vF555RV9++23kqTnn39e//M//6M2bb77VfrBBx/oscceU1JSkiQpKSlJd9xxh0pLS3Xs2DHddtttqqqq0o9+9CPdcccdWr16dZ0HqF2IK664wvm9ZVkKDw/Xl19+ec59Bg4cWOf19u3bddVVV8nHx0cff/yxDh48qAULFig2Nlb33nuvhgwZ4pwbERGhsrIySd/dj7G4uFhRUVG67777lJ+ff8FrujqviIgISfrB87KDv7+/jh07Zsuxyca5kY2mk5WVpa1bt2rNmjXau3evHnzwwXpz7MpGS8pFYGCgMxu/+93vyMUF5KJ37951xqXmy8WpU6dUXV2tP/3pT7r++uv14x//WKtWrdKePXv01ltv1Zlr5+8MAADOFw1jAIDH69ChgyIjIxUTE6NnnnlGmzZt0vLlyyVJI0eOVLt27bR69Wr93//9n6qrq3Xrrbc69w0JCan3obIxRo4cKWOM/vrXv+qzzz5TUVGRxo8f7xyvqKjQo48+qlWrVkmSVq1ape3bt2vPnj1q3769unfvro8//lhPP/20/P39ddddd2nQoEGqrq6+4Np8fX3rvLYsS6dOnTrnPh06dKjz+uTJk/L395f03cN9fH1966wbGBjo/H7r1q2KjIyUJF155ZXat2+fHn/8cVVVVen22293vv+NXdPVeZ1uzPzQeblLeHi4vvjiizrbTr8ODw+vs/3rr79WaGhos9T1fWTj3MhG0wkPD9dll12mUaNGacmSJVq0aJFKS0vrzLErGy0pF8XFxc5svPjii+TiAnLh4+NT55yk5svF6QZ13759ndtCQ0MVEhKi/fv315lr5+8MAADOFw1jAECL0qZNG/3mN7/Rww8/rKqqKvn4+GjSpElasWKFVqxYof/5n/9xfuCUpAEDBmjXrl0yxpx1zejoaL333nt15rzzzjvq2LGjunXrJklq3769xowZo+eff16rVq1SVFSUrrzySuf8K6+8Uh9//LG6d+8uSerevbsiIyMVGRnpvKLM399fI0eO1J/+9CcVFhbqvffe0/bt2936/jRWZGSks5aoqCj5+vpqwYIFqqmp0fvvv6+//e1vqq6u1sqVK/X6668rNTXVuW9QUJDGjh2rnJwcvfjii3rllVf09ddfX9CadktISND27dvrXJ3297//XUFBQXUaAnv37tXx48c1YMAAO8qsg2w0DbLxw0435U5fTSt5TjY8PReRkZH1skEuWl4urrnmGknSxx9/7Nz29ddf6/Dhw+rZs6dz2/Hjx7V3717bcwEAwA+hYQwAaHFuu+02tW3bVgsXLpQkpaen680339Qbb7xR50+Lpe/+NLmiokI7duw463p33XWXPvvsM917773atWuX1qxZo0ceeUQPPvig84O79N2fGP/1r3/VM888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//znpmPHjmbSpEnGGGPWrl1rLrroIvPee++53K+iosJcf/315p577nFu+/rrr01KSooJCQkx7du3N5GRkeaZZ55xjjd0zS1btjh/hgUFBWbgwIHG39/fJCQkmF27dp31nPbt22ckmW3btp3z3L/vkUceMTExMeec4+q/wdM2bNhg/Pz8zLFjxxp0XHcgG+dGNr7TVNn45S9/aSZMmGBWrFhhHA5HvfGVK1eabt26NeiY7tDScnHZZZcZPz8/I8nMnDnTOUYuzn/NJUuWGElm0aJFtufitOLiYiPJbNy4sc52u3IBAM3lwIEDRpJZt26d3aXgAtEwbuFoGAPwdt//8L99+3YTHh5u4uPjjTHGfPPNN6a0tNT5NW/ePBMQEGC2b99ujDHmvvvuMzfccEOdNb//4X/z5s2mTZs25rHHHjMff/yxWbFihfH393c2ED788EMjyXzyySfONU5v27NnjzHGmOeee85ERESYuXPnGklm7ty5pnPnziY3N9cYY8zcuXNN9+7dzcaNG01JSYkpKioyeXl5F/z+SDLdunUzeXl5Zs+ePea+++4zgYGB5siRI2fdp2fPniYoKMjMmzfPfPLJJ+aTTz4x3377renRo4d5/fXXjTHGFBUVmYEDB5qwsDBz5513mp///OfmueeeM4cPHzadO3d2vhd33323iY2NNf/85z/Nvn37zN///nezdu1aY4xp1JpnNsXi4+NNYWGh2bFjh0lOTjaJiYlnPSe7GsaVlZWmTZs25q233mrQcd2BbJwb2fhOU2Rj/fr15pJLLjHl5eVnbRjv3LnTSDL79u1r0HEvVEvLxSuvvGLWrl1rJBmHw0EuGrHm6YZx//79PeJ3hjHG3HPPPaZPnz71ttuVCwBoLjSMvQcN4xaOhjEAbzdp0iTTtm1b06FDB9OuXTsjybRp08a8/PLL9ea+9957pn379ubFF190bhs9erSZMmVKnXnf//CfkpJirrvuujpzZsyYYfr27et8HRMTYx577DHn61//+tfOBoQxxlx66aUmLy/P2dTZsmWLefzxx01CQoIxxph7773XXHvttebUqVONfzNckGQefvhh5+uKigojyfmB25WePXuam266qc62/Px8M3DgQGOMMWVlZaZz587mt7/9rdm2bZt56KGHTNu2bZ3NkAkTJphFixYZY4wZOXKkmTx5ssvjNGbN719Fedpf//pXI8lUVVW5PJZdDWNjjOnUqZOzydOcyMa5kY3vuDsbhw8fNt27dzcbNmwwxpizNozLy8uNJFNYWNig416olpYLY/579fgvfvELctGINc+8wvg0O39nVFVVmU6dOpknn3yy3phduQCA5kLD2HtwD2MAgMf7yU9+ouLiYm3atEmTJk3S5MmTdcstt9SZs3//ft10002aPn26br/9duf2qqoqtW/f/pzr79y5U9dcc02dbddcc4327NnjvE/i+PHjlZeXJ0kyxmjVqlUaP368JKmyslJ79+5VWlqakpKSJElJSUn63e9+p71790r67kFMxcXFioqK0n333af8/PwLeEfquuKKK5zfd+jQQUFBQfryyy/PuU9cXFyd19u3b1diYqIk6d1331WXLl306KOPKjY2Vr/73e90ySWXOOdGRESorKxMkvSLX/xCL7zwgmJjY/XLX/5S77777gWv6eq8IiIiJOkHz8sO/v7+OnbsmC3HJhvnRjbc74477lBKSooGDRp0znn+/v6SZEs2WlIuAgMDndlYvnw5ubiAXPTu3bvOuGTP74zVq1frm2++0aRJk+qN2ZkLAAAagoYxAMDjdejQQZGRkYqJidEzzzyjTZs2afny5c7xyspKjRo1SgkJCXrsscfq7BsSElLvQ2VjjBs3Th9//LG2bt2qd999V5999pnz4TcVFRWSpJycHK1atUqStGrVKn344Yd6//33JUlXXnml9u3bp8cff1xVVVW6/fbbdeutt15wXZLk6+tb57VlWTp16tQ59znzye2SdPLkSecH2RMnTtQbDwwMdH6/detWRUZGSpJGjBihf//733rggQd06NAhDR06VNOnT7+gNV2dl2VZkvSD52WHr7/+WqGhobYcm2ycG9lwvzfffFPz5s2Tj4+PfHx8lJaWpvLycvn4+OiZZ55xzvv6668lyZZstKRcFBcXO7Pxv//7v+TiAnLh4+NT55wke35nLFu2TD/72c900UUX1RuzMxcAADQEDWMAQIvSpk0b/eY3v9HDDz+sqqoqGWM0YcIEnTp1Sn/+85+dHxJPGzBggD766KNzrhkdHa133nmnzrZ33nlHffr0Udu2bSVJ3bp10+DBg/X888/r+eef13XXXaewsDBJ0kUXXaSuXbvq008/Vffu3SVJ3bt3V2RkZJ0rooKCgjR27Fjl5OToxRdf1Cuv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/cLbUZw9e1abN29WTExM4fr9+/erXbt2+vDDD/X5558rNjZWI0aM0ObNmwtf4+/vr549e2rZsmWVHR+Qm5ubZs2apa1btyojI0Nms1lZWVkO29+6des0adIkzZo1SxaLRUFBQerZs6e+++47u+7n8uXLio6O1uzZszV79mylpKSoTp06dt0HAMAxjh49qnbt2mnhwoW6evVqkXVXr17V66+/rnbt2uno0aPGBAQAGG7FihV69913lZycrCFDhpRqm6FDhyopKUnJyclauXKlgxOioiiMAbikvLw8nT9/Xi1btpQkrV+/XkFBQWrcuHHha6ZPn65XXnlF4eHhuv/++zVhwgT16tVLGzZsKDJW3759tXbt2krND/ynXr16yWKxqH79+goPD1diYqJDPnV//fXXNWrUKMXGxurBBx/U8uXL5ePjo7fffttu+/i5+D5y5Ii2b9+u6dOny82NXzcAwBVcuHBBUVFRysnJUX5+fomvyc/PV05OjqKiorjSGACqIavVqkWLFunxxx8vdVn8s6FDh+rxxx/XokWLuMrYyXEGB8DpZWRk6Mknn9TcuXMLl23atEn9+/cv/HnPnj0KCQn51bGuXr2qunXrFlnWqVMnnTt3TqdPn7ZbZqCsmjVrpr1792rkyJFKSEjQyJEjlZuba7fxb968qaysLEVFRRUuc3NzU1RUlA4cOFDh8a1Wq5YuXaqIiAg1btxYFoulyL4AAM5v0aJFv1gW/+zn0viNN96opGQAAGexe/duffnllxo3bly5th87dqy++OIL7dmzx87JYE8Uxi5s8+bN8vX1LfIVHR1tdCzA7lq0aKHevXsXuQpy/fr1euqppwp/PnPmjBo1avSL46xfv16HDx9WbGxskeU/b3fmzBk7pgbK7q677tKyZcuUnJysdevWKTw8XN98841dxr58+bLy8/N1zz33FFl+zz336OLFixUa+8aNG3r66ac1btw4jRkzRunp6br33nsrNCYAoHLl5eXprbfe+tWy+Gf5+fl688039eOPPzo4GQDAmSxfvlwPPPCAQkNDdePGjSJf/3nBy3+v+/krNDRUDzzwgFasWGHgu8Cv8TA6AMrvkUceKXbf1YyMDA0fPtygRIBj1K9fX4MGDdK4ceN0+PBhNWvWTF5eXkXuiZqXl6caNWrccYxPP/1UsbGxSkxMVOvWrYus8/b2liS7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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import StronglyEntanglingAnsatz, AtomicType\n", - "\n", - "ansatz = StronglyEntanglingAnsatz({AtomicType.NOUN: 1, AtomicType.SENTENCE: 1},\n", - " n_layers=2, n_single_qubit_params=3)\n", - "\n", - "train_circuit = ansatz(train_diagram)\n", - "\n", - "train_circuit.draw(figsize=(14, 12))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Parameterise" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1, 2)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from lambeq import NumpyModel\n", - "\n", - "model = NumpyModel.from_diagrams([train_circuit], use_jit=True)\n", - "model.initialise_weights()\n", - "model([train_circuit]).shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define evaluation metric" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Array(-0.21474883, dtype=float32)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from jax import jit\n", - "\n", - "@jit\n", - "def loss(y_pred, _):\n", - " \"\"\"The goal is to minimise the expectation value of the Pauli Z operator.\n", - " lambeq does not provide functionality to directly calculate expectation\n", - " values. Therefore, we need to calculate the expectation value from the\n", - " measurement probabilities of the Ket(0) and Ket(1) using their\n", - " eigenvalues.\"\"\"\n", - "\n", - " # 0 state probability\n", - " p0 = y_pred[:, 0]\n", - " # 1 state probability\n", - " p1 = y_pred[:, 1]\n", - "\n", - " # expectation value\n", - " exp = p0 - p1 # eigenvalues are 1 and -1\n", - "\n", - " return - exp.mean() # minimise expectation of measuring a 1\n", - "\n", - "loss(model([train_circuit]), None)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " [train_circuit],\n", - " [-1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialize trainer" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 20/20 [00:02<00:00, 8.96it/s]\n" - ] - } - ], - "source": [ - "from lambeq import QuantumTrainer\n", - "from lambeq import RotosolveOptimizer\n", - "from tqdm import trange\n", - "\n", - "EPOCHS = 5\n", - "\n", - "losses = []\n", - "\n", - "for i in trange(20): # calculate results for 100 different seeds\n", - "\n", - " trainer = QuantumTrainer(\n", - " model,\n", - " loss_function=loss,\n", - " epochs=EPOCHS,\n", - " optimizer=RotosolveOptimizer,\n", - " optim_hyperparams={},\n", - " evaluate_on_train=True,\n", - " verbose='suppress',\n", - " seed=i\n", - " )\n", - "\n", - " initial_loss = loss(trainer.model([train_circuit]), None)\n", - "\n", - " trainer.fit(train_dataset, log_interval=12)\n", - " losses.append([initial_loss] + trainer.train_epoch_costs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Show results" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# get mean and std of the losses\n", - "import numpy as np\n", - "\n", - "mean_losses = np.mean(losses, axis=0)\n", - "std_losses = np.std(losses, axis=0)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Hil40O4qAAAA0hrBNx14AlJ9pdTUYHclAAAAaYvgmw7cOVK4nnYHAACAXiD4pgPDIZmmVF9ldyUAAABpi+CbLjx+KbhfikbtrgQAACAtEXzThdsvhYJSiGnNAAAAeoLgmy5cXincyHy+AAAAPUTwTScupjUDAADoKYJvOnH7pfrD1sgvAAAAuoXgm05a+nxpdwAAAOg2gm86cTitjw1MawYAANBdBN904/ZJteXWvL4AAADoMoJvuvEErFaHUK3dlQAAAKSVtAu+999/v0aNGiWfz6cZM2Zo3bp1Xdpu5cqVMgxDc+fO7dsC+5rLZ53c1sDliwEAALojrYLvs88+q2XLlun222/Xpk2bNGXKFM2ePVvl5eUdbrdr1y7deOONOuuss/qp0j7mdFqzOwAAAKDL0ir4/vznP9eVV16pRYsWacKECXrwwQfl9/v12GOPtbtNJBLR/Pnzdeedd2r06NGdHqOxsVHV1dUJt5TjybXm84002V0JAABA2kib4BsKhbRx40bNmjUrtszhcGjWrFlau3Ztu9vdddddGjp0qBYvXtyl4yxfvlwFBQWxW0lJSa9rTzp3jtQUpN0BAACgG9Im+B48eFCRSERFRUUJy4uKilRWVtbmNn/961/16KOP6pFHHunycW6++WZVVVXFbnv27OlV3X3C4ZKiUamR4AsAANBVLrsL6Cs1NTX61re+pUceeURDhgzp8nZer1der7cPK0sST45Uu18aOEoyDLurAQAASHlpE3yHDBkip9Op/fv3Jyzfv3+/iouLj1r/448/1q5du3TRRRfFlkWjUUmSy+XSjh07NGbMmL4tui+5/c3TmgUlb67d1QAAAKS8tGl18Hg8mj59ul5//fXYsmg0qtdff10zZ848av3x48dr69at2rJlS+x28cUX64tf/KK2bNmSmr273dEyrRmXLwYAAOiStBnxlaRly5ZpwYIFKi0t1amnnqp7771XwWBQixYtkiRdccUVGjFihJYvXy6fz6dJkyYlbD9gwABJOmp5WjIMyXBY05rlD7O7GgAAgJSXVsH38ssv14EDB3TbbbeprKxMU6dO1apVq2InvH366adyONJmELv3PH4peECKhCVnWn0qAQAA+p1hmqZpdxGprLq6WgUFBaqqqlJ+fn7fHzAcknavkZxu6/LEHYmGpdqD0jEzJP+gvq8NAAAgBXU1r2XR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6bnnnpPb7e5wfa/XK6/X26X6U8GZJV6dNNStreVN+vV7QS07rR/6kHvDE5BqD1izO/gH2V0NAADIIj0Kvu+//75OPfVUSdJvf/tbTZo0SWvWrNGrr76q73znO10OvoWFhSosLOx0vZkzZ6qyslIbN27U9OnTJUlvvPGGotGoZsyY0e521dXVmj17trxer/70pz/J5/N1qa50YhiGrinN1dUvHdYT7wa1ZFqucj0p3MHicElmhOALAAD6XY8SUlNTU2xU9LXXXtPFF18sSRo/frw+//zz5FXX7MQTT9ScOXN05ZVXat26dVqzZo2WLl2qefPmxWZ02Lt3r8aPH69169ZJskLveeedp2AwqEcffVTV1dUqKytTWVmZIpE0aAnohtljfBo90KXqRlPPvF9ndzmdc3mtUV8AAIB+1KPgO3HiRD344IP63//9X61evVpz5syRZM2dO3jw4KQW2OLpp5/W+PHjde655+qCCy7QmWeemdBT3NTUpB07dqiuzgp+mzZt0jvvvKOtW7dq7NixGjZsWOyW6n273eUwDH2neV7fX22uVWM4xWeo8wSkxioplAYhHQAAZIwezeP71ltv6atf/aqqq6u1YMECPfbYY5KkH/zgB/rwww/1xz/+MemF2iWV5/GNF4qYOvvX+/V5bVT//qUCfWNS17ftd6YpVe+TRpZKeR33aAMAAHSmq3mtRz2+55xzjg4ePKjq6moNHHjkwglLliyR3+/vyS7RSx6noSun5equt6v10MZaXTbBL5fDsLusthmGdauvJPgCAIB+06NWh/r6ejU2NsZC7+7du3Xvvfdqx44dR823i/4zb6JfA30O7a6K6KWPGuwup2MevxQsl6KZ1W8NAABSV4+C71e+8hU9+eSTkqTKykrNmDFDP/vZzzR37lytWLEiqQWi6/xuhxZNtVocVmyoUUpfjdodsC5f3Ji6V8YDAACZpUfBd9OmTTrrrLMkSb///e9VVFSk3bt368knn9QvfvGLpBaI7rlickABt6HtB8N6a3ej3eW0z+mWomEuXwwAAPpNj4JvXV2d8vLyJEmvvvqqLrnkEjkcDp122mnavXt3UgtE9wzwOfSNSVaf9YoNtTZX0wmnh2nNAABAv+lR8B07dqyef/557dmzR6+88orOO+88SVJ5eXn/zHyADn375Fx5HNK6fSFt2JfCo76egNRQJTXV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dfrTgH5gmqaWLl2q5557Tm+88YaOO+44u0tCEkSjUTU2NtpdBrrg3HPP1datW7Vly5bYrbS0VPPnz9eWLVsIvWmotrZWH3/8sYYNG2Z3KTGM+KaQZcuWacGCBSotLdWpp56qe++9V8FgUIsWLbK7NHRBbW1twl+1//znP7VlyxYNGjRIxxxzjI2VoSuuvfZaPfPMM3rhhReUl5ensrIySVJBQYFycnJsrg5dcfPNN+v888/XMccco5qaGj3zzDN666239Morr9hdGrogLy/vqJ76QCCgwYMH02ufJm688UZddNFFOvbYY7Vv3z7dfvvtcjqd+vrXv253aTEE3xRy+eWX68CBA7rttttUVlamqVOnatWqVUed8IbUtGHDBn3xi1+MPV62bJkkacGCBXriiSdsqgpdtWLFCknSOeeck7D88ccf18KFC/u/IHRbeXm5rrjiCn3++ecqKCjQ5MmT9corr+jLX/6y3aUBWeGzzz7T17/+dR06dEiFhYU688wz9fe//12FhYV2lxbDPL4AAADICvT4AgAAICsQfAEAAJAVCL4AAADICgRfAAAAZAWCLwAAALICwRcAAABZgeALAACArEDwBQAAQFYg+AIA2mQYhp5//nm7ywCApCH4AkAKWrhwoQzDOOo2Z84cu0sDgLTlsrsAAEDb5syZo8cffzxhmdfrtakaAEh/jPgCQIryer0qLi5OuA0cOFCS1YawYsUKnX/++crJydHo0aP1+9//PmH7rVu36ktf+pJycnI0ePBgLVmyRLW1tQnrPPbYY5o4caK8Xq+GDRumpUuXJjx/8OBBffWrX5Xf79e4ceP0pz/9Kfbc4cOHNX/+fBUWFionJ0fjxo07KqgDQCoh+AJAmrr11lt16aWX6t1339X8+fM1b948bd++XZIUDAY1e/ZsDRw4UOvXr9fvfvc7vfbaawnBdsWKFbr22mu1ZMkSbd26VX/60580duzYhGPceeeduuyyy/Tee+/pggsu0Pz581VRURE7/gcffKCXX35Z27dv14oVKzRkyJD+ewMAoJsM0zRNu4sAACRauHChnnrqKfl8voTlP/jBD/SDH/xAhmHoO9/5jlasWBF77rTTTtO0adP0wAMP6JFHHtH3v/997dmzR4FAQJL00ksv6aKLLtK+fftUVFSkESNGaNGiRfrhD3/YZg2GYeiWW27R3XffLckK07m5uXr55Zc1Z84cXXzxxRoyZIgee+yxPnoXACC56PEFgBT1xS9+MSHYStKgQYNi92fOnJnw3MyZM7VlyxZJ0vbt2zVlypRY6JWkM844Q9FoVDt27JBhGNq3b5/OPffcDmuYPHly7H4gEFB+fr7Ky8slSVdffbUuvfRSbdq0Seedd57mzp2r008/vUevFQD6A8EXAFJUIBA4qvUgWXJycrq0ntvtTnhsGIai0agk6fzzz9fu3bv10ksvafXq1Tr33HN17bXX6qc//WnS6wWAZKDHFwDS1N///vejHp944omSpBNPPFHvvvuugsFg7Pk1a9bI4XDohBNOUF5enkaNGqXXX3+9VzUUFhZqwYIFeuqpp3Tvvffq4Ycf7tX+AKAvMeILACmqsbFRZWVlCctcLlfsBLLf/e53Ki0t1Zlnnqmnn35a69at06OPPipJmj9/vm6//XYtWLBAd9xxhw4cOKDrrrtO3/rWt1RUVCRJuuOOO/Sd73xHQ4cO1fnnn6+amhqtWbNG1113XZfqu+222zR9+nRNnDhRjY2NevHFF2PBGwBSEcEXAFLUqlWrNGzYsIRlJ5xwgj788ENJ1owLK1eu1DXXXKNhw4bpv//7vzVhwgRJkt/v1yuvvKLvfe97OuWUU+T3+3XppZfq5z//eWxfCxYsUENDg+655x7deOONGjJkiL72ta91uT6Px6Obb75Zu3btUk5Ojs466yytXLkyCa8cAPoGszoAQBoyDEPPPfec5s6da3cpAJA26PEFAABAViD4AgAAICvQ4wsAaYguNQDoPkZ8AQAAkBUIvgAAAMgKBF8AAABkBYIvAAAAsgLBFwAAAFmB4AsAAICsQPAFAABAViD4AgAAICv8f4/iBE8I/DcKAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "fig, ax = plt.subplots(figsize=(8, 6))\n", - "\n", - "ax.set_title('Training set')\n", - "ax.set_xlabel('Epochs')\n", - "ax.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "ax.plot(mean_losses, color=next(colours));\n", - "ax.fill_between(range(len(mean_losses)), mean_losses-std_losses, mean_losses+std_losses, alpha=0.2, color=next(colours));" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Final output" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Array([[1., 0.]], dtype=float32)" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model([train_circuit]).round(3)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/tensor.ipynb b/docs/examples/tensor.ipynb deleted file mode 100644 index dd8bdf3f..00000000 --- a/docs/examples/tensor.ipynb +++ /dev/null @@ -1,152 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tensor" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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vBylpaUoKSnB//73P1y7dg3Xr18XH/Pz88X+3d3dER4eLnZDhw5tcjFykg8DZRckCIK4YXx445iVlSVuHBuoVCo4ODjA0dFRr2vuOUtLS5iamkKlUkGlUol/N35UqVSor6+HVqtFXV0dtFqt3t8PP9bU1Igb8+LiYr2/G3fV1dV6tWs0GjEkNzwGBASgX79+su+V7SmBsrHy8vIm81V2djauXbvW5NwuOzu7JvNQc/OYra0tTE1Nm52PHn5OqVRCoVA0Ox81N4+VlZU1mYeam78a3zVIrVbD399fLywHBARg4MCBvWavbG/THQNlYzqdDj/99FOTQNXwWFFRode/QqGAra0t7OzsxJDZ2qNGo4GZmZm4bLbVNXyhbFg229NVV1ejrKwMpaWl7XpsPE7AL3cdagjSjR9dXFy6zQ6U3qjnH0vthhQKBTw9PeHp6dnkhOJ79+7hxo0bLYa24uJiXLlyRdz4lpaWdvjODWPGjMHJkyc7XLe1tbVe4HB1dcWgQYOaDSLe3t5wdXXlyqGTaTQajB49GqNHj9Z7vra2Fjdu3EBhYWGLXwpu3bqFCxcuiP939BflNjY2uH//fodrNjMzaxJivb29mw25rq6u6Nu3r+xfSIg6qmGvpLe3d5MfhAmCgKKiIty+fbtJMGsc0vLy8vReq6ure6R6XFxcJN3H2sLCokmw9fHxQUhISLOB197eHj4+Pjz1pBvjWrebsbW1xdChQ9vdf319vbinp6qqql17hlQqFZYvX97qXsyGR7VaLR4i5Tk/3ZdarRb36LWHIAioqKgQ9xC2the74bX6+noIgtDqXsyHHzUajbhnnV88qDdTKBRwcXFp9T7UzREEAVVVVSgrK0NZWZne8ti4azgq1dAJggCdTqe3x7KtvZpqtVoMibxMT+/DQNnDKZVKce8NkaEoFArY2NjAxsZG7lKIqAUKhQKWlpawtLTs1ZdXo87Rvc/oJSIiIiLZMVASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIRERGRJAyURERERCQJAyURERERScJASURERESSMFASERERkSQMlEREREQkCQMlEREREUnCQElEREREkjBQEhEREZEkDJREREREJAkDJRERERFJwkBJRERERJIwUBIZmVKphKOj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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser()\n", - "diagram = parser.sentence2diagram('Alice gives Claire the flowers')\n", - "diagram.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import AtomicType, MPSAnsatz, SpiderAnsatz, TensorAnsatz\n", - "from lambeq.backend.tensor import Dim\n", - "\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "TensorAnsatz({N: Dim(4), S: Dim(3)})(diagram).draw(figsize=(8, 2))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/sAAADcCAYAAAAvObEpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA28ElEQVR4nO3deXRU9f3/8ddkXyGEEBMghDVhkSCEAolsFhQUEdzAAIrKF5Uv9VhXbH9W1KptRQv01AptqahlKYgLqIhxAwS0iICyiBiQsIQlEAJJINt8fn9wMl8CCSSYzJ3c+3ycM4dklsz7fT+fuXdedy53XMYYIwAAAAAAYBt+VhcAAAAAAADqFmEfAAAAAACbIewDAAAAAGAzhH0AAAAAAGyGsA8AAAAAgM0Q9gEAAAAAsBnCPgAAAAAANkPYBwAAAADAZgj7AAAAAADYDGEfAAAAAACbIewDAAAAAGAzhH0AAAAAAGyGsA8AAAAAgM0Q9gEAAAAAsBnCPgAAAAAANkPYBwAAAADAZgj7AAAAAADYDGEfAAAAAACbIewDAAAAAGAzhH0AAAAAAGyGsA8AAAAAgM0Q9gEAAAAAsBnCPgAAAAAANkPYBwAAAADAZgj7AAAAAADYTIDVBdSn7Oxs5ebm1vvzxMTEqFWrVvX+PLXlrf6dinGH0zDn4UTMe2dy8rg7uXcnc/q4+2r/P5dtw352drY6deqkoqKien+usLAwbd++3acmiDf7dyrGHU7DnIcTMe+dycnj7uTenczp4+6L/dcF24b93NxcFRUV6d///rc6depUb8+zfft2jRs3Trm5uT41ObzVv1Mx7nAa5jyciHnvTE4edyf37mROH3df7b8u2DbsV+jUqZN69OhhdRmWcXr/TsW4w2mY83Ai5r0zOXncndy7kzHul44T9AEAAAAAYDOEfQAAAAAAbIawDwAAAACAzdgy7H/++edKTU31/D537lxFRUVZV5ADtG7dWjNmzLC6DDgM8w5OxLyHtzHnrOFyufTOO+/U+P5PPfWUrrjiinqrx6k+//xzuVwuHT9+3OpSGgxjjO655x5FR0fL5XIpKipKv/71r60uy5EadNhft26d/P39NWzYsAveb/To0frhhx+8VJX07bffql+/fgoJCVFCQoJeeOEFrz23VdavX6977rnH6jIkSceOHdPYsWPVqFEjRUVFacKECSooKLC6LNQDX5p3zz33nNLT0xUWFsbORdQrX5n3P/30kyZMmKA2bdooNDRU7dq109SpU1VSUmJ1aahjvjLnJOmGG25Qq1atFBISovj4eN1+++06cOCA1WVdkoMHD+r+++9X27ZtFRwcrISEBA0fPlyffPLJJf29Rx555JIfWxuLFy9Wx44dFRISoq5du+qDDz6o9+f0poEDB3o9mJ4+fVqTJ09W06ZNFRERoZtvvlmHDh3yag116cMPP9TcuXP13nvvKScnR5dffrnVJdW5hvI6aNBhf86cObr//vu1atWqC67oQ0NDFRsb65WaTpw4oWuuuUaJiYnasGGDpk2bpqeeekp///vfvfL8VmnWrJnCwsKsLkOSNHbsWG3dulWZmZl67733tGrVKp95k4K65UvzrqSkRLfeeqsmTZpkdSmwOV+Z999//73cbrdmz56trVu3avr06Zo1a5Z++9vfWl0a6pivzDlJuuqqq7Ro0SLt2LFDS5YsUVZWlm655Rary6q1n376Sampqfr00081bdo0fffdd/rwww911VVXafLkyZf0NyMiItS0adNqb6+LHXFr165VRkaGJkyYoI0bN2rkyJEaOXKktmzZ8rP/tpM9+OCDWrZsmRYvXqyVK1fqwIEDuummm6wu65JlZWUpPj5e6enpiouLU0CAb30B3M99LTSo14FpoE6ePGkiIiLM999/b0aPHm2ee+45z22fffaZkWQkmQ0bNphXX33VNG7cuNLjly5danr27GmCg4NN06ZNzciRIz23nT592jz88MOmefPmJiwszPTq1ct89tlnVdaxYcMGz/MYY8zf/vY306RJE1NcXOy5z5QpU0xycnLdNV8D59b1c504ccKMGTPGhIWFmbi4OPPnP//ZDBgwwDzwwAPGGGMSExPN9OnTjTHGZGRkmFGjRlV6fElJiWnatKl57bXXjDHGlJeXm+eff960bt3ahISEmJSUFLN48WLP/Y8dO2bGjBljYmJiTEhIiGnfvr3517/+ddE6t23bZiSZ9evXe65bvny5cblcZv/+/T9zKfyful6+dcVX67pUDWXena2q9Y0d+Orc8tW6fo6GOO8rvPDCC6ZNmzaX9Fhf5Kvzy6nb+Kq8++67xuVymZKSkkt6fFW8Me7XXnutadGihSkoKDjvtry8PGOMMZLM22+/7bl+/PjxRpIJDg42bdq0MU888USlvqdOnWq6detW6f4jRowwzz77rImPjzetW7c2xhiTnZ1tbr31VtO4cWPTpEkTc8MNN5jdu3cbYy7e+6hRo8ywYcMqXde7d29z7733XsJSqDlvvRYrlvHZl1dffdVIMh9//LFJTU01oaGhJi0tzXz//feVHvvOO++Y7t27e8bnqaeeMqWlpRd9zuPHj5vAwMBKr5Ht27cbSWbdunV13mNV6nL5nrsMExMTK61PjDmzDrj99ttNVFSUCQ0NNUOHDjU//PCDMcYYt9ttYmJizOLFiz11JSUlmbi4OM/jV69ebYKCgkxhYaEx5sxrZsKECSYmJsZERkaaq666ymzatMlz/4rXxj/+8Q/TunVr43K5jDHGLF682Fx++eUmODjYSDK9evWq8jV5LqteB5eiwX6yv2jRInXs2FHJyckaN26c/vWvf8kYU6PHvv/++7rxxht13XXXaePGjfrkk0/Uq1cvz+2/+tWvtG7dOi1cuFDffvutbr31Vg0dOlQ7d+686N9et26d+vfvr6CgIM91Q4YM0Y4dO5SXl1f7Rn3EQw89pDVr1mjp0qXKzMzU6tWr9c0331R537Fjx2rZsmWVDp1fsWKFioqKdOONN0qS/vCHP+j111/XrFmztHXrVj344IMaN26cVq5cKUn63e9+p23btmn58uXavn27XnnlFcXExFy0znXr1ikqKko9e/b0XDd48GD5+fnpq6+++jmLABZoKPMOqEsNed7n5+crOjr6kh4L6zTUOXfs2DHNmzdP6enpCgwMvITOrXHs2DF9+OGHmjx5ssLDw8+7vbr/ClZxdMWbb76pmTNn6h//+IemT59+wef65JNPtGPHDs/RjqWlpRoyZIgiIyO1evVqrVmzRhERERo6dGiNPu1ct26dBg8eXOm6IUOGaN26dRd9bEMwc+ZMpaWlaeLEicrJyVFOTo4SEhIkSf/v//0/vfTSS/r6668VEBCgu+++2/O41atX64477tADDzygbdu2afbs2Zo7d66ee+65iz7nhg0bVFpaWmm5duzYUa1atWqQy3XmzJl65pln1LJlS+Xk5Gj9+vXn3efOO+/U119/raVLl2rdunUyxui6665TaWmpXC6X+vfvr88//9xz/927d+vUqVP6/vvvJUkrV67UL37xC89r4tZbb9Xhw4e1fPlybdiwQT169NCgQYN07Ngxz9/48ccf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BxUQEHDesr/YuUBcLpeuvPJK3XfffZLO7NB5++23L9pDQ3odNLhP9t977z3l5eVpwoQJ562Ubr75Zs2ZM0fTpk274N+YOnWqBg0apHbt2um2225TWVmZPvjgA02ZMkVJSUkaO3as7rjjDr300kvq3r27jhw5ok8++UQpKSkaNmzYBf/2mDFj9PTTT2vChAmaMmWKtmzZopkzZ170BCq+LDIyUuPHj9ejjz6q6OhoxcbGaurUqfLz8/Ps2azKmDFjNGvWLP3www/67LPPKv29Rx55RA8++KDcbrf69u2r/Px8rVmzRo0aNdL48eP15JNPKjU1VV26dFFxcbHee+89derU6aK1durUSUOHDtXEiRM1a9YslZaW6le/+pVuu+22SkeCwPc1pHknSdnZ2Tp27Jiys7NVXl6uTZs2SZLat29fo6OCAKlhzfuKoJ+YmKgXX3xRR44c8dzmi59uoGoNac599dVXWr9+vfr27asmTZooKytLv/vd79SuXTuffJN9IS+//LKuvPJK9erVS88884xSUlJUVlamzMxMvfLKK57DmSt06NBBBw8elCTt3btXX3zxRY1CybnGjh2radOmacSIEZ6TqO3Zs0dvvfWW51DmC3nggQc0YMAAvfTSSxo2bJgWLlyor7/+2lY7xlu3bq2vvvpKP/30kyIiIjw7lC7kySef1PXXX69WrVrplltukZ+fnzZv3qwtW7bo2WefveBjGzdurAkTJuihhx5SdHS0GjVqpPvvv19paWnq06dPXbXlMzp06KARI0Zo4sSJmj17tiIjI/X444+rRYsWGjFihOd+AwcO1MMPPyzpzMkp/fz81L9/f82bN0+PPvqo536DBw9WWlqaRo4cqRdeeEFJSUk6cOCA54TsZ5+0+2xfffWVPvnkE11zzTWeT+nz8vJqtC5qUK8Di88ZUGvXX3+9ue6666q8reKEJzNnzrzoV+8tWbLEXHHFFSYoKMjExMSYm266yXNbSUmJefLJJ03r1q1NYGCgiY+PNzfeeKP59ttvz3vOqk7osHnzZtO3b18THBxsWrRoYf74xz/WTfO14I2v5enVq5d5/PHHjTGVT95ToeJr8BITEyudCMaYM1+rMWPGDJOcnGwCAwNNs2bNzJAhQ8zKlSuNMcb8/ve/N506dTKhoaEmOjrajBgxwuzatatGtR49etRkZGSYiIgI06hR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agICAswtt9xi3n33XZ8/VKS4uNisWbPGPPzwwyY6OtpIMoMHDzbvvfee1aU1CHl5eeaJJ54w8fHxRpJJS0sz//znP82ePXusLu2C3G632bZtm3nxxRdNUlKSkWQ6duxoZs6c2WDDW30g7J/P7XabN9980/Tv399IMrGxsebxxx83X375pSkpKbG6vAvKzc01S5YsMSNGjDB+fn4mIiLC3HvvvebHH3+0ujSfQtg/348//mjuvfdeEx4ebvz8/MyIESPMkiVLfH6HeElJifnyyy/N448/bmJjYz2fVi9ZssQ2n9zVpxMnTphnnnnGtGzZ0kgyPXv2NLNmzTK7du3y6eXndrvNjh07zMyZM02XLl2MJNO+fXszbdq0Bhve6gNhv2rLli0zgwYNMpJMdHS0efjhh82aNWt8/v1hXl6eeffdd80tt9xiAgICTGhoqLn77rvN9u3brS7N57mMMcZrJwho4I4fP6433nhDs2bN0rZt2+RyudStWzf1799fAwYMUPfu3dWiRQsFBQV5vTa3263Dhw9r+/btWrVqlVatWqV169bp1KlTatq0qe666y7dc8896tChg9dra+hKS0u1bNkyzZo1S5mZmZKkxMREDRgwQP3791efPn2UmJioiIgIr9dmjNHx48e1a9curVmzRitXrtSqVauUm5urwMBA3XzzzbrvvvvUv39/zkx6jkOHDikuLk5Lly517PdPX8i2bds0e/Zsvf766zp+/LjCw8OVnp6uAQMGqF+/fkpOTlazZs3k5+f987wWFxdr37592rBhg1atWqWVK1d6TrbWrVs3TZo0SWPGjFFkZKTXa/N1N9xwg6QzX7mKyk6cOKH58+dr1qxZ2rx5sySpa9eu6t+/v/r376/U1FS1bNlSwcHBXq/N7XbryJEj2rFjh2cbv3btWhUWFioqKkrjx4/XPffco86dO3u9toaurKxMy5cv1+zZs/XBBx/IGKOWLVt6tvFpaWlq3bq1ZeuT/Px87dq1S2vXrvVs4w8dOqSAgACNGDFC9913n375y19asi72ZUVFRQoPD9e8efP4+sEq7Ny5U3//+9/16quv6ujRowoNDVVaWppnfdepUyfFxsZaMq9KSkq0f/9+ffPNN5713ebNm2WMUefOnXXffffp9ttv5wTTNUTYvwTGGO3evduz0l25cqV2794t6czX91122WVKSEhQ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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "MPSAnsatz({N: Dim(4), S: Dim(3)}, bond_dim=5)(diagram).draw(figsize=(10, 2))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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mjt3rnJyctS6dWtJZ44jW7x4sebOnatp06Zd8L0PHz58zm5oLVu2dD3WvHnzeseJCzt58qRef/11zZ8/XwMHDpQkzZ071zXffmjIkCEKCQnRwoULdfvtt0uS5s+frxtvvFFhYWEqLS3VtGnT9N///lepqamSpA4dOmjVqlWaNWuW+vfvr5ycHPXo0cPVtMfHx9cr1sOHD59zKImvr68iIyN1+PDhS5l8eClvqlvgbN5cu3v27NGLL76oZ5999pJej/+zZ88eGWPUpUuXi3rd448/7vo9Pj5eDz30kBYsWKBHHnnkvK8JCQnRnDlz5O/vL+nM4ZFVVVWaM2eOHA6HpDM12KxZM61YsUKDBw++YAyHDx92LZNVa9myJd/DbhIRESF/f38FBwcrNjZWklzN3NSpU9W/f39J0mOPPaaMjAyVlJQoMDBQTz/9tB577DGNGzdO0plx4Y9//KMeeeQRPfXUUxf8zMOHD8vf3/+cc8wwnxtPRESEwsLC5HQ6XfP1bLt379ZHH32k1atXq2/fvpKkt956S1dccYXrOQMGDNCsWbMkSZ9//rl69Oih2NhYrVixQl26dNGKFStc9bFq1Sp9+eWXys3NVUBAgCTp2Wef1b///W+99957rkNiy8rK9MYbbygmJkaStGnTJlVUVGjkyJGKi4uTJCUlJdVrGr15rLDFlv1du3bpyy+/1OjRoyWdaZrqGuDPtmXLFteCyg9lZ2ersrJSiYmJCg0Ndd2ysrK0d+/eRokfjePbb79VeXl5jb0yIiIi1Llz51qf7+vrq5tvvllvvfWWJKm4uFgffvihxowZI+nMAsypU6f005/+tMa8f+ONN1zz/u6779aCBQt09dVX65FHHtGaNWvcPJWwG+oW3spba/fAgQMaOnSoRo0apYkTJ17061FTfbaK1eadd95RWlqaYmNjFRoaqscff1w5OTkXfE1SUpKr0Zekr776Snv27FFYWJirXiIjI1VSUsIympdJTk52/d6qVStJUm5urqQz83nKlCk1xoXqvQNOnTplSbyovx07dsjX11fXXnut676oqKgaK2v79++v7du3Ky8vT1lZWRowYIAGDBigFStWqLy8XGvWrNGAAQMknamHoqIi1wkXq2/fffddjf/7uLg4V6MvndmQO3DgQCUlJWnUqFGaPXv2ZbGXtS227L/66quqqKiosTWh+svn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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "SpiderAnsatz({N: Dim(4), S: Dim(3)})(diagram).draw(figsize=(10, 2))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import torch as th\n", - "from sympy import default_sort_key\n", - "\n", - "d = SpiderAnsatz({N: Dim(4), S: Dim(3)}, max_order=2)(diagram)\n", - "\n", - "syms = sorted(d.free_symbols, key=default_sort_key)\n", - "sym_dict = {k: th.ones(k.size) for k in syms}\n", - "subbed_diagram = d.lambdify(*syms)(*sym_dict.values())" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([256., 256., 256.], dtype=float32)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import tensornetwork as tn\n", - "subbed_diagram.eval(contractor=tn.contractors.auto)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/tokenisation.ipynb b/docs/examples/tokenisation.ipynb deleted file mode 100644 index 2657f908..00000000 --- a/docs/examples/tokenisation.ipynb +++ /dev/null @@ -1,180 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tokenisation\n", - "\n", - "The term *tokenisation* refers to the process of breaking down a text or sentence into smaller units called *tokens*. In `lambeq` these tokens correspond to words, since the parser needs to know exactly what kind of words or symbols and punctuation marks are included in the sentence in order to provide an accurate grammatical analysis.\n", - "\n", - "## Word tokenisation\n", - "\n", - "By default, Bobcat parser assumes that every word in a sentence is delimited by a whitespace, as below:\n", - "\n", - "```\n", - "\"John gave Mary a flower\"\n", - "```\n", - " \n", - "Note however that when working with raw text, this is rarely the case. Consider for example the sentence:\n", - "\n", - "```\n", - "\"This sentence isn't worth £100 (or is it?).\"\n", - "```\n", - " \n", - "A naïve tokenisation based on white spaces would result in the following list of tokens:\n", - "\n", - "```\n", - "[\"This\", \"sentence\", \"isn't\", \"worth\", \"£100\", \"(or\", \"is\", \"it?).\"]\n", - "```\n", - " \n", - "missing, for example, that \"isn't\" represents actually two words and \"(or\" is not a proper word. \n", - "\n", - "In `lambeq`, tokenisation is provided through the `Tokeniser` class hierarcy, and specifically by using the `SpacyTokeniser` class, based on the popular NLP package [SpaCy](). Here is an example:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['This',\n", - " 'sentence',\n", - " 'is',\n", - " \"n't\",\n", - " 'worth',\n", - " '£',\n", - " '100',\n", - " '(',\n", - " 'or',\n", - " 'is',\n", - " 'it',\n", - " '?',\n", - " ')',\n", - " '.']" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from lambeq import SpacyTokeniser\n", - "\n", - "tokeniser = SpacyTokeniser()\n", - "sentence = \"This sentence isn't worth £100 (or is it?).\"\n", - "tokens = tokeniser.tokenise_sentence(sentence)\n", - "tokens" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can then pass the list of the tokens to the parser, setting the `tokenised` argument of the `BobcatParser.sentence2diagram` method to True." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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FPI7AQAAAG6N7TmA9bkaHQCwNZ9//nmu25999plWrlx53f1VqlTR/v378/26H3/8sbKzs62SEcCNTZgwQd27d1fXrl2NjgLgGv/617/08MMPy8PDw+goAApg3759eu2119SqVSvOYgzYoBkzZqhkyZLq16+f0VEAh/bSSy9p6tSp6tOnj5o3b66TJ09qx44dRscCHMrZs2f1+uuvq3Tp0qpVq9ZNDzw+fvy4WrRoIT8/P02YMEHJycl666239Mcff2jr1q1yd3e3PPall17SpEmTNHDgQDVo0EBLly5V7969ZTKZ9PDDDxfROwMAoGixHRawPdcul2zPAayP8htwjT59+uS6/dtvv2nlypXX3S+pQOU3Nze3O84GAIC9KlasmIoVK2Z0DAAAHEJKSoo8PT2NjgE4jc8++0zt2rW77sBIANYTFham+Ph4lSpVStu3b1eDBg1u+LgJEybo8uXL+v3331W6dGlJUkxMjO6++27NnTtXTzzxhCTpxIkTmjp1qoYNG6bp06dLkh5//HG1bNlSzz33nHr06MF3VMAAly9flpeXl9ExAIfGdljA9rBcAoWPy54CVpCdna3x48crMjJSxYsXV9u2bXXo0KFcj+nXr991Z8v46quvVK9ePfn4+MjX11c1atTQu+++W4TJgcKTlJSkp59+WmXKlJGHh4dCQkJ099135zo6fsuWLWrfvr38/Pzk6empli1bauPGjbleZ9y4cTKZTDp06JD69esnf39/+fn5qX///kpJSbE8zmQy6fLly5o3b57l8sRXHzFx4sQJDRgwQKGhofLw8FC1atX0ySef5JrWmjVrZDKZ9PXXX+e5TOfk79ixowICAuTl5aWaNWtetwwfOHBA3bt3V2BgoIoXL6769evr+++/v5N/WsAuzZ07VyaTyXLpxO3bt+vee+9VyZIlVaJECZUtW1YDBgwwNiTgwPK7Pr3a3Llz1aNHD0lS69atLevXm52FA3BWe/bskclkyjXG+/3332UymVS3bt1cj+3QoYMaNmxouT1jxgxVq1ZNHh4eCg8P17Bhw3ThwoVcz2nVqpWqV6+u33//XS1atJCnp6fGjBmjMmXK6M8//9TatWsty2erVq1yPTc9PV3PPPOMgoOD5eXlpQceeOCGl4UDcHNJSUk6c+bMdcszAOvy8PBQqVKl8nzc4sWL1blzZ0vxTZLatWunihUr6uuvv7bct3TpUmVkZGjo0KGW+0wmk4YMGaLjx49r8+bN1n0DgBPauXOnOnToIF9fX3l7e6tt27b67bffLH+fsy1o7dq1Gjp0qEJCQhQZGWlgYsA5sB0WsD1XL5f52Z4DoOA48xtgBZMmTZKLi4tGjRqlixcvavLkyXrkkUe0ZcuWmz5n5cqV6tWrl9q2bas333xT0j9nktu4caOeeuqpoooOFJrBgwdr0aJFGj58uKpWrarExERt2LBB+/fvV926dfXrr7+qQ4cOqlevnl599VW5uLjo008/VZs2bbR+/XrFxMTker2ePXuqbNmymjhxonbs2KHZs2crJCTEsvx8/vnnevzxxxUTE2M5yjc6OlqSdOrUKTVq1Egmk0nDhw9XcHCwli9frscee0yXLl3S008/nWta+VmmV65cqc6dOyssLExPPfWUSpUqpf379+vHH3+0LMN//vmnmjZtqoiICL344ovy8vLS119/ra5du2rx4sV64IEHCuufH7Bpp0+f1j333KPg4GC9+OKL8vf317Fjx7RkyRKjowEOL6/16dVatGihESNG6L333tOYMWNUpUoVSbL8BvCP6tWry9/fX+vWrdN9990nSVq/fr1cXFy0e/duXbp0Sb6+vsrOztamTZssY9Vx48bptddeU7t27TRkyBAdPHhQM2fO1LZt27Rx48ZcZw9PTExUhw4d9PDDD6tPnz4KDQ1Vq1at9OSTT8rb21svvfSSJCk0NDRXtieffFIBAQF69dVXdezYMb3zzjsaPny4Fi5cWET/OoD9S09PlySVKFHC4CQATpw4odOnT6t+/frX/V1MTIx++ukny+2dO3fKy8vrurFrzvamnTt3qlmzZoUbGHBgf/75p5o3by5fX189//zzcnNz06xZs9SqVSutXbs21wEfQ4cOVXBwsF555RVdvnzZwNSA82E7LGB73nnnnTy35wAoOMpvgBWkpaVp165dcnd3lyQFBAToqaee0t69e1W9evUbPmfZsmXy9fXVzz//zGlO4ZCWLVumgQMHaurUqZb7nn/+eUmS2WzW4MGD1bp1ay1fvlwmk0mSNGjQIFWrVk1jx47VihUrcr1enTp1NGfOHMvtxMREzZkzx7Kzvk+fPho8eLDKlSt33WWKX3rpJWVlZemPP/5QUFCQpH/Keb169dK4ceM0aNCgXDsy8lqms7KyNGjQ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ffZZLV68WMeOHTM6ChyQ2WxWZGSk/vWvf2nSpElGxykyf/31lypWrKjvv/9eXbp0MToOYDPuv/9+XbhwQWvXrjU6CuBQOB844EA6dOigjIwM/fLLL0ZHAWzGxo0blZSUZDPlIQCOr0KFCtq+fbvTnZHE0ZnNZm3ZskXly5c3OgoA2LTGjRsrPj5esbGxRkeBA0pISNCxY8fUqFEjo6MUqTJlyqhq1ar66aefjI4C2IyMjAytWLGC7T0ArKJx48b6+++/FR8fb3QUOKC4uDidPHnS6cawFSpUUPny5RnDAldJT0/XqlWrGMMChYDyG+BAypUrpypVqmj27Nlc6x74rzlz5igsLEy1a9c2OgoAJ9G7d2+dOnXK7s7Ug1vbvn279u/fr0ceecToKABg0xo3biyTyaTly5cbHQUOKGe+atKkicFJil6nTp307bffKjEx0egogE1YvHixLl26pM6dOxsdBYADyBlbMIZFYciZrxo3bmxwkqLXqVMnLVq0SBcuXDA6CmATFi5cqJSUFHXq1MnoKIDDofwGOJh///vf+umnn/Tdd98ZHQUw3Jo1azR//ny9/vrrcnFhlQegaNSpU0fVq1fXvHnzjI4CK5o3b57Cw8N19913Gx0FAGxacHCwunXrprfeeouzoMKqsrOzNWXKFHXu3FmRkZFGxylyzzzzjLKzs/XCCy8YHQUw3MWLF/XMM8+oa9euqlu3rtFxADiA8PBw3XfffZoyZYqys7ONjgMHkpWVpbfeeksPPvigQkNDjY5T5J577jmlpaVpzJgxRkcBDHf+/Hk999xz6tmzp6pXr250HMDh0AQAHMyDDz6oTp066cknn9SZM2eMjgMY5tKlSxo8eLCaNm2qAQMGGB0HgBMxmUzq27evli5dqvPnzxsdB1aQnp6uBQsWqE+fPipWrJjRcQDA5o0ePVqHDx/WggULjI4CB7J48WLt37/faXeclSpVShMnTtScOXO0atUqo+MAhjGbzXruued06dIlvfvuu0bHAeBARo8erQMHDuibb74xOgocyFdffaVDhw5p9OjRRkcxREREhN544w19+OGHWrt2rdFxAMOYzWaNHDlSqampevvtt42OAzgkym+AgzGZTJo+fboyMjLUtm1bnT171uhIQJG7dOmS2rdvr4SEBH300Uec9Q1AkXvkkUeUkZGhr776yugosIIff/xR586dU9++fY2OAgB2oW7duurRo4eefPJJHTlyxOg4cACxsbEaPHiwunTp4pSXi8rxxBNPqF27duratavWr19vdBygyJnNZo0ePVoff/yxpk2bptKlSxsdCYADadSoke6//34NHTpUf//9t9Fx4ACOHDmi4cOHq1u3bqpfv77RcQwzbNgwtWjRQl26dNHmzZuNjgMUObPZrGeffVbz5s3Tu+++q/DwcKMjAQ6JNgDggMqUKaPVq1fr1KlTatOmjU6fPm10JKDIXLx4Ue3bt9e+ffu0cuVKVa1a1ehIAJxQWFiYHnzwQY0ZM0b79+83Og7uQFxcnJ588km1bNmSdQoAFMBHH32kkiVLqnv37kpNTTU6DuxYenq6evToIW9vb3366adGxzFUsWLFtHTpUsXExKhDhw6cPQNOJTs7Wy+++KLefPNNTZs2TU888YTRkQA4oE8++US+vr7q0aOH0tLSjI4DO5aamqoePXooMDBQs2fPNjqOoVxdXfXjjz+qdu3auvfee7Vx40ajIwFFJjs7W88++6zefvttTZ8+Xf379zc6EuCwKL8BDqpq1apavXq1Tp8+rZo1a2rZsmVGRwIK3Zo1a1SzZk3t379fK1euVIMGDYyOBMCJzZ49WxEREerYsaNOnTpldBzchosXL6pjx45yd3fnLH4AUED+/v5avHixDhw4oNatWys+Pt7oSLBDp0+fVtu2bbV7924tWrRIQUFBRkcynKenp3788Uc1bNhQ7dq10+uvv67MzEyjYwGF6sSJE2rfvr0mT56sadOmaeTIkUZHAuCgAgMD9c0332jPnj1q27YtJxbAbUlISFDr1q21b98+LVq0SP7+/kZHMpy3t7d++ukn1alTR61bt9aECRMYw8LhxcbG6u6777YU34YNG2Z0JMChUX4DHFjVqlW1c+dO1a1bV507d9agQYOUnJxsdCzA6tLS0jRq1Ci1adNGZcqU0c6dOym+ATCcn5+ffvrpJ6WlpalLly5KSUkxOhIKICMjQz169FBcXJx++uknlSpVyuhIAGB3atWqpXXr1ikuLk4xMTHasWOH0ZFgR/bs2aMGDRro0KFDWr16Nd/xruLp6an/+7//0+jRo/X666+radOmOnjwoNGxAKszm81asGCBqlevrj///FM///wzxTcAha5+/fpas2aNDh8+rAYNGmj37t1GR4Id2bFjhxo0aKDY2FitW7dOderUMTqSzfD29tbKlSs1atQovfzyy2rRooUOHTpkdCzA6sxmsz7//HPVqFFD//nPf7Rq1SqKb0ARoPwGOLiwsDAtW7ZMM2fO1Pz58xUdHa23336by87AIVy5ckUffvihKlSooPfff19TpkzR6tWrVaZMGaOjAYAkqXTp0lq2bJn27dunRx55RFlZWUZHQj6YzWYNHTpUa9as0ZIlS7jcKQDcgfr162vbtm0KCwtTs2bN9M033xgdCXZg6dKlatKkiQIDA7V161Y1btzY6Eg2x83NTa+//ro2btyo8+fPq0aNGhoyZIji4uKMjgbcMbPZrF9//VXNmzdX79691b59e/3xxx+65557jI4GwEk0atRI27ZtU1BQkJo2bapvv/3W6EiwA4sWLVKzZs1UqlQpbdu2jYM3bsDd3V0TJkzQunXrdOrUKVWrVk3Dhw/XiRMnjI4G3DGz2ayVK1eqSZMmevTRR3Xffffpjz/+UNu2bY2OBjgFym+AEzCZTBo8eLD27dunLl266LnnnlO5cuX03nvvcRYa2KX09HTNnj1bFSpU0NChQ9WiRQv98ccfevbZZ+XiwqoNgG2pW7euvvrqK33//fdq3bo1Z+WwcbGxsercubNmz56t2bNnq02bNkZHAgC7Fx4errVr16pr167q2bOn2rdvr82bNxsdCzZo27Zt6ty5s7p27ar27dtrw4YNKl26tNGxbFrDhg21a9cujR8/Xt98843Kly+v4cOHU4KDXTKbzVqzZo1at26ttm3bKj09XT/99JMWLFigwMBAo+MBcDJRUVFav369OnTooAcffFCdOnXS1q1bjY4FG/Tbb7+pQ4cO6tGjh+677z6tXbtWERERRseyaU2bNtWePXv02muvacGCBYqOjtZTTz1FCQ52yWw265dfflGLFi10zz33yGw26+eff9bnn3/OZY+BIkRDAHAid911l2bPnq2DBw/q3nvv1ciRIxUaGqp+/fpp1apVnI0GNi07O1vr1q3TE088oVKlSmngwIFq3Lix9u7dqy+++EIVK1Y0OiIA3FTnzp21atUqxcfHq2bNmho/fryuXLlidCxcJSsrS++//76qVq2q3bt3a+nSpXr00UeNjgUADqNEiRL64osvtHDhQh0/flxNmjShBAeLnNJbTEyMDh06pC+++EJff/21vLy8jI5mFzw9PfXc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u+fm5qbnn39eCxcu1L59+4p02hs2bNAvv/yiMWPGcBYuJ/LSSy9p9+7d+u6774p0uidOnNDHH3+sESNGyMfHp0inDQAAAAAAAAAAYGsovwEAAMAhDBgwQBUqVFCPHj2UlJRUJNM8ffq0evXqpZiYGD344INFMk3YhpYtW6pjx456/PHHdfTo0SKZZnp6urp3767AwECNGDGiSKYJAAAAAAAAAABgyyi/AQAAwCGUKFFC3333neLi4tS3b19lZ2cX6vQyMjLUs2dPXblyRYsXL1axYsUKdXqwLSaTSZ9//rn8/f31wAMPKCUlpdCnOWLECO3YsUOLFy9WYGBgoU8PAAAAAAAAAADA1lF+AwAAgMOoXLmy5s+fr2+//VYjR45URkZGoUwnNTVVAwYM0MaNG7Vo0SJFRkYWynRg2wIDA/Xdd9/pr7/+0kMPPaRLly4VynSys7P1+uuv66OPPtLMmTPVsGHDQpkOAAAAAAAAAACAvaH8BgAAAIdy3333afr06ZoxY4ZatWqluLg4q77+wYMH1ahRIy1atEhz585V8+bNrfr6sC81atTQN998o3Xr1qlevXrauXOnVV//zJkz6tSpk8aNG6fXXntNAwYMsOrrAwAAAAAAAAAA2DPKbwAAAHA4w4YN07p16xQXF6fatWtrxowZSkpKuqPXPHfunN566y3Vr19faWlp2rJlix555BErJYY969ixo3bs2CFfX181atRIr732mk6dOnVHr5mamqpPP/1UtWvX1vbt27V8+XK98sorVkoMAAAAAAAAAADgGCi/AQAAwCE1btxYO3fu1L333qsRI0YoIiJCw4cP1/bt25Wenp6v10hLS9OmTZv02GOPKSIiQi+99JJ69eql7du3q2bNmoX8DmBPoqOjtWnTJg0fPlxvvvmmoqKi1Lt3b61evVqXL1/O12tkZGRoz549eu655xQZGanHHntM9erV065du3TvvfcW8jsAAAAAAAAAAACwP65GBwAAAAAKS1BQkL788ktNnjxZs2bN0scff6wPPvhArq6uqlixoiIjI+Xj4yMXFxf5+PgoOTlZWVlZunTpkmJjY/XXX38pOztbUVFRevnll/X4448rJCTE6LcFG+Xh4aGpU6dq7Nixmjt3rmbMmKEFCxbIZDKpXLlyKlOmjPz9/VWsWDF5e3srKSlJZrNZycnJOnnypA4cOKArV64oICBAAwYM0JAhQxQdHW302wIAAAAAAAAAALBZlN8AAADg8CIjI/XSSy+pbNmy+uyzz7R//37t27dP+/btszzG399fFy5csNw2mUwqVaqUqlevrv79+6t79+5yc3MzID3sTUBAgEaMGKFy5cpp1qxZ2rNnj44eParDhw9bHuPr66tLly7lel5QUJAqV66shx56SP3795e3t3dRRwcAAAAAAAAAALArXPYUAAAADu3YsWN6/vnnLZeRzMzMVK9evTRnzhxt3bpV58+f15UrVyy/ExMTtXnzZn344Yd68MEHdfHiRfXu3Vt33XWXXn31VZ08edLotwQbdvbsWU2aNEnR0dHq2rWrTp48qc6dO+v999/X+vXrdebMGV25ckUXL15URkaGLly4oB07dmjevHnq16+f3N3d9fTTTys8PFxPPvmkDhw4YPRbAgAAAAAAAAAAsFmc+Q0AAAAOyWw26+OPP9aIESNUokQJ9e/fX0OGDFGFChVu+hw3NzcFBgaqUaNGatSokeX+P/74QzNmzNDUqVP19ttva/bs2erZs2dRvA3YkZ9//ll9+vRRUlKSHn74YQ0bNkwNGjS46eNdXV3l5+enOnXqqE6dOpb7Y2NjLZfpnTlzpiZMmKBRo0bJxYVjlwAAAAAAAAAAAK7G3hMAAAA4nKSkJPXp00eDBg1Sv379dPz4cU2bNu2WxbdbqVGjhmbOnKm4uDh17NhRDz30kIYNG6a0tDQrJ4c9yszM1EsvvaT27durfv36+vvvvzV37txbFt9upXTp0ho/frzi4uI0atQovfDCC7rvvvuUmJho5eQAAAAAAAAAAAD2jfIbAAAAHEpKSopatWql77//XgsWLNCHH34oLy8vq7x2QECAFixYoJkzZ2rOnDnq2LGjMjIyrPLasE9ms1m9evXSm2++qYkTJ2rZsmUKDQ21ymt7eHho0qRJWrZsmX777Tc1bNhQ586ds8prAwAAAAAAAAAAOALKbwAAAHAYZrNZjz/+uA4cOKD169fr4Ycftvo0TCaTBg8erJ9//lnr16/XqFGjrD4N2I8JEyZo0aJFWrRokV588cVCuTRpx44dtXXrVl24cEG9evVSVlaW1acBAAAAAAAAAABgjyi/AQAAwGFMmzZNCxYs0Ny5c1W7du1CnVbLli317rvv6r333tNnn31WqNOCbVq2bJlefvlljRs3Tl27di3UaZUrV04LFy7UqlWrNGbMmEKdFgAAAAAAAAAAgL2g/AYAAACHcODAAT3//PN64YUX1KNHjyKZ5pAhQzRgwAANGjRI8fHxRTJN2IakpCQ9+uij6ty5s15++eUimWbbtm01efJkTZ48WRs3biySaQIAAAAAAAAAANgyym8AAABwCBMnTlRYWJhee+21IpumyWTS1KlT5e7urmnTphXZdGG8mTNnKikpSTNmzCiUS53ezMiRI1WtWjWNHz++yKYJAAAAAAAAAABgqyi/AQAAwO4dPXpUX3zxhUaNGiUPD48inba/v7+GDRummTNnKjExsUinDWOkpqZq2rRp6tu3ryIjI4t02i4uLho9erSWL1+uHTt2FOm0AQAAAAAAAAAAbA3lNwAAANi9KVOmKCAgQAMHDjRk+iNHjlR2drbee+89Q6aPovXJJ5/ozJkzeuGFFwyZ/kMPPaRy5cppwoQJhkwfAAAAAAAAAADAVlB+AwAAgF3LysrSV199pSeeeEJeXl6GZAgODlafPn20YMECQ6aPovXll1+qS5cuKl++vCHTd3V11YgRI/T9998rOTnZkAwAAAAAAAAAAAC2gPIbAAAA7NrOnTt1/vx5dejQwdAc7du3119//aW///7b0BwoXJcuXdKWLVtsYn7LyMjQ+vXrDc0BAAAAAAAAAABgJMpvAAAAsGsrV66Ut7e3GjZsaGiO1q1by2QyadWqVYbmQOFas2aNsrKy1K5dO0NzVKxYUVFRUVq5cqWhOQAAAAAAAAAAAIxE+Q0AAAB2bdWqVWrZsqXc3NwMzREQEKD69etTfnNwq1atUpkyZVSuXDlDc5hMJrVr1475DQAAAAAAAAAAODXKbwAAALBb2dnZ2rRpk1q1amV0FEn/nP1tw4YNRsdAIdq4caNatWolk8lkdBS1bt1af/zxhy5evGh0FAAAAAAAAAAAAENQfgMAAIDdOn36tNLS0lS+fHmjo0iSoqOjdeLECWVkZBgdBYXk2LFjNjW/SVJsbKzBSQAAAAAAAAAAAIxB+Q0AAAB2Ky4uTpJUunRpg5P8o3Tp0jKbzTp58qTRUVAIUlJSdO7cOZuZ36KioiT9bzkAAAAAAAAAAABwNpTfAAAAYLdySj85JSCjUUZybLY2v4WFhcnFxYX5DQAAAAAAAAAAOC3KbwAAALBbcXFxKl68uEqWLGl0FEmU3xydrZXfXF1dFR4ezvwGAAAAAAAAAACcFuU3AAAA2K34+HiFh4fLZDIZHUWS5OvrK29vby576qDi4+MlSREREQYn+Z+IiAjmNwAAAAAAAAAA4LQovwEAAMBupaamytPT0+gYuXh6eiotLc3oGCgEqampMplM8vDwMDqKBfMbAAAAAAAAAABwZpTfAAAAYLfS09Pl7u5udIxc3N3dlZ6ebnQMFIKc+c1WzjQoMb8BAAAAAAAAAADn5mp0AAAAAOB2+fr6qmzZskbHyKVy5coqXry40TFQCNzc3FSzZk2jY+QSERFhU2U8AAAAAAAAAACAosSZ3wAAAGC3zp07p+PHjxsdI5cjR44oKSnJ6BgoBKmpqdq/f7/RMXI5c+aMTp8+bXQMAAAAAAAAAAAAQ1B+AwAAAAAAAAAAAAAAAADYHcpvAAAAAAAAAAAAAAAAAAC7Q/kNAAAAAAAAAAAAAAAAAGB3KL8BAAAAAAAAAAAAAAAAAOwO5TcAAAAAAAAAAAAAAAAAgN2h/AYAAAAAAAAAAAAAAAAAsDuU3wAAAAAAAAAAAAAAAAAAdofyGwAAAAAAAAAAAAAAAADA7lB+AwAAAOzM3LlzZTKZdOzYMaOjAAAAAAAAAAAAAIah/AYAAAAAAAAAAAAAAAAAsDuU3wAAAAAAAAAAAAAAAAAAdofyGwAAAFBAly9fNjoCnFBKSkq+HpeZmakrV64UchoAAAAAAAAAAADjUX4DAACA00hKStLTTz+tMmXKyMPDQyEhIbr77ru1Y8eOmz5n3LhxMplM2rdvn3r37q2AgAA1a9bM0EywDznzzqFDh9SvXz/5+/vLz89P/fv3z7PI1qpVK1WvXl2///67WrRoIU9PT40ZM+a6x6WkpOiHH37QW2+9pXfeeUfR0dHy8PDQvn37rJ4JAAAAAAAAAADA1rgaHQAAAAAoKoMHD9aiRYs0fPhwVa1aVYmJidqwYYP279+vunXr3vK5PXr0UIUKFTRhwgSZzWabyAT70LNnT5UtW1YTJ07Ujh07NHv2bIWEhOjNN9+85fMSExPVoUMHPfzww+rTp49CQ0Nv+thPP/1UaWlpeuKJJ+Th4aHAwMBCyQQAAAAAAAAAAGBLKL8BAADAaSxbtkwDBw7U1KlTLfc9//zz+XpurVq19OWXX9pUJtiHOnXqaM6cOZbbiYmJmjNnTp5Fs4SEBH344YcaNGhQntM4fvy4Dh06pODg4ELNBAAAAAAAAAAAYEu47CkAAACchr+/v7Zs2aKTJ08W+LmDBw8uhER3lgn24dp5p3nz5kpMTNSlS5du+TwPDw/1798/X9Po1q1bvotvd5IJAAAAAAAAAADAllB+AwAAgNOYPHmy9u7dq6ioKMXExGjcuHE6cuRIvp5btmxZm8sE+1C6dOlctwMCAiRJ58+fv+XzIiIi5O7unq9pFHT+vN1MAAAAAAAAAAAAtoTyGwAAAJxGz549deTIEb3//vsKDw/XlClTVK1aNS1fvjzP55YoUcLmMsE+FCtW7Ib3m83mWz6vIPNcQefP280EAAAAAAAAAABgSyi/AQAAwKmEhYVp6NCh+u6773T06FEFBQVp/PjxZAIAAAAAAAAAAADsDOU3AAAAOIWsrCxdvHgx130hISEKDw9Xenq6JOns2bM6cOCAUlJSnDYTil5sbKwOHDiQ5+MyMjJ04MABxcfHF0EqAAAAAAAAAAAA20f5DQAAAE4hKSlJERER6tevn95++219/PHHeuihh7Rt2zb16tVLkjR9+nRVqVJFW7duddpMKHqPPvqoqlSpkufjTpw4oSpVqmj06NFFkAoAAAAAAAAAAMD2uRodAAAAAPbBw8NDVapUUVZWltFRLLy8vBQVFZWvx3p6emro0KFasWKFlixZouzsbJUvX14zZszQkCFDrJapcuXK+X5sUWWCdWRlZalWrVpGx8ilZMmSRke4TnR0tLy8vIyOAQAAAAAAAAAAnIDJbDabjQ4BFIbg4GA9++yzevHFF42OAgBAgcXHxys8PFzLli1Tx44djY4jSVq8eLG6d++uc+fOKSAgwOg4kqRHHnlEJ0+e1OrVq42OYtGiRQvddddd+vzzz42OAit75pln9NNPP+XrEqVFpWfPnrpw4YJWrFhhdBQLV1dXTZ8+XYMHDzY6iiRp+/btatCggXbt2mVz5UUUjcGDB+v333/Xtm3bjI5SILa4fAMAAKBoDBgwQAcPHtTGjRuNjlIgXbt2VWZmpn788UejowAAAMCJcNlTAAAA5IuHh4ckKT093eAk/5Oeni53d3ejY+QSHBysU6dOGR0DheD06dMKDg42OkYu7u7uNrVMZmVlKSsry+aWSwAAAAAAAAAA4JgovwEAACBfcs72lpiYaHCS/0lMTLSZs9DlqFOnjjZt2qTk5GSjo8CKMjMz9csvv6h27dpGR8klICDA5pZJSTa3XAIAAAAAAAAAAMdE+Q0AAAD5EhUVJUmKi4szOMn/xMXFqXTp0kbHyKVPnz66fPmylixZYnQUWNHKlSuVkJCgvn37Gh0ll9KlS9vcMinJ5pZLAAAAAAAAAADgmCi/AQAAIF/Cw8Pl4uKi2NhYo6NIkrKzs3X8+HFLKc9WlClTRq1atdK8efOMjgIrmjdvnqpWrap69eoZHSWXqKgoXbp0SRcvXjQ6iiRZPh9sbbkEAAAAAAAAAACOifIbAAAA8sXV1VXh4eE2c5apM2fOKD093SZLNn379tXq1attpiiIO3PhwgV999136tu3r0wmk9FxcrG1MzLGxcXJw8NDwcHBRkcBAAAAAAAAAABOgPIbAAAA8i0qKspmCl05ZR9bLL9169ZNJUqU0Mcff2x0FFjB559/royMDPXp08foKNexxfJbZGSkzZUEAQAAAAAAAACAY6L8BgAAgHyrXr26tm/fbnQMSdK2bdvk6uqqihUrGh3lOj4+Pho2bJgmTJig5cuXGx0Hd2Dz5s167rnn9Oijjyo8PNzoONeJiIiQn5+ftm3bZnQUSf8sl9WqVTM6BgAAAAAAAAAAcBKU3wAAAJBv7dq10759+3TixAmjo2jVqlVq1KiRfHx8jI5yQxMnTlSnTp3Us2dP7dq1y+g4uA2HDx/WfffdpwYNGmjmzJlGx7mhYsWKqU2bNlq1apXRUZScnKxNmzbp7rvvNjoKAAAAAAAAAABwEpTfAAAAkG9t2rSRJP3yyy+G5sjKytKvv/6qdu3aGZrjVooVK6YFCxaoUqVK6tSpk44fP250JBRAYmKiOnbsqICAAH333XcqXry40ZFuql27dtq8ebOSk5MNzbF+/XplZGTY9HIJAAAAAAAAAAAcC+U3AAAA5FvJkiVVp04dw88y9fvvv+vChQs2X7Lx8vLSDz/8IFdXV3Xq1Ennzp0zOhLy4fLly3rggQd07tw5/fTTTwoKCjI60i21a9dOmZmZWrt2raE5Vq1apYiICFWqVMnQHAAAAAAAAAAAwHlQfgMAAECBdOjQQd9//70uXbpkWIYvvvhCgYGBiomJMSxDfoWFhemnn35SbGysqlWrpsWLF8tsNhsdCzexYsUKVa9eXdu3b9fSpUtVvnx5oyPlqUKFCoqOjtb8+fMNy3DlyhV9/fXX6tChg0wmk2E5AAAAAAAAAACAc6H8BgAAgAIZNmyYUlNTNWPGDEOmf/r0aX388ccaMWKE3NzcDMlQUNWqVdPevXvVsGFDde/eXQ8++KBOnDhhdCxcJTExUX379tW9996rcuXKac+ePWrSpInRsfLFZDLpmWee0ddff61Dhw4ZkuHzzz/X8ePHNXLkSEOmDwAAAAAAAAAAnBPlNwAAABRIeHi4+vfvr2nTpiklJaXIp//222+rWLFievLJJ4t82nciIiJC3377rb755htt3rxZVatW1axZs5SdnW10NKdmNpu1YMECValSRd9//70++eQTrVq1yi7O+Ha1AQMGKCQkRJMmTSryaWdmZmrSpEl68MEHVbVq1SKfPgAAAAAAAAAAcF6U3wAAAFBgzz//vM6dO6f333+/SKcbHx+vDz74QEOHDlVgYGCRTtsaTCaTunfvrv3796tHjx4aPHiwmjRpovnz5ys1NdXoeE7lypUrWrx4sdq1a6fevXurdevW2r9/v/r372+Xl+0sXry4nn32WX322Wf6z3/+U6TT/uyzz3To0CGNGTOmSKcLAAAAAAAAAABA+Q0AAAAFVq5cOT311FMaO3as1q9fXyTTvHLlirp16yYfHx+NGjWqSKZZWAICAjR79mz9+uuvKlGihP71r38pLCxMQ4YM0fbt22U2m42O6LD27t2rkSNHKiIiQt27d9fly5e1dOlSLVy4UKVKlTI63h0ZPHiwypYtqwceeEBJ/9/efYfJVRfqA3+3JJuekAppJIQeakKJRBBNAIOiQSGgIoKAdERUVMCrXAVEREHACyJNQLmAiEgTQlMChH6Bi6GmAQLpve3u/P7gl71EAiRhd89O8vk8z3lm9syZ833PzJKd5bz7PfPmNcuYzzzzTI4//vgcdNBBGTp0aLOMCQAAAAAAsJzyGwAAa+RnP/tZhg8fnv322y+vvfZak493wgkn5Iknnsif/vSn9OjRo8nHaw6f/OQnc9999+Wll17Ksccem1tuuSU77rhjtt1225x//vmZPn160RHXCnPmzMkll1ySnXbaKVtvvXWuvfbaHHzwwXnuuefyyCOP5HOf+1zRERtFhw4dcvPNN2fKlCk59NBDm7xEOXPmzIwePTqbbrppLrnkkiYdCwAAAAAAYGWU3wAAWCOtWrXK9ddfn5qamuy999555ZVXmmScurq6nHrqqbnkkkty0UUXZdiwYU0yTpE23njjnHHGGZkyZUpuu+22bLrppvnud7+b3r175xOf+EROOeWU3HbbbZk1a1bRUcvC3Llzc9ddd+VHP/pRRo4cmfXXXz/HHHNMevbsmT/96U957bXXcu6552bw4MFFR210W2yxRa6++ur86U9/yjHHHJMlS5Y0yThvvPFG9tlnn8ydOzd//vOf065duyYZBwAAAAAA4IMovwEAsMZ69uyZ22+/PYsWLcqQIUNy4403Nur+//Wvf2XkyJH52c9+lrPOOiuHH354o+6/pamqqsree++dG2+8Ma+//nrOPffcdO/ePZdffnk++9nPpmvXrhk8eHC+8Y1v5KqrrsrLL7+8zl8itVQqZfLkyfnDH/6QY489Ntttt13WW2+97LXXXrnooovSrl27/OQnP8mUKVNy66235gtf+EJat25ddOwmNXr06FxyySW5/PLLM3z48Lz66quNuv+77ror2223XSZNmpRbb701AwYMaNT9AwAAAAAArKrqogMAAFDettpqqzzxxBM54ogjsv/+++fLX/5yvvWtb2WHHXZY433OmjUrV1xxRc4+++xUVVXlvvvuy2677daIqVu+Hj165Pjjj8/xxx+fUqmUV199NePGjWtYLr300iRJr169MmTIkAwcODADBgzIwIEDG5b11lsvFRUVBR9J45gzZ04mTpz4nuXpp5/O66+/niTZdNNNM3z48Bx//PEZPnx4Nttss7Xm+FfXN77xjeywww7Zf//9s/322+fkk0/O4Ycfnl69eq3xPp977rlccMEFufTSS7Pnnnvm6quvXmsuQQwAAAAAAJQn5TcAAD6yTp065brrrssee+yRn/70p/nDH/6QHXfcMUceeWQ+/vGPZ+ONN05VVdUH7mP69Ol5+umn88c//jF//OMfU1tbmwMOOCDnnntuevbs2UxH0jJVVFRk0KBBGTRoUA4++OAk7xQEH3744YwbNy7PPfdc/vGPf+T3v/995s+f3/C8Tp06rVCGGzBgQPr165fOnTunU6dOKyxt27Zt1qJYqVTKkiVLMnfu3MyZMydz585tuP/66683lNsmTZqUiRMnrnDJ17Zt2zYc05e//OUMHz48u+yyiyLWvxkyZEiefPLJfO9738tPf/rTnH766dlvv/3y1a9+NUOGDPnQIlx9fX0mTpyYhx9+OJdeemn+/ve/Z/31188555yTb33rW6msNJE4AAAAAABQLOU3AAAaRUVFRQ4//PAceuihue2223LRRRc1XKa0TZs22WqrrbLlllumS5cu6d69e2bPnp0FCxZk0qRJeeaZZ/Kvf/0rSdK3b9+ceuqpH3mWqrXdeuutl7333jt77713w7pSqZQZM2asUBpbvtx2222ZPHlylixZstL9VVdXp0OHDmnfvn3atm2bmpqatG7dOq1atUplZeUKxbh33+/SpUtmz569QoZ3q6urS21tbZYuXZolS5Zk0aJFWbBgQebPn59ly5atNEurVq2y4YYbZuDAgRk6dGj222+/FQp8PXv2XGdndFtdnTt3zsUXX5wzzzwzV155ZX7zm9/kj3/8Y5Kka9eu6dOnT9q3b5/KysqG97Kuri5z5szJlClTsnDhwiTJbrvtluuuuy777rvvWn/ZWAAAAAAAoHwovwEA0Kiqqqryuc99Lp/73Ocybdq0PPPMM3n22WfzzDPPZMKECZk3b1423HDDvPLKK2nXrl369OmTr3/969lmm22y9dZbZ9NNN/3QWeJYuYqKinTv3j3du3fP0KFD88Ybb6wwg9qrr76aSZMmZfbs2Zk7d27mzZuXBQsWZNGiRamtrc3s2bNXKLK9e7/Ll3evS5Lu3btn+vTp7ym9lUqlhuWDtGnTJu3bt0/Hjh3TqVOndOnSJf369cugQYNWuJRr3759fV98BF27ds2YMWMye/bs3HzzzXnhhRcyc+bMzJw5s6Hc2K1bt8yYMSP19fUN71vHjh2zzTbb5Ctf+Uo+85nPKL4BAAAAAAAtivIbAABNpkePHhkxYkRGjBhRdJS1Un19fSZMmJBnn332PTO9TZ48OUuXLm3YtmfPnhk4cGD69OmTQYMGNVzudGWXQH33Yx06dPhIpbP6+vrMnz//PZc3XdkyZ86czJkzJ6+++mruueeevPnmmw37qa6uTv/+/Ve4jOvAgQOz5ZZbZquttlKM+wB///vfc/755+cvf/lL2rZtm89//vM55JBDGgqn/z7DYn19fcOMjM8880weeeSRHH300fnud7+bQw45JCeccEIGDRpU0NEAAAAAAAD8H+U3AAAoE4sWLcpjjz2WcePGZdy4cXnooYcya9asJO9cfnT5LGn77LPPCrOmDRgwIO3bty8kc2VlZUOZrm/fvqv13EWLFmXy5MkrzF43ceLEPPXUU7npppsyc+bMJEmnTp0ybNiwDB8+PMOHD8/OO++cDh06NMXhlJUlS5bk5JNPzq9//etsueWW+fWvf52vfvWr6dix4wc+r7KyMhtttFE22mijjB49OkkyefLkXHLJJfnd736X3/3ud/mv//qvHHzwwc1wFAAAAAAAAO9P+Q0AAFqoadOm5R//+EdD2e3JJ5/MsmXL0rFjx3zsYx/LiSeemOHDh2fIkCFZb731io7b6Nq2bZvNN988m2+++Uofnzt3bp5++umG1+e8887Lj370o1RVVWXbbbdtKMPtuuuu6d27dzOnL9bEiRNzwAEH5Omnn86vf/3rHHfccStctnZ1bbjhhjnzzDNz2mmn5bjjjsvXvva13HfffbnwwgsLK1YCAAAAAAAovwEAQAuydOnS3Hbbbbn88stz++23p76+PhtuuGGGDx+egw8+OMOHD3eZz/+vU6dO2W233bLbbrsl+b/LwC4vw91xxx254IILkiQjRozIYYcdltGjR6dt27ZFxm5yU6dOzbBhw9K+ffs89NBD2WGHHRpt3+3atcvll1+eT3ziEznmmGMyadKk3HXXXWnVqlWjjQEAAAAAALCqlN8AAKAFeP7553PZZZfl6quvzrRp07Ljjjvmoosuyj777JM+ffoUHa8sVFZWZsstt8yWW26ZI444Ikny1ltv5Y477sgVV1yRL3/5y+nSpUu+/OUv57DDDsv222//kWZDa4kWL16cL3zhC6mpqckjjzySnj17Nsk4X/va1zJw4MCMGDEi3/3ud3Peeec1yTgAAAAAAAAfpLLoAAAAsK5auHBhLr300gwbNiyDBw/O73//+xx00EF55pln8uijj+aoo45SfPuIevXqlUMOOSQPPPBAXnzxxRx99NH585//nKFDh2b77bfPr3/968ydO7fomI2iVCrl6KOPznPPPZc///nPTVZ8W2633XbLr371q5x//vm5+uqrm3QsAAAAAACAlVF+AwCAAtx7773ZZpttctRRR6Vr16658cYb8/rrr+eXv/xltt5666LjrZU22WSTnHnmmZkyZUpuvfXWDBo0KN/+9rezxRZb5C9/+UvR8T6yv/3tb7nyyitz8cUXZ+jQoc0y5rHHHpuvfe1rOfroozNjxoxmGRMAAAAAAGA55TcAAGhGs2bNymGHHZYRI0akb9++ef7553P77bfni1/8Ylq3bl10vHVCdXV1PvOZz+RPf/pTXnnllWy//fYZPXp09t9//7z55ptFx1tjZ5xxRnbeeeccfPDBzTZmRUVFzjnnnJRKpfz6179utnEBAAAAAAAS5TcAAGgWpVIpN9xwQ7bYYov86U9/ym9/+9vce++92WyzzYqOtk7r379//vrXv+a6667LAw88kC222CKXX355SqVS0dFWy9///vc8+OCDOfXUU1NRUdGsY/fo0SPf+MY31qpLyAIAAAAAAOVB+Q0AAJrY4sWL88UvfjFjxozJ8OHD8/zzz+eII45IZaWP4y1BRUVFDjjggPzzn//M6NGjc9hhh2WPPfbInDlzio62ys4888xss802+exnP1vI+N/5zneycOHCXHzxxYWMDwAAAAAArJucbQMAgCZUX1+fr33ta7njjjty44035k9/+lN69+5ddCxWolu3brniiity11135Yknnsh+++2XZcuWFR3rQ82aNSt33313jj322Gaf9W25Pn365Atf+EJuuOGGQsYHAAAAAADWTcpvAADQhE499dTccMMNufbaa/PFL36x6Disgj322CM33XRTHnjggRx99NEt/hKo999/f+rr67PXXnsVmmPPPffME088kZkzZxaaAwAAAAAAWHcovwEAQBP57W9/m5/97Gc599xz84UvfKHoOKyGT37yk7nsssty2WWX5ayzzio6zge6++67s8kmm2TDDTcsNMeIESNSKpVy7733FpoDAAAAAABYdyi/AQBAE7jzzjtzzDHH5LjjjsuJJ55YdBzWwFe/+tWcfvrpOfXUU/OHP/yh6Djva+zYsRk5cmTRMdK/f/9suummGTt2bNFRAAAAAACAdYTyGwAANLL6+vocc8wxGTFiRM4777xUVFQUHYk19MMf/jBf+tKXctxxx2XJkiVFx3mPGTNm5KWXXspuu+1WdJQkySc+8Yk8/PDDRccAAAAAAADWEcpvAADQyB588MFMnDgxp556aqqqqoqOw0dQUVGRH/7wh5k1a1b++te/Fh3nPaZMmZIk2WijjQpO8o6BAwc2ZAIAAAAAAGhqym8AANDIrrrqqgwcODAf//jHi45CI9hiiy2y44475qqrrio6yntMnTo1SdKvX7+Ck7yjf//+mT17dubPn190FAAAAAAAYB2g/AYAAI1o4cKFueGGG3LwwQenstLH7bXF1772tdxxxx156623io6ygqlTp6ZVq1bp1atX0VGS/F8Jb3kpDwAAAAAAoCk5GwcAAI3oz3/+c+bNm5eDDz646Cg0ogMPPDCVlZX5wx/+UHSUFUydOjV9+/ZtMUVL5TcAAAAAAKA5tYwzJAAAsJa48847s+OOO2ajjTYqOgqNqFu3btljjz1yxx13FB1lBW+++WbWX3/9omM06N27d5J3cgEAAAAAADQ15TcAAGhEb775ZgYMGFB0DJrAgAED8vbbbxcdYwWLFy9O27Zti47RoHXr1kneyQUAAAAAANDUlN8AAKARTZs2LT169Cg6Bk2gR48emTZtWtExVrBkyZLU1NQUHaNBRUVFampqsmTJkqKjAAAAAAAA64DqogMAAMDapH379unWrVvRMWgC6623Xjp37lx0jBV06NAh7dq1KzrGCgYOHJjKSn9nBQAAAAAAND3lNwAAaERvvvlmli1bVnQMmkB9fX2mTp1adIwVzJkzp+gI7/Haa69l6dKlRccAAAAAAADWAf4cHwAAAAAAAAAAgLKj/AYAAAAAAAAAAEDZUX4DAAAAAAAAAACg7Ci/AQAAAAAAAAAAUHaU3wAAAAAAAAAAACg7ym8AAAAAAAAAAACUHeU3AAAAAAAAAAAAyo7yGwAAAAAAAAAAAGVH+Q0AAKCFuPLKK1NRUZFJkyYVHQUAAAAAAKDFU34DAAAAAAAAAACg7Ci/AQAAAAAAAAAAUHaU3wAAYC2ycOHCVdqutrY2S5cubeI0rO1W9fsNAAAAAACgKSi/AQBAgX784x+noqIiL7/8cg455JB06dIlnTt3zqGHHvqhxaLdd989W221VZ544onstttuadeuXU455ZT3bDdp0qRUVFTkF7/4Rc4777wMGjQoNTU1ef7555vqsEgyb968nHjiiRkwYEBqamrSs2fP7LHHHnnyyScLy9Qc32/NlQcAAAAAAKC66AAAAEAyZsyYDBw4MGeddVaefPLJ/O53v0vPnj1z9tlnf+DzZsyYkVGjRuXAAw/MQQcdlF69er3vtldccUUWL16cb3zjG6mpqUnXrl0b+zB4l6OOOio33nhjjjvuuGy55ZaZMWNGHnzwwfzzn//MkCFDCs3WHN9vzZEHAAAAAABYtym/AQBAC7D99tvnsssua/h6xowZueyyyz60/PPmm2/m4osvzpFHHvmhY7z22mt5+eWX06NHj4+clw9322235Ygjjsi5557bsO7kk08uMNH/aY7vt+bIAwAAAAAArNtc9hQAAFqAo446aoWvd91118yYMSNz5879wOfV1NTk0EMPXaUxvvjFLyq+NaMuXbpk/PjxeeONN4qO8h7N8f3WHHkAAAAAAIB1m/IbAAC0AP3791/h6/XWWy9JMmvWrA98Xp8+fdK6detVGmPgwIFrFo418vOf/zzPPfdc+vXrl5122ik//vGP8+qrrxYdK0nzfL81Rx4AAAAAAGDdpvwGAAAtQFVV1UrXl0qlD3xe27ZtV3mM1dmWj27MmDF59dVXc8EFF6R3794555xzMnjw4Nxxxx1FR2uW77fVsaZ5AAAAAACAdZvyGwAAQBPZYIMNcswxx+Tmm2/OxIkT061bt5xxxhlFxwIAAAAAAFgrKL8BAEAZmDJlSiZMmPCh2y1btiwTJkzIv/71r2ZIxfupq6vLnDlzVljXs2fP9O7dO0uWLEmSTJ8+PRMmTMjChQuLiPiBVvX7DQAAAAAAoEjKbwAAUAYOPvjgbLHFFh+63euvv54tttgiP/jBD5ohFe9n3rx56dOnTw455JD86le/yqWXXpoDDjggjz32WL70pS8lSS688MJsscUWefTRRwtO+16r+v0GAAAAAABQpOqiAwAA8F41NTXZYIMNsmDBgqKjsJpqamrStWvXomPQBNq0aZNu3bqt0rbt2rXLMccck7vuuis33XRT6uvrs/HGG+c3v/lNjj766EbNVFNT02j7awy9e/cuOsIK6urqsv7666ey0t9+AQAAAADA2qaiVCqVig4BTaFHjx759re/ne9///tFRwGA1VZXV5fWrVvnv/7rv/KNb3yj6DisolKplDZt2uSXv/xljj322KLj0Mj+67/+K8cff3xqa2uLjtJg5MiR6datW/77v/+76CgNevTokW9961s55ZRTio6SJPn73/+eT3ziE3nhhRey6aabFh2HAhx11FF54okn8thjjxUdZbWMGTMms2fPzl133VV0FAAAmtnXv/71vPDCCxk3blzRUVbL6NGjU1tbm1tvvbXoKAAArEP86TsAQAtUVVWVrl275u233y46Cqthzpw5Wbp0abp37150FJpATU1N6urqUldXV3SUBkuWLGlxM7/V1NRkyZIlRcdosDxL69atC04CAAAAAAA0NuU3AIAWaujQoRk7dmzRMVgNy9+vIUOGFJyEprD8kqfTpk0rOMn/mTZt2ipfirW5dOvWrcW9Rkla3OsEAAAAAAB8dMpvAAAt1IEHHpi///3vef3114uOwiq67rrrMnTo0GyyySZFR6EJ9O/fP0kyderUgpO8o1QqZerUqQ25Wor+/fu3mNcoeef96tKlSzp27Fh0FAAAAAAAoJEpvwEAtFCjR49Oq1atcsMNNxQdhVUwb9683HbbbTnwwAOLjkIT6devX5JkypQpBSd5x6xZs7Jw4cKGXC1Fv379WlT5bcqUKS3uNQIAAAAAABqH8hsAQAvVpUuXjBo1Ktddd13RUVgFt9xySxYvXpwxY8YUHYUm0q1bt7Rp06bFFLuW52hpxa6WVn5ribPjAQAAAAAAjUP5DQCgBTvggAMyfvz4PPfcc0VH4QOUSqVcfvnl2WWXXZRs1mIVFRXp169fJk+eXHSUJP83A11LLL/NnDkz8+fPLzpKEjO/AQAAAADA2kz5DQCgBfv85z+fzTffPPvvv3/mzp1bdBzex9lnn51777033/ve94qOQhPbbrvtMn78+KJjJEkefvjh9OjRI+uvv37RUVaw3XbbJUkeeeSRYoMkmTt3bp577rlsu+22RUcBAAAAAACagPIbAEAL1q5du9x888154403cvDBB6e+vr7oSPybO++8M6ecckpOPfXUfO5znys6Dk1s5MiRefTRRzNnzpyio2Ts2LEZOXJkKitb1q91gwcPTq9evTJ27Niio+Tvf/976urqssceexQdBQAAAAAAaAIt6ywJAADvsdlmm+Waa67JX/7yl/z0pz8tOg7v8vLLL+dLX/pSRo0aldNPP73oODSDkSNHpq6uLvfff3+hOWbNmpXHH388I0eOLDTHylRUVGTkyJEtovx29913Z8CAAdloo42KjgIAAAAAADQB5TcAgDKwzz775PTTT8+PfvSj3HjjjUXHIcmMGTOy7777pnv37rn22mtTVVVVdCSawUYbbZSBAwfm7rvvLjTHvffem1Kp1CLLb8k7JcEnn3wy06dPLzTH8tnxKioqCs0BAAAAAAA0DeU3AIAycdppp2X//ffP/vvvnxNOOCELFy4sOtI6684778zWW2+d119/PTfffHO6dOlSdCSa0Wc/+9lcf/31hf43eMUVV2TrrbdO//79C8vwQfbaa69UVVXl97//fWEZHn300Tz//PP5zGc+U1gGAAAAAACgaSm/AQCUicrKylx33XU5//zzc+mll2bo0KF5/PHHi461TlmwYEGOPfbYjBo1KltvvXWeffbZDB48uOhYNLNvfetbmTlzZi699NJCxn/66adz22235bvf/W4h46+KDTbYIAcddFB+8YtfZPHixYVkOOOMM7LZZptln332KWR8AAAAAACg6Sm/AQCUkcrKypxwwgl54okn0q5du3zsYx/LT3/609TW1hYdba336KOPZsiQIbniiity4YUX5s4770yfPn2KjkUBBg4cmC9/+cs555xzsmTJkmYf/8wzz8zAgQPzpS99qdnHXh3f//738+abb+bKK69s9rGfffbZ3HLLLfn+97/vksQAAAAAALAWU34DAChDW265ZR5++OF873vfy49+9KMMHTo0l19+uUuhNoHHHnsshxxySHbZZZd07tw5Tz31VI499thUVFQUHY0C/eAHP8gbb7yRiy66qFnHffzxx3PjjTfme9/7Xqqrq5t17NW12WabZf/9989ZZ52VOXPmNNu4pVIpp5xySjbccMN85StfabZxAQAAAACA5qf8BgBQplq3bp2f/vSnGTduXPr06ZPDDz88ffv2zbe//e28/PLLRccra4sWLcqVV16ZnXbaKTvttFPuv//+nH322Rk3blw222yzouPRAmyxxRY54YQT8r3vfS//+Mc/mmXMt99+O1/4wheyww475JBDDmmWMT+qM888M3Pnzs1BBx2U+vr6ZhnzZz/7WW699dacd955adWqVbOMCQAAAAAAFEP5DQCgzA0bNiy33357XnrppRx22GG58sors8kmm2TUqFG59dZbU1dXV3TEsjFx4sScfPLJ6du3bw499NB07do1t9xyS1555ZV8+9vfVqRhBeecc06GDx+e/fbbL6+99lqTjrVs2bKMGTMmS5YsyU033ZSampomHa+xDBo0KH/4wx9y22235fTTT2/y8e68886ceuqpOe200zJ69OgmHw8AAAAAACiW8hsAwFpi0KBBOeecc/Laa6/liiuuyPTp07PPPvtk/fXXz3777ZcLL7wwzz33XLPNvlQOZs6cmZtvvjknnnhitttuu2y00Ua59NJLc8ghh+Sll17KnXfemX322SdVVVVFR6UFatWqVa6//vrU1NRkzz33zD//+c8mGWf27NkZM2ZMxo0blxtuuCF9+/ZtknGayqhRo/LTn/40//mf/5mf/OQnTfZv0M0335wDDjgge++9d7MU7QAAAAAAgOIpvwEArGXatm2bQw45JI899lgeffTRHH300Xn77bdz0kknZeutt06vXr2y//7756KLLsr//u//plQqFR252fx72a179+7Zd999c8stt2TIkCG55ppr8vrrr+fcc8/NxhtvXHRcykDPnj1z1113paKiIjvssEOuvvrqRt3/448/niFDhuS+++7LjTfemN12261R999cfvCDH+Q//uM/8qMf/Sif/vSn8/bbbzfavpcuXZqTTjop++67b0aMGJE//OEPqaz0qy4AAAAAAKwLqosOAABA09lxxx2z4447JkkWLlyYhx9+OPfff3/uv//+fOtb38qyZcvSvXv3DB48OIMGDcrGG2+cjTfeOIMGDcqgQYPSuXPngo9g9dXW1mby5Ml55ZVX8vLLLzfcvvTSS5kwYUJKpVIGDhyY3XffPSeddFI+8YlPZMMNNyw6NmVs8803z6OPPppjjz02Bx98cK6//vqccMIJGTFixBqXsP73f/83v/nNb3LppZdmu+22yz333JOBAwc2cvLmU1FRkdNPPz277rprvvKVr2SbbbbJCSeckMMPPzw9e/Zco30uWrQo1113XX71q19lwoQJOf/883P88cenoqKikdMDAAAAAAAtlfIbAMA6ol27dhkxYkRGjBiR5P/KcP/4xz/ywgsv5Nlnn82f//znzJo1q+E53bt3byjDbbzxxundu3c6d+6czp07p0uXLg33O3funHbt2jVZ6aS2tjZz5szJ7NmzM2fOnIZl9uzZmTFjRl599dWGktvkyZNTW1ub5J3LUg4YMCAbb7xxRowYke9///vKbjSJ9u3b58orr8xee+2Vs846K3vuuWc22WSTHH744Rk2bFi23nrrrLfeeu/7/MWLF+f555/PU089lauvvjoPPPBAevXqldNOOy3f//7307p162Y8mqYzcuTIPP300znttNPyk5/8JKeffnr233//jB49Ottss00GDRr0vpcZLpVKef311/Pss89m7NixueKKKzJ79ux8+tOfzuWXX54ddtihmY8GAAAAAAAomvIbAMA66t/LcMvNnDnzPbOmvfLKK7nnnnvy1ltvve9lUqurq1cow3Xu3Dnt27dPVVVVqqurV7jt2bNnpk2blrq6utTV1aW2trbhdunSpZk7d+4KZbeFCxe+73G0b98+AwcOzMYbb5x99923oag3aNCg9OvXL9XVPvLSfL70pS/lwAMPzLhx43LRRRflhz/8YZYuXZok6dq1azp37pzKysp069YtM2fOTH19fRYsWJBp06alvr4+SbLrrrvmuuuuy7777rvWlN7ebYMNNshll12Wc845J1dccUUuueSSXHvttUmSmpqadO/ePW3atEmStGnTJosXL86yZcsyY8aMLFiwIEnSrVu3HHbYYTnqqKMyaNCgwo4FAAAAAAAoljOBAACsoGvXrunatWvD5VLfrb6+PvPnz19h5rV3z8T27+sWLlyYurq6LFq0aIWCW319faZOnbrSYlzHjh3Tt2/f9xTp/n2mueXL2lgOorxVVFRk4MCB2XTTTTNw4MC8+OKLKZVKmTlzZhYtWpSqqqrU19dn2rRpKZVKWbRoUUPxbYMNNshmm22WTTfddK3/3u7cuXM23XTTbLrppnnrrbcyd+7cLFmyJG+//XZqamqSrFh+W7JkSZKkdevW2WSTTbLppptm/fXXL/IQAAAAAACAgim/AQCwyiorK9OpU6d06tQp/fr1KzoOtDiPPvpofv7zn+fmm29O27Ztc8ABB+Q73/lOttlmmwwePDjt27d/z3OWLVuWl156Kc8880yefPLJ/PGPf8zvfve7DBs2LCeeeGLGjBnTZJcULsKiRYvy61//OhdffHEmTZqUHXbYISeffHK23XbbbL311unfv/9Kj3fatGl59tlnGy57euSRR+a73/1uDjnkkHz3u99Nnz59CjgaAAAAAACgSMpvAAAAH1F9fX3OPvvsnHbaadlss81y/vnn56tf/Wo6der0oc9t1apVttxyy2y55ZY58MADc+aZZ+bWW2/NRRddlAMPPDB/+tOfcumll6Zz587NcCRNa8KECRkzZkxeeOGFfOlLX8r111+/0lkmV6ZHjx751Kc+lU996lP55je/mUmTJuW3v/1tLr300lxzzTW5+uqrM2rUqCY+AgAAAAAAoCWpLDoAAABAOZs2bVr23nvvnHrqqTnllFPyzDPP5Nhjj12l4tvKVFdXZ/To0bn77rtzww035G9/+1uGDh2aJ598spGTN69rr702O+ywQ5YtW5YnnngiV1555SoX31ZmwIABOfPMMzNhwoQMGzYse++9d77//e9n2bJljZgaAAAAAABoyZTfAAAA1tDChQuz55575sknn8ydd96Zn/zkJ6mubrwJtvfbb788+eST6dy5c3bfffdMmDCh0fbdnK655pocdNBB2XffffPYY49lq622arR9d+vWLbfcckvOOeec/OIXv8gJJ5zQaPsGAAAAAABaNpc9BQAAWAOlUilHHHFEXnzxxTzyyCPZeuutm2ScQYMG5f7778+wYcMyevTojB8/vqwugfrkk0/miCOOyNe+9rVcccUVqaioaPQxKisr853vfCddunTJEUcckaFDh+bwww9v9HEAAAAAAICWxcxvAAAAa+BXv/pV/vCHP+SKK65osuLbch07dszNN9+cN998MwcffHDq6+ubdLzGMn369Oy7777ZaqutcvHFFzdJ8e3dDj/88Bx11FE59thj88gjjzTpWAAAAAAAQPGU3wAAAFbT66+/nh/84Ac56aSTMmbMmGYZc5NNNsk111yTW265JTfddFOzjPlR/cd//Efmz5+fm266KW3atGmWMc8///xsv/32OfLII1MqlZplTAAAAAAAoBjKbwAAAKvpF7/4Rdq1a5cf/ehHzTruZz/72YwYMSJnnnlmiy92/etf/8rll1+eb3/72+nXr1+zjdu6dev8/Oc/zzPPPJNbb7212cYFAAAAAACan/IbAADAapg2bVouueSSHH/88enUqVOzj3/KKafkqaeeyh133NHsY6+Oc889NzU1NTnmmGOafexdd901w4cPzxlnnNHiS4IAAAAAAMCaU34DAABYDRdccEEqKyvzzW9+s5DxP/nJT2bYsGE566yzChl/VcyePTsXX3xxjjvuuHTp0qXZx6+oqMipp56a8ePH5/7772/28QEAAAAAgOah/AYAALAa/vznP2f//fdPt27dChm/oqIiRx99dB588MFMmzatkAwf5u67786CBQty1FFHFZbh05/+dDbccMPcfPPNhWUAAAAAAACalvIbAADAKnrzzTfz3HPPZc899yw0x8iRI5Mk9957b6E53s/YsWOz+eabp1+/foVlqKioyB577JGxY8cWlgEAAAAAAGhaym8AAACraHmR6lOf+lShOXr37p3Bgwfn7rvvLjTH+7n77ruzxx57FB0jI0eOzPPPP5833nij6CgAAAAAAEATUH4DAABYRWPHjs0222yTXr16FR0lI0eOzN13351SqVR0lBW8+uqrmThxYsPsdEVaXlK85557Ck4CAAAAAAA0BeU3AACAVfTYY4/l4x//eNExkiQf//jHM2XKlEybNq3oKCt47LHHkqRFvE49evTI5ptvnkcffbToKAAAAAAAQBNQfgMAAFgFpVIpU6ZMyYABA4qOkiQNOaZOnVpskH8zZcqUdOzYMV27di06SpJ3XqeW9hoBAAAAAACNQ/kNAABgFcyZMyfz589P//79i46SJOnXr1+Slld+mzp1akO2lqB///4t7jUCAAAAAAAah/IbAADAKlheoGopxa4ePXqkdevWLa7Y1dLKb/369WtxrxEAAAAAANA4lN8AAABWQUsrv1VWVrbIYtfUqVNbzOx4yTvv17Rp07Jo0aKiowAAAAAAAI1M+Q0AAGAVvP3220mS9ddfv+Ak/6dXr1556623io6xgrfffju9evUqOkaD5e/X8vcPAAAAAABYeyi/AQAArILFixensrIyrVq1KjpKgzZt2mTJkiVFx1jB4sWL06ZNm6JjNFieZenSpQUnAQAAAAAAGpvyGwAAwCpYunRpampqio6xgpqamhZX6mppr9PyLC3tdQIAAAAAAD465TcAAIBVUF9fnw4dOhQdYwVt2rRJRUVF0TFW0Lp161RVVRUdo0FVVVXatm2b2traoqMAAAAAAACNrLroAAAAAOWgVCpl0aJFRcdYQUssdLW016iioqLFZQIAAAAAABqHmd8AAAAAAAAAAAAoO8pvAAAAAAAAAAAAlB3lNwAAAAAAAAAAAMqO8hsAAAAAAAAAAABlR/kNAAAAAAAAAACAsqP8BgAAAAAAAAAAQNlRfgMAAAAAAAAAAKDsKL8BAAAAAAAAAABQdpTfAAAAeF9XXnllKioqMmnSpKKjAAAAAAAArED5DQAAAAAAAAAAgLKj/AYAAAAAAAAAAEDZUX4DAAAoAwsXLiw6AgAAAAAAQIui/AYAANAEfvzjH6eioiIvv/xyDjnkkHTp0iWdO3fOoYce+qFFtt133z1bbbVVnnjiiey2225p165dTjnllI+cad68eTnxxBMzYMCA1NTUpGfPntljjz3y5JNPfuR9ry2ZPsr7BgAAAAAANK/qogMAAACszcaMGZOBAwfmrLPOypNPPpnf/e536dmzZ84+++wPfN6MGTMyatSoHHjggTnooIPSq1evj5zlqKOOyo033pjjjjsuW265ZWbMmJEHH3ww//znPzNkyJCPvP+1JVOy5u8bAAAAAADQfJTfAAAAmtD222+fyy67rOHrGTNm5LLLLvvQEtWbb76Ziy++OEceeWSjZbnttttyxBFH5Nxzz21Yd/LJJzfa/tdES8yUrPn7BgAAAAAANB+XPQUAAGhCRx111Apf77rrrpkxY0bmzp37gc+rqanJoYce2qhZunTpkvHjx+eNN95o1P1+FC0xU7Lm7xsAAAAAANB8lN8AAACaUP/+/Vf4er311kuSzJo16wOf16dPn7Ru3bpRs/z85z/Pc889l379+mWnnXbKj3/847z66quNOsbakClZ8/cNAAAAAABoPspvAAAATaiqqmql60ul0gc+r23bto2eZcyYMXn11VdzwQUXpHfv3jnnnHMyePDg3HHHHY0+VjlnStb8fQMAAAAAAJqP8hsAAMA6ZIMNNsgxxxyTm2++ORMnTky3bt1yxhlnyAQAAAAAAJQd5TcAAIACTZkyJRMmTGjycerq6jJnzpwV1vXs2TO9e/fOkiVLkiTTp0/PhAkTsnDhwibPs6qZAAAAAAAA3k910QGgqZRKpdTW1hYdAwCAtURtbW2TXPLy4IMPzgMPPLDG+17V582bNy99+/bNfvvtl2233TYdOnTI2LFj89hjj+Xcc89Nklx44YU5/fTTc99992X33Xdv0jyrmqmxuFzpust7DwAAAACw9lJ+Y63Vs2fPvPnmm0XHAABgLfHWW2+lZ8+eRcdYQXV1dRYvXrxK27Zr1y7HHHNM7rrrrtx0002pr6/PxhtvnN/85jc5+uijGy1TXV1dqqtX7VfN5sjUunXrVFRUZOnSpY2yP8rPkiVL0rZt26JjAAAAAADQBCpK/gSatdS3v/3tXHbZZXnppZfSo0ePouMAAFDGZs6cmU033TRf+tKXcsEFFxQdp8EBBxyQGTNmZOzYsUVHSfLODFtVVVX5r//6rxx55JFFx0mSTJ48OQMGDMjtt9+eUaNGFR2HAuyzzz6pq6vL7bffXnSU1TJmzJjMnj07d911V9FRAABoZl//+tfzwgsvZNy4cUVHWS2jR49ObW1tbr311qKjAACwDqksOgA0lZNOOik1NTXZddddM3ny5KLjAABQpl577bXsuuuuSZLvfOc7BadZUU1NzSrP/NYcll8atqampugoDfr165cOHTrk2WefLToKBXn22Wez1VZbFR0DAAAAAIAmoPzGWqtPnz4ZN25cli5dmuHDh+euu+6KiQ4BAFhVpVIp9957b4YPH5758+dn3Lhx2XDDDYuOtYIePXrk7bffLjpGg7feeitJWtTMy5WVldl2223z1FNPFR2FAsyaNSuTJ0/OdtttV3QUAAAAAACagPIba7WNN9644STlXnvtlWHDhuWWW25RggMA4H2VSqXcfvvtGT58eEaMGJH1118/Dz30UDbbbLOio71H//79M3Xq1Bbz+Xbq1KlJ3snVknz84x/P3/72txY1Sx7N45ZbbkmS7LLLLgUnAQAAAACgKSi/sdbbYIMN8uCDD+auu+5KTU1NPv/5z2e77bbL9ddfn7q6uqLjAQDQQtTX1+emm27K0KFD85nPfCYVFRW544478sgjj6RPnz5Fx1upfv36ZfHixZkxY0bRUZIkU6ZMSfJOrpbksMMOy6xZs/KnP/2p6Cg0s9/+9rfZY489MmDAgKKjAAAAAADQBJTfWCdUVFRkjz32yN///vc88MADWX/99XPAAQekd+/eOfTQQ3PTTTdl3rx5RccEAKCZLViwIDfffHMOO+yw9O7dO1/84hfTtWvX3HfffXnwwQfz6U9/OhUVFUXHfF/LS2bLZ1wr2tSpU9OhQ4d07ty56Cgr2GSTTfKpT30q5557bmpra4uOQzMZN25cHnrooXzjG98oOgoAAAAAAE1E+Y11zm677Za//e1vefzxx3PooYfm0UcfzRe/+MV07949e+21Vy688MJMmjSp6JgAADSRKVOm5De/+U1GjRqVbt26Zd99981DDz2Ugw8+OOPHj8/YsWOz++67t+jS23LLy28t5fPr5MmT069fvxb52p155pl5+umnc9555xUdhWawePHiHH744dl5552z7777Fh0HAAAAAIAmUl10ACjK0KFDM3To0PzsZz/Lq6++mltvvTV//etfc9JJJ+X444/PVlttlV133TU77rhjdtxxx2yxxRapqqoqOjYAAKuhrq4uL7zwQh577LE89thj+cc//pFnnnkm1dXV2W233fKzn/0sn/3sZ7PxxhsXHXWN9OrVK3369Mm4ceNaRMFn3Lhx2WGHHYqOsVI777xzTjzxxPzHf/xH9thjj2y77bZFR6KJlEqlnHLKKXnllVfy1FNP+T0OAAAAAGAtpvwGSTbaaKOccMIJOeGEEzJ37tzcdddduf3223P//ffn4osvTqlUSvv27TN06NCGMtyOO+6YgQMHtshZLQAA1kWlUimTJk1qKLo99thjeeKJJzJ//vwkyWabbZZhw4bl1FNPzV577dXiLs25JioqKjJy5MiMHTu26CiZPn16nnrqqZx44olFR3lfP/nJT/LAAw9kxIgRGTt2bLbbbruiI9HISqVSTjvttPzqV7/Keeedl8GDBxcdCQAAAACAJqT8Bv+mU6dO2W+//bLffvslSebOnZsnn3yy4QTqjTfemHPPPTdJ0q1bt+ywww7ZbrvtstlmmzUs3bp1K/IQAADWejNnzsyLL76YF154IS+88EKefvrpPPbYY5k+fXqSpH///tlxxx1z2mmnZccdd8zQoUPXirLbyowcOTJXXXVV3n777fTs2bOwHPfcc0+SZMSIEYVl+DDt27fP2LFjs+eee2bEiBG5++67M2TIkKJj0UhKpVJ+8IMf5Oyzz84vfvGLfPOb3yw6EgAAAAAATUz5DT5Ep06dsvvuu2f33XdvWDdt2rQVZhT54x//mClTpjQ83q1btxXKcMuXQYMGpXXr1gUcBQBA+Vm2bFleeeWVhoLbu5flJbck6devX7baaqsce+yx2XHHHbPDDjukV69eBSZvXiNHjkySjB07Nl/+8pcLyzF27NhsueWW6dOnT2EZVsV6662Xu+++O3vttVdGjBiRG264oeE1pHwtWrQoJ598ci688ML86le/atEzEAIAAAAA0HiU32AN9OjRI3vvvXf23nvvhnULFy7MSy+9tMJJ2WeffTY33nhj5s2blySpqqrKwIEDG4pwffr0Sd++fdO3b9/06dMnffr0SZs2bYo6LACAZrV48eK88cYbee211/L666833C4vvL366qupq6tLknTo0KHhDwr23HPPhvubbLJJ2rdvX/CRFGv99dfPzjvvnEsvvbSw8tvs2bNz/fXX55hjjilk/NXVpUuX3HXXXdl3332zxx57ZMyYMfnFL36Rfv36FR2N1VQqlfKXv/wl3/rWt/LGG2/koosuKpvvQwAAAAAAPjrlN2gk7dq1y7bbbpttt912hfWlUilvvvnme2YrGTt2bF577bXMnTt3he27deu2QiHu3bfL73fq1CkVFRXNeXgAAKtl7ty57ym1vfbaayvcf/fsbck7M+726dMnAwYMyGc+85kVZtDdYIMNfP75AN/73vfyhS98IQ899FB22WWXZh//wgsvzJIlS8rqMpOdO3fOPffck2uuuSbf/e53s/nmm+e0007LSSedlJqamqLjsQpefPHFfPOb38ydd96ZUaNG5a677somm2xSdCwAAAAAAJpRRalUKhUdAtZl8+bNy+uvv77SE8LLb99+++0VntOhQ4f3FOL+vSTXvXv3VFZWFnRUAMDaqr6+PtOnT//AUtvrr7/eMPPtcj169Hjfzy7LZ8Dt1KlTQUdV/urr67PNNttkww03zG233dasY8+fPz8DBgzIgQcemAsvvLBZx24sc+fOzemnn57zzz8/G220UX7961/n05/+dNGxeB/z58/PGWeckXPPPTd9+vTJ+eefn3322WetK8iOGTMms2fPzl133VV0FAAAmtnXv/71vPDCCxk3blzRUVbL6NGjU1tbm1tvvbXoKAAArEPM/AYF69ixYzbffPNsvvnm77vNkiVL8q9//WulxbgXX3wx9913X954443U1tY2PKe6ujrrrbdeunbtmq5du67y/fXWWy+tWrVqjkMHAApUW1ubWbNmZebMmQ23H3T/3V+/+zNHVVVVevfu3VBi22qrrd5T0u/du7eZtJpYZWVlfvCDH+Sggw7KPffckxEjRjTb2D/72c8yZ86cnHzyyc02ZmPr1KlTzj333Hz961/Pcccdl1GjRmWnnXbKQQcdlAMOOCA9e/YsOuI6r1Qq5dFHH80111yT6667LvPmzcspp5yS733ve2nbtm3R8QAAAAAAKIjyG5SBmpqaDBgwIAMGDHjfberr6/P22283FOPeeOON95y0njx5cp5++umGrxcvXrzSfXXs2HG1CnPL77dv336tm20BAFqyUqmUBQsWvG9J7YPu//vMbMvV1NSkW7duK/yM32yzzVb42d+7d++GglvPnj1TVVXVzEfOyhx44IG56qqrcsABB+SJJ57Ihhtu2ORj3nLLLTnjjDPyk5/8JP3792/y8Zra4MGDc++99+Yvf/lLLr/88px00kn51re+lT333DMHHXRQPv/5z6d9+/ZFx1ynvPTSS7n22mtzzTXX5JVXXskGG2yQgw8+OMcdd1wGDhxYdDwAAAAAAArmsqewDlu0aNEazfgye/bsrOyfjurq6pWW4j6oMNexY8e0b98+7dq1S3W1Pi4A6566urosWLAgCxYsyLx581b55/Ly+8uWLXvPPisqKtK5c+fVKrEv/9oMSuVtxowZ2WGHHbLeeuvlwQcfTLt27ZpsrAkTJmSnnXbKyJEjc+ONN6aysrLJxirK9OnTc8MNN+Taa6/NuHHj0r59++y77775yle+kk996lNp3bp10RHXSm+++Wauv/76XHvttXn00UfTsWPHfPGLX8xBBx2U3XfffZ0p3LrsKQDAustlTwEAYNVpmsA6rG3btmnbtm169+69Ws+rq6vLnDlzVunE/MSJE/Pkk082fL1kyZL33W/r1q0binDt27df4f6qrvugx13OFYA1UVtb21BOW7hw4Xvur2zdhz3+7nVLly5937Fbt279nlnYNtlkkw8tm3fu3HmdKYewom7duuXmm2/Oxz72sey555657rrr0rdv30Yf58EHH8wBBxyQfv365aqrrlori29J0r179xx99NE5+uijM3HixPzhD39omIWspqYm22+/fXbeeefsvPPO2WmnnbLRRhuZCXk1LV68OE899VTGjx/fsEycODGtWrXKqFGjcv311+ezn/2sYi4AAAAAACtl5jegWS1atGiFmeTmzZv3kYsEixYtWqWxW7VqtdqFudUp4Zn5A6AYS5cuXaPS2ao+vrKZ1Vambdu2q/UzZWXbLr/0+LtnYVOkYU2MGzcuBxxwQJYsWZKrr746n/70pxtlv/X19fn5z3+e0047Lbvsskv++Mc/pk+fPo2y73JRKpXyzDPP5IEHHmgoa73yyitJ3inL7bTTTisU4tZbb72CE7cc9fX1eemll1Youv3P//xPamtr06ZNmwwZMqThtRs5cmS6detWdORCmfkNAGDdZeY3AABYdWZ+A5pV27Zt06dPn0Y9SVpfX59FixZ95KLD66+//r6Pr4rq6urU1NSkdevWH7q0atVqlbZrim1btWq11s7OAjSe+vr6LFu2LEuXLl3p8kGPNee2ixcvTm1t7SodU7t27d63hNa5c+f07t17jQvRbdu29W8rLcrw4cPz9NNP5+CDD86oUaMyevToHHvssRkxYsQaFSoXLVqU66+/PhdccEGeeOKJnHrqqfnxj3+8Tl62vqKiIttuu2223XbbhnXTp0/Po48+mvHjx+fRRx/Neeedl1mzZiVJevfunf79+6d///7ZcMMNV7jt379/unTpstaUXGtra/Ovf/0rkydPzpQpUzJlypSG+5MnT87kyZMzf/78JMlmm22WnXfeOV//+tez8847Z5tttjFTMwAAAAAAq23dO1MBrHUqKysbygdNoVQqrXK5bsmSJatV4Fi4cGFmz569ykWQD7ps7Oqorq5u1FJddXV1qqqqUllZ+YG3q7JNUzx3TfextpyIZkWlUin19fWpq6tb7ds1eU5j7uODHqutrW3U4tmqFso+TE1NzSr/e7N8uw4dOqzyv0c1NTWrVFhr06aNchrrnO7du+fWW2/N5ZdfnvPPPz977LFHNttss3zlK1/J9ttvn2222Sb9+vVb6c+72travPjii3nmmWfyyCOP5Oqrr87MmTPz6U9/Ovfee28++clPFnBELVf37t2z9957Z++9907yzs+al19+OePHj89LL73UUP564oknMmXKlBVmlOzYseMKhbiePXumY8eO77t06tQpHTt2TLt27Zrss0ptbW3mzZv3vsvcuXMbbl9//fWGgttrr72Wurq6hv2st956Dcf2yU9+MhtuuGG22Wab7LjjjmbEAwAAAACgUSi/AXyIioqKhtmCilYqlVJXV7dG5ZbG2Gb+/Pkr3WbZsmVrVNZp6VferqioaLTi3vKT0yu7bQmPVVRUpL6+Pkka3pd3365s3Zo+tqb7aqwCWTl8361JmfPdpbCVlc2WX555dWeK/CjbvPt7HyhGZWVlDj/88Bx22GF58MEHc9FFF+Xcc8/NnDlzkrxTUG3Xrl0qKyvTvXv3TJs2LfX19Zk/f35DCbZPnz455JBDcvTRR2fjjTcu8nDKRkVFRTbZZJNssskm73msvr4+b7311gozoi2/feihhzJjxoyGktkH/cyqrKxMhw4dGkpxbdq0afj58O9Lr169Mm3atIafof++1NbWZsGCBQ2FtsWLF3/g8bVu3bqhiNe7d+9suOGGGT58+HtmtuvYseNHfi0BAAAAAOCDKL8BlJGKiopUV1enurq6RZTxPqrlM3AVNVNWc83UtXwGlKYulX2Ux5ZrCUW893vs3wtfRcwG2NTPNeMg0FTq6+szZ86czJ07NwsWLGhY36ZNm4aZEdu0aZO2bdumrq4uS5YsaSi/vXumLz66ysrKbLDBBtlggw0ybNiw992uVCpl4cKFqzQD27x587JkyZL3Lbd17tw5dXV171uOq6qqWqFI92FL69atm/EVAwAAAACA96f8BkBhls9wVVVVlVatWhUdBwDWOrW1tbngggvy61//OpMmTcrQoUPzi1/8IkOGDMlWW231vpeeLJVK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FxQdBwCAZvb1r389L7zwQsaNG1d0lNUyevTo1NbW5tZbby06CgAA65DKogMAAACw9hg1alRuv/321NbWFh0FytY///nPvPLKKxk1alTRUQAAAAAAWjTlNwAAABrN5z//+cycOTMPPPBA0VGgbN10001p165dPvWpTxUdBQAAAACgRVN+AwAAoNHssMMO2WabbfKd73wny5YtKzoOlJ2pU6fm5z//eQ466KC0adOm6DgAAAAAAC2a8hsAAACNprKyMpdffnmeffbZnH322UXHgbJSKpVy5JFHpmPHjv77AQAAAABYBcpvAAAANKqhQ4fm5JNPzumnn57//u//LjoOlIVSqZTvfe97ueOOO3LxxRenS5cuRUcCAAAAAGjxqosOAAAAwNrn9NNPz9SpU/OlL30p8+bNy+GHH150JGix6urqcuyxx+aSSy7Jeeedl3322afoSAAAAAAAZUH5DQAAgEbXqlWrXHXVVenYsWOOOOKIvPzyy/nxj3+cNm3aFB0NWpS33norRx55ZP7617/m8ssvz6GHHlp0JAAAAACAsuGypwAAADSJysrKXHTRRTnrrLPyy1/+Mttvv30efvjhomNBi1AqlXL11Vdnyy23zEMPPZQ///nPim8AAAAAAKtJ+Q0AAIAmU1FRke9///t56qmn0rlz5wwfPjxHH310pkyZUnQ0KMzjjz+eUaNG5eCDD86nP/3pPP/88/nc5z5XdCwAAAAAgLKj/AYAAECTGzx4cMaNG5df/vKXuf766zNo0KB8/etfz4svvlh0NGgWpVIpDzzwQPbaa6/suOOOmThxYm655ZZce+216d69e9HxAAAAAADKkvIbAAAAzaKqqionnnhiJk+enLPPPjt33nlnNt9883zhC1/In/70pyxatKjoiNDopk+fnksuuSTDhw/P7rvvnrfeeiv//d//neeffz777LNP0fEAAAAAAMqa8hsAAADNqkOHDjnppJPy6quv5je/+U0mTZqU/fbbLz169MiXv/zl/OUvf8mSJUuKjglrbObMmbnsssuy1157Zf3118+xxx6bDh065NZbb81TTz2VMWPGpKqqquiYAAAAAABlT/kNAACAQrRp0yZHHXVUnnzyybzwwgv5/ve/n2effTajR49Oz54987WvfS233XabIhxlYfbs2fn973+fz3zmM1l//fVzxBFHZOnSpbnwwgvzr3/9K3fddVc+85nPpKKiouioAAAAAABrjeqiAwAAAMCmm26a0047Laeddlqef/75XH/99fnv//7v/P73v09NTU223377DBs2LMOGDcvOO++cDTfcUImIwtTV1eWf//xnHnnkkTzyyCMZP358/vd//zelUikf//jH88tf/jJf/OIXs8EGGxQdFQAAAABgrab8BgAAQIuy5ZZb5sc//nF+9KMf5bnnnst9992X8ePH55Zbbsl5552XJOnVq1dDEW7YsGHZYYcd0rFjx2KDs9Z66623Mn78+IwfPz6PPPJIHnvsscybNy+VlZXZaqutsssuu+Rb3/pW9txzz/Tt27fouAAAAAAA6wzlNwAAAFqkioqKbL311tl6660b1r399tsrlJDOOuushhLS4MGDGwpxQ4YMyaBBg9KpU6cCj4ByUyqVMm3atLz88st57LHHGmZ1mzhxYpJk/fXXz7Bhw3LKKac0lC47dOhQcGoAAAAAgHWX8hsAAABlo2fPntlnn32yzz77JHnn8pMTJkxouPzkI488kt/97ncplUpJkq5du2ajjTbKwIEDM3DgwIb7G220Ufr375/WrVsXeTgUYMGCBZk4cWImTpyYV199dYXbiRMnZsGCBUmSmpqaDBkyJKNHj24oVfbv39/ldgEAAAAAWhDlNwAAAMpWVVVVBg8enMGDB+ewww5LksydOzfPP//8e0pNjz32WKZOnZq6urokSWVlZfr06bNCIW55SW7gwIHp2bNnqqv92lxulixZkjfeeON9C25vv/12w7Y1NTUN7/cnPvGJHHLIIQ3fC1tuuaVyJAAAAABAC+f/4gMAALBW6dSpU4YNG5Zhw4a957Fly5Zl6tSp7ylGPf/887ntttsybdq0Fbbv3Llzunbtmm7dujXcvvv+ym67dOmSysrK5jrctVZtbW1mzpyZmTNnZsaMGQ23776/stvlM7cl71w6t2/fvhk4cGA233zz7L333isUHddff33vFQAAAABAGVN+AwAAYJ3RqlWrbLTRRtloo41W+vj8+fMzceLETJo0KdOmTXtP6epf//pXnnvuuYZ1ixcvfs8+Kisrs956661QiOvatWvatm2bNm3afOhSU1OzSttVVVU19cu1UqVSKbW1tVm8ePFKlyVLlrzvY++3LFy48D2v9dy5c1c6focOHVYoIfbo0SObbbbZCiXEXr16NVzatqampplfIQAAAAAAmovyGwAAAPx/HTp0yNZbb52tt956lbZftGjRSmcg+/d1kydP/sDy17Jly1Y7a3V1dUNZrqqqKpWVlamsrExFRUXD/fdbt8UWW+T5559PqVRKfX39Csv7rXt34a2+vn61835Qqa9du3bp2rVrBgwY8IGz6nXt2tWlSAEAAAAAaKD8BgAAAGuobdu26du3b/r27fuR9lNXV5clS5as0axpy8toq1JgW36/a9eu6dev34eW5N69rqqq6kNnr3u/glvr1q1dXhQAAAAAgEan/AYAAAAFq6qqSrt27dKuXbuiowAAAAAAQNnwZ9cAAAAAAAAAAACUHeU3AAAAAAAAAAAAyo7yGwAAAAAAAAAAAGVH+Q0AAAAAAAAAAICyo/wGAAAAAAAAAABA2VF+AwAAAAAAAAAAoOwovwEAAAAAAAAAAFB2lN8AAAAAAAAAAAAoO8pvAAAAAAAAAAAAlB3lNwAAAAAAAAAAAMqO8hsAAAAAAAAAAABlR/kNAAAAAAAAAACAsqP8BgAAAAAAAAAAQNlRfgMAAAAAAAAAAKDsKL8BAAAAAAAAAABQdpTfAAAAAAAAAAAAKDvKbwAAAAAAAAAAAJQd5TcAAAAAAAAAAADKjvIbAAAAAAAAAAAAZUf5DQAAAAAAAAAAgLKj/AYAAAAAAAAAAEDZUX4DAAAAAAAAAACg7Ci/AQAAAAAAAAAAUHaU3wAAAAAAAAAAACg7ym8AAAAAAAAAAACUHeU3AAAAAAAAAAAAyo7yGwAAAAAAAAAAAGVH+Q0AAAAAAAAAAICyo/wGAAAAAAAAAABA2VF+AwAAAAAAAAAAoOwovwEAAAAAAAAAAFB2lN8AAAAAAAAAAAAoO8pvAAAAAAAAAAAAlB3lNwAAAAAAAAAAAMqO8hsAAAAAAAAAAABlR/kNAAAAAAAAAACAsqP8BgAAAAAAAAAAQNlRfgMAAAAAAAAAAKDsKL8BAAAAAAAAAABQdpTfAAAAAAAAAAAAKDvKbwAAAAAAAAAAAJQd5TcAAAAAAAAAAADKjvIbAAAAAAAAAAAAZae66AAAAACsmZ49e2bRokVFxwAAAKARtW3bNr179y46BgAAlAUzvwEAAJSp1q1b5/7778+CBQuKjgIAAEAjWLZsWe65555UVjqFBwAAq8InZwAAgDL1ne98JzNnzswRRxyhAAcAAFDmlixZkhNOOCEvv/xyfvCDHxQdBwAAyoLyGwAAQJnaaKONcumll+bmm2/Otttum3HjxhUdCQAAgDXw1FNPZYcddshll12W8847L9ttt13RkQAAoCwovwEAAJSxgw46KP/zP/+Tnj17Ztddd83BBx+ce+65J3V1dUVHAwAA4AOUSqU8+OCDOfLII7PTTjulqqoqjz/+eI477riiowEAQNlQfgMAAChzm2yySf7xj3/k3HPPzcMPP5yRI0dmww03zMknn5xnnnmm6HgAAAC8y4QJE/LDH/4wG220UXbdddfceeed+fGPf5xHH30022yzTdHxAACgrFSUSqVS0SEAAABoHKVSKePHj88111yT6667LjNmzMg222yTgw46KPvss0823XTTVFb6OygAAIDmUiqV8sorr+S2227LNddck8cffzydO3fO/vvvn69+9av5+Mc/vlb8njZ69OjU1tbm1ltvLToKAADrEOU3AACAtdSyZcvyt7/9LVdffXVuueWWLF68OOutt16GDRuWj33sY9lll12y0047pWPHjkVHBQAAWGssXLgwjz32WB5++OE89NBDeeSRRzJt2rS0atUqe++9d7761a/mM5/5TNq0aVN01Eal/AYAQBGU3wAAANYB8+bNyyOPPJKHH344Dz/8cB555JHMnj07lZWV2WqrrRrKcB/72Mey8cYbp6KioujIAAAALV6pVMqkSZMaftd66KGH8j//8z+pq6tLhw4dGv74aPnSpUuXoiM3GeU3AACKoPwGAACwDqqvr88LL7yQhx56qOEkzfPPP58kWW+99bLFFltks802y+abb95wu9FGG6VVq1YFJwcAAGh+tbW1mTRpUiZMmJAXXnih4faf//xnpk+fniTZdNNNVyi6DR48OFVVVQUnbz7KbwAAFEH5DQAAgCTJ7NmzM378+Dz++OMrnNCZN29ekqS6ujqDBg1aoRC3/LZr164FpwcAAPjoZs+enRdeeGGFgtuECRPy0ksvZdmyZUmS9u3bZ7PNNmtYhg4dmmHDhqV79+4Fpy+W8hsAAEVQfgMAAOB9lUqlvPnmm5kwYcJ7ZjiYPHlylv9K2b1792yyySbp379/+vXr956lZ8+eLqUKAAAUqlQqZfr06Zk6depKl5deeilvvfVWw/b9+vV7zx/+bL755unTp4/fb1ZC+Q0AgCIovwEAALBGFi5cmJde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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='suppress')\n", - "diagram = parser.sentence2diagram(tokens, tokenised=True)\n", - "\n", - "diagram.draw(figsize=(28, 7), fontsize=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To tokenise many sentences at once, use the `SpacyTokeniser.tokenise_sentences` method:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[['This', 'is', 'a', 'sentence', '.'],\n", - " ['This', 'is', '(', 'another', ')', 'sentence', '!']]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sentences = [\"This is a sentence.\", \"This is (another) sentence!\"]\n", - "\n", - "tok_sentences = tokeniser.tokenise_sentences(sentences)\n", - "tok_sentences" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "## Splitting a document into sentences\n", - "\n", - "Finally, `lambeq` provides tokenisation at the sentence-level:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['I love pizza.', 'It is my favorite food.', 'I could eat it every day!']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "text = \"I love pizza. It is my favorite food. I could eat it every day!\"\n", - "sentences = tokeniser.split_sentences(text)\n", - "sentences" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/tree-reader.ipynb b/docs/examples/tree-reader.ipynb deleted file mode 100644 index 10fc0e34..00000000 --- a/docs/examples/tree-reader.ipynb +++ /dev/null @@ -1,104 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tree reader" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BobcatParser, TreeReader, TreeReaderMode" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "sentence = 'John walks in the park.'" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Xr161b1s2bJlpmEYN93+888/NyWZFy9eNE3z//fJ1q1bu2z3u9/9zoyLizM//fRTc8SIEeYf/vAHCzPy/H7w2SOUX3zxha5cuaLExET3srvvvltTpkyRy+Xqsm3n/0mMGTNGkroczo6IiNCwYcO6bNN5PTzHo48+qt27d8s0TVVVVWnmzJkyDEP79u3Tnj179JOf/ET333+/fvjhB7311luKjY3VPffco8DAQP3pT39Sc3PzbZ8/Ly9PRUVF2rdvn37605+6l8fFxWn69OmKjY3VrFmzVFRUpLNnz/b1dNEPOv99cDgcGj16NL//A8zt3iPq6ur0j//4jwoMDHT/XDvK6WvfI+3Lfv7zn3c5ajh16lSdPHlSP/zwgw4dOqSnn35aYWFhGjZsmB599FFJuuH94sEHH7zheZubm/X4449r5cqVWrJkSd9OwmY+GyjvROcrOq811NWrV2+6/to2ndfDcyQlJWnfvn2qq6vT3XffrQkTJigpKUm7d+/Wnj173H8Ifv/736ugoEDLli3TJ598otraWs2YMUPt7e23ff6HH35YP/zwgzZs2NBluZ+fnyoqKlReXq6YmBgVFhYqOjpap06d6rO5on/w+4/bvUd8++23ysrKUm1trfvn6NGjOnnypIYMGWJLveg9ly9f1owZMxQUFKQPP/xQn3/+ubZs2SJJN7xfDB069Ib9R40apSlTpqisrEwXLlzol5rt4rOBcvz48fL399enn37qXnblyhV9/vnniomJsbEy9KVrn6PMz893h8drgXL37t1KSkqSJH366ad65plnlJ6erri4OI0bN06NjY1/8fmnTJmi8vJyvf322/rDH/7QZZ3D4VBiYqKysrJ0+PBh+fv7u//wAPB8/v7+d3x1bnx8vBoaGhQZGXnDz113+exbrM+prq7u8nj//v26//77deLECZ05c0a5ubl6+OGHNWHChDs6QxEQEKBt27ZpyJAhmjFjhk9f0Ouz3T506FAtWLBAS5cu1Y4dO1RfX6/58+fr0qVLmjdvnt3loY+MGDFCP/vZz/Thhx+6w+MjjzyimpoaNTY2ukPm/fffr4qKCn322WdyuVz6u7/7O33zzTfdGmPatGn6r//6L2VlZbnvV1ddXa23335bBw8eVHNzszZv3qzTp0/LMIy+mCaAPhAREaHq6mo1NTWptbW1W0eiV65cqbVr1yor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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "reader = TreeReader(ccg_parser=BobcatParser, mode = TreeReaderMode.NO_TYPE)\n", - "reader.sentence2diagram(sentence=sentence).draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAFhCAYAAADOeDoLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAi+ElEQVR4nO3de3BU9f3G8WdJCGQTLpKFCThuEGNh46xhwsULImGghIiOAjI2dlWEqmNxitYamdFqoyNl0FSYWJ02JAYNg0gq1AYTpWi46BhuCXhZEG0w1llbVoK5Idfz+6OSXxBF4Mvm7OX9mtk/snuy5znLJ7sPZ/ecdViWZQkAAAA4R93sDgAAAIDIRqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYCTe7gCn09jYqGAwaHeM88rlcsntdtsdIyIxD/i+aJsJ5sFMtM2DxEyYYB66VtgWysbGRnk8HrW3t9sd5bxyOp3y+/1hOxDhinnA90XjTDAP5y4a50FiJs4V89D1wrZQBoNBtbe3q7y8XB6Px+4454Xf75fP51MwGAzLYQhnzAO+L9pmgnkwE23zIDETJpiHrhe2hfIEj8ejrKwsu2MgTDAP+D5mAp0xD+iMeeg6HJQDAAAAIxRKAAAAGKFQAgAAwEhMF8qamho5HA4dOHDA7igIQ9nZ2br//vs7fh48eLAWLVpkWx50je//uyN28RoBE3/4wx80fPhwu2N0mbA/KOdszZw5UwcOHNDq1avtjgIgAr322mvq3r273TFgg+zsbA0fPpz/OALnIOoKJQCY6Nevn90RAEQwy7J07Ngxu2N0uah+y/vQoUP6zW9+owEDBqhnz5665pprtGXLllOW27Ztm0aOHCmn06mrr75au3fv7rjtxC7rl19+WYMHD1afPn30i1/8Qi0tLV25KTgDlZWV6tu3b8cfcn19vRwOh+bNm9exzK9+9Sv5fD59/fXXysvL04UXXiin0ymv16vly5ef1fqWLFmivn37at26dZKkiooKeb1eJSYmKiUlRRMnTlRbW9v520B0ic5veQ8ePFjz58/XrFmz1KtXL7ndbv31r3+1NyBCYubMmVq/fr0WL14sh8Mhh8OhvXv3Sjr9a4Qk/f3vf1dWVpZ69uypIUOGqKCgQEePHrVhK3AusrOzdd999+m+++5Tnz595HK59Pvf/16WZUmSXn75ZY0cOVK9evVSamqqbr31Vv33v//t+P0TH42oqqrSiBEj1KNHD23atOmU9Xz22WcaMmSI7rvvvo77jiZRXSjz8/P1t7/9TUuXLtX27duVnp6unJwc7d+//6TlHnnkERUWFmrr1q2Kj4/XrFmzTrr9s88+0+rVq1VZWanKykqtX79eCxYs6MpNwRkYO3asWlpaVFdXJ0lav369XC6XampqOpZZv369srOz9e2332rEiBFas2aNPvzwQ91999267bbbtHnz5jNa18KFCzVv3jy99dZbmjBhggKBgPLy8jRr1iz5/X7V1NRo2rRpUfmkEWsKCws1cuRI1dXV6de//rXuvffeUwoFIt/ixYt11VVX6a677lIgEFAgENBFF10k6fSvERs3btTtt9+uuXPn6uOPP9Zf/vIXlZWV6amnnrJrU3AOli5dqvj4eG3evFmLFy/Wn/70Jy1ZskSSdOTIET355JPasWOHVq9erb1792rmzJmn3Me8efO0YMEC+f1+XX755SfdtnPnTl1zzTW69dZb9dxzz8nhcHTFZnUtK0xt27bNkmRt27btrH7vjjvusG688UartbXV6t69u7Vs2bKO2w4fPmwNGjTIWrhwoWVZlvXOO+9Ykqx//vOfHcusWbPGkmQdPHjQsizLevzxxy2n02k1Nzd3LPPQQw9ZV1xxRZdtE878scvKyrKefvppy7Is66abbrKeeuopKyEhwWppabH+/e9/W5KsTz755Ad/d8qUKdaDDz7Y8fO4ceOsuXPndvyclpZmPfvss1Z+fr41cOBA68MPPzwl3969e8/7NuGHherx6/zvnpaWZvl8vo7bjh8/bg0YMMB64YUXzus6LYt5MHU+Hr/v/82fyWvEhAkTrPnz5590Py+//LI1cODAc85xAjNx7s7msRs3bpzl8Xis48ePd1z38MMPWx6P5weX37JliyXJamlpsSzr/+dk9erVJy33+OOPW5mZmda7775rXXDBBdYzzzxjsEXhPw9Ru4fys88+05EjRzRmzJiO67p3767Ro0fL7/eftGzn/0kMHDhQkk7anT148GD16tXrpGU6347wMW7cONXU1MiyLG3cuFHTpk2Tx+PRpk2btH79eg0aNEiXXnqpjh07pieffFJer1f9+vVTcnKy3nzzTTU2Np72/gsLC1VcXKxNmzbpsssu67g+MzNTEyZMkNfr1YwZM1RcXKympqZQby66QOfnB4fDodTUVP7+Y8zpXiN27NihJ554QsnJyR2XE3s5o+17pKPZlVdeedJew6uuukp79uzRsWPHtG3bNt1www1yu93q1auXxo0bJ0mnvF6MHDnylPttbGzUz3/+cz322GN68MEHQ7sRNovaQnk2Oh/ReWKgjh8//oO3n1im8+0IH9nZ2dq0aZN27Nih7t27a9iwYcrOzlZNTY3Wr1/f8UTw9NNPa/HixXr44Yf1zjvvqL6+Xjk5OTp8+PBp73/s2LE6duyYXn311ZOuj4uL09q1a1VVVaWMjAwVFRVp6NChamhoCNm2omvw94/TvUa0traqoKBA9fX1HZcPPvhAe/bsUc+ePW3Ji/Pn22+/VU5Ojnr37q1ly5Zpy5YtWrVqlSSd8nqRlJR0yu/3799fo0eP1vLly9Xc3Nwlme0StYXykksuUUJCgt59992O644cOaItW7YoIyPDxmQIpROfo3z22Wc7yuOJQllTU6Ps7GxJ0rvvvqsbb7xRPp9PmZmZGjJkiD755JOfvP/Ro0erqqpK8+fP1zPPPHPSbQ6HQ2PGjFFBQYHq6uqUkJDQ8cQDIPwlJCSc9dG5WVlZ2r17t9LT00+5dOsWtS+xUae2tvakn99//31deuml2rVrl77++mstWLBAY8eO1bBhw87qHYrExERVVlaqZ8+eysnJieoDeqN22pOSknTvvffqoYceUnV1tT7++GPdddddam9v1+zZs+2OhxC54IILdPnll2vZsmUd5fHaa6/V9u3b9cknn3SUzEsvvVRr167Ve++9J7/fr3vuuUf/+c9/zmgdV199td544w0VFBR0nK+utrZW8+fP19atW9XY2KjXXntN+/btk8fjCcVmAgiBwYMHq7a2Vnv37lUwGDyjPdGPPfaYXnrpJRUUFOijjz6S3+/XK6+8okcffbQLEuN8aWxs1G9/+1vt3r1by5cvV1FRkebOnSu3262EhAQVFRXpX//6l15//XU9+eSTZ3XfSUlJWrNmjeLj45Wbm6vW1lZJ0pdffqlhw4ad8cGg4S7qCuXx48cVH/+/02suWLBA06dP12233aasrCx9+umnevPNN3XBBRfYnBKhNG7cOB07dqyjUPbr108ZGRlKTU3V0KFDJUmPPvqosrKylJOTo+zsbKWmpuqmm24643Vcc801WrNmjR599FEVFRWpd+/e2rBhg6677jr97Gc/06OPPqrCwkLl5uaGYAsBhMLvfvc7xcXFKSMjQ/379//Jz1RLUk5OjiorK/XWW29p1KhRuvLKK/Xss88qLS2tCxLjfLn99tt18OBBjR49WnPmzNHcuXN19913q3///iorK9PKlSuVkZGhBQsWnPLu1JlITk5WVVWVLMvSlClT1NbWpiNHjmj37t3R81lbu48K+jHnejRTTk6ONWfOnBClMhPuR2iFs2h87KJxm7pStD1+0bY9XS0aH79o3KaucrZHeXc+uj9chfs8RM0eyqamJlVWVqqmpkYTJ060Ow4AAEDMiJqvXpw1a5a2bNmiBx98UDfeeKPdcQAAAGJG1BRKjqYFAABnq/O3qeHcRc1b3gAAALAHhRIAAABGKJQAAAAwQqEEAACAkbA/KMfv99sd4byJpm2xSzQ9htG0LXaKlscxWrbDbtH0OEbTttglmh7DcN+WsC2ULpdLTqdTPp/P7ijnldPplMvlsjtGxGEe8H3ROBPMw7mLxnmQmIlzxTx0PYdlWZbdIX5MY2OjgsFgSNfR0NCgm2++WSUlJRo+fHhI1yX9b8jdbnfI1xONumIeJGn8+PG64447NHPmzJCvi3kw0xUzcf/990tSx/e2hxLzYKYr5qGsrExLly7VO++8E9L1nMBMnLuumIf6+nrNnj1bFRUVuvjii0O6Lim85yFs91BKktvtDvkD53Q6JUlDhw5VVlZWSNcFM10xD5IUHx+vCy+8kHmIAF0xE3379pUk5iECdMU8rF27VvHx8cxDBOiKeTh48KAk6bLLLtOwYcNCuq5wx0E5AAAAMEKhBAAAgBEKJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVCegYqKCnm9XiUmJiolJUUTJ05UW1ub3bFgE+YBnTEP6Ix5QGexNA9hfR7KcBAIBJSXl6eFCxdq6tSpamlp0caNGxXG54NHCDEP6Ix5QGfMAzqLtXmgUP6EQCCgo0ePatq0aUpLS5Mkeb1em1PBLswDOmMe0BnzgM5ibR54y/snZGZmasKECfJ6vZoxY4aKi4vV1NRkdyzYhHlAZ8wDOmMe0FmszQOF8ifExcVp7dq1qqqqUkZGhoqKijR06FA1NDTYHQ02YB7QGfOAzpgHdBZr80ChPAMOh0NjxoxRQUGB6urqlJCQoFWrVtkdCzZhHtAZ84DOmAd0FkvzwGcof0Jtba3WrVunSZMmacCAAaqtrdW+ffvk8XjsjgYbMA/ojHlAZ8wDOou1eaBQ/oTevXtrw4YNWrRokZqbm5WWlqbCwkLl5ubaHQ02YB7QGfOAzpgHdBZr80Ch/Akej0fV1dV2x0CYYB7QGfOAzpgHdBZr88BnKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARiiUAAAAMEKhBAAAgBHOQwkAiAqNjY0KBoMhXceXX36po0ePavv27SFdDyLD7t27JUkfffSR2tvbQ74+l8slt9sd8vWcCwolACDiNTY2yuPxdMmLuiSNGDGiS9aDyHDzzTd3yXqcTqf8fn9YlkoKJQAg4gWDQbW3t6u8vDxqvysZsc3v98vn8ykYDFIoAQAIJY/Ho6ysLLtjADGHg3IAAABghEIJAAAAIxRKAAAAGKFQAgAAwAiFEgAAAEYolAAA4EfNnDlTDofjlMunn34qSfrjH/+ouLg4Pf300zYnhZ0olAAA4LQmT56sQCBw0uXiiy+WJJWWlio/P1+lpaU2p4SdKJQAAOC0evToodTU1JMucXFxWr9+vQ4ePKgnnnhCzc3Neu+99+yOCptQKAEAwDkpKSlRXl6eunfvrry8PJWUlNgdCTahUAIAgNOqrKxUcnJyx2XGjBlqbm5WRUWFfD6fJMnn8+nVV19Va2urzWlhB756EQAAnNb48eP1wgsvdPyclJSk5cuX65JLLlFmZqYkafjw4UpLS9OKFSs0e/Zsu6LCJhRKAABwWklJSUpPTz/pupKSEn300UeKj///KnH8+HGVlpZSKGMQhRIAAJyVDz74QFu3blVNTY369evXcf3+/fuVnZ2tXbt2adiwYTYmRFejUAIAgLNSUlKi0aNH69prrz3ltlGjRqmkpITzUsYYDsoBAABn7PDhwyovL9f06dN/8Pbp06frpZde0pEjR7o4GezEHkoAAPCjysrKTvo5ISFBwWDwR5fPz89Xfn5+iFMh3LCHEgAAAEYolAAAADBCoQQAAIARCiUAAACMUCgBAABghEIJAAAAIxRKAAAAGOE8lACAqOH3++2OAIREuM82hRIAEPFcLpecTqd8Pp/dUYCQcTqdcrlcdsf4QRRKAEDEc7vd8vv9p/0GF5w/1dXVeuSRR7Rp0yYlJibaHSdmuFwuud1uu2P8IAolACAquN3usH2xjTa7d++WJA0fPlxJSUk2p0E44KAcAAAAGKFQAgAAwAiFEgAAAEYolAAAADBCoQQAAIARCiUAADivKioq5PV6lZiYqJSUFE2cOFFtbW12x0IIcdogAABw3gQCAeXl5WnhwoWaOnWqWlpatHHjRlmWZXc0hBCFEgAAnDeBQEBHjx7VtGnTlJaWJknyer02p0Ko8ZY3AAA4bzIzMzVhwgR5vV7NmDFDxcXFampqsjsWQoxCCQAAzpu4uDitXbtWVVVVysjIUFFRkYYOHaqGhga7oyGEKJQAAOC8cjgcGjNmjAoKClRXV6eEhAStWrXK7lgIIT5DCQAAzpva2lqtW7dOkyZN0oABA1RbW6t9+/bJ4/HYHQ0hRKEEAADnTe/evbVhwwYtWrRIzc3NSktLU2FhoXJzc+2OhhCiUAIAgPPG4/Gourra7hjoYnyGEgAAAEYolAAAADBCoQQAAIARCiUAAACMUCgBAABghEIJAAAAIxRKAAAAGKFQAgAAwAgnNgcQsRobGxUMBkO6jgMHDkiStm/fHtL1AJGkoaFBklRfX6/ExMSQr8/lcsntdod8PTh3FEoAEamxsVEej0ft7e1dsr4RI0Z0yXqASHLNNdd0yXqcTqf8fj+lMoxRKAFEpGAwqPb2dpWXl8vj8dgdB0CI+P1++Xw+BYNBCmUYo1ACiGgej0dZWVl2xwCAmMZBOQAAADBCoQQAAIARCiUAAACMUCgBAABghEIJAAAAIxRKAEBYmTlzphwOxymXTz/9VJL0xz/+UXFxcXr66adtTgrgBAolACDsTJ48WYFA4KTLxRdfLEkqLS1Vfn6+SktLbU4J4AQKJQAg7PTo0UOpqaknXeLi4rR+/XodPHhQTzzxhJqbm/Xee+/ZHRWAKJQAgAhSUlKivLw8de/eXXl5eSopKbE7EgBRKAEAYaiyslLJyckdlxkzZqi5uVkVFRXy+XySJJ/Pp1dffVWtra02pwXAVy8CAMLO+PHj9cILL3T8nJSUpOXLl+uSSy5RZmamJGn48OFKS0vTihUrNHv2bLuiAhCFEgAQhpKSkpSenn7SdSUlJfroo48UH///L13Hjx9XaWkphRKwGYUSABD2PvjgA23dulU1NTXq169fx/X79+9Xdna2du3apWHDhtmYEIhtFEoAQNgrKSnR6NGjde21155y26hRo1RSUsJ5KQEbcVAOACCsHT58WOXl5Zo+ffoP3j59+nS99NJLOnLkSBcnA3ACeygBAGGlrKzspJ8TEhIUDAZ/dPn8/Hzl5+eHOBWA02EPJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARiiUAAAAMMJ5KAFENL/fb3cEACHE33hkoFACiEgul0tOp1M+n8/uKABCzOl0yuVy2R0Dp0GhBBCR3G63/H7/ab9BBdHlz3/+s6qrq/WPf/zD7ijoYi6XS2632+4YOA0KJYCI5Xa7eZGJIampqerRo4eysrLsjgLgezgoBwAAAEYolAAAADBCoQQAAIARCiUAAACMUCgBAABghEIJAIgKFRUV8nq9SkxMVEpKiiZOnKi2tja7YwExgdMGAQAiXiAQUF5enhYuXKipU6eqpaVFGzdulGVZdkcDYgKFEgAQ8QKBgI4ePapp06YpLS1NkuT1em1OBcQO3vIGAES8zMxMTZgwQV6vVzNmzFBxcbGamprsjgXEDAolACDixcXFae3ataqqqlJGRoaKioo0dOhQNTQ02B0NiAkUSgBAVHA4HBozZowKCgpUV1enhIQErVq1yu5YQEzgM5QAgIhXW1urdevWadKkSRowYIBqa2u1b98+eTweu6MBMYFCCQCIeL1799aGDRu0aNEiNTc3Ky0tTYWFhcrNzbU7GhATKJQAgIjn8XhUXV1tdwwgZvEZSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACOc2BwRo7GxUcFgMOTrOXr0qL788ktt37495OsCcOa++uorHTp0qMv+Nl0ul9xud5esC4h0DsuyLLtD2GnXrl3yeDzatGmTxowZY3cc/IjGxkZ5PB61t7fbHQVAjHA6nfL7/ZRK4AywhxIRIRgMqr29XeXl5fJ4PHbHARDl/H6/fD6fgsEghRI4AxRKRBSPx6OsrCy7YwAAgE44KAcAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCSCizZw5Uw6Ho+OSkpKiyZMna+fOnacse8899yguLk4rV660ISkARC8KJYCIN3nyZAUCAQUCAa1bt07x8fG6/vrrT1qmvb1dr7zyivLz81VaWmpTUgCITpyHEkDE69Gjh1JTUyVJqampmjdvnsaOHat9+/apf//+kqSVK1cqIyND8+bN06BBg/TFF1/ooosusjM2AEQN9lACiCqtra0qLy9Xenq6UlJSOq4vKSmRz+dTnz59lJubq7KyMvtCAkCUoVACiHiVlZVKTk5WcnKyevXqpddff10rVqxQt27/e4rbs2eP3n//fd1yyy2SJJ/PpxdffFGWZdkZGwCiBoUSQMQbP3686uvrVV9fr82bNysnJ0e5ubn6/PPPJUmlpaXKycmRy+WSJF133XX65ptv9Pbbb9sZGwCiBoUSQMRLSkpSenq60tPTNWrUKC1ZskRtbW0qLi7WsWPHtHTpUq1Zs0bx8fGKj4+X0+nU/v37OTgHAM4TDsoBEHUcDoe6deumgwcP6o033lBLS4vq6uoUFxfXscyHH36oO++8UwcOHFDfvn3tCwsAUYBCCSDiHTp0SF999ZUkqampSc8995xaW1t1ww03aNGiRZoyZYoyMzNP+p2MjAw98MADWrZsmebMmWNHbACIGrzlDSDiVVdXa+DAgRo4cKCuuOIKbdmyRStXrpTH49GaNWs0ffr0U36nW7dumjp1qkpKSmxIDADRhT2UACJaWVnZaU8BdOTIkR+97fnnnw9BIgCIPeyhBAAAgBEKJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARjgPJSKK3++3OwKAGMBzDXB2KJSICC6XS06nUz6fz+4oAGKE0+mUy+WyOwYQESiUiAhut1t+v1/BYNDuKIggO3fu1J133qmVK1dqyJAhdsdBhHG5XHK73XbHACIChRIRw+128+SOs3Lo0CFJUkZGhjIyMmxOAwDRi4NyAAAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAYlZFRYW8Xq8SExOVkpKiiRMnqq2tze5YABBxOG0QgJgUCASUl5enhQsXaurUqWppadHGjRtlWZbd0QAg4lAoAcSkQCCgo0ePatq0aUpLS5Mkeb1em1MBQGTiLW8AMSkzM1MTJkyQ1+vVjBkzVFxcrKamJrtjAUBEolACiElxcXFau3atqqqqlJGRoaKiIg0dOlQNDQ12RwOAiEOhBBCzHA6HxowZo4KCAtXV1SkhIUGrVq2yOxYARBw+QwkgJtXW1mrdunWaNGmSBgwYoNraWu3bt08ej8fuaAAQcSiUAGJS7969tWHDBi1atEjNzc1KS0tTYWGhcnNz7Y4GABGHQgkgJnk8HlVXV9sdAwCiAp+hBAAAgBEKJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARiiUAAAAMBLWJzZvbGxUMBgM6ToaGhokSbt371ZiYmJI1wWga+3evVuS9PHHH+vbb78N+fpcLpfcbnfI1wMA4cZhWZZld4gf0tjYKI/Ho/b2drujAMAZcTqd8vv9lEoAMSds91AGg0G1t7ervLxcHo/H7jgAcFp+v18+n0/BYJBCCSDmhG2hPMHj8SgrK8vuGAAAAPgRHJQDAAAAIxRKAAAAGKFQAgAAwAiFEgAAAEYolAAAADBCoUTUmTlzphwOR8clJSVFkydP1s6dO09Z9p577lFcXJxWrlxpQ1IAAKIDhRJRafLkyQoEAgoEAlq3bp3i4+N1/fXXn7RMe3u7XnnlFeXn56u0tNSmpAAARL6wPw8lcC569Oih1NRUSVJqaqrmzZunsWPHat++ferfv78kaeXKlcrIyNC8efM0aNAgffHFF7rooovsjA0AQERiDyWiXmtrq8rLy5Wenq6UlJSO60tKSuTz+dSnTx/l5uaqrKzMvpAAAEQwCiWiUmVlpZKTk5WcnKxevXrp9ddf14oVK9St2/9Gfs+ePXr//fd1yy23SJJ8Pp9efPFFhelX2wMAENYolIhK48ePV319verr67V582bl5OQoNzdXn3/+uSSptLRUOTk5crlckqTrrrtO33zzjd5++207YwMAEJEolIhKSUlJSk9PV3p6ukaNGqUlS5aora1NxcXFOnbsmJYuXao1a9YoPj5e8fHxcjqd2r9/PwfnAABwDjgoBzHB4XCoW7duOnjwoN544w21tLSorq5OcXFxHct8+OGHuvPOO3XgwAH17dvXvrAAAEQYCiWi0qFDh/TVV19JkpqamvTcc8+ptbVVN9xwgxYtWqQpU6YoMzPzpN/JyMjQAw88oGXLlmnOnDl2xAYAICLxljeiUnV1tQYOHKiBAwfqiiuu0JYtW7Ry5Up5PB6tWbNG06dPP+V3unXrpqlTp6qkpMSGxAAARC72UCLqlJWVnfYUQEeOHPnR255//vkQJAIAILqxhxIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABgJ+/NQ+v1+uyMAwE/iuQpALAvbQulyueR0OuXz+eyOAgBnxOl0yuVy2R0DALqcw7Isy+4QP6axsVHBYNDuGIgiu3bt0i9/+UuVl5fL4/HYHQdRxuVyye122x0DALpc2O6hlCS3282TM84rh8MhSRo2bJiysrJsTgMAQHTgoBwAAAAYoVACAADACIUSAAAARiiUAAAAMEKhBAAAgBEKJdBJRUWFvF6vEhMTlZKSookTJ6qtrc3uWAAAhLWwPm0Q0JUCgYDy8vK0cOFCTZ06VS0tLdq4caPC+FStAACEBQol8J1AIKCjR49q2rRpSktLkyR5vV6bUwEAEP54yxv4TmZmpiZMmCCv16sZM2aouLhYTU1NdscCACDsUSiB78TFxWnt2rWqqqpSRkaGioqKNHToUDU0NNgdDQCAsEahBDpxOBwaM2aMCgoKVFdXp4SEBK1atcruWAAAhDU+Qwl8p7a2VuvWrdOkSZM0YMAA1dbWat++ffJ4PHZHAwAgrFEoge/07t1bGzZs0KJFi9Tc3Ky0tDQVFhYqNzfX7mgAAIQ1CiXwHY/Ho+rqartjAAAQcfgMJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARiiUAAAAMEKhBAAAgBEKJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARiiUAAAAMEKhBAAAgBEKJQAAAIxQKAEAAGCEQgkAAAAjFEoAAAAYoVACAADACIUSAAAARhyWZVl2hwC6Smtrq3bs2KHMzEwlJyfbHQcAgKhAoQQAAIAR3vIGAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACMUSgAAABihUAIAAMAIhRIAAABGKJQAAAAwQqEEAACAEQolAAAAjFAoAQAAYIRCCQAAACP/B+uP20HZpPvWAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "reader = TreeReader(ccg_parser=BobcatParser, mode=TreeReaderMode.RULE_ONLY)\n", - "reader.sentence2diagram(sentence).draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAFhCAYAAADOeDoLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2hUlEQVR4nO3de1hVdb7H8c8WRNl4Z+sA8wx4wcvGEEGki+bl0UREw8vYDEUN2mhnsqmZk2N28kzDdMYpy8nUM6cZw9HSsdI0yQtlJgpppCCailaEUA2ajBoopKLr/NG4hx2k4AIWl/frefbzyFq/9ft91+7H5tO6bZthGIYAAACAG9TK6gIAAADQtBEoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgiqfVBVxLYWGhiouLrS6jTjkcDgUGBlpdRpPEfMB3Nbc5wXwwp7nNB4k5YQbzoWE12kBZWFgop9OpsrIyq0upU3a7Xbm5uY12QjRWzAd8V3OcE8yHG9cc54PEnLhRzIeG12gDZXFxscrKyrRq1So5nU6ry6kTubm5SkhIUHFxcaOcDI0Z8wHf1dzmBPPBnOY2HyTmhBnMh4bXaAPlVU6nUxEREVaXgUaC+YDvYk6gMuYDKmM+NBxuygEAAIApBEoAAACYQqAEAACAKS06UKalpclms+ns2bNWl4JGaMSIEfrVr37l+rl79+5atGiRZfWgYXz3vztaLv5GwIzf/e53GjhwoNVlNJhGf1NObSUmJurs2bN68803rS4FQBO0fv16tW7d2uoyYIERI0Zo4MCB/I8jcAOaXaAEADO6dOlidQkAmjDDMHT58mWry2hwzfqU94ULF/Twww+rW7duatu2rYYOHaq9e/dWaZeVlaXIyEjZ7XbddtttOnbsmGvd1UPWr7zyirp3766OHTvqpz/9qUpLSxtyV1ADmzZtUqdOnVy/yDk5ObLZbJo7d66rzc9//nMlJCTon//8p+Lj4/XDH/5QdrtdoaGhWrNmTa3Ge+mll9SpUydt375dkrRu3TqFhobK29tbvr6+Gj16tM6fP193O4gGUfmUd/fu3TV//nxNnz5d7du3V2BgoP76179aWyDqRWJionbu3KkXXnhBNptNNptNx48fl3TtvxGStHHjRkVERKht27bq2bOnkpKSVFFRYcFe4EaMGDFCDz30kB566CF17NhRDodD//3f/y3DMCRJr7zyiiIjI9W+fXv5+fnp7rvv1ldffeXa/uqlEVu3btWgQYPUpk0bZWRkVBknLy9PPXv21EMPPeTquzlp1oFyzpw5euONN7Ry5UplZ2crODhY0dHROn36tFu7J554QgsXLtS+ffvk6emp6dOnu63Py8vTm2++qU2bNmnTpk3auXOnnn766YbcFdTA7bffrtLSUu3fv1+StHPnTjkcDqWlpbna7Ny5UyNGjNA333yjQYMGafPmzTp06JBmzpype++9Vx9++GGNxlqwYIHmzp2rd955R6NGjVJRUZHi4+M1ffp05ebmKi0tTZMnT26WHxotzcKFCxUZGan9+/frwQcf1C9+8YsqgQJN3wsvvKBbb71VM2bMUFFRkYqKivSjH/1I0rX/RqSnp+u+++7TI488oiNHjugvf/mLVqxYoT/84Q9W7QpuwMqVK+Xp6akPP/xQL7zwgv70pz/ppZdekiRdunRJTz31lA4cOKA333xTx48fV2JiYpU+5s6dq6efflq5ubkaMGCA27qDBw9q6NChuvvuu7V06VLZbLaG2K2GZTRSWVlZhiQjKyurVtv97Gc/M+Li4oxz584ZrVu3NlavXu1ad/HiRSMgIMBYsGCBYRiGsWPHDkOS8e6777rabN682ZBklJeXG4ZhGE8++aRht9uNkpISV5vf/OY3xs0339xg+4Sav3cRERHGs88+axiGYUycONH4wx/+YHh5eRmlpaXGF198YUgyPv7442q3jY2NNR599FHXz8OHDzceeeQR189BQUHG888/b8yZM8fw9/c3Dh06VKW+48eP1/k+oXr19f5V/u8eFBRkJCQkuNZduXLF6Natm/F///d/dTqmYTAfzKqL9++7v/M1+RsxatQoY/78+W79vPLKK4a/v/8N13EVc+LG1ea9Gz58uOF0Oo0rV664lj322GOG0+mstv3evXsNSUZpaalhGP+eJ2+++aZbuyeffNIICwsz3n//faNz587Gc889Z2KPGv98aLZHKPPy8nTp0iUNGTLEtax169aKiopSbm6uW9vK/yfh7+8vSW6Hs7t376727du7tam8Ho3H8OHDlZaWJsMwlJ6ersmTJ8vpdCojI0M7d+5UQECAevfurcuXL+upp55SaGiounTponbt2untt99WYWHhNftfuHChli1bpoyMDPXv39+1PCwsTKNGjVJoaKimTp2qZcuW6cyZM/W9u2gAlT8fbDab/Pz8+P1vYa71N+LAgQP6/e9/r3bt2rleV49yNrfvkW7ObrnlFrejhrfeeqs++eQTXb58WVlZWZowYYICAwPVvn17DR8+XJKq/L2IjIys0m9hYaHuuOMO/fa3v9Wjjz5avzthsWYbKGuj8h2dVyfUlStXql1/tU3l9Wg8RowYoYyMDB04cECtW7dWv379NGLECKWlpWnnzp2uD4Jnn31WL7zwgh577DHt2LFDOTk5io6O1sWLF6/Z/+23367Lly/r9ddfd1vu4eGhbdu2aevWrQoJCdGSJUvUt29f5efn19u+omHw+49r/Y04d+6ckpKSlJOT43p99NFH+uSTT9S2bVtL6kXd+eabbxQdHa0OHTpo9erV2rt3rzZs2CBJVf5e+Pj4VNm+a9euioqK0po1a1RSUtIgNVul2QbKXr16ycvLS++//75r2aVLl7R3716FhIRYWBnq09XrKJ9//nlXeLwaKNPS0jRixAhJ0vvvv6+4uDglJCQoLCxMPXv21Mcff3zd/qOiorR161bNnz9fzz33nNs6m82mIUOGKCkpSfv375eXl5frgwdA4+fl5VXru3MjIiJ07NgxBQcHV3m1atVs/8Q2O5mZmW4/f/DBB+rdu7eOHj2qf/7zn3r66ad1++23q1+/frU6Q+Ht7a1Nmzapbdu2io6ObtY39Dbb2e7j46Nf/OIX+s1vfqPU1FQdOXJEM2bMUFlZme6//36ry0M96dy5swYMGKDVq1e7wuOwYcOUnZ2tjz/+2BUye/furW3btmn37t3Kzc3VAw88oJMnT9ZojNtuu01btmxRUlKS63l1mZmZmj9/vvbt26fCwkKtX79ep06dktPprI/dBFAPunfvrszMTB0/flzFxcU1OhL929/+Vi+//LKSkpJ0+PBh5ebm6tVX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66/dwmB5ebnatm3r1ndiYqJycnLUt29fPfzww3rnnXfc1ld32ttut6tXr16un/39/fXVV1/Vap+qq+Xhhx/W//zP/2jIkCF68skn3W48CgoKktPpVGpqqts2/fv3l4eHxzVr8fb21pUrV3ThwgVJUmxsrLKzs3Xy5MlGUU/l5WVlZQKAhkKgBFoQHx8fBQcHKzg4WIMHD9ZLL72k8+fPa9myZZKky5cva+XKldq8ebM8PT3l6ekpu92u06dPu92c43A4dObMGbe+IyIilJ+fr6eeekrl5eW666679OMf/9i1vrqbWFq3bu32s81mczsSWhPV1fLzn/9cn332me6991599NFHioyM1JIlS9xq+W64ra6Wykf+JOn06dPy8fGRt7e3JMnX11e33nqr235ZWU/l5V27dhUANBQCJdCC2Ww2tWrVynUDx5YtW1RaWqr9+/e7jmTm5ORozZo1Wr9+vc6ePStJCg8P19GjR6uEvw4dOugnP/mJli1bptdee01vvPGG63FBt99+u86fP6/s7Ow63Yfw8HAdOXKkyvIf/ehH+o//+A+tX79ejz76qCs0S98eLd2yZYsqKipqNdahQ4eqPObnu0dera4nLy9P33zzzQ0/jggAbgSBEmhBLly4oBMnTujEiRPKzc3VL3/5S507d871MOzk5GTFxsYqLCxMN910k+t11113qVOnTlq9erWkb0+dnzt3zu0O5z/96U9as2aNjh49qo8//lhr166Vn5+fOnXqJEny9PTUuHHjqlxzaFZ0dLT27Nmjy5cvu5b96le/0ttvv638/HxlZ2drx44dcjqdrvWDBg2Sj49PrZ/XmJ6erjFjxrgti4uL07vvvus6xWx1Penp6erZs6fbpQQAUN8IlEALkpqaKn9/f/n7++vmm2/W3r17tXbtWo0YMUInT57U5s2bNWXKlCrbtWrVSpMmTVJycrKkb0/1Tpo0yRUwJal9+/ZasGCBIiMjNXjwYB0/flxbtmxxu+Hn++5o/j5paWmy2Ww6fvz497aJiYmRp6en3n33Xdeyy5cva9asWXI6nRo7dqz69OmjP//5z27bVXdN57V8+eWX2r17t6ZNm+a2PDg4WD169NC2bdsaRT1r1qzRjBkzatwPANQJo4XLzc01JBkZGRlWl4JryMrKMiQZWVlZVpeCfzlw4IDRrVs3o7S0tMbblJSUGG3a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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "reader = TreeReader(ccg_parser=BobcatParser, mode=TreeReaderMode.RULE_TYPE)\n", - "reader.sentence2diagram(sentence).draw()" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/examples/unk-words.ipynb b/docs/examples/unk-words.ipynb deleted file mode 100644 index 41da04fa..00000000 --- a/docs/examples/unk-words.ipynb +++ /dev/null @@ -1,526 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Handling unknown words\n", - "\n", - "The term _unknown words_ refers to words that might appear during evaluation and testing, but they were not present during training, so the model does not include any representation of them. Consider the following toy train and test sets, where the words 'John' and 'dislikes' occur only in the test data:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "train_data = ['Alice loves Bob', 'Alice hates Charlie', 'Bob loves Jim']\n", - "test_data = ['Jim dislikes Bob', 'John loves Alice']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A common technique to handle unknown words is to replace all _rare_ words in your training data (e.g. words that occur less than 3 times) with a special token `UNK`, and then learn a representation for this as you do with any other token. This representation can be used during evaluation in place of all unknown words in your test data. `lambeq` simplifies this process with the help of a special rewrite rule, `UnknownWordsRewriteRule`, which works as follows:\n", - "\n", - "1. Create a vocabulary from the train data, based on a minimum frequency for each word.\n", - "2. Replace all words in the train data that are not included in the vocabulary with `UNK`, and do the training as usual\n", - "3. Replace all words in the test data that are not included in the vocabulary with `UNK`, and do the testing as usual.\n", - "\n", - "The following sections show how to use this rule in practice, first for models that are not based on syntax (such as the `spiders_reader`), and then for the slightly more complicated case of syntax-based models.\n", - "\n", - "## Handling unknown words in syntax-free models\n", - "\n", - "In syntax-free models, such as the spiders reader and the stairs reader, each word has a single representation, no matter in how many different grammatical roles the word appears in the data. For example, consider the word \"play\"; although it could appear both as a noun and a verb, in a typical syntax-free model there would be just a single representation of the word. Let's look at a concrete example, using a spiders reader, `lambeq`'s equivalent of a bag-of-words model." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import spiders_reader\n", - "\n", - "train_data = [\n", - " \"Alice loves cats\",\n", - " \"Bob loves Alice\",\n", - " \"Alice hates dogs\",\n", - " \"Bob hates cats\"\n", - "]\n", - "test_data = [\n", - " \"Bob dislikes dogs\", \n", - " \"Bob loves mice\"\n", - "]\n", - "\n", - "# Create the diagrams from the data\n", - "train_diagrams = spiders_reader.sentences2diagrams(train_data)\n", - "test_diagrams = spiders_reader.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will now create an `UnknownWordRewriteRule` and we will use it to generate a vocabulary from the train data, with all words that occur _at least 2 times_. This can be done with the class method `from_diagrams`:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Alice', 'Bob', 'cats', 'hates', 'loves'}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from lambeq import UnknownWordsRewriteRule\n", - "\n", - "unk_wrd_rule = UnknownWordsRewriteRule.from_diagrams(\n", - " diagrams=train_diagrams,\n", - " min_freq=2,\n", - " ignore_types=True\n", - ")\n", - "\n", - "# Show vocabulary\n", - "unk_wrd_rule.vocabulary" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that the word \"dogs\" is not included in this vocabulary, since it occurs only once in the train data, so it doesn't meet the inclusion condition. Further, notice that the parameter `ignore_types` is set to True, which forces the rewrite rule to ignore differences that occur only in the grammatical type of the token.\n", - "\n", - "In order to use the rewrite rule in practice, we need to pass it to a `lambeq` rewriter and apply it on the train and test data." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Rewriter\n", - "\n", - "rewriter = Rewriter([unk_wrd_rule])\n", - "\n", - "# Replace rare/unknown words with UNK\n", - "rewritten_train_diagrams = [rewriter(d) for d in train_diagrams]\n", - "rewritten_test_diagrams = [rewriter(d) for d in test_diagrams]\n", - "\n", - "# Training\n", - "# ... \n", - "\n", - "# Testing\n", - "# ..." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's examine the results on the train set:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "for d in rewritten_train_diagrams:\n", - " d.draw(figsize=(3,2))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the third diagram, \"dogs\" is replaced by `UNK`, since it appeared in the train data only once, so it was considered a rare word and thus was not included in the vocabulary. We can now use these diagrams for training, so the model will learn a representation for the `UNK` token equally as for every other word.\n", - "\n", - "Let's now have a look at the test diagrams:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAADcCAYAAAABQ3gmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAUSUlEQVR4nO3de0xT9x/G8acUy6Utd1SMgm5OLBNRNs2mm6IIaqKiLC5ecGq8DKNGp4tz2aayZW5qcCZOjTpNZtC56QZL5g1EUKOiRvEyaXAzTMkEbTOUFhFGe35/+KMZgsqtnJ5+n1fSRLCcfg7f8qanLa1KkiQJREQC8pB7ACIiuTCARCQsBpCIhMUAEpGwGEAiEhYDSETCYgCJSFgMIBEJiwEkImExgEQkLAaQiITFABKRsBhAIhIWA0hEwmIAiUhYDCARCYsBJCJhMYBEJCwGkIiExQASkbAYQCISFgNIRMJiAIlIWAwgEQmLASQiYXk6+wLu3LkDs9ns7ItpVyEhIQgPD5d7DJehxDUEuI5PU+I6OnsNnRrAO3fuwGAw4NGjR868mHbn6+sLo9HIHx4odw0BruN/KXUdnb2GTg2g2WzGo0ePkJGRAYPB4MyLajdGoxEpKSkwm838wYEy1xDgOj5NievYEWvo9ENgADAYDIiNje2IiyIn4Rq6B65jQ3wQhIiExQASkbAYQCISFgNIRMJiAIlIWAwgEQmLASQiYTGARCQstwrgrFmzMHHiRLnHICKFcJkAzpo1CyqVynEKDg7GmDFjcO3aNblHoxf466+/oFKpcOXKlUb/FxcXh6VLlzo+7tmzJ1QqFQoKChqcb+nSpYiLi3N8vGbNGgwYMKDBeU6fPo2AgAAsXboUkiS14x4QIOY6ukwAAWDMmDEoKytDWVkZcnNz4enpiXHjxsk9Fj1DRUUFrFZri7/O29sbH330UYu+5tChQxg9ejSWLVuGTZs2QaVSwWQy4fHjxy2+fGpI5HV0qQB6eXmha9eu6Nq1KwYMGICVK1eitLQUJpMJAHD9+nWMHDkSPj4+CA4Oxvz585tcuLS0NISGhsLPzw+pqamora3t6F1xW3V1dTh06BAmT56MsLAw3Lp1q8XbmD9/PgoKCnD48OFmnX/fvn1ITk7G+vXrsWrVKsfnDx8+jLCwMKSmpuLcuXMtnkNkXMcnXCqA/2W1WpGRkYHevXsjODgYVVVVGD16NAIDA3Hx4kUcOHAAx48fx6JFixp8XW5uLoxGI/Lz8/HDDz/gl19+QVpamkx74T7++OMPLF++HN27d8d7772H0NBQ5OXlISYmpsXb6tWrF1JTU/Hxxx/Dbrc/97xbtmzB7NmzsXv37kZrPX36dGRkZKCiogIjR45EZGQk1q5di9LS0hbPJAolrWN5eXmLZ2oxyYkuXbokAZAuXbr0wvPOnDlTUqvVklarlbRarQRACgsLc3ztjh07pMDAQMlqtTq+5tChQ5KHh4dUXl7u2EZQUJBUVVXlOM+2bdsknU4n2Wy2dp/Z3ZnNZmn58uUSAKlTp07SxIkTpZ9//lmqqalpcL6SkhIJgFRYWNhoG8OHD5eWLFni+DgiIkL65ptvpPv370t6vV7as2ePJEmStGTJEmn48OGO861evVrSaDQSAGnXrl0vnPXBgwfSjh07pLfffltSq9XS4MGDJQDSmTNnWrXv7kTJ6whA+vzzz6VHjx61at9fxKVuAY4YMQJXrlzBlStXcOHCBYwePRpjx47F7du3YTQaERMTA61W6zj/0KFDYbfbUVxc7PhcTEwMfH19HR+/+eabsFqtvFXQCps3b0Z6ejoAICsrC5mZmUhOToZGo2nztkNDQ/Hhhx9i1apVz7yLonv37oiNjcWGDRtQVlb23O35+/tj3rx5OHXqFM6ePYu///4bAHhoDOWu4+7duwEAq1atwrFjx9o8a1NcKoBarRa9e/dG7969MWjQIHz33XeoqqrCzp075R5NSPPnz8eCBQsAAO+++y5mz56NEydONDrc8fPzAwA8fPiw0TYePHgAf3//Jre/bNkyVFdXY+vWrU3+v16vx/Hjx6HVajFixIjn/vA8fvwYBw4cwPjx4/HWW28hICAAADB48OAX7qe7U+o6zpkzBwCwcuVKxMfHv3hHW8GlAvg0lUoFDw8PVFdXw2Aw4OrVq6iqqnL8/5kzZ+Dh4YHIyEjH565evYrq6mrHxwUFBdDpdOjRo0eHzu4OunXrhrlz5wJ4citCo9EgOTkZERERWLlyJW7cuAEACAoKQkhICC5dutTg6ysrK/Hnn3+iT58+TW5fp9Phs88+w5dffgmLxdLkeQIDA3H8+HH4+fkhLi4Od+/edfyfJEk4ffo05s2bh65du2LZsmXo168frl27hj179gBAgyMGUSl1Hffv3w8AmDx5MvR6fZu/D01xqQDW1NSgvLwc5eXlMBqNWLx4MaxWK8aPH4/p06fD29sbM2fOxO+//468vDwsXrwYM2bMQJcuXRzbqK2txZw5c1BUVITDhw9j9erVWLRoETw8XGpXFScmJgbbt29HeXk5NmzYgCtXriAmJgbXr18H8ORWwNq1a7F3717cunULFy5cwPTp0xEaGork5ORnbnf+/Pnw9/fHvn37nnmegIAA5OTkIDAwsMEPT0ZGBkaPHo1Hjx7hp59+wu3bt/HVV1+hb9++7bvzbkRJ69irV6/23fkmdMhL4jfX0aNHERYWBuDJzea+ffviwIEDjidWHjt2DEuWLMGgQYPg6+uLd955Bxs3bmywjfj4eLzyyisYNmwYampqMHXqVKxZs6aD98R9eXt7Y8qUKZgyZQru3r0LnU4HAFixYgV0Oh3WrVuHW7duISgoCEOHDkVeXh58fHyeub1OnTrhiy++wLRp0557uf7+/sjOzsaYMWMwfPhw5OfnIz4+HuXl5Y5DN2o+ruP/OeWhlf9T4iOqSpzZmZT6/VDq3M6ixO9HR8zM40IiEhYDSETCYgCJSFgMIBEJiwEkImExgEQkLAaQiITFABKRsBhAIhIWA0hEwmIAiUhYDCARCYsBJCJhdcjLYRmNxo64mHahpFk7ktK+L0qbt6Mo6fvSEbM6NYAhISHw9fVFSkqKMy+m3fn6+iIkJETuMVyCUtcQ4Dr+l1LX0dlrqJIk5741+507d2A2m9t1mzk5OVi5ciXy8/Od8lLZISEhCA8Pb/ftKpUz1hAAli5dCgDYtGlTu28b4Do+zRnraLFYEBcXh6+//hoJCQntum3A+Wvo9EPg8PDwdt+B+jdxHjBgwDPfqIXajzPWEIDjjYtiY2PbfdvUmDPWsf4NlF566SVFriMfBCEiYTGARCQsBpCIhMUAEpGwGEAiEhYDSETCYgCJSFhuGcCDBw8iOjoaPj4+CA4OxqhRo1BVVSX3WNQCXEP34Orr2CF/C9yRysrKMHXqVKxfvx6TJk2CxWLB6dOn4eQ/eKF2xDV0D0pYR7cMYF1dHZKTkxEREQEAiI6OlnkqagmuoXtQwjq63SFwTEwM4uPjER0djcmTJ2Pnzp2oqKiQeyxqAa6he1DCOrpdANVqNXJycnDkyBFERUVh8+bNiIyMRElJidyjUTNxDd2DEtbR7QIIACqVCkOHDkVaWhoKCwuh0WiQmZkp91jUAlxD9+Dq6+h29wGeP38eubm5SExMROfOnXH+/HmYTCYYDAa5R6Nm4hq6ByWso9sF0M/PD6dOncKmTZtQWVmJiIgIpKenY+zYsXKPRs3ENXQPSlhHtwugwWDA0aNH5R6D2oBr6B6UsI5ueR8gEVFzMIBEJCwGkIiExQASkbAYQCISFgNIRMJiAIlIWAwgEQmLASQiYTGARCQsBpCIhMUAEpGwGEAiEhYDSETCYgCJSFgMIBEJiwEkImEp8hWhvby80L9/f9hsNrlHoTbo0qWL3CNQG9XV1aF///7w8vKSe5RWUWQAfX19ce3aNZjNZgQFBck9DrXSvXv35B6B2shsNuPatWvQarVyj9IqijwEfv311+Hj44ODBw/KPQqR0A4ePAgfHx+89tprco/SKooMYEBAAKZMmYLt27ejurpa7nGIhFRdXY0dO3Zg6tSpCAgIkHucVlFkAAFg2bJlMJlMmDFjBu8LJOpgNpsNKSkpMJlM+OCDD+Qep9UUG8B+/fph//79yMzMxMKFC1FbWyv3SERCqK2txcKFC5GVlYUff/wR/fr1k3ukVlNsAAFgwoQJ2L59O3bt2oUhQ4aguLhY7pGI3FpxcTGGDBmCXbt2Yfv27Rg/frzcI7WJogMIAHPnzsW5c+dgsVgQGxuLtLQ0mM1muccicismkwlpaWkYOHAgrFYrCgoKMHfuXLnHajPFBxB48qjw5cuX8f7772PdunXo0aMHFixYgJs3b8o9GpGiFRcXIzU1FeHh4Vi3bh1SU1Nx6dIlxT7q+zS3CCAAaLVabNy4EaWlpfjkk0+QmZmJvn37IikpCSdPnuQDJUTNZLPZcPLkSSQlJcFgMCArKwuffvopSktLsXHjRsU+568pKkmSJLmHcIbHjx9j7969SE9Ph9FoRFBQEEaNGoWEhAQkJCQgIiJC7hGFZrFYMH78eNhsNmzduhU9e/aEXq+Xeyxh3b59Gzk5OcjOzkZubi7++ecfREVFYfny5Zg2bRq8vb3lHtEp3DaA9ex2O86ePYvs7GxkZ2fj4sWLsNvt6NOnDxITE5GQkIC4uDj4+fnJPaoQCgsLsWXLFmRkZKCmpsbxeS8vL6SkpGDRokUYMGCAfAMKorKyEvn5+cjOzkZOTg5u3rwJDw8PDBo0CImJiUhMTMSQIUPg4eE2B4lNcvsAPq2iogInTpxw/LYrKSmBp6cn3njjDSQkJGDYsGF49dVXERoaKveobsVqtSIlJQW//vorPD09UVdX1+g89Z9PSkrC3r173epQS24mkwk3btzAqVOnkJOTg4KCAtTV1aFXr16OGwIjR45EYGCg3KN2KOEC+LRbt245YnjixAk8fPgQABASEoKoqCgYDAZERUU5TmFhYVCpVDJPrSxWqxUjRoxAYWFhs+6LVavVGDhwIPLy8qDT6TpgQvcgSRLKyspQVFTkOBmNRhQVFTmeGeHv74+RI0c6ovfyyy/LPLW8hA/gf9XV1eHmzZsNrjhFRUUoLi52HK75+/s3iqLBYEB4eLjbHy601sSJE/Hbb7+16IEotVqNcePGISsry3mDKZTdbsedO3caXU+LiopQWVkJ4MldCpGRkY2up3369IGnpyJfA8UpGMBmsNlsKCkpafRb1Wg0oqqqCsCTK1xYWNgLT6GhoUKFsrCwELGxsW36elHuE7Tb7TCZTCgrK3vhqf4XslarbfALuf7fvXr1glqtlnmPXB8D2AZ2ux2lpaUwGo24efNmk1fUp5+UrVar0aVLl+cG0t/fH3q9Hn5+ftDr9Yq+Is+dOxfff/99k/f5vYinpydmzZqFnTt3OmEy57PZbLBYLKisrITFYsHDhw+fG7h79+41upUcEhLS5PWkT58+iIqKQvfu3YX6hdreGEAnq62txb179xpd2e/evdvoym+325vchlarhZ+f3zNP9bF81kmn08HLywsajQYajQZqtbpD7se0WCwIDQ1t8GhvS3l7e+P+/ftOf4qMJEmw2Wyora1FbW0tampqYLVaUVlZ+cxTfdyedao/Oniah4dHg1+C3bp1azJyXbp0gUajcep+i44BdBE2mw0mkwlms7nJH6wX/bDV38Jozv1sKpXKEcNnnTp16vTC8zx9fpVKBZVKBQ8PD6hUKty/fx/ffvttm783CxcuROfOnWG32yFJEiRJwr///uuIVXNOzTl/c34U1Gp1g1voLfmlpNfrERISgtDQUEXfqncnDKAbkSQJjx8/bjKOLQ1Ga071cao/1dTUoKKios37FRwcDI1G4whscwLe1lOnTp2ajJi3tzefBeBGGEBymuvXr6N///7tsh0lv+QSuS7ee0pO07Nnzza/WY63tzf/bJGchgEkp9Hr9UhJSWn18848PT2RkpLCvxEmp+EhMDkVnwdIroy3AMmpBg4ciKSkpBY/6qlWq5GUlMT4kVPxFiA5XWv/Fjg/P58viEBOxVuA5HQ6nQ55eXkYN24cADzzPsH6z48bN47xow7BAFKH0Ol0yMrKwuXLlzFr1qxGL7Dp7e2N2bNno7CwEFlZWYwfdQgeApMsLBYLJkyYgLq6Omzbtg0RERF8tJc6HF8Xh2Sh1+sdweOTnEkuPAQmImExgEQkLAaQiITFABKRsBhAIhIWA0hEwmIAiUhYfB4gyYZvPk9yYwBJNiaTSe4RSHA8BCYiYTGARCQsBpCIhMUAEpGwGEAiEhYDSETCYgCJSFgMIBEJiwEkImExgOSSDh48iOjoaPj4+CA4OBijRo1CVVWV3GORm+GfwpHLKSsrw9SpU7F+/XpMmjQJFosFp0+fBt+/i9obA0gup6ysDHV1dUhOTkZERAQAIDo6WuapyB3xEJhcTkxMDOLj4xEdHY3Jkydj586dqKiokHssckMMILkctVqNnJwcHDlyBFFRUdi8eTMiIyNRUlIi92jkZhhAckkqlQpDhw5FWloaCgsLodFokJmZKfdY5GZ4HyC5nPPnzyM3NxeJiYno3Lkzzp8/D5PJBIPBIPdo5GYYQHI5fn5+OHXqFDZt2oTKykpEREQgPT0dY8eOlXs0cjMMILkcg8GAo0ePyj0GCYD3ARKRsBhAIhIWA0hEwmIAiUhYDCARCYsBJCJhMYBEJCwGkIiExQASkbAYQCISFgNIRMJiAIlIWAwgEQmLASQiYTGARCQsBpCIhMUAEpGwGEAiEhYDSETCYgCJSFgMIBEJiwEkImExgEQkLAaQiITFABKRsBhAIhIWA0hEwmIAiUhYDCARCYsBJCJhMYBEJCwGkIiExQASkbAYQCISFgNIRMJiAIlIWJ5yD0DiWrFihdwjkOBUkiRJcg9BRCQHHgITkbAYQCISFgNIRMJiAIlIWAwgEQmLASQiYTGARCQsBpCIhMUAEpGwGEAiEhYDSETCYgCJSFgMIBEJiwEkImExgEQkLAaQiITFABKRsBhAIhIWA0hEwmIAiUhYDCARCYsBJCJhMYBEJCwGkIiExQASkbD+B9WeCKOHxGXYAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "for d in rewritten_test_diagrams:\n", - " d.draw(figsize=(3,2))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Every word that was not included in the original vocabulary created from the train data is now replaced with the `UNK` token, and it will use the learned representation of that token." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Handling unknown words in syntax-based models\n", - "\n", - "In syntax-based models, such as DisCoCat, words are added to the vocabulary based on both their surface form _and_ the grammatical type in which they occur in the data. This means that it is possible to have more than one `UNK` token in your vocabulary, and even that a token that occurs under different grammatical roles (e.g. \"play\" as a verb and \"play\" as a noun) could be replaced by different `UNK` tokens depending on the type of each occurrence. In the following example, we use BobcatParser to create DisCoCat diagrams for a toy dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "150d5e2306864c389c0b4be6807445c6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Tagging sentences: 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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yOVyadWqVbxsRB34+fnpb3/7m1wulwYMGKBTp07ZPRJ8xKZNm5SSkqJBgwZpzpw5do+DesQ9ro8JCAjQRx99pPvuu099+/ZVWlqaiouL7R4LXmzFihVKTEzUlStXtH79ekVFRdk9kteLiorSunXrdOXKFSUmJurDDz+0eyR4seLiYv3xj3/Uww8/rB49euijjz6q8vZR8G7Emg8KDg7W+vXrNX36dL366qvq2bMnL+mBWjt//rxGjhypkSNHauDAgdq/f7/at29v91g+o0OHDtq3b58GDBigESNGaNSoUca9mTzMd/DgQSUlJem1117T9OnTtW7dunp54WWYhVjzUQEBAUpLS9PWrVt16dIlde/eXVOnTuVvZHBTFy5c0FtvvaWEhAStXbtWy5cv14oVK9SiRQu7R/M5ERERWrFihT744AOtWbNGXbp00fz583XhwgW7R4PhsrKyNHXqVN19993Kz8/Xtm3blJaWxiNqPopY83H33Xef9uzZoylTpujtt99Whw4dNGTIEK1du5YX5kQl+/fv14QJExQTE6MXX3xRvXv31oEDBzRy5Ei7R/NpDodDo0aN0oEDB9S7d2+98MILiomJ0cSJE7V//367x4NBysrKtHbtWj322GPq0KGD3n77bU2ZMkV79uzRvffea/d48CBirREIDg7W7Nmzdfr0aS1atEjZ2dkaPHiwOnbsqHnz5un8+fN2jwibFBUVafny5erVq5e6deumzz//XFOnTlV2drYyMjIUGxtr94iNRmxsrDIyMpSdna2XX35Zn332mbp166ZevXopIyNDV69etXtE2OT8+fOaO3eu4uLiNHjwYJ06dUp/+ctfdPr0ac2ePZunPRsB3hu0EbIsS1u3btXChQv18ccfy+l0aujQoerXr5+Sk5N1++238/6iPuzMmTP66quvlJmZqU8//VRnz55V3759NWnSJA0ZMsTrn0Yx+b1Ba6O4uFirV6/WwoUL9c9//lOtWrXS448/rr59+6pPnz5q1aqV3SPCQyzL0rFjx5SZmakNGzZo1apVKi0t1fDhwzVp0iQlJSVxH93IEGuN3JkzZ7R48WKtWrVKe/bsUVlZmWJiYpScnFxxIN6827VxlpmZqYMHD0qS7rzzTg0ePFi//vWvFR8fb/OU9cdXYu1a3333nRYtWqQ1a9bo6NGjkv73uorla5R4827Xxln54fTp0/Lz89Pdd9+tYcOGafz48fyOGzFiDRV++uknbd68ueLO4vp469Onj+655x7FxcWpadOmdo8LN4qKinT8+HF98803FYF2bZxdu3OPiYmxeVrP8MVYu9bp06crxXd5vMXHx1f8bhMTE9WhQwcFBQXZPC3cuXz5so4cOaLdu3dX/C6vjbPyddqrVy81a9bM7nFhAGIN1aou3iQpOjpacXFx6tixY6WP7du3l7+/v82T+zbLsnT69GkdOXJEhw8frvTxxIkTFb+jxhJn1/P1WLtedfHm5+en9u3bu12nMTExPFruYSUlJTpx4oTbdZqTkyNJxBlqjFhDjV28eFEHDx7UkSNHKt3xHDlyRIWFhZIkf39/3X777RU7hXbt2qlly5Zq2bKlWrVqpZYtWyoiIkJOp9PmW2Mmy7J04cIFnTt3TmfPntW5c+d07tw5nTp1qtLPu6CgQNL/ft4dOnSotCOOi4tTfHy8WrdubfOtsUdji7XrnTlzxu06PX78uEpKSiT97z8dXbvNxMbGVlmn4eHhBF01SktLlZeXV2WdZmVlVfy8jx07VvHzdrlcFWvz+nUaFhZm862BNyDWUGdlZWVVHukpP/7f//63yjsoOBwORUREVNk5XH+8adOmcrlcVQ5BQUHG7kQsy1JxcbEKCwurHAoKCvTDDz9UuYO/9vi5c+cq7uDL+fn5KSoqyu2dffv27b3+PwTUt8Yea9UpLi6u8khP+eH777+v8lI+/v7+FWuxunUaGRmp4OBgt+s0ICDA6HVaVFTkdp1evnzZ7dq89nheXp6u33UGBATotttuq/IoZvkjmbxFG+qCWINHWZalixcvVrqzq+4OsPz4zd4ey+FwqEmTJnK5XNXuKMoP/v7+8vPzk5+fn5xOZ8Xxaw9BQUEqLCxUWVlZtYfS0lK3d+zXx1j55dyIn5+fIiIi3O783J3WvHlzHomsBWKt9kpLS/Xjjz/WeJ3m5eXVaDuvyRp1uVzVrs3yQ3BwsK5cuVLt2iw/XlJSUqM1euXKlSqxdb2AgIBq16S708LCwoyNU3g/Yg1GsSxLP/30k3744Qfl5+dXuZO90R2wu8O1d+TVHZo3b64LFy7ccGdRvuOp7nCjHdK1X4uMjCS+PIxY87zS0lKdP39eeXl5dV6jN/uHUllZmcLDw/Xjjz/edI06nc46r9GQkBDiC8bhL8FhFIfDofDwcIWHh9s9CoBqOJ3OikeWAHgeT6IDAAAYjFgDAAAwGLEGAABgMGINAADAYMQaAACAwYg1AAAAgxFrAAAABiPWAAAADEasAQAAGIxYAwAAMBixBgAAYDBiDQAAwGDEGgAAgMGINQAAAIMRawAAAAYj1gAAAAxGrAEAABiMWAMAADAYsQYAAGAwYg0AAMBgxBoAAIDBiDUAAACDEWsAAAAGI9YAAAAMRqwBAAAYjFgDAAAwGLEGAABgMGINAADAYMQaAACAwYg1AAAAgxFrAAAABiPWAAAADEasAQAAGIxYAwAAMBixBgAAYDBiDQAAwGDEGgAAgMGINQAAAIMRawAAAAYj1gAAAAxGrAEAABiMWAMAADAYsQYAAGAwYg0AAMBgxBoAAIDBiDUAAACDEWsAAAAGI9YAAAAMRqwBAAAYjFgDAAAwGLEGAABgMGINAADAYMQaAACAwYg1AAAAgxFrAAAABiPWAAAADOZv9wAAUJ8GDx5s9wgAUK8clmVZdg8BAAAA93gaFAAAwGDEGgAAgMGINQAAAIMRawAAAAYj1gAAAAxGrAEAABiMWAMAADAYsQYAAGAwYg0AAMBgxBoAAIDBiDUAAACDEWsAAAAGI9YAAAAMRqwBAAAYjFgDAAAwGLEGAABgMGINAADAYMQaAACAwYg1AAAAgxFrAAAABiPWAAAADEasAQAAGIxYAwAAMNj/A1r9LU3p1N7ZAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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XbusHg1ooKysTM8995z69OmjK664Qt99953mz5+v4uJizZ8/X/369TvvdT/yyCPas2ePli5d2ugy+fn5ysnJ0YIFCzR69OgGt/v5+el3v/ud/vnPf6qkpESTJ0/WypUr1aVLFw0dOlRvvPGGqqqqzntG4HxdfPHFmjNnji677DKNHj1a48eP15w5c9wuO2HCBA0aNEidO3fW4MGD9eSTT2rZsmWu28eMGaNVq1apuLhYknTo0CGtWLFCd999d6tsC5qGWPMC3377rUaNGqWuXbsqLCxMnTt3liQVFRVZOxjgxrx58zRhwgSFhISooKBAubm5ysrKkr+/f7PXHRMTo8mTJ2vq1Kmqqalxu0xCQoL69OmjZ5991vVA1Zjw8HDde++9+uyzz7Rhwwbt2bNH2dnZWrVqVbNnBZoqPT1dNpvNdblfv3769ttvVVdX12DZjz76SEOGDNFFF12k0NBQ3X777SorK1NlZaUkqW/fvurVq5cWL14sSVqyZIk6deqka665pnU2Bk1CrHmB4cOH6/Dhw1q0aJE2btyojRs3SlKjD1aAlcaOHavp06erpKREvXr10l133aU1a9Y0+KfLsLAwSVJ5eXmDdfz0008KDw93u/5JkyapqqpK8+fPd3t7aGioPvroIwUHB2vQoEFnDLbjx4/r7bff1vDhwzVgwABFR0dr/vz5GjJkyLluLtDqvv/+e1133XVKSUnRv/71L23dulUvvviipPqPC2PGjNHrr78u6Zd/Ar3rrrvqxSDMQay1cWVlZfrmm2/0yCOPaMiQIUpKStKRI0esHgtoVHx8vB555BHt3r1bK1eulL+/v7KystSpUyf9+c9/1s6dOyVJUVFRio6O1tatW+vd/+jRoyooKFCPHj3crj8kJESPPvqoZsyY0egLpSMjI/XRRx8pLCxMGRkZOnDggOs2p9Opzz//XPfee69iY2M1adIkJScn6+uvv9bGjRt1//3385oeWOLkL+In5eXlqXv37vL19a13/datW+VwOPTXv/5V6enp6tGjR719/KTf//732rt3r55//nnt2rVLd9xxR4vOj/NHrLVxkZGRstvtevnll1VQUKA1a9Zo0qRJVo8FnJOrrrpKCxcuVElJiZ599llt375dqamp2rFjh6RfniV76qmntHTpUhUWFmrTpk0aPXq0YmJilJWV1eh6x44dq/DwcL35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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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+vr6Kjw8XGlpae5x0dHRkqRDhw61a3kLFizQbbfdpksuuURLliw55cdydu3apQkTJrS71rb6KkkKCgpSUlKS+3FsbKy79rCwMM2YMUMTJ07UlVdeqRUrVni8RdqbENa87Morr9SRI0f01FNPaceOHdqxY4ckqa6uzuTK0B0UFRXpiiuuUHp6ul5++WXl5eVp1apVkjz3odtuu01r1qyR9NNboLfcckvvfOsAHcKVfNZ38luUNpvNY1zT/7nL5ZKPj0+zz77W19d7PH7wwQf1xRdf6PLLL9d7772nc845R6+88kqLbXfkYoP29lUtrc+JNa9evVrbtm3T+eefr5deekkpKSnavn17u+voKQhrXlReXq78/Hzdf//9mjBhgoYOHaqjR4+aXRYsoCm0N9m+fbsGDx4sX19fj/F5eXlyuVx67LHHlJmZqZSUFJWUlDRb3s0336z9+/friSee0Jdffqlf//rXXVo/rCspKUl2u11btmxxj6uvr1dubq7OOeccEytDV4uMjFRFRYUqKyvd41r6zr2UlBTNnz9fb7/9tq655ppmn3ltkp6erk2bNrWr7fb2Ve0xYsQI3Xvvvdq6datSU1P14osvntZyujPCmheFhoYqPDxc//jHP1RYWKj33ntPCxYsMLssWEBxcbEWLFig/Px8rV27VitXrtS8efOaTZecnKz6+nqtXLlS33zzjZ577jk9+eSTzaYLDQ3VNddco7vvvluXXnqpEhISvLEasCCn06k777xTd999t9588019+eWX+s1vfqOqqirNnDnT7PLQhc477zwFBQXpvvvu0969e/Xiiy+6z7hLUnV1tebMmaOcnBzt379fW7ZsUW5uroYOHdri8hYvXqy1a9dq8eLF2rNnj3bv3q1HHnmkxWnb21edyr59+3Tvvfdq27Zt2r9/v95++20VFBS0Wl9PRljzIh8fH61bt055eXlKTU3V/Pnz9de//tXssmAB06dPV3V1tTIyMjR79mzNmzdPs2bNajbd8OHDtWzZMj3yyCNKTU3VCy+8oL/85S8tLnPmzJmqq6vTrbfe2tXlw+KWLFmia6+9VtOmTdPIkSNVWFiot956S6GhoWaXhi4UFham559/Xq+//rrS0tK0du1aPfjgg+7nfX19VV5erunTpyslJUXXX3+9Jk2apD/96U8tLm/8+PFav369Nm7cqHPPPVc/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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "for d in rewritten_train_diagrams:\n", - " d.draw(figsize=(6,3))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "These `UNK` representations will be used in the testing diagrams in place of the unseen noun (\"ball\") and adjective (\"nice\")." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAADHCAYAAAC0hzwMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAUVElEQVR4nO3dfVjV9f3H8deBA4IgKLeCELAZ4BTZWmlkKYnTduW6kmteUTqcZaztssmwuVloopVlV96hWNe6Vi5x15our2vDJETN1pJ2uVneFCZibsnd0NUClLvz+6NLfhwB4+ZwPgd4Pq6LCw58+X7f53C+PM/3HDjHYrPZbAIAwCA30wMAAECMAADGESMAgHHECABgHDECABhHjAAAxhEjAIBxxAgAYBwxAgAYR4wAAMYRIwCAccQIAGAcMQIAGEeMAADGESMAgHHECABgHDECABhHjAAAxhEjAIBxxAgAYBwxAgAYR4wAAMZZTQ+A7mtpaVFNTY0kKTg4WO7u7oYnAlwP+8nARIxcwNWd58KFC6qoqNCFCxfsPr76vqqqSi0tLZIkd3d3jR49WmFhYQoPD2973/7jsLAwdkYMGlf3k2v3i2v3lcrKSrv9JDQ0tMN+ce2+wn5insVms9lMDzFYtY9MZ3G5+nH7yEiSm5ubQkJCOt1xwsLCJKnLHbGqqkrtf6REC67u2sh0ta9cu59YLBaFhoZ2ed2WvtpPOltvdXW1Wltb29ZFtMwjRr3QH5Fp/z4kJERWa+8OWpubm1VVVfW1tx6JFvpbf0Xm6vvQ0NA+7SfV1dXdujfi2v2EaPUPYtSOK0fG0foSras74/V2SHbGwcuVI+NofY3W9X4fEC17QyJG3Y1MZWWl3aH7QIyMoxGtoaOzxy47+3kPhsg4GtHquwEdo5aWFlVXV3frAU0i07+IlusiMq6DaHXNJWNEZAYvR0Trej/bgbwz9hSRGbx6Gy03Nze7x34HUrScGiMig+4aytEiMuiuwRQtp8ZoxYoVeuqpp9pOExn0VW+jlZOTo5UrVxqcvGurV6/Wk08+2XaayKCvehut7OxsrVmzxikzOv2aGxISooKCAiIDh7BarRozZozGjBlz3eXaR2vWrFlOmq73AgICVFhYSGTgEFarte0GzPW0j9bdd9/tpOm+4vRruLe3t26++WZnbxZDXPtoeXl5mR7na3l5ebGfwOnaR8vb29up2+aJUgEAxhEjAIBxxAgAYBwxAgAYR4wAAMYRIwCAccQIAGAcMQIAGEeMAADGESMAgHHECABgHDFyYdHR0dq4caPpMQCg3xEjAC7r3LlzslgsOnbsWIevJScnKzMzs+10dHS0LBaLjhw5YrdcZmamkpOT206vWrVK3/72t+2WeeeddzRy5EhlZmbKBV9vdEggRgBczqVLl/Tll1/2+Pu8vLz0q1/9qkffU1BQoFmzZikrK0sbN26UxWJRTU2NLl++3OPto/eIkUHJyclavHixFi9eLH9/fwUFBWnFihVd3jJbv369EhIS5OPjo8jISP3sZz9r22Hr6urk5+enXbt22X3Pnj175OPjo//973/9fn6AvmhublZBQYHmzp2rsLAwlZWV9XgdGRkZOnLkiPbu3dut5Xfu3KnU1FStW7fO7sUW9+7dq7CwMD3yyCN67733ejwHeo4YGbZ9+3ZZrVa9//772rRpk9avX6+XX36502Xd3Ny0efNmnTx5Utu3b9eBAwe0bNkySZKPj4/S0tL0yiuv2H3PK6+8oh/+8IcaMWJEv58XoDeOHz+upUuXKiIiQunp6QoODtbBgweVmJjY43XFxMTokUce0fLly9Xa2nrdZbdu3aqFCxfqt7/9rRYvXmz3tXnz5mnHjh26dOmSpk+frri4OD3zzDP617/+1eOZ0D3EyLDIyEht2LBBcXFxmjdvnh599FFt2LCh02UzMzN15513Kjo6WtOnT9dTTz2l119/ve3rixYtUmFhoSoqKiRJ1dXV2rt3rx588EGnnBegu2pra7Vp0ybddNNNuvnmm3X27Fnl5eWpoqJCeXl5SkpK6vW6s7OzVV5ervz8/C6X+eijj7R48WJt27ZN8+bN6/B1q9Wqu+++W3/4wx9UWVmpxx57TPv27VNMTIxmzJih1157TQ0NDb2eER0RI8NuvfVWWSyWttNJSUn65JNP1NLS0mHZ/fv3KyUlRWPGjNGIESP0ox/9SLW1taqvr5ckTZo0SePHj9f27dslSTt27FBUVJSmTp3qnDMDdFNubq4yMzPl6+urM2fO6I033lBqaqo8PT37vO7g4GA99thjWrlypRobGztdJiIiQjfddJOef/75thtvXfH399fDDz+sw4cP629/+5vKy8uVnp6uwsLCPs+K/0eMBohz585p9uzZmjhxonbv3q2jR49q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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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l9YiIiIkSSdPnmy2jh9//FGRkZEtrj8tLU3V1dXKyclp8fy+fftq586dCgsL0+TJk9sMUk1Njd58803ddttt+u1vf6vo6Gjl5ORoypQp7d1coFs5fPiwfve732nMmDF6++23tXfvXq1bt06SvB7APfLII/r73/8u6ZeX6GbNmuUVO/gfMfKxwYMHKyMjQ99//73ef/999enTR8nJyUpISNCiRYu0b98+SVL//v0VHR2tvXv3en3/Tz/9pAMHDmjkyJEtrj88PFyZmZl69tlnW32ztV+/ftq5c6ciIiKUlJSk4uLixvMcx9GuXbs0e/ZsxcbGKi0tTddee63+85//KC8vT48++iivm6PbycvL8zq9e/duXXnllQoODvb6971796qhoUEvvPCCrr/+eo0cOdLr9n/O/fffryNHjujFF1/UN998owcffLBL58eFEaMu9Jvf/EZ/+9vfVFpaqpUrVyo/P19jx45VQUGBpF+e5SxbtkybN29WYWGh9uzZo5kzZyomJkbJycmtrnfOnDmKjIzUli1bWl0mKipKH374ofr16+cVpE2bNmnatGk6c+aM3njjDR05ckTLly/XVVdd5duNB3yoqKhIaWlp2r9/v1577TVlZ2dr/vz5zZYbMWKEamtrlZ2drYMHD2rjxo16+eWXmy3Xr18/JScna8GCBZo6daqGDBnij81AG9zWA/QGHo9HM2bM0IwZM1RcXKzw8HBJ0sKFCxUeHq7nn39ehYWF6t+/vxITE/XJJ58oNDS01fWFhIRoyZIluu+++9q83MjISH3wwQe6+eabNWnSJH366aeaMmWKSktLG18mBHqClJQUVVdXa8KECQoODtb8+fM1Z86cZsuNHTtWq1at0vPPP6/09HRNnDhRy5cvV0pKSrNlf//732vLli384EJ34fhRRkaGk5CQ4M+LBJoZPHiws3jxYusxWrV48WJn8ODB1mN0G5MmTXLmz5/v8/W++uqrzoABA5yzZ8/6fN2BICEhwcnIyPDb5fHMCECvcubMGZWUlOi5557TH/7wB5/8pCs6j/eMAPQqK1as0FVXXaXY2Filp6dbj4P/xzMjAN3ap59+6tP1ZWVlKSsry6frROfxzAgAYI4YAQDMESMAgDliBAAwR4wAAOaIEQDAHDECAJgjRgAAc8QIAGCOGAEAzBEjAIA5v382XUVFhe69915/XyzQ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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "for d in rewritten_test_diagrams:\n", - " d.draw(figsize=(4,2))" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/extract_code_cells.py b/docs/extract_code_cells.py deleted file mode 100644 index 1402ba72..00000000 --- a/docs/extract_code_cells.py +++ /dev/null @@ -1,19 +0,0 @@ -from pathlib import Path -import nbformat as nbf - - -print("Extracting code from tutorial notebooks...") - -files = list(x for x in Path("./tutorials").iterdir() - if x.is_file() and x.suffix == ".ipynb") - -Path("./_code").mkdir(exist_ok=True) -for file in files: - ntbk = nbf.read(file, nbf.NO_CONVERT) - cells_to_keep = [] - for cell in ntbk.cells: - if cell.cell_type == "code": - cells_to_keep.append(cell) - new_ntbk = ntbk - new_ntbk.cells = cells_to_keep - nbf.write(new_ntbk, "./_code/"+file.name, version=nbf.NO_CONVERT) diff --git a/docs/genindex.rst b/docs/genindex.rst deleted file mode 100644 index 9e530fa2..00000000 --- a/docs/genindex.rst +++ /dev/null @@ -1,2 +0,0 @@ -Index -===== diff --git a/docs/glossary.rst b/docs/glossary.rst deleted file mode 100644 index ad021722..00000000 --- a/docs/glossary.rst +++ /dev/null @@ -1,168 +0,0 @@ -.. _sec-glossary: - -Glossary -======== - -.. glossary:: - - adjoint - In ``lambeq``, each :term:`pregroup ` type :math:`p` has a left (:math:`p^l`) and a right (:math:`p^r`) adjoint, which are used to represent arguments in composite types. For example, a transitive verb has type :math:`n^r \cdot s \cdot n^l`, meaning it expects a noun argument on both sides in order to return a sentence. - - ansatz (plural: ansätze) - A map that determines choices such as the number of :term:`qubits ` that every wire of a :term:`string diagram` is associated with and the concrete parameterised quantum states that correspond to each word. For the classical case, an ansatz determines the number of dimensions associated with each type, and the way that large tensors are represented as :term:`matrix product states `. - - bag-of-words - A :term:`compositional model` of meaning which represents a sentence as a multiset of words; that is, it does not take into account the order of words or any other syntactic relationship between them. - - Bobcat - A state-of-the-art statistical :term:`CCG ` parser based on [SC2021]_. Bobcat is ``lambeq``'s default parser. - - cap - A special morphism in a :term:`rigid category`, which, together with a :term:`cup` morphism, obey certain conditions called :term:`snake equations`. In diagrammatic form, a cap is depicted as a wire with downward concavity (:math:`\cap`). In the context of :term:`DisCoCat`, a cap is mostly used to "bridge" disconnected wires in order to alter the normal "flow" of information from one word to another, for example in cases such as *type-raising*. - - category - In *category theory*, a category is a mathematical structure that consists of a collection of *objects* and a collection of *morphisms* between objects, forming a labelled directed graph. A category has two basic properties: the ability to compose the arrows associatively and the existence of an identity arrow for each object. ``lambeq`` structures are expressed in terms of a :term:`monoidal category`. - - categorical quantum mechanics (CQM) - The study of quantum foundations and quantum information using paradigms from mathematics and computer science, specifically :term:`monoidal categories `. The primitive objects of study are physical processes and the different ways that these can be composed. The field was originated by Samson Abramsky and Bob Coecke in 2004 [AC2004]_. - - CCGBank - The :term:`CCG ` version of *Penn Treebank*, a corpus of over 49,000 human-annotated syntactic trees created by Julia Hockenmaier and Mark Steedman [HS2007]_. - - Combinatory Categorial Grammar (CCG) - A grammar formalism inspired by combinatory logic and developed by Mark Steedman [Ste2000]_. It defines a number of combinators (application, composition, and type-raising being the most common) that operate on syntactically-typed lexical items, by means of natural deduction style proofs. CCG is categorised as a *mildly context-sensitive* grammar, standing in between context-free and context-sensitive in Chomsky hierarchy and providing a nice trade-off between expressive power and computational complexity. - - compact closed category - A symmetric :term:`rigid category`. The symmetry of the category causes the left and right duals of an object to coincide: :math:`A^l=A^r=A^*`. A :term:`pregroup grammar` is often referred to as a non-symmetric compact closed category. - - compositional model - A model that produces semantic representations of sentences by composing together the semantic representations of the words within them. An example of a compositional model is :term:`DisCoCat`. - - cup - A special morphism in a :term:`rigid category`, which, together with a :term:`cap` morphism, obey certain conditions called :term:`snake equations`. In diagrammatic form, a cup is depicted as a wire with upward concavity (:math:`\cup`). In the context of :term:`DisCoCat`, a cup usually represents a tensor contraction between two-word representations. - - depccg - A statistical :term:`CCG ` :term:`parser` for English and Japanese [YNM2017]_. - - DisCoCat - The DIStributional COmpositional CATegorical model of natural language meaning developed by Bob Coecke, Mehrnoosh Sadrzadeh and Steve Clark [CSC2010]_. The model applies a :term:`functor` :math:`F: \textrm{Grammar} \to \textrm{Meaning}` whose left-hand side is a free pregroup over a partially ordered set of basic grammar types, and the right-hand side is the category whose morphisms describe a sequence of operations that can be evaluated on a classical or quantum computer. - - DisCoPy - DIStributional COmpositional PYthon. A Python library for working with :term:`monoidal categories ` [FTC2020]_. It includes abstractions for creating all standard :term:`quantum gates ` and building :term:`quantum circuits `. Additionally, it is equipped with many language-related features, such as support for :term:`pregroup grammars ` and :term:`functors ` for implementing :term:`compositional models `. - - Frobenius algebra - In the context of a :term:`symmetric monoidal category`, a Frobenius algebra provides morphisms :math:`\Delta: A \to A\otimes A` and :math:`\mu: A\otimes A \to A` for any object :math:`A`, satisfying certain conditions (the so-called Frobenius equations) and implementing the notion of a :term:`spider`. In ``lambeq`` and :term:`DisCoCat`, spiders can be used to implement :term:`rewrite rules ` [Kea2014]_ [Kar2016]_ [SCC2014a]_ [SCC2014b]_. - - functor - A structure-preserving transformation from one :term:`category` to another. ``lambeq``'s :ref:`pipeline ` is essentially a chain of functorial transformations from a grammar category to a category accommodating the meaning of a sentence. - - IQP circuit - Instantaneous Quantum Polynomial. A circuit which interleaves layers of Hadamard :term:`quantum gates ` with diagonal unitaries. - - loss function - In machine learning, a function that estimates how far the prediction of a :term:`model` is from its true value. The purpose of training is to minimise the loss over the training set. - - matrix product state (MPS) - A factorization of a large tensor into a chain-like product of smaller tensors. ``lambeq`` is equipped with :term:`ansätze ` that implement various forms of matrix product states, allowing the execution of large :term:`tensor networks ` on classical hardware. - - model - A ``lambeq`` model is a class holding the trainable weights and other model-specific information, used in supervised learning. A model is always associated with a specific backend, such as PyTorch, NumPy, or :term:`tket`, and is paired with a matching :term:`trainer`. - - monoidal category - A :term:`category` equipped with the monoidal product :math:`\otimes` and monoidal unit :math:`I`, providing an abstraction suitable for quantum computation. :term:`Categorical quantum mechanics (CQM) ` and :term:`DisCoCat` are both based on the mathematical framework of monoidal categories. - - natural language processing (NLP) - The use of computational methods for solving language-related problems. - - NISQ - Noisy Intermediate-Scale Quantum. A term for characterising the current state of quantum hardware, where quantum processors still contain a small number of qubits, and are not advanced enough to reach fault-tolerance nor large enough to profit substantially from quantum supremacy. - - noise - Undesired artefacts that cause the measurement outcome of a :term:`quantum circuit` to deviate from the ideal distribution. - - parser - A statistical tool that converts a sentence into a hierarchical representation that reflects the syntactic relationships between the words (a :term:`syntax tree`) based on a specific grammar formalism. - - PennyLane - A Python library for differentiable programming of quantum computers, developed by Xanadu, enabling quantum machine learning. See more `here `_. - - post-selection - The act of conditioning the probability space on a particular event. In practice, this involves disregarding measurement outcomes where a particular qubit does not match the post-selected value. - - pregroup grammar - A grammar formalism developed by Joachim Lambek in 1999 [Lam1999]_ based on the notion of a *pregroup*. Pregroup grammars are closely related to categorial grammars (such as :term:`CCG `). In category-theoretic terms, a pregroup grammar forms a :term:`rigid category`, sometimes also referred to as a non-symmetric :term:`compact closed category`. - - pytket - A Python interface for the :term:`tket` compiler. - - PyTorch - An open source machine learning framework primarily developed by Meta AI. - - Qiskit - An open-source SDK developed by IBM Research for working with quantum computers at the level of circuits, pulses, and algorithms. - - quantum circuit - A sequence of :term:`quantum gates `, measurements, and initializations of :term:`qubits ` that expresses a computation in a quantum computer. The purpose of ``lambeq`` is to convert sentences into quantum circuits that can be evaluated on quantum hardware. - - quantum gate - An atomic unit of computation operating on a small number of :term:`qubits `. Quantum gates are the building blocks of :term:`quantum circuits `. - - quantum NLP (QNLP) - The design and implementation of :term:`NLP ` models that exploit certain quantum phenomena such as superposition, entanglement, and interference to perform language-related tasks on quantum hardware. - - qubit - The quantum analogue of a bit and the most basic unit of information carrier in a quantum computer. It is associated with a property of a physical system such as the spin of an electron ("up" or "down" along some axis), and has a state that lives in a 2-dimensional complex vector space. - - reader - In ``lambeq``, an object that translates a sentence into a :term:`string diagram` based on a certain :term:`compositional scheme `. Versions of a :term:`bag-of-words` model and a :term:`word-sequence model` are implemented in ``lambeq`` using readers. - - rewrite rule - A :term:`functorial ` transformation that changes the wiring of a specific box (representing a word) in a :term:`string diagram` to simplify the diagram or to make it more amenable to implementation on the hardware of choice. - - rewriter - An object that acts on a :term:`string diagram`, applying some form of :term:`functorial ` or procedural transformation. - - rigid category - A :term:`monoidal category` where every object :math:`A` has a left dual :math:`A^l` and a right dual :math:`A^r`, both equipped with :term:`cup` and :term:`cap` morphisms obeying the so-called :term:`snake equations`. A :term:`pregroup grammar` is an example of a rigid category. - - shots - A collection of measurement outcomes from a particular :term:`quantum circuit`. - - snake equations - Identities that hold between the dual objects of a :term:`monoidal category` and allow the "yanking" of wires and the rewriting and simplification of diagrams. In ``lambeq``, the :py:meth:`.grammar.Diagram.normal_form() ` method uses the snake equations in order to "stretch" the wires of a diagram and provide a normal form for it. - - spider - Another name for a :term:`Frobenius algebra`. - - string diagram - A diagrammatic representation that reflects computations in a :term:`monoidal category`, an abstraction well-suited to model the way a quantum computer works and processes data. String diagrams are the native form of representing sentences in ``lambeq`` and :term:`DisCoCat`, since they remain close to quantum circuits, yet are independent of any low-level design decisions depending on hardware. They can be seen as enriched :term:`tensor networks `. - - syntax tree - A hierarchical representation of a sentence that reflects the syntactic relationships between the words, given a specific grammar. The first step in ``lambeq``'s :ref:`pipeline ` given a sentence is to produce a :term:`CCG ` syntax tree for it, which is then converted into a :term:`string diagram`. - - symbol - In ``lambeq``, a symbol corresponds to a trainable part of a :term:`tensor network` or a :term:`quantum circuit`. In the classical case, symbols are associated with tensors in a :term:`tensor network`, while in the quantum case symbols represent numbers expressing rotation angles on :term:`qubits ` in a :term:`quantum circuit`. - - symmetric monoidal category - A :term:`monoidal category` equipped with :term:`swaps `, such that, for any two objects :math:`A` and :math:`B`, we have :math:`A\otimes B \cong B\otimes A`. ``lambeq``'s string diagrams are expressed in a symmetric monoidal category. - - swap - A crossing of wires in a :term:`symmetric monoidal category`. ``lambeq`` uses swaps in order to translate *crossed composition* rules in :term:`CCG ` derivations into a :term:`string diagram` form [YK2021]_. - - tensor network - A directed acyclic graph expressing a (multi-)linear computation between tensors. The vertices of the graph are multi-linear tensor maps, and the edges correspond to vector spaces. Tensor networks have found many applications in quantum mechanics. ``lambeq``'s :term:`string diagrams ` can be seen as tensor networks with additional properties. - - tensor train - A basic :term:`tensor network` in which all tensors have the same shape and each tensor is connected to the next one following a predefined order. In ``lambeq``, tensor trains are used to implement :term:`word-sequence models `. - - tket - Stylised :math:`\textrm{t}|\textrm{ket}\rangle`. A quantum software development platform produced by Cambridge Quantum. The heart of ``tket`` is a language-agnostic optimising compiler designed to generate code for a variety of NISQ devices, which has several features designed to minimise the influence of device error. - - trainer - In ``lambeq``, a trainer is a class related to a given backend (for example PyTorch, NumPy, :term:`tket` and so on) that is used for supervised learning. A trainer is always paired with a matching :term:`model`, a structure that contains the trainable weights and other parameters of the model. - - tree reader - In ``lambeq``, a tree :term:`reader` converts a sentence into a :term:`monoidal ` diagram by following directly its :term:`CCG ` :term:`syntax tree`, as provided by a :term:`parser`. In other words, no explicit :term:`pregroup ` diagram is generated. Composition takes place by boxes that combine word states based on the grammatical rules found in the tree. - - word-sequence model - A :term:`compositional model` that respects the order of words in a sentence, but does not take into account any other syntactic information. diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 27ded0bc..00000000 --- a/docs/index.rst +++ /dev/null @@ -1,106 +0,0 @@ -lambeq -====== - -.. image:: _static/images/Quantinuum_logo.png - :width: 240px - :align: right - -``lambeq`` is an open-source, modular, extensible high-level Python library for experimental :term:`Quantum Natural Language Processing ` (QNLP), created by `Quantinuum `_'s QNLP team. At a high level, the library allows the conversion of any sentence to a :term:`quantum circuit`, based on a given :term:`compositional model` and certain parameterisation and choices of :term:`ansätze `, and facilitates :ref:`training ` for both quantum and classical NLP experiments. The notes for the latest release can be found :ref:`here `. - -``lambeq`` is available for Python 3.10 and higher, on Linux, macOS and Windows. To install, type: - -.. code-block:: bash - - pip install lambeq - -or refer to :ref:`sec-installation` for more information. To start the tutorial, go to `Step 1: Sentence Input `_. To see the example notebooks, go to :ref:`sec-examples`. To use the command-line interface, read :ref:`sec-cli`. To make your own contributions to ``lambeq``, see :ref:`sec-contributing`. - -.. note:: - Please do not try to read this documentation directly from the preview provided in the `GitHub repository `_, since some of the pages will not be rendered properly. - -User support ------------- - -If you need help with ``lambeq`` or you think you have found a bug, please send an email to lambeq-support@cambridgequantum.com. You can also open an issue at ``lambeq``'s `GitHub repository `_. Someone from the development team will respond to you as soon as possible. Furthermore, if you want to subscribe to ``lambeq``'s mailing list (lambeq-users@cambridgequantum.com), send an email to lambeq-support@cambridgequantum.com to let us know. - -Note that the best way to get in touch with the QNLP community and learn about ``lambeq`` is to join our `QNLP discord server `_, where you can ask questions, get notified about important announcements and news, and chat with other QNLP researchers. - -Licence -------- - -Licensed under the `Apache 2.0 License `_. - -How to cite ------------ -If you use ``lambeq`` for your research, please cite the accompanying paper [Kea2021]_: - -.. code-block:: bash - - @article{kartsaklis2021lambeq, - title={lambeq: {A}n {E}fficient {H}igh-{L}evel {P}ython {L}ibrary for {Q}uantum {NLP}}, - author={Dimitri Kartsaklis and Ian Fan and Richie Yeung and Anna Pearson and Robin Lorenz and Alexis Toumi and Giovanni de Felice and Konstantinos Meichanetzidis and Stephen Clark and Bob Coecke}, - year={2021}, - journal={arXiv preprint arXiv:2110.04236}, - } - -.. toctree:: - :caption: Getting started - :maxdepth: 1 - - installation - troubleshooting - pipeline - parsing - string-diagrams - use-cases - CONTRIBUTING - -.. toctree:: - :caption: NLP-101 - :maxdepth: 2 - - nlp-intro - nlp-data - nlp-class - nlp-ml - nlp-refs - -.. toctree:: - :caption: Tutorials - :maxdepth: 2 - - ../tutorials/sentence-input.ipynb - ../tutorials/rewrite.ipynb - ../tutorials/parameterise.ipynb - training - models - manual-training - advanced - ../tutorials/extend-lambeq.ipynb - notebooks - -.. toctree:: - :caption: Toolkit - :maxdepth: 4 - - root-api - package-api - uml-diagrams - cli - -.. toctree:: - :caption: Reference - :maxdepth: 1 - - glossary - bibliography - genindex - release-notes - -.. toctree:: - :caption: External links - :maxdepth: 1 - - Resources - Web demo - DisCoPy diff --git a/docs/installation.rst b/docs/installation.rst deleted file mode 100644 index 0ca86acc..00000000 --- a/docs/installation.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _sec-installation: - -Installation -============ - -.. highlight:: bash - -``lambeq`` can be installed with the command:: - - pip install lambeq - -The default installation of ``lambeq`` includes :term:`Bobcat` parser, a state-of-the-art statistical parser fully integrated with the toolkit. - -To install ``lambeq`` with optional dependencies for extra features, run:: - - pip install lambeq[extras] - -DepCCG support --------------- - -.. note:: - The DepCCG-related functionality is no longer actively supported in ``lambeq``, and may not work as expected. We strongly recommend using the default :term:`Bobcat` parser which comes as part of ``lambeq``. - -If you still want to use DepCCG, for example because you plan to apply ``lambeq`` on Japanese, you can install DepCCG separately following the instructions on the `DepCCG homepage `_. After installing DepCCG, you can download its model by using the script provided in the ``contrib`` folder of the ``lambeq`` repository:: - - python contrib/download_depccg_model.py - diff --git a/docs/lambeq.ansatz.rst b/docs/lambeq.ansatz.rst deleted file mode 100644 index d2805da1..00000000 --- a/docs/lambeq.ansatz.rst +++ /dev/null @@ -1,7 +0,0 @@ -lambeq.ansatz -============= - -.. automodule:: lambeq.ansatz - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/lambeq.backend.rst b/docs/lambeq.backend.rst deleted file mode 100644 index b5c1f9a8..00000000 --- a/docs/lambeq.backend.rst +++ /dev/null @@ -1,58 +0,0 @@ -lambeq.backend -============== - -lambeq.backend.grammar ----------------------- - -.. automodule:: lambeq.backend.grammar - :members: - :undoc-members: - :show-inheritance: - -lambeq.backend.tensor ---------------------- - -.. automodule:: lambeq.backend.tensor - :members: - :undoc-members: - :show-inheritance: - -lambeq.backend.quantum ----------------------- - -.. automodule:: lambeq.backend.quantum - :members: - :undoc-members: - :show-inheritance: - -lambeq.backend.numerical_backend --------------------------------- - -.. automodule:: lambeq.backend.numerical_backend - :members: - :undoc-members: - :show-inheritance: - -lambeq.backend.tk ------------------ - -.. automodule:: lambeq.backend.tk - :members: - :undoc-members: - :show-inheritance: - -lambeq.backend.pennylane ------------------------- - -.. automodule:: lambeq.backend.pennylane - :members: - :undoc-members: - :show-inheritance: - -lambeq.backend.drawing ----------------------- - -.. automodule:: lambeq.backend.drawing - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/lambeq.bobcat.rst b/docs/lambeq.bobcat.rst deleted file mode 100644 index 56e41887..00000000 --- a/docs/lambeq.bobcat.rst +++ /dev/null @@ -1,7 +0,0 @@ -lambeq.bobcat -============= - -.. automodule:: lambeq.bobcat - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/lambeq.rewrite.rst b/docs/lambeq.rewrite.rst deleted file mode 100644 index bc7e2c31..00000000 --- a/docs/lambeq.rewrite.rst +++ /dev/null @@ -1,8 +0,0 @@ -lambeq.rewrite -============== - -.. automodule:: lambeq.rewrite - :members: - :undoc-members: - :show-inheritance: - :exclude-members: PLACEHOLDER_WORD diff --git a/docs/lambeq.text2diagram.rst b/docs/lambeq.text2diagram.rst deleted file mode 100644 index 347fe782..00000000 --- a/docs/lambeq.text2diagram.rst +++ /dev/null @@ -1,18 +0,0 @@ -lambeq.text2diagram -=================== - -.. automodule:: lambeq.text2diagram - :members: - :undoc-members: - :show-inheritance: - :exclude-members: ccg_type_regex, id_regex, escaped_words, tree_regex, verbose - -.. autodata:: lambeq.text2diagram.cups_reader - -.. autodata:: lambeq.text2diagram.spiders_reader - -.. autodata:: lambeq.text2diagram.stairs_reader - -.. autodata:: lambeq.text2diagram.word_sequence_reader - -.. autodata:: lambeq.text2diagram.bag_of_words_reader diff --git a/docs/lambeq.tokeniser.rst b/docs/lambeq.tokeniser.rst deleted file mode 100644 index 49b83791..00000000 --- a/docs/lambeq.tokeniser.rst +++ /dev/null @@ -1,7 +0,0 @@ -lambeq.tokeniser -================ - -.. automodule:: lambeq.tokeniser - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/lambeq.training.rst b/docs/lambeq.training.rst deleted file mode 100644 index 708ef9db..00000000 --- a/docs/lambeq.training.rst +++ /dev/null @@ -1,8 +0,0 @@ -lambeq.training -=============== - -.. automodule:: lambeq.training - :members: - :undoc-members: - :show-inheritance: - :exclude-members: SMOOTHING diff --git a/docs/manual-training.rst b/docs/manual-training.rst deleted file mode 100644 index 50bd4fa8..00000000 --- a/docs/manual-training.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _sec-manual-training: - -Advanced: Manual training -========================= - -While the :py:mod:`.training` package is the recommended way of performing supervised learning with ``lambeq``, there might be use cases where more flexibility is needed, for example when someone wants to use an unsupported ML backend. In this tutorial, we show how training can be performed with ``lambeq`` at a lower level. - -In general, there are many ways to train a ``lambeq`` model, and the right one to use depends on the task at hand, the type of experiment (quantum or classical), and even other factors, such as hardware requirements. At the highest level, the process involves the following steps (for the classical case): - -#. Extract the word :term:`symbols ` from all diagrams to create a vocabulary. -#. Assign tensors to each one of the words in the vocabulary, initialised randomly. -#. Training loop: - - a. Substitute the tensors from the vocabulary for the corresponding words in the diagram. - - b. Contract the diagram to get a result. - - c. Use the result to compute loss. - - d. Use loss to compute gradient and update tensors. - -In the quantum case we do not explicitly have tensors, but :term:`circuit ` parameters defining rotation angles on :term:`qubits `, that need to be associated with concrete numbers; these are also represented by :term:`symbols `. - -The first part of this tutorial provides a short introduction to :term:`symbols ` and their use, while in the second part we will go through all stages of a complete experiment. - -.. toctree:: - - ../tutorials/training-symbols.ipynb - ../tutorials/training-usecase.ipynb - -.. rubric:: See also: - -- `"Training package" tutorial `_ diff --git a/docs/models.rst b/docs/models.rst deleted file mode 100644 index c8f83dc1..00000000 --- a/docs/models.rst +++ /dev/null @@ -1,198 +0,0 @@ -.. _sec-models: - -Choosing a model -================ - -The following sections provide more information on the various models. - -.. _sec-numpymodel: - -NumpyModel ----------- - -A :py:class:`.NumpyModel` uses the unitary and density matrix simulators in the low-level :py:mod:`lambeq.backend`, which convert quantum circuits into a tensor network. The resulting tensor network is efficiently contracted using ``opt_einsum``. - -Circuits containing only :py:class:`Bra `, :py:class:`Ket ` and unitary gates are evaluated using a unitary simulator, while circuits containing :py:class:`Encode `, :py:class:`Measure ` or :py:class:`Discard ` are evaluated using a density matrix simulator. - -.. note:: - - Note that the unitary simulator converts a circuit with ``n`` output qubits into a tensor of shape ``(2, ) * n``, while the density matrix simulator converts a circuit with ``n`` output qubits and ``m`` output bits into a tensor of shape ``(2, ) * (2 * n + m)``. - -In the common use case of using a :py:data:`~lambeq.text2diagram.stairs_reader` or a :py:class:`.TreeReader` with discarding for binary classification, the process involves measuring (:py:class:`Measure `) one of the "open" qubits, and discarding (:py:class:`Discard `) the rest of them. - -One advantage that the :py:class:`.NumpyModel` has over the :py:class:`.TketModel` is that it supports the just-in-time (jit) compilation provided by the library ``jax``. This speeds up the model's diagram evaluation by an order of magnitude. The :py:class:`.NumpyModel` with ``jit`` mode enabled can be instantiated with the following command: - -.. code-block:: python - - from lambeq import NumpyModel - - model = NumpyModel.from_diagrams(circuits, use_jit=True) - -.. note:: - Using the :py:class:`.NumpyModel` with ``jit`` mode enabled is not recommended for large models, as it requires a large amount of memory to store the pre-compiled functions for each circuit. - -To use the :py:class:`.NumpyModel` with ``jit`` mode, you need to install ``lambeq`` with the extra packages by running the following command: - -.. code-block:: bash - - pip install lambeq[extras] - -.. note:: - - To enable GPU support for ``jax``, follow the installation instructions on the `JAX GitHub repository `_. - -:py:class:`.NumpyModel` should be used with the :py:class:`.QuantumTrainer`. - -.. rubric:: See also the following use cases: - -- :ref:`uc1` - -.. _sec-pennylanemodel: - -PennyLaneModel --------------- - -:py:class:`.PennyLaneModel` uses :term:`PennyLane` and :term:`PyTorch` to allow classical-quantum machine learning experiments. With ``probabilities=False``, :py:class:`.PennyLaneModel` performs a state vector simulation, while with ``probabilties=True`` it performs a probability simulation. The state vector and probability simulations correspond to unitary and density matrix simulations. - -To run the model on real quantum hardware, ``probabilities=True`` must be used, so that the ``lambeq`` circuits are optimized using the parameter-shift rule to calculate the gradients. - -:py:class:`.PennyLaneModel` can be used to optimize simulated circuits using exact backpropagation with PyTorch, which may give improved results over using :py:class:`.NumpyModel` with :py:class:`.SPSAOptimizer`. However, this optimization process is not possible on real quantum hardware, so for more realistic results the parameter-shift rule should be preferred. - -To construct a hybrid model that passes the output of a circuit through a classical neural network, it is only necessary to subclass :py:class:`.PennyLaneModel` and modify the :py:meth:`~.PennyLaneModel.__init__` method to store the classical PyTorch parameters, and the :py:meth:`~.PennyLaneModel.forward` method to pass the result of :py:meth:`~.PennyLaneModel.get_diagram_output` to the neural network. For example: - -.. code-block:: python - - import torch - from lambeq import PennyLaneModel - - class MyCustomModel(PennyLaneModel): - def __init__(self, **kwargs): - super().__init__(**kwargs) - self.net = torch.nn.Linear(2, 2) - - def forward(self, input): - preds = self.get_diagram_output(input) - return self.net(preds) - -This neural net can be real- or complex-valued, though this affects the non-linearities that can be used. - -:py:class:`.PennyLaneModel` can be used with the :py:class:`.PytorchTrainer`, or a standard PyTorch training loop. - -By using different backend configurations, :py:class:`.PennyLaneModel` can be used for several different use-cases, listed below: - -.. _tbl-plane-usecases: -.. csv-table:: Backend configurations for different use cases. - :header: "Use case", "Configurations" - :widths: 25, 50 - - "Exact non :term:`shot-based ` simulation with state outputs", "``{'backend': 'default.qubit', 'probabilities'=False}``" - "Exact non shot-based simulation with probability outputs", "``{'backend': 'default.qubit', 'probabilities'=True}``" - "Noiseless shot-based simulation", "``{'backend': 'default.qubit', 'shots'=1000, 'probabilities'=True}``" - "Noisy shot-based simulation on local hardware", "``{'backend': 'qiskit.aer', noise_model=my_noise_model, 'shots'=1000, 'probabilities'=True}``, where ``my_noise_model`` is an AER :py:class:`NoiseModel`." - "Noisy shot-based simulation on cloud-based emulators", "| ``{'backend': 'qiskit.ibmq', 'device'='ibmq_qasm_simulator', 'shots'=1000, 'probabilities'=True}`` - | ``{'backend': 'honeywell.hqs', device=('H1-1E' or 'H1-2E'), 'shots'=1000, 'probabilities'=True}``" - "Evaluation of quantum circuits on a quantum computer", "| ``{'backend': 'qiskit.ibmq', 'device'='ibmq_hardware_device', 'shots'=1000, 'probabilities'=True}``, where ``ibmq_hardware_device`` is one that you have access to via your IBMQ account. - | ``{'backend': 'honeywell.hqs', device=('H1' or 'H1-1' or 'H1-2'), 'shots'=1000, 'probabilities'=True}``" - -All of these backends are compatible with hybrid quantum-classical models. Note that using quantum hardware or cloud-based emulators are much slower than local simulations. - -.. rubric:: See also the following use cases: - -- :ref:`uc1` -- :ref:`uc2` -- :ref:`uc3` -- :ref:`uc5` - -.. _sec-pytorchmodel: - -PytorchModel ------------- - -:py:class:`.PytorchModel` is the right choice for classical experiments. Here, string diagrams are treated as tensor networks, where boxes represent tensors and edges define the specific tensor contractions. Tensor contractions are optimised by the python package ``opt_einsum``. - -To prepare the diagrams for the computation, we use a :py:class:`.TensorAnsatz` that converts a pregroup diagram into a tensor diagram. Subclasses of :py:class:`.TensorAnsatz` include the :py:class:`.SpiderAnsatz` and the :py:class:`.MPSAnsatz`, which reduce the size of large tensors by spliting them into chains of many smaller boxes. To prepare a tensor diagram for a sentence, for example: - -.. code-block:: python - - from lambeq import AtomicType, BobcatParser, TensorAnsatz - from lambeq.backend.tensor import Dim - - parser = BobcatParser() - pregroup_diagram = parser.sentence2diagram('This is a tensor network.') - - ansatz = TensorAnsatz({AtomicType.NOUN: Dim(2), AtomicType.SENTENCE: Dim(4)}) - tensor_diagram = ansatz(pregroup_diagram) - -After preparing a list of tensor diagrams, we can initialise the model through: - -.. code-block:: python - - from lambeq import PytorchModel - - model = PytorchModel.from_diagrams(tensor_diagrams) - -The :py:class:`.PytorchModel` is capable of combining tensor networks and neural network architectures. For example, it is possible to feed the output of a tensor diagram into a neural network, by subclassing and modifying the :py:meth:`~lambeq.PytorchModel.forward` method: - -.. code-block:: python - - import torch - from lambeq import PytorchModel - - class MyCustomModel(PytorchModel): - def __init__(self): - super().__init__() - self.net = torch.nn.Linear(2, 2) - - def forward(self, input): - """define a custom forward pass here""" - preds = self.get_diagram_output(input) # performs tensor contraction - return self.net(preds) - -To simplify training, the :py:class:`.PytorchModel` can be used with the :py:class:`.PytorchTrainer`. A comprehensive tutorial can be found `here `_. - -.. note:: - - The loss function and the accuracy metric in the tutorial are defined for two-dimensional binary labels: ``[[1,0], [0,1], ...]``. If your data has a different structure, you must implement your custom loss function and evaluation metrics. - -.. rubric:: See also the following use cases: - -- :ref:`uc4` - -.. _sec-tketmodel: - -TketModel ---------- - -:py:class:`.TketModel` uses ``pytket`` to retrieve shot-based results from a quantum computer, then uses the shot counts to build the resulting tensor. - -The ``AerBackend`` can be used with :py:class:`.TketModel` to perform a noisy, architecture-aware simulation of an IBM machine. Other backends supported by ``pytket`` can also be used. To run an experiment on a real quantum computer, for example: - -.. code-block:: python - - from lambeq import TketModel - from pytket.extensions.quantinuum import QuantinuumBackend - - machine = 'H1-1E' - backend = QuantinuumBackend(device_name=machine) - backend.login() - - backend_config = { - 'backend': backend, - 'compilation': backend.default_compilation_pass(2), - 'shots': 2048 - } - - model = TketModel.from_diagrams(all_circuits, backend_config=backend_config) - -.. note:: - - Note that you need user accounts and allocated resources to run experiments on real machines. However, `IBM Quantum `_ provides some limited resources for free. - -For initial experiments we recommend using a :py:class:`.NumpyModel`, as it performs noiseless simulations and is orders of magnitude faster. - -:py:class:`.TketModel` should be used with the :py:class:`.QuantumTrainer`. - -.. rubric:: See also the following use cases: - -- :ref:`uc2` -- :ref:`uc3` diff --git a/docs/nlp-class.rst b/docs/nlp-class.rst deleted file mode 100644 index a1ca4797..00000000 --- a/docs/nlp-class.rst +++ /dev/null @@ -1,70 +0,0 @@ -Text classification -=================== - -One of the most fundamental tasks in NLP is text classification, which involves categorising textual data into predefined categories. It plays a vital role in a variety of NLP applications, including sentiment analysis, spam detection, topic modeling, and language identification, among others. By categorising texts into relevant categories, machines can analyse and derive insights from large volumes of textual data, making it possible to automate decision-making processes and perform tasks that would otherwise be time-consuming or impossible for humans to do. - -Binary vs multi-class classification ------------------------------------- - -Binary classification and multi-class classification involve assigning a label or category to an input data point. In `binary classification`, there are only two possible output categories, and the goal is to classify input data points into one of these two categories. For example, classifying emails as spam or not spam. - -On the other hand, `multi-class classification` involves assigning a data point to one of more than two possible output categories. For example, classifying images of animals into categories such as cats, dogs, and birds. - -Multi-class classification problems can be further divided into two subcategories: multi-class `single-label` classification and multi-class `multi-label` classification. In multi-class single-label classification, each input data point is assigned to one and only one output category. In contrast, in multi-class multi-label classification, each input data point can be assigned to one or more output categories simultaneously. - -In general, binary classification is a simpler and more straightforward problem to solve than multi-class classification, but multi-class classification problems are more representative of real-world scenarios where there are multiple possible categories to that a data point could belong. - -Loss functions --------------- - -For binary classification tasks, the loss function of choice is binary cross-entropy. Below, :math:`y_i` is the true label for the :math:`i` th data point, :math:`p(y_i)` represents the probability that the model assigns to the specific label, and :math:`N` is the number of data points. - -.. math:: - - H(p, q) = -\frac{1}{N}\sum_{i=1}^N [y_i \log(p(y_i)) + (1-y_i) \log(1-p(y_i))] - -For multi-class classification, the loss function is usually the categorical version of cross-entropy. Here, :math:`M` is the number of classes, :math:`p(x_i)` is the true probability for the :math:`i` th class, and :math:`q(x_i)` the probability predicted by the model. - -.. math:: - - H(p, q) = -\sum_{i=1}^M p(x_i) \log(q(x_i)) - -.. note:: - - ``lambeq`` provides a number of loss functions that can be used out-of-the-box during training, such as :py:class:`~.BinaryCrossEntropyLoss`, :py:class:`~.CrossEntropyLoss`, and :py:class:`~.MSELoss`. - -.. _sec-evaluation: - -Evaluation metrics ------------------- - -The most common metrics to evaluate the performance of classification models is accuracy, precision, recall, and F-score. Each metric has its own strengths and weaknesses, and can be useful in different contexts. - -- `Accuracy` is usually the standard way to evaluate classification, and it measures how often the model correctly predicts the class of an instance. It is calculated as the ratio of correct predictions to the total number of predictions. This metric can be useful when the classes in the dataset are balanced, meaning that there are roughly equal numbers of instances in each class. In this case, accuracy can provide a good overall measure of how well the model is performing. - -.. math:: - \text{Accuracy} = \frac{\text{True Positives} + \text{True Negatives}}{\text{True Positives} + \text{True Negatives} + \text{False Positives} + \text{False Negatives}} - -- `Precision` is the proportion of true positive predictions among all positive predictions. It is expressed as the ratio of true positives to the total number of instances that the model predicts as positive. Precision is useful when the cost of false positives is high, such as in spam filtering or legal decision making. - -.. math:: - - \text{Precision} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Positives}} - -- `Recall`, also known as `sensitivity`, is the proportion of true positive predictions among all actual positive instances in the dataset. Recall is calculated as the ratio of true positives to the total number of instances of that class. It can be helpful when the goal of the model is to identify all instances of a particular class, such as in medical diagnosis or fraud detection. - -.. math:: - - \text{Recall} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Negatives}} - -These two measures can be competing in the sense that increasing precision can decrease recall and vice versa. This trade-off occurs because precision and recall measure different aspects of the model's performance. High precision means that the model is accurate in its positive predictions, but it may miss some true positive instances, leading to lower recall. On the other hand, high recall means that the model identifies most of the positive instances, but it may have more false positives, leading to lower precision. - -To address this, researchers use `F-score`, also known as the `F1` score, which is a combined measure of precision and recall. It is calculated as the harmonic mean of precision and recall and provides a way to balance these two metrics. F-score is useful when both precision and recall are important and can be used to compare models that have different tradeoffs between these two metrics. - -.. math:: - - \text{F-score} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} - -.. note:: - - For examples of text classification with ``lambeq``, see the :ref:`Training tutorial `. diff --git a/docs/nlp-data.rst b/docs/nlp-data.rst deleted file mode 100644 index 654a7813..00000000 --- a/docs/nlp-data.rst +++ /dev/null @@ -1,101 +0,0 @@ -.. _sec-nlp-data: - -Working with text data -====================== - -Datasets and corpora --------------------- - -NLP work is heavily data-driven, and text data is organised into collections such as `datasets` and `corpora`. While sometimes these terms are (wrongly) used interchangeably, they differ in their purpose and structure. - -A `dataset` is a structured collection of data that is designed for a specific task. In NLP, a dataset may consist of a set of labeled text documents that are used for training and evaluating a machine learning model. Each document in the dataset is labeled with a class or category that the model is trying to predict. For example, a dataset of movie reviews may be labeled with "positive" or "negative" sentiment, and a model can be trained to predict the sentiment of new, unlabeled reviews. Examples of datasets can be found in the folder `docs/examples/datasets `_ of the ``lambeq`` Github repository. - -On the other hand, a `corpus` is an unstructured collection of text data that is designed for linguistic analysis. A corpus may consist of a large collection of text documents from a variety of sources, such as newspapers, books, and websites. The purpose of a corpus is to provide a representative sample of language use, which can be analysed to understand patterns in language structure and usage. An example of a corpus is the `British National Corpus (BNC) `_, a 100-million word collection of samples of written and spoken language from a wide range of sources. - -.. _sec-preprocessing: - -Text pre-processing -------------------- - -In order to prepare text data for analysis, NLP researchers use various pre-processing techniques. These are designed to convert raw text into a format that can be easily understood by machines. Some common pre-processing techniques include: - -- **Tokenization**: This involves breaking down a text document into individual words or phrases, called tokens. This is typically the first step in text analysis. Tokenization is further discussed in :ref:`following section `. -- **Stemming**: The process of reducing words to their root or stem form. This is done to reduce the number of unique words in a text document and to improve the efficiency of subsequent processing. For example, the words "programming", "programmer", and "programs" can all be reduced down to the common word stem "program". -- **Lemmatization**: Similar to stemming, but instead of reducing words to their root form, it reduces them to their base form or lemma (dictionary form). This can result in more accurate analysis, as it takes into account the context in which the word is used. For example, "run", "ran", and "runs" will be all mapped to the lemma "run", removing any inflections but respecting the part-of-speech of the word. -- **Stop-word removal**: Stop words are common words that are sometimes removed from text documents as they do not carry much meaning. Examples of stop words include determiners (e.g. "a", "the"), auxiliary verbs (e.g. "am", "was"), prepositions (e.g. "in", "at"), and conjunctions (e.g. "and", "but", "or"). -- **Part-of-Speech (POS) tagging**: This involves labeling each word in a text document with its corresponding part of speech, such as noun, verb, or adjective. This can be useful for identifying the role of each word in a sentence and for extracting meaningful information from a text document. For example, the words in the sentence "John gave Mary a flower" would be labeled as "John_N gave_VB Mary_N a_DET flower_N". - -It is important to note that with the advent of deep learning and the increase of computational power, some of these pre-processing steps have become less useful in practice. For example, deep learning models are capable of automatically learning and identifying the important features and patterns within the raw text data, making the need for certain pre-processing steps such as stemming and stop-word removal redundant. It is important, however, to note that these pre-processing steps may still be useful in certain specific scenarios, such as when dealing with limited training data or when working with domain-specific languages. - -.. _sec-tokenization: - -Tokenization ------------- - -Tokenization is the process of breaking down a text or sentence into smaller units called tokens. Tokens are the building blocks of natural language processing, and they are typically words, punctuation marks, or other meaningful elements of a sentence. The purpose of tokenization is to make it easier for computers to process human language, by providing a structured representation of text data that can be analysed, searched, and manipulated. - -Tokenization comes in many different forms. Some examples are the following: - -.. _wordtok: - -- **Word tokenization:** In this very common form of tokenization, a sentence is split into individual words or tokens. For example, the sentence "The quick brown fox jumps over the lazy dog" would be tokenized into the following list of words: - - .. code-block:: console - - ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"] - - In a more complete example, consider a sentence that includes various punctuation marks and contractions, such as "This sentence isn't worth £100 (or is it?).". The proper way to tokenize this sentence is the following, clearly separating every individual word and symbol: - - .. code-block:: console - - ["This", "sentence", "is", "n't", "worth", "£", "100", - - "(", "or", "is", "it", "?", ")", "."] - -- **Sentence tokenization:** When working with paragraphs or documents, usually the first step is to split them into individual sentences. For example, the paragraph "I love pizza. It is my favorite food. I could eat it every day!" would be tokenized into the following list of sentences: - - .. code-block:: console - - ["I love pizza.", "It is my favorite food.", "I could eat it every day!"] - -- **Phrase tokenization:** In this type of tokenization, a sentence is split into meaningful phrases or chunks. For example, the sentence "I want to book a flight to Paris" might be tokenized into the following phrases: - - .. code-block:: console - - ["I", "want to", "book", "a flight", "to", "Paris"] - -.. _wordpiece: - -- **Word-piece tokenization:** A type of tokenization that breaks down words into their constituent morphemes, which are the smallest meaningful units of a word. Morphemes can be either words themselves or smaller units that carry meaning, such as prefixes, suffixes, and roots. Consider for example the sentence, "Unbelievable, I can't believe how amazing this is.". Word-piece tokenization would produce the following list of tokens: - - .. code-block:: console - - ["Un##believ##able", ",", "I", "can'", "t", "believe", "how", "amaz##ing", "this" "is."] - - In the example, the "##" symbols indicate that the subword is part of a larger word. - -.. note:: - - ``lambeq`` supports word and sentence tokenization through the :py:class:`.Tokeniser` class hierarchy and specifically the :py:class:`.SpacyTokeniser` class, based on the SpaCy package. For more information see :ref:`this detailed tutorial `. - -Handling unknown words ----------------------- - -One of the most common challenges in NLP is the handling of unknown words, or `out-of-vocabulary` (OOV) words. The term refers to words that may appear during evaluation and testing, but they were not present in the training data of the model. One way to handle unknown words is to use :ref:`word-piece tokenization `, which splits words into smaller subword units. This allows the model to learn representations for unseen words based on their subword units. For example, assume that word "unbelievable" does not appear in the training data, but the words "un##settl##ing", "believ##er", and "do##able" are present; the unknown word would still be able to be represented as a combination of individual word pieces, i.e. "un##believ##able". - -When using :ref:`word tokenisation ` (like in ``lambeq``), a common technique to handle unknown word is to introduce a special token ``UNK``. The method is based on the following steps: - -1. Replace every rare word in the training data (e.g. every word that occurs less than a specified threshold, for example 3 times) with a special token ``UNK``. -2. During training, learn a representation for ``UNK`` as if there was any other token. -3. During evaluation, when you meet an unknown word, use the representation of ``UNK`` instead. - -.. note:: - - Note that in syntax-based models, such as :term:`DisCoCat`, handling unknown words with the above method becomes more complicated, since the type of each word needs to also be taken into account. In other words, you need to have a different ``UNK`` token for each grammatical type. - ``lambeq`` simplifies this process by providing the :py:class:`~.UnknownWordsRewriteRule` which can be used to replace unknown words, and create a vocabulary from a set of diagrams. Details can be found in :ref:`this example notebook `. - -.. rubric:: See also: - -- :ref:`Pre-processing and tokenisation tutorial ` -- :ref:`Tokenisation example notebook ` -- :ref:`Handling unknown words example notebook ` diff --git a/docs/nlp-intro.rst b/docs/nlp-intro.rst deleted file mode 100644 index 2a252320..00000000 --- a/docs/nlp-intro.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. _sec-nlp-intro: - -Introduction -============ - -In this section we will briefly explore the field of Natural Language Processing and see how it is used for solving real-world problems related to human language. [#f1]_ Let's get started with some definitions. - -NLP, QNLP and Computational Lingustics --------------------------------------- - -:term:`Natural Language Processing ` (NLP) is a field of AI that focuses on the interaction between computers and human language. NLP deals with the problems of generating and understanding natural language text and speech, in a way that is both effective and accurate. It involves a range of methods and techniques, including statistical and rule-based approaches, machine learning, and deep learning. These methods are used to develop NLP models and systems that can perform various language-related tasks, such as text classification, sentiment analysis, speech recognition, machine translation, and many others. - -`Computational linguistics`, on the other hand, is a broader field that encompasses NLP, and in principle deals with the study of human language and its structure from a computational perspective. It uses algorithms, models, and mathematical theories to analyze and understand human language, and to develop natural language processing systems. While NLP focuses more on the practical application of computational linguistics techniques to solve real-world problems related to human language, computational linguistics is more concerned with the theoretical study of language and its formal properties. - -.. note:: - - ``lambeq`` is a language modelling tool capable of representing language in many different levels of abstraction, such as syntax trees, pregroup diagrams, string/monoidal diagrams, tensor networks and quantum circuits, and for this reason, it is conceptually closer to (quantum) computational linguistics than merely to practical NLP. - -NLP is one of the most important fields of AI, since the ability to understand and use language is one of the defining features of human intelligence; thus, being able to teach machines this skill is a significant step towards developing AI. In fact, the famous `Turing test `_ for AI involves determining whether a machine can exhibit intelligent behaviour that is indistinguishable from that of a human, solely based on the effective use of language. - -Having defined the purpose and scope of NLP as above, `Quantum NLP` (QNLP) is simply NLP on quantum computers. More specifically, QNLP is aimed at the design and implementation of NLP models that exploit certain quantum phenomena such as superposition, entanglement, and interference to perform language-related tasks on quantum hardware. By applying quantum principles to language processing, QNLP seeks to provide a more holistic and accurate model of communication that can capture the nuances and complexities of human language better than traditional "classical" models. - -.. _sec-nlp-tasks: - -Tasks and applications ----------------------- - -There are numerous important applications of NLP across various industries and domains. Some of the most prominent ones include: - -- **Chatbots and virtual assistants**: NLP is widely used in chatbots and virtual assistants, enabling them to understand natural language queries and respond accordingly. -- **Sentiment analysis**: The task of analyzing social media data, customer feedback, and product reviews to determine sentiment and gain insights into customer preferences. -- **Machine translation**: NLP can be used to enable accurate and efficient translation of text between different languages. -- **Speech recognition**: Speech recognition systems can transcribe spoken language into text, enabling voice-controlled applications. -- **Named Entity Recognition**: Techniques used to identify and extract entities such as people, organizations, and locations from text. -- **Text summarization**: The task of summarizing large volumes of text, making it easier to process and understand. -- **Information retrieval**: NLP is used in search engines and recommendation systems to enable relevant and accurate results based on natural language queries. - -Typical NLP workflow --------------------- - -In this section, we examine the sequence of steps involved in processing and analyzing natural language data. While the exact workflow may vary depending on the specific task and dataset, there are several common steps that are typically involved. - -#. **Data collection:** The first step in any NLP project is to collect the relevant data. This may involve web scraping, accessing APIs, or using pre-existing datasets. It is important to ensure that the data is of high quality and properly formatted. -#. **Text preprocessing:** Once the data has been collected, the next step is to preprocess the text. This involves several steps such as tokenization, stopword removal, stemming or lemmatization, and part-of-speech tagging. The goal of preprocessing is to convert raw text into a structured format that can be used for analysis. More information can be found :ref:`here `. -#. **Text representation:** After preprocessing, the text data needs to be represented in a format that can be used for analysis. This typically involves using word embeddings, pre-trained language models such as BERT or GPT-3, or :term:`bag-of-words` models. -#. **Model training:** With the text data represented in a suitable format, the next step is to train a model. Depending on the task, this may involve using machine learning algorithms such as logistic regression or neural networks. The model is trained on a labeled dataset and validated on a held-out dataset to ensure that it generalizes well (see :ref:`sec-ml`). -#. **Model evaluation:** Once the model is trained, it needs to be evaluated to determine how well it performs on unseen data. This involves using :ref:`evaluation metrics ` such as accuracy, precision, recall, and F1 score. It is important to ensure that the model performs well on both the training and validation data, as well as on a test dataset (see :ref:`sec-ml`). - -In the following sections, we will focus on some important text pre-processing concepts and techniques. - -.. [#f1] This tutorial has been created with the help of `ChatGPT `_. \ No newline at end of file diff --git a/docs/nlp-ml.rst b/docs/nlp-ml.rst deleted file mode 100644 index 031f6fcc..00000000 --- a/docs/nlp-ml.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. _sec-ml: - -Machine learning best practices -=============================== - -In NLP and machine learning, following careful evaluation methods is crucial to ensure that the model is performing well on unseen data and to avoid overfitting. One important step in evaluation is to split the dataset into training, validation, and test sets. The training set is used to train the model, the validation set is used to tune the model's hyperparameters, and the test set is used to evaluate the final performance of the model. More specifically: - -- **Training set:** This is the largest portion of your data, and it is used to train your model. Your model will learn from the patterns in this data. -- **Development set:** This set is also known as a `validation set`. It is used to tune your model's hyperparameters and ensure that your model is not overfitting to the training data. You will use this set to evaluate your model's performance during training and make adjustments as needed. -- **Test set:** This set is used to evaluate your model's performance after training is complete. You should never use this data during training or hyperparameter tuning, as doing so could cause overfitting. - -The typical split for these sets is 60% training, 20% development, and 20% testing, but the exact split can depend on the size of your dataset and the complexity of your model. - -Additionally, it is important to choose the right :ref:`evaluation metric ` for your model. Different models may require different metrics to evaluate their performance, so it is important to understand the strengths and weaknesses of each metric and choose the one that is most appropriate for your use case. - -Cross-validation ----------------- -`Cross-validation` is a technique used to evaluate the performance of a machine learning model by partitioning the data into multiple subsets, or `folds`, and training the model on different subsets while using the remaining fold(s) for validation. - -The basic idea behind cross-validation is to use multiple samples of the data for training and validation to get a more accurate estimate of the model's performance on new, unseen data. By using multiple folds, the model can be evaluated on a variety of data samples, which can help to identify any potential issues with overfitting or bias. - -There are several different types of cross-validation techniques, including: - -- **k-fold cross-validation:** In this approach, the data is partitioned into `k` equally-sized folds. The model is trained on :math:`k-1` folds and the remaining fold is used for validation. This process is repeated `k` times, with each fold used for validation exactly once. -- **Stratified k-fold cross-validation:** This technique is similar to `k`-fold cross-validation, but it ensures that the distribution of classes in each fold is similar to the overall distribution in the full dataset. This can be useful for datasets with imbalanced classes. -- **Leave-one-out cross-validation:** In this technique, the data is partitioned into `n` folds, where `n` is the number of samples in the dataset. The model is trained on all but one sample, which is used for validation. This process is repeated `n` times, with each sample used for validation exactly once. - -Cross-validation can help to ensure that a model is not overfitting to the training data and can provide a more accurate estimate of the model's performance on new, unseen data. It can also be used to compare the performance of different models or hyperparameters. However, it can be computationally expensive and may not be necessary for smaller datasets or less complex models. - -.. note:: - - Training in ``lambeq`` is handled by the :py:mod:`~.training` package, which provides a detailed hierarchy of classes aimed at supervised learning, as well as the means for collaboration with popular ML and QML libraries such as PyTorch and PennyLane. - -.. rubric:: See also: - -- :ref:`Training tutorial ` diff --git a/docs/nlp-refs.rst b/docs/nlp-refs.rst deleted file mode 100644 index 930ac3ef..00000000 --- a/docs/nlp-refs.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _sec-nlp-refs: - -References for further study -============================ - -NLP is a vast field of study with a broad scope, and it can be quite challenging for beginners to know where to start or which concepts are the most important to understand. In this section, we provide a few references for further study. - -Reading -------- -For beginners interested in learning more about NLP, apart from this tutorial there are many online resources available. Some good starting points include: - -- The `NLTK book `_ provides an introduction to NLP with Python. -- Another great resource for beginners interested in NLP is the book "Speech and Language Processing" by Jurafsky and Martin. This textbook provides a comprehensive introduction to NLP, covering topics such as language modelling, part-of-speech tagging, syntax and parsing, and machine translation. The book is available online for free `here `_. In addition to the book itself, the website provides supplementary materials, such as lecture slides and programming exercises, that can help readers deepen their understanding of the material. -- The article `A beginner's guide to natural language processing `_ on the `IBM Developer `_ website provides a high-level overview of NLP and its importance in machine learning, covering topics such as text preprocessing, feature extraction, and model selection. -- The article of Stanford Encyclopedia of Philosophy on the broader area of `computational linguistics `_. - -Online courses --------------- -- The `Coursera NLP Specialization course `_ covers a wide range of topics in NLP with video lectures and hands-on assignments. - -Organisations -------------- -- The `Stanford NLP group `_ provides a wealth of resources, including research papers, datasets, and open-source software. - -Software tools --------------- -- `Natural Language Toolkit (NLTK) `_ -- `PyTorch `_ -- `TensorFlow `_ diff --git a/docs/notebooks.rst b/docs/notebooks.rst deleted file mode 100644 index 3cde0849..00000000 --- a/docs/notebooks.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. _sec-examples: - -Examples -======== - -.. toctree:: - - ../examples/tokenisation.ipynb - ../examples/unk-words.ipynb - ../examples/parser.ipynb - ../examples/reader.ipynb - ../examples/tree-reader.ipynb - ../examples/rewrite.ipynb - ../examples/circuit.ipynb - ../examples/tensor.ipynb - ../examples/rotosolve-optimizer.ipynb - ../examples/classical-pipeline.ipynb - ../examples/quantum-pipeline.ipynb - ../examples/quantum-pipeline-jax.ipynb - ../examples/pennylane.ipynb - diff --git a/docs/package-api.rst b/docs/package-api.rst deleted file mode 100644 index 2f56cf2e..00000000 --- a/docs/package-api.rst +++ /dev/null @@ -1,232 +0,0 @@ -.. _sec-package-api: - -Subpackages -=========== - -.. _api_ansatz: - -lambeq.ansatz -------------- -Concrete implementations of classical and quantum :term:`ansätze `. - -.. rubric:: API: :doc:`lambeq.ansatz` - -.. rubric:: UML diagrams: :ref:`uml_ansatz` - -.. rubric:: Classes: - -.. inheritance-diagram:: - lambeq.ansatz.IQPAnsatz - lambeq.ansatz.MPSAnsatz - lambeq.ansatz.Sim14Ansatz - lambeq.ansatz.Sim15Ansatz - lambeq.ansatz.Sim4Ansatz - lambeq.ansatz.SpiderAnsatz - lambeq.ansatz.StronglyEntanglingAnsatz - lambeq.ansatz.Symbol - :top-classes: lambeq.ansatz.base.Symbol - :parts: 1 - -| - -.. _api_backend: - -lambeq.backend --------------- -``lambeq``'s internal representation of categories. This work is based on :term:`DisCoPy` (https://discopy.org/) which is released under the BSD 3-Clause "New" or "Revised" License. - -.. rubric:: API: :doc:`lambeq.backend` - -.. rubric:: UML diagrams: :ref:`uml_backend` - -.. rubric:: Classes: - -.. inheritance-diagram:: - lambeq.backend.grammar.Entity - lambeq.backend.grammar.Category - lambeq.backend.grammar.Ty - lambeq.backend.quantum.Ty - lambeq.backend.grammar.Diagrammable - lambeq.backend.grammar.Box - lambeq.backend.quantum.Box - lambeq.backend.grammar.Layer - lambeq.backend.quantum.Layer - lambeq.backend.grammar.Diagram - lambeq.backend.quantum.Diagram - lambeq.backend.grammar.Cup - lambeq.backend.grammar.Cap - lambeq.backend.grammar.Daggered - lambeq.backend.quantum.Daggered - lambeq.backend.grammar.Spider - lambeq.backend.grammar.Swap - lambeq.backend.quantum.Swap - lambeq.backend.grammar.Word - lambeq.backend.grammar.Functor - :parts: 2 - -| - -.. inheritance-diagram:: - lambeq.backend.quantum.Box - lambeq.backend.quantum.SelfConjugate - lambeq.backend.quantum.AntiConjugate - lambeq.backend.quantum.Swap - lambeq.backend.quantum.Ket - lambeq.backend.quantum.Bra - lambeq.backend.quantum.Parametrized - lambeq.backend.quantum.Rotation - lambeq.backend.quantum.Rx - lambeq.backend.quantum.Ry - lambeq.backend.quantum.Rz - lambeq.backend.quantum.Controlled - lambeq.backend.quantum.MixedState - lambeq.backend.quantum.Discard - lambeq.backend.quantum.Measure - lambeq.backend.quantum.Encode - lambeq.backend.quantum.Scalar - lambeq.backend.quantum.Sqrt - lambeq.backend.quantum.Daggered - lambeq.backend.quantum.Bit - :top-classes: lambeq.backend.grammar.Box - :parts: 2 - -| - -.. _api_bobcat: - -lambeq.bobcat -------------- - -The code for :term:`Bobcat` parser, a state-of-the-art :term:`CCG ` parser used for getting syntactic derivations of sentences. - -.. rubric:: API: :doc:`lambeq.bobcat` - -.. rubric:: UML diagrams: :ref:`uml_bobcat` - -.. rubric:: Classes: - -.. inheritance-diagram:: - lambeq.bobcat.grammar.Grammar - lambeq.bobcat.lexicon.Category - lambeq.bobcat.parser.ChartParser - lambeq.bobcat.parser.Sentence - lambeq.bobcat.parser.Supertag - lambeq.bobcat.rules.Rule - lambeq.bobcat.tagger.Tagger - lambeq.bobcat.tagger.BertForChartClassification - lambeq.bobcat.tree.ParseTree - :parts: 1 - -| - -.. _api_rewrite: - -lambeq.rewrite --------------- -Contains implementations of :term:`rewrite rules ` for the transformation of :term:`string diagrams `. - -.. rubric:: API: :doc:`lambeq.rewrite` - -.. rubric:: UML diagrams: :ref:`uml_rewrite` - -.. rubric:: Classes - -.. inheritance-diagram:: - lambeq.rewrite.CoordinationRewriteRule - lambeq.rewrite.CurryRewriteRule - lambeq.rewrite.DiagramRewriter - lambeq.rewrite.RemoveCupsRewriter - lambeq.rewrite.RemoveSwapsRewriter - lambeq.rewrite.RewriteRule - lambeq.rewrite.Rewriter - lambeq.rewrite.SimpleRewriteRule - lambeq.rewrite.UnifyCodomainRewriter - lambeq.rewrite.UnknownWordsRewriteRule - :parts: 1 - -| - -.. _api_text2diagram: - -lambeq.text2diagram -------------------- -Package containing the interfaces for the :term:`CCG ` parsers (including a :py:class:`~lambeq.text2diagram.CCGBankParser`), as well as abstractions and concrete classes for :term:`readers `, implementing a variety of :term:`compositional models ` for sentences. - -.. rubric:: API: :doc:`lambeq.text2diagram` - -.. rubric:: UML diagrams: :ref:`uml_text2diagram` - -.. rubric:: Objects - -- :py:data:`~lambeq.text2diagram.bag_of_words_reader` -- :py:data:`~lambeq.text2diagram.cups_reader` -- :py:data:`~lambeq.text2diagram.spiders_reader` -- :py:data:`~lambeq.text2diagram.stairs_reader` -- :py:data:`~lambeq.text2diagram.word_sequence_reader` - -.. rubric:: Classes: - -.. inheritance-diagram:: - lambeq.text2diagram.BobcatParser - lambeq.text2diagram.CCGType - lambeq.text2diagram.CCGBankParser - lambeq.text2diagram.CCGRule - lambeq.text2diagram.CCGTree - lambeq.text2diagram.DepCCGParser - lambeq.text2diagram.LinearReader - lambeq.text2diagram.Reader - lambeq.text2diagram.TreeReader - lambeq.text2diagram.TreeReaderMode - lambeq.text2diagram.WebParser - :parts: 1 - -| - -.. _api_tokeniser: - -lambeq.tokeniser ----------------- -Tokenisation classes and features for all :term:`parsers ` and :term:`readers `. - -.. rubric:: API: :doc:`lambeq.tokeniser` - -.. rubric:: UML diagrams: :ref:`uml_tokeniser` - -.. rubric:: Classes - -.. inheritance-diagram:: - lambeq.tokeniser.SpacyTokeniser - :parts: 1 - -| - -.. _api_training: - -lambeq.training ---------------- -Provides a selection of :term:`trainers `, :term:`models `, and optimizers that greatly simplify supervised training for most of ``lambeq``'s use cases, classical and quantum. - -.. rubric:: API: :doc:`lambeq.training` - -.. rubric:: UML diagrams: :ref:`uml_training` - -.. rubric:: Classes - -.. inheritance-diagram:: - lambeq.training.BinaryCrossEntropyLoss - lambeq.training.Checkpoint - lambeq.training.CrossEntropyLoss - lambeq.training.Dataset - lambeq.training.MSELoss - lambeq.training.LossFunction - lambeq.training.NelderMeadOptimizer - lambeq.training.NumpyModel - lambeq.training.PytorchModel - lambeq.training.PytorchTrainer - lambeq.training.RotosolveOptimizer - lambeq.training.SPSAOptimizer - lambeq.training.TketModel - lambeq.training.PennyLaneModel - lambeq.training.QuantumModel - lambeq.training.QuantumTrainer - :parts: 1 diff --git a/docs/parsing.rst b/docs/parsing.rst deleted file mode 100644 index d4a7a7f8..00000000 --- a/docs/parsing.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _sec-parsing: - -Syntactic parsing -================= - -``lambeq``'s :ref:`string diagrams ` are based on a :ref:`pregroup grammar ` to keep track of the types and the interactions between the words in a sentence. When a detailed syntactic derivation is required (as in the case of :term:`DisCoCat`), a :term:`syntax tree` needs to be provided by a statistical :term:`parser`. However, since the :term:`pregroup grammar` formalism is not particularly well-known in the :term:`NLP ` community, there is currently no wide-coverage pregroup :term:`parser` that can automatically provide the syntactic derivations. To address this problem, ``lambeq`` provides a passage from a derivation in the closest alternative grammar formalism, namely :term:`Combinatory Categorial Grammar (CCG)`, to a :term:`string diagram` which faithfully encodes the syntactic structure of the sentence in a pregroup-like form [YK2021]_. Due to the availability of many robust :term:`CCG ` :term:`parsing tools `, this allows the conversion of large corpora with sentences of arbitrary length and syntactic structure into :term:`pregroup ` and :term:`DisCoCat` form. - -Since Release :ref:`rel-0.2.0`, the standard ``lambeq`` installation includes a state-of-the-art CCG parser based on [SC2021]_, fully integrated into the toolkit. This parser is provided under the name :term:`Bobcat`. Additionally, ``lambeq`` implements a detailed interface in the :py:mod:`.text2diagram` package that allows connection to one of the many external CCG parsing tools that are currently available. For example, ``lambeq`` is also shipped with support for :term:`depccg` [#f1]_ [YNM2017]_, a fast parser that comes with a convenient Python interface. - -Additional external parsers can be made available to ``lambeq`` by extending the :py:class:`.CCGParser` class in order to create a wrapper subclass that encapsulates the necessary calls and translates the respective parser's output into :py:class:`.CCGTree` format. - -Finally, for users who prefer to keep the installation of the toolkit light, ``lambeq`` also includes a web-based parser class that sends parsing queries to an online API, so that local installation of a full CCG parser is not strictly necessary anymore -- although strongly recommended for most practical uses of the toolkit. - -Reading CCGBank ---------------- - -The :term:`CCG ` compatibility makes immediately available to ``lambeq`` a wide range of language-related resources. For example, ``lambeq`` features a :py:class:`.CCGBankParser` class, which allows conversion of the entire :term:`CCGBank` corpus [#f2]_ [HS2007]_ into :term:`string diagrams `. :term:`CCGBank` consists of 49,000 human-annotated :term:`CCG ` syntax trees, converted from the original Penn Treebank into :term:`CCG ` form. Having a gold standard corpus of :term:`string diagrams ` allows various supervised learning scenarios involving automatic diagram generation. :numref:`fig-ccgbank` below shows the first tree of :term:`CCGBank`\ 's Section 00 converted into a :term:`string diagram`. - -.. _fig-ccgbank: -.. figure:: _static/images/ccgbank.png - - The first derivation of CCGBank as a string diagram. - -.. rubric:: Footnotes - -.. [#f1] https://github.com/masashi-y/depccg -.. [#f2] https://catalog.ldc.upenn.edu/LDC2005T13 diff --git a/docs/pipeline.rst b/docs/pipeline.rst deleted file mode 100644 index afb1a099..00000000 --- a/docs/pipeline.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. _sec-pipeline: - -Pipeline -======== - -In ``lambeq``, the conversion of a sentence into a :term:`quantum circuit` goes through the steps shown in :numref:`fig-pipeline`. - -.. _fig-pipeline: -.. figure:: ./_static/images/pipeline.png - - The general pipeline. - -In more detail: - -1. A :term:`syntax tree` for the sentence is obtained by calling a statistical :ref:`CCG parser `. ``lambeq`` is equipped with a detailed API that greatly simplifies this process, and ships with support for several state-of-the-art parsers. - -2. Internally, the :term:`parse tree ` is converted into a :ref:`string diagram `. This is an abstract representation of the sentence reflecting the relationships between the words as defined by the :term:`compositional model` of choice, independently of any implementation decisions that take place at a lower level. - -3. The :term:`string diagram` can be simplified or otherwise transformed by the application of `rewriting rules `_; these can be used for example to remove specific interactions between words that might be considered redundant for the task at hand, or in order to make the computation more amenable to implementation on a quantum processing unit. - -4. The resulting :term:`string diagram` can be converted into a concrete :term:`quantum circuit` (or a :term:`tensor network` in the case of a "classical" experiment), based on a specific `parameterisation `_ scheme and concrete choices of :term:`ansätze `. ``lambeq`` features an extensible class hierarchy containing a selection of pre-defined :term:`ansätze `, appropriate for both classical and quantum experiments. - -5. Now the output of the pipeline (:term:`quantum circuit` or :term:`tensor network`) is ready to be used for :ref:`training `. Since Release :ref:`rel-0.2.0`, ``lambeq`` provides a detailed hierarchy of model and trainer classes that cover all the important use-cases of supervised learning. - -In the case of a fully quantum pipeline, the trainer will first process the :term:`quantum circuit` by calling a quantum compiler, and then it will upload the result onto a quantum computer, while in the classical case the :term:`tensor network` will be passed to an ML or optimisation library, such as PyTorch or JAX. diff --git a/docs/puml/README.md b/docs/puml/README.md deleted file mode 100644 index 7b094b6c..00000000 --- a/docs/puml/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Creating PNG files - -The PNG files for the UML diagrams are automatically generated by the docs GitHub action using the source files in this folder. In case you need to do this manually, and assuming you have installed [PlantUML](https://plantuml.com/) in a `/plantuml` folder, you can generate the PNG files with the following command: - -```bash -$ java -DPLANTUML_LIMIT_SIZE=8192 -jar /plantuml/plantuml.jar -o img/ . -``` - -Alternatively, if you have installed the PlantUML binary e.g. via [HomeBrew](https://brew.sh/), etc.: - -```bash -$ plantuml -v -tpng docs/puml/*.puml -o img -DPLANTUML_LIMIT_SIZE=8192 -``` \ No newline at end of file diff --git a/docs/puml/ansatz.puml b/docs/puml/ansatz.puml deleted file mode 100644 index c224c5e9..00000000 --- a/docs/puml/ansatz.puml +++ /dev/null @@ -1,72 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam shadowing true -skinparam ArrowColor Black -skinparam class { - backgroundColor Business - borderColor Red -} - -abstract class BaseAnsatz { - ob_map: dict -} -class TensorAnsatz { - ob_map: Mapping[Ty, Dim] - functor -} -class CircuitAnsatz { - functor: Functor - ob_map: Mapping[Ty, int] - n_layers: int - n_single_qubit_params: int - discard: bool -} -class MPSAnsatz { - BOND_TYPE - bond_dim: int - max_order: int - split_functor - tensor_functor -} -class SpiderAnsatz { - max_order: int - split_functor - tensor_functor -} - -class IQPAnsatz {} -class StronglyEntanglingAnsatz {} -class Sim14Ansatz {} -class Sim15Ansatz {} -class Sim4Ansatz {} - -class Symbol { - size: int - sort_key(order) -} -class sympy.core.symbol.Symbol #back:wheat;line:tomato {} - -BaseAnsatz <|-- TensorAnsatz -BaseAnsatz <|-- CircuitAnsatz -TensorAnsatz <|-- MPSAnsatz -TensorAnsatz <|-- SpiderAnsatz -CircuitAnsatz <|-- IQPAnsatz -CircuitAnsatz <|-- StronglyEntanglingAnsatz -CircuitAnsatz <|-- Sim14Ansatz -CircuitAnsatz <|-- Sim15Ansatz -CircuitAnsatz <|-- Sim4Ansatz - -MPSAnsatz::split_functor *-left- backend.grammar.Functor -MPSAnsatz::tensor_functor *-- backend.grammar.Functor -SpiderAnsatz::split_functor *-- backend.grammar.Functor -SpiderAnsatz::tensor_functor *-- backend.grammar.Functor -MPSAnsatz::BOND_TYPE *--left backend.grammar.Ty -CircuitAnsatz::functor *-- backend.grammar.Functor -TensorAnsatz::functor *-- backend.grammar.Functor -sympy.core.symbol.Symbol <|-- Symbol - -BaseAnsatz --> Symbol : uses - -@enduml diff --git a/docs/puml/backend-inheritance.puml b/docs/puml/backend-inheritance.puml deleted file mode 100644 index db761b74..00000000 --- a/docs/puml/backend-inheritance.puml +++ /dev/null @@ -1,63 +0,0 @@ -@startuml - -set namespaceseparator none -left to right direction -skinparam dpi 96 -skinparam shadowing true -skinparam ArrowColor Black -skinparam PackageStyle folder -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - - -' typing -abstract class typing.Generic - -' lambeq.backend.grammar -class grammar.Categoryee -class grammar.Functor - -' inheritance relations -typing.Generic <|-- typing.Protocol -typing.Protocol <|-- grammar.Diagrammable - -grammar.Entity <|-- grammar.Box -grammar.Entity <|-- grammar.Diagram -grammar.Entity <|-- grammar.Layer -grammar.Entity <|-- grammar.Ty - -grammar.Box <|-- grammar.Cap -grammar.Box <|-- grammar.Cup -grammar.Box <|-- grammar.Daggered -grammar.Box <|-- grammar.Spider -grammar.Box <|-- grammar.Swap -grammar.Box <|-- grammar.Word - -grammar.Box <|-- tensor.Box -grammar.Diagram <|-- tensor.Diagram -grammar.Layer <|-- tensor.Layer -grammar.Ty <|-- tensor.Dim - -grammar.Daggered <|-- tensor.Daggered -tensor.Box <|-- tensor.Daggered -grammar.Swap <|-- tensor.Swap -tensor.Box <|-- tensor.Swap - -tensor.Box <|-- quantum.Box -tensor.Diagram <|-- quantum.Diagram -tensor.Dim <|-- quantum.Ty -tensor.Layer <|-- quantum.Layer -quantum.Box <|-- quantum.SelfConjugate -tensor.Swap <|-- quantum.Swap -quantum.SelfConjugate <|-- quantum.Swap -quantum.Box <|-- quantum.Swap -tensor.Daggered <|-- quantum.Daggered -quantum.Box <|-- quantum.Daggered - -@enduml diff --git a/docs/puml/backend-quantum-inheritance.puml b/docs/puml/backend-quantum-inheritance.puml deleted file mode 100644 index df0e7e06..00000000 --- a/docs/puml/backend-quantum-inheritance.puml +++ /dev/null @@ -1,58 +0,0 @@ -@startuml - -set namespaceseparator none -left to right direction -skinparam dpi 96 -skinparam shadowing true -skinparam ArrowColor Black -skinparam PackageStyle folder -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - - -' inheritance relations -grammar.Box <|-- tensor.Box -grammar.Box <|-- grammar.Daggered -grammar.Box <|-- grammar.Swap - -grammar.Daggered <|-- tensor.Daggered -tensor.Box <|-- tensor.Daggered -grammar.Swap <|-- tensor.Swap -tensor.Box <|-- tensor.Swap - -tensor.Box <|-- quantum.Box -tensor.Swap <|-- quantum.Swap -quantum.Box <|-- quantum.Swap -tensor.Daggered <|-- quantum.Daggered -quantum.Box <|--- quantum.Bra -quantum.Box <|--- quantum.SelfConjugate -quantum.Box <|--- quantum.Ket -quantum.Box <|-- quantum.Daggered -quantum.Box <|-- quantum.Scalar -quantum.Box <|-- quantum.Bit -quantum.Box <|-- quantum.Parametrized -quantum.Box <|-- quantum.AntiConjugate -quantum.SelfConjugate <|-- quantum.Swap -quantum.SelfConjugate <|-- quantum.Ket -quantum.SelfConjugate <|-- quantum.Bra -quantum.SelfConjugate <|-- quantum.Ry -quantum.SelfConjugate <|-- quantum.Discard -quantum.SelfConjugate <|-- quantum.Encode -quantum.SelfConjugate <|-- quantum.Measure -quantum.SelfConjugate <|-- quantum.MixedState -quantum.Scalar <|-- quantum.Sqrt -quantum.Parametrized <|-- quantum.Rotation -quantum.Parametrized <|-- quantum.Controlled -quantum.Rotation <|-- quantum.Rz -quantum.Rotation <|-- quantum.Rx -quantum.Rotation <|-- quantum.Ry -quantum.AntiConjugate <|-- quantum.Rz -quantum.AntiConjugate <|-- quantum.Rx - -@enduml diff --git a/docs/puml/backend.puml b/docs/puml/backend.puml deleted file mode 100644 index 185576b8..00000000 --- a/docs/puml/backend.puml +++ /dev/null @@ -1,168 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam shadowing true -skinparam ArrowColor Black -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - - -' lambeq.backend.grammar -class Entity { - category: ClassVar[Category] -} - -class Category { - Ty: type[Ty] - Box: type[Box] - Layer: type[Layer] - Diagram: type[Diagram] -} - -object grammar - -class Ty { - name: str - objects: List[Ty] - z: int - category: ClassVar[Category] - to_diagram() - count() - tensor() - rotate() - unwind() - repeat() - apply_functor() -} - -abstract class Diagrammable { - cod: Ty - dom: Ty - {abstract} to_diagram() - {abstract} apply_functor() - {abstract} rotate() - {abstract} __matmul__() -} - -class Box { - name: str - dom: Ty - cod: Ty - z: int - to_diagram() - rotate() - unwind() - dagger() - apply_functor() -} - -class Layer { - left: Ty - box: Box - right: Ty - unpack() - extend() - rotate() - dagger() -} - -exception InterchangerError - -class Diagram { - cod: Ty - dom: Ty - layers: List[Layer] - special_boxes - to_diagram - {static} id() - {static} create_pregroup_diagram() - {static} lift() - tensor() - then() - then_at() - rotate() - dagger() - transpose() - {static} permutation() - interchange() - normalize() - normal_form() - snake_removal() - draw() - apply_functor() -} - -class Cap { - left: Ty - right: Ty - is_reversed: bool - {static} to_right() - {static} to_left() -} -class Cup { - left: Ty - right: Ty - is_reversed: bool - {static} to_right() - {static} to_left() -} -class Daggered { - box: Box -} -class Spider { - type: Ty - n_legs_in - n_legs_out -} -class Swap { - left: Ty - right: Ty -} -class Word {} -object Id -class Functor { - target_category: Category - ob_with_cache() - ar_with_cache() - ob() - ar() -} - -Entity <|-- Ty -Entity <|--- Box -Entity <|-- Layer -Entity <|-- Diagram -Box <|-- Cap -Box <|-- Cup -Box <|-- Daggered -Box <|--- Spider -Box <|--- Swap -Box <|--- Word - -Ty::category *-- Category -Layer::box *-- Box -Id -l- Diagram::id : is > -Diagram::interchange -- InterchangerError : raises > -Diagram::layers *-- Layer -Diagrammable::to_diagram -- Diagram : generates > -Functor::target_category *-l- Category - -Category <.d. grammar : <> - -' lambeq.backend.drawing -object draw -object draw_equation -object to_gif - -draw --u- Diagram : takes > -draw_equation --u- Diagram : takesListOf > -to_gif --u- Diagram : takes > - -@enduml diff --git a/docs/puml/bobcat.puml b/docs/puml/bobcat.puml deleted file mode 100644 index db99cd3d..00000000 --- a/docs/puml/bobcat.puml +++ /dev/null @@ -1,31 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam ArrowColor Black -skinparam shadowing true -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - -abstract class text2diagram.Reader {} -abstract class text2diagram.CCGParser {} -class text2diagram.Bobcat {} -class bobcat.Tagger {} -class bobcat.ChartParser {} - -package transformers {} - -text2diagram.Reader <|-- text2diagram.CCGParser -text2diagram.CCGParser <|-- text2diagram.Bobcat -text2diagram.Bobcat *-- bobcat.Tagger -text2diagram.Bobcat *-- bobcat.ChartParser - -bobcat.Tagger -- transformers - -@enduml diff --git a/docs/puml/legend.puml b/docs/puml/legend.puml deleted file mode 100644 index 78e3cf3b..00000000 --- a/docs/puml/legend.puml +++ /dev/null @@ -1,31 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam ArrowColor Black -skinparam shadowing true -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - -abstract class abstract_lambeq_class -class lambeq_class -class class_in_external_package #back:wheat;line:tomato - -package external_package #DDDDDD {} -object object_of_a_class - -abstract_lambeq_class <|-- lambeq_class - -lambeq_class *-- class_in_external_package -lambeq_class <.r. object_of_a_class : << isInstanceOf >> -lambeq_class -- external_package : uses > - - - -@enduml diff --git a/docs/puml/pregroups.puml b/docs/puml/pregroups.puml deleted file mode 100644 index bedb43da..00000000 --- a/docs/puml/pregroups.puml +++ /dev/null @@ -1,19 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam shadowing true -skinparam ArrowColor Black -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - -abstract class TextDiagramPrinter { -} - -@enduml diff --git a/docs/puml/rewrite.puml b/docs/puml/rewrite.puml deleted file mode 100644 index 86169180..00000000 --- a/docs/puml/rewrite.puml +++ /dev/null @@ -1,69 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam ArrowColor Black -skinparam shadowing true -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - -abstract class RewriteRule {} -class SimpleRewriteRule { - template -} -class CoordinationRewriteRule {} -class CurryRewriteRule {} -class Rewriter { - apply_rewrites() -} -class UnknownWordsRewriteRule { - {static} from_diagrams() -} - -abstract class DiagramRewriter { - matches() - rewrite() -} -class UnifyCodomainRewriter {} -class RemoveCupsRewriter {} -class RemoveSwapsRewriter {} - -object connector_rule -object determiner_rule -object postadverb_rule -object preadverb_rule -object auxiliary_rule -object prep_phrase_rule -object object_rp_rule -object subject_rp_rule - -RewriteRule <|-- SimpleRewriteRule -RewriteRule <|-- CoordinationRewriteRule -RewriteRule <|-- CurryRewriteRule -RewriteRule <|-- UnknownWordsRewriteRule - -DiagramRewriter <|-- UnifyCodomainRewriter -DiagramRewriter <|-- RemoveCupsRewriter -DiagramRewriter <|-- RemoveSwapsRewriter - -Rewriter *-d- RewriteRule -SimpleRewriteRule::template *-- backend.grammar.Diagram -Rewriter::apply_rewrites *-r- backend.grammar.Functor -RewriteRule -- backend.grammar.Diagram : > rewrites - -SimpleRewriteRule <.u. connector_rule : <> -SimpleRewriteRule <.u. determiner_rule : <> -SimpleRewriteRule <.u. postadverb_rule : <> -SimpleRewriteRule <.l. preadverb_rule : <> -SimpleRewriteRule <.. auxiliary_rule : <> -SimpleRewriteRule <.. prep_phrase_rule : <> -SimpleRewriteRule <.. object_rp_rule : <> -SimpleRewriteRule <.. subject_rp_rule : <> - -@enduml diff --git a/docs/puml/text2diagram.puml b/docs/puml/text2diagram.puml deleted file mode 100644 index 2e3b6b33..00000000 --- a/docs/puml/text2diagram.puml +++ /dev/null @@ -1,123 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam ArrowColor Black -skinparam shadowing true -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} -'skinparam linetype ortho -'skinparam groupInheritance 4 - -package depccg #DDDDDD {} -package transformers #DDDDDD {} - -abstract class Reader { - sentence2diagram() - sentences2diagrams() -} - -abstract class CCGParser { - sentence2tree() - sentences2trees() -} - -class TreeReader { - ccg_parser : CCGParser - mode: TreeReaderMode - word_type -} - -enum TreeReaderMode { - NO_TYPE - RULE_ONLY - RULE_TYPE -} - -class LinearReader { - combining_diagram - start_box - word_type -} -class SpidersReader {} -class DepCCGParser -class WebParser -class BobcatParser { - parser - tagger -} -class CCGBankParser -enum CCGRule { - UNKNOWN - LEXICAL - UNARY - FORWARD_APPLICATION - BACKWARD_APPLICATION - FORWARD_COMPOSITION - BACKWARD_COMPOSITION - FORWARD_CROSSED_COMPOSITION - BACKWARD_CROSSED_COMPOSITION - GENERALIZED_FORWARD_COMPOSITION - GENERALIZED_BACKWARD_COMPOSITION - GENERALIZED_FORWARD_CROSSED_COMPOSITION - GENERALIZED_BACKWARD_CROSSED_COMPOSITION - REMOVE_PUNCTUATION_LEFT - REMOVE_PUNCTUATION_RIGHT - FORWARD_TYPE_RAISING - BACKWARD_TYPE_RAISING - CONJUNCTION - symbol() -} -class CCGTree - -class bobcat.Tagger #back:wheat;line:tomato -class bobcat.ChartParser #back:wheat;line:tomato - -object cups_reader -object spiders_reader -object stairs_reader - -Reader <|-- CCGParser -Reader <|-- TreeReader -Reader <|-- LinearReader -Reader <|-- SpidersReader - -LinearReader <.u. cups_reader : <> -LinearReader <.u. stairs_reader : <> - -CCGParser <|- DepCCGParser -CCGParser <|-- BobcatParser -CCGParser <|-- WebParser -CCGParser <|--- CCGBankParser - -SpidersReader <.. spiders_reader : <> - -DepCCGParser - depccg: > uses - -TreeReader::ccg_parser o-- CCGParser -TreeReader::mode *-l- TreeReaderMode -LinearReader::word_type *-- backend.grammar.Ty -TreeReader::word_type *-- backend.grammar.Ty -LinearReader::combining_diagram *-- backend.grammar.Diagram -LinearReader::start_box *-- backend.grammar.Diagram - -BobcatParser::parser *-- bobcat.ChartParser -BobcatParser::tagger *-- bobcat.Tagger - -bobcat.ChartParser -- transformers : uses > -bobcat.Tagger -- transformers: uses > -WebParser -- depccg: uses > - -CCGTree *-- CCGRule -CCGTree -u- CCGParser : < generates -backend.grammar.Diagram -- CCGTree : < isConvertedTo - -Reader -- backend.grammar.Diagram : generates > - -@enduml diff --git a/docs/puml/tokeniser.puml b/docs/puml/tokeniser.puml deleted file mode 100644 index 646b9d6b..00000000 --- a/docs/puml/tokeniser.puml +++ /dev/null @@ -1,31 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam ArrowColor Black -skinparam shadowing true -skinparam class { - backgroundColor Business - borderColor Red -} -skinparam object { - backgroundColor lavender - borderColor black -} - -package spacy #DDDDDD {} - -abstract class Tokeniser { - split_sentences() - tokenise_sentence() - tokenise_sentences() -} - -class SpacyTokeniser {} - - -Tokeniser <|-- SpacyTokeniser - -SpacyTokeniser -- spacy : > uses - -@enduml diff --git a/docs/puml/training.puml b/docs/puml/training.puml deleted file mode 100644 index c15986b0..00000000 --- a/docs/puml/training.puml +++ /dev/null @@ -1,138 +0,0 @@ -@startuml - -set namespaceseparator none -skinparam dpi 96 -skinparam ArrowColor Black -skinparam shadowing true -skinparam class { - backgroundColor Business - borderColor Red -} - -package pytorch #DDDDDD {} -package tket #DDDDDD {} -package pennylane #DDDDDD {} - -abstract class Model { - symbols - weights - {abstract} initialise_weights() - {abstract}{static} from_checkpoint() - {abstract} get_diagram_output() - {abstract} forward() - {static} from diagrams() -} - -abstract class Trainer { - backend - model - load_training_checkpoint() - save_checkpoint() - {abstract} training_step() - {abstract} validation_step() - fit() -} - -abstract class Optimizer { - model - loss - hyperparams: dict[str, float] - bounds - {abstract} backward() - {abstract} step() - {abstract} state_dict() - {abstract} load_state_dict() - zero_grad() -} - -class Dataset { - data - targets - batch_size - shuffle - {static} shuffle_data() -} - -class CheckPoint { - entries - add_many() - {static} from_file() - to_file() -} - -class PytorchModel {} -class PennyLaneModel {} -class NumpyModel { - use_jit - lambdas -} -class TketModel {} -class QuantumModel { - {static} SMOOTHING -} - -class QuantumTrainer { - optimizer -} - -class PytorchTrainer { - optimizer -} - -class SPSAOptimizer {} -class NelderMeadOptimizer {} -class RotosolveOptimizer {} - -class BinaryCrossEntropyLoss {} - -class CrossEntropyLoss { - calculate_loss() -} - -class LossFunction { - backend : module - {abstract}calculate_loss() -} - -class MSELoss { - calculate_loss() -} - -Model <|-- PytorchModel -Model <|-- PennyLaneModel -Model <|-- QuantumModel -QuantumModel <|-- TketModel -QuantumModel <|-- NumpyModel -Trainer <|-- PytorchTrainer -Trainer <|-- QuantumTrainer - -Optimizer <|-- SPSAOptimizer -Optimizer <|-- NelderMeadOptimizer -Optimizer <|-- RotosolveOptimizer - -PennyLaneModel -- pennylane -PennyLaneModel -- pytorch -PytorchModel -- pytorch -PytorchTrainer -- pytorch -TketModel -- tket -QuantumTrainer -- tket - -Trainer *-- CheckPoint -CheckPoint --* Model -Trainer::model *- Model -Trainer *-u- Dataset -QuantumModel -* Optimizer::model -Optimizer -* QuantumTrainer::optimizer -LossFunction --* Optimizer::loss - -PennyLaneModel -- PytorchTrainer: usedWith -PytorchModel -- PytorchTrainer: usedWith -NumpyModel -- QuantumTrainer: usedWith -TketModel -- QuantumTrainer: usedWith -QuantumModel -- LossFunction: uses - -CrossEntropyLoss <|-- BinaryCrossEntropyLoss -LossFunction <|-- CrossEntropyLoss -LossFunction <|-- MSELoss - -@enduml diff --git a/docs/quantinuum-sphinx b/docs/quantinuum-sphinx deleted file mode 160000 index 160b2977..00000000 --- a/docs/quantinuum-sphinx +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 160b297794d5af8832b7d7085707a9bcc43c93d3 diff --git a/docs/release-notes.rst b/docs/release-notes.rst deleted file mode 100644 index a0800dfe..00000000 --- a/docs/release-notes.rst +++ /dev/null @@ -1,380 +0,0 @@ -.. _sec-release-notes: - -Release notes -============= - -.. _rel-0.4.2: - -`0.4.2 `_ ------------------------------------------------------------- - -Added: - -- Added timing information to training logs and model checkpoints. - -Changed: - -- Changed theme of online documentation. -- Updated required version of ``pytket`` to 1.31.0. - -Fixed: - -- Fixed bug in generation of single-legged quantum spiders. -- Fixed bug when evaluating quantum circuits using Tket. - -Removed: - -- Removed support for Python 3.9. - -.. _rel-0.4.1: - -`0.4.1 `_ ------------------------------------------------------------- - -Added: - -- Support for Python 3.12. -- A new :py:class:`~lambeq.Sim4Ansatz` based on the Sim `et al.` paper [SJA2019]_. -- A new argument in :py:meth:`.Trainer.fit` for specifying an :py:attr:`early_stopping_criterion` other than validation loss. -- A new argument :py:attr:`collapse_noun_phrases` in methods of :py:class:`.CCGParser` and :py:class:`.CCGTree` classes (for example, see :py:meth:`.CCGParser.sentence2diagram`) that allows the user to maintain noun phrases in the derivation or collapse them into nouns as desired. -- Raised meaningful exception when users try to convert to/from DisCoPy 1.1.0 - -Changed: - -- An internal refactoring of module :py:mod:`.backend.drawing` in view of planned new features. -- Updated random number generation in :py:class:`~lambeq.TketModel` by using the recommended :py:meth:`numpy.random.default_rnd` method. - -Fixed: - -- Handling of possible empty ``Bra`` s and ``Ket`` s during conversion from DisCoPy. -- Fixed a bug in JIT compilation of mixed circuit evaluations. - -.. _rel-0.4.0: - -`0.4.0 `_ ------------------------------------------------------------- - -Added: - -- A new integrated backend that replaces :term:`DisCoPy`, which until now was providing the low-level functionality of ``lambeq``. The new backend offers better performance, increased stability, faster training speeds, and a simplified high-level interface to the user. The new backend consists of the following sub-modules: - - - :py:mod:`lambeq.backend.grammar`: Contains the building blocks for creating string diagrams. - - :py:mod:`lambeq.backend.tensor`: Contains the necessary classes to create tensor diagrams. - - :py:mod:`lambeq.backend.quantum`: Adds quantum-specific functionality to the backend and provides a circuit simulator based on the `TensorNetwork `_ library. - - :py:mod:`lambeq.backend.pennylane`: Interface with PennyLane. - - :py:mod:`lambeq.backend.tk`: Inteface with Tket. - - :py:mod:`lambeq.backend.numerical_backend`: Common interface for numerical backends (such as Numpy, Jax, PyTorch, TensorFlow) - - :py:mod:`lambeq.backend.drawing`: Contains drawing functionality for diagrams and circuits. - -- :py:class:`~lambeq.BobcatParser`: Added a special case for adjectival conjunction in tree translation. -- :py:class:`~lambeq.TreeReader`: Diagrams now are created straight from the :py:class:`~lambeq.CCGTree`. -- :py:class:`~lambeq.CCGRule` apply method: Added :py:meth:`~lambeq.CCGRule.apply` method to class :py:class:`~lambeq.CCGRule`. - -Changed: - -- Diagram-level rewriters: Rewrite functions :py:func:`remove_cups` and :py:func:`remove_swaps` are now refactored as diagram-level rewriters, :py:class:`~lambeq.RemoveCupsRewriter` and :py:class:`~lambeq.RemoveSwapsRewriter` correspondingly. -- Extra whitespace is now ignored in the :py:class:`~lambeq.Tokeniser`. - -Fixed: - -- :py:class:`~lambeq.UnknownWordsRewriteRule`: Fixed rewriting of non-word boxes. - -Removed: - -- Removed :py:meth:`CCGTree.to_biclosed_diagram` and references to :py:mod:`discopy.biclosed`. Now CCG trees are directly converted into string diagrams, without the extra step of storing the derivation in a biclosed form. -- :py:class:`~lambeq.CCGRule`: Removed :py:meth:`replace_cat_result` and added :py:meth:`~lambeq.CCGRule.resolve`. - -.. _rel-0.3.3: - -`0.3.3 `_ ------------------------------------------------------------- -This update features contributions from participants in `unitaryHACK 2023 `_: - -- Two new optimisers: - - - The Nelder-Mead optimiser. (credit: `Gopal Dahale `_) - - The Rotosolve optimiser. (credit: `Ahmed Darwish `_) - -- A new rewrite rule for handling unknown words. (credit: `WingCode `_) - -Many thanks to all who participated. - -This update also contains the following changes: - -Added: - -- :py:class:`~lambeq.DiagramRewriter` is a new class that rewrites diagrams by looking at the diagram as a whole rather than by using rewrite rules on individual boxes. This includes an example :py:class:`~lambeq.UnifyCodomainRewriter` which adds an extra box to the end of diagrams to change the output to a specified type. (credit: `A.C.E07 `_) -- Added an early stopping mechanism to :py:class:`~lambeq.Trainer` using the parameter ``early_stopping_interval``. - -Fixed: - -- In :py:class:`~lambeq.PennyLaneModel`, SymPy symbols are now substituted during the forward pass so that gradients are back-propagated to the original parameters. -- A pickling error that prevented CCG trees produced by :py:class:`~lambeq.BobcatParser` from being unpickled has been fixed. - -.. _rel-0.3.2: - -`0.3.2 `_ ------------------------------------------------------------- - -Added: - -- Support for :term:`DisCoPy` >= 1.1.4 (credit: `toumix `_). - - - replaced ``discopy.rigid`` with :py:mod:`discopy.grammar.pregroup` everywhere. - - replaced ``discopy.biclosed`` with :py:mod:`discopy.grammar.categorial` everywhere. - - Use ``Diagram.decode`` to account for the change in contructor signature ``Diagram(inside, dom, cod)``. - - updated attribute names that were previously hidden, e.g. ``._data`` becomes ``.data``. - - replaced diagrammatic conjugate with transpose. - - swapped left and right currying. - - dropped support for legacy DisCoPy. - -- Added :py:class:`~lambeq.CCGType` class for utilisation in the ``biclosed_type`` attribute of :py:class:`~lambeq.CCGTree`, allowing conversion to and from a discopy categorial object using :py:meth:`~lambeq.CCGType.discopy` and :py:meth:`~lambeq.CCGType.from_discopy` methods. -- :py:class:`~lambeq.CCGTree`: added reference to the original tree from parsing by introducing a ``metadata`` field. - - -Changed: - -- Internalised DisCoPy quantum ansätze in lambeq. -- :py:class:`~lambeq.IQPAnsatz` now ends with a layer of Hadamard gates in the multi-qubit case and the post-selection basis is set to be the computational basis (Pauli Z). - -Fixed: - -- Fixed a bottleneck during the initialisation of the :py:class:`~lambeq.PennyLaneModel` caused by the inefficient substitution of Sympy symbols in the circuits. -- Escape special characters in box labels for symbol creation. -- Documentation: fixed broken links to DisCoPy documentation. -- Documentation: enabled sphinxcontrib.jquery extension for Read the Docs theme. -- Fixed disentangling ``RealAnsatz`` in extend-lambeq tutorial notebook. -- Fixed model loading in PennyLane notebooks. -- Fixed typo in :py:class:`~lambeq.SPSAOptimizer` (credit: `Gopal-Dahale `_) - -Removed: - -- Removed support for Python 3.8. - -.. _rel-0.3.1: - -`0.3.1 `_ ------------------------------------------------------------- - -Changed: - -- Added example and tutorial notebooks to tests. -- Dependencies: pinned the maximum version of Jax and Jaxlib to 0.4.6 to avoid a JIT-compilation error when using the :py:class:`~lambeq.NumpyModel`. - -Fixed: - -- Documentation: fixed broken DisCoPy links. -- Fixed PyTorch datatype errors in example and tutorial notebooks. -- Updated custom :term:`ansätze ` in tutorial notebook to match new structure of :py:class:`~lambeq.CircuitAnsatz` and :py:class:`~lambeq.TensorAnsatz`. - -.. _rel-0.3.0: - -`0.3.0 `_ ------------------------------------------------------------- - -Added: - -- Support for hybrid quantum-classical models using the :py:class:`~lambeq.PennyLaneModel`. :term:`PennyLane` is a powerful QML library that allows the development of hybrid ML models by hooking numerically determined gradients of parametrised quantum circuits (PQCs) to the autograd modules of ML libraries like PyTorch or TensorFlow. -- Add lambeq-native loss functions :py:class:`~lambeq.LossFunction` to be used in conjunction with the :py:class:`~lambeq.QuantumTrainer`. Currently, we support the :py:class:`~lambeq.CrossEntropyLoss`, :py:class:`~lambeq.BinaryCrossEntropyLoss`, and the :py:class:`~lambeq.MSELoss` loss functions. -- Python 3.11 support. -- An extensive :ref:`NLP-101 tutorial `, covering basic definitions, text preprocessing, tokenisation, handling of unknown words, machine learning best practices, text classification, and other concepts. - -Changed: - -- Improve tensor initialisation in the :py:class:`~lambeq.PytorchModel`. This enables the training of larger models as all parameters are initialised such that the expected L2 norm of all output vectors is approximately 1. We use a symmetric uniform distribution where the range depends on the output dimension (flow) of each box. -- Improve the fail-safety of the :py:class:`~lambeq.BobcatParser` model download method by adding hash checks and atomic transactions. -- Use type union expression ``|`` instead of ``Union`` in type hints. -- Use ``raise from`` syntax for better exception handling. -- Update the requirements for the documentation. - -Fixed: - -- Fixed bug in :py:class:`~lambeq.SPSAOptimizer` triggered by the usage of masked arrays. -- Fixed test for :py:class:`~lambeq.NumpyModel` that was failing due to a change in the behaviour of Jax. -- Fixed brittle quote-wrapped strings in error messages. -- Fixed 400 response code during Bobcat model download. -- Fixed bug where :py:class:`~lambeq.CircuitAnsatz` would add empty discards and postselections to the circuit. - -Removed: - -- Removed install script due to deprecation. - -.. _rel-0.2.8: - -`0.2.8 `_ ------------------------------------------------------------- - -Changed: - -- Improved the performance of :py:class:`.NumpyModel` when using Jax JIT-compilation. -- Dependencies: pinned the required version of DisCoPy to 0.5.X. - -Fixed: - -- Fixed incorrectly scaled validation loss in progress bar during model training. -- Fixed symbol type mismatch in the quantum models when a circuit was previously converted to tket. - -.. _rel-0.2.7: - -`0.2.7 `_ ------------------------------------------------------------- - -Added: - -- Added support for Japanese to :py:class:`.DepCCGParser` (credit: `KentaroAOKI `_). -- Overhauled the :py:class:`.CircuitAnsatz` interface, and added three new :term:`ansätze `. -- Added helper methods to :py:class:`.CCGTree` to get the children of a tree. -- Added a new :py:meth:`.TreeReader.tree2diagram` method to :py:class:`.TreeReader`, extracted from :py:meth:`.TreeReader.sentence2diagram`. -- Added a new :py:class:`.TreeReaderMode` named :py:attr:`.TreeReaderMode.HEIGHT`. -- Added new methods to :py:class:`.Checkpoint` for creating, saving and loading checkpoints for training. -- Documentation: added a section for how to select the right model and trainer for training. -- Documentation: added links to glossary terms throughout the documentation. -- Documentation: added UML class diagrams for the sub-packages in lambeq. - -Changed: - -- Dependencies: bumped the minimum versions of ``discopy`` and ``torch``. -- :py:class:`.IQPAnsatz` now post-selects in the Hadamard basis. -- :py:class:`.PytorchModel` now initialises using ``xavier_uniform``. -- :py:meth:`.CCGTree.to_json` can now be applied to ``None``, returning ``None``. -- Several slow imports have been deferred, making lambeq much faster to import for the first time. -- In :py:meth:`.CCGRule.infer_rule`, direction checks have been made explicit. -- :py:class:`.UnarySwap` is now specified to be a ``unaryBoxConstructor``. -- :py:class:`.BobcatParser` has been refactored for easier use with external evaluation tools. -- Documentation: headings have been organised in the tutorials into subsections. - -Fixed: - -- Fixed how :py:meth:`.CCGRule.infer_rule` assigns a ``punc + X`` instance: if the result is ``X\X`` the assigned rule is :py:attr:`.CCGRule.CONJUNCTION`, otherwise the rule is :py:attr:`.CCGRule.REMOVE_PUNCTUATION_LEFT` (similarly for punctuation on the right). - -Removed: - -- Removed unnecessary override of :py:meth:`.Model.from_diagrams` in :py:class:`.NumpyModel`. -- Removed unnecessary ``kwargs`` parameters from several constructors. -- Removed unused ``special_cases`` parameter and ``_ob`` method from :py:class:`.CircuitAnsatz`. - -.. _rel-0.2.6: - -`0.2.6 `_ ------------------------------------------------------------- - -- Added a strict pregroups mode to the CLI. With this mode enabled, all swaps are removed from the output string diagrams by changing the ordering of the atomic types, converting them into a valid :term:`pregroup ` form as given in [Lam1999]_. -- Adjusted the behaviour of output normalisation in quantum models. Now, :py:class:`.NumpyModel` always returns probabilities instead of amplitudes. -- Removed the prediction from the output of the :py:class:`.SPSAOptimizer`, which now returns just the loss. - -.. _rel-0.2.5: - -`0.2.5 `_ ------------------------------------------------------------- - -- Added a "swapping" unary rule box to handle unary rules that change the direction of composition, improving the coverage of the :py:class:`~lambeq.BobcatParser`. -- Added a ``--version`` flag to the CLI. -- Added a :py:meth:`~lambeq.Model.make_checkpoint` method to all training models. -- Changed the :py:class:`~lambeq.WebParser` so that the online service to use is specified by name rather than by URL. -- Changed the :py:class:`~lambeq.BobcatParser` to only allow one tree per category in a cell, doubling parsing speed without affecting the structure of the parse trees (in most cases). -- Fixed the parameter names in :py:class:`~lambeq.CCGRule`, where ``dom`` and ``cod`` had inadvertently been swapped. -- Made the linting of the codebase stricter, enforced by the GitHub action. The flake8 configuration can be viewed in the ``setup.cfg`` file. - -.. _rel-0.2.4: - -`0.2.4 `_ ------------------------------------------------------------- - -- Fix a bug that caused the :py:class:`~lambeq.BobcatParser` and the :py:class:`~lambeq.WebParser` to trigger an SSL certificate error using Windows. -- Fix false positives in assigning conjunction rule using the :py:class:`~lambeq.CCGBankParser`. The rule ``, + X[conj] -> X[conj]`` is a case of removing left punctuation, but was being assigned conjunction erroneously. -- Add support for using ``jax`` as backend of ``tensornetwork`` when setting ``use_jit=True`` in the :py:class:`~lambeq.NumpyModel`. The interface is not affected by this change, but performance of the model is significantly improved. - -.. _rel-0.2.3: - -`0.2.3 `_ ------------------------------------------------------------- - -- Fix a bug that raised a ``dtype`` error when using the :py:class:`~lambeq.TketModel` on Windows. -- Fix a bug that caused the normalisation of scalar outputs of circuits without open wires using a :py:class:`~lambeq.QuantumModel`. -- Change the behaviour of :py:data:`~lambeq.spiders_reader` such that the :term:`spiders ` decompose logarithmically. This change also affects other rewrite rules that use :term:`spiders `, such as coordination and relative pronouns. -- Rename ``AtomicType.PREPOSITION`` to :py:data:`AtomicType.PREPOSITIONAL_PHRASE `. -- :py:class:`~lambeq.CCGRule`: Add :py:meth:`~lambeq.CCGRule.symbol` method that returns the ASCII symbol of a given :term:`CCG ` rule. -- :py:class:`~lambeq.CCGTree`: Extend :py:meth:`~lambeq.CCGTree.deriv` method with :term:`CCG ` output. It is now capable of returning standard CCG diagrams. -- :ref:`Command-line interface `: Add :term:`CCG ` mode. When enabled, the output will be a string representation of the CCG diagram corresponding to the :py:class:`~lambeq.CCGTree` object produced by the parser, instead of a :term:`DisCoPy` diagram or circuit. -- Documentation: Add a :ref:`troubleshooting ` page. - -.. _rel-0.2.2: - -`0.2.2 `_ ------------------------------------------------------------- - -- Add support for Python 3.10. -- Unify class hierarchies for parsers and readers: :py:class:`~lambeq.CCGParser` is now a subclass of :py:class:`~lambeq.Reader` and placed in the common package :py:mod:`.text2diagram`. The old packages :py:mod:`.reader` and :py:mod:`.ccg2discocat` are no longer available. Compatibility problems with previous versions should be minimal, since from Release :ref:`rel-0.2.0` and onwards all ``lambeq`` classes can be imported from the global namespace. -- Add :py:class:`.CurryRewriteRule`, which uses map-state duality in order to remove adjoint types from the boxes of a diagram. When used in conjunction with :py:meth:`~discopy.rigid.Diagram.normal_form`, this removes cups from the diagram, eliminating post-selection. -- The :term:`Bobcat` parser now updates automatically when new versions are made available online. -- Update grammar file of :term:`Bobcat` parser to avoid problems with conflicting unary rules. -- Allow customising available root categories for the parser when using the command-line interface. - -.. _rel-0.2.1: - -`0.2.1 `_ ------------------------------------------------------------- - -- A new :py:class:`.Checkpoint` class that implements pickling and file operations from the :py:class:`.Trainer` and :py:class:`.Model`. -- Improvements to the :py:mod:`.training` module, allowing multiple diagrams to be accepted as input to the :py:class:`.SPSAOptimizer`. -- Updated documentation, including sub-package structures and class diagrams. - -.. _rel-0.2.0: - -`0.2.0 `_ ------------------------------------------------------------- - -- A new state-of-the-art CCG parser based on [SC2021]_, fully integrated with ``lambeq``, which replaces depccg as the default parser of the toolkit. The new :term:`Bobcat` parser has better performance, simplifies installation, and provides compatibility with Windows (which was not supported due to a depccg conflict). depccg is still supported as an alternative external dependency. -- A :py:mod:`.training` package, providing a selection of trainers, models, and optimizers that greatly simplify supervised training for most of ``lambeq``'s use cases, classical and quantum. The new package adds several new features to ``lambeq``, such as the ability to save to and restore models from checkpoints. -- Furthermore, the :py:mod:`.training` package uses :term:`DisCoPy`'s tensor network capability to contract tensor diagrams efficiently. In particular, :term:`DisCoPy 0.4.1 `'s new unitary and density matrix simulators result in substantially faster training speeds compared to the previous version. -- A command-line interface, which provides most of ``lambeq``'s functionality from the command line. For example, ``lambeq`` can now be used as a standard command-line pregroup parser. -- A web parser class that can send parsing queries to an online API, so that local installation of a parser is not strictly necessary anymore. The web parser is particularly helpful for testing purposes, interactive usage or when a local parser is unavailable, but should not be used for serious experiments. -- A new :py:mod:`~lambeq.pregroups` package that provides methods for easy creation of pregroup diagrams, removal of cups, and printing of diagrams in text form (i.e. in a terminal). -- A new :py:class:`.TreeReader` class that exploits the biclosed structure of CCG grammatical derivations. -- Three new rewrite rules for relative pronouns [SCC2014a]_ [SCC2014b]_ and coordination [Kar2016]_. -- Tokenisation features have been added in all parsers and readers. -- Additional generator methods and minor improvements for the :py:class:`.CCGBankParser` class. -- Improved and more detailed package structure. -- Most classes and functions can now be imported from :py:mod:`lambeq` directly, instead of having to import from the sub-packages. -- The :py:mod:`.circuit` and :py:mod:`.tensor` modules have been combined into an :py:mod:`lambeq.ansatz` package. (However, as mentioned above, the classes and functions they define can now be imported directly from :py:mod:`lambeq` and should continue to do so in future releases.) -- Improved documentation and additional tutorials. - -.. _rel-0.1.2: - -`0.1.2 `_ ------------------------------------------------------------- - -- Add URLs to the setup file. -- Fix logo link in README. -- Fix missing version when building docs in GitHub action. -- Fix typo in the ``description`` keyword of the setup file. - -.. _rel-0.1.1: - -`0.1.1 `_ ------------------------------------------------------------- - -- Update install script to use PyPI package. -- Add badges and documentation link to the README file. -- Add ``lambeq`` logo and documentation link to the GitHub repository. -- Allow documentation to get the package version automatically. -- Add keywords and classifiers to the setup file. -- Fix: Add :py:mod:`lambeq.circuit` module to top-level :py:mod:`lambeq` package. -- Fix references to license file. - -.. _rel-0.1.0: - -`0.1.0 `_ ------------------------------------------------------------- - -The initial release of ``lambeq``, containing a lot of core material. Main features: - -- Converting sentences to string diagrams. -- CCG parsing, including reading from CCGBank. -- Support for the ``depccg`` parser. -- DisCoCat, bag-of-words, and word-sequence compositional models. -- Support for adding new compositional schemes. -- Rewriting of diagrams. -- Ansätze for circuits and tensors, including various forms of matrix product states. -- Support for JAX and PyTorch integration. -- Example notebooks and documentation. diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index e77c1d27..00000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -nbformat~=5.7.3 -nbsphinx~=0.8.12 -numpydoc~=1.5.0 -Sphinx~=6.1.3 -sphinx-argparse~=0.4.0 -sphinx_mdinclude~=0.5.3 -furo~=2024.7.18 -sphinxcontrib-jquery~=4.1 diff --git a/docs/root-api.rst b/docs/root-api.rst deleted file mode 100644 index e8aaa520..00000000 --- a/docs/root-api.rst +++ /dev/null @@ -1,9 +0,0 @@ -lambeq package -============== - -.. automodule:: lambeq - :members: - :undoc-members: - :show-inheritance: - :inherited-members: - :exclude-members: ccg_type_regex, id_regex, escaped_words, tree_regex, verbose, SMOOTHING, PLACEHOLDER_WORD diff --git a/docs/scripts/check_errors.py b/docs/scripts/check_errors.py deleted file mode 100644 index 420412d1..00000000 --- a/docs/scripts/check_errors.py +++ /dev/null @@ -1,20 +0,0 @@ -# check_errors.py -import sys -from nbformat import read - -def check_error_tags(nbfile) -> bool: - with open(nbfile) as f: - nb = read(f, as_version=4) - - for cell in nb['cells']: - if cell['cell_type'] == 'code': - for output in cell.get('outputs', []): - if output['output_type'] == 'error': - return True - return False - -if __name__ == '__main__': - file_path = sys.argv[1] - if check_error_tags(file_path): - sys.exit(1) - sys.exit(0) diff --git a/docs/scripts/clean_notebooks.py b/docs/scripts/clean_notebooks.py deleted file mode 100644 index 4ffc6780..00000000 --- a/docs/scripts/clean_notebooks.py +++ /dev/null @@ -1,94 +0,0 @@ -""" -This script performs the following actions on example and -tutorial notebooks: - -- Removes cell IDs -- Keeps only `useful_metadata` for each cell -- Renumbers code cells, ignoring hidden ones -- Keeps only necessary notebook metadata -- Pins nbformat version -""" - -from pathlib import Path -from itertools import chain -import nbformat as nbf -from argparse import ArgumentParser -import re - - -def main(): - parser = ArgumentParser(description="Clean notebooks.") - parser.add_argument('-p', '--docs_path', default='./docs/', - help='Path to lambeq docs directory') - parser.add_argument('-s', '--suppress_warnings', action='store_true', - help='Whether or not to suppress warnings') - args = parser.parse_args() - - print("Cleaning notebooks...") - - nbs_path = Path(args.docs_path + "/" + "examples") - tut_path = Path(args.docs_path + "/" + "tutorials") - useful_metadata = ["nbsphinx", "raw_mimetype"] - - for file in chain(nbs_path.iterdir(), tut_path.iterdir()): - if not (file.is_file() and file.suffix == ".ipynb"): - continue - - ntbk = nbf.read(file, nbf.NO_CONVERT) - - exec_count = 0 - - for cell in ntbk.cells: - # Delete cell ID if it's there - cell.pop("id", None) - if cell.get("attachments") == {}: - cell.pop("attachments", None) - - # Keep only useful metadata - new_metadata = {x: cell.metadata[x] - for x in useful_metadata - if x in cell.metadata} - cell.metadata = new_metadata - - # Renumber execution counts, ignoring hidden cells - if cell.cell_type == "code": - if cell.metadata.get("nbsphinx") == "hidden": - cell.execution_count = None - else: - exec_count += 1 - cell.execution_count = exec_count - - # Adjust the output execution count, if present - if len(cell.outputs) > 0: - output = cell.outputs[-1] # execute_result must be - # the last entry - if output.output_type == "execute_result": - output.execution_count = cell.execution_count - - if args.suppress_warnings: - # Remove warnings - indices_to_remove = [] - for idx, output in enumerate(cell.outputs): - if output.output_type == 'stream' and output.name == 'stderr': - stderr_text = output.text - warning_pattern = r'warnings\.warn\(' - if re.search(warning_pattern, stderr_text): - indices_to_remove.append(idx) - - # Remove the identified entries from the outputs - # list in reverse order - for idx in reversed(indices_to_remove): - del cell.outputs[idx] - - ntbk.metadata = {"language_info": {"name": "python"}} - - # We need the version of nbformat to be x.4, otherwise cells IDs - # are regenerated automatically - ntbk.nbformat = 4 - ntbk.nbformat_minor = 4 - - nbf.write(ntbk, file, version=nbf.NO_CONVERT) - - -if __name__ == "__main__": - main() diff --git a/docs/scripts/compare_execution_times.py b/docs/scripts/compare_execution_times.py deleted file mode 100644 index f4eeab54..00000000 --- a/docs/scripts/compare_execution_times.py +++ /dev/null @@ -1,96 +0,0 @@ -import os -import pandas as pd -import matplotlib.pyplot as plt -import argparse -import numpy as np - - -PLOT_SAVE_PATH = 'notebook_execution_time_comparison.png' - -# Function to load data from CSV files -def load_data(csv_path): - data = pd.read_csv(csv_path) - # cut path from notebook name - data['notebook'] = data['notebook'].apply(lambda x: x.rpartition('/')[2]) - data['source'] = csv_path - data['median'] = data.filter(regex='run_').median(1) - data['min'] = data.filter(regex='run_').min(1) - data['std'] = data.filter(regex='run_').std(1) - return data - - -def plot_data(data: pd.DataFrame, title='Notebook Execution Time Comparison'): - # Read out mean and standard deviation - mean_data = data.groupby(['notebook', 'source'])['median'].mean().unstack().fillna(0) - std_data = data.groupby(['notebook', 'source'])['std'].mean().unstack().fillna(0) - min_data = data.groupby(['notebook', 'source'])['min'].mean().unstack().fillna(0) - - # Create a figure and a set of subplots - _, ax = plt.subplots(figsize=(15, 8)) - - # Define variable bar width - samples = len(mean_data.keys()) - bar_width = 1/(2*samples) - - # Define notebook positions - notebook_positions = np.arange(len(mean_data.index)) - - n_samples = len(mean_data.columns) - - # Generate bar plots with error bars for each source - for i, source in enumerate(mean_data.columns): - label = source.split('/')[1] - offset = ((i - n_samples//2 + 1/2) if n_samples % 2 == 0 else - (n_samples//2 - i)) - # Plot medium values as bar plot - ax.bar(notebook_positions - offset * bar_width, - mean_data[source], - bar_width, - alpha=0.2, - color='bgrcmyk'[i], - yerr=std_data[source], - ecolor='gray', - label='_nolegend_') - # Plot minimum values as bar plot - ax.bar(notebook_positions - offset * bar_width, - min_data[source], - bar_width, - alpha=0.8, - color='bgrcmyk'[i], - label=label) - - ax.set_title(title) - ax.set_xlabel('Notebook') - ax.set_ylabel('Time (s)') - ax.set_xticks(notebook_positions) - ax.set_xticklabels(mean_data.index, rotation=45, ha='right') - plt.legend() - plt.tight_layout() - plt.savefig(PLOT_SAVE_PATH) - plt.show() - - -def main(notebook_runtimes_dir): - # Traverse the 'notebook_runtimes_dir' and its subdirectories for CSV files - data_frames = [] - for root, _, files in os.walk(notebook_runtimes_dir): - for file in files: - if file.endswith(".csv"): - csv_path = os.path.join(root, file) - data = load_data(csv_path) - data_frames.append(data) - - # Concatenate all dataframes - all_data = pd.concat(data_frames, ignore_index=True) - - # Plot the data - plot_data(all_data) - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Compare notebook execution times.') - parser.add_argument('notebook_runtimes_dir', type=str, - help='Path to the directory containing the CSV files.') - - args = parser.parse_args() - - main(args.notebook_runtimes_dir) diff --git a/docs/scripts/track_execution_time.sh b/docs/scripts/track_execution_time.sh deleted file mode 100644 index 37e07e62..00000000 --- a/docs/scripts/track_execution_time.sh +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env bash - -########################################################################## -# Script Name: Notebook Execution Time Tracker -# -# Description: This script recursively traverses the 'examples' and -# 'tutorials' directories, executing all Jupyter notebooks -# (.ipynb files) found therein. -# -# For each notebook, the script records its execution time -# and stores this data in a CSV file for easy analysis. -# -# Additionally, the script generates and stores information -# about the Python environment where the notebooks are -# executed. This includes the output of 'pip list', -# displaying all installed packages, and specific information -# for 'lambeq' using 'pip show'. -# -# Lastly, the script checks whether each notebook's execution -# succeeded, storing the executed notebooks even if they -# failed. The presence of any execution errors is noted and -# stored as well. -########################################################################## - - -# Default excluded notebook -exclude_notebook="" - -# Parse command line arguments -while getopts ":e:n:" opt; do - case ${opt} in - e) - exclude_notebook=$OPTARG - ;; - n) - n_runs=$OPTARG - ;; - \?) - echo "Invalid option: -$OPTARG" 1>&2 - ;; - :) - echo "Option -$OPTARG requires an argument" 1>&2 - ;; - esac -done -shift $((OPTIND -1)) - -# if n_runs is not set, set it to 1 -: ${n_runs:=1} - -# Function to convert 'real' time to seconds -function convert_time() { - # Extract minutes and seconds - local time=$1 - local minutes=${time%m*} - local seconds=${time#*m}; seconds=${seconds%s} - - # Convert to seconds - local total_seconds=$(echo "$minutes * 60 + $seconds" | bc) - - echo $total_seconds -} - -# Check if in a virtual environment -if [[ "$VIRTUAL_ENV" != "" ]]; then - echo "In Virtualenv, installing some packages" - pip install pytest nbconvert nbformat ipython ipykernel -else - echo "Not in Virtualenv" - # break if not in virtualenv - exit 1 -fi - -# Create 'notebook_runtimes' directory if it doesn't exist -base_path="./notebook_runtimes" -if [ ! -d "$base_path" ]; then - mkdir -p "$base_path" -fi - -# Store the output of 'pip show' -lambeq_info=$(pip show lambeq) - -# Extract the version numbers -lambeq_version=$(echo "$lambeq_info" | grep "^Version" | cut -d ' ' -f 2) - -# Create a timestamp for output directory -timestamp=$(date +%Y%m%d_%H%M%S) - -# Add lambeq versions to the directory name -timestamp="${timestamp}_lambeq-${lambeq_version}" - -# Create a new directory with timestamp -mkdir -p "$base_path/$timestamp" - -# Create new directories for this run -mkdir -p "$base_path/$timestamp/notebooks" - -# Store the output of 'pip list' -pip list > $base_path/$timestamp/pip_list.txt - -# Store the output of 'pip show' -echo "$lambeq_info" > $base_path/$timestamp/lambeq_info.txt - -# The directories containing your notebooks -dirs=("examples" "tutorials") - -# The output CSV file -output_file="$base_path/$timestamp/notebook_execution_times.csv" - -header="notebook," -nans="" -# Print the header of the CSV file -for ((i=0; i<$n_runs; i++)); do - header="${header}run_$i," - nans="${nans}NA," -done -header="${header}status" -echo $header > $output_file - -echo "Start processing notebooks..." - -# Iterate over the directories -for dir in "${dirs[@]}"; do - echo "Processing directory: $dir" - - # Iterate over the .ipynb files in each directory - find $dir -name "*.ipynb" | while read notebook; do - echo "Executing notebook: $notebook" - # Extract file name - file_name=$(basename $notebook) - - # Skip notebooks if flag was set - if [ "$file_name" == "$exclude_notebook" ]; then - echo "Skipping notebook: $notebook" - echo "$notebook,${nans}skipped" >> $output_file - continue - fi - - status="success" - times=() - # Run the notebook n times - for ((i=0; i<$n_runs; i++)); do - # Execute the notebook and capture the output and time - output=$( - (time jupyter nbconvert --execute --allow-errors --to notebook \ - --output-dir "$base_path/$timestamp/notebooks" "$notebook") 2>&1 - ) - python scripts/check_errors.py \ - "$base_path/$timestamp/notebooks/$file_name" - retval=$? - - # Extract the execution time from the output - exec_time=$(echo "$output" | grep "real" | awk '{print $2}') - exec_time=$(convert_time $exec_time) - times+=($exec_time) - - # Check if nbconvert succeeded - if [ $retval -ne 0 ]; then - echo "Notebook execution failed with return code $retval." - status="failed" - fi - done - - # generate output string - output_string="" - sum=0 - for time in "${times[@]}"; do - output_string="${output_string}${time}," - sum=$(echo "$sum + $time" | bc) - done - mean=$(echo "scale=2; $sum / $n_runs" | bc) - - # Write the notebook path and execution time to the CSV file - echo "$notebook,$output_string$status" >> $output_file - echo "Mean execution time: $mean seconds (status: $status)" - done -done - -echo "Completed processing all notebooks." diff --git a/docs/string-diagrams.rst b/docs/string-diagrams.rst deleted file mode 100644 index 75207a74..00000000 --- a/docs/string-diagrams.rst +++ /dev/null @@ -1,50 +0,0 @@ -.. _sec-string-diagrams: - -String diagrams -=============== - -Motivation and connection to tensor networks --------------------------------------------- - -"Programming" a quantum computer requires from developers the ability to manipulate :term:`quantum gates ` (which can be seen as the "atomic" units of computation in this paradigm) in order to create :term:`quantum circuits `, which can be further grouped into higher-order constructions. Working at such a low level compares to writing assembly in a classical computer, and is extremely hard for humans -- especially on :term:`NLP ` tasks which contain many levels of abstractions. - -In order to simplify :term:`NLP ` design on quantum hardware, ``lambeq`` represents sentences as :term:`string diagrams ` (:numref:`fig-stringdiagram`). This choice stems from the fact that a :term:`string diagram` expresses computations in a :ref:`monoidal category `, an abstraction well-suited to model the way a quantum computer works and processes data. - -From a more practical point of view, a :term:`string diagram` can be seen as an enriched :term:`tensor network`, a mathematical structure with many applications in quantum physics. Compared to tensor networks, string diagrams have some additional convenient properties, for example, they respect the order of words, and allow easy rewriting/modification of their structure. - -.. _fig-stringdiagram: -.. figure:: ./_static/images/string_diagram.png - :align: center - - String diagram (a) and corresponding tensor network (b). - -:term:`String diagrams ` and :term:`tensor networks ` constitute an ideal abstract representation of the compositional relations between the words in a sentence, in the sense that they remain close to :term:`quantum circuits `, yet are independent of any low-level decisions (such as choice of :term:`quantum gates ` and construction of circuits representing words and sentences) that might vary depending on design choices and the type of quantum hardware that the experiment is running on. - -.. _sec-pregroup-grammars: - -Pregroup grammars ------------------ - -``lambeq``'s string diagrams are equipped with types, which show the interactions between the words in a sentence according to the :term:`pregroup grammar` formalism [Lam1999]_. In a pregroup grammar, each type :math:`p` has a left (:math:`p^l`) and a right (:math:`p^r`) :term:`adjoint`, for which the following hold: - -.. math:: - - p^l \cdot p \to 1 \to p \cdot p^l~~~~~~~~~~~~~ - p \cdot p^r \to 1 \to p^r \cdot p - -.. note:: - In ``lambeq``, the adjoints of a type ``p`` are represented as ``p.l`` and ``p.r``, while the tensor product is the symbol ``@``. - -When annotated with pregroup types, the diagram in :numref:`fig-stringdiagram` takes the following form: - -.. image:: ./_static/images/pregroups.png - :scale: 32 % - :align: center - -Note that each wire in the sentence is labelled with an atomic type or an :term:`adjoint`. In the above, :math:`n` corresponds to a noun or a noun phrase, and :math:`s` to a sentence. The adjoints :math:`n^r` and :math:`n^l` indicate that a noun is expected on the left or the right of the specific word, respectively. Thus, the composite type :math:`n \cdot n^l` of the determiner "a" means that it is a word that expects a noun on its right in order to return a noun phrase. - -The transition from pregroups to vector space semantics is achieved by a mapping that sends atomic types to vector spaces (:math:`n` to :math:`N` and :math:`s` to :math:`S`) and composite types to tensor product spaces (e.g. :math:`n^r \cdot s \cdot n^l \cdot n^l` to :math:`N \otimes S \otimes N \otimes N`). Therefore, each word can be seen as a specific state in the corresponding space defined by its grammatical type, i.e. a tensor, the order of which is determined by the number of wires emanating from the corresponding box. The :term:`cups ` denote tensor contractions. A concrete instantiation of the diagram requires the assignment of dimensions (which in the quantum case amounts to fixing the number of :term:`qubits `) for each vector space corresponding to an atomic type. - -.. note:: - ``lambeq``'s string diagrams are objects of the class :py:class:`lambeq.backend.grammar.Diagram`. - diff --git a/docs/training.rst b/docs/training.rst deleted file mode 100644 index 46551c40..00000000 --- a/docs/training.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. _sec-training: - -Step 4: Training -================ - -In ``lambeq``, all low-level processing that takes place in training is hidden in the :py:mod:`.training` package, which provides convenient high-level abstractions for all important supervised learning scenarios with the toolkit, classical and quantum. More specifically, the :py:mod:`.training` package contains the following high-level/abstract classes and several concrete implementations for them: - -- :py:class:`.Dataset`: A class that provides functionality for easy management and manipulation of datasets, including batching, shuffling, and preparation based on the selected backend (tket, NumPy, PyTorch). -- :py:class:`.Model`: The abstract interface for ``lambeq`` :term:`models `. A :term:`model` bundles the basic attributes and methods used for training, given a specific backend. It stores the :term:`symbols ` and the corresponding weights, and implements the forward pass of the model. Concrete implementations are the :py:class:`.PytorchModel`, :py:class:`.TketModel`, :py:class:`.NumpyModel`, and :py:class:`.PennyLaneModel` classes (for more details see Section :ref:`sec-models` below). -- :py:class:`.LossFunction`: Implementations of this class compute the distance between the predicted values of the :term:`model` and the true values in the dataset. This is used to adjust the model weights so that the average loss accross all data instances can be minimised. ``lambeq`` supports a number of loss functions, such as :py:class:`.CrossEntropyLoss`, :py:class:`.BinaryCrossEntropyLoss`, and :py:class:`.MSELoss`. -- :py:class:`.Optimizer`: a ``lambeq`` optimizer calculates the gradient of a given :term:`loss function` with respect to the parameters of a model. It contains a :py:meth:`~lambeq.Optimizer.step` method to modify the model parameters according to the optimizer's update rule. Currently, for the quantum case we support the SPSA algorithm by [Spa1998]_, implemented in the :py:class:`.SPSAOptimizer` class, the Rotosolve algorithm [Oea2021]_ with class :py:class:`.RotosolveOptimizer`, and the Nelder-Mead algorithm [NM1965]_ [GL2012]_ with class :py:class:`~lambeq.NelderMeadOptimizer`, while for the classical and hybrid cases we support PyTorch optimizers. -- :py:class:`.Trainer`: The main interface for supervised learning in ``lambeq``. A :term:`trainer` implements the (quantum) machine learning routine given a specific backend, using a :term:`loss function` and an optimizer. Concrete implementations are the :py:class:`.PytorchTrainer` and :py:class:`.QuantumTrainer` classes. - -The process of training a :term:`model` involves the following steps: - -1. Instantiate the :py:class:`.Model`. -2. Instantiate a :py:class:`.Trainer`, passing to it a :term:`model`, a :term:`loss function`, and an optimizer. -3. Create a :py:class:`.Dataset` for training, and optionally, one for evaluation. -4. Train the :term:`model` by handing the dataset to the :py:meth:`~lambeq.Trainer.fit` method of the :term:`trainer`. - -.. note:: - - ``lambeq`` covers a wide range of training use cases, which are described in detail under :ref:`sec-usecases`. Depending on your specific use case (e.g., classical or (simulated) quantum machine learning, etc.), you can choose from a variety of models and their according trainers. Refer to Section :ref:`sec-models` for a detailed overview of the available models and trainers. - -The following examples demonstrate the usage of the :py:mod:`.training` package for classical and quantum training scenarios. - -.. toctree:: - - ../tutorials/trainer-classical.ipynb - ../tutorials/trainer-quantum.ipynb - ../tutorials/trainer-hybrid.ipynb - -.. rubric:: See also: - -- :ref:`lambeq.training package ` -- `Advanced: Manual training `_ diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst deleted file mode 100644 index 368923de..00000000 --- a/docs/troubleshooting.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. _sec-troubleshooting: - -Troubleshooting -=============== - -This is a collection of known issues which may arise when working with ``lambeq``, including -possible workarounds. If you encounter a problem that is not listed here, we -encourage you to -`submit an issue `_. - - -NaN and Inf errors during training ----------------------------------- - -Since release :ref:`rel-0.3.0`, ``lambeq`` provides its own numerically stable -loss functions which guard against ``NaN`` and ``Inf`` numerical errors. -This change also removed safeguards from :py:class:`~lambeq.QuantumModel`, making protecting -against such numerical errors the responsibility of the loss function. -Any custom loss function must thus also guard against such errors. - - -SSL error [Windows] -------------------- - -When using ``lambeq <= 0.2.3`` on a Windows machine, the instantiation of the -BobcatParser might trigger an SSL certificate error. If you require -``lambeq <= 0.2.3``, you can download the model through this -`link `_, -extract the archive, and provide the path to the BobcatParser: - -.. code-block:: python - - from lambeq import BobcatParser - parser = BobcatParser('path/to/model_dir') - -Note that using the :py:class:`~lambeq.WebParser` will most likely result in -the same error. - -However, this was resolved in release -`0.2.4 `_. Please consider -upgrading lambeq: - -.. code-block:: bash - - pip install --upgrade lambeq diff --git a/docs/tutorials/config.toml b/docs/tutorials/config.toml deleted file mode 100644 index 9b2e701c..00000000 --- a/docs/tutorials/config.toml +++ /dev/null @@ -1,5 +0,0 @@ -[qiskit.ibmq] -ibmqx_token = "my_API_token" - -[honeywell.global] -user_email = "my_Honeywell/Quantinuum_account_email" diff --git a/docs/tutorials/discocat.ipynb b/docs/tutorials/discocat.ipynb deleted file mode 100644 index 65a65710..00000000 --- a/docs/tutorials/discocat.ipynb +++ /dev/null @@ -1,1194 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# DisCoCat in lambeq" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the previous tutorial, we learnt the basics of :term:`monoidal categories ` and how to represent them in ``lambeq``. In this tutorial, we look at the `Distributional Compositional Categorical` model [CSC2010]_, which uses functors to map diagrams from the `rigid category `_ of `pregroup grammars <../string-diagrams.rst#Pregroup-grammars>`_ to vector space semantics.\n", - "\n", - ":download:`Download code <../_code/discocat.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Pregroup grammars" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "`Pregroup grammar <../string-diagrams.rst#Pregroup-grammars>`_ is a grammatical formalism devised by Joachim Lambek in 1999 [Lam1999]_. In pregroups, each word is a morphism with type :math:`I \\to T` where :math:`I` is the monoidal unit and :math:`T` is a rigid type, referred to as the *pregroup type*. Here are some examples for pregroup type assignments:\n", - "\n", - "* a noun is given the base type :math:`n`.\n", - "* an adjective consumes a noun on the noun's left to return another noun, so it is given the type :math:`n\\cdot n^l`.\n", - "* a transitive verb consumes a noun on its left and another noun on its right to give a sentence, so is given the type :math:`n^r \\cdot s \\cdot n^l`.\n", - "\n", - "In the context of pregroups, the :term:`adjoints ` :math:`n^l` and :math:`n^r` can be thought of as the left and right inverses of a type :math:`n` respectively. In a pregroup derivation, the words are concatenated using the monoidal product :math:`\\otimes` and linked using :term:`cups `, which are special morphisms that exist in any :term:`rigid category`. A sentence is grammatically sound if its derivation has a single uncontracted sentence wire.\n", - "\n", - "In ``lambeq``, words are defined using the :py:class:`~lambeq.backend.grammar.Word` class. A :py:class:`~lambeq.backend.grammar.Word` is just a :py:class:`~lambeq.backend.grammar.Box` where the input type is fixed to be the monoidal unit :math:`I` (or ``Ty()``). A pregroup derivation diagram can be drawn using either the :py:meth:`.backend.grammar.Diagram.draw` method or the :py:func:`.backend.drawing.draw` function." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.drawing import draw\n", - "from lambeq.backend.grammar import Cap, Cup, Id, Ty, Word\n", - "\n", - "\n", - "n, s = Ty('n'), Ty('s')\n", - "\n", - "words = [\n", - " Word('she', n),\n", - " Word('goes', n.r @ s @ n.l),\n", - " Word('home', n)\n", - "]\n", - "\n", - "cups = Cup(n, n.r) @ Id(s) @ Cup(n.l, n)\n", - "\n", - "assert Id().tensor(*words) == words[0] @ words[1] @ words[2]\n", - "assert Ty().tensor(*[n.r, s, n.l]) == n.r @ s @ n.l\n", - "\n", - "diagram = Id().tensor(*words) >> cups\n", - "draw(diagram)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " In ``lambeq``, method :py:meth:`~lambeq.backend.grammar.Diagram.create_pregroup_diagram` provides an alternative, more compact way to create pregroup diagrams, by explicitly defining a list of :term:`cups ` and :term:`swaps `. For example, the above diagram can be also generated using the following code:\n", - "\n", - " .. code-block:: python\n", - "\n", - " from lambeq.backend.grammar import Diagram, Ty\n", - "\n", - " words = [Word('she', n), Word('goes', n.r @ s @ n.l), Word('home', n)]\n", - " morphisms = [(Cup, 0, 1), (Cup, 3, 4)]\n", - " diagram = Diagram.create_pregroup_diagram(words, morphisms)\n", - " \n", - " where the numbers in ``morphisms`` define the indices of the corresponding wires at the top of the diagram\n", - " ``(n @ n.r @ s @ n.l @ n)``." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Before normal form: she, goes, home, CUP, CUP\n", - "After normal form: she, goes, CUP, home, CUP\n" - ] - }, - { - "data": { - "image/png": "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FLVv397omACABsKefQBA0KupqdEzzzyjuLg4tWnTRtnZ2f7rioqKNGrUKLVs2VKtWrXSz372M/3lL3/xX5+dna0ePXro1VdfldPpVMuWLfUP//APqq6u1oIFC9SmTRslJCRo/vz5tX7mmTNnNG3aNLVu3VqtWrXSHXfcoT179jTVQw4o7dq1U1ZWlj7//HMdOHBAzz77rA4ePKhZs2Zp4MCBstlscjqduvvuu/Xss8/qjTfeUEFBgS5evGh0dENUVlZq7969evPNN/VP//RPGjlypJKSkhQbG6sBAwboscce0759+zR79mx5vV4VFhbqn//5nyn6AGAy7NkHAAS9FStW6KmnnlJ+fr62b9+uKVOmqH///ho6dKi/6G/ZskVVVVV69NFHdf/99ysvL89//0OHDmnjxo3atGmTDh06pHHjxunw4cNKSUnRli1btG3bNk2dOlUZGRlKT0+XJI0fP15RUVHauHGjbrrpJr3yyisaOnSoDh48aNBvITCkpKQoKytLWVlZunjxog4cOKCCggIVFhaqsLBQq1at0rFjxyRJYWFhSklJUUJCgmw2W51TXFxcnWWxsbEKC2s+L4+qqqp05swZlZaW1utUXFysgwcPqrKyUpJ08803y+12a8KECXK73XK73erSpYtatGhh8CMDADS25jPNAAAwiMfj0Zw5cyRJycnJWrJkiXJzcyVJhYWFOnLkiH+v5+uvv66uXbtq586d6tOnj6Tv3xnw6quvKiYmRqmpqbr99tt14MABbdiwQSEhIercubNeeOEFffjhh0pPT9fWrVu1Y8cOFRcX+0vXwoULlZOTozVr1qh3794G/BYCT0REhL/AXqq0tNT/dnWv16uSkhKVlpbq22+/rVWMq6urL7vemJiYy24ciI6OVmhoqMLCwn7035YtW6q8vFxVVVWqrq6+4r8/nK+oqKiV7fTp0yotLVVZWdllM4aGhio2NrbWhovExESlpqbqkUce8f9ebDZbg//eAQCBgbIPAAh6Ho+n1mWHw6Hi4mJ5vV61b9++1tubU1NTFRsbK6/X6y/7HTp0UExMjP82iYmJCg0NrfW1ZYmJiSouLpYk7dmzR+Xl5YqPj6/1c8+fP69Dhw5R9m+QzWbTwIEDNXDgwCvexufzqby8vFaxvtrp22+/VUVFRa2CfrnS/sP52267Tdu3b6+zIeBK56OiomSz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AmUfAAJcixYt9P7772vixIl68sknlZaWpo0bN1L6G0llZaXeffddde/eXb/4xS80depUbdy4UWFhYUZHAwA0smXLlmnevHl6+eWX1blzZy1fvlwVFRVGxzIln8+nTz75RBkZGZowYYL69u2rTz75RK1btzY6WsCg7AOACcTFxenll1/Wzp07ZbVaNWLECDkcDj388MN6//33Kf43qLKyUv/7v/+radOmqU2bNrr33nsVFxen3bt36ze/+Y1iY2ONjggAaAItWrTQL3/5S+3fv1/9+vXTQw89pNatW+tnP/uZ1qxZQ/G/QT6fT/n5+crMzNQtt9yifv36qaioSBs3btS6devUoUMHoyMGFHZDAICJ9OrVS9u3b9euXbu0evVqrV69WkuXLpXdbtdtt90mt9stj8cjt9utlJQUhYeHGx252bl48aIOHDigwsJC/2n79u06ffq0OnXqpIcffljjx49Xjx49eBshAAQpp9OptWvX6quvvvLP2/Hjx8tqteonP/mJ3G63/5Samiqr1Wp05GanpqZGhw8f9s/agoIC7dixQ8eOHVNCQoLGjh2r8ePHa9CgQQoNDTU6bkCy+Hw+n9EhAASevn37qmfPnhwFvpnz+XzatWuX1q1bp127dqmwsFB//vOfJX1/sKEuXbrU2gDQtWtXJSQkKDIy0uDkje/8+fMqLi7W3r17axX7/fv3q7KyUpJ08803y+12q1evXhozZgwFH0CTe/jhh/XZZ59px44dRkfBj/jqq6+0Zs0a5efnq7CwUIcPH5bP51NISIg6depUawOA2+2Ww+FQdHS06efKxYsXderUKXm93lrF/osvvvC/EyI+Pl5ut1s9evTQvffeS8FvIJR9ANeFsh+4Tp065S+4BQUFKiws1N69e1VeXu6/TWRkpGw2W71PcXFx/vNNuaHg/PnzKi0tverp9OnTl11+4cIF/3piYmLqvAhzu92y2WxN9lgA4HIo+4GrvLxcX3zxRa0NygUFBTp16pT/NuHh4dc0by89NeWGgosXL/7ovL3S/L30ow0tWrRQampqrR0Nbrdbbdq0Mf1GDyPwNn4ACDLx8fEaPHiwBg8e7F9WU1Ojr7/+Wl6vV6dOnbrs0D58+HCty999991l1//DhgKr1arQ0FCFhYUpNDS01vm/XXbLLbfoyJEjqqqqUnV1taqrq/3nL7fs3LlzdQr7paKiouq8KOrUqVOdZXa7XS6XS0lJSbzIAAA0qJYtWyo9PV3p6en+ZT6fTydOnNAXX3yh4uLiy87bb7/9Vnv37vVfvnRj/KV+2FDQsmXLes3a0NBQOZ1OHTt2rF6ztqqqSt99912dwn6piIiIOrO1ffv28ng8dXYKpKSkqFOnThzQtgnxmwYAKCQkRLfccotuueWWet/nhxcAVzqdP3/+si8kLveCwmq1KjY29kdfpPzwr9VqverejhYtWjTibwsAgOtjsVjkcDjkcDjqfZ/KykqdOXPmivO2rKzMP1evNnerqqpktVp10003XXXGXvpvixYtrjpvo6Ki2FjejFH2AQDXJTIy8ppfsAAAgGsTHh6u1q1b85VzuGZ89R4AAAAAACZD2QcAAAAAwGQo+wAAAAAAmAxlHwAAAAAAk6HsAwAAAABgMpR9AAAAAABMhrIPAAAAAIDJUPYBAAAAADAZyj4AAAAAACZD2QcAAAAAwGQo+wAAAAAAmAxlHwAAAAAAk6HsAwAAAABgMpR9AAAAAABMhrIPAAAAAIDJUPYBAAAAADAZyj4AAAAAACZD2QcAAAAAwGQo+wAAAAAAmAxlHwAAAAAAk6HsAwAAAABgMpR9AAAAAABMhrIPAAAAAIDJUPYBAAAAADAZyj4AAAAAACZD2QcAAAAAwGQo+wAAAAAAmAxlHwAAAAAAk6HsAwAAAABgMpR9AAAAAABMhrIPAAAAAIDJUPYBAAAAADAZyj4AAAAAACZD2QcAAAAAwGQo+wAAAAAAmAxlHwAAAAAAk6HsAwAAAABgMmFGBwAQmObPny+bzWZ0DAAATG369OkqLS01OgaAAGTx+Xw+o0MAAAAAAICGw9v4AQAAAAAwGco+AAAAAAAmQ9kHAAAAAMBkKPsAAAAAAJgMZR8AAAAAAJOh7AMAAAAAYDKUfQAAAAAATIayDwAAAACAyVD2AQAAAAAwGco+AAAAAAAmQ9kHAAAAAMBkKPsAAAAAAJgMZR8AAAAAAJOh7AMAAAAAYDKUfQAAAAAATIayDwAAAACAyVD2AQAAAAAwGco+AAAAAAAmQ9kHAAAAAMBkKPsAAAAAAJgMZR8AAAAAAJOh7AMAAAAAYDKUfQAAAAAATIayDwAAAACAyVD2AQAAAAAwGco+AAAAAAAmQ9kHAAAAAMBkKPsAAAAAAJgMZR8AAAAAAJP5P3ug+jQateJ/AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.drawing import draw_equation\n", - "\n", - "# In the original diagram, words appear before the cups\n", - "print('Before normal form:', ', '.join(map(str, diagram.boxes)))\n", - "\n", - "diagram_nf = diagram.normal_form()\n", - "print('After normal form:', ', '.join(map(str, diagram_nf.boxes)))\n", - "\n", - "draw_equation(diagram, diagram_nf, symbol='->', figsize=(10, 4), draw_as_pregroup=False, foliated=True)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the example above, the application of normal form to the diagram introduces a :term:`cup` before the word \"home\"." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Functors" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Given :term:`monoidal categories ` :math:`\\mathcal{C}` and :math:`\\mathcal{D}`, a monoidal :term:`functor` :math:`F: \\mathcal{C} \\to \\mathcal{D}` satisfies the following properties:\n", - "\n", - "- monoidal structure of objects is preserved: :math:`F(A \\otimes B) = F(A) \\otimes F(B)`\n", - "- :term:`adjoints ` are preserved: :math:`F(A^l) = F(A)^l`, :math:`F(A^r) = F(A)^r`\n", - "- monoidal structure of morphism is preserved: :math:`F(g \\otimes f) = F(g) \\otimes F(f)`\n", - "- compositonal structure of morphisms is preserved: :math:`F(g \\circ f) = F(g) \\circ F(f)`\n", - "\n", - "Put simply, a :term:`functor` is a structure-preserving transformation. In a free :term:`monoidal category`, applying a :term:`functor` to a diagram amounts to simply providing a mapping for each generating object and morphism. In ``lambeq``, a :term:`functor` is defined by passing mappings (dictionaries or functions) as arguments ``ob`` and ``ar`` to the :py:class:`~lambeq.backend.grammar.Functor` class.\n", - "\n", - ":term:`Functors ` are one of the most powerful concepts in category theory. In fact, the encoding, rewriting and parameterisation steps of ``lambeq``'s :ref:`pipeline ` are implemented individually as :term:`functors `, resulting in an overall functorial transformation from :term:`parse trees ` to :term:`tensor networks ` and :term:`circuits `. More specifically:\n", - "\n", - "- :py:class:`lambeq.CCGParser` uses a :term:`functor` to transform a biclosed CCG diagram to a pregroup diagram [YK2021]_.\n", - "- :py:class:`lambeq.Rewriter` functorially transforms a pregroup diagram to a simpler pregroup diagram.\n", - "- :py:class:`lambeq.TensorAnsatz` functorially transforms a pregroup diagram to a tensor diagram, which can be evaluated as a tensor network using NumPy, JAX or PyTorch.\n", - "- :py:class:`lambeq.CircuitAnsatz` functorially transforms a pregroup diagram to a :term:`quantum circuit`, for evaluation on a quantum device.\n", - "\n", - "Below we present two examples of :term:`functors `, implemented in ``lambeq``." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Example 1: \"Very\" functor" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This :term:`functor` adds the word \"very\" in front of every adjective in a :term:`DisCoCat` diagram. \n", - "Since the mapping is from a :py:class:`.grammar.Diagram` to another :py:class:`.grammar.Diagram`, a :py:class:`.grammar.Functor` should be used. Further, the word \"very\" modifies an adjective to return another adjective, so it should have type \n", - ":math:`(n \\otimes n^l) \\otimes (n \\otimes n^l)^l = n \\otimes n^l \\otimes n^{ll} \\otimes n^l`." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BobcatParser\n", - "parser = BobcatParser(verbose='suppress')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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rF9++UWS9M4772j48OFKSkpy1qoBQJWEhITIx8fH4TfhuDKsWrXK6BJQAR8fH4WEhBhdBuBUhP3LdPbsWY0fP17x8fHKycnRpEmT1L9/f23fvr3W3DquJixevFgjR47Upk2btGXLFj3wwAOKiorS/fff7zCd1WpVv379FBUVpY0bN+q3336r8s8QapuK2qCwsFDTp09XixYtdOLECY0fP16JiYn64osvJEkHDx7UgAED9PDDD+uBBx7Qli1b6mS7dO3aVb/99pu2bdumjh076ptvvlFISIiSk5Pt03zzzTd64oknlJKSojvvvFNTpkzRXXfdpe+++05//etfFRwcrMTExFLL3rx5s4YNGyY/Pz/NnTu3SteXAABni4qKUlpamjIzMys132233aaEhAQ99NBDNVRZ3bF161bdf//9+vDDD9WoUSOjyzHczJkztXv3bi1ZssToUmqFLl26aMyYMbrnnnsqNV9ISIiioqJqqCqgdiLsX6aBAwc6vF64cKFCQ0O1a9euCq/GX9c1bNhQs2fPlsViUYsWLZSamqrZs2eXCvtffvml9u3bp+TkZIWHh0v6/T+tXr16GVF2taqoDUaMGGGfruRshk6dOiknJ0f16tXT/Pnzdc011+gf//iHJNnnf+GFF4xanSrx9/dX27ZtlZycrI4dOyo5OVnjxo3T1KlTlZOTo9OnT2vv3r3q3r27pkyZop49e+qZZ56RJDVv3ly7du3SSy+9VGbYDw0Nlaenp7y9ve3bDgDUBVFRUZUOFR4eHoqIiLDfDu5KdvbsWUlS69at6/R1l6pLSEiIfH192Tb+PxcXFzVs2JD2AC6BeQ89O8mePXt0zz33qGnTpvLz81Pjxo0lSRkZGcYWVsM6d+7scKX266+/Xnv27JHVanWYLj09XQ0bNnQIa9dee63T6qxJFbVBSkqK+vbtq6ioKNWvX1/du3eX9Md2kZaWpuuuu85heXX1dj3du3dXcnKybDab1q1bpwEDBigmJkbffvutvvnmG0VGRio6OlppaWnq0qWLw7xdunQpc7sBAAAAcHkI+5epb9++ysrK0ptvvqmNGzdq48aNksTtvq5g586dU+/eveXn56dly5Zp8+bN+uijjySZc7vo0aOHvv32W+3YscN+u6IePXooOTlZ33zzjb2jAwAAZ0lMTKzT1wWqbhdrj6SkJAUEBDitHqOxfeBKQdi/DCdPnlR6err+/ve/q2fPnoqJian0Pc7rqpJOjRLff/+9oqOjS92nvkWLFjp48KCOHz9uH7d582an1FjTymuD3bt36+TJk3r++efVtWtXtWzZUidOnHCYNiYmRps2bSo1f11U8rv92bNn24N9SdhPTk5Wjx49JP2+zuvXr3eYd/369WrevHmp7QYAAADA5SHsX4bAwEAFBwdrwYIF2rt3r9asWaPx48cbXZZTZGRkaPz48UpPT9e7776refPmaezYsaWm69Wrl6655hoNHz5cO3fu1Pr16/X3v/9dkhxOga+LymuDqKgoeXh4aN68edq/f78++eQTTZ8+3WHe0aNHa8+ePXr88ceVnp6u5cuX19krzQcGBio+Pl7Lli2zB/tu3bpp69at+umnn+wdABMmTNDq1as1ffp0/fTTT1q8eLFeffVVPfbYYwZWDwAAAJgTYf8yuLi4aMWKFUpJSVFsbKzGjRunl156yeiynGLYsGHKy8vTtddeq4cfflhjx47VAw88UGo6V1dXrVy5Ujk5OerUqZNGjRqlp59+WpLk5eXl7LKrVXltEBoaqqSkJL3//vtq1aqVnn/+ec2aNcth3qioKH3wwQdauXKl2rRpo9dff13PPvusQWty+bp37y6r1WoP+0FBQWrVqpXCw8PVokULSVL79u313nvvacWKFYqNjdWkSZM0bdq0Mi/OBwD4/SypRx55RH/7298UFBSk8PBwTZkyxeiyDEFbOKI9HNEeQNm4Gv9luuWWW7Rr1y6HcTabzaBqnOP826rNnz+/1PsHDhxweN2yZUt9++239tclp3I3a9asRupzhou1wT333FPqljAXbhcJCQlKSEhwGHffffdVX5FONGfOHM2ZM8dh3Pbt20tNN3DgwFJ3sDjfhdvOypUrL784AKjDFi9erPHjx2vjxo3asGGDEhMT1aVLF1Pc1aayaAtHtIcj2gMozfRh//333zfVbbt+/fXXy5r37bffrsZqLs3WrVvl6empBg0a6MSJE1qxYoWaNWtm/0335UhJSanyvBs2bJCvr+9lfX5tc+rUqSrPu2TJEtWrV6/6ijHYzz//bHQJAHDZ4uPjNXnyZElSdHS0Xn31Va1evfqKDDC0hSPawxHtAZRm2rDftGlTRURE2H8fbiYNGjRQdHR0pea58cYbtWDBAo0aNaqGqqq86qpl0KBB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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.drawing import draw_equation\n", - "from lambeq.backend.grammar import Diagram, grammar, Functor\n", - "\n", - "# determiners have the same type as adjectives\n", - "# but we shouldn't add 'very' behind them\n", - "determiners = ['a', 'the', 'my', 'his', 'her', 'their']\n", - "\n", - "# type for an adjective\n", - "adj = n @ n.l\n", - "very = Word('very', adj @ adj.l)\n", - "cups = Diagram.cups(adj.l, adj)\n", - "\n", - "def very_ob(_, ty):\n", - " return ty\n", - "\n", - "def very_ar(_, box):\n", - " if box != very:\n", - " if box.name not in determiners:\n", - " if box.cod == adj:\n", - " return very @ box >> Id(adj) @ cups\n", - " return box\n", - "\n", - "very_functor = Functor(grammar,\n", - " ob=very_ob,\n", - " ar=very_ar,)\n", - "\n", - "diagram = parser.sentence2diagram('a big bad wolf')\n", - "new_diagram = very_functor(diagram)\n", - "\n", - "draw_equation(diagram, new_diagram, symbol='->', figsize=(10, 4))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Example 2: Twist functor" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this :term:`functor`, :term:`cups ` and :term:`caps ` are treated specially and are not passed to the ``ar`` function; instead they are passed to :py:meth:`.grammar.Diagram.register_special_box` method.\n", - "\n", - "Here is an example of how to map a :term:`cup` to a custom diagram, such as a \"twisted\" :term:`cup`. Note that it is up to the user to ensure the new :term:`cups ` and :term:`caps ` satisfy the :term:`snake equations`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAChCAYAAAB55y8LAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAX0UlEQVR4nO3de1BU9/3/8deBBWQBQUQREPGGCApUtNbqKIwxamusRmMzbWOGoUUz0TpJJ2nqdGqNGcfvOMl4aUebW7GO1hiNmCYZkxgrWqshAS+AF4LxgkZGRaNG0HLZ/f3hsD9RIOIBzrL7fMyc4XB2Ofvej+t7X+eyZw2n0+kUAAAA8JB8rC4AAAAAnRuBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYIrN6gJaUl5ersrKSqvLcImIiFCfPn2sLqNduNtYA4AZ9Gt4Ind+XbttoCwvL1diYqKqq6utLsXFbrfr+PHjbvuP+bDccawBwAz6NTyRO7+u3TZQVlZWqrq6Whs2bFBiYqLV5ej48eN66qmnVFlZ6Zb/kGa421gDgBn0a3gid39du22gbJCYmKi0tDSry/AKjDUAdA70a7gbj/tQTl5engzD0LVr15q9z+LFi/WDH/ygw2oCvFVGRoaee+45q8sA0En07dtXK1eu9JrH9SSdKlAahtHitHjx4gdazwsvvKBdu3a1b7EAtG3bNr3yyitWlwGgg5jdiPzyyy81Z86cB7ovIdC9uP0h77tVVFS45jdv3qxFixaptLTUtSw4OFgFBQXfu57g4GAFBwe3S40A/r/w8HCrSwDQifTo0cPqEvCQOtUeyl69ermm0NBQGYbRaNndIbGwsFAjRoyQ3W7X6NGjGwXPew955+XlaeTIkQoKClJYWJjGjBmjs2fPduRTAzzS3Xsr1qxZo/j4eHXp0kWRkZF64oknrC0OQJvKzMzUnj17tGrVKteRw4iICL366quu+0yfPl1+fn66efOmJOn8+fMyDEMnT56U1Hivo9Pp1OLFi9WnTx8FBAQoOjpaCxYskHSnt5w9e1bPP/+867Ea7Nu3T2PHjlVgYKBiY2O1YMECVVVVuW6/dOmSpk6dqsDAQPXr108bN25s76HxCp0qULbGH//4R7322msqKCiQzWZTVlZWk/erq6vT9OnTlZ6erqKiIh04cEBz5sxp9OIEYE5BQYEWLFigJUuWqLS0VB9//LHGjRtndVkA2tCqVav04x//WNnZ2aqoqFBFRYVmz56tvLw8SXcC4n/+8x+FhYVp3759kqQ9e/YoJiZGAwcOvG997733nlasWKHXX39dZWVl2r59u5KTkyXdOZ2md+/eWrJkieuxJOnrr7/W5MmTNXPmTBUVFWnz5s3at2+f5s+f71pvZmamzp07p927d2vr1q1as2aNLl261M6j4/k61SHv1li6dKnS09MlSX/4wx80ZcoU3b59W126dGl0vxs3buj69et67LHHNGDAAEniUgxAGysvL1dQUJAee+wxhYSEKC4uTsOGDbO6LABtKDQ0VP7+/rLb7erVq5ckafz48crJyVF9fb1KSkrk7++vJ598Unl5eZo8ebLy8vJc79X3Ki8vV69evTRhwgT5+fmpT58+GjlypKQ7p9P4+voqJCTE9ViStGzZMv3qV79yHRmJj4/X6tWrlZ6errVr16q8vFw7duzQF198oR/+8IeSpLfffpv3/TbgsXsoU1JSXPNRUVGS1OQWSHh4uDIzMzVp0iRNnTpVq1atanSuJgDzHn30UcXFxal///6aPXu2Nm7cyIWZAS8wduxYfffddzp06JD27Nmj9PR0ZWRkuPZa7tmzRxkZGU3+7axZs3Tr1i31799f2dnZys3NVV1dXYuPd+TIEa1bt871WYng4GBNmjRJDodDp0+f1vHjx2Wz2TR8+HDX3wwePFhhYWFt9Iy9l8cGSj8/P9d8w+Frh8PR5H1zcnJ04MABjR49Wps3b9agQYP0+eefd0idgDcICQnRwYMHtWnTJkVFRWnRokVKTU1t8fJeADq/sLAwpaamKi8vzxUex40bp0OHDumrr75SWVlZs3soY2NjVVpaqjVr1igwMFDPPvusxo0bp9ra2mYf7+bNm5o7d64OHz7smo4cOaKysjLXUUi0D48NlK01bNgwLVy4UPv379fQoUP1z3/+0+qSAI9is9k0YcIELV++XEVFRTpz5oz+/e9/W10WgDbk7++v+vr6RsvS09O1e/du7d27VxkZGQoPD1diYqKWLl2qqKgoDRo0qNn1BQYGaurUqVq9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rVs35efna+LEicrKytKYMWO0fft23bp1y+rSOq1jx47ppZde0pAhQ3Ts2DHl5uZqzpw5VpcFoJN7/PHH9dlnn+ny5ctKS0vTvHnzdOjQIfZYPqSamhrt2LFDkyZN0qxZs5SWlqbCwkLFxsZaXRo8jFcESunOd5Fu2LBBeXl5qq2t1eOPP66ePXvql7/8pXJzc3Xz5k2rS3RrDodDJSUlevnllzVkyBANGTJEa9eu1Ysvvqhjx45p+vTpMgzD6jIBeIBHHnlER44c0bJly/TOO+8oLS1N8fHxWrhwoQoLC1VfX291iW7t1q1b2rFjh7KyshQZGamf/vSnOn/+vD744AO9//776tevn9UlwgN53XUo09PTVVBQoBMnTmjLli3asmWLNm3aJEnq37+/UlJSlJyc7JoGDhwom827hqmyslLFxcWNppKSElVVVSkkJETTpk3TsmXLNHHiRHXp0sXqcgF4IH9/f7344ot67rnntHv3br377rt644039H//938KDAxUUlJSo16dnJysyMhIr9qwdTgcOnXqlKtPFxUVqbi4WCdPnpTD4VB8fLzmzZunWbNmKSUlxavGBh3PcHIcQaWlpdq/f3+jAHXx4kVJUkBAgKtxDRgwQN26dWt2CggIsPiZNM/hcOjGjRv69ttv75uuXr2qS5cuqaSkRMXFxaqoqJB0p6Hf3bRTU1M1btw4QqQbyM7OVlFRkfLz860uxeP97Gc/kyT961//srgS1NbW6r///a8OHTrk6tVHjx51nb4UERGhlJQUDR06VFFRUc326tDQULc+f7C2tva+Hn3372fPnlVRUZGOHj2q6upqSVL37t0bhesf/ehHSk5OJkS6gS5duujVV1/V/PnzrS6lXXnXrrdmJCQkKCEhodGyy5cvN9riKy4u1qeffqqrV6+qpqamyfUEBgY2alrh4eH3NbLg4GD5+vrKZrM1+nnvMpvNJofDobq6OtXX17f4s6ampsmgePd0/fr1Jj+MZBiGQkNDFRERoaSkJGVlZbkaUnx8vPz8/NplzAGgtfz8/JSRkaGMjAzXsvr6en399deNdgh88sknunTpkq5du9bkuZeGYahr165N9uh7dxI01a+b+llbW/u9vbq+vl5VVVXf26+rqqqaff7dunVTTEyMkpOT9fOf/9x1VK1Xr16ER1iKQNmMHj16aPz48Ro/fnyj5U6nU7du3frehtAwlZWVNdrCbC6M3istLU0HDx58oPs2hMJ7m2G/fv2abZQNjbRr165uvaUOAC3x9fXVoEGDNGjQIM2cObPRbS0dmWnqSM3p06ddvzcXRpsyevRo7d+//4Hu2xAK75569+6t5OTkFndGdOvWTXa7ndAIt0WgbCXDMGS322W321v9LQNOp1P19fWNpnu3XhvmHQ6HDMNodi/mvfM+Pl7z+SoAeCA+Pj4KCwtTWFhYqz+I4nQ67+vLzfVth8PRYo++e5mvry+hEB6JQNmBDMNwHc4GALgvwzDk5+fHaT/AA2K3FgAAAEwhUAIAAMAUAiUAAABMIVACAADAFAIlAAAATCFQAgAAwBQCJQAAAEwhUAIAAMAUAiUAAABMIVACAADAFAIlAAAATCFQAgAAwBQCJQAAAEwhUAIAAMAUAiUAAABMIVACAADAFAIlAAAATCFQAgAAwBQCJQAAAEwhUAIAAMAUAiUAAABMIVACAADAFAIlAAAATCFQAgAAwBQCJQC0IC4uTiEhIVaXAaATqq+vV1JSkrp162Z1Ke2OQAkALYiMjNQ777yjnJwcORwOq8sB0ElUVVXpmWee0eHDhzVgwACry2l3BEoAaMHChQs1e/ZsZWVlKT4+XsuXL9fly5etLguAmyopKdFvf/tbRUdH6+9//7tycnI0atQoq8tqd4bT6XRaXQSA1snOzlZRUZHy8/OtLsUrOJ1Off7551q7dq3effddOZ1OjRo1SsOHD9eIESM0fPhwxcfHy8eHbXTAm9y+fVvFxcUqKChQYWGhvvzySxUVFSkyMlK//vWvlZ2drb59+1pdZocgUAKdEIHSOleuXNHGjRu1b98+FRQU6PTp05KkkJAQDRs2zBUwU1NTFRcXp+DgYIsrBmCW0+nUlStXdOrUKR08eFCFhYUqKChQSUmJ6urqZLPZNHToUA0fPlyTJk3StGnT5O/vb3XZHYpACXRCBEr3cfXqVdcbTMObTEPIlKTQ0FDFxsaqd+/erp93z8fGxhI6AQs1hMVz587p/PnzOn/+vGv+7mW3b9+WpEbhsWFKSUlRly5dLH4m1iJQAp0QgdK9Xb16VUePHm3yjencuXO6ePFio/s3hM7IyEiFhoY2msLCwu5bdvcUEBBg0bME3IfT6VR1dbWuX79+33Tt2rVml1+4cKFRWJTuBMaYmJgmNwDj4uI0ZMgQrw+PTbFZXQAAeJrw8HCNHTu22dtramr0zTff3Lc35OLFi7p+/bouXLjQ6I2vqqqq2XUFBAQ0GTS/L4iGhITI39/fNfn5+bnmfX19ZRhGewwNIKfTqdraWtXU1Lh+Nszfvn1bN27caDIAthQOr1+/rvr6+iYfzzAMde3a9b7/A7GxsRo5cuR9RxAiIyM5H/ohECgBoIP5+/urX79+6tev3wPdv66uzvUm29Ib6t3T3aH02rVrqq6ubnWN9wZNd5338/OTYRgyDEM+Pj6ueU/kdDrvmxwOx33BrC3m23Jdd8/X1dU98PNtLgzGxMQoKSnpgTamgoODCYgdgEAJAG7OZrMpPDxc4eHhD72O2traRnt+vvvuu2b3EpkJHVVVVa3+m/bUVNC8e2pueWv+JiUlRUVFRa5w11zoa2p5a/+mPccpICCg2fDeXJi32+0PFP4fdCPB39+/UYAMCQkhDHYSBEoA8AJ+fn7q3r27unfvbnUpjTidTtXX15vec/ag4a09bg8NDVVaWtr3BtT2ut3Hx6fVoe3e23x9fa1+KaCTI1ACACxjGIZsNptsNpvsdrvV5QB4SOxHBgAAgCkESgAAAJhCoAQAAIApBEoAAACYQqAEAACAKQRKAAAAmEKgBAAAgCkESgAAAJhCoAQAAIApBEoAAACYQqAEAACAKQRKAAAAmEKgBAAAgCkESgAAAJhCoAQAAIApBEoAAACYQqAEAACAKQRKAAAAmEKgBAAAgCkESgAAAJhCoAQAAIApBEoAAACYQqAEAACAKQRKAAAAmEKgBAAAgCkESgAAAJhCoAQAAIApBEoAAACYQqAEAACAKQRKAAAAmEKgBAAAgCkESgAAAJhCoAQAAIApBEoAAACYYjidTqfVRQBonXPnzun27duKj4+3uhQAAAiUAAAAMIdD3gAAADCFQAkAAABTCJQAAAAwhUAJAAAAUwiUAAAAMIVACQAAAFMIlAAAADCFQAkAAABTCJQAAAAwhUAJAAAAUwiUAAAAMIVACQAAAFMIlAAAADCFQAkAAABTCJQAAAAwhUAJAAAAUwiUAAAAMIVACQAAAFMIlAAAADCFQAkAAABT/h87h4o2Tf4bngAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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OBzatGmT60U5RUVFkhofr3LNNde4/gfu3bt3hz5exWKxKDg4WMHBwef9jjXV1dXavn17o4H9zDPPuM4LFxwc7Dr4+4YbblD37t3d8SMA8HFOp1ObN2/WihUr9MEHH2j37t2Sfnp6OiEhQXa7XZMnT3bN5T59+nT4N1Sw2Wyy2WyKjY09r687fvy4vv3220Zz+YUXXnAd12+z2TRq1Cilp6crLS2Nt76F6XzuRTnFxcVatGiR3nnnHX333XeKiYnRjTfe6DptEMer/MTpdOrHH39sdNqgzMxMWSwWXX755br11lt10003dfhh7k14UY778aIcc3z33XdatGiRVq5cqf379ys6Olo33HCDRo8eLbvdrsTERN7x5V9OHdd/6rRB69atk9Pp1IQJE/TLX/5S//Ef/8HKZTviRTn/5jOFsqamRn/961/12GOPqXPnzrrppps0bdo0jR49mlLUSocOHdK7776rFStWaP369Ro9erSeffZZXXLJJWZH8wkUSvejULavuro6LVmyRI8++qiCgoI0ffp0paena9y4cZSiVjpy5Ijee+89rVixQmvXrtXw4cP13HPPacSIEWZH8wkUyn/ziSb1ww8/KCkpSfPnz9dvfvMb7dmzR0uXLtXYsWMpk+chKipKd911lz7//HOtX79eZWVlSklJ0cKFC82OBsDDHD16VMOGDdODDz6oW2+9Vbt379azzz6r1NRUyuR56N69u26//XatWbNGX375perq6nTZZZfpT3/6k9nR4GO8/hhKh8OhjIwMlZeXKzc3V0OGDDE7kldITU1Vbm6u5syZozlz5mjkyJEaM2aM2bEAeACn06k77rhD33//vbKzs5WcnGx2JK8wZswYZWdna968eXrkkUc0cuRITZw40exY8BFevzz3yiuv6B//+IdeffVVymQbCwgI0FNPPaVRo0bplltuafa0RQBwpuXLl2vVqlV66aWXKJNtzGq16k9/+pMmTpyomTNnnvXUSUBb8vpCmZOTo1GjRunKK680O4pXslqteuihh1RaWqoDBw6YHQeAB9iyZYuSk5N1ww03mB3FK/n5+ekPf/iDqqqqtG/fPrPjwEd4faHct2+fIiMjzY7h1aKjo1VRUeE6zRAAnM3+/ft572k3i46OVmVlpQ4fPmx2FPgIry+UUtN3okHb4oVNAM4Xc9m9mMtob/zGAQAAwBAK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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.grammar import Category, Ty, Layer, Diagram, Functor, Box, Cup, Cap, Swap\n", - "\n", - "\n", - "twisted = Category('twisted')\n", - "\n", - "@twisted('Diagram')\n", - "class TwistedDiagram(Diagram): ...\n", - "\n", - "@twisted('Ty')\n", - "class TwistedTy(Ty): ...\n", - "\n", - "@twisted('Box')\n", - "class TwistedBox(Box): ...\n", - "\n", - "@twisted('Layer')\n", - "class TwistedLayer(Layer): ...\n", - "\n", - "class TwistedCup(Cup, TwistedBox): ...\n", - "\n", - "class TwistedCap(Cap, TwistedBox): ...\n", - "\n", - "@TwistedDiagram.register_special_box('swap')\n", - "class TwistedSwap(Swap, TwistedBox): ...\n", - "\n", - "@TwistedDiagram.register_special_box('cap')\n", - "def twisted_cap_factory(left, right, is_reversed=False):\n", - " caps = TwistedCap(right, left, is_reversed=not is_reversed)\n", - " swaps = TwistedSwap(right, left)\n", - " return caps >> swaps\n", - "\n", - "@TwistedDiagram.register_special_box('cup')\n", - "def twisted_cup_factory(left, right, is_reversed=False):\n", - " swaps = TwistedSwap(left, right)\n", - " cups = TwistedCup(right, left, is_reversed=not is_reversed)\n", - " return swaps >> cups\n", - "\n", - "\n", - "twist_functor = Functor(\n", - " ob=lambda _, ty: TwistedTy(ty.name),\n", - " ar=lambda func, box: TwistedBox(box.name, func(box.dom), func(box.cod)),\n", - " target_category=twisted)\n", - "\n", - "diagram = parser.sentence2diagram('This is twisted')\n", - "twisted_diagram = twist_functor(diagram)\n", - "\n", - "draw(diagram)\n", - "draw(twisted_diagram)\n", - "\n", - "snake = Id(n) @ Cap(n.r, n) >> Cup(n, n.r).to_diagram() @ Id(n)\n", - "draw_equation(twist_functor(snake), Id(n), figsize=(4, 2))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "TwistedDiagram.cups(n, n.r).draw(figsize=(2, 2))\n", - "TwistedDiagram.caps(n.r, n).draw(figsize=(2, 2))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - " \n", - " Twisting the nested :term:`cups ` for \"is\" and \"twisted\" together is **not** a functorial operation, so it cannot be implemented using :py:class:`.grammar.Functor`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Classical DisCoCat: Tensor networks" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The classical version of :term:`DisCoCat` sends diagrams in the :term:`category` of pregroup derivations to tensors in the :term:`category` of vector spaces **FVect**. **FVect** is a :term:`monoidal category` with vector spaces (e.g. :math:`\\mathbb{R}^2 \\otimes \\mathbb{R}^2`) as objects and linear maps between vector spaces as morphisms. It is in fact a :term:`compact closed category`, which is a special case of rigid categories where :math:`A^l = A^r = A^*`.\n", - "\n", - "Using the :py:mod:`lambeq.backend.tensor` module, you can define a free :term:`category` of vector spaces: objects are defined with the :py:class:`lambeq.backend.tensor.Dim` class and morphisms with the :py:class:`lambeq.backend.tensor.Box` class. Composite morphisms are constructed by freely combining the generating morphisms using the ``>>`` operator. This is similar to how :term:`rigid categories ` and :term:`monoidal categories ` are defined. The concrete value of the tensor is passed to the ``data`` attribute as an unshaped list; ``lambeq`` will reshape it later based on the input and output dimensions.\n", - "\n", - "It is worth noting that :py:class:`lambeq.backend.tensor.Diagram` delays the computation of tensor contractions until :py:meth:`.tensor.Diagram.eval` is called." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dim(1) @ Dim(2) @ Dim(3)=Dim(2, 3)\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "from lambeq.backend.tensor import Box, Diagram, Dim, Id\n", - "\n", - "# Dim(1) is the unit object, so disappears when tensored with another Dim\n", - "print(f'{Dim(1) @ Dim(2) @ Dim(3)=}')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "id_box.eval()=array([[1., 0.],\n", - " [0., 1.]])\n" - ] - } - ], - "source": [ - "id_box = Box('Id Box', Dim(2), Dim(2), data=[1,0,0,1])\n", - "id_tensor = np.array([1, 0, 0, 1]).reshape((2, 2))\n", - "\n", - "# the actual values of id_box and id_tensor are equal\n", - "assert (id_box.array == id_tensor).all()\n", - "print(f'{id_box.eval()=}')" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the :term:`category` of vector spaces, :term:`cups `, :term:`caps ` and :term:`swaps ` take on concrete values as tensors." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 0, 0],\n", - " [0, 1, 0],\n", - " [0, 0, 1]])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Diagram.cups(Dim(3), Dim(3)).eval(dtype=np.int64)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[[[1, 0],\n", - " [0, 0]],\n", - "\n", - " [[0, 0],\n", - " [1, 0]]],\n", - "\n", - "\n", - " [[[0, 1],\n", - " [0, 0]],\n", - "\n", - " [[0, 0],\n", - " [0, 1]]]])" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Diagram.swap(Dim(2), Dim(2)).eval(dtype=np.int64)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To implement a :term:`functor` from :py:class:`.grammar.Diagram` to :py:class:`.tensor.Diagram`, use a :py:class:`.grammar.Functor` with ``target_category = lambeq.backend.tensor.tensor``, and with :py:class:`.tensor.Dim` and :py:class:`.tensor.Diagram` as ``cod``, respectively. In addition, :py:class:`.tensor.Diagram`\\ s can be instantiated with concrete values to be evaluated later using a custom tensor contractor. See the implementation of :py:class:`~lambeq.ansatz.tensor.TensorAnsatz` for an example." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\"This\" becomes\n", - "[1. 1.]\n", - "\"is\" becomes\n", - "[[[[1. 1.]\n", - " [1. 1.]]\n", - "\n", - " [[1. 1.]\n", - " [1. 1.]]]\n", - "\n", - "\n", - " [[[1. 1.]\n", - " [1. 1.]]\n", - "\n", - " [[1. 1.]\n", - " [1. 1.]]]]\n", - "\"twisted\" becomes\n", - "[[1. 1.]\n", - " [1. 1.]]\n", - "one_diagram = Diagram(dom=Dim(1), cod=Dim(2), layers=[Layer(left=Dim(1), box=[This; Dim(1) -> Dim(2)], right=Dim(1)), Layer(left=Dim(2), box=[is; Dim(1) -> Dim(2, 2, 2, 2)], right=Dim(1)), Layer(left=Dim(2, 2, 2, 2, 2), box=[twisted; Dim(1) -> Dim(2, 2)], right=Dim(1)), Layer(left=Dim(2, 2, 2, 2), box=[CUP; Dim(2, 2) -> Dim(1)], right=Dim(2)), Layer(left=Dim(2, 2, 2), box=[CUP; Dim(2, 2) -> Dim(1)], right=Dim(1)), Layer(left=Dim(1), box=[CUP; Dim(2, 2) -> Dim(1)], right=Dim(2))])\n" - ] - }, - { - "data": { - "image/png": "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tXXotXXotXXotTXos3Wc2Ougfpd3R/roo4+a/Xv9+vVKTExUSUmJJk2aZFNVzkSvrUOvrUOvrUOvrUGfrePEXofsDOXdampqJEnx8fE2V+J89No69No69No69Noa9Nk6Tug1gVKS3+/XkiVLNGHCBI0cOdLuchyNXluHXluHXluHXluDPlvHKb0O2VPeTeXn56u8vFx79uyxuxTHo9fWodfWodfWodfWoM/WcUqvQz5QLlq0SB988IF2796tPn362F2Oo9Fr69Br69Br69Bra9Bn6zip1yEbKA3D0NNPP63t27ersLBQ/fv3t7skx6LX1qHX1qHX1qHX1qDP1nFir0M2UObn5+vNN9/Ujh075PV69Z///EeSFBsbq+joaJurcxZ6bR16bR16bR16bQ36bB0n9jpk35Szbt061dTUKDc3V8nJyYFly5YtdpfmOPTaOvTaOvTaOvTaGvTZOk7sdcjOUBqGYXcJIYNeW4deW4deW4deW4M+W8eJvQ7ZGUoAAAC0D8cHysTERGVlZam+vt7uUhzP7/dr3LhxdpcBoJPKyspSZGSk3WWEhLS0NKWkpNhdBhzE8YGyd+/e+uyzz7Rt2za7S3G0uro6bd26Vf/73//sLgVAJ+VyufTuu+/qypUrdpfiaLt27dLu3buVmJhodylwEMcHygkTJuixxx7Tk08+qaqqKrvLcSTDMPSb3/xG586d08qVK+0uB0AntWzZMtXX1ysvL8+RrzELBlevXtXcuXOVm5urmTNn2l0OHMTxgdLlcun111+X1+vVmDFjVFBQIL/fb3dZjnHixAlNnz5dr732mlatWqWhQ4faXRKATiolJUV/+ctftH37duXk5Ki0tNTukhzDMAy98847ysrKUl1dnTZs2KDw8HC7y4KDOD5QSlL37t114MABTZkyRfPnz9eECRP03nvv6ebNm3aX1mkdO3ZMzz//vEaMGKFjx45p+/btWrBggd1lAejkHn30UX366ae6fPmysrOzlZ+fr0OHDjFj+R3dvn1bO3fu1NSpUzVnzhxlZ2erpKREqampdpcGhwmJQClJycnJ2rhxowoLC1VfX69HH31UiYmJ+vnPf67t27frxo0bdpcY1Px+v8rLy/WHP/xBI0aM0IgRI7Ru3To999xzOnbsmGbNmiWXy2V3mQAc4Ic//KGOHDmilStX6q233lJ2drbS09O1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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import numpy as np\n", - "from lambeq.backend.grammar import Functor\n", - "from lambeq.backend import tensor\n", - "\n", - "\n", - "def one_ob(_, ty):\n", - " dims = [2] * len(ty)\n", - " return Dim(*dims) # does Dim(2,2,..)\n", - "\n", - "def one_ar(_, box):\n", - " dom = one_ob(_, box.dom)\n", - " cod = one_ob(_, box.cod)\n", - " box = Box(box.name, dom, cod, np.ones((dom @ cod).dim))\n", - " print(f'\"{box}\" becomes')\n", - " print(box.data)\n", - " return box\n", - "\n", - "one_functor = Functor(\n", - " target_category=tensor.tensor,\n", - " ob=one_ob, ar=one_ar,\n", - ")\n", - "one_diagram = one_functor(diagram)\n", - "print(f'{one_diagram = }')\n", - "one_diagram.draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Quantum DisCoCat: Quantum circuits" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The quantum version of :term:`DisCoCat` sends diagrams in the :term:`category` of pregroup derivations to :term:`circuits ` in the category of Hilbert spaces **FHilb**. This is a :term:`compact closed ` monoidal category with Hilbert spaces (e.g. :math:`\\mathbb{C}^{2^n}`) as objects and unitary maps between Hilbert spaces as morphisms.\n", - "\n", - "The :py:mod:`lambeq.backend.quantum` module is a framework for the free :term:`category` of :term:`quantum circuits `: objects are generated using the :py:class:`.quantum.Ty` class and morphisms by using the available :term:`quantum gates ` which are subclasses of :py:class:`.quantum.Box`. In ``lambeq``, rotation values range from :math:`0` to :math:`1` rather than from :math:`0` to :math:`2\\pi`. The circuit can then either be evaluated using tensor contraction with the :py:meth:`~lambeq.backend.quantum.Diagram.eval` method, or exported to :term:`pytket` using the :meth:`~lambeq.backend.quantum.Diagram.to_tk` method, which supports multiple hardware backends." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAFcCAYAAAB2nC54AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAhvklEQVR4nO3dfXBU9dnG8Wt3A8iCEkwQcXA1wFBjAySBgCDTSoLWlzYBXzpNSDCWUYolTDsjtlpGSkdnfBymdJJQTKeKlkDUUjXAUKwQ6sigJBKC4aW2EEkGFEpCEwmLidk9zx+YlUje4JfknCTfzwwzeva3Z2+Wm5trT84567IsyxIAAABwhdx2FwAAAIDejUAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQduDMmTMqLy+XZVl2lwK0q76+XuXl5WpsbLS7FKBdjY2NKi8vV319vd2lAO2yLEvl5eU6c+aM3aU4HoGyA4WFhZo4caKCwaDdpQDtKi4u1sSJE3X8+HG7SwHadfz4cU2cOFHFxcV2lwK0KxgMauLEiSosLLS7FMcjUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMBImN0FAAAAfFtVVZWqq6ttrSEQCEiSKisrVVpaamstkhQZGSmfz2d3Ga0iUAJ9hMvl0pgxY2RZlt2lAO2yLEtjxoyRy+WyuxQ4VFVVlaKjo+X3++0uRZK0YsUKrVixwu4y5PV6dfjwYUeGSgIl0EdYlqWKigr+kYbjuVwuVVRU8OEHbaqurpbf71d+fr6io6PtLscRDh8+rPT0dFVXVxMoAQAAOis6Olrx8fF2l4FO4KIcAAAAGCFQAgAAwAiBEgAAAEY4hxIA0GNqa2u1e/duSVJBQYEOHDigmJgYxcfHKzw83N7iAFwxAiUAoNsVFRUpJydHmzZtUjAYlCT9+c9/1sCBA9XY2Ci3263k5GRlZWUpMTHR5moBXC5+5A0A6DY1NTVKS0tTUlKSjh49qpycHL399tuhx0+fPq1Dhw4pJydHR48eVVJSktLS0lRTU2Nf0QAuG4ES6APKysq0ZcsWSRd+jFhWVmZvQYCkTz/9VAkJCdq2bZvy8/O1f/9+Pf744xo7dmxojcfjUXR0tB5//HHt379f+fn52rZtmxISEvTpp5/aWD2Ay0GgBHqpQCCg/Px8TZ06VXFxcVq1apUkadmyZYqLi9PUqVOVn58f+uowoCfV1NQoKSlJYWFhKisr07x58zq86b7L5dK8efNUVlamsLAwJSUlcaQS6CUIlEAvdP78eT3wwAPKyMjQ3r17W12zd+9eZWRk6MEHH9T58+d7uEL0d1lZWaqtrdX27dsv+1s9fD6ftm/frtraWi1ZsqSbKgTQlQiUQC8TCASUmpqqzZs3S1LoAodva96+adMmpaWlcaQSPaaoqEgFBQXKycm54q+I8/l8ys7O1oYNG1RUVNTFFQJtCwQCmjFjhu6///4W2+vq6nTjjTfqN7/5jU2VORuBEuhlCgoKVFhY2GaQ/LZgMKi3335bBQUF3VwZcEFOTo4mTpyotLQ0o/3MmzdPEyZMUG5ubhdVBnTM4/HolVde0bZt27R+/frQ9qysLF177bVavny5jdU5F4ES6GWys7Pldl/eX123263s7Oxuqgj4Rm1trTZt2qSFCxd2eM5kR1wulxYuXKjCwkLV1dV1UYVAx8aPH6/nn39eWVlZ+vzzz1VYWKjXXntNf/nLXzRw4EC7y3Mk7kMJ9CJlZWUqKSm57OcFg0GVlJSorKxMsbGxXV8Y8LXS0lIFg0FNmzZN586da3WN3+8P/Xdba5pNmzZNwWBQpaWlmjVrVpfWCrQnKytLb731ljIyMlReXq5nnnlGkyZNsrssxyJQAr1IcXGx0fP/7//+T7fffnsXVQNc6p///KckacqUKZ1aP3LkyA7XDBw4UAcOHCBQoke5XC6tWbNG0dHRmjBhgn7961/bXZKjESiBXuTs2bPyeDxXfIHNxo0b9dZbb3VxVcA3uuPiryFDhrQ4qgn0lJdffller1effvqpjh8/rptvvtnukhyLQAn0IldffbXRP9irV6/WY4891oUVAS1lZ2dr6dKlOn36tDweT6trDh48qGnTpkmSTp06pSFDhrS5v0AgoBEjRsjr9XZLvUBbdu/erVWrVukf//iHnn32WS1YsEDbt283Pje4ryJQAr3I1KlTbX0+0JGYmBg1NjbqxIkTio6ObnXNxeFwyJAh7QbKQ4cOqbGxUTExMV1eK9AWv9+vzMxMLVq0SLNmzVJUVJQmTJigF198UYsWLbK7PEfiKm+gF4mNjVVCQsIVXeWdkJDABTnodvHx8XK73dq5c2eX7G/nzp1yu92Kj4/vkv0BnfHUU0/Jsiw9//zzkqSbb75ZK1eu1JNPPqljx47ZW5xDESiBXmbJkiWdvgdls2AwyDeOoEeEh4crOTlZeXl5sizLaF+WZSkvL08pKSkaNmxYF1UItO+9997T6tWrtXbt2hZH0xcuXKgZM2ZowYIFxr3dFxEogV4mNTVVc+bM6fRRSrfbrblz5yo1NbWbKwMuyMrK0scff6wNGzYY7Wf9+vUqLy/X4sWLu6gyoGPf//731dTUpJkzZ17y2DvvvKMdO3ZwHmUrCJRAL+PxeLRhwwYlJydLUpvBsnl7cnKy1q9f3+YFEkBXS0xMVGpqqrKyslRVVXVF+6isrNSSJUuUlpamxMTELq4QQFcjUAK90ODBg7Vx40atW7dOkydPbnXN5MmTlZ+fr40bN2rw4ME9XCH6u5ycHIWHh2v27NmXHSorKys1e/ZshYeH8w1PQC9BoAR6KY/Ho/T0dBUXF2vfvn365S9/KUl69tlntW/fPhUXF2vevHkcmYQtIiIitGPHDjU1NSk2Nlb5+fkdnndmWZby8/MVFxenQCCgHTt2KCIioocqBmCCQAn0AbGxsfrhD38o6cI5llzNDSeIiopSSUmJ7rnnHmVkZGjSpElavXq1jhw5EloTCAR06NAhrV69WpMmTVJGRobuuecelZSUKCoqysbqAVwO7kMJAOg2ERERWr9+vRYsWKDc3NwWdykYOnSoRowYocbGRrndbqWkpOgPf/gD50wCvRCBEgDQ7RITE5WYmKi6ujpt2bJF6enp+slPfqKJEycqJiZG8fHx3BoI6MUIlACAHjNs2DBNnz5d0oXTMzgaCfQNnEMJAAAAIwRKAAAAGCFQAgAAwAjnUAIAAEc6fPiw3SU4htPfCwIl0Ed4PJ5Wv3sWcKKZM2dy0320KTIyUl6vV+np6XaX4iher1eRkZF2l9EqAiXQRwQCAe3atcvuMoBO2bVrlwKBgN1lwKF8Pp8OHz6s6upqW+sIBAKaOnWqli9fruTkZFtrkS4EbZ/PZ3cZrSJQAgAAx/H5fLaHp+YPPTfddJPi4+NtrcXpuCgHAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVB2YNCgQZo5c6Ysy7K7FKBdHo9HM2fOtLsMoFNmzpwpj8djdxlAuyzL0syZMzVo0CC7S3E8AmUHGhoatGvXLrlcLrtLAdoVCAS0a9cuu8sAOmXXrl0KBAJ2lwG0y+VyadeuXWpoaLC7FMcjUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjITZXQAAM7W1tSotLdWbb74pSXrllVd0xx13KD4+XuHh4fYWBwC9VG1trUpKSiRJW7du1dmzZxUTE8NsbQNHKIFeqqioSHPnzlVERISSkpK0evVqSdLzzz+vpKQkRUREaO7cuSoqKrK5UgDoPS6erXfddZckaePGjVq6dCmztR0ESqCXqampUVpampKSknT06FHl5OToo48+Cj1eUlKiQ4cOKScnR0ePHlVSUpLS0tJUU1NjY9UA4GytzdY9e/aEHj99+jSztT0W2rRv3z5r/vz5liRrzZo11r59++wuCf1cRUWFFRUVZQ0fPtzKz8+3gsGgZVmWVV9fb0myJFnl5eWh9cFg0MrPz7eGDx9uRUVFWRUVFXaVDoRs3rzZkmQtXLjQysvLY7bCdm3N1rq6utBsra+vD61ntl7KZVl8p+DFAoGACgoKlJ2dHTp34mIJCQlasmSJUlNT+dow9KiamholJCQoLCxM27dvl8/nCz127tw5DR06VJJUXl6umJiYFs+tqqrS7Nmz1dTUpJKSEkVERPRo7UBrs9XtdisYDEpitsI+7c3WL774QsOGDZMk1dfXa8iQIS2ey2y9iN2J1kn8fr+VkpJiSbLcbnfoU8nFv5q3z5kzx/L7/XaXjH4kNTXVGj58uFVZWXnJY20dobxYZWWlNXz4cCstLa27SwVaYLbCydqbrW0dobwYs/UCzqH8WiAQUGpqqjZv3ixJoU/N39a8fdOmTUpLS+O7aNEjioqKVFBQoJycnBafni+Hz+dTdna2NmzYwMnk6DHMVjgZs7Xr8CPvr+Xn5ysjI+Oyn7du3Tqlp6d3Q0XAN+bOnauKigqVlZXJ5XJd8nhHP/JuZlmWJk2apHHjxoVuMwR0J2YrnKyj2drRj7ybMVu5yjskOztbbvflvR1ut1vZ2dndVBFwQW1trTZt2qSFCxe2OvAuh8vl0sKFC1VYWKi6urouqhBoG7MVTsVs7Vrc2FxSWVlZqxfgdCQYDKqkpERlZWWKjY3t+sIASaWlpQoGg5o2bZrOnTvX6pqLt/v9/jbXSdK0adMUDAZVWlqqWbNmdXm9QDNmK5zscmdre3NVYrYSKCUVFxcbPT8hIeGyP4EDndV8LtmUKVM6tX7atGkdrhk4cKAOHDjQL4ceeg6zFU52ubN15MiRHa7pz7OVQCnp7Nmz8ng8V3QSuMvl0o9+9CMlJSV1Q2WA9O6776qwsLBL9zlkyBD5/f4u3SfwbcxWOBmztWsRKCVdffXVV3xFoWVZuvvuu/XYY491cVXABYFAQH//+991+vTpNu/Pd+7cudCn5z179ui73/1uu/sbMWKEvF5vt9QLNGO2wsk6M1u/+OIL3XDDDZKkU6dOtXlRTvP++vNsJVBKmjp1qq3PB9oTExOjxsZGnThxQtHR0R2u93q97Q69Q4cOqbGxsc0rwYGuwmyFk3Vmtl78gWjIkCHM1nZwcoqk2NjYKzpXx+12KyEhgZPG0a3i4+Pldru1c+fOLtnfzp075Xa7FR8f3yX7A9rCbIWTMVu7FoHya0uWLGnzhrttCQaDWrJkSTdVBFwQHh6u5ORk5eXlyfS2sZZlKS8vTykpKaF7qwHdidkKp2K2di0C5ddSU1M1Z86cTn+Sdrvdmjt3rlJTU7u5MkDKysrSxx9/rA0bNhjtZ/369SovL9fixYu7qDKgfcxWOBmztQvZ9Z2PTuT3+605c+bwfbNwJNPv8j527BjfNwtbMFvhZKbf5c1svYAjlBcZPHiwNm7cqHXr1mny5Mmtrpk8ebLy8/O1ceNGDR48uIcrRH+Wk5Oj8PBwzZ49W1VVVZf13MrKSs2ePVvh4eF8Awl6XFuz9eKjlsxW2IXZ2jUIlN/i8XiUnp6u4uJi7du3T/Pnz5ckrVmzRvv27VNxcbHmzZvX5i0GgO4SERGhHTt2qKmpSbGxscrPz+/wvB/LspSfn6+4uDgFAgHt2LFDERERPVQx8I2LZ+vmzZslSY8++qjy8vKYrbAVs7VruKyO3rV+bu3atfrpT3+qpqYmBh0coaamRkuWLNGGDRs0YcIELVy4UNOmTVNCQoKkC193N2DAAO3cuVN5eXkqLy9XWlqasrOz+/3AgzNUVFRo7Nix2rFjhxITE+0uB5DU+mydMmWKbrvtNklSXV2djh8/zmxtA4GyAwRKOFVRUZFyc3NVWFioYDCosLAwNTU1acCAAfrqq6/kdruVkpKixYsX8482HIVACSf79myVLtzft6mpSY2NjczWNnBjc6CXSkxMVGJiourq6lRaWqo333xTubm5euqpp3THHXcoPj6+396+AgCu1MWztaSkRHfeeafuvfdefe9731NMTAyztQ0ESqCXGzZsmGbNmiXLspSbm6uHH35YY8aMsbssAOjVmmerJN1777165JFHbK7I2bgoBwAAAEYIlAAAADBCoAQAAIARAmUHwsLCNGbMGOPv+QS6m8vlolfRK1iWpTFjxsjlctldCtCu5l4NC+OSk44QKDvQ1NSkiooKBh8cz7IsehW9gsvlUkVFBR9+4HjNvdrU1GR3KY5HoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADBCoAQAAIARAiUAAACMECgBAABghEAJAAAAIwRKAAAAGCFQAgAAwAiBEgAAAEYIlAAAADASZncB7amqqlJ1dbWtNVRWVkqSSktL5fF4bK1FkiIjI+Xz+ewuA9/ihF7997//LUk6cOCAamtrba1Foledygm9evz4cUkXejY8PNzWWiR61amc0KuBQEDShSxQWlpqay2Ss3vVZVmWZXcRramqqlJ0dLT8fr/dpTiK1+vV4cOHHdtQ/RG92jp61Xno1dbRq85Dr7bOyb3q2COU1dXV8vv9ys/PV3R0tN3lOMLhw4eVnp6u6upqRzZTf0WvXopedSZ69VL0qjPRq5dyeq86NlA2i46OVnx8vN1lAB2iV9Fb0KvoLejV3oOLcgAAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKC9SU1Oj6667TseOHevW1zl06JBGjx6tc+fOdevroO/qqV7dtm2bYmNjFQwGu/V10HfRq+gt6FUzfSZQZmZmyuVyyeVyacCAAYqKitKTTz6pL7/8stP7eO6555SSkqKbb745tK2qqkr33XefvF6vrrvuOi1dulRNTU0d7mfGjBnyer0KDw+/5PFbb71Vt912m37/+993ujb0HU7p1WPHjmnBggWKiorS4MGDNXbsWC1fvlyNjY2hNXfffbcGDBig9evXX9HvFb2bU3pVkpKTk+Xz+XTVVVdp1KhRysjI0GeffRZ6nF7t35zUq80aGhoUGxsrl8ulsrKy0Pa+2qt9JlBKF/6QPv/8c1VUVGjVqlXKy8vT8uXLO/Vcv9+vl156SQsWLAhtCwQCuu+++9TY2Kjdu3fr1Vdf1SuvvKJnnnmm3X01NjbqoYce0qJFi9pc88gjj2jNmjWdbkz0LU7o1X/9618KBoPKy8vTwYMHtWrVKr344ot6+umnW6zLzMxUdnb2lf1G0es5oVcladasWXrjjTf0ySef6G9/+5uOHj2qBx98sMUaerV/c0qvNnvyySd1ww03tPpYn+xVy6H27t1rSbL27t3bqfUPP/ywlZKS0mLb/fffb8XFxVmWZVnLly+3JF3ya+3atZZlWdZf//pXa8SIES2ev3XrVsvtdlsnT54MbVuzZo11zTXXWA0NDR3WtHbtWmvYsGGtPtbQ0GANGjTI2r59e6d+f5Z1+e8JekZf6NVmL7zwghUVFdViW2VlpSXJOnLkSKf3Q686U1/q1cLCQsvlclmNjY2hbfRq39Hbe3Xr1q3WLbfcYh08eNCSZO3bt6/F432xV/vUEcqLHThwQLt379bAgQMlSU888YQ+//zz0K+VK1fK6/VqypQpkqT3339fkydPbrGPDz74QBMmTNDIkSND237wgx/oiy++0MGDB43qGzhwoGJjY/X+++8b7Qe9n5N6ta6uTtdee22LbT6fTyNHjqRX4ZhePXPmjNavX68ZM2ZowIABoe30KprZ2aunTp3So48+qnXr1snr9ba6pi/2apjdBXSlLVu2aOjQoWpqalJDQ4Pcbrdyc3MlSUOHDtXQoUMlSR9++KGWLVumV199VTExMZKkysrKSw5Nnzx5skUjSQr9/8mTJ43rveGGG1RZWWm8H/Q+TuzVI0eOKCcnRytXrrzkMXq1/3JSr/7qV79Sbm6u/H6/brvtNm3ZsuWSNfRq/+WEXrUsS5mZmfrZz36mKVOmtHuBT1/r1T4VKGfNmqU1a9bo3LlzWrVqlcLCwvTAAw+0WFNVVaU5c+boiSee0I9//OPQ9vPnz+uqq67q0XoHDx4sv9/fo68JZ3Bar544cUJ33323HnroIT366KOXPE6v9l9O6tWlS5dqwYIFqqys1IoVKzR//nxt2bJFLpcrtIZe7b+c0Ks5OTk6e/asnnrqqQ7X9rVe7VM/8h4yZIjGjRunSZMm6eWXX9aePXv00ksvhR4/d+6ckpOTNX36dP3ud79r8dzIyEj973//a7Ht+uuv16lTp1psa/7/66+/3rjeM2fOaMSIEcb7Qe/jpF797LPPNGvWLM2YMUN/+tOfWl1Dr/ZfTurVyMhIjR8/Xnfeeadee+01bd26VR9++GGLNfRq/+WEXi0qKtIHH3ygQYMGKSwsTOPGjZMkTZkyRQ8//HCLtX2tV/tUoLyY2+3W008/rWXLlun8+fOyLEvp6ekKBoNat25di0+0khQXF6dDhw612DZ9+nSVl5frv//9b2jbu+++q2uuuUa33nqrcY0HDhxQXFyc8X7Qu9nZqydOnNAdd9yhyZMna+3atXK7Lx0JX375pY4ePUqvwlFztfkefg0NDaFt9Cqa2dWr2dnZ2r9/v8rKylRWVqatW7dKkl5//XU999xzoXV9sVf7bKCUpIceekgej0erV6/Wb3/7W23fvl15eXmqr6/XyZMndfLkSZ0/f17ShRNtDx482OITyl133aVbb71VGRkZ2r9/v9555x0tW7ZMP//5zzVo0CBJUnFxsW655RadOHEi9LyqqiqVlZWpqqpKgUAg1Fj19fWhNceOHdOJEyc0e/bsHno34GR29GpzmPT5fFq5cqVOnz4deq2Lffjhhxo0aJCmT5/eQ+8GnMyOXt2zZ49yc3NVVlamyspKFRUVKTU1VWPHjm3Rl/QqLmZHr/p8PsXExIR+jR8/XpI0duxYjR49OrTvvtirfTpQhoWFafHixXrhhRe0detW1dfXa8aMGRo1alTo1+uvvy5JmjBhguLj4/XGG2+Enu/xeLRlyxZ5PB5Nnz5d6enpmj9/fotD5X6/X5988om++uqr0LZnnnlGcXFxWr58uerr6xUXF6e4uDh99NFHoTUFBQW66667dNNNN/XAOwGns6NX3333XR05ckQ7duzQ6NGjW7zWxQoKCjRv3rw2r1ZE/2JHr3q9Xr355ptKSkrSd77zHS1YsEATJ07Ue++9F/qHXaJX0ZJdGaAz+mSv2nrTonbYcb+lLVu2WNHR0VYgEOjW12loaLB8Pp+1a9euy3qe0+9B1V/15V49ffq0de2111oVFRWX9Tx61Zno1UvRq85Er17K6b3ap67yNnXffffpP//5j06cOKEbb7yx216nqqpKTz/9tG6//fZuew30bT3Vq8eOHdMf//hHRUVFddtroG+jV9Fb0KtmCJTf8otf/KLbX2PcuHGhK7+AK9UTvTplypTQjX+BK0WvoregV69cnz6HEgAAAN2PQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIw4/sbmhw8ftrsEx+C9cDb+fL7Be+Fs/Pl8g/fC2fjz+YbT3wvHBsrIyEh5vV6lp6fbXYqjeL1eRUZG2l0GLkKvto5edR56tXX0qvPQq61zcq+6LMuy7C6iLVVVVaqurra1hk2bNmnFihUqLi6Wx+OxtRbpwl8yn89ndxn4Fif0anFxsRYtWqTCwkKNHj3a1loketWpnNCrx48fV0pKitasWaOpU6faWotErzqVE3o1EAho6tSpWr58uZKTk22tRXJ2rzr2CKUk+Xw+29+4/fv3S5Li4+MdESjhTE7o1draWklSTEyMxowZY2stcC4n9Gp4eLgkafz48YqPj7e1FjiXE3o1EAhIkm666SZ6tQNclAMAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQAkAAAAjBEoAAAAYIVACAADACIESAAAARgiUAAAAMEKgBAAAgBECJQAAAIwQKAEAAGCEQNmBcePGKTMzUy6Xy+5SgHaNGjVKmZmZGjp0qN2lAO0aOnSoMjMzNWrUKLtLAdrlcrmUmZmpcePG2V2K47ksy7LsLgIAAAC9F0coAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMAIgRIAAABGCJQAAAAwQqAEAACAEQIlAAAAjBAoAQAAYIRACQAAACMESgAAABghUAIAAMDI/wMpN2H3rg1zQAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "tk.Circuit(4).CX(1, 2).X(3).CX(0, 1).CX(2, 3).Rz(0.2, 0).Rz(0.4, 1).Rz(0.6, 2).Rz(0.8, 3)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from lambeq.backend.quantum import CX, Id, qubit, Rz, X\n", - "\n", - "\n", - "circuit = Id(4)\n", - "circuit >>= Id(1) @ CX @ X\n", - "circuit >>= CX @ CX\n", - "circuit >>= Rz(0.1) @ Rz(0.2) @ Rz(0.3) @ Rz(0.4)\n", - "\n", - "same_circuit = (Id(4).CX(1, 2).X(3).CX(0, 1).CX(2, 3)\n", - " .Rz(0.1, 0).Rz(0.2, 1).Rz(0.3, 2).Rz(0.4, 3))\n", - "assert circuit == same_circuit\n", - "\n", - "circuit.draw(draw_type_labels=False)\n", - "circuit.to_tk()" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To apply multi-qubit :term:`gates ` to non-consecutive :term:`qubits `, use :term:`swaps ` to permute the wires, apply the :term:`gate `, then unpermute the wires. These :term:`swaps ` are only logical swaps and do not result in more gates when converted to :term:`tket` format." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "tk.Circuit(3).CX(2, 0)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from lambeq.backend.quantum import Diagram as Circuit, SWAP\n", - "\n", - "# to apply a CNOT on qubits 2 and 0:\n", - "circuit1 = Id(3)\n", - "circuit1 >>= SWAP @ Id(1)\n", - "circuit1 >>= Id(1) @ SWAP\n", - "circuit1 >>= Id(1) @ CX\n", - "circuit1 >>= Id(1) @ SWAP\n", - "circuit1 >>= SWAP @ Id(1)\n", - "\n", - "# or you can do\n", - "perm = Circuit.permutation(circuit1.dom, [2, 0, 1])\n", - "circuit2 = perm[::-1] >> Id(1) @ CX >> perm\n", - "\n", - "assert circuit1 == circuit2\n", - "circuit1.draw(figsize=(3, 3), draw_type_labels=False)\n", - "\n", - "# no swaps introduced when converting to tket\n", - "circuit1.to_tk()" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We also have long-ranged controlled gates." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUAAAADcCAYAAAABQ3gmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAASLElEQVR4nO3da0xcZQKH8f8wtCCFWiutqBVr8Aa0yFATix92bdKsNuBCYoofHLUG6g1jrFfUGo27trpW3d1IWVnrlpRmV/jSpmO9tElNSCqpwpSMBW80LdUWFC8tA6WW4eyHZiaLXSrMnNMZfJ9fMkk5M3PeF6Y8nJlz5ozLsixLAGCgpHhPAADihQACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYy7EAnjx5Us3NzTp06JBTQyCBDA8Pq7m5WYcPH473VHAWDA4Oqrm5WX19ffGeSkwcC+DQ0JAqKirU2trq1BBIIEePHlVFRYXa29vjPRWcBd99950qKioUCATiPZWY8BQYgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGAsAgjAWAQQgLEIIABjEUAAxiKAAIxFAAEYiwACMBYBBGCs5HhPAIAzenp61N/f78i6Dx8+LEn68ssvNXv2bEfGkKTMzExlZ2c7tn7HAmhZlhYvXqxp06Y5NQQSSPjxTk7mb2oi6OnpUW5uroaGhhwd5/7773d0/Wlpaerq6nIsgo79b3W5XGptbdXJkyedGgIJJPx4j4yMxHsqkNTf36+hoSE1NjYqNzc33tOJSldXl7xer/r7+6deAAHEX25uroqKiuI9jYTFThAAxiKAAIzlWAAHBgYkSV988YUCgUDkawBIFLYH0O/3q6qqSjk5OZKk1atXq6CgQHPmzFFVVZX27t1r95AAEBXbAhgMBlVeXq6ioiI1NDTo559/HnP9iRMn1NDQII/Ho/Lycg0ODto1NABExZYABoNBLVmyRD6fT5LGPRQivNzn8+mGG25QMBi0Y3gADvr+++81d+5cHThwwNFx3nvvPRUWFmp0dNTRcf6XLQH0er3y+/0KhUITun0oFJLf75fX67VjeADjePbZZ+VyueRyuTRt2jRddtllevzxxzU8PDzhdbzwwgsqKyvT/PnzI8t6enpUUlKitLQ0zZ07V4899tivHgM6f/78yFzClxdffDFy/U033aRp06Zp8+bNk/4+oxXzcYB+v19bt26d9P1CoZC2bt2qvXv3qrCwMNZpABjHTTfdpH/96186efKk2tradOedd8rlcumll1761fsODQ1pw4YNev/99yPLQqGQSkpKlJWVpd27d+vIkSO64447NG3aNK1Zs+aM63v++ee1cuXKyNcZGRljrl+xYoX+/ve/6/bbb5/kdxmdmLcAa2tro377U3Jysmpra2OdAoAzSElJUVZWli655BKVl5dr6dKl2rFjhyTpueeeO22rzOVyaePGjZKk7du3KyUlRYsXL46s74MPPlBnZ6caGxtVWFioZcuW6U9/+pNqa2tPe+3/lzIyMpSVlRW5zJgxY8z1N998sz755BN1d3fb+0MYR0wBHBgYUGNjY9RvfxoZGVFjYyOHyABnyaeffqrdu3dr+vTpkqRHH31UR44ciVzWrVuntLQ0XXvttZKklpYWLVq0aMw6PvroIy1cuFAXXHBBZNmNN96oY8eOad++fWcc/8UXX9T5558vj8ejl19++bR2ZGdn64ILLlBLS4sd3+6viukp8IEDB3TixImYJjA8PKxnnnlmzA8TU094h1Zzc7MCgUCcZ4P/3RLz+XxKT0/XyMiITpw4oaSkJL3++uuSpPT0dKWnp0uSWltbtXr1ajU0NGjBggWSpIMHD+qiiy4as+7e3t7Tfl/DX/f29o47pwcffFBFRUWaPXu2du/erSeffFJHjhzRq6++OuZ2F110kQ4ePKiCgoIov/uJiymAdu3FbWho4CwiU1x4z92WLVsiWxeInyuvvDLy7yVLlqiurk6Dg4N67bXXlJycrFtuuWXM7Xt6elReXq5HH31UFRUVkeXHjx9XamqqLXN6+OGHI/8uKCjQ9OnTdc8992jt2rVKSUmJXHfOOec4fhabsJiqE/7LEauWlpbIXxxMTX19fcrKytLmzZtVWloa7+kYr729PfLUdcaMGbr88sslSW+99ZauueYabdiw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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.quantum import Controlled, Rz, X\n", - "\n", - "(Controlled(Rz(0.5), distance=2) >> Controlled(X, distance=-2)).draw(figsize=(3, 2), draw_type_labels=False)\n", - "Controlled(Controlled(X), distance=2).draw(figsize=(3, 2), draw_type_labels=False)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "So far, our :term:`circuits ` have been \"pure\" circuits, consisting of unitaries. Pure circuits can be evaluated locally to return a unitary ``numpy`` array. Circuits containing :py:class:`~lambeq.backend.quantum.Discard`\\ s and :py:class:`~lambeq.backend.quantum.Measure`\\ s are considered \"mixed\", and return non-unitary ``numpy`` arrays when evaluated, as they are classical-quantum maps (for more details, see Chapter 5 in [HV2013]_)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1.+0.j 0.+0.j]\n", - " [0.+0.j 1.+0.j]]\n", - "\n", - "[[[1.+0.j 0.+0.j]\n", - " [0.+0.j 0.+0.j]]\n", - "\n", - " [[0.+0.j 0.+0.j]\n", - " [0.+0.j 1.+0.j]]]\n", - "\n", - "[1. 0.]\n", - "\n", - "[1.+0.j 0.+0.j]\n", - "\n" - ] - } - ], - "source": [ - "from lambeq.backend.quantum import Discard, Measure, Ket, Bra\n", - "\n", - "\n", - "print(f'{Discard().eval()}\\n')\n", - "print(f'{Measure().eval()}\\n')\n", - "print(f'{Ket(0).eval()}\\n')\n", - "# circuits that have measurements in them are no longer unitary\n", - "print(f'{(Ket(0) >> Measure()).eval()}\\n')" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Pure :term:`circuits ` can be coerced to evaluate into a classical-quantum map representation by setting ``mixed=True``." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[[[[[[[1.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 1.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]],\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 1.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [1.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]]],\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[1.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 1.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]],\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 1.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [1.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]]]],\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[1.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 1.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]],\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 1.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [1.+0.j, 0.+0.j]]]]]],\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[1.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 1.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]],\n", - "\n", - "\n", - "\n", - "\n", - " [[[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 1.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]],\n", - "\n", - "\n", - "\n", - " [[[[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]],\n", - "\n", - "\n", - " [[[0.+0.j, 0.+0.j],\n", - " [1.+0.j, 0.+0.j]],\n", - "\n", - " [[0.+0.j, 0.+0.j],\n", - " [0.+0.j, 0.+0.j]]]]]]]])" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "CX.eval(mixed=True)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that the tensor order of classical-quantum maps is doubled, compared to that of pure quantum circuits:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(2, 2, 2, 2)\n", - "(2, 2, 2, 2, 2, 2, 2, 2)\n" - ] - } - ], - "source": [ - "print(CX.eval().shape)\n", - "print(CX.eval(mixed=True).shape)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can implement a :term:`functor` from :term:`string diagrams ` to :term:`quantum circuits ` like so." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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cOAAfvzxR3R2dkKhUGDMmDG45ZZbMGvWLKSkpPAVvwMxBBANEs4cAs7X0tKCH374wdoAiouL8cMPP6C9vR0AEBERgaSkJCQkJCA8PBxhYWHWRavVylw9XYq2tjYcO3bMulRVVVnv88rKSgCAu7s74uPjrQGw6z739vaWuXpxMAQQDRKuFAJ6YzKZUFZWZhMMfvzxR5w4ccLmfP7+/hgxYoRNMAgLC7MeFxISwu8dOFhnZydqampw7NgxGI1Gm2bfddypU6dsLjN8+HDruz5dDT82Npb3lcwYAogGCVcPAX3p6OhAdXV1j0bTvQE1NDTYXEan08HPzw++vr7W5fy/+zpOp9NBqRzc/zglSRLOnDmDhoYGNDQ04PTp09b13v4+/7impiab7fn4+PQazLrCWUhICDw8PGS6tnQh/IYFETk1d3d3REZGIjIyss/zNDc3W4NBdXV1r03tyJEjNse1tLT0uT2NRgN3d/delwuddv6iUqmgVCqhVCqhUCj6PFQoFLBYLLBYLJAkqddDi8UCs9mMjo6OXpezZ8/2eVpv5+2LVqvtEZBCQ0MxduxY63F+fn4ICQmxNnqdTndF9zHJhyGAiFyet7c34uLiEBcXd8mXOXv2LBobG3uEhaampktuph0dHWhtbcXp06d7Pc1sNts08b4avEqlgiRJfQaFrnWVSnXBQOLr63tJ4USj0cDHx6fHOyI+Pj7QaDQOvKfI2TAEEJGQNBoN9Ho99Hq93KUQyWZwf/BFREREfWIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBKSRJkuQugoiu3O7du+Hm5oZrr71W7lKIyEUwBBAREQmKHwcQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJiiGAiIhIUAwBREREgmIIICIiEhRDABERkaAYAoiIiATFEEBERCQohgAiIiJBMQQQEREJ6v8BQFBgrt43SOUAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAMzCAYAAACSq0y2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABzhUlEQVR4nO3deVyVZeL///cBRAXULAotUdOspHLDpZoWdZzMnKTFGddMxrC03TJZFERla9E2Q9NKGzV0rNGmPi1qWE2aC6ZNhS1mKpoYZSKoKHD9/ugn3whQVM65uQ6v5+PBH973de7r3XmcuHmfc5/7chljjAAAAADAMj5OBwAAAACA00GZAQAAAGAlygwAAAAAK1FmAAAAAFiJMgMAAADASpQZAAAAAFaizAAAAACwEmUGAAAAgJUoMwAAAACsRJkBAAAAYCXKDAAAAAArUWYAAAAAWIkyAwAAAMBKlBkAAAAAVqLMAAAAALASZQYAAACAlSgzAAAAAKxEmQEAAABgJcoMAAAAACtRZgAAAABYiTIDAAAAwEqUGQAAAABWoswAAAAAsBJlBgAAAICVKDMAAAAArESZAQAAAGAlygwAAAAAK1FmAAAAAFiJMgMAAADASpQZAAAAAFaizAAAAACwEmUGAAAAgJUoMwAAAACsRJkBAAAAYCXKDAAAAAArUWYAAAAAWIkyAwAAAMBKlBkAAAAAVqLMAAAAALASZQYAAACAlSgzAAAAAKxEmQEAAABgJcoMAAAAACtRZgAAAABYiTIDAAAAwEqUGQAAAABWoswAAAAAsBJlBgAAAICVKDMAAAAArESZAQAAAGAlygwAAAAAK1FmAAAAAFiJMgMAAADASpQZAAAAAFaizAAAAACwEmUGAAAAgJUoMwAAAACsRJkBAAAAYCXKDAAAAAArUWYAAAAAWIkyAwAAAMBKlBkAAAAAVqLMAAAAALASZQYAAACAlSgzAAAAAKxEmQEAAABgJcoMAAAAACtRZgAAAABYiTIDAAAAwEqUGQAAAABWoswAAAAAsBJlBgAAAICVKDMAAAAArESZAQAAAGClOltm8vLyNHjwYC1fvtzpKEC1FBcXa9SoUXrhhRecjuJ1PvzwQw0aNEjbtm1zOorXiY2NVWxsrNMxvM62bds0aNAgffTRR05HAarl4MGDGjp0qF577TWno3idZcuWafDgwcrLy3M6iiNcxhjjdAgnjBs3TjNmzFBoaKi++eYbNWjQwOlIwAnNmTNHo0ePVoMGDfTtt9+qRYsWTkfyCqWlpQoPD9fmzZs1ZMgQLVq0yOlIXuO///2vrr32WknSxx9/rGuuucbhRN5jyJAhysjIUOfOnbVx40b5+NTZ9yZhiSlTpighIUHBwcHatm2bGjdu7HQkr3DkyBFdfPHF2rVrl8aNG6ennnrK6UgeVyd/++3cuVMzZ87UiBEjtGfPHqWnpzsdCTihw4cPa/Lkybr55psVGBioKVOmOB3JayxZskSbN2/WP/7xD7322mvavHmz05G8gjFG0dHR6ty5szp16qTo6GjV0ffOatxnn32mjIwM/eMf/9Bnn32mf/3rX05HAk7op59+0pNPPqkhQ4aooKBA06dPdzqS13jhhRe0Z88ejRgxQjNnztTOnTudjuR5pg6KjIw05557rjl48KCJiooy55xzjjlw4IDTsYAqPf7448bPz898++23Zvr06cbX19ds3brV6VjWO3r0qGnbtq25+eabzbFjx8zFF19s+vXr53Qsr/Cf//zHSDLvvvuueeedd4wk89ZbbzkdyyvceOON5uKLLzbHjh0zf/3rX81FF11kjh496nQsoEoPP/ywadSokfnpp5/M+PHjTVBQkMnNzXU6lvV+/fVXc84555jRo0eb/Px8c+6555p//OMfTsfyuDpXZr788kvj4+Njnn32WWOMMTk5OaZBgwZm0qRJDicDKrd//37TtGlTM2bMGGOMMYcPHzahoaFm4MCBDiez3wsvvGBcLpf5/PPPjTHGLFmyxEgyq1evdjiZ3YqLi83ll19uevbsaUpLS01paam5/vrrzRVXXGGKi4udjme1zMxMI8n861//MsYY8/nnnxuXy2XS09MdTgZU7ocffjD+/v5mypQpxhhjfv75Z9OkSRPzwAMPOJzMfhMnTjQNGjQwOTk5xhhjnnnmGePj42O+/PJLh5N5Vp0rM7fccotp3bq1KSoqKtv22GOPmcDAQLN3714HkwGVi4mJMQEBAWbPnj1l21555RUjyaxfv97BZHYrKCgwzZo1MyNGjCjbVlpaasLDw82VV15pSktLHUxnt1dffdVIMp9++mnZtrVr1xpJ5p///KeDyexWWlpqevToYbp27Vru9XnHHXeYZs2amcLCQgfTAZUbOXKkOe+888zBgwfLtiUn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uIEDByo0NLROv1kEoG6gzOCE1q1bp7/97W/l3kVdvny5IiIiyv798ccfq2vXric91oEDB3T22WeX29a9e3fl5OTohx9+qLHMtmnUqJEmTpyoV155RVu3bq2w/+jRo8rKylKfPn3Ktvn4+KhPnz5au3ZthfHPPfec8vLyNGXKFLfmBv7oxRdfrPb3s1wul+bMmePmRHbLz8/XwoULFRkZqSNHjqiwsLDs59ChQ2Xjfr/9+E9RUZEiIyO1aNEibtsMwKv5OR3ACW+99ZaCgoLKbfvj5RD4TZs2bdS/f3+lpKRowoQJkn77JOall14qG7Njx46TlpklS5Zow4YNmj17drnt559/ftkxWrduXbPhLXLPPfdoxowZiouL0+uvv15uX15enkpKShQSElJue0hISIXys3//fqWmpuruu+9WmzZt3J4b+L2lS5dW+3dpSUmJnn76aX333XduTmWv/fv3q6ioSImJiSf85PaPvxv+6IcffuBTWgBeq06WmV69elX46H3dunV8WbIS5557rgYOHKh7771XGzZsUKtWreTv76+mTZuWjTl8+LAaNGhQ5TEyMzMVGRmpOXPm6LLLLiu3r2HDhpJU7l3Guqh+/fqaMmWK7rzzTq1fv17du3c/reOkpaWVffkf8LQDBw6c0vgjR47oxx9/dFMa+53q81mVU7nLJADYpk6WmcDAQF100UXltnHtdtWCgoIUERGhhQsX6sILL9SQIUPK7Q8ODtb+/fsrfeyHH36om2++WTNmzKh0TZpffvlF0m+lqa4bNmyYHn/8cUVHR2vVqlVll+sEBwfL19dXubm55cbn5uaqWbNmZf/evXu3nnnmGT366KMnfacWcIcmTZpoz5491R5/0UUX6YMPPnBjIrtt2bJFnTp1UmZmprp161Zu3zfffFN2Q4Dc3FwFBgZWePyGDRvUq1evsrtMAoA34jszqJZhw4YpIyNDb7/9tm666aZy+zp37qyvvvqqwmNWr16t/v37Ky0tTaNHj670uF988YXq1atX4RObusjX11fJycnKzMzUihUryrb7+/srPDxcq1atKttWWlqqVatW6aqrrirbNmXKFAUGBurRRx/1aG7guIEDB1Z52+A/8vX1PeUvtdc1F154oRo2bKg1a9YoMDCw3E9AQEDZuD/uO/7zySefqGHDhnX6El4A3o8yg2rp27evSkpKdMkl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AAB1zc6dO5WXl3faj//pp5/UvHlz7dy5U5s2bTqjLMHBwWrZsuUZHaM2OdPntqZ40/NaWlqqv/3tb/rmm2/O6Dgul0tPPfWU5s6de0bHee6559SzZ88zOga8B2UGAAAP2rlzp9q3b69Dhw6d8bGioqLO+BgBAQHKzs72ij+8a/K5PVPe9LwePHhQ77//voKDgxUREeFYjh9//FFLlizRf//7X8oMylBmAADwoLy8PB06dEgLFixQ+/btHc2SnZ2t4cOHKy8vzyv+6K4tz623Pa9NmjTRo48+qpSUFD3yyCMKDQ11JMfo0aMVHBysBx54wJH5UTtRZgAAcED79u3VpUsXp2N4JZ7bmjdu3DjNnDlTkydP1ksvveTx+b/++mu9/PLLevLJJ9W4cWOPz4/aixsAAAAA4IQaNWqkiRMnat68ecrOzvb4/BMnTtQFF1yge+65x+Nzo3ajzAAAAOCk7r77boWGhmrixIkenXfDhg1aunSpEhMT1aBBA4/OjdqPMgMAAICTql+/vqZMmaI33nhD69at89i8sbGxCgsL0x133OGxOWEPygwAAACqZdiwYbr88ssVHR0tY4zb51u5cqVWrlyp5ORk+fr6un0+2IcyAwAAgGrx9fVVcnKyVq9erRUrVrh1LmOMoqOjdeWVV2rAgAFunQv2oswAAACg2v7617/qT3/6k6Kjo1VaWuq2eV5//XVlZWUpNTVVLpfLbfPAbpQZAABQ5zz77LMaMWKE0zGs5HK5lJqaqs8++0z/+te/3DJHcXGx4uLi1K9fP11//fVumQPegTIDAADqFGOMli5dqvnz50v6bQ2TZs2a6eDBg9U+RnR0tO6//353Raz1rrnmGvXv318TJ07UsWPHavz4r7zyir755hslJyfX+LHhXSgzAABYYuTIkbrlllsqbF+9erVcLpd+/fVXj2ey0erVq3X99deXXboUExOj+++/X40aNSrbHxERoebNmyswMFCdOnXSwoULyx3j0Ucf1fz58/X99997PH9tkZycrG3btunll18+6diZM2eqdevWatCggXr06KH169dXOfbw4cOaPHmyhgwZok6dOtVgYngjygwAAKhTFixYUHaJ2c6dO/XWW29p5MiRZfvXrFmjDh066PXXX9fnn3+uyMhIjRgxQm+99VbZmODgYPXt21fp6emejl9rdOjQQcOGDVNiYqIO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2LGj+vbtq3379lUYW1paqpiYGF1zzTW66aab3BXd4ygzAACgzjh8+LB2796tdu3aSZKWLFmijh076oILLigbExsbq6lTp+rqq69W27Zt9eCDD+rGG2/UG2+8Ue5YN998szIyMjyaH3VDu3btdNdddyk5OVkHDhyoctz06dMVFRWlyMhIhYWFadasWQoICNDLL79cYeySJUu0efNmpaamln0q6Q0oMwAAwCutW7dOf/vb35SWlla2bfny5YqIiCj798cff6yuXbue9FgHDhzQ2WefXW5b9+7dlZOTox9++KHGMgPHxcfH6/Dhw3riiScq3X/06FFlZWWpT58+Zdt8fHzUp08frV27tsLYiRMn6uabb9af/vQnt+b2NMoMAKDGvfXWWwoKCir3069fP6djoY5p06aN+vfvX+5d6iVLlmjw4MFl/96xY4fOP//8Ex5nyZIl2rBhgyIjI8ttP/64HTt21GBq4Dfnn3++HnzwQc2YMUN79+6tsD8vL08lJSUKCQkptz0kJKTC+Jdeeknff/+9kpKS3JrZCZQZAECN69WrlzZv3lzuZ+7cuU7HQh1z7rnnauDAgcrJydGGDRu0b98++fv7q2nTpmVjDh8+rAYNGlR5jMzMTEVGRmrOnDm67LLLyu1r2LChJOnQoUPu+Q9AnffYY4/J399f06ZNO+1jFBYWasqUKRo+fLiuuOKKGkxXO/g5HQAA4H0CAwN10UUXlduWk5PjUBrUZUFBQYqIiNDChQt14YUXVrgdbXBwsPbv31/pYz/88EPdfPPNmjFjRqVr0vzyyy+SfitNgDs0bdpUMTExiouL08MPP6y2bduW7QsODpavr69yc3PLPSY3N1fNmjUr+/czzzyjn3/+WVOmTPFYbk/ikxkAAODVhg0bpoyMDL399tsV7uLUuXNnffXVVxUes3r1avXv319paWkaPXp0pcf94osvVK9evQqf2AA16b777tN5552n+Pj4ctv9/f0VHh6uVatWlW0rLS3VqlWrdNVVV0mSfv75Z6WlpWnMmDFq3bq1J2N7DGUGAAB4tb59+6qkpESXXHKJ6tWrV2Hf2rVrVVJSUrYtMzNT/fv31wMPPKDbb79de/fu1d69e8s+iTnu448/1rXXXlt2uRngDgEBAUpISNCiRYu0efPmcvvGjRunOXPmaP78+crOztaYMWNUWFhY9v2utLQ0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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.grammar import Functor\n", - "from lambeq.backend.quantum import quantum, Id\n", - "\n", - "\n", - "def cnot_ob(_, ty):\n", - " # this implicitly maps all rigid types to 1 qubit\n", - " return qubit ** len(ty)\n", - "\n", - "def cnot_ar(_, box):\n", - " dom = len(box.dom)\n", - " cod = len(box.cod)\n", - " width = max(dom, cod)\n", - " circuit = Id(width)\n", - " for i in range(width - 1):\n", - " circuit >>= Id(i) @ CX.to_diagram() @ Id(width - i - 2)\n", - "\n", - " # Add Bras (post-selection) and Kets (states)\n", - " # to get a circuit with the right amount of\n", - " # input and output wires\n", - " if cod <= dom:\n", - " circuit >>= Id(cod) @ Bra(*[0]*(dom - cod)).to_diagram()\n", - " else:\n", - " circuit = Id(dom) @ Ket(*[0]*(cod - dom)).to_diagram() >> circuit\n", - " return circuit\n", - "\n", - "cnot_functor = Functor(target_category=quantum, ob=cnot_ob, ar=cnot_ar)\n", - "diagram.draw(figsize=(5, 2))\n", - "cnot_functor(diagram).draw(figsize=(8, 8), draw_type_labels=False)" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/extend-lambeq.ipynb b/docs/tutorials/extend-lambeq.ipynb deleted file mode 100644 index 5ef422cb..00000000 --- a/docs/tutorials/extend-lambeq.ipynb +++ /dev/null @@ -1,534 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Advanced: Extending lambeq" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this tutorial you will find examples of how to extend ``lambeq`` to add more :term:`readers `, :term:`rewrite rules ` and :term:`ansätze `, so you can start making your own `contributions `_ to the toolkit.\n", - "\n", - ":download:`Download code <../_code/extend-lambeq.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating readers" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The :py:class:`.Reader` class is an abstract base class for converting sentences to diagrams. Each :term:`reader` can be seen as a different :term:`compositional model`, and ``lambeq`` can accommodate any compositional model that represents sentences in a :term:`string diagram`/\\ :term:`tensor network` form.\n", - "\n", - "A concrete subclass of :py:class:`.Reader` should implement the :py:meth:`.Reader.sentence2diagram` method, which converts a single sentence into a rigid diagram." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Reader example: \"Comb\" reader\n", - "\n", - "In this example we will create a reader that, given a sentence, it generates the following tensor network:\n", - "\n", - "
\n", - "\"drawing\"\n", - "
\n", - "\n", - "Note that the particular compositional model is not appropriate for classical experiments, since the tensor that implements the layer can become very large for long sentences. However, the model can be implemented without problems on a quantum computer." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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z9PS0jzvDUePHjWSzK5duzzrKysrTZs2bcxf/vIXY4wxr732munbt68xxpiCggIzePBgM2bMGM/7w8iRI81LL71kjKnfe8WiRYtMSEiIqaioaPCY/EHAzlAeP35c1dXVGjp0qGdZSEiIBg0apLKyMq9tk5KSPP++PW19+/KnJCUkJHjNMMTFxXmth3/55JNPVF1drUGDBnmWtW/fXr169fI8Lykp0WOPPab4+Hi1a9dOaWlpkqTy8nJJX1zCSExM9MxSFhcXq6KiQk888YQkqbS0VJcvX1ZUVJTatm3reZw4cYJLYH4sJiZGjz76qPLy8pSbm6tHH31U0dHRXtt8/PHHmjRpkrp166aIiAjPJbHbvXFbSkqK1/NBgwapb9++Wr16tSRp7dq16tKli0aMGNF0A4JP1bc30HyVlZUpODhYgwcP9iyLiopSr169PNkhLS1Nhw4d0tmzZ1VcXKz09HSlp6erqKhI1dXV+vDDD5Weni6p/u8VXbp0UUxMjE/H2tj865OoDgkJCfH82+VySZLXJYza629vwyWO5uvKlSvKyMhQRkaG8vPzFRMTo/LycmVkZHh9GHrKlClat26dFixYoHXr1mnUqFGKioqSJF2+fFlxcXGeyx61RUZG+mgkaIgZM2boJz/5iSTp9ddfr7P+scceU5cuXfT222/r/vvvV01Njfr161fng/Lh4eF1Xvv000/r9ddf14IFC5Sbm6vp06d7fqeg+atvbyCwffOb31THjh1VXFys4uJivfLKK4qNjdWvf/1r7dmzR9XV1UpNTZVU//eKu/0+aW4CdobywQcfVGhoqHbt2uVZVl1drT179qhPnz4OVoam1q1bN4WEhHh9NubChQs6evSoJOnw4cP67LPPtGzZMg0fPly9e/e+64zz5MmT9Z///EclJSXasGGDpkyZ4lmXnJysTz/9VMHBwerevbvX484ZL/iXUaNG6caNG6qurlZGRobXus8++0xHjhzRL37xCz388MNKTEzUuXPn6r3vzMxMnTp1Sq+99poOHTqkadOmNXb5cIhtb6B5SExM1M2bN7V7927Psts/+9vZweVyafjw4Xr//fd18OBBDRs2TElJSbp+/brefPNNpaSkeAJiS3qvCNhAGR4erh//+MeaN2+etm7dqkOHDmnWrFmqqqrSzJkznS4PTahdu3aaNm2a5s2bp8LCQh08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LCxUTk6O1qxZo7CwMM92brdbsbGxXo+IiAiv40RGRio2NlY9e/bU0qVLdfPmTRUWFvpmkADgQ35/Y3MAaGyFhYWqqqrSyJEj1alTJ6Wmpmr58uUKDw9XWFiY1qxZo9TUVH33u9/VnDlz9NJLL2ngwIENPt7Nmzc9oTU0NLSxhgEAfoMZSgAtzsqVKzVx4kS1atVK/fr1U7du3bR+/XrP+pSUFL344osaP368oqKitHDhwjr7+OMf/6i2bdt6PfLz8722mTRpktq2bavWrVvr+eefV0JCgp588skmHx8A+BqBEkCLcv78eW3cuFGZmZmeZZmZmV6XvSXpl7/8pWpqarRgwQIFB9e9mDNlyhQdOHDA6/H44497bbN8+XIdOHBAH3zwgfr06aOcnBx17NixaQYGAA7ikjeAFmXdunW6du2aBg8e7FlmjFFNTY2OHj2qnj17SpInRN4tTEpS+/bt1b179688VmxsrLp3767u3bsrNzdXjzzyiA4dOqT77ruvkUYDAP6BGUoALcrKlSv1wgsveM0slpaWavjw4Vq1alWTHXfQoEEaOHCgXnnllSY7BgA4hRlKAAHpwoULOnDggNeyS5cuad++fcrPz1fv3r291k2aNElLlizRyy+//KWzkrVVVVXp008/9VrWunVrdejQ4UtfM2fOHI0bN07z589Xp06d6j8YAPBzzFACCEhFRUUaMGCA12PVqlXq06dPnTApSePGjVNFRYW2bNlSr/2//fbbiouL83pMmjTpK18zatQode3alVlKAAGHGUoAAScvL095eXn39JrY2FjdunXLa5kx5q7bFhUVfe3+7vZal8ulsrKye6oLAJoDZigBAABghUAJAAAAKwRKAAAAWCFQAgAAwAqBEgAAAFYIlAAAALDi97cN4hYbAACgpfP3POS3gTI6Olput1uZmZlOlwIAAOA4t9ut6Ohop8u4K5f5sjv3+oHy8nJVVlY6XQaAFmzOnDmSpBUrVjhaBwBER0crPj7e6TLuym9nKCUpPj7eb08cgJYhMjJSkpScnOxsIQDgx/hSDgAAAKwQKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVgiUAAAAsOLX96EEAH+Xnp6upKQkhYWFKScnR6GhoZo9e7YWL17sdGkA4DPMUAKApdWrVys8PFy7d+9Wdna2lixZom3btjldFgD4DIESACwlJSVp0aJF6tGjh6ZOnaqUlBRt377d6bIAwGcIlABgKSkpyet5XFycKioqHKoGAHyPQAkAlkJCQryeu1wu1dTUOFQNAPgegRIAAABWCJQAAACwQqAEAACAFe5DCQAWioqK6iwrKCjweR0A4CRmKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVgiUAAAAsEKgBAAAgBUCJQAAAKwQKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVgiUAAAAsEKgBAAAgBUCJQAAAKwQKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVlzGGON0EQDgrz7//HNJUseOHR2uBAD8F4ESAAAAVrjkDQAAACsESgAAAFghUAIAAMAKgRIAAABWCJQAAACwQqAEAACAFQIlAAAArBAoAQAAYIVACQAAACsESgAAAFghUAIAAMAKgRIAAABWCJQAAACwQqAEAACAFQIlAAAArBAoAQAAYIVACQAAACsESgAAAFghUAIAAMAKgRIAAABW/g983W7gjxwEUQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "from lambeq import AtomicType, Reader\n", - "from lambeq.backend.grammar import Box, Id, Word\n", - "\n", - "N = AtomicType.NOUN\n", - "\n", - "class CombReader(Reader):\n", - " def sentence2diagram(self, sentence):\n", - " words = Id().tensor(*[Word(w, N) for w in sentence.split()])\n", - " layer = Box('LAYER', words.cod, N)\n", - " return words >> layer\n", - "\n", - "diagram = CombReader().sentence2diagram('John gave Mary a flower')\n", - "diagram.draw()" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that, in the above code, the method :py:meth:`~lambeq.backend.grammar.Diagram.tensor` refers to the monoidal product and not to a physical tensor object. What the specific line does, using the monoidal identity :py:obj:`Id()` as a starting point, is to tensor one-by-one the boxes of the words in the sentence accumulatively, from left to right, into a single diagram, as in a standard fold operation. " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Id().tensor(*[Word(w, N) for w in ['John', 'gave', 'Mary', 'a', 'flower']]).draw(figsize=(5,1))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This diagram is then combined with the ``layer`` box to create the final output of the :term:`reader`.\n", - "\n", - ".. note::\n", - "\n", - " In an actual implementation, the ``layer`` box should be shared among all sentences so it can be trained properly." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating rewrite rules" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='text')\n", - "d = parser.sentence2diagram('The food is fresh')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### SimpleRewriteRule example: Negation functor" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The :py:class:`.SimpleRewriteRule` class contains functionality that facilitates the creation of simple :term:`rewrite rules `, without the need to define a new :py:class:`.RewriteRule` class from scratch. A :py:class:`.SimpleRewriteRule` finds words with codomain ``cod`` and name in list ``words``, then replaces their boxes with the diagram in ``template``. \n", - "\n", - "Here is an example of a negation :term:`functor` using :py:class:`.SimpleRewriteRule`. The functor adds a \"NOT\" box to the wire of certain auxiliary verbs:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import AtomicType, SimpleRewriteRule\n", - "\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE\n", - "adj = N @ N.l\n", - "\n", - "NOT = Box('NOT', S, S)\n", - "\n", - "negation_rewrite = SimpleRewriteRule(\n", - " cod=N.r @ S @ S.l @ N,\n", - " template=SimpleRewriteRule.placeholder(N.r @ S @ S.l @ N) >> Id(N.r) @ NOT @ Id(S.l @ N),\n", - " words=['is', 'was', 'has', 'have'])" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " The placeholder ``SimpleRewriteRule.placeholder(t)`` in the template above will be replaced by a box with the same name as the original box and type ``t``.\n", - "\n", - "A list of :py:class:`.RewriteRule`\\ s can be passed to :py:class:`.Rewriter` to create a rewriting :term:`functor`. If no list is provided, then the default rewriting rules are used (see `Diagram Rewriting <./rewrite.ipynb>`_)." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABYwAAACxCAYAAABnc/kPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABBoElEQVR4nO3dd3xUdb7/8fekkR4SQkJCCgIBAoQSEAWURTqCKyC4clWMlLWhy09EsSwQVlRQFhTFgrBgV5DichFFFEFAltBLlg6hhBIghBDS5/eHydwM6WGSM0lez8fjPGbmzJwznzPfOfOd854z55jMZrNZAAAAAAAAAIBaz8HoAgAAAAAAAAAA9oHAGAAAAAAAAAAgicAYAAAAAAAAAJCHwBgAAAAAAAAAIInAGAAAAAAAAACQh8AYAAAAAAAAACCJwBgAAAAAAAAAkIfAGAAAAAAAAAAgicAYAAAAAAAAAJCHwBgAAAAAAAAAIInAGAAAAAAAAACQh8AYAAAAAAAAACCJwBgAAAAAAAAAkIfAGAAAAAAAAAAgicAYAAAAAAAAAJCHwBgAAAAAAAAAIInAGAAAAAAAAACQh8AYAAAAAAAAACCJwBgAAAAAAAAAkIfAGAAAAAAAAAAgSXIyugAAAFB+CQkJSkpKMroMVDP+/v4KCwszuowqZe/rCm0CALAV+hSgdLVxPakIAmMAAKqZhIQERUZGKi0tzehSUM24u7srPj6+1nxJrg7rCm0CALAV+hSgdLVtPakoAmMAAKqZpKQkpaWl6bPPPlNkZKTR5aCaiI+P10MPPaSkpKRa8wXZ3tcV2sT+2gQAqiv6FPoUlK42ricVRWAMAEA1FRkZqejoaKPLAOwe64r9oU0AALZCnwLYHie9AwAAAAAAAABIIjAGAADV3Lp162QymZScnGx0KahGzGaz/vrXv8rPz08mk0k7d+6slOfp3r27xo0bVynzBmB7rLMA7EFVfE+JiYnRoEGDbD5f1AwckgIAANgtk8lU4v2TJ09W9+7dq6YY1CirV6/WwoULtW7dOjVu3Fj+/v5GlwTADixdulTOzs5GlwGgluN7CoxGYAwAAOxWYmKi5frXX3+tSZMm6cCBA5Zxnp6eiouLM6I0VHNHjhxRUFCQunTpYnQpAOyIn5+f0SUAQKnfUzIzM+Xi4lLFVaE24ZAUAADAbjVo0MAy+Pj4yGQyWY3z9PS0PHbbtm3q2LGj3N3d1aVLF6tgWZJWrFih6Ohoubq6qnHjxoqNjVV2dnZVLxLsQExMjJ5++mklJCTIZDKpUaNGysjI0DPPPKOAgAC5urrqjjvu0NatW62m+/XXX9WpUyfVqVNHQUFBmjhxotV76Nq1axoxYoQ8PT0VFBSkmTNnVvWiAbhJBQ9JMXfuXEVERMjV1VWBgYEaOnSoscUBqBWK+p7SvXt3jR07VuPGjZO/v7/69u0rSdq7d6/69+8vT09PBQYG6uGHH1ZSUpJlXkuWLFFUVJTc3NxUr1499erVS9euXbN6vrfeektBQUGqV6+ennrqKWVlZVXp8sI+ERgDAIAa4eWXX9bMmTMVFxcnJycnjRw50nLfhg0bNGLECP3tb3/T/v379eGHH2rhwoWaNm2agRXDKG+//bamTp2qkJAQJSYmauvWrXr++ef17bffatGiRdq+fbuaNm2qvn376tKlS5Kk06dP6+6779att96qXbt26f3339f8+fP16quvWuY7YcIE/frrr1qxYoV+/PFHrVu3Ttu3bzdqMQHchLi4OD3zzDOaOnWqDhw4oNWrV6tbt25GlwWgFijqe4okLVq0SC4uLtq4caM++OADJScnq0ePHmrfvr3i4uK0evVqnTt3Tvfff7+kP/6pN3z4cI0cOVLx8fFat26dhgwZIrPZbHmuX375RUeOHNEvv/yiRYsWaeHChVq4cKERiw07wyEpAABAjTBt2jT96U9/kiRNnDhRAwYMUHp6ulxdXRUbG6uJEyfqkUcekSQ1btxY//jHP/T8889r8uTJRpYNA/j4+MjLy0uOjo5q0KCBrl27pvfff18LFy5U//79JUnz5s3TmjVrNH/+fE2YMEFz585VaGio3n33XZlMJrVo0UJnzpzRCy+8oEmTJiktLU3z58/XZ599pp49e0r6Y8MuJCTEyEUFUEEJCQny8PDQwIED5eXlpfDwcLVv397osgDUAjd+T8kXERGhGTNmWG6/+uqrat++vV577TXLuAULFig0NFQHDx5UamqqsrOzNWTIEIWHh0uSoqKirJ7L19dX7777rhwdHdWiRQsNGDBAa9eu1ZgxYyp5KWHvCIwBAECN0KZNG8v1oKAgSdL58+cVFhamXbt2aePGjVZ7FOfk5Cg9PV1paWlyd3ev8nphP44cOaKsrCx17drVMs7Z2VmdOnVSfHy8JCk+Pl6dO3e2OhFj165dlZqaqlOnTuny5cvKzMzUbbfdZrnfz89PzZs3r7oFAWAzvXv3Vnh4uBo3bqx+/fqpX79+Gjx4MP0FAMN06NDB6vauXbv0yy+/WB2iLd+RI0fUp08f9ezZU1FRUerbt6/69OmjoUOHytfX1/K4Vq1aydHR0XI7KChIe/bsqbyFQLXBISkAAECNUPCs9vmhXm5uriQpNTVVsbGx2rlzp2XYs2ePDh06JFdXV0PqBQDYLy8vL23fvl1ffvmlgoKCNGnSJLVt21bJyclGlwaglvLw8LC6nZqaqnvuucfq++3OnTt16NAhdevWTY6OjlqzZo2+//57tWzZUnPmzFHz5s117NgxyzwKfn+W/vgOnf/9GbUbgTEAAKjxoqOjdeDAATVt2rTQ4ODA16HarkmTJpZjAubLysrS1q1b1bJlS0lSZGSkNm/ebHXcv40bN8rLy0shISFq0qSJnJ2dtWXLFsv9ly9f1sGDB6tuQQDYlJOTk3r16qUZM2Zo9+7dOn78uH7++WejywIASX98v923b58aNWpU6PttfrhsMpnUtWtXxcbGaseOHXJxcdGyZcsMrhzVAYekAAAANd6kSZM0cOBAhYWFaejQoXJwcNCuXbu0d+9eq5OWoXby8PDQE088oQkTJsjPz09hYWGaMWOG0tLSNGrUKEnSk08+qdmzZ+vpp5/W2LFjdeDAAU2ePFnPPvusHBwc5OnpqVGjRmnChAmqV6+eAgIC9PLLL/ODBFBNrVy5UkePHlW3bt3k6+urVatWKTc3l8PMALAbTz31lObNm6fhw4fr+eefl5+fnw4fPqyvvvpKH3/8seLi4rR27Vr16dNHAQEB2rJliy5cuKDIyEijS0c1QGAMAABqvL59+2rlypWaOnWqpk+fLmdnZ7Vo0UKjR482ujTYiTfeeEO5ubl6+OGHdfXqVXXs2FE//PCD5Th/DRs21KpVqzRhwgS1bdtWfn5+GjVqlF555RXLPN58803L30O9vLw0fvx4XblyxahFAnAT6tatq6VLl2rKlClKT09XRESEvvzyS7Vq1cro0gBAkhQcHKyNGzfqhRdeUJ8+fZSRkaHw8HD169dPDg4O8vb21vr16zV79mylpKQoPDxcM2fOtJzgFyiJyVzwf3WoVnJycnThwgWdOXNGmZmZCg4OVoMGDeTi4mJ0abWW2WzW5cuXdebMGV25ckWBgYEKCgoqdKwhVK2rV68qMTFRFy5ckK+vr4KDg+Xj42N14iJUrfT0dJ09e1aJiYlyc3NTcHCw/P392ROvjLZv364OHTpo27Ztio6ONrocVBO18X1j78ts7/VVhtq4zABQFWrj52ttXGbcHN4zZccexnaoYBCcmJhodVnw+rlz55STk1Noen9/fwUFBSk4OFjBwcFFXidYLp+CQXBRbVHwMiMjo9D03t7exbZFwUuC5fJJTU0tti0KXk9NTS00raura7FtUfA6wXL5ZGRklLiO5F+/dOlSoWmdnJzUoEGDUtcVgmUAAAAAACoPgXEVyg+CSwtTbgyCTSaTAgICLIFJu3btdPfdd1uFKC4uLkpMTCw07/3792vt2rVKTExUVlaWVT3+/v6lhmU1PVguKggurn1uDILz91QNDg5W06ZN1a1bN6vX0NvbW+fPny80n4SEBP3+++86c+aMrl+/bjVPguU/VDQI9vDwsLxuwcHB6tChQ6GgMTk5uch5792717JneEFubm4lriO1JVguGASX9Bl2YxDs4uJi9To1b9680GfM9evXi5z3pk2bdObMGV24cMFqngWD5ZI+wwiWAQAAAAAoPwJjG7gxCC4qTCktCA4ODi4UBOeHHoGBgXJyKr2p2rZtW+x9ubm5unjxYpF7xJ45c6ZcwXJRAY29Bcv5QXBxbVFSEOzn52dZrvwg+MZlDgoKkqur603XmJKSUmxdCQkJ2rJli86cOaO0tDSrafOD5dICf3d395uq0dbyg+DSfjQpKghu2LChZbluDILzr3t5ed10jWlpaVY/vtxY6969e5WYmKjk5GSr6UoLlvOv21uwXFQQXFT7lBYEt2jRosgfN/z8/G56eTMzM3Xu3Lli3zflDZZvrJFgGQAAAACA/0NgXIqcnBzt3r27xDDl7NmzhYLg/GPXFgyCbwwpyhoE24KDg4Pq16+v+vXrq02bNsU+Ljc3V5cuXSo2zIuPjy81WC4uxGzVqpU8PT1tsjwHDx7UiRMnSgyESwqCIyIiCgXB+cH3zQbBZWUymeTj4yMfHx+1aNGi2MfdGCzfeFlSsOzj41NiiNm8eXMFBATYZHnOnDmjQ4cOlRgIX7161WoaT09Pq3qio6OLfA/ZIgguK3d3dzVp0kRNmjQp8XFpaWk6e/ZssetKWYLlotaVW265RY0bN7bJsiQnJys+Pr7EH02KC4LzayoqCA4ODpavr2+VBd8uLi4KDQ1VaGhoiY+7MVi+cXk3bdqkxMREnT9/3mo6Jycnyw9Bxa0rJf0gZ6T4+HijS0A1UpvfL/a67PZaV1WozcsOAJWhNn+u1uZlR/nwXik7TnpXiitXrqhu3bqSCgfBxQWjAQEBVRYEG6VgsFzaMX3zg+Xly5fr3nvvtcnzt2rVSvv375f0RxBclkNrVFUQbBSz2ayrV6+W6VAO+cHy888/r+nTp9vk+UePHq358+dLKhwEF3dojaoMgo1S3OEWbhyXHyzfeeedWr9+vU2ee/78+Ro9erQkqU6dOkW2wY3tU5VBsFGysrJ07ty5UteV/GDZ0dFR2dnZBldtLSEhQZGRkYV+JAJK4+7urvj4eIWFhRldSpWoDusKbQIAsBX6FKB0tW09qaianWra0Lx58xQTE1Pjg+CycnBwkL+/v/z9/UvdY/nw4cNq3ry5zWsYM2aM3nnnnRofBJeVyWSSt7e3vL29S91j+erVqyW2W0W1a9dO69evrxVBcFm5ubmpcePGpe41fP36dY0YMULnzp2zeQ1JSUk2OTRETeHs7KyQkBCFhISU+LisrCzNmjVLL730UhVVVnZhYWGKj49XUlKSTeb373//W1OmTNGWLVvo5+xEQkKCBg8erHnz5tn0DM7+/v616suxrdeVHj166OGHH9ajjz5qk/lJtMnNGjdunEwmk2bNmmWT+eHmLViwQJ9//rnWrl1rdCnIExcXp8cee0zLly8v9R9bqBpZWVm6/fbbNXXqVA0YMMBm86VPuTkPPvigWrVqZZff/2ur6dOna8eOHfrqq69sNs/atp5UFFuFZeTj48NGdAU4ODjIz8+vUubt6elJWFwB+cGys7Ozzeddp04dwuIKcnNzq7RjThMWV4yzs7O8vb2NLqNYYWFhNvuis2fPHklS+/btK+WzAeWX/1narFkzmwbGtZEt1xUnJyc1bNiQNrlJtmwTHx8fOTg40CZ25IcffpCzszNtYkdSUlIk/fEvzaZNmxpcDaQ/DqUmSY0aNWJduUm27FPc3d1Vv3592sSOBAQEyN3dnTYxAGf5AQAAAAAAAABIIjAGAAAAAAAAAOQhMK6m1q1bJ5PJZDlRFiqP2WzWX//6V8vf+nfu3Fkpz9O9e3eNGzeuUuZdW/GaVo2qWEdiYmI0aNAgm88XqA1YfwAAN4vtTwCoXTgorx0q7VijkydPVvfu3aumGGj16tVauHCh1q1bp8aNG8vf39/oklBGS5cu5XisVYB1BAAAAACAmoPA2A4lJiZarn/99deaNGmSDhw4YBnn6empuLg4I0qrlY4cOaKgoCB16dLF6FJQTpV1wkVYK20dyczMlIuLSxVXBQBAxdF3AQBshT4F1RGHpLBDDRo0sAw+Pj4ymUxW4zw9PS2P3bZtmzp27Ch3d3d16dLFKliWpBUrVig6Olqurq5q3LixYmNjlZ2dXdWLVG3FxMTo6aefVkJCgkwmkxo1aqSMjAw988wzCggIkKurq+644w5t3brVarpff/1VnTp1Up06dRQUFKSJEydave7Xrl3TiBEj5OnpqaCgIM2cObOqF61WKHhIirlz5yoiIkKurq4KDAzU0KFDjS2uhihqHenevbvGjh2rcePGyd/fX3379pUk7d27V/3795enp6cCAwP18MMPKykpyTKvJUuWKCoqSm5ubqpXr5569eqla9euWT3fW2+9paCgINWrV09PPfWUsrKyqnR5a6Pu3bvrmWee0fPPPy8/Pz81aNBAU6ZMMbqsWo02sT+0if0pb5vkH7pl2rRpCg4OVvPmzauu2FqkLH09qhZtYn/oU+wPfYp94vOrchEYV3Mvv/yyZs6cqbi4ODk5OWnkyJGW+zZs2KARI0bob3/7m/bv368PP/xQCxcu1LRp0wysuHp5++23NXXqVIWEhCgxMVFbt27V888/r2+//VaLFi3S9u3b1bRpU/Xt21eXLl2SJJ0+fVp33323br31Vu3atUvvv/++5s+fr1dffdUy3wkTJujXX3/VihUr9OOPP2rdunXavn27UYtZ48XFxemZZ57R1KlTdeDAAa1evVrdunUzuqwaoah1RJIWLVokFxcXbdy4UR988IGSk5PVo0cPtW/fXnFxcVq9erXOnTun+++/X9If/6wYPny4Ro4cqfj4eK1bt05DhgyR2Wy2PNcvv/yiI0eO6JdfftGiRYu0cOFCLVy40IjFrnUWLVokDw8PbdmyRTNmzNDUqVO1Zs0ao8uq1WgT+0Ob2J/ytsnatWt14MABrVmzRitXrqzCSmuHsvT1qFq0if2iT7E/9Cn2hc+vyschKaq5adOm6U9/+pMkaeLEiRowYIDS09Pl6uqq2NhYTZw4UY888ogkqXHjxvrHP/6h559/XpMnTzay7GrDx8dHXl5ecnR0VIMGDXTt2jW9//77Wrhwofr37y9JmjdvntasWaP58+drwoQJmjt3rkJDQ/Xuu+/KZDKpRYsWOnPmjF544QVNmjRJaWlpmj9/vj777DP17NlT0h+dT0hIiJGLWqMlJCTIw8NDAwcOlJeXl8LDw9W+fXujy6oRblxH8kVERGjGjBmW26+++qrat2+v1157zTJuwYIFCg0N1cGDB5Wamqrs7GwNGTJE4eHhkqSoqCir5/L19dW7774rR0dHtWjRQgMGDNDatWs1ZsyYSl5KtGnTxtJvRERE6N1339XatWvVu3dvgyurvWgT+0Ob2J/ytomHh4c+/vhj/jZcSRITE0vt61G1aBP7RZ9if+hT7AufX5WPPYyruTZt2liuBwUFSZLOnz8vSdq1a5emTp0qT09PyzBmzBglJiYqLS3NkHqruyNHjigrK0tdu3a1jHN2dlanTp0UHx8vSYqPj1fnzp2tTl7YtWtXpaam6tSpUzpy5IgyMzN12223We738/PjbyqVqHfv3goPD1fjxo318MMP6/PPP2cdqGQdOnSwur1r1y798ssvVp9HLVq0kPTHetW2bVv17NlTUVFRGjZsmObNm6fLly9bzaNVq1ZydHS03A4KCrJ83qFyFexrJF57e0Cb2B/axP6Ut02ioqLYsK9EZenrUbVoE/tFn2J/6FPsC59flY/AuJpzdna2XM8PKHNzcyVJqampio2N1c6dOy3Dnj17dOjQIbm6uhpSL2AELy8vbd++XV9++aWCgoI0adIktW3bVsnJyUaXVmN5eHhY3U5NTdU999xj9Xm0c+dOHTp0SN26dZOjo6PWrFmj77//Xi1bttScOXPUvHlzHTt2zDKPgp930h+fefmfd6hcvPb2hzaxP7SJ/Slvm9zYd8G2ytLXo2rRJvaLPsX+0KfYFz6/Kh+BcQ0WHR2tAwcOqGnTpoUGBweaviKaNGliOS5rvqysLG3dulUtW7aUJEVGRmrz5s1Wx87ZuHGjvLy8FBISoiZNmsjZ2Vlbtmyx3H/58mUdPHiw6hakFnJyclKvXr00Y8YM7d69W8ePH9fPP/9sdFm1RnR0tPbt26dGjRoV+jzK/zJlMpnUtWtXxcbGaseOHXJxcdGyZcsMrhwAANgKfb39oU0AVFd8flUujmFcg02aNEkDBw5UWFiYhg4dKgcHB+3atUt79+61OgEbys7Dw0NPPPGEJkyYID8/P4WFhWnGjBlKS0vTqFGjJElPPvmkZs+eraefflpjx47VgQMHNHnyZD377LNycHCQp6enRo0apQkTJqhevXoKCAjQyy+/TIhfiVauXKmjR4+qW7du8vX11apVq5Sbm8thQKrQU089pXnz5mn48OGWswsfPnxYX331lT7++GPFxcVp7dq16tOnjwICArRlyxZduHBBkZGRRpcOVDsjRoxQw4YN9frrrxtdCmC3WE+q3pYtW+jr7UxJbbJs2TK9+OKL+u9//2t0mYDdo0+pevQplY/AuAbr27evVq5cqalTp2r69OlydnZWixYtNHr0aKNLq9beeOMN5ebm6uGHH9bVq1fVsWNH/fDDD/L19ZUkNWzYUKtWrdKECRPUtm1b+fn5adSoUXrllVcs83jzzTctf9H38vLS+PHjdeXKFaMWqcarW7euli5dqilTpig9PV0RERH68ssv1apVK6NLqzWCg4O1ceNGvfDCC+rTp48yMjIUHh6ufv36ycHBQd7e3lq/fr1mz56tlJQUhYeHa+bMmZaTSwIou4SEBH6EBErBelL16OvtT0ltsnDhQh04cMDoEoFqgT6l6tGnVD6TueD/5lHIlStXVLduXX3zzTcaNmyY0eVUS0lJSapfv76WL1+ue++91ybzbNWqlfr27at//vOfNplfbRQREaEhQ4Zo+vTpNpnf6NGjtXfvXv3+++82mV9t9Mgjj+jYsWNav369TeY3f/58jR49Wrm5uVYnYUTZffDBBxo7dqyys7ONLqVSLVq0SDExMcrMzCx0fDYY49ChQ2rWrJl+/fVXdevWzehykMff31/PPfecJk6caHQpyHPPPffIwcFBK1asMLoU5Hn99dc1a9YsTtBlR9atW6e77rpLhw4dUtOmTY0uB5IyMzNVp04dffLJJ3r44YeNLgd5OnTooE6dOun99983uhTkefrpp7Vhwwbt3LnT6FJqHX4CAQAAAAAAAABIIjAGAAAAAAAAAOQhMAYAAAAAAAAASOKkd6VydHSUk5OTHnroIcXExBhdTrWUf5hsV1dXm83T1dVV77zzjj788EObzbO2SUtLs3mb/Oc//5GHh4fN5lnbZGRkqEePHjabX377enh4cAzjCsrKyrLpegKUlaOjo9q1a1fjj59d3TRr1kx169Y1ugzA5hISEpSUlGSTeeXm5qp169bavn27TeYn/XH88LCwMJvND7AH0dHRys3NNboMFBAcHKyAgACjywDsAoFxKTw9PfXjjz9q9+7dlf5caWlpeumll/Too4+qbdu2VfJcI0eOVJs2bSr1uSTJz89Pffr0sdn8Pv/8c/3www82m5+tbd++XZ988ommT5+uOnXqGF1OkRwdHTVy5Eibze/VV19VREREhaf/7bfftHTp0gqfyPD48eOaPXu2XnjhBQUFBZV7+uzsbD333HN68MEHdeutt1aohjfeeEPNmjXTkCFDKjS9JJudGFKShg8frvT0dKWmptpsnsXZvHmzvv76a82ePbvSn2vTpk1avHixZs2aVenPJUmdOnWqkucBCgoMDNTOnTt16NAhm/6QhIo7f/68Nm/erLFjxxpdCmBTCQkJioyMVFpamk3n26FDB5vNy93dXfHx8YTGqDFcXFx08uRJHThwwOhSkCcjI0MbNmxQly5djC4FsAsmc/7unzDc5cuX5efnpyVLlui+++6r1Oe6dOmS6tWrp6VLl2rw4MGV+ly10VdffaXhw4crNTWVPW7LaO7cuRo3bpwyMzMrNP3vv/+uzp07a8+ePWrdunW5p88/U/GiRYs0YsSICtUQFRWlnj17Vkloam8+/vhjjRkzRlXRpXz00Ud64oknlJOTU+nPVVssWrRIMTExyszMlLOzs9HlIM/dd9+tHTt2aPfu3apfv77R5dRqZrNZf/nLX7RmzRrt37+/Qj9MonLcc889cnBw0IoVK4wupdravn27OnTooM8++0yRkZFGl1NIfHy8HnroIW3btk3R0dFGl1MtrVu3TnfddZcOHTqkpk2bGl0O8jzxxBP65JNPtGPHDjVr1szocmq9CRMm6O2339a2bdsUFRVldDnI8/TTT2vDhg3auXOn0aXUOuxhDAAAYIfmz5+vNm3a6JFHHtE333wjT09Po0uqlcxms9555x0tXrxYixcvJixGjRUZGUkgC1Sht956Sz///LOGDx+uH374Qf7+/kaXVGstXbpUb731lt58803CYiAPJ70DAACwQ0FBQVq0aJF++eUXRUZGasmSJVWyFz/+T3x8vHr16qVx48Zp7NixGjp0qNElAQBqCA8PD33xxRc6evSomjdvrg8//JB/0FWxkydPatiwYbrvvvv05z//Wc8++6zRJQF2g8AYAADATt19993av3+/oqOjNWzYMPXu3VtLly7V9evXjS6txjKbzdqyZYvGjh2rNm3aKCEhQatWrdKcOXOMLg0AUMN06NBBBw4c0L333qvHH39ct912mz799FNduXLF6NJqLLPZrD179uill15SixYt9Ntvv+mzzz7T8uXL5eBARAbkY23ATYuJidGgQYOMLgMwXGpqqt5++20lJycbXQqAGuSWW27RihUrtHLlSl28eFH33Xef6tevrwceeEDffvutzU9UVRvlh8Tjx49Xo0aNdPvtt2vx4sWaMmWK9uzZo/79+xtdImCYmJgYmUwmvfHGG1bjly9fLpPJZLmdk5OjWbNmKSoqSq6urvL19VX//v21ceNGy2O6d+8uk8lU7NC9e/eqWizAbgQEBGjBggXauHGj3N3dNWLECAUEBOjPf/4z4bGN5IfEkyZNUmRkpNq0aaO5c+fq8ccf14EDB/Tggw9afZ4B4BjGAAAA1cKAAQM0YMAAHTx40HI83aFDh8rZ2VlRUVHq0KGDOnbsqA4dOqh169aqU6eO0SXbJbPZrKNHj2rbtm3atm2b4uLitH37diUnJysgIED33Xef7r//ft15551ydHQ0ulzALri6umr69Ol67LHH5OvrW+h+s9msBx54QD/99JPefPNN9ezZUykpKXrvvffUvXt3LV68WIMGDdLSpUstJzg+efKkOnXqpJ9++kmtWrWSJLm4uFTpcgH2pEuXLlq/fr1Onjypb7/9Vt98841GjBghBwcHtWzZUh06dLD09W3btpW7u7vRJdsls9msU6dOWfXz27Zt04ULF+Tj46NBgwZp5syZ6t27N585QAkIjAHUeJmZmXwZqMZoP8Bas2bN9PLLL+vll1/WwYMH9eOPP2rbtm36/ffftWDBAuXk5MjZ2VmtW7dW06ZNFRYWpvDwcIWHh1uu161bt0bvSZOenq6EhASdOHHCcnnixAkdP35cu3fvtvwTJDQ0VB06dND48eN1xx13EBIDxejVq5cOHz6s119/XTNmzCh0/zfffKMlS5bou+++0z333GMZ/9FHH+nixYsaPXq0evfuLT8/P8t96enpkqR69eqpQYMGlb8QQDURGhqqcePGady4cTp58qRWr15tCT6//PJLZWZmWkLkiIgIq/49/7q/v3+N7uczMzN16tQpS/9esK/fs2ePzp8/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tZzJZNKjjz6qu+66S6NHj9awYcPk7Oys1NRU7d+/Xy1btiw0TUJCQoWDoZpkz549WrBggT799FNdvHhRffv21bx58yx7maLqJCQkFLvXire3t9avX6/Zs2crJSVF4eHhmjlzpvr371+meZc0/cKFC3XgwIFC03z11VcaO3as7r//fnXp0qXUMxBXN/v379fLL7+s5cuX69Zbb9X//u//qn79+hWen60+U262rQEAQGELFy4sNK5Ro0bKyMiwGufk5KTnnnuuyBPiFaVRo0Y1+od1AACqMwLjamLdunWFxi1fvtxm82/UqJF++ukn7d271xKCtmrVSq1bt1bXrl1133336Y477pDZbC5US1FfImsas9mso0ePauPGjdq4caN+++037d+/XwEBAXr00Uf16KOPFhmuF6Wy27ImKu01W7dunX7//XetWrVKkvV7MjIyUqtXr67wc5c0fUxMjNUJX7p3727Z8Fm8eLF++uknTZw4UTt37pSzs7MmT56sfv36qVOnTtWqzc1ms/bt26fVq1fr+++/17p16xQWFqZPP/1Uw4cPl6OjY4nTl6X9CqroZ8rNtjUAAAAAACAwxg1at26tf/7zn3rjjTe0cuVKrV69WuvXr9eHH34oSQoKClLnzp3VokULNW3aVE2aNFHTpk0VFBQkk8lkcPU3Lzc3V2fOnNGRI0d05MgRHT58WP/973+1adMmnTt3TpLUqlUr3XHHHZo2bZoGDBhQ6GRegPTH3vu9e/dWz549tWzZMn3zzTd65513NHXqVPn6+qp3797q16+funfvrpCQELt6H+Xk5OjcuXPatGmTVq9erdWrV+v06dNyc3PTXXfdpQ8++ECPPPKIXFxcjC4VAAAAAADYGIExiuTi4qIhQ4ZoyJAhkqSLFy9q8+bN2rhxo7Zs2aJPPvlEp06dsjzezc1NjRs31i233CI/Pz/5+vqqbt26JV56eHhUashsNpuVmpqq5ORkXb58ucTLixcv6tixYzp69KjS09Ml/RH4hYSEKCIiQiNHjtQdd9yhzp07y9fXt9JqRs3j4OCg++67T/fdd5+ys7O1detWSwg7atQomc1mmUwmBQYGqmHDhmrYsKFCQkIs1wve9vLyuul6rl+/rtOnT1uGU6dOFbqdmJionJwcSVLLli31l7/8Rf369dOdd94pV1fXm64BAAAAAADYLwJjlEm9evU0cOBADRw40DLu+vXrOnbsmNXeuCdOnNCRI0eswtjijt/q5OSkunXrysvLS05OTqUOt9xyi44ePaqcnBxlZ2eXOFy9elXJycnKzs4u8rnd3d2twmtfX1/16NFDf/3rX9WkSRM1adJEt9xyC+EYbMrJyUmdO3dW586dFRsbqwsXLiguLq5QcPvbb7/p9OnTunjxotX0Xl5eql+/vpydneXi4iJnZ2er602aNNHRo0eVlZWlzMxMZWVlWV2/fPmyLl26ZDVPb29vSyjdokUL9ezZ0xJUt23bVuHh4VX5EgEAAIPEx8cbXUKR7LUuAABqMgJjVJibm5tatmxZ6rF7MzIydOXKFau9egteT01NLTUAzs7OtoS8ZQmXvby8Cu3RnH+9bt26/JUedqF+/folnpDt+vXrOnPmjNUewBcvXrQKgQteuru7q169epYA+cZLHx+fQnste3p6VuESozinTp2Sh4cH/2AAAFQ5f39/ubu766GHHjK6lGK5u7vL39/f6DIAAKg1CIxR6erUqaOAgAAFBAQYXQpQrbi5uVn2eEfN9tNPP+mJJ57QkCFDNHr0aHXv3r1GHBceAGD/wsLCFB8fr6SkJJvMb8GCBfr888+1du1am8xP+iPUDgsLs9n8AABAyQiMAQAwWJ8+ffT000/r008/1RdffKHGjRtr5MiRiomJUcOGDY0uDwBQw4WFhdkskP3hhx/k7Oys6Ohom8wPAABUPQejCwAAoLYLDg7WjBkzdPLkSa1YsUJt2rRRbGyswsPDNWDAAC1btkxZWVlGlwkAAAAAqAUIjAEAsBNOTk7685//rGXLlunUqVOaPn26Tpw4oSFDhigkJEQTJkwgOAYAAAAAVCoCYwAAqkhmZqbOnj1rNeTk5BT52ICAAI0fP16bNm3S6NGjdf78eb311lu6du1aFVcNAAAAAKhNOIYxAABVZNOmTbrrrrusxh07dkyNGjWyGmc2m7Vu3TotWLBA3377rdLT09WzZ0+NHj1a3t7eVVgxAAAAAKC2ITAGAKCKtG3bVmvWrLEa16BBA8v148ePa9GiRVq4cKGOHz+ukJAQjR8/XqNGjSoUKgMAAAAAUBkIjAEAqCK+vr7q1atXofF79uzR//t//08///yznJycNHDgQL333nvq27evHB0dDagUAADbW7JkiWJjY3X48GG5u7urffv2WrFihTw8PIwuDQAAFEBgDACAwbZt22Y5yd0jjzyigIAAo0sCAMCmEhMTNXz4cM2YMUODBw/W1atXtWHDBpnNZqNLAwAANyAwBgDAYMOGDVNMTIzRZQAAUGkSExOVnZ2tIUOGKDw8XJIUFRVlcFUAAKAoDkYXAABAbcdfcQEANV3btm3Vs2dPRUVFadiwYZo3b54uX75sdFkAAKAIBMYAAAAAgErl6OioNWvW6Pvvv1fLli01Z84cNW/eXMeOHTO6NAAAcAMCYwAAAABApTOZTOratatiY2O1Y8cOubi4aNmyZUaXBQAAbsAxjAEAAAAAlWrLli1au3at+vTpo4CAAG3ZskUXLlxQZGSk0aUBAIAbEBgDAAAAACqVt7e31q9fr9mzZyslJUXh4eGaOXOm+vfvb3RpAADgBgTGAAAAAIBKFRkZqdWrVxtdBgAAKAOOYQwAAAAAAAAAkERgDAAAAAAAAADIQ2AMAAAAAAAAAJBEYGxX3N3d1a5dOyUmJhpdClDlzp8/r9tvv92w53d0dFSnTp2UnJxsWA0om+TkZHXp0sXoMmqU0NBQNWnSRNu2bTO6FAAos2vXruncuXOKiooyuhTArgUGBioyMlJbt241uhQAKLPs7GwdPHhQt956q9Gl1EoExnakTp06Cg8P12uvvab//ve/RpcDVJm4uDjNmjVLkZGRhtXg6Oio7Oxsffnll8rKyjKsDpQsIyNDX331lcxms9Gl1Ci33nqr6tatq4EDB2rRokW6fv260SUBQLHMZrM2bNigvn37av/+/Ro4cKDRJQF2LSIiQuHh4Ro5cqTeeecdXblyxeiSAKBEO3bs0JAhQ7R27Vr6eYMQGNuZOXPmyNPTU23bttW0adMIrlCjpaWlacKECbrtttvUuHFjvfHGG4bWM2fOHMXFxemVV14xtA4Ub8KECdq3b5/eeecdo0upUby8vLRmzRrdfvvtiomJUcOGDfXss8/qwIEDRpcGABbJycmaM2eOWrdurW7duun8+fNavXq1of9QAqoDJycnLVu2TMOGDdOzzz6r4OBgjRkzhn8WAbAraWlp+te//qXbbrtN0dHR2r59uxYvXqx7773X6NJqJZOZ3bTszvXr1zV16lS9+eabCggI0KBBgzR48GB1795dzs7ORpcH3JT09HStWbNGy5Yt03fffafU1FRNmTJF48ePv6n39++//67OnTtrz549at26dYXn89Zbb2nChAl6/PHHNXXqVNWvX7/C84LtnD17Vq+88ormz5+v9957T08++aTRJdVYhw8f1kcffaQFCxbo4sWLCg8PV4cOHawGf39/o8sEUMOlp6dr9+7d2rZtm+Li4rRt2zbt27dPkjRo0CA98cQTuuuuu2QymQyuFDd6/fXXNWvWLJ0/f97oUlCEM2fOaP78+froo4906tQpBQUFFerng4ODjS4TQA2XlZWlffv2adu2bZa+fvfu3crMzFTfvn31+OOPa8CAAXJycjK61FqLwNiO7dmzR//617+0bNkyHT9+3PJ34cGDB6tXr17y9vY2ukSgTC5duqQffvhBy5Yt06pVq3Tt2jU1b95cgwcP1qhRo9S0adObfg5bBcZms1lvv/22YmNjlZubq7///e8aO3asXF1db7pGlN/169f19ttva9q0aXJxcdHUqVP15JNPEhBUgYyMDK1cuVK///675YtcSkqKJBUKkaOiotSgQQM5OPDHJQDlYzabdeXKFR08eLBQOJydnS0nJye1bt1aHTp0UMeOHXXvvfcqKCjI6LJRAgLj6iE7O1tr1qzRb7/9Zunnk5KSJKlQiNy2bVsFBwcT3ACokNTUVB0+fLhQOJyRkSEHBwe1aNHC8nlzzz33qHHjxkaXDBEYVwtms1m7du3S0qVLtWzZMu3du1fSHxvsUVFRVkPz5s3ZCxmGycjIUHx8vPbs2WM1nD59WpLUsWNHDR48WIMHD7b58YptFRjnS0pK0pQpU/TBBx/I3d1dAwYM0ODBg9W/f395eXnZoGIU58qVK1q1apWWLVum77//Xunp6Ro7dqwmTZokX19fo8urtXJzc3XkyBGrL3rbt2+3hMhOTk5q2LChQkNDFRISUugyJCREgYGBhMpALZIfBp86dUqnTp3SyZMni7xMTU2VpELhcP4PUvxoW70QGFdPZrNZCQkJln4+v6+/ePGipD/O9xEUFFRkH59/2aBBA0JloJZJTU219OfF9fX5x02/MRzu2LGj2rVrJw8PD4OXAkUhMK6GDh8+rM2bNxcZyDk7O6tFixZq06aNIiIi1LBhQ6vBz8+PPfNQYbm5uUpKStLp06ethgMHDmjPnj06ePCgcnJyJBX+QaNr164KCwurtNpsHRjnO3jwoL766istW7ZMO3fuVJ06ddSrVy/16NFD7du3V7t27Qgxb9KlS5e0Y8cO7dy5Uz/99JPWrl2rrKwsdejQQYMHD9YDDzygJk2aGF0mipAfIsfHx1t9MSx4PSMjw/L4G0Pl/H7J19e3yKFu3bpseAJ2xGw26+rVq7p8+bLVcOnSJcv1s2fPFhkGS5LJZCo2cGrcuDHhcA1BYFxz5IfI+/btKxQC5V9PS0uzPP7GULlhw4aqV69esf28r68vOzsBdsRsNuvatWuF+vmC/f358+eLDIPzBQYGWnYWKdjXN2rUSG3atJGnp6dBS4fyIjCuIS5duqS9e/dahchHjx7VuXPnVLCJXV1dFRwcXChIbtiwoQICAiwb6HXr1pWXlxd7gtUCubm5unLlipKTky3DuXPnCoXCp0+f1pkzZ5SZmWmZ1sHBQUFBQWrSpIlVONy6desqP2RKZQXGBR07dkzLly/X8uXL9Z///Efp6emS/gjH27dvr/bt26tt27a65ZZbFBoaqrp16/IDTR6z2azLly/r5MmTOnbsmHbu3GkJiRMSEiRJ7u7u6tSpkwYNGqRBgwYpPDzc4Kpxs8xms5KSkooNk0+fPm35Apr/Y9ONvLy8itzAvDForlu3rjw8POTu7m4Z8m+7urrSn6FWM5vNyszMVFpamtLS0nTt2jXL9bS0NF25cqXYjcOCQ3JycrHrqo+Pj3x9fYvdUAwJCVFQUBDhUC1AYFx7mM1mJScnFxsmnz592vKDUnEnc/fw8CgxUM7v7/P7+aL6ejc3N/p51HoF+/kb+/qUlJQy9fOXL19WdnZ2kfP39PSUn5+f6tevb/UPwoJ9fXBwsOrUqVPFS47KQmBcw2VlZens2bNFhn8Fh4K/DOczmUyWL//5IXL+cOM4Dw8Pubq6ytXVVXXq1LG6vHGcs7MzIVoFmM1mZWVlKT09Xenp6crIyCjyMv96amqqZeOu4HDjuJSUFBX1MeDp6VnkDwv5Q/7fyx0dHQ14NQqrisC4oOzsbB08eNASeu7YsUM7duzQpUuXLI/x9PRUaGhooaF+/fry9vaWl5eXvL29LdddXV2rzbphNpuVnp6ulJQUpaSk6OrVq5bLCxcuKCEhQSdPnrQarl27Zpne39/fErK3a9dO7du3V0REhN28n1C1zGaz5TOruL0ZSvpiW1yAVZCbm1uxgXJZbru6usrZ2VnOzs5ycnKyXC9uXHGP4T1eu+T33VlZWcrOzrZcL8+47OxsZWRkFLsRWJbbaWlpZVpP8r/3lXeoW7cu721YEBjjRmazWWlpaaUGVcX198WFzQW5urqWu2+/8cflivbtBW/zWVi7mM3mIvvt8vb3N4a9Fenriwt6CypuR4yy9PP84Fv7EBjDcny5pKSkMgWMN97O38uyrEwmU5mC5dJCZwcHB8tgMpmsbhc1riyPqVOnjjIyMpSbm2s1mM3mUseV9pj8sPfGYLc848rLzc2tTIH/jePyA83qpKoD46KYzWYlJibqxIkThcLS/AD13LlzxU7v5ORUKES+MVj29PS0hE75l/nDjbcdHR0t7/OcnByrITs7u9hx2dnZunr1qiUELhgIF7xeUvjQoEEDS0AeFhZmFZiHh4erQYMG1SYch33LD5uTk5Mr/CW7tMfa8quSyWQq98ZnWR5T1DiTyWQ15H8eFDdU5v1OTk7Kzs629I3FDVV1f3Z2tk028EobV5aQtjzyA5GyBCHlCU28vb3l4+ND0AGbIDCGLeWHzfn9fHn677I89tq1azbv5yvab5d3uqL6XaP6ehcXF2VmZlZpX17S/Tk5OSX+EGur/t7W/byLi0u5+u+y3ufl5cWh3lBuvFsgk8lkCQorIj09XWlpaRUKQ0t7fEpKis6fP2913/Xr15WdnV2mELe48cXp1q2b1q9fX+z9pQXOJYXVLi4uxQbhvr6+ZQrQyxOqe3h48HeQKmYymRQcHKzg4GB17ty5yMdkZGRY9uwuuFduScFscnKyEhISlJKSotTUVEvQUVwAXPA97uDgUOg97+DgUGTIXDCIvjGsDgoKKjHILjjO19dXLi4ulfpaA/lMJpO8vLwq7WSU+XvTp6enl2uP0PLcLu80+Z8Dpc2jrBtYJW14lbZRVla33HKLjh07VubHl7ZhWtIGbVnuc3JyKvOGupubW5k37isSCJRlHs7OznJ3dyfQBVDrmEwmy6EoKoPZbLbaxqysvrs880hLSyvTPIrqo23d15dVdHS0tm/fXubHl6Xfrmhff2NoX1o/W5G9y23d/7u4uMjNzY1AF3aFdyNuWn5YWZ0U7BgLBsk5OTmWvTJvDHzZGxK2UKdOHQUGBiowMLDSnsNsNlsFySaTyWqvY97LQNmZTCa5ubnJzc3N6FLsUnk2PMu6QQgAQFUxmUzVcnu2qpQ1ZM7NzS207VxcXw+geiAwRq2UH6ABNVHBvefYyxxAZWLjDwCAmot+Hqi9OJUoAAAAAAAAAEASgTEAAAAAAAAAIA+BMQAAAAAAAABAEoExAAAAAAAAACAPgTEAAAAAAAAAQBKBMQAAAAAAAAAgD4ExAAAAAAAAAEASgTEAAAAAAAAAIA+BMQAAAAAAAABAEoExAAAAAAAAACAPgTEAAAAAAAAAQBKBMQAAAAAAAAAgD4ExAAAAAAAAAEASgTEAAAAAAAAAIA+BMQAAAAAAAABAEoExAAAAAAAAACAPgTEAAAAAAAAAQBKBMQAAAAAAAAAgD4ExAAAAAAAAAEASgTEAAAAAAAAAIA+BMQAAAAAAAABAEoExAAAAAAAAACAPgTEAAAAAAAAAQBKBMQAAAAAAAAAgD4ExAAAAAAAAAEASgTEAAAAAAAAAIA+BMQAAAAAAAABAEoExgBrCx8dHffv2laenp9GlAAAAAAAAVFtORhcAALYQGRmp1atXG10GAAAAAABAtcYexgAAAAAAAAAASQTGAAAAAAAAAIA8BMYAAAAAAAAAAEkExgAAAAAAAACAPATGAAAAAAAAAABJBMYAAAAAAAAAgDwExgAAAAAAAAAASQTGAAAAAAAAAIA8BMYAAAAAAJuoV6+eIiIijC4DAADcBJPZbDYbXQQAAAAAAAAAwHjsYQwAAAAAAAAAkERgDAAAAAAAAADIQ2AMAAAAAAAAAJBEYAwAAAAAAAAAyENgDAAAAAAAAACQRGAMAAAAAAAAAMhDYAwAAAAAAAAAkERgDAAAAAAAAADIQ2AMAAAAAAAAAJBEYAwAAAAAAAAAyENgDAAAAAAAAACQRGAMAAAAAAAAAMhDYAwAAAAAAAAAkERgDAAAAAAAAADIQ2AMAAAAAAAAAJBEYAwAAAAAAAAAyENgDAAAAAAAAACQRGAMAAAAAAAAAMhDYAwAAAAAAAAAkERgDAAAAAAAAADIQ2AMAAAAAAAAAJBEYAwAAAAAAAAAyPP/AbsP+dFaJ8fWAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import Rewriter\n", - "from lambeq.backend import draw_equation\n", - "\n", - "not_d = Rewriter([negation_rewrite])(d)\n", - "draw_equation(d, not_d, symbol='->', figsize=(14, 4))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### RewriteRule example: \"Past\" functor" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Sometimes, a :term:`rewrite rule` may become too complicated to be implemented using the :py:class:`.SimpleRewriteRule` class, so the more general :py:class:`.RewriteRule` class should be used instead. A concrete subclass of a :py:class:`.RewriteRule` should implement the methods :py:meth:`~.RewriteRule.matches` and :py:meth:`~.RewriteRule.rewrite`.\n", - "\n", - "A rewriter uses the :py:meth:`~.RewriteRule.matches` methods of its :py:class:`.RewriteRule`\\ s to detect if a rule can be applied. If there is a match, then the matching box is replaced with the result of ``rewrite(box)``. \n", - "\n", - "In the following example, a :term:`functor` that changes the tense of certain auxiliary verbs is implemented by directly subclassing :py:class:`.RewriteRule`:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import RewriteRule\n", - "\n", - "class PastRewriteRule(RewriteRule):\n", - " mapping = {\n", - " 'is': 'was',\n", - " 'are': 'were',\n", - " 'has': 'had'\n", - " }\n", - " def matches(self, box):\n", - " return box.name in self.mapping\n", - " \n", - " def rewrite(self, box):\n", - " new_name = self.mapping[box.name]\n", - " return type(box)(name=new_name, cod=box.cod)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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nDjR9FxlZaVZYqybLM+ePYvdu3cjNzfX4q2Chg0bhgMHDjT5upubG8LCwkwJffjw4Y0m+rY8akrkKGQymem7MHnyZLPXamtrUVJS0mRBZ3x8/vx5HDp0qMmCtCkjRozA/v37WxynsVA05q6YmJgmd9wai1xHPMpKriM0NBSPPvooHn30UQD/d/SwftFnHI4cOYJvv/222auqN9fn8/DwgFarNeWw3r17NzgTSKvV8vRuF8Tish1xc3NDYGAgAgMDERUV1aJxDAYDysrKoNPpmtxjaxwEQQAAsz2+Te0J9vPzY6FITsHHxwdRUVEWvzN6vR6lpaUN9t4a/xoMBshkMrMjm3WPavr7+0MuZ3PsSG7cuAFfX18EBgZKHQpZIJfLERIS0uQVqRtTW1uL8vJyi/nMONSdT3ODSqVioUgOTyaTwd/fH/7+/oiJiWnyfTU1NSgvL2/0qKROp4MgCHB3d2/yyKa/vz9/ptFOsTdDFrm5uSEgIEDqMIgcmru7O9RqtdRhkIh2796NZ555BsnJyUhJSUFCQgJPvXcRcrmcOw2ImqFQKHgxRLIKdykQERHVM3bsWDz77LPYu3cvRo4cie7du2PlypXIzs6WOjQiIiKHxeKSiIioHq1WizVr1uD333/H1q1bERcXh2XLliEiIgKJiYlIS0uDTqeTOkwiIiKHwuKSiIioCXK5HA888ADS0tJw48YNrF69GteuXUNycjI6duyIBQsWsMgkIiL6XywuiYio3aqpqUFeXp7Z0NSVf0NDQzF//nwcPnwYKSkpKCgowNtvv93gsv5ERETtFS/oQ0RE7dbhw4dx7733mj135coVREZGmj0nCAIyMjLw6aefYvPmzbhz5w5GjRqFlJQUqFSqNoyYiIjIcbG4JCKidqt3797YtWuX2XN1b15/9epVbNy4ERs2bMDVq1fRsWNHzJ8/H0899VSDApSIiKi9Y3FJRETtVmBgIEaPHt3g+dOnT+P555/H3r17IZfLMXHiRHzwwQcYN24c72VIRETUBBaXRERE9Rw9etR0AZ8nnngCoaGhUodERETk8FhcEhER1TN16lTMmDFD6jCIiIicCq8WS0REVI+vr6/UIRARETkdFpdERERERERkMxaXREREREREZDMWl0RERERERGQzFpdERERERERkMxaXREREREREZDMWl0RERERERGQzFpdERERE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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "past_d = Rewriter([PastRewriteRule()])(d)\n", - "draw_equation(d, past_d, symbol='->', figsize=(9, 2))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating ansätze" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "d = parser.sentence2diagram('We will go')" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ":term:`Ansätze ` for the quantum pipeline are implemented by extending the :py:class:`.CircuitAnsatz` class, while ansätze for the classical pipeline need to extend the :py:class:`.TensorAnsatz` class. Both classes extend :py:class:`.BaseAnsatz`, sharing a common interface. Once an :term:`ansatz ` is instantiated, it can be used as a :term:`functor` to convert diagrams to either a :term:`circuit ` or a tensor diagram.\n", - "\n", - "An :term:`ansatz ` should be initialised with an ``ob_map`` argument, a dictionary which maps a rigid type to the number of :term:`qubits ` in the quantum case, or to a dimension size (e.g. ``Dim(2, 2)``) for the classical case. Some :term:`ansätze ` may require additional arguments (see the `API documentation <../root-api.rst>`_ for more details).\n", - "\n", - "In ``lambeq``, a :term:`functor` is defined by specifying the mappings for objects ``ob`` and arrows ``ar``. The :py:class:`.CircuitAnsatz` and :py:class:`.TensorAnsatz` classes already implement methods which extend ``ob_map`` to map not just base (atomic) types, but also compound types, into :term:`qubits ` and dimensions respectively. Therefore, to complete a new :term:`ansatz ` class, you only need to provide the mapping from rigid boxes to diagrams. This typically involves the following steps:\n", - "\n", - "1. Obtain the label of the box using the ``_summarise_box`` method. This provides a unique token which can be used to parameterise the box.\n", - "2. Apply the :term:`functor` to the domain and the codomain of the box.\n", - "3. Construct and return an :term:`ansatz ` with new domain and codomain -- see how to construct diagrams using the low-level ``lambeq`` backend `here <./discocat.ipynb>`_." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### CircuitAnsatz example: \"Real-valued\" ansatz" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This :term:`ansatz ` always returns a tensor with real-valued entries, since the ansatz is constructed using only the CNOT and Y rotation gates, which both implement real-valued unitaries.\n", - "The :py:class:`.CircuitAnsatz` provides functionality to add postselections or discards to ensure that domains and codomains for the boxes match. To extend the :py:class:`.CircuitAnsatz` to create a new ansatz thus only involves providing a function to generate the circuit within a box." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq.backend.quantum import CX, Id, Ry\n", - "\n", - "from lambeq import CircuitAnsatz\n", - " \n", - "def real_ansatz_circuit(n_qubits, params):\n", - "\n", - " circuit = Id(n_qubits)\n", - " n_layers = params.shape[0] - 1\n", - "\n", - " for i in range(n_layers):\n", - " syms = params[i]\n", - "\n", - " # adds a layer of Y rotations\n", - " circuit >>= Id().tensor(*[Ry(sym) for sym in syms])\n", - "\n", - " # adds a ladder of CNOTs\n", - " for j in range(n_qubits - 1):\n", - " circuit >>= Id(j) @ CX @ Id(n_qubits - j - 2)\n", - "\n", - " # adds a final layer of Y rotations\n", - " circuit >>= Id().tensor(*[Ry(sym) for sym in params[-1]])\n", - "\n", - " return circuit\n", - "\n", - "\n", - "class RealAnsatz(CircuitAnsatz):\n", - " def __init__(self, ob_map, n_layers, n_single_qubit_params = 1, discard = False):\n", - "\n", - " super().__init__(ob_map,\n", - " n_layers,\n", - " n_single_qubit_params,\n", - " real_ansatz_circuit,\n", - " discard,\n", - " [Ry, ])\n", - "\n", - " def params_shape(self, n_qubits):\n", - " return (self.n_layers + 1, n_qubits)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAP7CAYAAAC0u1IMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVxUZfs/8M/AALIJIiAuuOSKCqK4JG5AalaCT4+ZS+6mX81MM00L10rF1NQe1NxSn0eTytzKSlzATNMMRVFBzX0hFTcEFAbm+v3hj5FRdmbmAPN5v168ZM5yn+uM19znnouzqEREQEREREREREREZCYslA6AiIiIiIiIiIjIlFgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCmAlkZWXh3LlzyMzMVDoUIlJYSkoKLl++rHQYpLB79+7hxo0bSodBCrt16xZu3bqldBiksOvXr+PevXtKh0FEChMR/P3330hPT1c6FFJQZmYmzp07B61Wq3QoZoEFMSMTEYwaNQoNGjTA0KFDmdhEZuzBgwfo1KkTateuja+//lrpcEghV65cga+vL+rUqYPIyEilwyGFxMbGokGDBmjYsCFiY2OVDocUsnPnTtSpUwe+vr64evWq0uEQkYKmTZuG+vXr49///jcyMjKUDocUoNVqMXToUDRo0ADvvPMORETpkMo9FsSMSEQwYcIErFy5Em+//TbWr1+Pd999l4lNZIZSU1Px2muv4eLFi3jzzTcxfPhwfPfdd0qHRSb2zz//oHPnzrCwsEBgYCD+9a9/Yf/+/UqHRSaWkJCArl27on79+qhbty66du2KhIQEpcMiE/vtt9/w+uuvIygoCBYWFujcuTNu3rypdFhEpIDPP/8cn332GYYMGYLdu3ejf//+vLrIzIgIRo8ejfXr1+Ptt9/G8uXLMXHiRNYOjE3IaKZPny4AJDw8XEREVq9eLQBk4sSJ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vn17+Pn56eYvWLAAnp6e6NChA/r164cJEybkmoBhYWEICwtDs2bN8Pvvv2P79u1wdXXNdZv+/v4YOXIkevfuDTc3N3z++edG2z8iKjz2BwQwD+gJ5gEBzAMieor9ATEHDEslz15gSgYXFxcHHx8fHDp0SO8GePkJCAiAr68vFi1aZNzgiMikFi9ejNDQUKSkpBR6HfYH5c/YsWOxd+9exMXFFXod5kH5ExISAgDYvn17oddhHpQ/3t7eCAoKwuLFiwu9DvOAqPy5desWqlSpgm3btumOD4XB/qB8OXz4MF588UWcOHEC3t7ehVqHOVB8PEOMiIiIiIiIiIjMCgtiRERERERERERkVnhT/VIqOjpa6RCIqJRgf0AA84CeYB4QwDwgoqfYHxBzoPh4hhgREREREREREZkVFsSIiIiIiIiIiMissCBGRERERERERERmhQUxIiIiIiIiIiIyKyyIERERERERERGRWeFTJgFcuXIFSUlJRmv/77//hlqtxpkzZ2BlZWW07QCAq6sratasadRtEJVXxu4LAOD69etQqVQ4evSoUbcDsD8oLlPkQVJSEjIyMpgHpZgp8iAlJQUAmAelmCnyICMjA0lJScwDolLO2P3B3bt3oVarceHCBfYHpZix8+DMmTNQq9WIj4+HRqMx2nYA5gAAqERElA5CSVeuXIGXlxfS0tKUDsUg7OzsEB8fb/aJTVRU5a0vANgfFAfzgADmAT3BPCCibOwPCCh/ecAc4BliSEpKQlpaGtavXw8vLy+lwymR+Ph49O/fH0lJSWad1ETFUZ76AoD9QXExDwhgHtATzAMiysb+gIDylQfMgSfMviCWzcvLCy1atFA6DCJSGPsCApgH9ATzgADmARE9xf6AAOZBecKb6hMRERERERERkVlhQYyIiIiIiIiIiMwKC2JERERERERERGRWWBAjIiIiIiIiIiKzwoIYERERERERERGZFRbE/r8ePXrg4MGDSoehiKSkJLi7u+PatWtKh0LlVEZGBurVq1fsz1hAQADGjRune127dm0sWrRI91qlUmHr1q0lC5IAPP/eGpIh82Dy5MmoWLEi88BIykoefPXVV7Czs2MeGElZyQP2B8ZlzDwwpMmTJ2PMmDFKh0FlQEn7Hyq80vw9k3lgOhkZGahduzb++usvpUN5TpkviA0ePBgqlQoqlQpWVlaoU6cO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4cOhUqnK1O7x48dITExU+2u3kZERevToUabbXH7//Xf06dMHr7/+On744QfI5fIKrwNRRZ05cwbHjh2DXC7HyJEjkZqaihMnTkjzT548KV35CjzZBzZr1kzt6p5u3bpBoVBIn+Pj42FnZydNO3HiBPLz8yt8i2VlBAcHY9q0adi2bRsAYPbs2SgoKHhum3nz5qFfv35ISUnByJEjkZWVhZCQEERGRqJZs2aIjIxE69atUa9ePcyZMwc9e/ZEWloatm3bhgULFkjPlxw/fjzy8vLw888/IyUlBYsXL4aVlRUAVLrPDRs2AAAmTpwo9VkWEydORLt27eDo6Ihz586hW7dueOWVV7B3715kZGTg4cOHuH//PpKSkhAXFwcAOHv2LAAgKSkJ06ZNw5QpU1CzZk2MHj1a2pZlzQEHB4cS48rLy0OzZs3UprVt27bYvvS1117Db7/9hry8vDKvc1EOnDp1Cs7OzgBQLXLg559/xvfffw8AsLCwKPP2mDhxIhYsWAB/f38pB+zt7fHuu+9iypQpWLJkCdatW4dz585JOVDStmzWrBmGDBnywm2paTyXIiKi52FBTMt2794NKysrta8333xT32GRBjRq1Ah9+vTBN998I0373//+h8GDB0ufr1y5gnr16j23n//97384ceKE9AtkkaJ2V65c0WDUpAlvvvkmtm3bhu+//x5jx44t0/NTsrKyoFKpUKdOHbXpderUwd9///3ctmfOnEGvXr3QqlUrREdHw9zcvFLxE5VH0XGsRo0acHNzQ2ZmJqZPn4769eujV69eCA8Pl5YNDw9Ht27d0KhRIwAl7wN9fHxw7tw53Lp1C9nZ2Th37hwmTZokFUMUCgXat29frl/aNWXatGno06cPXFxcADx5TtGff/753DZDhw5FUFAQGjVqBGdnZ0RGRsLX1xdubm64ePEihgwZgnHjxmHv3r34+++/ERcXB5VKhebNm6NVq1Y4evQogCe32Hfq1Alubm5o1KgR+vbti65duwJApfts2rQpAKBr165Sny9y4cIFpKeno2nTpti9ezdat26No0eP4u7du8jLy0NmZibMzc3Rq1cvODo6Srcr/vDDDwCeFBP79OmD3NxctGzZEleuXJG2ZVlzwMTEpMTYVCpVsdtobWxscP/+fTx8+FCaVq9ePTx+/PiF+9inFeVAs2bNMHbsWADAtWvX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8lyKiIieS78vudS/xMTEF75Su6JKe1V0XFycACCys7M1Op4216U608R2mzhxovjtt9+KTc/Pzxf16tUT+/fvl6YNHz5cACj21a1bN7W2zZs3F9u2bSt3LMwD/SgsLBT/+te/BAARERFR6nL/+c9/hLOzs5DL5eK1114TCQkJavPv3r0rPD09hb29vUhNTdV22KQnn3zyiWjdurW+w3ih0o5jixYtEvb29kKpVAohhOjSpYto1apViX28++67YubMmWrTVCqVeOWVV0SHDh2kaSdPnhQAii3brVs3MWnSJOmzi4uLWLFihfQZgIiMjCzfij3j8uXLAoA4efKkEOKf/SgAERcXp7ZM0efnjT1u3DjxxhtviJycHCGEELm5ueLmzZtCCCFu3rwp8vLyirWZMGGCaNy4sTAzMxP29vbi/fffF1lZWRrpUy6XCwCiT58+an0CEOHh4dLnZ7ft999/LywsLETPnj2FEEIUFBSI69evi8LCQhESEiLs7OyK5cCz21IIIfr161ds2z0vB2rVqlXicfLpOMePHy88PDykdZs4caLauj98+FBYW1uLX3/9tdh2KUlJcSsUCgFArF+/Xm2ZlzEHzMzMxCuvvCIAiEOHDqnF/6IccHJyEpcvXxZCqOdAdna2ePDgQZm2ZXZ2drFt9zwuLi7PzYGi2J/9cnFxUVumoudSRPpw8+ZNAUBERUXpOxTSo4SEBAFAJCcn6zsUg8CCWDUqHlSnddElbW+3sLAw8cYbb5Srzd69e4Wrq6vIz88v93jMA/0pLCwUY8aMEUZGRuKHH34od3ulUik6d+4sbGxs1H6RoOrnZSmIlUVhYaFo3LixWL58eYnzT58+LRwcHEr8xbmqqux+NC8vTwQEBAhXV1exbds2cffuXSHEk6LApk2bRKtWrcS1a9d01mdl1mfBggWidu3aYtmyZVL/jx49EjExMaJz585i586dVTIH1qxZIxXyKqoy262q5UBl1qcsOVAVVeZcikgfWBAjIVgQ0zXeMkmkZR999BG6du1a7AHAz5OTk4Pw8PBSXzlPVZNMJsPatWsxePBgDB06FHv37i1z27y8PPTr1w8nT57Evn374OHhob1AiTTk1q1bCAsLw99//13s1t8i7u7uWLx4MS5fvqzj6PRHLpdj165d+PTTT7F48WLY2NjAzMwM9vb22LJlC7766ivUr19f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b0dcXBz8/PxYFCPSMBbEnmPGjBmYM2cOPv30U6xdu7bC/axevRoNGjRAjRo10KFDB/z222/l7iM8PBwTJ07E1KlTMXfu3ArHQkRERET6I4RAaGgoXFxcsHDhQuTl5SEnJwepqalYuHAhXFxcEBoaWiUf20FEmvHee+8hLS0NCoUCgwYNgrGxcYnLGRsbY9CgQVAoFEhLS+Pjcog0jAWxF/j3v/+NSZMm4eOPP8a3335b7vbff/89pkyZgrlz5yIpKQlt2rRBr169kJmZWeY+fvjhB4wePRofffQRli5dCplMVu44iIiIiEj/Fi9ejFmzZqGwsLDYW81VKhUKCwsxa9YsLF68WE8REpE2/f7774iOjsaGDRvQrl27MrVp164dvv76a0RFRfGZYkQaxILYC8hkMqxYsQKjRo3CiBEj8OOPP5ar/ZdffokxY8YgKCgILVu2xLp162BhYYFvvvmmTO337NmDoUOHYsiQIVizZg2LYUREREQvqevXryM4OLhMywYHB/P2SaJqaO3atXB2dsaAAQPK1W7AgAFwcnKq1J1LRKSOBbEykMlkWL9+Pd59910MGTIE+/btK1O7x48fIzExET169JCmGRkZoUePHvj1119f2P7w4cPo378//P39ERERASMj/riIiIiIXlZff/11mf+4KZPJsGHDBi1HRES6dP/+fWzduhVBQUF49OgRcnJypK/c3FxpuaenF33l5eUhKCgI3333He7fv6/HtSCqPkz0HcDLwtjYGP/973+Rm5uLd955B/v370e3bt2e2yYrKwsqlQp16tRRm16nTh2kpaU9t+2vv/6KgIAA+Pj4YNu2bTAx4Y+KiIiI6GW2Y8eOYrdJlkalUmHhwoUsihFVIwUFBcjLy8P8+fMxf/78Upd79vfHZ6Wnp8Pd3V3T4REZHFZZysHU1BTff/89+vbti759++LQoUN47bXXND7OyZMn8eabb6Jdu3bYuXMnzMzMND4GEREREenWvXv3yrW8ubk5xo4dq6VoiEjXrl69ik2bNlW6nwcPHmggGiJiQaycatSogaioKPTq1Qu9e/eGQqEotTpvZ2cHY2Nj3Lx5U236zZs34ejoWGKb1NRUvPHGG2jatCl2794NCwsLja8DEREREemetbU1bty4UeblnZyc+vuzNgAAQxNJREFUEBISosWIiEiXTp8+jU2bNiEuLg7t27dXm5eeno7WrVsDePL7oqWlZbH2J06cgK+vL2rWrKmTeImqOz6UqgIsLS2xZ88eNGzYED179sT58+dLXE4ul8PT0xOHDh2SphUWFuLQoUPo2LFjseUvXbqEHj16wNHREfv370etWrW0tg5EREREpFsDBgyAsbFxmZY1NjYu90O3iahqa9iwIczNzXHs2DFYWlqqfT19IcSz84q+jh49CnNzczRo0EB/K0FUjbAgVkHW1taIiYmBnZ0devTogfT09BKXmzJlCjZs2IDNmzcjNTUV48aNQ05ODoKCgtSWu379Orp37w5LS0scOHAAtWvX1sFaEBEREZGufPjhhxBClGlZIQTGjBmj5YiISJdq1aqFIUOGYN26dWV+nmCRgoICrF+/HkOHDuWFE0QawoJYJdjZ2eHAgQMwMzND9+7dS7wEftCgQVi2bBlCQkLg4eGBU6dOYf/+/WoPSszMzESPHj1QWFiIgwcPlno7JRERERG9vOrXr48FCxaUadkFCxagfv36Wo6IiHTt448/xrVr17Bjx45ytduxYweuXbuGjz/+WEuRERkeFsQqqV69ejh06BAeP36Mnj174tatW8WWmTBhAq5cuYK8vDwcP34cHTp0kOZlZ2fjjTfewL1793Do0CE4OzvrMnwiIiIi0qEZM2Zg0aJFMDIyKnb7pLGxMYyMjLBo0SLMmDFDTxESkTZ5enoiICAAY8aMQVJSUpnaJCUlYcyYMQgMDES7du20HCGR4WBBTANcXFxw6NAhZGVloVevXrh7926Z2j148ABvvvkmrl27hgMHDqBJkybaDZSIiIiI9Eomk2HmzJm4cuUKgoODYWZmBktLS7Rs2RLBwcG4cuUKZs6cCZlMpu9QiUhLtm7dihYtWsDHxwfff/99qbdPFhQUYPv27fDx8UHLli2xZcsWHUdKVL2xIKYhzZo1w4EDB5Ceno4+ffpAqVQ+d/mHDx8iICAAqampiI2Nld4oQkRERETVX/369TF//nw0bdoUo0aNwtmzZzF//nzeJklkAKysrHD48GH4+flh8ODBaNiwIVavXi3NP3HiBBYsWIBGjRphyJAh8PPzw6FDh2BlZaXHqImqHxbENMjd3R379+9HcnIyAgMD8ejRoxKXe/z4Mfr374/jx49jz5498PT01HGkREREREREpC9WVlbYtWsXfv/9d7zxxhtqBTFfX18sWLAAb7zxBn7//Xfs2rWLxTAiLWBBTMNee+017N69G8eOHcO7776L/Px8tfkFBQV47733cOjQIURFRaFz5856ipSIiIiIiIj0ydPTExs3bsSZM2cAAKGhoTh9+jT+/vtvbNy4kRdPEGkRC2Ja0K1bN0RGRmL//v14//33pXvCCwsLMXr0aERGRuJ///sfevbsqedIiYiIiIiISN9q1qwJAHB1dYW7uztq1aql54iIqj8WxLSkd+/e2L59O3bs2IEPP/wQhYWFmDhxIv773//i22+/RWBgoL5DJCIiIiIiIiIySCb6DqA6e+eddxAeHo4PPvgASUlJOHXqFL7++msMGTJE36ERERERERERERksFsS07P3330dOTg5mzpyJL7/8EmPGjNF3SERERERURbRs2RK1a9fWdxhEpGdCCHTt2hWmpqb6DoXIYPCWSR0YO3Ys7t69i3/961/6DoWIiIiIqpBz587h9u3b+g6DiPRMJpPh559/LvZSNiLSHhbEiIiIiIiIiIjIoLAgRkREREREREREBoUFMSIiIiIiIiIiMigsiBERERERERERkUFhQYyIiIiIiIiIiAwKC2JERERERNVUeno6ZDIZTp06VeoyCoUCMpkMd+/e1VlcRKR73B8QqWNBjIiIiIjIgHl7eyMjIwPW1tYAgIiICNjY2Og3KCLSC+4PyJCY6DsAIiIiIiLSH7lcDkdHR32HQURVAPcHZEh4hRgRERERURWVk5ODDz74AFZWVqhbty6WL18OHx8fTJ48GQAgk8mwa9cutTY2NjaIiIhQm5aWlgZvb2/UqFEDrVu3Rnx8vDTv6VukFAoFgoKCcO/ePchkMshkMsybN0+7K0lEZcL9AZFmsSBGRERERFRFTZ8+HfHx8YiKikJsbCwUCgWSkpIq1M/UqVNx8uRJdOzYEf7+/rh9+3ax5by9vbFy5UrUqlULGRkZyMjIwLRp0zSxKkRUSdwfEGkWC2JERERERFWQUqnEpk2bsGzZMnTv3h1ubm7YvHkzCgoKyt3XhAkT0L9/f7i6umLt2rWwtrbGpk2bii0nl8thbW0NmUwGR0dHODo6wsrKShOrQ0SVwP0BkeaxIEZEREREVAVdvHgRjx8/RocOHaRptra2aN68ebn76tixo/S9iYkJvLy8kJqaqpE4iUj7uD8g0jwWxIiIiIiIXlIymQxCCLVp+fn5eoqGiPSJ+wOi8mFBjIiIiIioCmrcuDFMTU1x/PhxaVp2djb++OMP6bO9vT0yMjKkzxcuXEBubm6xvhISEqTvCwoKkJiYCFdX1xLHlcvlUKlUmlgFItIQ7g+INM9E3wEQEREREVFxVlZWGDVqFKZPn47atWvDwcEBwcHBMDL652/afn5+CAsLQ8eOHaFSqTBjxgyYmpoW62v16tVo2rQpXF1dsWLFCmRnZ2PkyJEljtugQQMolUocOnQIbdq0gYWFBSwsLLS2nkT0YtwfEGkerxAjIiIiIqqili5dii5dusDf3x89evRA586d4enpKc1fvnw5nJyc0KVLFwwdOhTTpk0r8ZfV0NBQhIaGok2bNvjll18QHR0NOzu7Esf09vbG2LFjMWjQINjb22PJkiVaWz8iKjvuD4g0SyaevcmYiIiItGrSpEk4fPgwUlJS9B0K6VFAQAAAIDo6Ws+RkD65ubnBz88Pq1atKnMbHx8feHh4YOXKldoLjIh0KjMzE3Xq1EFUVJR0fCgL7g+ql+PHj+P1119HcnIy3Nzc9B1OtccrxIiIiIiIiIiIyKCwIEZERERERERERAaFD9UnIiIiInqJKBQKfYdARFUE9wdEFccrxIiIiIiIiIiIyKCwIEZERERERERERAaFBTEiIiIiIiIiIjIoLIgREREREREREZFBYUGMiIiIiIiIiIgMCt8ySURERERUgqtXryIrK0urY9SvXx/GxsZISkrS6jgAYGdnB2dnZ62PU93oIg90iXlQfnPmzMHXX3+t1TGEEKhRowZGjBgBExPt/pru6emJffv2aXUMopcBC2JERERERM+4evUqXF1dkZubq/Wx9u/fjxUrVmh9HAsLC6SmprIYUg66zANdYR6U361bt3Dr1i34+vqiR48e+g6nws6fP4///ve/yMzMREFBgdYLb0RVHf8HEBERERE9IysrC7m5udiyZQtcXV31HU6lpaamYtiwYcjKymIhpByYBwQAq1evxq1bt7B3714EBweje/fu+g6p3NLT09GlSxe0bNkSMTExLIYRgQUxIiIiIqJSubq6ol27dvoOg/SMeWDYTExMsG3bNrz99tsIDAxEbGwsvL299R1Wmd24cQPdu3eHmZkZDh48CDs7O32HRFQl8KH6RERERERERM9hZmaGH3/8EZ6ennjrrbd08tw/Tbh16xZ69OiBx48f49ChQ6hbt66+QyKqMlgQIyIiIiIiInoBCwsL/PTTT2jWrBl69eqFc+fO6Tuk57p79y569eqFO3fu4NChQ3BxcdF3SERVCgtiRERERERERGVQq1Yt7N+/H3Xr1kWPHj1w8eJFfYdUIqVSiT59+iA9PR0HDhxAs2bN9B0SUZXDghgREREREZEOfPXVV/jggw/0HQZVkq2tLQ4cOAArKyt0794d169f13dIah49eoTA/2vv3qO0qgu9gX8fLiMMg5iCjHmJUjJIw4D0hVJJRhAV0dAQQpMUtfNqGMpKxWO+55wUywvHpeHJMEgtNS9gqFwGHdPy9oKWGWonjxcKb4nKgIkM8/7Rat4ITMCZeZD9+azFWvPs/fvt33e36PGZL3vvZ8SI/OY3v8ncuXOz9957lzsSbJEUYgAAAC2ssbExt9xyS2bOnJkkefrpp1NdXZ0VK1Zs9DHOPvvsnH766S0VkU3QvXv3LFy4MElSU1OTV155pcyJ/urdd9/Nl7/85Tz44IO58847s++++5Y7EmyxFGIAANCKTjjhhBx55JHrba+rq0upVMobb7zR6ploeXV1dTnwwANTKpWSJOecc05OP/30dO7cuWn/iBEjstNOO6VTp07ZZ599csMNN6xzjLPOOiszZ87Ms88+2+r5Wd+uu+6a2travPnmmzn44IPz+uuvb/axrrrqqvTo0SMdOnTIfvvtl0ceeWSTj9HQ0JDjjjsuc+fOze23354DDjhgs/NAESjEAAAAWtj111/fdLvkCy+8kDlz5uSEE05o2v+rX/0qn/nMZ3LrrbfmN7/5TcaNG5fjjz8+c+bMaRrTtWvXDB06NNOmTWvt+LyHPfbYI7W1tfnjH/+YYcOGbdIVf39z0003ZeLEifn2t7+dxYsXp0+fPhk6dOgmXXW2du3anHzyybnlllty0003ZejQoZucA4pGIQYAANCC3n777fzxj39Mz549kyQ333xz+vTpk5133rlpzLnnnpt///d/z8CBA7P77rtnwoQJOeSQQ3Lbbbetc6zhw4fnxhtvbNX8/HOf/vSnM3/+/Dz11FM54ogj8vbbb2/S/Msuuyzjx4/PuHHj0rt371x99dWprKzMtddeu1HzGxsb881vfjM/+tGPMmPGjBx11FGbcxpQOAoxAACAZvLwww/nmGOOycUXX9y0bfbs2RkxYkTT6/vvvz/9+/d/32O9+eab2X777dfZtu+++2bp0qV57rnnmi0zH1zfvn1z11135ZFHHsnIkSOzevXqjZq3evXqLFq0KDU1NU3b2rRpk5qamjz44IMbdYx//dd/zRVXXJFp06Zl7Nixm5UfikghBgAArWzOnDmpqqpa58+wYcPKHYtm8IlPfCKHHXbYOlf33HzzzTn22GObXj///PP56Ec/+k+Pc/PNN+fRRx/NuHHj1tn+t3nPP/98M6amOXz+85/P7Nmzs3DhwowZMyZr1qx53zmvvfZaGhoa0r1793W2d+/ePS+99NL7zp8yZUq+853v5JJLLskpp5yy2dmhiBRiAADQyr74xS/m8ccfX+fPD3/4w3LHohl069YtRx99dJYuXZpHH300r7zySioqKvKRj3ykaczbb7+dDh06vOcx7r333owbNy7XXHNNPv3pT6+zr2PHjkmSVatWtcwJ8IHU1NTkZz/7WWbNmpUTTzwxa9eubbG1rrzyypxzzjn59re/nTPPPLPF1oGtVbtyBwAAgKLp1KlT9thjj3W2LV26tExpaG5VVVUZMWJEbrjhhnz84x/P6NGj19nftWvXLF++fINz77vvvgwfPjyXX35500P4/97fvsmwW7duzR+cZnHEEUfkuuuuy1e+8pVUVVXlyiuvbPp20X/UtWvXtG3bNi+//PI6219++eVUV1e/5xozZszI6aef3vQwfmDTuUIMAACgmX3lK1/JjTfemDvvvDOHHnroOvs++9nP5ne/+916c+rq6nLYYYfl4osvzsknn7zB4/72t79N+/bt17tyjC3L6NGjc8011+T73/9+zj777DQ2Nm5wXEVFRfr165eFCxc2bVu7dm0WLlyYAQMGbHDOz372s5x44ok55ZRTcskll7xn2Qb8c64QAwAAaGZDhw5NQ0ND9txzz7Rv3369fSeddFIaGhrStm3bJH+9TfLwww/PhAkTMnLkyKbnR1VUVKzzYP37778/+++/f9Otk2y5TjzxxNTX1+eMM85I586dc955521w3MSJE/PVr341/fv3z7777pupU6dm5cqV6z0/LknuvPPOjBkzJqNHj873v/99ZRh8AAoxAACAZtauXbuMHj06xx133Hr7hg0blnbt2qW2tjZDhw5NksycOTOrVq3KRRddlIsuuqhp7IEHHpi6urqm1zfeeGMuuOCClo5PM5kwYULq6+tz3nnnpaqqKmecccZ6Y0aNGpVXX301559/fl566aXss88+mTt37noP2r/nnnsycuTIDB8+PDNmzEibNm74gg9CIQYAAK1oxowZG9w+aNCg97ytig+nK664YoPb27Vrl3PPPTeXXXZZUyE2Y8aM9/y78Td333132rRpk6OPPrq5o9KCzj333KxYsSLf/OY3U1VVlZNOOmm9MaeddlpOO+209zzGgw8+mCOOOCKDBg3KT3/607Rr51d5+KD8vwgAAKCVnXLKKXnjjTeyYsWKdO7ceaPmrFy5Mj/60Y+UIR8ypVIpF110Uerr63PyySenU6dO633Rwj/z2GOPZdiwYenbt29uu+22bLPNNi2YForDOykAAEAra9euXSZPnrxJc1wZ9uFVKpVyxRVXpL6+Pscdd1wqKyszYsSI9523ZMmSDBkyJD179sycOXNSWVnZCmmhGNx0DAAAAC2sTZs2+eEPf5ijjjoqX/7yl7NgwYJ/Ov7ZZ59NTU1NqqurM3fu3Gy77batlBSKQSEGAAAAraBdu3a54YYbUlNTkyOPPDIPPPDABsctXbo0NTU16dSpUxYsWJAddtihlZPC1k8hBgAAAK2koqIit9xyS/bdd98cdthhWbRo0Tr7X3nlldTU1KShoSG1tbWprq4uU1LYuinEAAAAoBV17Ngxd9xxR3r16pWhQ4fmySefTJIsX748Q4YMyZtvvpmFCxdmt912K3NS2HopxAAAAKCVde7cOXfffXd22WWX1NTU5LHHHsuhhx6aF198MQsWLMgee+xR7oiwVfMtkwAA8B6WLFlS7gjNYms5j3LZWv7321rOY2vykY98JPPnz88BBxyQfv36pXPnzrnnnnuy1157lTsabPUUYgAA8A+6du2aysrKjB07ttxRmk1lZWW6du1a7hgfKv4e0Bp23HHHLFy4MBdddFHGjBmTfv36lTsSFIJCDAAA/sFuu+2WJUuW5LXXXmvRdb785S/nc5/7XCZNmtSi6yR/LXc8j2jTtNbfg9bk78GWaeedd86VV15Z7hhQKAoxAADYgN12263Fi4OOHTtmxx13TN++fVt0HTZfa/w9AKD1eag+AAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQDAVuq5555LqVTK448//p5j6urqUiqV8sYbb7RaLgAoN4UYAAAU2MCBA7Ns2bJ06dIlSTJjxoxst9125Q0FAC2sXbkDAAAA5VNRUZHq6upyxwCAVuUKMQAA2EKtXLkyxx9/fKqqqrLTTjvl0ksvzaBBg3LGGWckSUqlUmbNmrXOnO222y4zZsxYZ9tTTz2VgQMHpkOHDtlrr71y3333Ne37+1sm6+rqMm7cuLz55psplUoplUq54IILWvYkAaAMFGIAALCFmjRpUu67777Mnj078+fPT11dXRYvXrxZxznzzDPz2GOPZcCAARk+fHj+/Oc/rzdu4MCBmTp1arbddtssW7Ysy5Yty1lnndUcpwIAWxSFGAAAbIHq6+szffr0XHLJJRk8eHD23nvvzJw5M2vWrNnkY5122mkZOXJkevXqlWnTpqVLly6ZPn36euMqKirSpUuXlEqlVFdXp7q6OlVVVc1xOgCwRVGIAQDAFugPf/hDVq9enf32269p2/bbb58999xzk481YMCApp/btWuX/v37Z8mSJc2SEwA+jBRiAADwIVUqldLY2LjOtnfffbdMaQDgw0MhBgAAW6Ddd9897du3z8MPP9y0bfny5XnmmWeaXnfr1i3Lli1rev373/8+q1atWu9YDz30UNPPa9asyaJFi9KrV68NrltRUZGGhobmOAUA2GK1K3cAAABgfVVVVTnxxBMzadKk7LDDDtlxxx0zefLktGnz//9N+6CDDsqVV16ZAQMGpKGhId/61rfSvn379Y511VVXpWfPnunVq1cuv/zyLF++PF/72tc2uG6PHj1SX1+fhQsXpk+fPqmsrExlZWWLnScAlIMrxAAAYAv1ve99L/vvv3+GDx+empqafOELX0i/fv2a9l966aXZdddds//++2fMmDE566yzNlheTZkyJVOmTEmfPn3ywAMP5I477kjXrl03uObAgQNz6qmnZtSoUenWrVu++93vttj5AUC5uEIMAAC2UFVVVbnuuuty3XXXNW278847m37+6Ec/mnnz5q0z54033mj6uUePHk3PGBs9evQG1xg0aNB6zyGbNm1apk2b9kHjA8AWyxViAAAAABSKQgwAAACAQnHLJAAAfIjU1dWVOwIAfOi5QgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAECheKg+AAD8g/r6+jz44IOtss4LL7yQBQsWtOg6FRUVOfDAA1t0DQD4MFGIAQDAP7j22mszYcKEVlnrueeey6xZs1p8nSeeeCJ77bVXi68DAB8GCjEAAPgHw4YNy0UXXZSKiorMnj07H/nIR8odabMsWrQoxx57bD7/+c9n9913L3ccANhiKMQAAOAf9OzZMwsWLMiBBx6Yr3/965k/f346d+5c7lib5Mknn8zJJ5+cvn375o477kjHjh3LHQkAthgeqg8AABuw1157Zd68eXnyySdzxBFH5O233y53pI323//936mpqcnOO++cu++++0NX5gFAS1OIAQDAe+jfv3/uuuuuPPzwwzn66KOzevXqckd6Xy+++GIGDx6cLl26ZP78+R/a2z0BoCUpxAAA4J/4whe+kNmzZ6e2tjZjx47NmjVryh3pPb300ksZPHhw2rRpk9ra2nTv3r3ckQBgi6QQAwCA93HwwQfn5ptvzm233ZaTTjopa9euLXek9bz++usZMmRIVq5cmdra2uyyyy7ljgQAWyyFGAAAbIQRI0bkuuuuy49//ON84xvfSGNjY7kjNXnrrbdyyCGHZNmyZamtrfWNkgDwPnzLJAAAbKTRo0envr4+J598cqqqqnLRRRelVCqVNdOqVaty+OGH55lnnsm9996bXr16lTUPAHwYuEIMAAA2wfjx43P55Zfn4osvzoUXXrjZx7nqqqvSo0ePdOjQIfvtt18eeeSRTT7GO++8ky996UtZvHhx7rrrrnz2s5/d7DwAUCSuEAMAgE10xhlnZMWKFTnvvPNSVVWVCRMmbNL8m266KRMnTszVV1+d/fbbL1OnTs3QoUPz9NNPZ8cdd9yoY6xZsyajR49OXV1d7rrrrgwcOHBzTgUACskVYgAAsBnOO++8TJo0KWeccUamT5++SXMvu+yyjB8/PuPGjUvv3r1z9dVXp7KyMtdee+1GzV+7dm3GjRuXn//857nlllty0EEHbc4pAEBhuUIMAAA2Q6lUysUXX5z6+vqMHz8+nTp1yrHHHvu+81avXp1FixblnHPOadrWpk2b1NTU5MEHH3zf+Y2Njfnf//t/5yc/+Ul+8pOf5PDDD/9A5wEARaQQAwCAzVQqlXLllVdm5cqVOe6441JZWZkjjjjin8557bXX0tDQkO7du6+zvXv37nnqqaf+6dzGxsZMmjQpV199da699tqMGjXqA58DABSRWyYBAOADaNOmTaZPn54RI0bkmGOOSW1tbYut9W//9m+59NJLc8UVV2TcuHEttg4AbO0UYgAA8AG1a9cuP/nJTzJ48OCMGDEiv/zlL99zbNeuXdO2bdu8/PLL62x/+eWXU11d/Z7zLrvsslxwwQW58MILc/rppzdbdgAoIoUYAAA0g4qKitx666353Oc+l0MPPTSLFy9+z3H9+vXLwoULm7atXbs2CxcuzIABAzY45wc/+EHOPPPMnHPOOes8ewwA2DwKMQAAaCYdO3bMz3/+8/Tq1StDhgzJk08+ucFxEydOzDXXXJOZM2dmyZIl+frXv56VK1du8DbI66+/PqeeempOP/30fOc732npUwCAQvBQfQAAaEadO3fO3XffnUGDBuXggw/O/fffn913332dMaNGjcqrr76a888/Py+99FL22WefzJ07d70H7d9+++054YQTcsIJJ2Tq1KkplUqteSoAsNVyhRgAADSzj3zkI5k/f346d+6cwYMH58UXX1xvzGmnnZbnn38+77zzTh5++OHst99+6+yfN29ejj322IwcOTLXXHNN2rTx0R0Amov/qgIAQAvo3r17Fi5cmFKplJqamvUeov/P/OIXv8hRRx2VIUOG5Lrrrkvbtm1bMCkAFI9CDAAAWsguu+yS2trarFixIgcffHBef/31953z6KOP5vDDD8+AAQPys5/9LBUVFa2QFACKRSEGAAAtaPfdd09tbW2WLVuWYcOG5a233nrPsU888UQOOeSQ7LXXXpk9e3Y6dOjQikkBoDgUYgAA0MJ69+6d+fPn5+mnn87w4cOzatWq9cY888wzOfjgg/Oxj30sd911V6qqqsqQFACKQSEGAACt4LOf/WzuuuuuLFq0KCNHjsw777zTtO/5559PTU1Ntt9++8ybNy/bbbdd+YICQAEoxAAAoJUMHDgws2fPzr333pvRo0dnzZo1WbZsWQYPHpz27dtnwYIF6datW7ljAsBWr125AwAAQJEMHjw4t9xyS4466qgcd9xxeeKJJ/KXv/wlDzzwQHbeeedyxwOAQlCIAQBAKzv88MNz/fXXZ8yYMdlhhx3yi1/8Ij169Ch3LAAoDIUYAACUwahRo/LpT3862223XXbZZZdyxwGAQlGIAQBAmey1117ljgAAheSh+gAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUSrtyBwAAKKJtttmm3BEAgC1IY2NjtttuuzQ2NpY7SiEoxAAAyuCdd94pdwQAYAtSKpXyxhtvpFQqlTtKIbhlEgAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAUEZvvfVWfv/73ydJnn766bz11ltlTrT1U4gBAAAAlMGiRYty4oknZscdd8xxxx2XJDnmmGNSXV2dE088MYsWLSpzwq2XQgwAAACgFdXX12fEiBHp379/amtrc/bZZzftmz59es4777wsWLAg/fv3z4gRI1JfX1/GtFsnhRgAQCtaunRpzj///Nx7772ZP39+evfunfPPPz9Lly4tdzQAoBXU19fnoIMOyr333psbb7wxzz77bCZNmtS0/9Of/nTOPffc/M///E9uvPHG3HvvvTnooIOUYs1MIQYA0AoaGxszZcqUfOxjH8uFF16Y+vr6vPPOO1myZEkuvPDCfOxjH8uUKVPS2NhY7qgAQAv6yle+kqeeeip1dXUZNWpU2rZtu8Fxbdu2zahRo1JXV5ennnoqY8eObeWkWzeFGABAK7j44otzzjnnZO3atWloaFhnX0NDQ9auXZtzzjknF198cZkSAgAt7f/+3/+bO+64I9dcc0369u27UXP69u2bH/zgB5k9e7ZnijUjhRgAQAtbunRpJk+evFFjJ0+e7PZJANhKTZs2LbvttluOPvroTZp39NFHZ9ddd820adNaKFnxKMQAAFrYD37wg5RKpY0aWyqVcs0117RwIgCgtb311lu54YYbMm7cuPzlL3/JypUr1/nzN2+//fZ6+955552MGzcuP/nJT/LWW2+V8Sy2HqVGD6oAgFY1YcKE3HPPPXniiSfKHYVW0rt37yxZsmSjx5dKpXTo0KEFEwEAra2xsTF/+ctfPvBxfv3rX+czn/lMMyQqtnblDgAAsLV78803N2l8586d8x//8R8tlAYAKIdnn302U6dO/cDHWbFixQcPg0IMAKCldenSJX/60582evwuu+yS008/vQUTAQCt7de//nWmTp2ae++9N5/73OfW2bdy5cp07949STa4P0keffTRfPGLX0znzp1b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e+21rFq1Ktdff3169epV7jgf2JIlSzJ27Ni89tprfgGGTeT9APibn/70pxk+fHjmzJmTM844I/vtt1+5I22yX/ziF5k4cWKGDx+eH/3oR+WOU3YKMQCADejVq1er3LIAbPm8HwAdOnTIrFmzMnTo0BxyyCGpq6tLnz59yh1roz3yyCM5/PDD8/nPfz4333xz2rdvX+5IZeeh+gAAAADvo1OnTrnzzjvziU98IgcffHCefvrpckfaKL/5zW9yyCGHZO+9986sWbPSoUOHckfaIijEAAAAADZCly5dMm/evHTr1i01NTV57rnnyh3pn3rmmWdy8MEHp0ePHrnzzjtTVVVV7khbDIUYAAAAwEbq2rVramtrs80222Tw4MH505/+VO5IG/Tcc89l8ODB2WGHHTJv3rxst9125Y60RVGIAQAAtIIrrrgixx9/fLljAM1gp512ysKFC/Puu++mpqYmr776arkjrWPZsmWpqalJRUVFamtr061bt3JH2uIoxAAAAFpYY2NjbrnllsycOTNJ8vTTT6e6ujorVqzY6GOcffbZOf3001sqIrCJPvaxj6W2tjavv/56hg4dmjfeeKPckZL89Rtya2pq8s4772ThwoX56Ec/Wu5IWySFGABAKznhhBNy5JFHrre9rq4upVJpi/kgDTS/urq6HHjggSmVSkmSc845J6effno6d+7ctH/EiBHZaaed0qlTp+yzzz654YYb1jnGWWedlZkzZ+bZZ59t9fzAhn3yk5/MggUL8txzz+XQQw9NfX39Zh/rqquuSo8ePdKhQ4fst99+eeSRRzb5GG+++WaGDh2a1157LbW1tenRo8dm59naKcQAAABa2PXXX990u+QLL7yQOXPm5IQTTmja/6tf/Sqf+cxncuutt+Y3v/lNxo0bl+OPPz5z5sxpGtO1a9cMHTo006ZNa+34wD+x9957Z968efntb3+bESNG5C9/+csmH+Omm27KxIkT8+1vfzuLFy9Onz59MnTo0LzyyisbfYyVK1fmsMMOy//8z/9kwYIF2XPPPTc5R5EoxAAAAFrQ22+/nT/+8Y/p2bNnkuTmm29Onz59svPOOzeNOffcc/Pv//7vGThwYHbfffdMmDAhhxxySG677bZ1jjV8+PDceOONrZofeH+f+9znMmfOnDz44IM55phj8u67727S/Msuuyzjx4/PuHHj0rt371x99dWprKzMtddeu1Hz//KXv+TII4/Mr3/968ydOzef+cxnNuc0CkUhBgAA0EwefvjhHHPMMbn44oubts2ePTsjRoxoen3//fenf//+73usN998M9tvv/062/bdd98sXbo0zz33XLNlBprHAQcckNtvvz3z5s3Lcccdl4aGho2at3r16ixatCg1NTVN29q0aZOampo8+OCD7zv/3XffzZe//OU88MADmTNnTvbdd9/NPociUYgBALSiOXPmpKqqap0/w4YNK3csoJl84hOfyGGHHbbOVR0333xzjj322KbXzz///Ps+5Prmm2/Oo48+mnHjxq2z/W/znn/++WZMDTSXoUOH5qabbsott9ySk08+OWvXrn3fOa+99loaGhrSvXv3dbZ37949L7300j+d29DQkOOPPz5z587NbbfdlgMPPPAD5S8ShRgAQCv64he/mMcff3ydPz/84Q/LHQtoJt26dcvRRx+dpUuX5tFHH80rr7ySioqKfOQjH2ka8/bbb6dDhw7veYx7770348aNyzXXXJNPf/rT6+zr2LFjkmTVqlUtcwLAB3bUUUdlxowZ+dGPfpRvfvObaWxsbJF11q5dm1NOOSU333xzfvrTn/oHtk3UrtwBAACKpFOnTtljjz3W2bZ06dIypQFaQlVVVUaMGJEbbrghH//4xzN69Oh19nft2jXLly/f4Nz77rsvw4cPz+WXX970EP6/9/rrryf5a/EGbLnGjh2blStX5tRTT01VVVW+853vvOfYrl27pm3btnn55ZfX2f7yyy+nurp6g3MaGxszceLETJ8+PT/+8Y8zcuTIZs1fBK4QAwAAaGZf+cpXcuONN+bOO+/MoYceus6+z372s/nd73633py6urocdthhufjii3PyySdv8Li//e1v0759+/WuHAO2PKecckouueSSXHjhhZkyZcp7jquoqEi/fv2ycOHCpm1r167NwoULM2DAgA3OOf/88/Of//mf+f73v5/jjjuu2bMXgSvEAAAAmtnQoUPT0NCQPffcM+3bt19v30knnZSGhoa0bds2yV9vkzz88MMzYcKEjBw5sum5QRUVFes8WP/+++/P/vvv33TrJLBlO/PMM7NixYqcc845qaqqymmnnbbBcRMnTsxXv/rV9O/fP/vuu2+mTp2alStXrvccwSS5+OKL8x//8R/57ne/m69//estfQpbLYUYAABAM2vXrl1Gjx69wSs3hg0blnbt2qW2tjZDhw5NksycOTOrVq3KRRddlIsuuqhp7IEHHpi6urqm1zfeeGMuuOCClo4PNKNvf/vbqa+vz+mnn55OnTptsOQaNWpUXn311Zx//vl56aWXss8++2Tu3LnrPWj/qquuytlnn53zzz8/kyZNaq1T2CopxAAAWsmMGTM2uH3QoEEt9sBdoHyuuOKKDW5v165dzj333Fx22WVNhdiMGTPe8z3ib+6+++60adMmRx99dHNHBVpQqVTK9773vdTX1+ekk05KVVVVjjnmmPXGnXbaae95BVny1+L8tNNOyze/+U3FeDNQiAEAALSyU045JW+88UZWrFiRzp07b9SclStX5kc/+lHatfNrHHzYlEqlfP/73099fX3GjBmTysrKHHbYYRs9/5ZbbsnXvva1jB8/PpdeemlKpVILpi0G76QAAACtrF27dpk8efImzXFlGHy4tWnTJjNmzMiqVasycuTI3HXXXTnooIPed95dd92V0aNH59hjj820adOUYc3Et0wCAAAAtIJ27drlpz/9aQYNGpQjjjgiDz744D8dX1dXl5EjR+awww7LjBkzmr6Igw9OIQYAAADQSrbZZpvcdttt6du3b4YNG5bHHntsg+MeeuihHH744TnggANy0003rfeNtXwwCjEAAACAVlRZWZk5c+bkk5/8ZIYMGZIlS5ass//xxx/PsGHD8tnPfja33357ttlmmzIl3XopxAAAAABa2bbbbpu777471dXVqampybPPPpskeeqppzJkyJDsvvvumTNnTiorK8ucdOukEAMAAAAogx122CELFixIp06dMnjw4Nx///2pqalJ9+7dM2/evHTp0qXcEbdavmUSAGAD/vHWhQ+rreU8oJy2lv8fbS3nAVub6urq1NbWZv/9988BBxyQPfbYIwsWLMgOO+xQ7mhbNYUYAMDf6dq1ayorKzN27NhyR2k2lZWV6dq1a7ljwIeO9wOgtey2225ZuHBhZsyYkfHjx6e6urrckbZ6pcbGxsZyhwCAIpkwYULuueeePPHEE+WOwnt44YUX8tprr7XoGmeccUaSZOrUqS26TvLXX+p32223Fl8Htkat8X7QmrwfAPyVK8QAAP7Bbrvt1uK/MG633XZJkr59+7boOsAH0xrvBwC0Pg/VBwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQCArdBzzz2XUqmUxx9//D3H1NXVpVQq5Y033mi1XAAAWwKFGABAQQ0cODDLli1Lly5dkiQzZsxo+vZLAICtWbtyBwAAoDwqKipSXV1d7hgAAK3OFWIAAFuglStX5vjjj09VVVV22mmnXHrppRk0aFDOOOOMJEmpVMqsWbPWmbPddttlxowZ62x76qmnMnDgwHTo0CF77bVX7rvvvqZ9f3/LZF1dXcaNG5c333wzpVIppVIpF1xwQcueJABAmSjEAAC2QJMmTcp9992X2bNnZ/78+amrq8vixYs36zhnnnlmHnvssQwYMCDDhw/Pn//85/XGDRw4MFOnTs22226bZcuWZdmyZTnrrLOa41QAALY4CjEAgC1MfX19pk+fnksuuSSDBw/O3nvvnZkzZ2bNmjWbfKzTTjstI0eOTK9evTJt2rR06dIl06dPX29cRUVFunTpklKplOrq6lRXV6eqqqo5TgcAYIujEAMA2ML84Q9/yOrVq7Pffvs1bdt+++2z5557bvKxBgwY0PRzu3bt0r9//yxZsqRZcgIAfFgpxAAAPoRKpVIaGxvX2fbuu++WKQ0AwIeLQgwAYAuz++67p3379nn44Yebti1fvjzPPPNM0+tu3bpl2bJlTa9///vfZ9WqVesd66GHHmr6ec2aNVm0aFF69eq1wXUrKirS0NDQHKcAALBFa1fuAAAArKuqqionnnhiJk2alB122CE77rhjJk+enDZt/v+/ZR500EG58sorM2DAgDQ0NORb3/pW2rdvv96xrrrqqvTs2TO9evXK5ZdfnuXLl+drX/vaBtft0aNH6uvrs3DhwvTp0yeVlZWprKxssfMEACgXV4gBAGyBvve972X//ffP8OHDU1NTky984Qvp169f0/5LL700u+66a/bff/+MGTMmZ5111gbLqylTpmTKlCnp06dPHnjggdxxxx3p2rXrBtccOHBgTj311IwaNSrdunXLd7/73RY7PwCAcio1/uPDJwCAFjVhwoTcc889eeKJJ8odhTI64ogjkiR33HHHRs8ZNGhQ9tlnn0ydOrWFUgEAFIMrxAAAAAAoFIUYAAAAAIXiofoAAB8SdXV15Y4AALBVcIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQvFQfQCAv/Puu+9m1qxZLb7On/70pyTJz372sxZf66ijjkq7dj72AQD8jU9GAAB/Z86cOfnyl7/cauu1xlq33357jjzyyBZfBwDgw0IhBgDwdw466KD069cv//3f/5358+fnU5/6VLkjbZYlS5Zk6NCh6dmzZ774xS+WOw4AwBZFIQYA8He6dOmSefPm5cADD8yXvvSl3H///fn4xz9e7lib5Nlnn82XvvSl7Lrrrpk7d266dOlS7kgAAFsUD9UHAPgHO+ywQxYsWJCOHTtm8ODB+eMf/1juSBvtj3/8Y2pqalJZWZkFCxZkhx12KHckAIAtjkIMAGADdtppp9TW1mbNmjWpqanJq6++Wu5I7+uVV15JTU1NGhoasnDhwlRXV5c7EgDAFkkhBgDwHj72sY9l4cKFWb58eYYMGZI33nij3JHe098yLl++PLW1tdltt93KHQkAYIulEAMA+Cd69uyZBQsW5IUXXsiwYcNSX19f7kjrWbFiRQ499NC8+OKLqa2tTc+ePcsdCQBgi6YQAwB4H3vvvXfmzZuXJ598MkcccUTefvvtckdq8vbbb2fEiBF58sknM2/evOy1117ljgQAsMVTiAEAbIT+/fvnzjvvzEMPPZRjjjkmq1evLnekrF69OkcffXQeeuih3Hnnnenfv3+5IwEAfCgoxAAANtL++++f22+/PQsWLMhxxx2XhoaGzTrOVVddlR49eqRDhw7Zb7/98sgjj2zyMdasWZOxY8emtrY2s2bNyv77779ZWQAAikghBgCwCYYOHZqbbropt956a0466aSsXbt2k+bfdNNNmThxYr797W9n8eLF6dOnT4YOHZpXXnllo4+xdu3ajB8/PrfddltuvvnmDBkyZFNPAwCg0BRiAACb6Mgjj8zMmTMzc+bMTJgwIY2NjRs997LLLsv48eMzbty49O7dO1dffXUqKytz7bXXbtT8xsbGfOMb38jMmTPz4x//OCNGjNjc0wAAKKx25Q4AAPBh9JWvfCUrV67MKaecks6dO+fCCy983zmrV6/OokWLcs455zRta9OmTWpqavLggw9u1LrnnnturrrqqvzgBz/ImDFjNjs/AECRKcQAADbTySefnPr6+px55pmpqqrKueee+0/Hv/baa2loaEj37t3X2d69e/c89dRT77vehRdemClTpjRdZQYAwOZRiAEAfAATJ05MfX19Jk+enKqqqnzjG99okXX+8z//M5MnT86//du/5Zvf/GaLrAEAUBQKMQCAD+hf//Vfs2LFikyYMCFVVVX52te+tsFxXbt2Tdu2bfPyyy+vs/3ll19OdXX1ex5/+vTpOeOMMzJp0qScd955zZodAKCIPFQfAOADKpVK+e53v5tTTz01J510Um666aYNjquoqEi/fv2ycOHCpm1r167NwoULM2DAgA3OufHGGzN+/Ph8/etfz8UXX5xSqdQi5wAAUCSuEAMAaAalUilXXXVVVq5cmbFjx6aysjLDhw9fb9zEiRPz1a9+Nf3798++++6bqVOnZuXKlRk3btx6Y3/+85/nuOOOy9ixY3PllVcqwwAAmolCDACgmbRp0ybXXnttVq5cmWOOOSZ33nlnBg8evM6YUaNG5dVXX83555+fl156Kfvss0/mzp273oP2a2trc8wxx2TEiBG59tpr06aNC/sBAJpLqbGxsbHcIQCgSCZMmJB77rknTzzxRLmj0ELeeeedHHnkkfnFL36RBQsWZODAgZs0/5e//GWGDBmSAw88MLNmzUpFRUULJQUAKCb/1AgA0My22Wab3Hrrrenfv38OPfTQLF68eKPnLl68OIceemg+97nP5dZbb1WGAQC0AIUYAEALqKyszM9//vN88pOfzNChQ/O73/3ufec8+eSTGTJkSD71qU/l5z//eTp27NgKSQEAikchBgDQQrbddtvMnTs3O+20U2pqavKHP/zhPcf+4Q9/yMEHH5ydd945d999dzp37tyKSQEAikUhBgDQgrbffvssWLAgnTt3zuDBg7N06dL1xrz44osZPHhwOnfunPnz52f77bcvQ1IAgOJQiAEAtLDu3buntrY2STJ48OC8/PLLTftefvnl1NTUJPnrN0v+47dNAgDQ/BRiAACtYNddd01tbW1WrFiRIUOG5PXXX8/rr7+egw8+OCtWrMjChQuz6667ljsmAEAhtCt3AACAothjjz1SW1ubAw44IMOGDUuSLFu2LPfdd1923333MqcDACgOhRgAQCvq3bt35s+fny9+8YsplUq555570rt373LHAgAoFIUYAEAr69u3b55++ukkSXV1dZnTAAAUj0IMAKAMFGEAAOXjofoAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKJR25Q4AAEWzzz77pF07/wkGAIByKTU2NjaWOwQAAAAAtBa3TAIAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKJT/B8P8RsRTSFn5AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "real_d = RealAnsatz({N: 1, S: 1}, n_layers=2)(d)\n", - "real_d.draw(figsize=(12, 10))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TensorAnsatz example: \"Positive\" ansatz" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This :term:`ansatz ` returns a positive tensor, since the individual tensors are element-wise squared before contracted." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import TensorAnsatz, Symbol\n", - "from lambeq.backend import tensor\n", - "import math\n", - "\n", - "class PositiveAnsatz(TensorAnsatz):\n", - "\n", - " def _ar(self, functor, box):\n", - " # step 1: obtain label\n", - " name = self._summarise_box(box)\n", - "\n", - " # step 2: map domain and codomain\n", - " dom, cod = functor(box.dom), functor(box.cod)\n", - "\n", - " # step 3: construct and return ansatz\n", - " syms = Symbol(name, math.prod(dom.dim), math.prod(cod.dim))\n", - "\n", - " return tensor.Box(box.name, dom, cod, syms ** 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.tensor import Dim\n", - "\n", - "ansatz = PositiveAnsatz({N: Dim(2), S: Dim(2)})\n", - "positive_d = ansatz(d)\n", - "positive_d.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([8., 8.])" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "from sympy import default_sort_key\n", - "\n", - "\n", - "syms = sorted(positive_d.free_symbols, key=default_sort_key)\n", - "sym_dict = {k: -np.ones(k.size) for k in syms}\n", - "subbed_diagram = positive_d.lambdify(*syms)(*sym_dict.values())\n", - "\n", - "subbed_diagram.eval()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Contributions" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We encourage you to implement your own :term:`readers `, :term:`rewrite rules ` and :term:`ansätze ` and `contribute to lambeq `_ -- detailed guidelines are available `here <../CONTRIBUTING.rst>`_. Below you can find some sources of inspiration:\n", - "\n", - "* rewrites for relative pronouns: [SCC2014a]_ [SCC2014b]_\n", - "* rewrites to deal with coordination: [Kar2016]_\n", - "* rewrites to reduce the dimension size of verbs: [Kea2014]_\n", - "* rewrites to language circuits (DisCoCirc): [CW2021]_\n", - "\n", - "* ansätze benchmarked by their expressibility: [SJA2019]_\n", - "* high-level examples of ansätze: `[link] `_\n", - "\n", - ".. rubric:: See also:\n", - "\n", - "- :ref:`General information about sub-packages `\n", - "- :ref:`UML diagrams for sub-packages `\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/monoidal.ipynb b/docs/tutorials/monoidal.ipynb deleted file mode 100644 index 8338ab75..00000000 --- a/docs/tutorials/monoidal.ipynb +++ /dev/null @@ -1,536 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Monoidal categories in lambeq" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In order to use the advanced features of ``lambeq`` and extend it, an understanding of :term:`monoidal categories ` and how it is implemented in the :py:mod:`lambeq.backend` is required.\n", - "\n", - ":download:`Download code <../_code/monoidal.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Categories\n", - "\n", - "A *category* consists of a collection of *objects* $A, B, C, \\ldots$ and a collection of *morphisms* between objects of the form $f: A \\to B, g: B \\to C, h: C \\to D, \\ldots$, such that:\n", - "\n", - "* Morphisms with matching types compose. For example, $f: A \\to B$ and $g: B \\to C$ can compose to make $g \\circ f: A \\to C$, but not $f \\circ g$.\n", - "* Morphisms compose in an associative way: $(h \\circ g) \\circ f = h \\circ (g \\circ f)$\n", - "* Each object has an identity arrow: $1_B \\circ f = f = f \\circ 1_A$\n", - "\n", - "These definitions are implicitly encoded in this *commutative diagram*: any directed path between two specific objects represents equal morphisms.\n", - "
\n", - " \"drawing\"\n", - "
" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "For *free* :term:`categories `: we first define generating objects with the :py:class:`~lambeq.backend.grammar.Ty` class and generating morphisms with the :py:class:`~lambeq.backend.grammar.Box` class, then build composite morphisms by freely combining the generating morphisms using backward composition ``>>`` (then)." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq.backend.grammar import Box, Id, Ty\n", - "\n", - "A, B, C, D = map(Ty, 'ABCD')\n", - "\n", - "f = Box('f', A, B)\n", - "g = Box('g', B, C)\n", - "h = Box('h', C, D)\n", - "\n", - "# the codomain of f and domain of g match, so f and g compose\n", - "f >> g\n", - "assert f.cod == g.dom == B\n", - "\n", - "# associativity\n", - "assert f >> (g >> h) == f >> g >> h == (f >> g) >> h\n", - "\n", - "# identity\n", - "assert Id(A) >> f == f.to_diagram() == f >> Id(B)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "As mentioned above, in ``lambeq`` the generating morphisms are defined using the :py:class:`~lambeq.backend.grammar.Box` class. When morphisms are composed, they combine to become an :py:class:`~lambeq.backend.grammar.Diagram`. This explains the need for the :py:meth:`.grammar.Box.to_diagram` call above as `f` was declared as a :py:class:`.grammar.Box` instance and cannot be directly tested for equality with a :py:class:`.grammar.Diagram` instance. Compared to traditional category theory notation, ``lambeq`` prefers to use backwards composition ``>>``, where ``f >> g`` should be read as \"``f`` followed by ``g``\"." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# only arrows that 'type-check' can be composed\n", - "diagram = f >> g >> h" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "A :py:class:`~lambeq.backend.grammar.Diagram` behaves like a ``List[Diagram]``: it can be indexed, sliced, or even reversed. Reversing a morphism actually performs the *dagger* operation, which is the abstract notion of a dagger in quantum mechanics and linear algebra." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "|Ty() @ [f; Ty(A) -> Ty(B)] @ Ty()| >> |Ty() @ [g; Ty(B) -> Ty(C)] @ Ty()| >> |Ty() @ [h; Ty(C) -> Ty(D)] @ Ty()|\n", - "Indexing: |Ty() @ [f; Ty(A) -> Ty(B)] @ Ty()|\n", - "Slicing: |Ty() @ [g; Ty(B) -> Ty(C)] @ Ty()| >> |Ty() @ [h; Ty(C) -> Ty(D)] @ Ty()|\n", - "Reversing (dagger): |Ty() @ [h†; Ty(D) -> Ty(C)] @ Ty()| >> |Ty() @ [g†; Ty(C) -> Ty(B)] @ Ty()| >> |Ty() @ [f†; Ty(B) -> Ty(A)] @ Ty()|\n" - ] - } - ], - "source": [ - "print(diagram)\n", - "print(f'Indexing:', diagram[0])\n", - "print(f'Slicing:', diagram[1:])\n", - "print(f'Reversing (dagger):', diagram[::-1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Monoidal categories\n", - "\n", - "A *monoidal category* is a category equipped with the *monoidal product* $\\otimes$ and *monoidal unit* $I$ and has the following properties:\n", - "\n", - "* objects can be combined to return another object (e.g $A \\otimes B$)\n", - "* morphisms can be combined to return another morphism ($(f: A \\to B) \\otimes (g: C \\to D) = f \\otimes g: A \\otimes C \\to B \\otimes D$).\n", - "* $\\otimes$ is associative on objects: $(A \\otimes B) \\otimes C = A \\otimes (B \\otimes C)$\n", - "* $\\otimes$ is associative on morphisms: $(f \\otimes g) \\otimes h = f \\otimes (g \\otimes h)$\n", - "* $I$ is the identity on objects for $\\otimes$: $A \\otimes I= A = I \\otimes A$\n", - "* $1_I$ is the identity on arrows for $\\otimes$: $f \\otimes 1_I = f = 1_I \\otimes f$" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "For :term:`monoidal categories `: again, the generating objects are defined with the :py:class:`~lambeq.backend.grammar.Ty` class, and the generating morphisms with the :py:class:`~lambeq.backend.grammar.Box` class; the composite objects are built using ``@`` and the composite morphisms using ``>>``." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq.backend.grammar import Box, Id, Ty\n", - "\n", - "A, B, C = Ty('A'), Ty('B'), Ty('C')\n", - "\n", - "f = Box('f', A, B)\n", - "g = Box('g', B, C)\n", - "h = Box('h', B, A)\n", - "\n", - "# combining types\n", - "A @ B\n", - "# combining boxes\n", - "f @ g\n", - "\n", - "# associativity\n", - "assert (A @ B) @ C == A @ B @ C == A @ (B @ C)\n", - "assert (f @ g) @ h == f @ g @ h == f @ (g @ h) \n", - "\n", - "# monoidal unit\n", - "assert A @ Ty() == A == Ty() @ A\n", - "assert f @ Id(Ty()) == f.to_diagram() == Id(Ty()) @ f" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ":term:`Monoidal categories ` have an elegant graphical calculus, which allow them to be drawn and manipulated graphically. " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "|Ty() @ [x; Ty(A) -> Ty(A)] @ Ty(A)| >> |Ty() @ [y; Ty(A) @ Ty(A) -> Ty(B)] @ Ty()|\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "x = Box('x', A, A)\n", - "y = Box('y', A @ A, B)\n", - "\n", - "diagram = x @ Id(A) >> y\n", - "print(repr(diagram))\n", - "diagram.draw(figsize=(5, 3))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "A :py:class:`~lambeq.backend.grammar.Ty` can be indexed, sliced, or even reversed, just like a ``List[Ty]``." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "A @ B @ C\n", - "Ty(A) @ Ty(B) @ Ty(C)\n", - "Indexing: A\n", - "Slicing: B @ C\n", - "Reversing: C @ B @ A\n" - ] - } - ], - "source": [ - "t = A @ B @ C\n", - "\n", - "print(t)\n", - "print(repr(t))\n", - "\n", - "print('Indexing:', t[0])\n", - "print(f'Slicing:', t[1:])\n", - "print(f'Reversing:', t[::-1])" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Again, a :py:class:`.grammar.Diagram` behaves like a ``List[Diagram]``, so it can be indexed, sliced, and reversed. Reversing a diagram performs the dagger operation." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "|Ty() @ [x; Ty(A) -> Ty(A)] @ Ty(A)| >> |Ty() @ [y; Ty(A) @ Ty(A) -> Ty(B)] @ Ty()|\n", - "Indexing: |Ty() @ [x; Ty(A) -> Ty(A)] @ Ty(A)|\n", - "Slicing: |Ty() @ [y; Ty(A) @ Ty(A) -> Ty(B)] @ Ty()|\n", - "Reversing (dagger): |Ty() @ [y†; Ty(B) -> Ty(A) @ Ty(A)] @ Ty()| >> |Ty() @ [x†; Ty(A) -> Ty(A)] @ Ty(A)|\n", - "\n", - "Dagger operation:\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "print(diagram)\n", - "print(f'Indexing:', diagram[0])\n", - "print(f'Slicing:', diagram[1:])\n", - "print(f'Reversing (dagger):', diagram[::-1])\n", - "\n", - "from lambeq.backend.drawing import draw_equation\n", - "\n", - "print('\\nDagger operation:')\n", - "# boxes are drawn as trapeziums to demonstrate the reflection along the horizontal axis\n", - "draw_equation(diagram, diagram[::-1], symbol='->', figsize=(8, 3), asymmetry=0.2)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "A :term:`monoidal category` equipped with a :py:class:`~lambeq.backend.grammar.Swap` is known as a :term:`symmetric monoidal category`. Nested swaps can be defined using the :py:meth:`~lambeq.backend.grammar.Diagram.swap` method." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.grammar import Diagram, Swap\n", - "\n", - "Swap(A, B).draw(figsize=(1, 1), draw_as_pregroup=False)\n", - "Diagram.swap(A @ B, C).draw(figsize=(2, 2), draw_as_pregroup=False)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " In a strict mathematical sense, the associativity and unit rules of :math:`\\otimes` in a :term:`monoidal category` only hold up to *isomorphism*. As a consequence, this definition requires extra morphisms such as unitors and associators, as well as complicated coherence conditions. Instead, ``lambeq`` strictly enforces the rules to hold up to equality, so such coherence conditions are unnecessary. This greatly simplifies its practical use." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Rigid monoidal categories\n", - "\n", - "A *rigid category* is a monoidal category where every object $A$ has a *left adjoint* $A^l$ and *right adjoint* $A^r$. The left adjoint of the right adjoint of a type is equal to the type itself, and vice versa: $(A^r)^l = A = (A^l)^r$" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the ``lambeq``, the :term:`adjoint` of a type :py:class:`~lambeq.backend.grammar.Ty` is obtained using the ``.l`` and ``.r`` properties:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "A.l is represented as Ty(A).l\n", - "A.r is represented as Ty(A).r\n" - ] - } - ], - "source": [ - "from lambeq.backend.grammar import Box, Id, Ty\n", - "\n", - "A = Ty('A')\n", - "\n", - "print(A.l, 'is represented as', repr(A.l))\n", - "print(A.r, 'is represented as', repr(A.r))\n", - "\n", - "assert A.r.l == A == A.l.r" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The key property of a :term:`rigid category` is the existence of :term:`cups ` and :term:`caps ` between an object and its :term:`adjoint`: these are special morphisms that are drawn as bent wires in diagrammatic notation. " - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.grammar import Cap, Cup\n", - "\n", - "\n", - "draw_equation(Cup(A.r, A.r.r), Cup(A, A.r), Cup(A.l, A), symbol='...', figsize=(8, 1))\n", - "draw_equation(Cap(A.l, A.l.l), Cap(A, A.l), Cap(A.r, A), symbol='...', figsize=(8, 1))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ":term:`Cups ` and :term:`caps ` satisfy the so-called :term:`snake equations`:" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Snake Equations - For any object A :\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "snake1 = Id(A) @ Cap(A.r, A) >> Cup(A, A.r) @ Id(A)\n", - "snake2 = Cap(A, A.l) @ Id(A) >> Id(A) @ Cup(A.l, A)\n", - "\n", - "assert snake1.normal_form() == Id(A) == snake2.normal_form()\n", - "print('Snake Equations - For any object', A, ':')\n", - "draw_equation(snake1, Id(A), snake2, figsize=(8, 2))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. Note::\n", - "\n", - " The :py:meth:`.grammar.Diagram.normal_form` method used above also applies on standard monoidal diagrams. \n", - "\n", - "Nested :term:`cups ` and :term:`caps ` can be created using the :py:meth:`.grammar.Diagram.cups` and :py:meth:`.grammar.Diagram.caps` methods." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.grammar import Diagram\n", - "\n", - "A, B = Ty('A'), Ty('B')\n", - "\n", - "nested_cup = Diagram.cups(A @ B, (A @ B).r)\n", - "nested_cap = Diagram.caps((A @ B).r, A @ B)\n", - "\n", - "nested_snake = Id(A @ B) @ nested_cap >> nested_cup @ Id(A @ B)\n", - "\n", - "assert nested_snake.normal_form() == Id(A @ B)\n", - "draw_equation(nested_snake, nested_snake.normal_form())" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/parameterise.ipynb b/docs/tutorials/parameterise.ipynb deleted file mode 100644 index 8709b888..00000000 --- a/docs/tutorials/parameterise.ipynb +++ /dev/null @@ -1,401 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Step 3. Parameterisation" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Up to this point of the pipeline, a sentence is still represented as a :term:`string diagram`, independent of any low-level decisions such as tensor dimensions or specific :term:`quantum gate` choices. This abstract form can be turned into a concrete :term:`quantum circuit` or :term:`tensor network` by applying ansätze. An :term:`ansatz ` can be seen as a map that determines choices such as the number of :term:`qubits ` that every wire of the :term:`string diagram` is associated with and the concrete parameterised quantum states that correspond to each word. In ``lambeq``, :term:`ansätze ` can be added by extending one of the classes :py:class:`.TensorAnsatz` or :py:class:`.CircuitAnsatz` depending on the type of the experiment.\n", - "\n", - ":download:`Download code <../_code/parameterise.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Quantum case" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "For the quantum case, the library comes equipped with the following ansätze:\n", - "\n", - ".. _tbl-ansatze:\n", - ".. csv-table::\n", - " :header: \"Ansatz\", \"Description\"\n", - " :widths: 20, 60\n", - "\n", - " \":py:class:`~.IQPAnsatz`\", \"Instantaneous Quantum Polynomial ansatz. An IQP ansatz interleaves layers of Hadamard gates with diagonal unitaries. This class uses ``n_layers-1`` adjacent CRz gates to implement each diagonal unitary (see [Hea2019]_)\"\n", - " \":py:class:`~.Sim14Ansatz`\", \"A modification of Circuit 14 from [SJA2019]_. Replaces circuit-block construction with two rings of CRx gates, in opposite orientation.\"\n", - " \":py:class:`~.Sim15Ansatz`\", \"A modification of Circuit 15 from [SJA2019]_. Replaces circuit-block construction with two rings of CNOT gates, in opposite orientation.\"\n", - " \":py:class:`~.Sim4Ansatz`\", \"Circuit 4 from [SJA2019]_. Uses a layer each of Rx and Rz gates, followed by a ladder of CRx gates per layer. \"\n", - " \":py:class:`~.StronglyEntanglingAnsatz`\", \"Ansatz using three single qubit rotations (RzRyRz) followed by a ladder of CNOT gates with different ranges per layer. Adapted from the :term:`PennyLane` implementation of :py:mod:`StronglyEntanglingLayers`.\"" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the example below we will use the class :py:class:`.IQPAnsatz`, which turns the :term:`string diagram` into a standard :term:`IQP circuit`." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "sentence = 'John walks in the park'\n", - "\n", - "# Get a string diagram\n", - "parser = BobcatParser(verbose='text')\n", - "diagram = parser.sentence2diagram(sentence)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In order to create an :py:class:`.IQPAnsatz` instance, we need to define the number of :term:`qubits ` for all atomic types that occur in the diagram -- in this case, for the noun type and the sentence type. The following code produces a :term:`circuit ` by assigning 1 qubit to the noun type and 1 qubit to the sentence type. Further, the number of IQP layers (``n_layers``) is set to 2." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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7t+/j+PHj+vVnnmh/CosLAwlSpTA/v370aZNm3Tbc6zkjC1btuDjjz9GZGQkbG1t023PvOQMX19fnDx5EkFBQXq1Z15yhqenJ7y9veHn56dXe+Yl+0VFRcHOzg6bN29Gjx490m3PnFB+NnHiRGzatAl3797Vqz3HS854//334ebmhrVr1+rVnnmh/OrUqVPw9vZGcHBwqre1SYpjJXvxHvhERERERERERERERArEAj4RERERERERERERkQLxIba5UGBgoLFDoBQwL8rEvBDph2NFmZgXZWJelIl5UR7mhEh/HC/KxLwQ6YdjJXtxBj4RERERERERERERkQKxgE9EREREREREREREpEAs4BMRERERERERERERKRAL+ERERERERERERERECsSH2GZSaGgonj59apC+njx5gvbt2+PJkye4dOmSQfoEAEdHR5QqVcpg/eUGhswLALRv396gOQGYl6wqXbo07O3tOVYoTzLkWHn16hXat2+PV69ecbxkkSHzEhsbi/bt2+Ovv/6CpaWlQfoEmJescnFxQb169ThWDMCQealXrx5cXFyYlyzKjn1YbGws80J5kiHHi4ODAxo1asTzSQMwZF48PDzg4ODAfRjlSdlRqwwNDUVMTIxB+gQ4XjJLJSJi7CBym9DQULi7uyM6OtrYoaTJ2toaISEh+WZgMC/KlBvykt9yQsqUG8YKkP/GC/OiTLkhL/ktJwDzokS5ISdA/ssLKRPHizLlhrzkt5yQMuWGsQJwvGQWZ+BnwtOnTxEdHY3169fD3d3d2OGkKCQkBH369MHTp0/zzaBgXpRJ6XnJjzkhZVL6WAHy53hhXpRJ6XnJjzkBmBclUnpOgPyZF1ImjhdlUnpe8mNOSJmUPlYAjpesYAE/C9zd3VGrVi1jh0HvYF6UiXkh0g/HijIxL8rEvCgT86I8zAmR/jhelIl5IdIPx0rexIfYEhEREREREREREREpEAv4REREREREREREREQKxAI+EREREREREREREZECsYBPRERERERERERERKRALOCn4ObNm3BxcUFkZGSm+3Bzc8OCBQsMF5TCvPfee9ixY4exwzC4fv36oVOnTsmWBwYGQqVS4cWLFzkeEzEvRBnB8aJMzIvyMCfKxLwoE/NCpB+OFWViXigvMEStUl/379+HSqVCUFBQtm/L0H7++We0b9/e2GEYXJ4q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adNGVatWlbe3t4KCgjR9+nSlpaXZJcO5c+c0YcIENW3aVJ6envLx8VH79u0VFxd311+A50efd+v6cSm3f7t375YkPfnkk3Jxcckx9gIKmxIlSig+Pl5Xr15Vz549de3atTwve7fj40uXLikkJESVK1fW8uXL5eREKQ2AfXHUAQDkycqVK623zzlx4oQ2bdqkvn37Wud/8cUXatSokTZs2KCvv/5a4eHhCgsL06ZNm6xtPDw81LZtWy1YsMDe8Qusvn37asiQIRo6dKh27NiRp2XWrFmjESNGaPz48dq7d6/8/PzUtm1bnTlz5pbL/fjjj+revbsefvhhTZ061RbxASDPDMPQzp07Jcn6ZfF13377rcLCwvTiiy/esnialpammJgY9e/f3zrN1dVV3t7eOfp0RBkZGZL+fEji0KFD1a5dO3l5eWnevHn617/+pfnz58vd3V0tW7bUvHnzbL7+zMzM217BnZ6ebv376NGjaty4sebNm6euXbtq3bp12rJli4YPH67ExEQ98MADOnTokM1z3phhy5Ytuv/++7V7925FRkZqy5Ytio+P1//93/9p4sSJatu2ra5cuXJH/edHn/fi+pdQN/4bMGCAatasqSZNmljb9e3bV3PnzrVbLsAs1apV09q1a7Vt2zaNHj06T8vc7fjYMAz169dPJ06cUEJCQoH8MhhAIWDAdAcOHDAkGdu3bzc7Cm6wePFiw2KxmB2jwEtOTjYkGcnJyXfdx7PPPmt07Ngxx/StW7cakozz58+bmq+guZttTktLM9q2bWt9/dZbbxlNmjS57XJPPfWUER4enm1abGys8be//c3mGQuzP/74w2jRooVRuXJl4+eff75t+2bNmhkvvPCC9XVmZqZRpUoVY/LkyTdd5urVq0azZs2MatWqGWfOnLFJbuQUFxdnSDIuXbpkdpQCjXNL4bR8+XJD0l39W7p0qWEYhrFu3TrD09MzW79/3adLly41ypYta3z88cdGvXr1jFKlShlt27bN0/H1drZu3Wo0bdrUcHNzM8qWLWsEBQUZx44dy7XtDz/8YEgy4uLijIcfftgoXry4dTsiIyONpk2bGqmpqbku+/333xs1a9Y01q1bZ502fvx4w8/Pz1i+fLlRvXp1o0yZMsYTTzxxy/8Xr/+3eO+99wxfX1+jWLFixg8//JCtzfV+lyxZYtSoUcM6Pr5w4YJRu3ZtY+zYsUZWVlau/S9evNioXr268euvv1qnVa9e3Zg0aZIRHh5uuLu7G15eXrd9v7Rq1cp44YUXjGHDhhkVK1Y0WrdubRiGYezevduoUKGC8f777+e6XEZGhhEeHm506NDBOu2PP/4wXnjhBcPb29soXry44ePjY7z55pvW+XfT5/V9uWHDBqN169ZGyZIljUaNGhlffPHFTbfJMAxDkpGQkHDLNrlJT083PD09jddffz3b9OPHjxuSjO+///6O+4TtjRkzxqhZs6bZMQq1mTNnWo+jt3M342PDMIwpU6YYkoz4+Ph7zgsAd4sr8AEA2ezcuVPdunXLdgX2e++9p44dO1pff/7559mu+LqZixcv5ngAarNmzfTjjz9a702M23N1ddX69eslSd26dct25eFfpaenKzk5WW3atLFOc3JyUps2bW56Bb9hGIqIiNB//vMfxcfHy9PT07YbAAC3YRiG3nrrrdu2s1gs8vX11c8//6zU1FRNnz5dbm5u1nPS559/roCAgNv2k5aWpunTp2vFihX617/+pRMnTigyMvKetuHatWvq1KmTWrVqpa+//lo7duzQwIEDb3vl/yuvvKJhw4YpJSVFbdu21YEDB7Rs2TJt3LhR3t7eWrBggerUqaMaNWroH//4h+rWrSsXFxctWbJEo0aNyvaLhCNHjmjjxo3atGmTNm3alKeHPKalpWnq1Kl6++23tX//flWqVClHm++//14bNmxQfHy89u3bJ0maMmWKAgIC9Prrr+vixYt65plnrLfPmTt3rtq1a6fnnntOwcHBmj17drb+ZsyYoSZNmuirr75St27dJOm244LY2Fi5urrq3//+txYuXChJGjp0qCZNmqQOHTrowIEDatWqlTw9PdW9e3eNGDFC06ZN08KFC3XgwAFt3bpV0p/PeXn//fe1du1afffdd1q1apX1dkt32+d1UVFRioyM1L59+3T//ferV69ed3R7j7x6//33de7cOYWHh2eb7uPjIy8vL33++ec2XyfgiIYPH67evXurX79++vrrr2/a7m7Gx9Kfv8YZM2aMxowZo5CQEJtmB4A74Wx2AADIi02bNsnd3T3btMzMTJPSFG733Xef2rdvr8mTJ+vll1+WJK1du1YxMTHWNsePH79tAX/t2rXavXu3Fi1alG16lSpVrH3c+IEZt+bt7a0NGzaoVatW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PpCLJ598UtOnT1ejRo2UkJCgUqVKmR0JAAAAME358uWVkJCgBg0aaN68eWrZsqXZkQAAAIoErsAHbmLEiBEaMWKE2TEAAAAAh9CwYUPt3LnT7BgAAABFClfgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAAAAAAADggCjgAwAAoMg6f/68fvrpJ/32229KSkrS+fPnzY4EAAAAAFYU8AEAAFDkJCcnq1+/fqpcubI2btyoH374QY888oiqVKmifv36KTk52eyIAAAAAEAB3xEYhiFJ2r9/v77//nvrawAAANiWYRh644031KRJEyUmJmr06NHWeXv27NG4ceOUmJioJk2a6I033mBcBgAAAMBUFPBNZBiGVqxYoZCQEEnSoEGDVKdOHfn7+2vFihV8YAQAALCxSZMmaezYsXrttdd09OhRRUZGWufVq1dPo0eP1tGjR/Xaa69p7NixmjRpkolpAQAAABR1zmYHKKoMw9CLL76o6OhoWSyWbPO+/fZbhYWFadeuXZo7d26O+QAAALhzycnJ1uL9uHHjbtquWLFi1vljx45Vu3btFBAQYK+YAAAAAGDFFfgmWblypaKjoyUpx5X2WVlZkqTo6GitXLnS7tkAAAAKo3nz5snHx0dRUVF5ah8VFSUfHx/Nnz8/n5MBAAAAQO4o4JvAMAy99dZbcnK69X9+JycnTZ8+nVvpAAAA3KPz589r9erV6tevn37//XdduXLF+u+6G6dduXJFv//+u8LDw7V69WqdP3/exPQAAAAAiiqLQXXY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vXpVP/30k+rUqSNJWrt2rfz8/LI9rHHMmDGaOHGigoKCVKtWLQ0bNkxPPvmk4uPjs/XVoUMHxcXF2TU/gKKhePHiWr9+vdLT09WjRw9du3bttsvMnDlTzz33nMLDw1W/fn0tXLhQbm5ut7wVT1RUlBITE7V27VpVr17dlpsAAAAAANlQwAcAZLNz505169ZNU6dOtU5777331LFjR+vrzz//XE2aNLltXxcvXlSFChWyTWvWrJl+/PFHHTt2zGaZAeC6v/3tb1q3bp22b9+ul1566ZZt09PTlZycrDZt2linOTk5qU2bNtqxY0euy6xbt05Tp07V1KlT9eijj9o0OwAAAAD8FQV8k23atEnu7u7Z/rVr187sWACKsPvuu0/t27fPdvXp2rVr1bNnT+vr48ePq0qVKrfsZ+3atdq9e7fCw8OzTb++3PHjx22YGgD+5+GHH9bMmTM1a9YsrV69+qbtzp49q8zMTHl5eWWb7uXlpVOnTuVo/+233yo8PFw9evTQyJEjbZ4bAAAAAP6KAr7JHnnkEe3bty/bv7ffftvsWACKME9PT3Xt2lU//vijdu/erTNnzsjV1VXly5e3trl69apKlChx0z62bt2q8PBwLVmyRA888EC2edfvFZ2WlpY/GwAAkiIiItSnTx8NGDBA+/btu+f+Lly4oJCQENWsWVMxMTE8tBYAAACAXTibHaCoK1WqlGrXrp1t2o8//mhSGgD4k7u7uzp27KhVq1apZs2a6tWrV7b5Hh4eOn/+fK7Lbtu2TR06dNCsWbOsD7290a+//irpzy8KACC/WCwWLVq0SN9++606d+6sPXv25Lill4eHh4oVK6bTp09nm3769Gl5e3tbX2dlZalPnz46e/asdu/erVKlStllGwAAAACAK/ABALl65plnFBcXpw8//FBPPfVUtnkPPvigDhw4kGOZpKQktW/fXlOnTtXAgQNz7ffbb7+Vi4tLjivzAcDWSpYsqfj4eP3222/q1auXMjMzs813dXVVQECAEhMTrdOysrKUmJiowMBA67TXX39dH374oVavXp3jwgsAAAAAyE8U8AEAuWrbtq0yMzNVt25dubi45Ji3Y8eObMWwrVu3qn379nrxxRfVpUsXnTp1SqdOnbJecX/d559/ruDgYOutdAAgP9WoUUNxcXH69NNPNXbs2BzzR4wYoSVLlig2NlYp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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import AtomicType, IQPAnsatz\n", - "\n", - "# Define atomic types\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE\n", - "\n", - "# Convert string diagram to quantum circuit\n", - "ansatz = IQPAnsatz({N: 1, S: 1}, n_layers=2)\n", - "circuit = ansatz(diagram)\n", - "circuit.draw(figsize=(15,10))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This produces a quantum circuit in :py:class:`lambeq.backend.quantum.Diagram` form.\n", - "\n", - ".. note::\n", - "\n", - " Lambeq also includes other circuit ansätze. See :py:class:`~.ansatz.CircuitAnsatz` for further reference.\n", - "\n", - "Conversion to :term:`pytket` format is very simple:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - " \n", - "
\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from pytket.circuit.display import render_circuit_jupyter\n", - "\n", - "tket_circuit = circuit.to_tk()\n", - "\n", - "render_circuit_jupyter(tket_circuit)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Exporting to :term:`pytket` format provides additional functionality and allows interoperability. For example, obtaining a :term:`Qiskit` circuit is trivial:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from pytket.extensions.qiskit import tk_to_qiskit\n", - "\n", - "qiskit_circuit = tk_to_qiskit(tket_circuit)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " To use ``tk_to_qiskit``, first install the ``pytket-qiskit`` extension by running ``pip install pytket-qiskit``. For more information see `the pytket documentation `_." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Classical case" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the case of a classical experiment, instantiating one of the tensor :term:`ansätze ` requires the user to assign dimensions to each one of the atomic types occurring in the diagram. In the following code, we parameterise a :py:class:`.TensorAnsatz` instance with :math:`d_n=4` for the base dimension of the noun space, and :math:`d_s=2` as the dimension of the sentence space:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/sAAAGjCAYAAABzOgWJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6O0lEQVR4nO3deXwU9f3H8fduEnKRkEAgIOEIIQlIuYtSiiQcQUBURA5RuaEiavHqT4tVUEAtWrGlnlUEPPCgYqsCEk7FAzXADxUkgIQQ0ECAhASSQHbn90d/2bKEO9lM8s3r+XjMg93Z3clnPjvMzHtmdtdhWZYlAAAAAABgDKfdBQAAAAAAgIpF2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMIR9AAAAAAAMQ9gHAAAAAMAwhH0AAAAAAAxD2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMIR9AAAAAAAMQ9gHAAAAAMAwhH0AAAAAAAxD2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMIR9AAAAAAAMQ9gHAAAAAMAwhH0AAAAAAAxD2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMIR9AAAAAAAMQ9gHAAAAAMAwhH0AAAAAAAxD2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMIR9AAAAAAAMQ9gHAAAAAMAwhH0AAAAAAAxD2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMIR9AAAAAAAMQ9gHAAAAAMAwhH0AAAAAAAxD2AcAAAAAwDCEfQAAAAAADEPYBwAAAADAMP52F+BLmZmZysnJsbsMSVJUVJSaNm1qdxkVqir1F77DsgsAMAXbNFRXLLu+ZWJ/JYPDfmZmplq3bq3jx4/bXYokKSQkRNu2bTNmIapq/YXvsOwCAEzBNg3VFcuub5nW31LGhv2cnBwdP35cb7zxhlq3bm1rLdu2bdOtt96qnJwcYxagqtRf+A7LLgDAFGzTUF2x7PqWif0tZWzYL9W6dWt16tTJ7jKMRX9RXbHsAgBMwTYN1RXLrm/xBX0AAAAAABiGsA8AAAAAgGEI+wAAAAAAGIawDwAAAACAYQj7AAAAAAAYhrAPAAAAAIBhCPsAAAAAABiGsA8AAAAAgGEI+wAAAAAAGIawfwYZGRlyOByaPn263aWgCpo/f74cDofWrl17znEAYJe1a9fK4XBo/vz5dpcCAJeEfStUpJq6XTQ27H/77beSpIULF9pcCQAAAIAz2bx5s6ZPn66MjAy7SwGM4293AQAAoGL16NFDhYWFCggIsLsUADinzZs369FHH1VycrKaN29udzmAUYw9sw8AQE3ldDoVFBQkPz8/u0sBAMA2+fn5dpdgqxoV9ktKSvTnP/9Zl19+uYKCglSvXj3dcMMN+u677876mo8++khdunRRUFCQGjVqpD/84Q8qKSnxek7pkcj9+/drxIgRioyMVEhIiK6++mqlp6f7erbw//bs2SOHw6Fp06Z5jb/66qvlcDg0Z84cr/FXXnmlWrduLUn68ccfNXnyZLVp00ZhYWEKCQlR586d9corr5SrplmzZsnhcOiuu+6S2+2WJH388cdKSkpSVFSUgoOD1bRpUw0ePJhlBUCFOf2ziafef+2119SmTRsFBgaqWbNmmj17tr3FAqixpk+frrFjx0qSevbsKYfDIYfDoTFjxnie43a79fTTTysuLk6BgYFKSEjQggULzji9lStXqm/fvoqIiFBQUJDatWunF198sTJmBRdh/vz56ty5syTppZdeUrNmzRQYGKh27drp7bff9nruihUrNHz4cLVo0ULBwcGKiIhQ3759tW7dujLTLc1kP/30k4YMGaK6desqPDz8nLUsWLBAV1xxhSSpuLi4guaw6qhRYf+WW27Rgw8+qJiYGD311FOaNGmS1qxZo9/85jfatGlTmecvXbpU48aNU//+/TVnzhy1b99eTz/99Bl3jI4dO6YePXrIz89Pjz/+uO68806tXbtW119/vVwuV2XMXo3XrFkztWjRQqtXr/aMO3HihNavXy+n0+k1/ujRo0pLS1OvXr0k/WdH+NNPP9XAgQP11FNPacaMGQoICNDEiRP1xBNPXHQtLpdLt99+u/70pz/piSee0Ny5c+V0OrVu3Tpdd911ys3N1R//+Ef9/e9/18SJE3Xo0CHt3Lmz/E0AgHN48cUX9dhjj2nEiBH6y1/+okaNGumBBx7QW2+9ZXdpAGqgwYMH63e/+50kaerUqXr99df1+uuv67bbbvM8p3T8bbfdptmzZ8vpdGrMmDH6/PPPvab18ssvq2/fviooKNBDDz2kZ555RnFxcbr99tv1hz/8oVLnCxfuk08+0eTJk/XYY4/pxIkTGjFihNeX6M2fP1+HDx/WqFGjNHfuXN1zzz3a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3v5+8sknmjp1qtavX6/g4OAKrAySlJSUpHHjxmn06NHlmg7LblnPPfecli1bpo8++qgCq4IkHThwQP3799fcuXPVrVs3u8sxzt133y1JevbZZ22tw0RffPGF7rrrLi1btkwNGjSwuxzjDBw4UP3799cdd9xRrumwTStrwYIFmjdvntatW1eBVUGSCgsL1b17dz3++OO6+uqryzUtlt2yHn74Yf3888965ZVXyl2Lif2VDD6zL0lNmzYt95tWu3Zt1atXT506daqgqsxR3v6mp6dLkjp06KDQ0NCKKgv/z9/fXzExMSy7Z1DeZbdhw4YKDAyktz6wb98+SVLLli3prw9ERERIEr31gQMHDkiS2rZtq8aNG9tcjXkCAwPVsGFDlt0zKO82bdWqVfL396e3PnDs2DFJUmxsLP09g/Iuu/Xq1VN+fj69PQe+oA8AAAAAAMMQ9gEAAAAAMAxhHwAAAAAAwxD2AQAAAAAwDGEfAAAAAADDEPYBAAAAADAMYb+CHD9+XC1atJDD4dCdd95pdznGob8VJz09XY888oi6du2q+vXrKywsTB06dNCsWbM8PxGDS0NvKxfrBd+htxWH9ULlYtn1LfrrO/TWd2pybwn7FeSRRx7RwYMH7S7DWPS34sybN09z5sxRXFycHnnkET311FNKTEzUn/70J3Xr1k2FhYV2l1ht0dvKxXrBd+htxWG9ULlYdn2L/voOvfWdmtxbwn4F2Lhxo5599lk9+uijdpdiJPpbsYYMGaKsrCy9+eabuuuuuzRp0iS98847euihh7Rlyxa9+uqrdpdYbdHbysN6wXfobcVivVB5WHZ9i/76Dr31nZreW8J+OblcLk2cOFH9+vXT4MGD7S7HOPS34v36179WnTp1yowfPny4JOn777+v7JKMQW8rB+sF36G3FY/1QuVg2fUt+us79NZ36K3kb3cB1d2cOXP0448/6p///KfdpRiJ/laerKwsSVJ0dLTNlZiH3lYs1gu+Q28rD+uFisWy61v013fore/QW87sl8vu3bs1bdo0PfLII2revLnd5RiH/lYel8ulGTNmyN/fXzfffLPd5RiF3lYs1gu+Q28rD+uFisWy61v013fore/Q2//gzH45TJo0SS1atNC9995rdylGor+V5+6779aXX36pxx9/XImJiXaXYxR6W7FYL/gOva08rBcqFsuub9Ff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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import TensorAnsatz\n", - "from lambeq.backend.tensor import Dim\n", - "\n", - "tensor_ansatz = TensorAnsatz({N: Dim(4), S: Dim(2)})\n", - "tensor_diagram = tensor_ansatz(diagram)\n", - "\n", - "tensor_diagram.draw(figsize=(10,4), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that the wires of the diagram are now annotated with the dimensions corresponding to each type, indicating that the result is a concrete :term:`tensor network`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Matrix product states" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In classical experiments of this kind, the tensors associated with certain words, such as conjunctions, can become extremely large. In some cases, the order of these tensors can be 12 or even higher (:math:`d^{12}` elements, where :math:`d` is the base dimension), which makes efficient execution of the experiment impossible. In order to address this problem, ``lambeq`` includes :term:`ansätze ` for converting tensors into various forms of :term:`matrix product states ` (MPSs).\n", - "\n", - "The following code applies the :py:class:`.SpiderAnsatz`, which splits tensors with order greater than 2 to sequences of order-2 tensors (i.e. matrices), connected with :term:`spiders `." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABSgAAAJrCAYAAADj+n3EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABkEElEQVR4nO3dd5hU5fk/4GeXvoj0JkUpIihgRKkaUSyoiTV+NRqN2IklGk1iSxQjxlii0ahRY5do7BpjIhF7FBFExYKxS0eaSC+75/dHfmxYAaXs7Ls7e9/XNRc7Zc888+7DmXM+8845BVmWZQEAAAAAkEBh6gIAAAAAgOpLQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEimZuoCKqNJkybF7NmzU5cRERHNmjWL9u3bpy6jXFWm8SX39DBVmf6lqsu3Hta/1Uu+9W+EHq5O9C9VnR7OrXwc300loPyaSZMmRbdu3WLx4sWpS4mIiKKiopg4cWLeNG5lG19yTw9Tlelfqrp86mH9W/3kU/9G6OHqRv9S1enh3Mq38S0PAsqvmT17dixevDhGjBgR3bp1S1rLxIkT46ijjorZs2fnTdNWpvEl9/QwVZn+parLtx7Wv9VLvvVvhB6uTvQvVZ0ezq18HN/yIKBch27dukWvXr1Sl5G3jC9VnR6mKtO/VGX6l6pOD1OV6V+qOj1ceTlJDgAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgXA+fffZZFBQUxLBhw1KXQiV15513RkFBQTz//PPfeBuk8vzzz0dBQUHceeedqUuBDaZ/qcr0L1WdHqYqs09GebNOzJ1qE1CuaqKrrroqdSkb7e67744ddtgh6tWrFy1btowTTjghZs2albosKplly5bFhRdeGB06dIg6depEp06dYvjw4bFixYrUpVENTJs2LX784x9H8+bNo169erHTTjvFgw8+mLos+Fb/+c9/4uc//3kMGjQoGjVq5INJqpS//e1vceyxx0bXrl2jfv36scUWW8See+4ZTz31VOrSYL3cddddMXjw4Gjbtm3UrVs3mjdvHv37948777wziouLU5dHFfDmm2/GsGHD4rPPPktdyhpsH/Nt9Mh/1UxdAOvnmmuuibPOOisGDhwY1157bUyZMiWuvvrqGD16dLz22mtRv3791CVSSRx++OHx+OOPx3HHHRf9+/eP0aNHx69//ev46KOPfMpTje26666xZMmSqFWrVs6eY+7cubHLLrvEF198EWeddVa0bds27r333jjssMPi9ttvj2OPPTZnz01+q4j+HT16dFx99dXRqVOn2HHHHePZZ5/N2XNRvVRE/5500kmx+eabx4EHHhjbbLNNzJ07N+64447Yd999Y/jw4XHBBRfk7LnJfxXRw+PHj4/GjRvHqaeeGi1atIiFCxfGk08+Gccee2y89NJLcdttt+XsuckPb775Zlx88cWx2267xVZbbZW6nFK2j/k2euR/BJRVwLx58+JXv/pV9O7dO5555pmoUaNGRET07t07DjjggLj22mvj/PPPT1wllcE//vGPePzxx+Oss86K3//+9xERccIJJ0SjRo3i6quvjpNOOikGDBiQuEpSKCwsjLp16+b0OX73u9/Fp59+Gn/7299i//33j4iI448/Pvr37x8///nP4//+7/9is802y2kN5KeK6N8DDjgg5s6dG40aNYpx48ZF7969c/p8VB8V0b/33ntvDBo0qMxtp512Wuywww5x8cUXxymnnBKNGzfOaQ3kr4ro4WuvvXaN284444z43ve+F3fccUdceuml0apVq5zWALlg+zh/LFiwIBo0aFDuy9Uj/1NtvuK9NitXrozLL788tt1226hbt240bdo0zj777G/8nb///e/Ru3fvqFu3brRu3Tp+8YtfxMqVK8s8ZtWnNtOmTYsjjjgiGjduHEVFRTF48OD44IMPNrjO559/PhYvXhynn356aTgZEbH//vtHx44dY8SIERu8zOri888/j4KCgrjooovK3D548OAoKCiIa665psztffv2jW7dukVExPvvvx+nnHJKbLfddtGgQYMoKiqKHXfcMW699dZNqunSSy+NgoKCOP3006OkpCQiIp588skYOHBgNGvWLOrVqxft27ePQw45ZIP75d57742IiDPPPLPM7auu65Xq6+vHSln9+h133BHbbbdd1KlTJ7bccsu44oorNuo57r333ujUqVPpG2tERI0aNeL000+PuXPnxj/+8Y/yeClUQxXRv02aNIlGjRqVX9Hw/1VE/349nIyIKCoqiu9///uxYsWK+M9//rMpL4FqriJ6eF223HLLyLIs5s+fX67LJb8MGzasdJbZ7rvvHgUFBVFQUBBDhgwpfUxJSUlcddVV0alTp6hTp0506dIl7rrrrrUub9SoUbH33ntHo0aNom7dutGzZ8+46aabNqo228e5teoYo6NGjYphw4bFlltuGXXq1ImePXvGX//61zKPHT16dET890PpevXqRaNGjWLvvfeOF154YY3lrsp0Pvnkkzj00EOjSZMmsfnmm39jLXfddVfUqlUrDj300Fi6dOl6vwY98j/Vegblj370o3jggQdir732ip/85CcxY8aMuO666yLiv+FUr169yjz+H//4R9x4440xdOjQOO644+Lxxx+Pq666Kho3brzGDMZFixbFrrvuGv369Yvf/va38emnn8a1114bBx54YLzzzjtlgsZv895770VERP/+/de4r1+/fnHffffFwoULq02qviG23HLL6NixYzz77LNx8cUXR0TE8uXL49///ncUFhbGs88+Gz/72c8iIuKrr76K119/PU4++eSI+O/G14svvhjf//73o0OHDrFo0aJ48MEH48QTT4xZs2bFeeedt0G1FBcXx2mnnRY33XRTXHbZZXHuuedGRMQLL7wQBxxwQHTv3j3OO++8aNSoUUybNi1GjRoVH330UXTp0mW9n2Ps2LHRpk2baNeuXZnb27VrF1tssUWMHTt2g2om/910000xc+bMOP7446NRo0YxYsSIOOecc6Jt27Zx5JFHrvdypk+fHlOnTo0f/ehHa9zXr1+/iPhvfx522GHlVjuUV/9CChXRv1OmTImIiJYtW5bL8mB1uejh+fPnx4oVK2LevHkxcuTIuP3226NLly7RuXPncq6efHLIIYfE9OnT45Zbbonzzz+/dMJJp06dSj+gOf/882PJkiVx8sknR506deJPf/pTDBkyJDp37hw777xz6bJuueWWGDp0aPTr1y8uuOCCqF+/fjz99NPxk5/8JD7++OO48sor17su28cV55xzzolFixbFKaecEhERd9xxRxxxxBGxdOnS0qD6iSeeiIiI733ve9G7d++YOnVq3HrrrbHHHnvEc889F9/97nfLLHPhwoUxcODA2HnnnePSSy+NL774Yp3P/9vf/jYuuOCCOPXUU+O6666LwsL1mws4a9YsPbKaahtQPv300/HAAw/EYYcdFn/961+joKAgIiJ69OgRRxxxRFx55ZVrvLG+++678e6775Ye02Lo0KHRo0eP+OMf/7hGQDl79uz4xS9+Eb/85S9Lb2vevHn88pe/jFGjRsXgwYPXu9ZVJ8Jp06bNGve1adMmsiyLadOmbVCQVZ0MGjQo7rrrrli8eHEUFRXFq6++GosXL46jjjoqHn/88Vi5cmXUrFkzXnjhhSguLi6dhXD00UfH0KFDyyzrZz/7WQwaNCh+97vfxc9//vP1PhbPkiVL4sgjj4wnn3wy7rrrrvjxj39cet/jjz8eJSUl8fTTT0eLFi1Kb//1r3+9wa912rRpse222671vjZt2pTuqMAqkyZNiokTJ0bDhg0jIuK4446LLbfcMv74xz9u0M7FtGnTImLd66mIiKlTp5ZDxfA/5dW/kEKu+/ett96KRx55JL773e9Ghw4dNnl58HW56OE99tgjXn/99YiIKCgoiD333DNuuummDZrcQfXTs2fP6N+/f9xyyy2x1157xW677VZ636qActmyZTF27NioXbt2REQceuih0bFjx7j++utLA8rp06fHT3/60/jhD39Y+s20iIhTTjklzjjjjLj66qvjJz/5SXTs2HG96rJ9XHFmz54dEyZMKF0fDR06NHr27BlnnXVWHH744VGvXr349a9/HSNHjoyTTz65dDLa0KFDY7vttovLLrtsjYByzpw5ccEFF8Tw4cPX+bwlJSVx+umnx4033hiXXnrpBh96b/bs2RGhR1aptl/xfvTRRyMi4oILLigNJyOiNOR788031zhD9kEHHVTmgLsFBQWx++67x4wZM2LhwoVlHltYWBg//elPy9y2Kvj68MMPN6jWVdOD69Sps8Z9q44Hs3jx4g1aZnUyaNCgWLFiRbz00ksREfHss89GixYt4owzzogFCxaUzip87rnnSv+mEVHmxENLly6NOXPmxNy5c2PvvfeOr776Kt5///31ev65c+fGXnvtFaNGjYonnniiTDgZEaUr0YcffniNwwVsqMWLF6+1TyL+2yv6hK879thjS3sw4r9fCezXr98Gr6dW9Zb1FBWpvPoXUshl/86aNSsOOeSQqFev3iYfmgbWJRc9fOONN8bTTz8dd999dxx22GGlsylhU51yyiml4WTEf8OfLl26lOnXhx56KJYtWxbHH398zJ49u8xl//33j5KSkhg1atR6P6ft44rzk5/8pMz6qGHDhjF06NCYN29ePP/88xERUa9evdL7Fy5cGHPmzIkaNWpE3759Y8yYMWtd7s9//vN1PufSpUvj0EMPjVtuuSXuvPPOjToviKynrGo7g/LTTz+NwsLC0unf63pM8+bNS6+v7ZOSpk2bRsR/0/XVv2K9xRZbrHEw6dUfuyFWLWfZsmVl/lNF/K+hi4qKNmiZ1cmqYPjZZ5+NwYMHx7PPPhu777579OrVKxo3bhzPPvts9O/fP5599tnYfvvto0mTJhHx35XWsGHD4oEHHojJkyevsdz13VgaMmRILFy4MF588cXYZZdd1rj/tNNOi8cffzxOOeWUOOecc2KXXXaJffbZJ4444ogy/bc+ioqKYtmyZWu9b+nSpfqENaxrvbah66lVvbW2/rOeIlfKq38hhVz176oPRqdNmxZPPvmkb9iQM7no4T59+pT+fPTRR8d5550Xu+66a0yYMCE6deq00cuFdfXr559/Xnp94sSJERGx5557rnM5M2fOXO/ntH1ccdaW66z6ZuEnn3wSEVG6T7/bbrvFggULyjx29UlrqzRv3vwbj0/+y1/+MhYsWBB/+ctfNnrW+OpZz9dVxx6ptjMoN8Y3fbUgy7KNfuy3WRVSrW1q79SpU6OgoCC22GKLDVpmddKyZcvYdttt49lnn43FixfHmDFjYtCgQVFYWBgDBw6MZ555JubMmRMTJkwoc5D5I488Mq6++urYb7/94i9/+Us89dRT8fTTT5ces3LVCW6+zeGHHx6FhYVxySWXxJIlS9a4v2nTpjF27Nh47rnn4vTTT48FCxbEz372s+jSpUvpgXzX1xZbbLHOKeBTp05d69Rxqrfy+srUqnXQutZTEWv/6gJsCl/5oyrLRf/OnTs39txzz3j//ffjscceW+vJc6C8VMQ6+JhjjonFixeXnqAHNta6+nX1ffNVP999993x9NNPr/WytmMFrovt48pj4cKFceKJJ0ZExBFHHBEPPfRQjBw5Mp5++ukYNGjQWjOabwsGDzrooCgqKoorr7xyoz+YadasWUTokVWqbUDZsWPHKCkpKf2UZG0qy/F6ViX/awurXn311dhmm22cIOdbDBo0KMaPHx9PPPFELF++PPbYY4+I+O9xbl555ZX45z//GVmWlW7If/nll/H3v/89jj766LjpppviyCOPjMGDB8eee+5Z5qsB6+NHP/pRjBgxIp599tn4/ve/v9Yp2jVq1IjddtstLr300njppZfijTfeiIULF37j8S7WZtXBfr8+43Py5Mkxbdq02GmnnTZoebC+WrduHW3atIlXX311jftW3ab/AHJnVTj53nvvxaOPPrpBxzuHymrVh/tz585NXAmV3dpmwG2orbfeOiL+Gxrtueeea72s7/EnI2wfV6S15TqrTjbcsWPHeOaZZ0oP4XfyySfHD37wg9h7771jzz33jEWLFm3Ucw4aNCiefPLJ+PDDD2P33Xf/xpPorEvz5s31yGqqbUB50EEHRUTEZZddViYt/+ijjyIi4jvf+c4Gf702V3bbbbeoV69eXH/99VFcXFx6+xNPPBGffPLJBn2KU10NGjQoSkpK4uKLL4727duXfkVk0KBBsWzZsrjsssuiZs2aseuuu0bE/z5h+/onKdOnT9+oYzn98Ic/jPvuuy9eeuml2Hfffcscs3TVgXFX17Vr16hXr94Gb4wdccQRERHxhz/8ocztq67rFXLpiCOOiI8//rj0DHkR/z17/R//+Mdo1KhR7LfffgmrA8hf8+bNi7322ivefffdePjhh2PfffdNXRKst5UrV65z9tEf//jHiPjf2WxhXVZN2NmUMPuwww6LOnXqxEUXXbTWb77Nnz9/nYfTWhfbxxXjT3/6U8yfP7/0+vz58+Omm26KRo0axcCBA9c5g/Zf//rXOo8/uT522223eOqpp+Kzzz4rPT/JhtIj/1Ntj0G51157lZ7Be968efH9738/ZsyYEdddd11ERPziF79IXOH/NG7cOC655JL4+c9/HnvuuWccccQRMXXq1Pj9738fXbt2jTPPPDN1iZXebrvtFoWFhTFx4sQYMmRI6e3bbrtttGrVKt57773o169fNGjQICIiGjRoEHvvvXeMGDEi6tWrF717947PP/88br755ujQocNGTeE+9NBDo1atWnHYYYfF4MGD45///GdsvvnmceKJJ8aUKVNi7733ji233DKWLFkS999/fyxYsGCNE+p8m+9973vx/e9/P66++uqYP39+9O/fP0aPHh233XZbHHXUUWs9BiaUl3PPPTcefPDBOPLII+Oss86KNm3axH333Rdjx46NW2+9tfT/F1RG8+fPL90RXnXWzRdffLF0JvsBBxwQPXv2TFYffJO99torxo8fH0cccUTMmzcvRowYUeb+AQMGbNCsH6hICxcujLZt28bBBx8c3bt3j5YtW8aMGTPisccei3HjxsUee+xRLme2J7/17t07CgsL49JLL4158+ZF/fr1N/gbkW3bto0//elPccIJJ0S3bt3i6KOPji233DJmzZoVb7/9djz22GPx3nvvlTlx7rexfVwxmjVrFn379o1jjz02IiLuuOOOmDRpUtx6661RVFQUu+yyS+kxcv/0pz9F7969480334x77rknevToEW+//fZGP/cuu+wS//rXv2KfffaJ3XbbLZ599tkNOgSfHvmfahNQrpoJt3py/pe//CV69eoVd955Z5x99tlRv3796NWrV7zwwgvRtWvXVKWu1dlnnx1NmzaNa665Jn7605/G5ptvHocddlj87ne/8/Xu9dC4ceP4zne+E+PHj1/jeEyDBg2Ke++9d43bR4wYEeeee2488cQTcdddd8XWW28dl156adSqVat0xbehDjzwwHjkkUdKp5SPHDkyjj766LjzzjvjrrvuilmzZsXmm28e2267bTz00EPxgx/8YIOf48EHH4zhw4fHiBEj4p577ok2bdrEb37zmzj33HM3qmZYX02bNo2X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nWLo0KFx/vnnO1zMBiouLo6jjz46pk2bFsOGDUtdTrU1fPjweP/99+PEE0/0baIN9MQTT8Qll1wSP/vZz8yerCACSuBb9ejRI+677754+OGH48wzz/Tmtp7eeOONOPjgg2PQoEFx9dVXpy6n2iooKIiHHnoomjVrFoMHD44ZM2akLqlKWL58efzgBz+Ijz76KJ566imzJxM66qij4vzzz49f/OIXDrexAe6555745S9/GRdccEEcddRRqcuptho3bhz//Oc/44MPPohDDz00li9fnrqkKmH69OkxePDgaN68eTz88MNmTyZ0zTXXxKBBg+Lggw+ON954I3U5VUKWZXHGGWfEI488Evfdd1/06NEjdUnVVp8+feLOO++Mu+66y7e5NsArr7wShx12WBx00EExfPjw1OVUGwJKYL0cdNBBccMNN8T1118fl19+eepyKr1PPvkk9t133+jWrVs89NBDUatWrdQlVWtNmzaNkSNHxvLly2PfffeNr776KnVJlVpJSUkcd9xx8cILL8Rjjz3ma1mVwPDhw+PYY4+NY489Nv71r3+lLqfSGzlyZBx33HFx3HHHOclQJfCd73wnHnvssXj++efjuOOOc8KGbzF//vzYd999Y8WKFfHUU09FkyZNUpdUrdWqVSseeuih2GabbWLfffeNTz/9NHVJld7vfve7uOGGG+LGG2+Mgw46KHU51d6PfvSjuOqqq+Kyyy6LP/7xj6nLqfQmTpwY+++/f/Tu3Tv+8pe/RI0aNVKXVG0IKIH1NnTo0LjwwgvjvPPOizvvvDN1OZXWF198EYMHD44GDRrEk08+GZtttlnqkoiI9u3bx1NPPRWffvppHHLIIY6p+g3OOeecuPfee+Oee+6J3XffPXU5xH9nAt9yyy0xePDgOOSQQ2LcuHGpS6q0xo0bFz/4wQ9in332iZtvvtnMs0pi0KBBcc8998S9994b5557bupyKq1ly5bFIYccEp999lk89dRT0b59+9QlERGbbbZZPPnkk9GgQYMYPHhwzJo1K3VJldadd94Z559/flx00UVx8sknpy6H/+/ss8+Os88+O84444x48MEHU5dTaU2dOjX22Wef2GKLLeLxxx+PunXrpi6pWhFQAhtk2LBhceKJJ8YJJ5wQV1xxhWNSfs2bb74ZgwYNigULFsTIkSOjefPmqUtiNT169Ii//e1v8e9//zu+973vxeTJk1OXVKksXLgwTj311Ljqqqvi2muvjcMOOyx1SaymZs2acf/990f37t1jn332icceeyx1SZXOo48+Gvvss0/06NEj7r///qhZs2bqkljNYYcdFn/4wx/iyiuvjFNPPTUWLVqUuqRKZfLkyfG9730vXn755fjb3/4W3bt3T10Sq2nRokWMHDkyvvrqq9h9993jzTffTF1SpVJcXBxXXHFFnHDCCXHSSSc5uVsldMUVV8SRRx4ZRx11VFx33XVms3/NmDFjYvfdd48sy+Kf//ynwxslIKAENkhBQUHceOONceaZZ8a5554bO++8c7z//vupy0pu+fLlcdFFF0Xv3r2jRo0a8cwzzzgpTiW16667xt///veYOHFidO/ePW677TbHVY2IF154IXr27Bl33HFH3HDDDXH66aenLom1qF+/fjz55JOx8847x8EHHxw/+tGPYs6cOanLSm7OnDlx5JFHxiGHHBI777xz/P3vf4+ioqLUZbEWP/3pT+OGG26IO+64I3r27BkvvPBC6pKSy7IsbrvttujevXu8//778eSTT8auu+6auizWomPHjvHMM89EjRo1onfv3jFs2DDHVY2I999/P3beeec499xz48wzz4wbbrjB7PVKqLCwMG6//fY48cQT44wzzojdd989Pv7449RlJbd06dI455xzYsCAAdGwYcN45plnom3btqnLqp4ycqJu3brZddddl7qMvDVgwIBsyJAhqcuo9l5++eWsS5cuWZ06dbIrrrgiW7lyZeqSknjjjTey7bffPqtZs2Z24YUXZsuWLUtdEuth3rx52ZAhQ7KIyPbZZ59s8uTJqUtKYuHChdlpp52WRUT23e9+N/vwww9Tl8R6KCkpye65556scePGWcuWLbPHHnssdUnJPProo1nLli2zxo0bZyNGjMhKSkpSl8R6+PDDD7Pvfve7WURkp59+erZw4cLUJSUxadKkbJ999skiIjv22GOzefPmpS6J9bBs2bLswgsvzGrWrJltv/322RtvvJG6pCRWrlyZXXHFFVmdOnWyLl26ZC+//HLqklhPzz77bNahQ4esqKgou+6667Li4uLUJSUxZsyYrFu3blnt2rWz3/72t9mKFStSl1StCShzRECZWwLKymPx4sXZ2WefnRUUFGT9+vXL3n777dQlVZhFixZlF110UVazZs2sZ8+e2fjx41OXxEZ48sknsy222CLbfPPNsz//+c/VZsOkpKQkGzVqVNaxY8esXr162bXXXlttN06rsmnTpmX7779/FhHZkUcemc2YMSN1SRVmxowZ2ZFHHplFRHbAAQdk06ZNS10SG6i4uDj7wx/+kNWrVy/r2LFjNmrUqGoTMK9YsSL785//nG2++eZZmzZtsieffDJ1SWyE8ePHZz179sxq1qyZDRs2LFu0aFHqkirMhAkTsr59+2YFBQXZ2WefnS1evDh1SWygBQsWZKeeemoWEdnAgQOz999/P3VJFWbBggXZOeeckxUWFmY77bRTtdqHrcwElDkioMwtAWXls2o25ao3uHvvvTdbunRp6rJyYsKECdlpp52WNWzY0KzJPLH6bMo2bdpkF154Yfb5559XyHOXlJRkH374Yfbqq69mH374Yc53zufNm5ddf/31WY8ePcyazBOrz6asVatWdthhh2WjRo2qkMC5ovu3uLg4GzVqVPZ///d/Wa1atcyazBOrz6bs2bNndv3111fITMKK7t8sy7LPP/88+/Wvf51tscUWZk3midVnUzZs2DA77bTTsgkTJqQuKyeWLFmS/eUvf8kGDhyYRYRZk3li1WzKiMj23HPP7IEHHsjbfZvXX389O/nkk7PNNtvMrMlKSECZIwLK3BJQVk5Lly7N7r333my33XbLIiJr2rRpdtZZZ+XFp3GLFi3K7rjjjqxfv35ZRGStWrXKzj///OyTTz5JXRrlaPz48dnQoUOzBg0aZAUFBdl+++2XPf744znZcCkpKcnuvvvurGfPnllElF569uyZ3X333eW6o1xSUpK98sor2ZAhQ7J69eplNWrUyA455JDsqaeeMmsyj8yZMyf7wx/+kHXr1i2LiKxz587Z5Zdfns2cObPcn6si+zfLsmzmzJnZ7373u6xTp05ZRGTdunXL/vCHP2Rz5swp1+chneLi4uypp57KDj744KxGjRpZvXr1smOPPTYbPXp0ufdTRffvihUrssceeyzbb7/9soKCgqxBgwbZ0KFDffMiz3zyySfZeeedl7Vs2TKLiKx///7ZHXfckRezKidOnJidddZZWdOmTbOIyHbbbbe8noxQHS1evDi76667sp133jmLiKxFixbZOeeckxcfYn/11VfZLbfcku20005lJiNMmjQpdWl8jYAyRwSUuSWgrPzef//97Oyzzy7dkBk4cGB24403Zm+88UaV+ZRq+vTp2aOPPpqdcsopWcOGDbOIyPbee+/s4YcfzpYvX566PHJowYIF2Z///OfSDZktttgiO++887KRI0dmX3755SYvv6SkpPS4j4WFhWV2kFddP+200zZpJ3nJkiXZyy+/nF1++eWlsyW32mqr7NJLL/VV2DxXUlKSvfTSS9lRRx2V1alTJ6tVq1b2f//3f9ndd99dLrPEKqJ/V81su/vuu0tnS9apUyc7+uijs5deesmMyTw3bdq0bPjw4dmWW26ZRUTWo0eP7PLLL89efvnlbMmSJZu07Iro3yz772z1kSNHZuedd17pbMnevXtnf/7zn7MFCxZs0rKp3JYvX5499NBD2d57751FRNawYcPslFNOyR599NEqcxiOFStWZG+88UZ24403ls6WbNq0aXb22WfnxcQDvtnbb7+d/fSnP80aNWqURUS2xx57ZDfddFP21ltvVZlzDkydOjV76KGHspNOOinbbLPNssLCwux73/te9re//a3K7ItWRwVZ5tSluVCvXr244oornAU1R3beeefo0qVL3HHHHalL4VssXbo0Hn300bjlllvi3//+d6xcuTLq168fffr0if79+0f//v2jX79+0axZs6R1rlixIt56660YPXp06eWzzz6LiIh27drFUUcdFSeeeGJ06NAhaZ1UvPHjx8ef//zneOCBB2Lu3LlRUFAQ2267bfTr16+0h7t27RqFhYXrvcx77rknfvzjH3/r4+6+++44+uijv/VxWZbF5MmTS3v31VdfjfHjx8eKFSuiXr16sc8++8TJJ58ce+211wbVSdU3d+7cuOeee+L222+PCRMmRERE8+bNy/Rv7969o379+uu9zPLu34iIRYsWxdixY8v08KxZsyIiomfPnnHcccfF0UcfHU2aNFnvOqn6SkpK4umnn46bb745nnrqqViyZEnUqlUrevXqVdq//fv3j3bt2q33MnPRvyUlJfH++++X2YaYOHFiZFkWTZo0icMOOyxOOumk2GGHHda7TvLDJ598ErfeemuMGDEiJk+eHBERHTp0KLMO3n777aNWrVpJ65w9e3aZ9e9rr70WixYtipo1a8Yuu+wSJ510UhxyyCFRp06dpHVSsZYsWRIPPvhg/PnPf47Ro0dHcXFxNGjQYI39uNTvzcuXL48333yzzDp40qRJERGx1VZbxY9//OM4/vjjo3379knr5NsJKHNEQJlbAsqqafHixfH666+XefOYOXNmRER07tw5evXqFW3atIlWrVpF69ato1WrVqU/N2nSZJOClcWLF8eMGTNixowZMX369DL/fvDBBzFu3Lhy2fEhf2VZFh988EGZ/n3nnXciy7Jo1KhR9OnTJzp06LBG7676uXbt2qXL2X777ePdd9+NkpKSdT5fYWFhdO/ePd58880oKSmJWbNmrdG706dPjylTpsRrr70W06ZNi4j/7vis3r89e/ZMvuND5TB37tx49dVX49VXX43Ro0fHmDFjYsGCBVGjRo3o2bNndO/evbRnv/7v5ptvHgUFBRvVvxERX3311VrXv9OnT4933nknJkyYULrj07dv39Kdnsqw40PlsGLFipgwYUKZdfCnn34aERFt2rSJ3r17R9u2bdfaw82bN48aNWpsVP8WFBTE8uXL19iGWPXzp59+Gq+99lp8+eWXUVBQEN27dy+zDu7SpUsUFBRU1DBRia3+QeLo0aPLfJC40047RZcuXda6/m3VqlUUFRVt9POWlJTE3Llz11j/zpgxI6ZOnRrjx4+Pjz76KCIiWrZsWaZ/d9xxx016bvLH1z9IHD16dMyePTsiIrbZZpvYYYcdYosttlhrDzdp0mST1oOLFi1a6/p3xowZ8f7778frr78ey5Ytizp16sSOO+5YJjxt06ZNeQ0BFUBAmSMCytwSUOaHLMvis88+K/209u233y59w5k/f36Zx9asWbN0I61BgwZRu3btqFWrVum/TZo0iVmzZsWKFSti+fLlsWLFili6dGl88cUXMWPGjPjqq6/KLK9WrVqly9tqq61Kd4R79eoVdevWrchhoApbsGBBvPbaazF69OgYO3ZsTJ48OWbMmBEzZ85cY+e3SZMm0bp16ygqKoqxY8eu93M0a9Ys5s6du8bymjVrVrrxt8MOO5RuiLVq1apcXhv5r7i4ON57773SHY0PP/wwpk+fHtOnT48lS5aUeWy9evWiVatW0bBhw9LQcX20bds25syZs9bltW7dOlq3bh1bb7116c7EtttuGzVq1CiPl0c1MGPGjNLA/Y033ijdYV2107xKYWFhNG/ePJo0aRITJ05c7+VvvfXWMWfOnJg7d+4ay2vZsmW0atUq2rVrF717947+/ftHnz59okGDBuXy2sh/S5cu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br/99igsNLcDAHJFQAkAlVCtWrXi0EMPXeP2zz77LCIiOnXqtNb7oTLQv1R1N9xwQ1x00UXRvn372HPPPePee+8tc3/Lli1jr732SlQdAOQfASUAAMBqxo4dGxERkyZNimOOOWaN+wcOHCigBIByJKAEgCpkq622iizLUpcBG0X/UlXceeedceedd6YuAwCqDQdSAQAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQEmV1KVLl6hfv37qMgA22dKlS6NXr16x2WabpS4FAAAgiZqpC4CN8dVXX8XUqVNTlwGwyebMmRPjx4+PBg0apC4FAAAgCTMoqZK6desW48aNi+XLl6cuBWCTvPLKK1GzZs3o1KlT6lIAAACSEFBSJR1++OExb968GDlyZOpSADbJvffeG4MHD44mTZqkLgUAACAJASVVUo8ePaJ79+5x3333pS4FYKN99tln8corr8QRRxyRuhQAAIBkBJRUWUceeWQ8+uijMXHixNSlAGyUyy+/PIqKiuLAAw9MXQoAAEAyAkqqrJ/+9KfRoUOHOOyww2Lx4sWpywHYIA8++GDcdNNN8fvf/94ZvAEAgGpNQEmVVb9+/XjggQfi448/jp/+9KepywFYbx999FEcf/zxcfjhh8fJJ5+cuhwAAICkBJRUad27d48bbrghbrvttrj00ksjy7LUJQF8o88//zwOPPDAaNmyZdxyyy1RUFCQuiQAAICkaqYuADbVkCFD4vPPP49f/epXMXHixPjzn/8c9erVS10WwBpefvnlOPjgg6N+/frxj3/8IzbffPPUJQEAACRnBiVVXkFBQQwbNiz++te/xsMPPxwDBw6MadOmpS4LoIzbb789dt999+jWrVu89tpr0a1bt9QlAQAAVAoCSvLG4YcfHv/+979j2rRp0atXr7jrrruipKQkdVlANTdlypQ46qij4vjjj48hQ4bE008/Hc2bN09dFgAAQKUhoCSv7LjjjjF27NjYddddY8iQIdG3b994+eWXU5cFVEOLFy+O3/zmN7HNNtvEv/71r7j99tvj5ptvjtq1a6cuDQAAoFIRUJJ3WrduHQ888EC8+OKLUVJSErvsskscccQR8dlnn6UuDagGSkpK4r777ouuXbvG8OHD49RTT40PP/wwjj32WCfEAQAAWAsBJXnru9/9bowdOzZuv/32eP7556Nz585x6KGHxnPPPeds30C5mzt3bvz+97+PLl26xJFHHhk77rhjvPfee3HFFVdEw4YNU5cHAABQaQkoyWuFhYVx7LHHxocffhjXXnttvPfeezFo0KDo3r173HjjjbFgwYLUJQJV3BtvvBEnnHBCtG3bNs4777zo169fjB49Oh599NHo3Llz6vIAAAAqPQEl1cJmm20Wp556arz77rvxzDPPRNeuXeP000+PNm3axNChQ+Ppp5+OFStWpC4TqCKmTp0aN9xwQwwYMCB69eoVI0eOjAsuuCAmT54cI0aMiH79+qUuEQAAoMqomboAqEgFBQUxaNCgGDRoUEyePDluvvnmGDFiRNx8883RuHHj+P73vx8HH3xwDB48OIqKilKXC1QiH3zwQTz66KPx6KOPxpgxY6JmzZqxxx57xMMPPxwHHHBA1KzpLRUAAGBj2Jui2mrXrl0MHz48LrnkknjzzTfjkUceiUcffTTuueeeqFevXuyzzz5x0EEHxaBBg6Jt27apywUq2PLly2PcuHHxz3/+Mx599NF49913S9cNd999d3z/+9+Pxo0bpy4TAACgyhNQUu0VFBTEDjvsEDvssENccsklZWZJHXPMMRER0aFDhxg4cGDpZauttnI2XsgzS5cujTFjxsQLL7wQL774YrzyyiuxZMmSaNSoUey///5xySWXmF0NAACQAwJK+JouXbrEOeecE+ecc07MmjUrXnzxxXjxxRfjhRdeiLvuuiuyLIt27drFrrvuGgMHDow+ffpE165do06dOqlLBzbAF198EW+++Wa89NJL8eKLL8aYMWNi2bJl0bBhw/jud78bv/nNb2LgwIGxww47+Po2AABADtnjgm/QvHnz+MEPfhA/+MEPIiJi3rx5pWHGCy+8EPfdd1+UlJREzZo1o2vXrtGzZ8/S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nKpZs2bUqFEjdRkAAFRhZlDmSHFxcSxYsCB1GQAAOTVnzpyoWdNn3gAAbDwBZY7suOOO8fzzz6cuAwAgZxYtWhSvvfZa7LjjjqlLAQCgChNQ5shBBx0Uzz//fLz77rupSwEAyIk777wzli5dGgcddFDqUgAAqMIElDkyZMiQ6NKlSxx++OGxZMmS1OUAAJSrd955J37+85/HySefHJ07d05dDgAAVZiAMkeKiori/vvvj48//jhOOeWUKC4uTl0SAEC5mDt3bhx++OHRuXPnuOaaa1KXAwBAFSegzKHu3bvHn/70p7jrrrti0KBBMXny5NQlAQBskueffz569uwZ06dPj/vvvz/q1auXuiQAAKo4AWWODRkyJJ577rn45JNPYvvtt4+HH344dUkAABtsxYoVccEFF8SgQYNi6623jrfeeiu23Xbb1GUBAJAHBJQVYODAgfHWW2/FoEGD4tBDD40TTzwx5s+fn7osAID18p///Cd22WWXuOKKK+LSSy+NUaNGRbt27VKXBQBAnhBQVpAmTZrEgw8+GLfeemvce++90bZt2/jZz34Wn376aerSAADWkGVZvPTSS3HIIYdEt27dYs6cOfHyyy/HeeedFzVq1EhdHgAAeURAWYEKCgri+OOPj48++ijOOOOMuPvuu6Nz585x6KGHxiuvvBJZlqUuEQCo5lasWBH33Xdf9OnTJ3bdddd4//334+abb4633347+vTpk7o8AADykIAygdatW8fw4cNj8uTJccMNN8Tbb78dO++8c/Tv3z/++te/xuLFi1OXCABUMzNmzIgrr7wyOnbsGEceeWQ0atQo/vGPf8Q777wTJ554opPhAACQMwLKhIqKimLo0KExceLEeOKJJ6KoqCiOOOKIaNq0aRxwwAFx2223xcyZM1OXCQDkoSzL4r333ovLLrss+vXrF61bt45f/epXsddee8Vbb70VTz/9dOy7775RWGhzEQCA3CrIfK+4Uvnwww/j8ccfj8cffzxefvnliIjo379/HHDAAXHggQdG165dE1cIAFRVxcXF8corr5Rua3z00UdRv379GDx4cBxwwAHxve99L5o1a5a6TKgwf/vb3+LAAw+MmTNnRosWLVKXAwDVloCyEps1a1b8/e9/j8cffzz+9a9/xZIlS6JLly6x//77x3e/+93o37+/DSkAYJ2yLIuPP/44XnnllXj22Wfj73//e8yZMydatmxZ+uHnHnvsEXXr1k1dKiQhoASAykFAWUUsWbIkRo0aFY8//nj885//jGnTpkVEROfOnWPAgAExYMCA6N+/f2y33XbOrAkA1dTixYtj3LhxMXr06HjllVfilVdeidmzZ0dERPfu3WP//fePAw44IPr06eOr2xACSgCoLASUVVCWZTFp0qQyOx9vvvlmFBcXR4MGDaJfv37Rv3//GDBgQPTt2zcaNWqUumQAIAcmT54cr7zySuk2wRtvvBErV66MzTbbLPr27Vv6IWbfvn2jcePGqcuFSkdACQCVg4AyTyxatCjGjRtXGliOHj065syZExERHTp0iO7du0f37t1ju+22i+7du0fXrl2jTp06iasGANbHl19+Ge+++2688847pf++8847MWvWrIiI6NSpU+mHkwMGDIju3bv7RgWsBwElAFQOAso8lWVZfPjhh/Hqq6/G22+/XbojM2XKlIiIqFGjRmy99dZlQsvu3btH586do2bNmomrB4DqadGiRTFx4sTS9+1VYeTa3r+7d+8e22+/ffTv3z9atmyZuHKomgSUAFA5SKLyVEFBQXTp0iW6dOlS5vYvv/wy3nvvvdIdn3feeSduvPHG0hkYtWvXjq5du0bXrl2jY8eOZS7t2rUTXgLAJlq8eHF89tln8cknn5RePv7445g4cWJ88sknseqz41XfgDj66KNLA8ltttnGNyAAAMg70qZqplGjRqVf/1rdF198UeYrYx988EG8+uqrMWXKlCgpKYmI/87aaN++/RrBZYcOHaJjx47RpEmTKCgoSPGyAKDSKCkpiWnTppWGj59++mmZMHLGjBmlj61Tp0506NAhOnToEAceeGBpENmtW7fYbLPNEr4KAACoOL7izTdavnx5TJo0aZ07WV9++WXpYzfffPPSwLJt27bRqlWraN26dbRu3br05+bNmztrKABV1vLly2PGjBkxY8aMmD59ekyfPr3058mTJ5e+Vy5fvrz0d7bYYovSD/O+/uFe69atvS9CQr7iDQCVgxmUfKPatWtH586do3Pnzmu9f968eWVCy1U/P/fcczF9+vTSE/WsUqNGjWjRosUaweXafq5bt25FvEQAqrksy2LBggVrBI5r+3lt72stW7aMVq1aRdu2bWO//fYrE0ButdVWUa9evUSvDAAAqgYBJZukcePG0bhx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ASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACCZgizLstRFAAAAAADVkxmUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQzP8Do2oM2575hF8AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import SpiderAnsatz\n", - "from lambeq.backend.tensor import Dim\n", - "\n", - "spider_ansatz = SpiderAnsatz({N: Dim(4), S: Dim(2)})\n", - "spider_diagram = spider_ansatz(diagram)\n", - "spider_diagram.draw(figsize=(13,6), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that the preposition \"in\" is now represented by a :term:`matrix product state ` of 4 linked matrices, which is a very substantial reduction in the space required to store the tensors.\n", - "\n", - "Another option is the :py:class:`.MPSAnsatz` class, which converts large tensors to sequences of order-3 tensors connected with :term:`cups `. In this setting, the user needs to also define the *bond dimension*, that is, the dimensionality of the wire that connects the tensors together." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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25IlS+Lkk0+OevXqxddff10mr8k3AeWll14ae+yxR7Rv3z51OcXsI5VPudovAspyZt68efG73/0uevbsGS+88EJUrVo1IiJ69uwZ++23X9x0001x/vnnJ64yNz3zzDMxevToOOOMM+K6666LiIjjjz8+GjVqFNdff32ceOKJ8ZOf/CRxlRVTlSpVolatWqX6GldddVVMmTIlnnjiiRg8eHBERBx33HGx6667xllnnRX/8z//E/Xq1SvVGii/ymIM7rfffrFgwYJo1KhRTJgwIXr27FmqrwcbqizG/4MPPhh9+/Zd47Zf/vKXseOOO8all14ap5xySjRu3LhUa4D1KYs5cNNNN611269//evYZ5994t57740rrrgiWrZsWao1UD6Vxfj7tt/97ndRUFAQJ554Ylx//fVl9rqUT/aRfpyvvvoq6tevX+LPm6v9Uim/4r0uBQUFcfXVV0fXrl2jVq1a0bRp09h///3jvffeW+/fPPXUU9GzZ8+oVatWbL755nH22WdHQUHBGo9Z/QnIrFmz4tBDD43GjRtHnTp1Ys8994xPPvlko+scNWpULF26NH71q18Vh5MREYMHD478/Px44IEHNvo5S8u0adMiLy8vLr744jVu33PPPSMvLy9uuOGGNW7fZZddokuXLhERMXHixDjllFNim222ifr160edOnWiR48ecdddd/2omq644orIy8uLX/3qV1FUVBQREU8//XT06dMnmjVrFrVr144tttgiDjjggI3unwcffDAiIk4//fQ1bl/9e3nqm4rmu+fs+Pbv9957b2yzzTZRs2bNaNeuXfzxj3/cpNd48MEHo2PHjsUr+IiIqlWrxq9+9atYsGBBPPPMMyXRFCqoshiDTZo0iUaNGpVc0VBCymL8fzecjIioU6dO7LvvvrFq1ar4+OOPf0wT4EcpizmwPu3atYssy2Lx4sUl+rxUHGU5/iZMmBC33HJL3HjjjaUSqrBul1xySfERbz/72c+Kv15/9NFHFz+mqKgorr322ujYsWPUrFkzOnXqFMOHD1/n840dOzYGDhwYjRo1ilq1akW3bt3ijjvu2KTaKuM+0urzeo4dOzYuueSSaNeuXdSsWTO6desWDz/88BqPff755+Pggw+O/Pz8qF27dvTp0yciIt566621nnd19jN58uQ48MADo0mTJtGgQYPvrWX48OFRvXr1OPDAA2P58uUb3IbK2C8bImeOoDz88MPjkUceiQEDBsTJJ58cc+bMidtuuy123XXXeOWVV2LHHXdc4/GvvfZaPP744zFs2LA49thjY/To0XHttddG48aN1zqCccmSJbH77rtHr1694sorr4wpU6bETTfdFEOGDIn3339/jaDxh7z55psREbHrrruudV+vXr3ioYceiq+//rpcpOXt2rWL/Pz8GDduXFx66aUREbFy5cp49dVXo0qVKjFu3Lj4zW9+ExERX375Zbz11ltx0kknRcQ3b7wvv/xy7LvvvtGhQ4dYsmRJjBw5Mk444YSYO3dunHfeeRtVS2FhYfzyl7+MO+64I/7whz/EueeeGxERL730Uuy3336x7bbbxnnnnReNGjWKWbNmxdixY2PSpEnRqVOnDX6NN998M1q3bh1t27Zd4/a2bdtGq1ativuOknPHHXfEF198Eccdd1w0atQoHnjggfjtb38bbdq0icMOO2yDn2f27Nkxc+bMOPzww9e6r1evXhHxTf8edNBBJVY7lUNJjUGoiMpi/M+YMSMiIlq0aFEizwclqTTmwOLFi2PVqlWxcOHCeO655+Kee+6JTp06xZZbblnC1VPRlfT4KygoiBNOOCEGDhwYBx54YLz//vulUDXrcsABB8Ts2bPjz3/+c5x//vnFB+107Nix+AO6888/P5YtWxYnnXRS1KxZM/70pz/F0UcfHVtuuWX89Kc/LX6uP//5zzFs2LDo1atXXHDBBVG3bt0YM2ZMnHzyyfHZZ5/FNddcs8F1VfZ9pN/+9rexZMmSOOWUUyIi4t57741DDz00li9fXhwO33fffbFgwYI48sgjo02bNjFhwoS488474+STT46tt946dttttzWe8+uvv44+ffrET3/607jiiiviP//5z3pf/8orr4wLLrggTj311Lj55pujSpUNOz6wsvfL98mJgHLMmDHxyCOPxEEHHRQPP/xw5OXlRUTEQQcdFD169IjTTjstXnnllTX+5rPPPouPPvqo+PwQw4YNi+222y5uueWWtQLKefPmxdlnnx3nnHNO8W3NmzePc845J8aOHRt77rnnBte6+irirVu3Xuu+1q1bR5ZlMWvWrI0K1kpT3759Y/jw4bF06dKoU6dO/P3vf4+lS5fGL37xixg9enQUFBREtWrV4qWXXorCwsLiIyiOOOKIGDZs2BrP9Zvf/Cb69u0bV111VZx11lkbfB6WZcuWxWGHHRZPP/10DB8+PI488sji+0aPHh1FRUUxZsyY2GyzzYpvv/DCCze6rbNmzYquXbuu877WrVsX72RRcqZPnx4fffRRNGzYMCIijj322GjXrl3ccsstG7Vh9kPzKiJi5syZJVAxlU1JjUGoiEp7/P/73/+Ov/71r7HbbrtFhw4dfvTzQUkrjTnQr1+/4iNz8vLyon///nHHHXds1AEN5IaSHn/XXXddfPzxx/HXv/61pEvlB3Tr1i123XXX+POf/xwDBgyIPfbYo/i+1QHlihUr4s0334waNWpERMSBBx4Y+fn5ceuttxYHlLNnz47TTjstDjnkkOJv90VEnHLKKfHrX/86rr/++jj55JMjPz9/g+qq7PtI8+bNi3fffbd4Dg0bNiy6desWZ5xxRhx88MFRu3bt+N///d81rvHRvXv3uPPOO6NevXrxhz/8Ya2Acv78+XHBBRfE5Zdfvt7XLSoqil/96ldx++23xxVXXLHRp+ir7P3yfXLiK96PP/54RERccMEFxeFkRMT2228fgwcPjldffXWtK2R/9+S1eXl58bOf/SzmzJmz1smEq1SpEqeddtoat60O4j799NONqnXp0qUREVGzZs217lt9bpLVjykP+vbtG6tWrSoOeMeNGxebbbZZ/PrXv46vvvqq+KjC8ePHFy/DiFhjJbB8+fKYP39+LFiwIAYOHBhffvllTJw4cYNef8GCBTFgwIAYO3ZsPPnkk2uEkxFRvDJ67LHH1vp6/sZaunTpOvsl4pu+KU/9Ulkcc8wxxX0Y8c3XAXv16lXp5xXlR0mNQaiISnP8z507Nw444ICoXbv2jz69C5SW0pgDt99+e4wZMybuv//+OOigg4qPpoTvKsnx99lnn8Wll14aF154oQ+EyqlTTjmlOJyM+CaI6tSp0xr9/eijj8aKFSviuOOOi3nz5q3xM3jw4CgqKoqxY8du8GtW9n2kk08+eY051LBhwxg2bFgsXLgwXnzxxYhYM5f4+uuvY9GiRRERse2228Y//vGPdT7vWWedtd7XXL58eRx44IHx5z//Oe67775Nun5IZe+X75MTAeWUKVOiSpUqxYdSf9s222xT/JhvW1da3bRp04j4JjX/tlatWq11YuP1PfaH1KlTJyK++QTlu1afs2D1Y8qD1UHs6qvRjhs3Ln72s59F9+7do3Hjxmvcvv3220eTJk0i4pvJf9ZZZ8UWW2wRtWvXjmbNmkXz5s2Lr+K5oRtqRx99dLz++uvx7LPPrvNI1dUn4D/llFOiSZMmsffee8fNN9+8ViC9IerUqbPOfon4pm/KU79UFuv69K9p06aVfl5RfpTUGISKqLTG/+oPF2fNmhWjRo0qN98Kge8qjTmw8847R//+/eOII46Ihx9+OHr16hW77757fPbZZz+mVCqhkhx/w4YNiw4dOnxvsEJaG9LfH330UURE9O/fP5o3b77Gz4ABAyIi4osvvtjg16zs+0jryn9WfyNy8uTJEfFNeH/IIYdE48aNo379+tGvX7+I+OaUf+vKJJo3b/6955Q/55xz4vHHH4/hw4fHUUcdtUl1V/Z++T45EVBuiu/7mkWWZZv82B/SqlWriFj3IbszZ86MvLy84seUBy1atIiuXbvGuHHjYunSpfGPf/wj+vbtG1WqVIk+ffrECy+8EPPnz4933313jRPkH3bYYXH99dfH3nvvHSNGjIi//e1vMWbMmOJzVq6+wM0POfjgg6NKlSrx+9//PpYtW7bW/U2bNo0333wzxo8fH7/61a/iq6++it/85jfRqVOneOONNzaqra1atVrvodQzZ85cZ6jNj1NSX3f6oXkVse4PJcBX7shlpTH+FyxYEP3794+JEyfGqFGj1nnxHCgvyuI94KijjoqlS5cWXyAFViup8ff444/H2LFj46yzzopp06bFpEmTYtKkSbFgwYKI+OZcwJMmTdrg/S9Kx/r6+9t5wur/33///TFmzJh1/qzrvIXrk+v7SF9//XXsvvvu8be//S1+/etfx6OPPhq33nprRET07NlznVnODwWDQ4cOjTp16sQ111yzyR9m5XK/5MQ5KPPz86OoqCg++uij6Nat2xr3ffjhhxER5eZQ9549e8af//zneOONN9Y6Wfbf//736Ny5c7m4QM639e3bN26//fZ48sknY+XKlcWfOvTr1y/OOuusePbZZyPLsuKdkEWLFsVTTz0VRxxxxFpXG9uYQ9Ijvrn4Ub9+/eKII46IfffdN5588sm1VhpVq1aNPfbYo/hcH++++2706NEjLr/88nj66ac3+LV69uwZI0aMiM8//3yNC+V8/vnnMWvWrNhvv/02qnbKzuabbx6tW7eOv//972vdt/q2nXbaqazLAsgpq8PJDz/8MB5//PGNOkc3VFarP2BfHRZBSZs2bVpEfHMOy3XZf//9I+KbU280a9aszOrKNd8+1dym2mqrrSIiolmzZtG/f/8f/XyVfR/po48+iiFDhqxx2+r8Jz8/P1544YWYNWtW3HPPPcVXWX/77bcjItZ58NOG6Nu3bxx77LGx7777xs9+9rMYO3bsGtfC2BCVvV++T04cQTl06NCIiPjDH/6wRgr+/vvvxxNPPBG9e/eO5s2bJ6puTUOGDInatWvHrbfeGoWFhcW3P/nkkzF58uSN+kSkrPTt2zeKiori0ksvjS222CI6duxYfPuKFSviD3/4Q1SrVi123333iPjvp0Pf/URi9uzZm3QeqkMOOSQeeuiheOWVV2KvvfZa4xyh8+bNW+vxW2+9ddSuXXujNwQPPfTQiIi48cYb17h99e/lsW/4r0MPPTQ+++yzePLJJ4tvKywsjFtuuSUaNWoUe++9d8LqACq3hQsXxoABA+KDDz6Ixx57LPbaa6/UJUGZKSgoWO+RNLfccktE/PfKrFDS9t133xg5cuRaP//zP/8TERFXX311jBw5Mho0aJC40spt9UFGP+bDiIMOOihq1qwZF1988ToDtMWLF6/3lGTrU5n3kf70pz/F4sWLi39fvHhx3HHHHdGoUaPo06fPenOJiPhRV7nfY4894m9/+1tMnTq1+DomG6sy98v3yYkjKAcMGFB8Be+FCxfGvvvuG3PmzInbbrstatWqFTfffHPqEos1b948fv/738dZZ50V/fv3j0MPPTRmzpwZ1113XWy99dZx+umnpy5xLXvssUdUqVIlPvroozj66KOLb+/atWu0bNkyPvzww+jVq1fUr18/IiLq168fAwcOjAceeCBq164dPXv2jGnTpsWdd94ZHTp02KRDoQ888MCoXr16HHTQQbHnnnvGs88+Gw0aNIgTTjghZsyYEQMHDox27drFsmXL4i9/+Ut89dVXa11Q54fss88+se+++8b1118fixcvjl133TXeeOONuPvuu+MXv/hF9O7de6Prpuyce+65MXLkyDjssMPijDPOiNatW8dDDz0Ub775Ztx1113F4xNKy+LFi4t3RFdfne/ll18uvgrgfvvtt9ZR/lBZDBgwIN5+++049NBDY+HChfHAAw+scf9PfvKTDb7qKFQ0X3/9dbRp0yb233//2HbbbaNFixYxZ86cGDVqVEyYMCH69eu3yVcFhx+y5ZZbrvXNvIj/BjB9+/attEdjlSc9e/aMKlWqxBVXXBELFy6MunXrbvS3ONu0aRN/+tOf4vjjj48uXbrEEUccEe3atYu5c+fGe++9F6NGjYoPP/xwjYv9/pDKvI/UrFmz2GWXXYqPjrz33ntj+vTpcdddd0WdOnWid+/e0bJlyzjzzDNj6tSp0aZNmxgzZkxEfDNvJk2atMmv3bt373j++edj0KBBsccee8S4ceM26lR9lblfvk+lDChXJ+DfPo/DiBEjonv37nHffffFmWeeGXXr1o0+ffrE73//+9huu+1SlbpOZ555ZjRt2jRuuOGGOO2006JBgwZx0EEHxVVXXVXuvt4dEdG4cePYYYcd4u23317rXFJ9+/aNBx98cK3bH3jggTj33HPjySefjOHDh8dWW20VV1xxRVSvXr14BbKxhgwZEn/961/j5z//eQwcODCee+65OOKII+K+++6L4cOHx9y5c6NBgwbRtWvXePTRR+PnP//5Rr/GyJEj4/LLL48HHngg/u///i9at24dl112WZx77rmbVDNlp2nTpvHaa6/FueeeG7fddlt8/fXX0bVr13j44Yfj4IMPTl0eOWDhwoVx4YUXrnHb+PHjY/z48RHxzUangJLK6q233oqIiIceeigeeuihte6/9957BZRUWnXq1IlTTz01Xn755Xj++edj0aJFUb9+/dhmm23i1ltvjRNPPNE5j6GS22KLLeKee+6Jq6++Ok4++eRYtWpVHHXUUcWnIdtQxxxzTHTq1CmuvfbauPPOO2PRokXRrFmz6Ny5c/z+97+Pli1bbtTzVeZ9pKuvvjpeeeWVuO222+KLL76ITp06xYgRI4o/EGrUqFE899xzcc4558Qtt9wSBQUF0blz54j45luXPyagjPjmyPixY8fGwIEDo0+fPjFu3Lg1ThX3fSpzv3yvrBIaNWpUFhHZPffcs9F/+9Zbb2URkb311lulUFnZv87GKq91VTbleTmX59oqk/K6nMtrXVQu5XmclefaqDzK8zgrz7VReZTXcVZe66psyvNyLs+1VSaluZzvvffeLCKy8ePHl6u6UrxORVMpz0G5+sSh5e3ISAAAAABgTZXqK94PPfRQTJgwIW6++ebYcccdy825NAoLC2Pu3Llr3Lb64i3z5s0rPmlqkyZNokaNGmVeXy5btmzZGifOXZ+NPVSesrF48eIfvMJajRo1okmTJmVUEbnGGCSXGf/kOnOAlIw/1sfYKJ++3S/ryoMi9EulCihPOeWUyMvLiwMOOCCuv/761OUU+/zzz9d7Atw999yz+P/jx4/f6HNQ8OP85S9/2aBzXmbruLIX6f3617+O4cOHf+9j+vTpEy+++GLZFETOMQbJZcY/uc4cICXjj/UxNsqndfXLt/OgCP1SqQLKhQsXpi5hnVq2bFl8NajVPv300zjllFPi9ttvj6222ioiIrbffvsU5eW0Pffcc62+oeI455xz4he/+MX3PqZx48ZlVA25yBgklxn/5DpzgJSMP9Yn18fG0UcfHUcffXTqMtby7X5ZVx4UUbn7ZUNUqoCyvKpVq1b0799/jdtWH7a7yy67RPfu3VOURURsvvnmsfnmm6cug03UtWvX6Nq1a+oyyGHGILnM+CfXmQOkZPyxPsZG+fTtfpEHrVulvEgOAAAAAFAxCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAAkEy11AWUVx999FGFfv4fq7zXV9FVhOVbEWqsyMr78i3v9VGxVYTxVRFqpOKqCOOrItRIxVXex1d5r6+iqwjLtyLUWJGV9+Wb63lQKgLK72jWrFnUqVMnfvGLX5T6a9WpUyeaNWtW6q+zMcqy/bmuPPZ/hDFQlsrjGND/lJXyOP4jzAHKjjlAriuPc8D4Lzvlsf8jjIGyVB7HQK7nQanlZVmWpS6ivJk+fXrMmzdvgx9//PHHx+abbx6///3vN+p1mjVrFltsscXGllfqNrb9t9xyS4wdOzZGjx5dilWVXy+//HL85je/ieeffz6aNm26wX9XXvs/YuPGwOLFi6Nv375xzTXXRN++fUu5svLp5z//efTu3Tt+85vfbNTfldcxsLHrgEsvvTSmTJkS9913X+kVVY6NHj06LrvssnjzzTejSpXcO3PK1KlT4+c//3ncddddseOOO27w35XX8R+x8XOgb9++ceSRR8bRRx9dekWVY6effnpERNx4441J60jlvvvui/vvvz/GjRu3UX9XWebAv/71rzj++OPjsccei/bt25duYeVQUVFR9OzZMy666KIYMmRI6nKSOProo6NDhw5x8cUXb9Tfldc5sLHvATfccEO8+uqr8dhjj5ViVeXXuHHj4uyzz45x48ZFw4YNN/jvymv/R2zcGJg/f34MHDgwbrjhhth9991LubLyaciQIdG/f//41a9+tVF/V17HwMauAy688MKYPXt23HXXXRv1OuW1/Sk5gnIdtthii40aKPXq1YumTZtG9+7dS7GqsrOx7W/ZsmXUrFmz0rR/Y82cOTMiIrp16xYtWrRIXE3J2JgxsGDBgoiIyM/Pz9kxUKtWrWjRokWlaf/GrgOaNWsW//nPfypN+zfWO++8ExER3bt3z8mAsm7duhER0blz50ozBjZ2DlSrVi1at25dadq/sRo1ahQRkbPtHzNmTFSrVq1StX9j5sDSpUsjImKbbbaJzp07l2ZZ5VJRUVFERLRr165SjYGNUbdu3WjWrFmlaf/Gvge0aNEiatWqVWnav7GmTp0aERHbb799NGnSJG0xJWRjxsAXX3wREREdO3bM2TFQs2bNaNmyZaVp/8auA5o2bRpfffVVpWl/Srm3JwUAAAAAlBsCSgAAAAAgGQElAAAAAJCMgBIAAAAASEZACQAAAAAkI6AEAAAAAJIRUAIAAAAAyQgoAQAAAIBkBJQAAAAAQDICSgAAAAAgGQElAAAAAJCMgBIAAAAASEZACQAAAAAkI6AsI0uXLo38/PzIy8uLX/7yl6nLSSKXlsEnn3wSF110UfTq1SuaN28e9evXjx122CGuuOKKWLJkSeryykSuL4OPP/44Dj/88OjSpUs0bNgw6tSpE1tvvXWcccYZMXv27NTllbpcb/+65NI6UP9bButiDuRO/+d6+yNsB+X6GMj19q9LLr0HrIv253b7IyyDDVEtdQG54qKLLoq5c+emLiOpXFoG99xzT9x2222x3377xeGHHx7Vq1eP8ePHx+9+97t45JFH4u9//3vUrl07dZmlKteXwYwZM2L27Nmx//77R5s2baJatWrx3nvvxZ///Od4+OGH45133onNNtssdZmlJtfbvy65tA7U/5bBupgDudP/ud7+CNtBuT4Gcr3965JL7wHrov253f4Iy2CDZPxou+22W3bEEUes9/633norq1q1anbddddlEZGdeuqpZVhd6Tv33HOzjh07fu9jKvMyeOKJJ7KIyObMmVN825tvvpktWrRorcdecMEFWURkt9xyS1mWWKrmz5+fRUT22GOPrXF7Li2DrbfeOjvzzDM36LGPPPJIFhHZ1VdfXcpVlZ1jjz0269Wr1wY9tjK2/+67784iIissLFzvYyrzOnDixIlZRGSvvPLKDz62MvZ/lmVZ06ZNs6uuumqDHlsZl8HgwYOzwYMHf+9jKvMcuOqqq7KmTZtu0GMrY/+/8sorWURkEydO/MHHVsb2FxYWZhGR3X333WvcnkvbQb169cqOPfbYDXpsZRwDZ555Zrb11ltv0GMrY/sfe+yxLCKy+fPnr/cxlfk9YM6cOVlEZE888cR6H1OZ259lWdaxY8fs3HPPXe/9lb39RxxxRLbbbrt972Mq+zIoKb7iXcoKCwvjhBNOiEGDBsUBBxyQupwkcnEZ7LTTTtGwYcO1bj/44IMjIuL9998v65LKnGWwbu3atYuIiIULFyauJI1cbH8urgPXJxf7/7tycRmYA/+Vi/3/bbnUfttB65ZLY2BdcrH9uf4eoP253f4Iy2Bj+Ip3Kbvhhhti4sSJ8dhjj6UuJRnL4L9mzJgREREtWrRIXEk6ubYMli9fHl9//XUsX748Pvzww/jtb38bERF777134srKRq63PyK314H63zKIMAdyuf9zvf3rYjsot8ZArrc/IrffAyK0P9fbH2EZbAxHUJaiKVOmxMUXXxwXXXRRtG/fPnU5SVgG/1VYWBi///3vo1q1anHYYYelLieJXFwGd911VzRv3jzatm0be+65ZyxatCgeeOCB2G233VKXViZyvf25vg7M9f6PsAzMgdzu/1xv/3fZDsq9MZDr7c/19wDtz+32R1gGG8sRlKVo2LBhkZ+fH2eccUbqUpKxDP7r9NNPjzfeeCOuvPLK6Ny5c+pyksjFZTB06NDYeuut4+uvv45//etf8cQTT8S8efNSl1Vmcr39ub4OzPX+j7AMzIHc7v9cb/932Q7KvTGQ6+3P9fcA7c/t9kdYBhtLQFlKHnjggRgzZky8/PLLUb169dTlJGEZ/NeFF14Yt956a5x44olx3nnnpS4niVxdBm3atIk2bdpExDcbqT//+c+jZ8+esXTp0pxYDrncfuvA3O7/1XJ5GZgDud3/Edr/bbaDcnMM5HL7c/09QPtzu/0RlsGm8BXvUrBixYo444wzYu+9946WLVvGpEmTYtKkSTFt2rSIiFi8eHFMmjQpFi1alLbQUmQZ/Ncll1wSl19+eRxzzDFxxx13pC4nCcvgv7p16xY77rhj3H777alLSSJX2m8duG650v/fJ1eWgTmwbrnS/+uTq+23HfRfuToGVsuV9uf6e4D253b7IyyDTSWgLAXLli2LuXPnxtNPPx1bbbVV8c8ee+wREd8k6VtttVXcddddaQstRZbBNy655JK49NJL46ijjoq77ror8vLyUpdU5iyDtS1btiwWLFiQuoxkcqH91oHrlwv9/0NyYRmYA+uXC/3/fXKt/baD1pZrY+C7cqH9uf4eoP253f4Iy2BT+Yp3Kahbt26MHDlyrdvnzp0bp5xySgwaNCiOO+646NatW4LqyoZlEHHZZZfFpZdeGkcccUTcc889UaVK7n0ekMvLYM6cOdGyZcu1bh8/fny8//77xW9OlVWutz/X14G53v8RloE5kNv9n+vtX812UO6OgVxvf66/B2h/brc/wjLYVALKUlC9evU48MAD17p96tSpERHRsWPHdd5fmeT6Mrjtttvi4osvji222CL69+8fDz744Br3t2jRIgYMGJCourKR68vg5JNPjtmzZ0ffvn2jXbt2sXz58njrrbfi4Ycfjvr168d1112XusRSlevtz/V1YK73f4RlYA7kdv/nevsjbAfl+hjI9fbn+nuA9ud2+yMsg00loIRS8Oabb0ZExPTp0+Ooo45a6/4+ffpU6o3SCMvg0EMPjfvvvz/+7//+L+bOnRt5eXnRrl27OOmkk+Lss8+OLbbYInWJpSrX25/r9L9lkOtyvf9zvf0RtoNyfQzkevsBNoWAsgy1b98+sixLXUZSubIM7rvvvrjvvvtSl5FUri+Dgw46KA466KDUZSST6+1fn1xZB+p/y2B9zIHckOvtj7AdlOtjINfbvz658h6wPtqf2+2PsAx+SO6cCAUAAAAAKHcElAAAAABAMgJKAAAAACAZASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAA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7LPPPlG1atV44oknUpdSZkaPHh316tWLvn37pi6FcmDo0KHx5ptv5lRIP3r06Nhrr72cg5WoVatW7LXXXjm1c746nLEdQEREv379ci6kf+KJJ6JatWqx9957py6lXBg6dGg8+eSTUVBQkLqUMrFq1ap4+umnrQP/v3333Tfy8vLiySefTF1KmRk9enQ0bNjQB9UlSEAJJWTo0KGxaNGiePnll1OXUiZee+21mD9/vjfl/69x48axxx57xKhRo1KXUmZGjRolnKFYroX0M2bMiDfffNM6kGJDhw6Nf/7znzkT0gtn+LbVIX2ubQftscce0bhx49SllAtDhw6N+fPnx+uvv566lDLx0ksvxeLFi20H/H/NmzeP3r1759w6YJ999okaNWqkLqXSEFBCCdlhhx1iiy22yJmV8qhRo6J169bRo0eP1KWUG0OHDo1x48bFokWLUpdS6laHM0OGDEldCuVEroX0whm+a++9986pkF44w3cNGTIkZ0L6RYsWxfjx44VT37LTTjtFq1atcmY7YNSoUdGuXbvYfvvtU5dSbgwdOjTGjh0bX331VepSSt3UqVPjnXfesQ4oYQJKKCF5eXkxdOjQGDVqVKU/QXiWZTFq1KgYMmRIVKliNbLakCFDoqCgIJ599tnUpZQ64Qzrkksh/epwplGjRqlLoZzIpZBeOMO65NKR9M8880wUFBTEfvvtl7qUcqNKlSoxZMiQnNoXGjp0aM5fwf3bhgwZEitWrIjnnnsudSmlbvTo0VGjRo0YNGhQ6lIqFckClKChQ4fGjBkzKv3XvF9//fWYOnWqo+e+o23bttGjR4944IEHUpdSqrIsixEjRkSfPn0cOcMaVof0I0eOTF1KqZo5c2aMHz/eOpC1rA7pK/sRZI888ohwhrWsDukfeOCBSh9QPfDAA9GjRw8XR/mOoUOHxpQpU+KNN95IXUqpeumll2LmzJm2A74jPz8/unXrljP7Qv369Yv69eunLqdSEVBCCerTp0907949zjnnnCgqKkpdTqnIsizOOeec6NatW/Tr1y91OeXOGWecEc8880y8+OKLqUspNaNHj47XX389zjzzzNSlUM60bds2/ud//icuueSSWLJkSepySs0FF1wQjRo1iiOOOCJ1KZQzv/jFL6JRo0bxu9/9LnUppWbJkiVxySWXxEEHHSScYS1nnHFGvP7665X6KMrx48fHs88+aztoHfr16xfbbbddnHPOOZU2pC4qKorf/va30b17dxdHWYczzjgjRo8eHa+99lrqUkrNo48+Gm+++WacccYZqUupdASUUIKqVKkS1113Xfzzn/+Mv/zlL6nLKRWPPvpovP7663HddddF1apVU5dT7hxyyCGx8847x5lnnlkpQ+qVK1fG2WefHQMHDvSVBtbpqquuinnz5sW1116bupRS8fbbb8fw4cPjsssui4YNG6Yuh3KmUaNGcemll8bw4cPjX//6V+pySsU111wT8+fPj6uuuip1KZRDe+21VwwYMCDOPvvsWLlyZepySlxRUVGceeaZscsuu8QhhxySupxyp2rVqnH99dfHa6+9Fo899ljqckrFww8/HP/85z/j+uuvd6qrdTjiiCOie/fuccYZZ1TKfaEVK1bEb3/729h3332jf//+qcupdMwoKGF77LFHDBkyJM4999xYtmxZ6nJK1OoV8j777GOFvB5VqlSJ66+/Pt5+++1K+fWGP/3pTzF58uS49tprnXOHdcrPz49f//rX8cc//jFmzZqVupwSlWVZnHnmmdGlS5c44YQTUpdDOXXiiSfG1ltvHWeeeWalO4Jo5syZcc0118Tpp58eHTp0SF0O5VBeXl5cd9118dlnn8Udd9yRupwS93//93/xr3/9K66//nrbQevRv3//2HvvveO3v/1trFixInU5JWrZsmVx3nnnxdChQx09uR6V/YCdW265JaZPnx7XXHNN6lIqJQEllILVO+Y33XRT6lJKlBXyhvnpT38a//M//xPnn39+pfqa64IFC+LSSy+N448/PrbbbrvU5VCOnX/++VGnTp1K9zXXJ554Il588cW47rrrolq1aqnLoZyqVq1aXHvttTF+/Ph48sknU5dTon73u99FnTp14vzzz09dCuXYdtttF8cdd1xccsklsWDBgtTllJglS5bE+eefHwcddFD85Cc/SV1OuXbNNdfEtGnT4tZbb01dSom68cYbY9asWfHHP/4xdSnl2h577BFDhw6tdAfszJ07N37/+9/HsGHDYuutt05dTqUkoIRS0KlTpzj11FPjyiuvjM8//zx1OSVi5syZcfnll8ewYcOiS5cuqcsp96666qqYO3duXHnllalLKTEXXnhhrFq1Ki677LLUpVDOrf6a63333Rf/+Mc/UpdTIr7++munN2CDrf6a61lnnRVff/116nJKxN///nenN2CDXXbZZbFq1aq48MILU5dSYq688sqYN2+e0xtsgK5du8ZJJ50Uv//97yvNtyk+//zzuPLKK+OXv/xlbLXVVqnLKfdWH7Bz9dVXpy6lxFxwwQWRl5cXF198cepSKi0BJZSSiy66KJo0aRIDBw6MuXPnpi7nR5k/f34MHDgwGjRoYIW8gfLz8+PCCy+MK6+8Mu65557U5fxo119/fdx+++3xhz/8IVq0aJG6HCqAE088MXbeeecYPHhwfPzxx6nL+VFWrFgRQ4cOjTlz5sQNN9zga338oLy8vLjxxhtjzpw5ccABB1T4rzlOnDgxBg8eHDvvvLPTG7BBWrZsGX/4wx/i9ttvjxtuuCF1OT/a3XffHVdeeWVceOGFTm+wgS655JKoX79+DBw4MObPn5+6nB9l7ty5MWDAgGjatGmlCt1L01ZbbRXnn39+XHrppXH//fenLudHu/rqq+N///d/4+qrr47mzZunLqfSElBCKWnSpEmMGTMmFi5cGIMGDYrFixenLmmTfPXVV7HXXnvF3LlzY8yYMVbIG+GCCy6Ik08+OU444YR49NFHU5ezye6+++4488wz47zzzotf/vKXqcuhgqhWrVo8/fTTsdlmm8WAAQNi+vTpqUvaJAUFBXHooYfGa6+9Fk8++WR07do1dUlUEF27do0nnngiXn755TjssMOioKAgdUmbZNq0aTFgwIBo0aJFPPPMM05vwAb75S9/Geeee26cccYZFfrD2kcffTROPPHEOOWUU+KCCy5IXU6F0bx58xgzZkx88cUXsffee8dXX32VuqRNsnjx4hg0aFAsWrQoxo4dG02aNEldUoVxySWXxPHHHx/HHntsjB49OnU5m+zOO++Mc889Ny666KI46aSTUpdTqQkooRRttdVW8fzzz8fkyZNj8ODBsXTp0tQlbZRly5bFfvvtFx9//HE899xz0blz59QlVSh5eXlx6623xsEHHxyHHXZYPPfcc6lL2mgjR46ME088MU4++eS44oorUpdDBdO0adN4/vnno1q1atG/f//44osvUpe0UYqKiuL444+PJ598MkaOHOmE+Gy0PfbYI0aOHBmjR4+OE044ocJd0fSLL76I/v37R40aNeL555+3Y85Gu/LKK2PYsGEV9sPa5557Lg477LA45JBD4pZbbnEE/Ubaeuut47nnnouJEyfGkCFDYvny5alL2ihLly6NwYMHx+TJk+P555+PLbfcMnVJFUpeXl7ccccdccABB8RBBx0UL7zwQuqSNtpDDz0UJ598cvzqV7+KSy65JHU5lZ6AEkpZt27d4plnnom33norDjzwwApzouDly5fHwQcfHP/4xz/i6aefjh133DF1SRVSlSpVYvjw4TFw4MDYf//94+WXX05d0gZ75pln4vDDD49DDjkkbr31VhvlbJJWrVrF2LFj4+uvv44999wz5s2bl7qkDVJYWBinn3563H///XH//ffHvvvum7okKqjBgwfH/fffH8OHD4/TTz89CgsLU5e0QebNmxcDBw6MJUuWxJgxY6JVq1apS6IC+u6Htc8880zqkjbYyy+/HPvvv3/sueeecd9990WVKnadN0X37t3jqaeeir///e9x8MEHV5iQctmyZXHggQfG22+/Hc8++2x069YtdUkVUtWqVeOBBx6Ivn37xpAhQ+L1119PXdIGGz16dBx55JFxxBFHxI033mhfqAxYy0IZ2HXXXWPUqFExbty46NatW7z44oupS/peL7/8cmy//fbx3HPPxV//+tfo3bt36pIqtOrVq8fIkSNjl112ib59+8Y555xTro+m/fLLL+PUU0+NffbZJwYNGmSjnB8tPz8/nn/++ZgxY0Zss8028Ze//CWyLEtd1np98MEH0bt377jlllvi9ttvj0MPPTR1SVRwhx12WNx2221xyy23xG677RYffPBB6pLWK8uyePjhh6Nr164xc+bMGDNmTOTn56cuiwqsatWqMXz48Bg0aFDss88+ceqpp8aXX36Zuqz1Wrp0aZx99tnxs5/9LHr16hWPPPJIVK9ePXVZFdpuu+0Wf/3rX+Nvf/tbbL/99uX+A/vx48dHt27dYty4cTFq1Kjo1atX6pIqtBo1asRjjz0W3bt3j9133z3OO++8cn3QzuLFi+Okk06KoUOHxuDBg+Puu++2L1RGLGUoIwMGDIh33nknNt988/jZz34WJ5xwQixcuDB1WWtYvHhxDBs2LPr06RPNmjWLf/3rX65WW0Jq164dzz//fFx++eVx8803x3bbbVcuv+aw+hx7w4cPj5tvvjkef/xxG+WUiG233Tbee++92G233eKQQw6J/fbbLz7//PPUZa1hxYoVcckll8SOO+4YCxcujFdeeSWGDRuWuiwqiZNPPjlefvnlWLBgQey4445xySWXlLuL53z++eex3377xaGHHhp9+vSJ9957L7bZZpvUZVEJVK9ePR5//PG46aabYvjw4bHNNtvEU089lbqstbzwwgux3XbbxS233BJXXHFFPPfcc1G7du3UZVUKgwYNin/961/RrFmz6NOnTwwbNqzcnaN/4cKFccIJJ0Tfvn1j8803j3//+9/Rv3//1GVVCnXq1ImxY8fGpZdeGtdff31sv/325fKgnVGjRkWXLl3iwQcfjNtuuy0effRR514uSxk/2m677ZYdccQRqctI5txzz806duyYuowKo7CwMPvTn/6U1a9fP2vZsmU2cuTIrKioKGlNRUVF2V//+tds8803z+rVq5fddtttWWFhYdKaKrOPP/4469OnTxYR2THHHJPNmzcvdUnZ7Nmzs4MOOiiLiGyvvfbKpk6dmrqkCuPuu+/OIsKc2QjfXt/ceuutWUFBQeqSsldffTXr0qVLVq1atex3v/tdtmzZstQlVRiDBw/OBg8enLqMCmPZsmXZ7373u6xatWpZly5dsldffTV1SVlBQUF26623ZvXq1ctatWqVPf7446lLqjAKCwuziMjuvvvu1KVUGFOnTs0GDRqURUR28MEHZ7Nnz05dUjZv3rzsmGOOySIi69OnT/bJJ5+kLqnSKiwsXGN989e//rVc7AuNHDkya9myZdagQYPsjjvusF1Xij766KOsd+/eWURkxx9/fDZ//vzUJWUzZ87Mfv7zn2cRke27777Z9OnTU5eUkwSUJUBAKaDcFDNmzMj222+/LCKyjh07ZhdddFH28ccfl2kNn3zySXbxxRdnW265pZVxGSssLMz+/Oc/Zw0bNsxq1qyZHXjggdnjjz+eLV++vMxqWLp0afaXv/wl22+//bLq1atnzZo1y0aMGJF8I7GiEVBumoULF2YnnXRSFhFZy5Yts9/85jfZhAkTynT8zZw5M7vuuuuyHXfcMYuIbJdddsnefffdMnv9ykJAuWnefffdbOedd84iIuvevXt23XXXZTNnziyz1y8qKsomTJiQnX766VnLli2ziMiGDRuWLVq0qMxqqAwElJumqKgoGzFiRNasWbOsevXq2X777Zc98sgj2dKlS8ushuXLl2ePP/54duCBB2Y1a9bMGjZsmP3v//6v9/MyMn369GyfffbJIiLbaqutsksuuST79NNPy7SGiRMnZhdeeGHWsWPHLCKyIUOGZDNmzCjTGnLVtw/aqVWrVnbQQQdlo0ePzlasWFFmNSxZsiR76KGHsn333TerVq1attlmm2UPP/ywfaGEBJQlQEApoNxURUVF2bhx47Jjjjkmq1+/fhYR2U477ZTdeOON2Zw5c0rlNefMmZPddNNNxTtF9evXz4466qhs7NixVsYJzJkzJ7vmmmuy7bffPouIrHHjxtmJJ56YvfTSS6WygVxQUJCNGTMmO/roo4vHXM+ePbMbb7yxXBzJWREJKH+ct99+OzvttNOyzTbbLIuIrHPnztlll12WffbZZ6XyeosXL87uvfferF+/flleXl5Wo0aN7IADDsgee+yxcnEkZ0UkoNx0BQUF2WOPPZbtv//+WY0aNbIqVapk/fv3z+69995s8eLFpfKan332WXbZZZdlnTt3ziIi22yzzbLTTjste/vtt0vl9So7AeWPM2/evOzGG2/MevbsWbxdevTRR2djxowplXVyYWFh9tJLL2Unnnhi1rhx4ywisu233z675pprSm3bm/UrKirKxo4dmx111FHF26U777xzdvPNN2dffPFFqbzm7NmzsxtvvDHbaaedsojIGjRokB1zzDHZuHHj7AslMHv27Ozqq6/OtttuuywisiZNmmTDhg3LXnnllVLZtl61alX23HPPZUceeWRWr1694g+ob7755mzBggUl/npsnLwsK8dnqa8gdt9992jfvn3cf//9qUtJ4rzzzouRI0fGpEmTUpdSoS1btiyeeuqpGDFiRDzzzDNRUFAQ7dq1i86dO6/107p16++9iliWZTFz5sz4+OOP1/qZNm1aVKtWLfbaa684/PDDY/Dgwc6tU0588MEHMWLEiHjwwQdj2rRp0aBBg3X2/1ZbbfWDfbZkyZL45JNP1ur/Tz75JL7++uvYcsst4/DDD4/DDjssOnXqVEYtrJzuueeeOO6446KwsNAJtH+EgoKCeOGFF2LEiBHx17/+NZYsWRKtWrVa5xxo165dVK1adb3PlWVZzJ07d53rwMmTJ0dhYWH06dMnDj/88Pj5z38ejRs3LsOWVj777bdfREQ88cQTiSup2BYuXBiPPfZYjBgxIl566aWoWrVq5Ofnr3MONG/e/Hu3AwoLC2PatGnrnAOzZs2KevXqxf777x+HH3549OvXz/m1foSioqKo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ACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASUAAAAAkIyAEgAAAABIRkAJAAAAACQjoAQAAAAAkhFQAgAAAADJCCgBAAAAgGQElAAAAABAMgJKAAAAACAZASU/Wt26daNFixapywBIIi8vLzp06BBZlqUuBQAAoEISUFIiJk2alLoEgCS+/PLLmDNnTlStWjV1KQAAABWSgJIfrWnTprFgwYIoKipKXQpAmZs7d240bdo0dRkAAAAVloCSH2277baLgoKC+Oc//5m6FIAy99prr8W2226bugwAAIAKS0DJj7brrrtG8+bNY9SoUalLAShT8+fPj1deeSWGDh2auhQAAIAKS0DJj1a1atUYPHiwgBLIOU8//XQUFhbGfvvtl7oUAACACktASYkYOnRofPzxx/Huu++mLgWgzIwcOTJ69eoVm2++eepSAAAAKiwBJSViwIAB0aFDh/jlL3/pYjlATnj66afjqaeeipNOOil1KQAAABWagJISUatWrbjnnnvilVdeiVtuuSV1OQClauHChXHiiSfGoEGD4qijjkpdDgAAQIUmoKTE7LHHHvHLX/4yzjvvvPj0009TlwNQan7zm9/E119/Hf/7v/8beXl5qcsBAACo0ASUlKirrroqNt988zj44INj3rx5qcsBKHF33HFHDB8+PG644YZo06ZN6nIAAAAqPAElJapu3brx2GOPxYwZM2L33XePGTNmpC4JoERkWRZ/+MMf4uSTT45TTz01jjnmmNQlAQAAVAoCSkrcDjvsEK+++mosWbIkfvrTn8Ynn3ySuiSAHyXLsjj77LPj/PPPj4svvjhuueUWX+0GAAAoIQJKSkWnTp3itddeizp16kTv3r3jjTfeSF0SwCZZtmxZHHvssXHdddfFTTfdFJdccolwEgAAoAQJKCk1bdq0iVdeeSU6duwYvXv3jjPOOCOWLFmSuiyADTZu3LjYbrvt4qGHHor/+7//i9NOOy11SQAAAJWOgJJS1axZs3jllVfiqquuij/96U+x7bbbxnPPPZe6LIDvtXDhwjjuuOOiX79+0bp16/j3v/8dv/jFL1KXBQAAUCkJKCl11apVi7PPPjvef//9yM/Pj0GDBsWRRx4Z//nPf1KXBrCGLMvikUceiS5dusSjjz4ad955Z4wfPz46d+6cujQAAIBKS0BJmenYsWOMHTs27rnnnnjqqaeiffv2cdppp8W0adNSlwbkuIKCgnjooYdihx12iIMPPjh23XXX+PDDD+PEE0+MKlW8VQIAAJQme12Uqby8vDjmmGPi008/jd/+9rcxYsSI6NixYxx55JHxwQcfpC4PyDHLly+PO+64Izp37hyHHXZYbL755jF+/Ph4/PHHo3Xr1qnLAwAAyAkCSpJo2rRpXHzxxTF9+vS47rrrYvz48bHtttvGkCFD4pVXXoksy1KXCFRic+fOjauvvjrat28fp556avTs2TPefvvt+Nvf/hZ77LFH6vIAAAByioCSpOrWrRu//vWv47PPPot77703Pvnkk9h9990jPz8/Lrjggvjwww9TlwhUEkuWLIkHH3ww9tlnn2jVqlVcdNFFMWTIkPj444/j4Ycfjh133DF1iQAAADlJQEm5UKNGjTj66KPjgw8+iBdffDEGDBgQt99+e2yzzTbRvXv3uO6662LmzJmpywQqmIKCgvjb3/4WRxxxRLRo0SIOP/zwWLRoUdx0000xc+bMuPPOO2PLLbdMXSYAAEBOE1BSrlSpUiX69OkTf/7zn2POnDnx+OOPFx9N2bZt2+jXr1/cdNNNMXHiRF8DB9bpq6++iieffDJOPfXUaN26dey1114xYcKEOO+882Ly5Mnx2muvxSmnnBLNmjVLXSoAAAARUS11AbA+NWvWjKFDh8bQoUNj8eLF8dhjj8XDDz8c55xzTpx++unRtm3bGDhwYOy5557Rr1+/aNKkSeqSgQSKiori7bffjueffz6ee+65eP3116OgoCA6dOgQv/jFL+Lwww+PHXfcMfLy8lKXCgAAwDoIKKkQGjZsGMcee2wce+yxsXTp0nj55Zfjueeei+effz7uvvvuyMvLi549e8bAgQNjwIABsdNOO0WdOnVSlw2UgizLYsqUKfHSSy/F888/H2PGjIn58+dH/fr1o2/fvnHTTTfFnnvuGR07dkxdKgAAABtAQEmFU6dOnRg0aFAMGjQoIiJmzJgRzz//fDz//PNx++23x+WXXx5VqlSJLl26xE477RQ9evSInXbaKbbffnuhJVQwWZbF1KlT46233ooJEybEW2+9FW+99VYs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AAAkI6AEAAAAAJIRUAIAAAAAyQgoAQAAAIBkBJQAAAAAQDICSgAAAAAgGQElAAAAAJCMgBIAAAAASEZACQAAAAAkI6AEAAAAAJIRUAIAAAAAyQgoAQAAAIBkBJQAAAAAQDICSgAAAAAgGQElAAAAAJCMgBIAAAAASEZACQAAAAAkI6AEAAAAAJIRUAIAAAAAyQgoAQAAAIBkBJQAAAAAQDICSgAAAAAgGQElAAAAAJCMgBIAAAAASEZAWQI222yzKCoqSl0GAEASzZo1S10CAAAVmICyBDRs2DDefffd1GUAAJSpLMvinXfeicaNG6cuBQCACkxAWQL69esX7733XsyePTt1KQAAZebjjz+Ozz//PPr375+6FAAAKjABZQkYMGBA1K5dO66++urUpQAAlJk//OEP0ahRo9h9991TlwIAQAUmoCwBzZs3j8suuyxuvvnm+Oc//5m6HACAUjdmzJi4//7749prr426deumLgcAgAosL8uyLHURlUFBQUHssssusWrVqvjHP/4RtWvXTl0SAECp+PLLL2PHHXeMLbbYIsaNGxd5eXmpS4IkioqKomrVqnH33XfHsccem7ocAKiwHEFZQqpVqxZ33XVXTJo0Kfr06ROzZs1KXRIAQImbPHly/OQnP4l58+bFnXfeKZwEAOBHE1CWoB133DFeffXVmDVrVvTs2TMmTJiQuiQAgBLz8ssvx8477xzLly+Pv//979GpU6fUJQEAUAkIKEtY9+7d480334w2bdrE7rvvHo888kjqkgAAfrS77747+vfvH926dYt//OMf0aVLl9QlAQBQSQgoS8Hmm28eL774Yuy///5x8MEHx+mnnx7z5s1LXRYAwEabPXt2nHjiiXH88cfHcccdF88991w0bdo0dVkAAFQiAspSUrt27XjggQfimmuuibvvvjs6dOgQF110USxatCh1aQAAP2ju3Llx9tlnR8eOHWPkyJHxpz/9KW6//faoXr166tIAAKhkBJSlKC8vL84666yYMmVKnHzyyXHttddGhw4d4oorroivvvoqdXkAAGtZuHBh/O53v4v8/Py488474+yzz44pU6bEsGHDXBAHAIBSIaAsA82aNYs//vGPMXny5DjyyCPjsssui/z8/Lj22msFlQBAubBw4cK4/PLLo0OHDnH99dfHqaeeGlOmTIlLL700GjVqlLo8AAAqMQFlGWrZsmXcdNNNMWnSpPj5z38e5513XrRo0SIOOeSQePLJJ2PlypWpSwQAcsjy5cvjscceiwMOOCBatmwZl19+eRx99NExefLkuOqqq5xrEgCAMiGgTKBt27Zxxx13xOTJk+Piiy+ODz/8MPbbb79o1apVnHLKKfHaa69FlmWpywQAKqGioqIYP358HHfccdGyZcs48MADY/r06XHVVVfF1KlT48Ybb4yWLVumLhMAgBySl0nCyoV33303RowYEQ8++GDMmDEj2rdvH4cddlgcfvjh0bVr19TlAQAVWJZl8e9//ztGjBgRDz30UMycOTPy8/Pj8MMPj8MOOyy23nrr1CVChVRUVBRVq1aNu+++O4499tjU5QBAhSWgLGeKiorilVdeiREjRsTIkSNj0aJFseWWW0a/fv2iX79+8bOf/SyaNWuWukwAoJz74osvYty4cfHCCy/ECy+8EFOnTo1mzZrFwQcfHIcffnj06tXLRW/gRxJQAkDJEFCWYytWrIi//e1v8dxzz8ULL7wQn3zySURE7LDDDsWB5W677Rb16tVLXCkAkNrixYvjpZdeihdeeCHGjRsX77//fkREbLPNNtGvX78YNGhQ9O/fP6pXr564Uqg8BJQAUDIElBXIjBkzio+CeOGFF2LWrFlRrVq12GWXXYoDy169ekWNGjVSlwoAlLLly5fH66+/XrxdMGHChCgsLIx27doVbxf07dvX+SShFAkoAaBkCCgrqCzL4pNPPineKRk/fnwsXLgwatSoEdttt1107949evToET169Ihtt902atWqlbpkAGATLVu2LP7973/H22+/HW+99Va89dZb8cEHH0RBQUE0a9Ys+vbtWxxK5ufn++o2lBEBJQCUDAFlJVFYWBjvvPNOvP7668U7Lx9++GEUFhZGtWrVYtttt10jtOzWrVvUrl07ddkAwHcsWbIk3nnnnTXCyI8++miN9/TV7+c/+clPYrvttosqVaqkLhtykoASAEqGgLISW7ZsWbz77rvFOzdvv/12vP/++1FQUBBVq1aNrl27Ro8ePaJ79+7RtWvX6Ny5c7Ru3dpRFwBQBoqKimLGjBnx8ccfxwcffFD8Xj1x4sQoKioq/lbE6vfqHj16xHbbbRc1a9ZMXTrw/wkoAaBkCChzzPLly+P9999fI7R87733YuXKlRERUbdu3ejcufNaP506dYq6desmrh4AKp6vvvoqPv7447V+Pvnkk1i2bFlERNSsWTO23377NcLIbbbZxnmloZwTUAJAyRBQEqtWrYopU6YU7zBNnDix+P9z584tflybNm3WCC233nrr6Ny5c7Rt29ZXywDIaYWFhTFt2rR1BpGzZs0qflzLli3X+UFg+/bto1q1aglbAGwKASUAlAwBJd9r4cKF69zZ+vTTT4uPuqxZs2a0bds22rRps8a/3/5/kyZNfHUcgAopy7KYN29efP755zFjxoz1/rv6fbFWrVqx1VZbrfWBXqdOnaJhw4aJWwOUJAElAJQMH9XzvRo3bhy9evWKXr16rXH76iNFJk6cGJ9++mnxDtpnn30WL730UsycOTMKCwuLH1+7du1o06bN94aYjRs3FmICUKayLIv58+evM3Rc/f8ZM2bEihUriv+mevXq0bp16+L3r5133jnatm0bnTp1is6dO8cWW2zhmwUAALARBJRskqpVq0Z+fn7k5+ev8/7CwsL44osv1rnDN2nSpBg/fnzMmjVrjRCzTp066wwxvx1mNmrUSIgJwAbJsiwWLFiwztDx2+Hj8uXLi/+mWrVq0bp16+L3n5133nmt96PNNttMAAkAACVIQEmpqFq1arRq1SpatWoVu+yyyzofU1hYGHPmzFnnTuMnn3wSL7zwQsyaNSuKioqK/6ZOnTrRunXraNq0aTRt2jSaNGlS/LO+3xs0aGBHEqCCKyoqisWLF8f8+fNjwYIFxT/f/X31bfPnz4+ZM2cWX4Qm4pv3pm+HjzvttNM6w8eqVasmbCkAAOQeASXJrN5RbN269XpDzIKCgjVCzBkzZsTMmTOLd0KnTJkSb731VvEO6apVq9Z6jipVqkTjxo3XCjC/L9Rs0qRJNGzYULAJUMIKCwtj8eLF3xsuruv3hQsXxrpOm12jRo3idffqf7fZZpto0qTJWkflt2jRQvgIAADlkICScq1atWrFO5jfPQ/md2VZFkuWLNmgnd1p06bFv/71r+LfV1/Y4NtWB5vfF2iu67ZGjRoJNoFKr7CwMBYtWvSDRzJ+9/dFixatM2isWbPmGuvTpk2bxrbbbvuD69/atWs79QcAAFRwAkoqjby8vKhXr17Uq1cvtthiiw3+uyzLYunSpRu0kz19+vR45513ir8+uK5gMy8vb41gs2nTptG4ceOoV69e1KlTZ62funXrrvP2b99fu3ZtoSewyQoLC2PZsmWxdOnSWLp0aSxZsqT4/+v6+e79X3/99VrrxfUFjbVq1VorTOzWrdsPfrhTp06dBEsGAAAoDwSU5Ly8vLyoW7du1K1bN9q2bbvBf5dlWSxbtmyDjhyaOXPmOgOBJUuWrHMHf11q1aq1SeHmxtxXrZpVApS1VatWbXBQuKH3fff+b1+B+vtUqVJlneuGunXrRpMmTaJt27Y/eHqM2rVrl/ISAwAAKhtpBGyivLy84p33Nm3abNJzZFkWK1euLJEgYs6cOeu9f13n5lyX6tWrb3S4WaNGjahWrVpUq1YtqlevXib/93VONkSWZbFq1aooKCiIgoKCMvn/6vm8MfN3Y+fn+ubm6nMu/pgPLmrUqGF+AQAAZU5ACQnl5eVFzZo1o2bNmtG4ceNSe53vO0JrY47EWrBgQcyYMWON21cHNN8NakpTlSpVyiwM/b7/V61aNfLy8pL/rJZlWbn4KSoqKrNA8Pv+X1RUVKrjcPVY+PaYqFGjxjpDwJYtW/6oo59r164d1atXL9X2AAAApCKghBxQvXr1aNiwYTRs2LBMXm91SFWa4VNJPMfKlStjyZIlm/zchYWFxe397k9ZqlGjxjrPh1ra1heYVq1a9UcHwPXq1SvRQLmkA+oqVao40hAAAKCECCiBErc6pKpatWrqUpIqy6MWV4dlZX3UJgAAAPxYAkqAUiLMAwAAgB9WJXUBAAAAAEDuElACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAABgEx144IHRvn371GUAQIWWl2VZlroIAAAAACA3OYISAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACSEVACAAAAAMkIKAEAAACAZASUAAAAAEAyAkoAAAAAIBkBJQAAAACQjIASAAAAAEhGQAkAAAAAJCOgBAAAAACS+X8hAolbwDYIBwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import MPSAnsatz\n", - "from lambeq.backend.tensor import Dim\n", - "\n", - "mps_ansatz = MPSAnsatz({N: Dim(4), S: Dim(2)}, bond_dim=3)\n", - "mps_diagram = mps_ansatz(diagram)\n", - "mps_diagram.draw(figsize=(13,7), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. rubric:: See also:\n", - "\n", - "- :ref:`lambeq.ansatz package `\n", - "- `Example notebook tensor.ipynb <../examples/tensor.ipynb>`_\n", - "- `Example notebook circuit.ipynb <../examples/circuit.ipynb>`_\n", - "- `DisCoCat in lambeq <./discocat.ipynb>`_\n", - "- `Extending lambeq <./extend-lambeq.ipynb>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/rewrite.ipynb b/docs/tutorials/rewrite.ipynb deleted file mode 100644 index 51ae7367..00000000 --- a/docs/tutorials/rewrite.ipynb +++ /dev/null @@ -1,338 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Step 2. Diagram rewriting" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Syntactic derivations in pregroup form can become extremely complicated, which may lead to excessive use of hardware resources and prohibitively long training times. The purpose of the :py:mod:`~lambeq.rewrite` module is to provide a means to the user to address some of these problems, via :term:`rewriters ` and :term:`rewriting rules ` that simplify the :term:`string diagram`. ``lambeq`` provides two kinds of rewriters:\n", - "\n", - "- `Box-level rewriters` utilize a sequence of :term:`functorial ` transformations on the diagram through rewriting rules. Each rewriting rule independently accesses individual boxes within the diagram, limiting its visibility to information solely within that specific box, without access to the broader diagram context.\n", - "- Rewriters operating at the `diagram-level` function procedurally, implementing unrestricted transformations across the entirety of the diagram.\n", - "\n", - "``lambeq``'s rewriters are explained in detail in the following sections.\n", - "\n", - ":download:`Download code <../_code/rewrite.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "## Box-level rewrite rules\n", - "\n", - "We will demonstrate the use of box-level rewriting rules using again the sentence \"John walks in the park\"." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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KooABpKk3NxcPfPMM2rZsqX8/PwUGhqqP/7xj9q2bVux9/nkk0903XXXyc/PTxEREXrggQeUm5vrskz+uzFHjx7VyJEjFRwcrICAAPXp00e//fab2ZsFlNmBAwdks9n0t7/9zWV+nz59ZLPZ9MILL7jMb9++vVq0aCFJSk5O1sSJE9WqVSvVqlVLAQEBSkxM1BtvvFGummbNmiWbzaZ7771XDodDkvTpp5+qa9euqlu3rvz9/dW4cWMNHjyY9oVq49LPzxf8ff78+WrVqpV8fX0VFRWlf/zjH9YWC1SyGTNm6Pbbb5ck3XjjjbLZbLLZbBo7dqxzGYfDoWeffVYxMTHy9fVVXFyc3n777SIfb9WqVerdu7eCgoLk5+enNm3aaN68eZWxKYDp8q+LtGrVKs2YMUNRUVHy9fVVmzZt9P7777ss++WXX2r48OGKjo6Wv7+/goKC1Lt3b3399deFHjf/eGfv3r265ZZbFBISotq1a1+2lrfffls+Pj665ZZblJWVVaHbiaqNjyBBknTbbbdp0aJF6tWrl+6++26lpKRozpw56tixo9atW6f4+HiX5T/77DO9+uqruuuuuzRu3DgtXbpUzz77rIKDgzV9+nSXZdPT09WlSxd16NBBTz75pPbt26cXX3xRN998s3755Rfe1USVFBUVpejoaK1evVqPP/64JOnixYtav3697Ha7Vq9erb/85S+SpHPnzmnz5s268847Jf1+gPjNN9+of//+atKkidLT07V48WL96U9/0smTJzVt2rRS1ZKXl6dJkyZp3rx5euqpp/TQQw9Jkr7++msNHDhQV199taZNm6agoCAdPXpUq1at0u7duxUXF1eB/xGgapk3b56OHz+u8ePHKygoSAsXLtSDDz6ohg0b6tZbb7W6PKBSDB48WMeOHdPrr7+u6dOnO98IiImJ0c6dOyVJ06dPV2Zmpu688075+vpq7ty5Gjt2rGJjY9WpUyfnY73++uu666671KFDBz388MOqWbOmVq5cqbvvvlt79uzR7NmzLdlGoKI9+OCDSk9P18SJEyVJ8+fP18iRI5WVleUMLxcsWKDU1FSNGTNGDRs21JEjR/TGG2+oR48eWrNmjW644QaXx7xw4YK6du2qTp06adasWTpx4kSx63/yySf18MMP65577tFLL70ku51zIjyK4UEGDBhgDBgwwOoyLLdmzRpDkjF79mzDMAzjyy+/NCQZw4YNMxwOh3O5rVu3Gl5eXkbnzp2d8/bt22dIMgICAox9+/Y55zscDqNVq1ZG/fr1XdbVtWtXQ5LxzDPPuMz/xz/+YUgyPv/8cxO20L1kZWUZkoykpCSrS7mspKQkQ5KRlZVldSmVZsKECYaPj4+Rnp5uGIZhfP3114YkY9SoUUatWrWMnJwcwzAMY9myZYYk48MPPzQMwzAuXLhQ6LHy8vKMrl27GrVr1zYuXrzonD9//nxDkrFmzZoi52VkZBiDBg0yfHx8jLffftvlMf/yl78Ykozjx49X9Ka7FXd4bXeXdl4V5fdZ8+fPd/k9IiLCOHPmjHO59PR0o27dukaHDh0sqtQ9uctruzu0c6sU1Y8UnH/NNdcY2dnZzvmHDx82atSoYYwYMcI57+jRo4avr68xcuTIQo8/efJkw263G3v27DFtG9yVu7y2u0s7N1t+m2jcuLFL/3HmzBmjcePGRnBwsJGRkWEYRtFjuZSUFCM0NNTo16+fy/z8452HH3640H0K9mF5eXnGxIkTDUnGrFmzKnjr3JMnvrYTt0FLliyRJD388MOy2WzO+W3bttWAAQO0fv16nTx50uU+gwYNcrnQm81m04033qiUlBRduHDBZVm73a7Jkye7zOvevbskadeuXRW5KUCF6t69u3JycrRu3TpJ0urVqxUeHq4///nPOn/+vH744QdJ0po1a5xtQJJq1qzpfIysrCydPn1aqamp6t27t86dO6fk5OQSrT81NVW9evXSqlWrtHz5co0ZM8bl73Xq1JEkffTRR4U+/gdUd7fffruzDUhSQECAOnToQL8CXGLixImqUaOG8/cGDRooLi7Opa18+OGHys7O1vjx43Xq1CmX24ABA+RwOLRq1Sorygcq3N133+3Sf9SpU0d33XWX0tLSnF/bXnAsd+HCBZ0+fVpeXl5q3769vv/++yIf9/777y92nVlZWbrlllv0+uuva8GCBYU+MQDPQQAD7du3T3a73XnaakGtWrVyLlNQdHR0oWVDQ0MlSadPn3aZHxkZKT8/vxItC1Ql+UHh6tWrnT9vvPFGJSQkKDg42GV+27ZtFRISIun3jvr+++9X48aN5e/vr7p16yosLEwPP/ywJCktLa1E6x87dqy+/fZbrVixQn369Cn090mTJik+Pl4TJ05USEiIbrrpJr300kuFAlOgOiquH6JfAVyVpK3s2LFDktSzZ0+FhYW53Hr16iVJOn78eOUUDJisqGOeli1bSpL27t0rSdqzZ49GjBih4OBg1apVyzmW++yzz4ocx4WFhSkoKKjYdf71r3/VkiVL9Pbbb+v//b//VzEbArdEAIMyudx1WwzDKPOyQFVSr149tWzZUqtXr1ZGRoa+//57de/eXXa7XV27dtVXX32l06dP6+eff3aGNZJ066236vnnn9dNN92kd955R59//rlWrlzpvGZM/gV0r2T48OGy2+36+9//rszMzEJ/Dw0N1Q8//KA1a9bo3nvv1fnz5/WXv/xFcXFx2rhxY8X8E4AqiuuHASVTXFspOAbLn/73v/+tlStXFnm77bbbKqVewGoXLlxQly5d9Pnnn+vPf/6zPvzwQ33xxRdauXKlunfvXuTxS0BAwGUfc9CgQQoICNDs2bN5o8DDcRFeKDo6Wg6HQzt27FCbNm1c/rZ9+3ZJUpMmTawoDbBc9+7d9eqrr2r58uW6ePGievToIUnq0aOH7r//fq1YsUKGYTgDmDNnzuiTTz7R6NGjC31zRGlP377tttvUo0cPjR49Wv3799fy5csLdfBeXl7q1q2bunXrJkn6+eeflZiYqCeeeEKffvppGbcaAOAuCn58vKyaNm0qSapbt6569uxZ7scDqrIdO3bo5ptvdpmXf8wTHR2tr776SkePHtVbb73l/JaxfI888kiZ1tm9e3eNGzdO/fv314033qhVq1YpPDy8bBsAt8YZMNCgQYMkSU899ZRLovvLL79o2bJl6ty5s8LCwiyqDrBW9+7d5XA49Pjjj6tx48aKiYlxzs/OztZTTz0lb29vdenSRdL/3mm89N2RY8eOlelrqEeMGKH33ntP69atU79+/VyusXTq1KlCyzdv3lz+/v5KTU0t9boAAO4nMDBQksr1uj9s2DD5+vrqb3/7W5FnXJ49e1bZ2dllfnygKpk7d67Onj3r/P3s2bOaN2+egoKC1LVr12LHcl9++WWx138piW7duunzzz/X/v37ndfOhOfhDBioV69eGjZsmN5//32lpaWpf//+zq+h9vPz00svvWR1iYBlunXrJrvdrh07dji/mlD6/bPC9evX1/bt29WhQwfVqlVLklSrVi317t1bCxculL+/v6677jodOHBAr732mpo0aVKm005vueUW+fj4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bNkiSWratKnFlcBd2Qyu/IMyWLhwoUaPHq2srCz5+vpaXQ5QbgkJCerYsaPmzJljdSkVzjAM1atXT3fddZdmzpxpdTmoBLfffru2bdumTZs2Vcr6nnrqKT3//PM6efJkpaxv4MCBkqRly5ZVyvrCwsJ03333adq0aZWyvsTERLVp00bz58+vlPXBWo899phee+01paSklOhjg+7myJEjatiwod59912NHDnS6nKAcpk8ebKWLVumffv2Vcv2CvNxDRgAqOZsNpvat2+vzz//nKvte4CLFy9q1apVateundWloIzatWunr776imtbeADDMLRixQq1b9++2h7MNWjQQAkJCXr99dfpg+DWzpw5ow8++EB/+MMfqm17hfkIYADAA0yaNEk//PCDVq1aZXUpMFlSUpIOHz6siRMnWl0KymjixIk6dOiQkpKSrC4FJlu5cqU2bdqkSZMmWV2KqWbNmqW1a9fq3XfftboUoMwefvhhZWRkVNrZkKieCGAAwAP07t1b7dq108yZM3kHshrLzc3Vk08+qSFDhujqq6+2uhyUUevWrTV48GA9+eSTys3NtbocmMQwDM2cOVPt27dXr169rC7HVH379tWwYcM0ZcoU7dy50+pygFJbvny55s6dq7///e+mfKsXPAcBDAB4AJvNpscee0zr16/XokWLrC4HJvnnP/+pvXv36pFHHrG6FJTTo48+qj179ujFF1+0uhSYZNGiRdqwYYMee+wxj/g4w8svv6ywsDDdeOON+u2336wuByixTz75REOGDNGgQYOq/dlqMB8BDAB4iJtuuknDhw/XqFGjtGTJEqvLQQV79dVX9cADD2jq1Km65pprrC4H5XTNNddo6tSpuv/++zV37lyry0EFW7JkiUaNGqURI0aoX79+VpdTKcLDw7VmzRoFBQWpa9eu+uKLL6wuCbgsh8OhOXPmaPDgwerfv7/ef/99eXvzJcIoHwIYAPAQNptNCxcu1ODBgzVs2DBCmGrk1Vdf1T333KMpU6Zo9uzZVpeDCjJ79mxNmTJFEydOJISpRpYsWaJhw4ZpyJAhSkpK8oizX/LVq1dPa9asUcuWLdW3b1+NHj1ap06dsrosoJBff/1VnTt31qRJkzRhwgS9//77qlGjhtVloRoggAEAD+Lt7a133nmHEKYaKRi+PP/88x51MFfd2Ww2Pf/884Qw1UjB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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "# Parse the sentence\n", - "parser = BobcatParser(verbose='suppress')\n", - "diagram = parser.sentence2diagram(\"John walks in the park\")\n", - "\n", - "diagram.draw(figsize=(11,5), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that the representation of the preposition is a tensor of order 5 in the \"classical\" case, or a state of 5 quantum systems in the quantum case. Applying the ``prepositional_phrase`` :term:`rewriting rule ` to the diagram takes advantage of the underlying :term:`compact-closed ` monoidal structure, by using a \":term:`cap`\" to bridge the discontinued subject noun wire within the preposition tensor. Furthermore, the ``determiner`` :term:`rewriting rule ` will apply a :term:`cap` on type :math:`n \\cdot n^l`, eliminating completely the determiner \"the\"." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABGAAAAIHCAYAAADQLypxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABMMklEQVR4nO39eXQVhf0//r+yQELYZRFEAVlltYqCCwiKAlYEtdrWtdalLnVvq1bfLq1VtGq11Wo9RcWP1rbvt1YBFVQExBWVVlFERcUVUXYIa0ju749+yc8IIgkZhuQ+Hufck5vJ3HufdzL3zszzzp3JyWQymQAAAAAgMblpBwAAAACo7RQwAAAAAAlTwAAAAAAkTAEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwhQwAAAAAAlTwAAAAAAkTAEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwhQwAAAAAAlTwAAAAAAkTAEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwhQwAAAAAAlTwAAAAAAkTAEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwvLTDrCtffLJJ7Fw4cK0Y2ykefPm0bZt27RjJG57nf6kLxteA+Z/ALZH2bAMhmy3va6HZtv7T1YVMJ988kl069YtVq1alXaUjRQVFcXs2bNr9cy3PU9/0lfbXwPmfwC2V7V9GQzZbnteD82295+sKmAWLlwYq1atigceeCC6deuWdpxys2fPjhNOOCEWLlxYq2e87XX6k75seA2Y/wHYHmXDMhiy3fa6HpqN7z9ZVcBs0K1bt9hzzz3TjpG1TH+ymfkfAIA0WA9Nn4PwAgAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwhQwAAAAAAlTwAAAAAAkTAEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAVNJH330UeTk5MTVV1+ddhRqiTFjxkROTk5MnTp1s8MAYFubOnVq5OTkxJgxY9KOAkANYxmysawsYF577bXIycmJm266Ke0oAAAAQBbITzsAAADbpwMOOCBWr14dderUSTsKANR4WbkHDAAA3y03NzcKCwsjLy8v7SgA1BArVqxIO8J2SwHz/1m/fn3ccMMN0b179ygsLIxmzZrFkUceGW+++ea33uaxxx6LvffeOwoLC6N169bxq1/9KtavX19hnEGDBkX79u1j3rx5ceyxx0bTpk2jqKgohg4dGu+9917ST4ut8PHHH0dOTk5cddVVFYYPHTo0cnJy4pZbbqkwvF+/ftGtW7eIiHjnnXfi7LPPjh49ekTDhg2jqKgo+vTpE6NHj96qTNdee23k5OTEueeeG2VlZRER8fjjj8fAgQOjefPmUa9evWjbtm0cddRR5i8Atto3v7//9d/vvffe6NGjRxQUFES7du3i97//fbphAdisPn36xKRJk+Lqq6+Odu3aRUFBQfTu3Tv+8Y9/VBjvqaeeih/96EfRoUOHqFevXjRp0iSGDBkSzz777Eb3uWF798MPP4yjjz46dthhh2jUqNFmc9x3331Rp06duPjii6v1+dUECpj/z/HHHx+XXnpp7LzzznHjjTfGmWeeGVOmTIl99903/vOf/2w0/hNPPBGnnHJKHHrooXHLLbfE7rvvHjfddNMmVz5WrlwZBxxwQOTl5cV1110X55xzTkydOjVGjhwZpaWl2+LpUQXt2rWLDh06xOTJk8uHrVu3Lp5//vnIzc2tMHz58uUxY8aMOOiggyLivyuo06ZNi+HDh8eNN94Y11xzTdSpUydOP/30GDVqVKWzlJaWxllnnRX/8z//E6NGjYrbbrstcnNz49lnn40RI0bE0qVL49e//nXcfvvtcfrpp8eiRYvi/fff3/qJAACb8Je//CV++9vfxrHHHhs333xztG7dOi655JJ48MEH044GwGZccskl8Y9//CPOPvvs+O1vfxvr1q2LY489tsKBcseMGROLFy+Ok046KW677ba48MILY/bs2TF48OB47rnnNrrP4uLiGDhwYOTn58e111672RPWXHfddXHyySfHGWecEddff30Cz3A7l8kiM2bMyERE5q677spERObGG2/MZDKZzFNPPZWJiMwPf/jDTFlZWfn4r7/+eiYvLy/Tv3//8mFz587NRESmqKgoM3fu3PLhZWVlmR49emRatWpV4TEHDhyYiYjMDTfcUGH473//+0xEZCZOnFiea8aMGQk86+1HTXyep512WqZOnTqZlStXZjKZTObZZ5/NRETmhBNOyDRs2DBTUlKSyWQymXHjxmUiIvPQQw9lMplMpri4eKP7Ki0tzQwcODDTqFGjzLp168qH33vvvZmIyEyZMmWTw1atWpU54ogjMnXq1Mncd999Fe7zwgsvzERE5ssvv6zup75N1cR5o7Ky4TkCtc+UKVMyEZG59957K/zeunXrzNKlS8vHW7lyZaZ58+aZffbZJ6WkVJXlE9R+G17nEZFp27ZthffvpUuXZtq2bZtp2rRpZtWqVZlMZtPbMvPnz880a9Ysc+ihh1YYvmF79/LLL9/oNl9fhpSWlmbOPvvsTERkrr322gq5sun9x0F4I+KRRx6JiIjLL788cnJyyofvvvvucfjhh8ejjz4aCxYsiBYtWpT/7Ygjjoj27duX/56TkxMHHnhg3H777VFcXBwNGjQo/1tubm6cd955FR5zw54Sc+bMqXC/bF8OOuigGD16dDz33HMxdOjQmDx5crRs2TLOP//8eOCBB+LVV1+NfffdN6ZMmVI+D0RE1K9fv/w+1qxZEytXroxMJlO+694777wTvXr1+s7HX7x4cRxyyCHxxhtvxPjx42Po0KEV/t64ceOIiHj44Yfj9NNPj/x8L2kAkvfTn/60fBkUEVFUVBT77LNPvPTSSymmguyUyWRi5cqVsWjRoli8eHEsWrSo/PratWtj/fr1UVJSEuvXr4/169dHo0aNYtmyZVGnTp3Iz8+P/Pz8qFOnTtStWzd22GGHaNasWYWfDRs2rLCNRM121llnVXj/bty4cZx55plx2WWXxdSpU+PQQw+tsC1TXFwca9eujby8vOjXr1+8/PLLm7zfX/7yl9/6mGvWrImjjz46xo8fH2PGjImf/OQn1feEahhbaxExd+7cyM3NLT9+x9f16NEjHn300Zg7d26FoqRDhw4bjdusWbOIiFi0aFGFAmannXaKwsLCbx2X7deGomzy5MnlBcyBBx4Ye+65ZzRt2jQmT54c++67b0yePDl233332GGHHSLiv29UV199dfzv//5vfPrppxvd75IlS7bo8U8++eQoLi6OadOmRf/+/Tf6+znnnBNjx46Ns88+Oy655JLo379/DBs2LI499ljFHgCJ+bb1IOs1UP2Ki4vj7bffjlmzZsVbb70VH374YYWyZfHixbFu3bqNbpeXlxf16tUrL1k2XPbcc8/497//XV7IbLisWbNmo+NZRkTUqVMndthhh/JSplmzZtG+ffvo0aNH9OzZM3r06PGdx/xg+7Gpbd7u3btHRMSHH34YEREffPBBXH755fHkk0/G0qVLK4y7qTKuRYsW0aRJk299zIsvvjhWrFgRf/vb3+K4446revhaQAFTRZs7G0Amk6nyuGxfdtxxx+jevXtMnjw5Vq1aFdOnTy8//srAgQPjmWeeiTPPPDNmzpwZF154YfntjjvuuHjsscfiZz/7WRxwwAHRrFmzyMvLiyeeeCJuueWW8gPofpcf/ehHce+998Y111wTjz76aNSrV6/C35s1axavvvpqPPfcc/H000/HtGnT4sILL4yrrroqnnjiidh3332rdXoAQMTm122AqikpKSkvWd56663y6x999FFE/HfDt0OHDtG5c+do165d7LHHHuWFyNfLkQ3XK7vnSiaTieLi4o32ovnmnjWLFi2KCRMmxG233Va+TrvLLruUlzEbfvbq1SsKCgqSmFQkqLi4OA444IBYuXJlXHDBBdGrV69o2LBh5ObmxqhRoyocB3ODoqKizd7nEUccEQ8//HDceOONMXTo0PKdEbKRAib++ylOWVlZzJ49O3r37l3hb2+//XZEROy6665pRGM7cNBBB8Udd9wR48ePj3Xr1sXgwYMjImLw4MHxy1/+MiZMmBCZTKZ8b5mlS5fGY489FieeeGL85S9/qXBfkyZNqtRjH3/88TF48OA48cQTY/jw4TF+/PiN3uDy8vJi0KBBMWjQoIiImDlzZvTp0yd+97vfxeOPP17FZw0AQNKWL18eEydOjLFjx8YTTzxRvrdB27Zto2fPnnHMMceUFxrdunX7zg3drZGTkxMNGzaMhg0bRrt27b5z/DVr1sQ777xTXhTNmjUrHn744bjpppsiIqJhw4YxbNiwGDFiRHz/+98v31OcdM2ePTtGjhxZYdiGbd4OHTrEM888E/PmzYt77rknfvrTn1YY73/+53+q9JgHHXRQnHLKKTF8+PA48MADY9KkSdGyZcuqPYEaTgET/23k7rjjjhg1alQ8+OCD5U3xW2+9FePGjYv+/fv7OkcWO+igg+L222+P3/zmN9G2bdvo2LFj+fC1a9fGqFGjIj8/Pw444ICI+P9/KvjNvZu++OKLKp2G+sc//nHk5+fHcccdF4ceemg8/vjj5V9xW7hwYTRv3rzC+LvttlvUq1cvFi9eXOnHAgAgWZ988kmMHz8+xo0bF1OmTImSkpL43ve+F+edd14MGTIkevXqVSO+0lNYWBjf+9734nvf+16F4cXFxTFr1qyYNGlSjBs3Lk488cTIy8uLAQMGxIgRI2LEiBHl69Nse3feeWeF48AsW7Ys/vKXv0STJk1i4MCB5Xu4fHNb5qmnnorp06dX+XEHDRoUEydOjO9///tx4IEHxjPPPFP1J1GDKWAi4pBDDokf/vCH8Y9//COWLFkSw4cPj/nz58ef//znKCwsjD/96U9pRyRFgwYNitzc3Jg9e3acfPLJ5cO7d+8erVq1irfffjv22WefaNiwYUT8t+0fMmRIPPDAA1GvXr3Ye++94+OPP4677rordt111yp9P/7oo4+OOnXqxA9/+MMYOnRoTJgwIRo1ahSnn356fPbZZzFkyJBo165drF69Ov75z3/GihUr4qSTTqquSQAAwFbIZDLx6KOPxqhRo+LVV1+N/Pz8OPDAA+MPf/hDHH744Vu0x0lN0aBBg+jXr1/069cvLr/88pg3b1489thjMXbs2Pj1r38dF110UfTq1SsuueSS+PGPf+wrjdtY8+bNo1+/fuV7t9x7773xySefxOjRo6OoqCj69+8frVq1il/84hfx0Ucfxc477xyvv/563H///dGrV6948803q/zY/fv3j6eeeiqGDRsWgwYNij/+8Y/V9bRqjNy0A6RhQ5v39Rf73/72t7j++uvj448/jl/84hdxxx13xMCBA+Oll16KPfbYI62obAeaNm1a3uxv+JrRBht+/+bwBx54IE455ZQYP358nHPOOfHoo4/GtddeGz//+c+rnGPkyJHxr3/9K2bMmBFDhgyJZcuWxYknnhitW7eO++67L84999z43e9+F3Xq1ImHHnoozjrrrCo/FgAAWy+TycRjjz0Wffr0iaOOOioaNmwY//jHP2LhwoXx1FNPxTnnnFOrypdN2WmnneJnP/tZPP7447Fw4cL417/+FW3bto0TTjghevfuHf/3f/+3xcdHZOvdcMMN8aMf/Sj+/Oc/x5VXXhl16tSJv/3tb3HqqadGRESTJk3iySefjH79+sVtt90Wv/jFL+Ltt9+OJ554Ivbcc8+tfvx99tknJk2aFF999VWcfvrpW31/NU5Kp79OxYbzjN98882ZiMjcc889aUfKZDLZc/7zbHmeVF42zBvZ8BwBqHksn5JRVlaWmThxYqZv376ZiMgccMABmalTp6Yda7syffr0zLBhwzIRkendu3fmkUceyZSVlaUdq1ba8DqPiMyUKVPSjlMuG99/snIPmA27TfXq1SvlJAAAQG0yb968OPDAA2PYsGGRl5cXkyZNiqlTp8bAgQPTjrZd6du3b0yYMCGef/75aNGiRRx55JHRt2/f+OCDD9KOBonJqgJm4sSJERFx//33xx577BF77bVXyokAAIDa4j//+U95ifDEE0/ECy+8EIMHD67U6aCzzf77719eUi1fvjz69esXzz//fNqxIBFZVcBcf/31EfHf43WMHz8+5TQAAEBtseHsqa1bt45XXnklDj30UMVLJWw4/mavXr1i8ODB8cADD6QdCapdVhUwU6dOjYj/FjFt2rRJNwwAAFDjZTKZuPnmm+OII46IYcOGxbPPPhutW7dOO1aNtMMOO8STTz4Zxx9/fJx44olx5ZVXbnQ6ZKpuxowZMWjQoLRjZDWnoQYAAKiia6+9Nq644oq45JJL4rrrrovc3Kz6jLva1a1bN+6+++7o0qVL/PrXv47i4uL4wx/+kHYsqBYKGAAAgCp444034je/+U1cdtllce2116Ydp9bIycmJSy+9NAoKCuKiiy6KI488MgYMGJB2LNhq6lkAAIBKWr9+fZxyyinRtWvXuOqqq9KOUyudf/75sd9++8Wpp54aq1evTjsObDUFDAAAQCXddNNN8frrr8c999wTdevWTTtOrZSbmxt33313fPLJJ0ouagUFDAAAQCW8++67cfXVV8dFF10Uffv2TTtOrbbbbrvF1VdfHTfffHO8+uqraceBraKAAQAAqIQbb7wxdtxxx/jNb36TdpSs8Mtf/jJ69OjhODvUeAoYAACALZTJZGLixIlx9NFHR1FRUdpxskJ+fn786Ec/ismTJ8e6devSjgNVpoABAADYQrNmzYrPP/88hg0blnaUrDJs2LBYsWJFvPTSS2lHgSpTwAAAAGyhiRMnRr169ZwWeRvbY489okWLFjFx4sS0o0CVKWAAAAC20MSJE2PQoEFRWFiYdpSskpubG0OHDlXAUKMpYAAAALbA2rVr47nnnouhQ4emHSUrDR06NF5//fVYuHBh2lGgShQwAAAAW2Dx4sWxbt266NSpU9pRslLHjh0jImL+/PkpJ4GqUcAAAABsgaVLl0ZERJMmTVLNka02TPcN/weoafLTDpCG2bNnpx2hgu0tT9Ky7fny3bJpnsim5wrA9s9yqXJWrlwZffv2jYYNG6YdJSs1btw49t5771i9enXaUWqk7e31vr3l2RayqoBp3rx5FBUVxQknnJB2lI0UFRVF8+bN046RqO15+pO+2v4aMP8DsL2q7cvg6rRmzZp45ZVXom7dumlHyUp169aNV199NVatWpV2lBple14Pzbb3n6wqYNq2bRuzZ8+uloM2jRkzJu67776YMmVKNST774uibdu21XJf26vqnP5Tp06NX/ziFzFp0qRo2rRpNaSjMubOnRtHH310jB49OvbYY49quc/a/hqozvk/k8nEXnvtFVdccUUcccQRWx8OoBL++Mc/xtSpU+ORRx5JO0pWevTRR+Oaa66J1157LXJycqrlPmv7MhiyXXWuhx544IHxk5/8JE4++eStDxbZ9/6TVQVMxH9nvur4Bz/99NORn58fe+65ZzWkyh7VNf0//fTTiIjYfffds6ox3V4UFRVFRETXrl29Biqhuub/TCYTERHt2rUz/YFtbscdd4zCwkLvPyn5z3/+ExERe+65Z7UVMEDtV13rofn5+dGmTRvLgCpyEF4AAACAhClgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAIiPPvoocnJy4uqrr047Cmxz5n+2BQUMAAAAQMIUMAAAAAAJU8DAFshkMlFcXJx2DNimzPcAAFB9FDAJGDNmTOTk5MTkyZPjpptuio4dO0ZBQUF06dIl7rvvvrTj1XpbO/2nTp0aOTk5MWbMmPjzn/8c3bt3j8LCwrjpppu2Qfqab82aNXH11VdH165do6ioKJo0aRK9evWKX/3qV2lHywpVnf7me6A6WAakyzpoukz/dJn+6TL9t0x+2gFqs8suuyxWr14dZ5xxRhQUFMSdd94ZJ598cnTq1Cn233//tOPVels7/W+99dZYtGhRnH766dGqVavYZZddtkHqmu/nP/953HPPPXHSSSfFRRddFOvXr485c+bE5MmT046WFbZ2+pvvga1hGbB9sA6aLtM/XaZ/ukz/zVPAJGjt2rXx6quvRt26dSMi4uijj44OHTrE7bffbubbBrZ2+n/yySfxzjvvRMuWLZOOWqs88sgjceihh2q6U7K10998D2wNy4Dtg3XQdJn+6TL902X6b56vICXo7LPPLp/xIiLatGkTXbp0iTlz5qSYKnts7fQ/6aSTbIRWQePGjWPWrFnx1ltvpR0lK23t9DffA1vDMmD7YB00XaZ/ukz/dJn+m6eASVCHDh02GtasWbNYtGhRCmmyz9ZO/y5dulR3pKxw6623xpIlS6JXr17RsWPHOO2002Ls2LFRVlaWdrSssLXT33wPbA3LgO2DddB0mf7pMv3TZfpvngImQXl5eZscnslktnGS7LS107+oqKg642SNkSNHxkcffRT3339/HHTQQfHMM8/EEUccEYMGDYp169alHa/W29rpb74HtoZlwPbBOmi6TP90mf7pMv03TwEDVLsddtghTjjhhPjrX/8aH374YVx88cXx3HPPxdixY9OOlhVMfyBN3oMAYNMUMGS1DQccLSkpSTtKrVBaWhpLly6tMCwnJyf22GOPiIhYvHhxCqmyx5ZOf/M9kATLgJrFsoBsZv4nLc6CRFY76aST4tlnn425c+dG+/bt045T461YsSJat24dI0aMiD322CNatmwZc+fOjTvvvDOaNm0ahx9+eNoRa7Utnf7meyAJlgE1i2UB2cz8T1oUMEC1KSoqigsuuCCeeeaZmDRpUhQXF5evjP/617+OnXbaKe2ItZrpD6TJexAAbF5OxtFwquSGG26I3//+947mnJKxY8fGEUccEQsWLIjmzZunHSfrvPPOO9GtW7d47rnnon///mnHyTqZTCZyc3Nj9OjRceqpp6YdB8gyF198cYwdOzbefffdtKNkpbvvvjtOO+20KCsri5ycnLTjZJ3nn38+BgwYELNnz47ddtst7ThZZ+HChdGiRYt49NFHY+TIkWnHyUrNmjWLiy++OC655JK0o9RIjgEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwhQwAAAAAAlTwAAAAAAkTAEDAAAAkDAFDAAAAEDCFDAAAAAACVPAAAAAACRMAQMAAACQMAUMAAAAQMIUMAAAAAAJU8AAAAAAJEwBAwAAAJAwBQwAAABAwhQwAAAAAAlTwACVlpubG3369IlMJpN2lKxUVlYWffr0iaKiorSjALCNFRUVWQanKJPJRJ8+fSI312ZUWvbaa6/IyclJO0bW6tGjRzRs2DDtGDWWdw6g0oqKimLGjBmxcuXKtKNkpZUrV8aMGTMiLy8v7SgAbGO5ubmWwSkqLi6OGTNmRP369dOOkpUaNGgQr732WixfvjztKFkpk8nEyy+/rADbCgoYoNKaNGkSERFLly5NNUe22jDdN/wfAMgelsHpsgxOV2FhYRQUFJj/U7J69eooKSkx/28FBQxQafXr1486derEl19+mXaUrPTVV19FRETTpk1TTgLAtrbDDjtERFgGp+Srr76KunXr+hpwipo2bWr+T8mGdVAFTNUpYIBKy8nJib59+8a0adPSjpKVnn322ahXr1706tUr7SgAbGM9e/aMwsJCy+CUPPvss9G3b19fwUiRddD0PPvss5GTkxN777132lFqLAUMUCXDhg2LSZMmRUlJSdpRss7EiRNj0KBBUVhYmHYUALaxevXqxaBBg2LixIlpR8k6JSUlMWnSpBg2bFjaUbLasGHD4sUXX4xly5alHSXrTJw4Mfbaa69o3rx52lFqLAUMUCXDhg2L5cuXx8svv5x2lKyycuXKmDZtmpU/gCw2bNiwmDZtWqxatSrtKFnlpZdeihUrVlgGp2zo0KGxfv36mDx5ctpRskppaWk89dRT5v+tpIABqmTPPfeM5s2bx5NPPpl2lKzy7LPPxrp16yz8ALLYsGHDYu3atfHss8+mHSWrPPnkk9GiRYvYY4890o6S1Tp06BBdunSxDrqNvfbaa7F48WLroFtJAQNUSW5ubgwZMiQee+yxyGQyacfJGo8//ni0b98+OnfunHYUAFLSpUuXaNeuXTz22GNpR8kamUwmHn/88RgyZEjk5tqEStvQoUNjwoQJUVpamnaUrPH4449H48aNo2/fvmlHqdG8ewBVdtJJJ8Ubb7wRf/vb39KOkhXefvvtGD16dJx44okO/geQxXJycuKkk06K0aNHx+zZs9OOkxUeeOCBeOONN+LEE09MOwoRccIJJ8Snn34at912W9pRssKnn34at956axx33HGRn5+fdpwaTQEDVNnQoUPjuOOOi/PPP9/pABNWWloap556anTo0CEuu+yytOMAkLLLLrssdt111zj11FPtBZCw+fPnx/nnnx/HH398DB06NO04xH/PhHTOOefEZZddFh988EHacWq1TCYTZ5xxRjRq1ChGjRqVdpwaTwEDbJU//vGPkZeXF+ecc07aUWq1P/3pTzF9+vS4++67nf0IgCgsLIy77747Xn75ZXsBJOycc86J/Pz8uPXWW9OOwtdcd911seOOO8bpp5/u6/AJuv/++2PChAnxl7/8JRo3bpx2nBpPAQNslebNm8ftt98eDz30UPzrX/9KO06t9MEHH8Tll18e5513Xuy3335pxwFgO7H//vvHueeeG5dffnl8+OGHaceplR5++OF4+OGH489//rNT725nGjRoEH/9619jypQp8de//jXtOLXS/Pnz44ILLojjjz8+hg8fnnacWkEBA2y1Y445Jo444og4/fTT4/nnn087Tq3y6aefxpFHHhmtWrWKa6+9Nu04AGxnrr322mjZsmUceeSR8dlnn6Udp1Z5/vnn42c/+1kceeSRcfTRR6cdh004+OCD47TTTouLLrooJkyYkHacWmXBggVx1FFH2furmilggK2Wk5MTd999d/Tu3TsGDx7soLzV5LXXXot+/frF8uXLY/z48VG/fv20IwGwnWnQoEGMHz8+li5dGn379o0ZM2akHalWeOCBB2Lw4MHRu3fvuPvuux38fjt26623xkEHHRTDhw+P22+/Pe04tcLs2bOjX79+8cEHH8T48ePt/VWNFDBAtdhhhx3iySefjOOOOy5OOOGEuOqqq3wfdyv861//igMOOCDatm0b06dPjx49eqQdCYDtVM+ePWP69Omxyy67xIABA+KRRx5JO1KNlclk4sorr4wTTzwxjj/++HjyySejadOmacdiM+rXrx+PPPJInH/++XHuuefGeeedF+vXr087Vo01adKk2HfffaN+/frxyiuvRL9+/dKOVKsoYIBqU7du3bjnnnti1KhR8dvf/jaOO+64WLVqVdqxapSysrK44YYb4gc/+EEcfvjhMWXKlNhxxx3TjgXAdq5Vq1YxderUGD58ePzgBz+I3//+91FWVpZ2rBpl1apVceyxx8Y111wTo0aNirvvvjvq1q2bdiy2QF5eXvzhD3+IO++8M+64444YMWJELFu2LO1YNUomk4m77rorhg0bFvvuu2+88MIL0a5du7Rj1ToKGKBa5eTkxKWXXhr/93//F48++mh06tQpbr/99li7dm3a0bZrmUwmxo4dG3vuuWdceuml8T//8z/x97//PerVq5d2NABqiHr16sU//vGPuOyyy+KSSy6JPffcM8aNG2eP1O+wZs2auO2226Jjx44xbty4eOihh+LSSy/1taMa6Mwzz4wnnngiXnjhhejYsWPccMMNsXLlyrRjbdcymUw8/fTTsd9++8WZZ54ZZ511VowfPz4aNWqUdrRaSQEDJOLoo4+Ot956Kw455JA4//zzo1OnTnHXXXfFunXr0o62XclkMvHEE0/E3nvvHUcccUQ0bdo0pk2bFtdcc03k5nqLBqBycnNz43e/+11MmzYtmjZtGiNHjoy+ffvGhAkTFDHfsG7duvjLX/4SnTt3jgsuuCCGDh0ab775ZvzgBz9IOxpbYciQITFr1qw45phj4oorrogOHTrELbfcEqtXr0472nbn2WefjYEDB8aQIUMik8nEk08+Gbfddlvk5+enHa3WsnYPJKZjx45x3333xdtvvx0DBgyIs846K7p27Rr33HNP1u8RU1ZWFk899VTst99+cdhhh0VhYWFMnjw5pkyZEgMGDEg7HgA13IABA2LKlCnxzDPPRN26deP73/9+7L///vH0009n/VeT1q5dG3fffXd06dIlzj777BgwYEC8/fbbMWbMmOjYsWPa8agGO++8c9x5553x3nvvxeGHHx6/+tWvomPHjnHbbbdl/dfjM5lMPP/88zF48OAYNGhQrFy5Mh577LF46aWXYsiQIWnHq/UUMEDiunbtGg8++GDMnDkz9tprrzj11FOjefPmccwxx8T9998fixcvTjviNrF69ep4/PHH44wzzoidd945hg4dGmVlZfHkk0/Gc889FwceeGDaEQGoZQ466KB4/vnnY+LEiVFaWhpDhgyJnXfeOc4444x4/PHHY82aNWlH3CYWLVoU999/fxxzzDHRvHnzOO2002LvvfeON998Mx588MHo2rVr2hFJQPv27WP06NHx7rvvxiGHHBIXXHBBNG/ePEaOHBl33313fPnll2lH3CbWrVsXTz/9dJx77rnRvn37GDBgQCxYsCAeeeSReO211+Kwww7zlbttJCdjX8QqueGGG+L3v/99LFq0KO0oWWns2LFxxBFHxIIFC5wWrQaaPXt2/Otf/4px48bFK6+8Enl5edG/f/8YMWJEjBgxIjp16pR2xGqzYMGCePzxx2PcuHHx5JNPxqpVq6Jjx44xcuTIGDlyZAwYMMACD6hRLr744hg7dmy8++67aUehkjKZTDz33HMxduzYGDt2bHzwwQdRVFQUQ4cOjREjRsRhhx0WLVq0SDtmtXn//fdj3LhxMW7cuHj++eejtLQ0+vbtGyNGjIijjjoqunXrlnZEtrEPP/wwHn744Rg3bly8+OKLkclkYp999ilfB+3WrVutWS9bsmRJTJgwIcaNGxcTJkyI5cuXR9u2bcuf6+DBg33dPQUKmCpSwKRLAVN7zJs3Lx577LEYN25cTJo0KdauXRudOnWK3r17R8+ePaNHjx7Rs2fP6Ny5c9SpUyftuN+qrKwsPvnkk3jrrbdi1qxZ8dZbb8Vbb70VM2fOrLBwHzlyZOy22261ZuEOZB8FTO2QyWRi9uzZ5QXFyy+/HDk5OeXL368vg9u2bbtdb6iVlJTEnDlzKiyDZ86cGe+//34UFBTEwQcfHCNHjozhw4dH69at047LdmJTH5K1a9cuvve975XP+z169IiuXbtGQUFB2nG/VSaTic8++6x83t/w8/XXX4/169dHnz59ytdBe/fubR00ZQqYKlLApEsBUzutXLkynnrqqZgyZUrMmjUrZs2aVb5raJ06daJr167lC8QuXbpE8+bNo1mzZtGsWbPYYYcdoqioKLFs69ati8WLF8eiRYvKf3744YflC7pZs2aVH2W/YcOG5QvtffbZJ4YPH+5U0kCtoYCpnb788st47LHH4uWXXy5ftq1YsSIiIurXrx89evQoXwZ36NChfNm74WeSp2tetWpV+bJ30aJFsXDhwnjvvffKc7777rtRUlISERE77rhj+TJ40KBBMWTIkKhfv35i2agd1qxZE5MnT45JkyaVFxjz5s2LiP+e4rpz587l89Vuu+0WLVq0qPAaKCoqSqzYKCkpicWLF1d4DXz00UcVCpfly5dHxH9fq927d4+ePXtG3759Y/jw4bHzzjsnkouqUcBUkQImXQqY7LFw4cLyguPrrf6mjhtTWFhYYWG44Xq9evUiPz8/6tSpE/n5+ZGfnx9NmjSJZcuWxfr166OkpCTWr18f69evj7Vr18aSJUsqFC2LFi2K4uLijR6vqKgounfvXuFTkp49e8bOO+/s0wW2uUwmEytWrKgw3y5evDiKi4srzOMbNlJKS0vLXw9ff200btx4o9dQkiuW1DwKmOyw4VP1ry97NyyPN3U2mQYNGlR432jWrFk0bdo0CgoKNnqvady4cSxdurTC+9L69etj9erVFZa/G35u6jg1O+ywQ4Vl74aCyHoh1WXJkiXl8/zXXwNfffXVRuMWFBRUKCQ3vBaKiorK5/+vL2dXrFhRPv9/cx30m8vxDeXKNx9vwzro118D7dq12673ViPC+aWA7Vrz5s1j4MCBMXDgwPJhmUwmli5dutEK2qauf/zxx7FmzZqNVvJ69+4db7zxxkYbn3Xr1o2mTZtGs2bNolOnThttiH5zwWohx7aQyWRi3rx55St/s2fPjgULFlSY1xcvXlxernzT11f86tSpE02bNo3ly5dXWPErKSmJ0tLSTd6+oKBgo9dAq1atKqz42eiB2iUnJyd22WWX2GWXXeLQQw8tH15WVrbRMndTy+EFCxbEe++9F+vWrdtoGbz77rvHzJkzN1oGb/ggpXXr1tGzZ89Nfqiy4WeTJk0UwySqadOm0b9//+jfv3+F4cuWLfvO9c9FixbFG2+8EWvWrNnoQ5Du3bvHrFmzNiomNyyfmzVrFu3bt9/s+mezZs0iLy8vpSnD1lDAADVOTk5ONG3aNJo2bep0kdQ6CxcujDfffHOj4wktW7YsIv6759Vuu+0WrVu3jl133TX22muvb11B22GHHaJBgwZbvJFSVlYWK1as2OwK5Ybrzz//fIwePbq89GnZsuVGn0b36tUrGjVqlNi0Ara93NzcaNGiRa06WC9URuPGjaNx48bRoUOHtKNQAylgACBFmUwm3nzzzRg3blyMHTs2XnvttYiIqFu3bnTr1i169OgRhx12WHmx0b59+8T2vMrNza3UimVJSUm8//77FXbNfvrpp+OOO+6I0tLSyMvLiwMOOKD8jAtWVgGAbKaAAYBtrKSkJKZNm1Z+9pGPPvooGjZsGIceemicd9550bdv3+jYsWPk52/fi+k6depEt27dolu3bnH00UeXD1+7dm28++678eKLL8b48ePj0ksvjQsvvDB69uxZXsbsvffevsIHAGSV7XvNDgBqkU8//TRGjRoVDz74YCxbtix22WWX8kJi0KBBiZ5FZFsqKCiI3r17R+/evePMM8+M4uLieOqpp2LcuHFx1113xXXXXRetWrWK0047LS666KJo2rRp2pEBABLnoycASNgXX3wR5513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ZOTmWiwCAJCM/LQDwLZUr169OPbYY+PYY4+Nzz77LB566KGYNGlSXHvttXHZZZdFkyZN4qCDDorBgwfHwQcfHJ07d/ZJONRAX375ZTzzzDMxadKkmDRpUnz66aeRn58f++yzT5x//vlx5JFHxu677552TAAAsogChqy18847xwUXXBAXXHBBlJSUxCuvvFK+sXb++efH+vXrY5dddomDDz44Dj744Nh///2jbdu2ChnYDi1YsCBeffXV8tfwm2++GRERPXv2jB/84Adx8MEHxwEHHBANGzZMOSkAANlKAQMRUadOndh///1j//33j6uuuipWrFgR06ZNK9+Yu/feeyMiomHDhtG9e/fo2bNn9OjRo/xn69atFTOwDSxZsiRmzZoVs2bNirfeeqv8+ldffRURUV6aXnrppXHQQQdFq1atUk4MAAD/pYCBTWjYsGEcdthhcdhhh0VExPz58+Pf//53+Qbff/7zn3jwwQdj9erVERHRtGnTCoXMhp8tWrRI82lAjVVcXBxvv/12+WvurbfeirfeeivmzZsXERF5eXnRuXPn6NmzZ5x11lnRs2fP2H333aNTp07KUAAAtksKGNgCrVq1iu9///vx/e9/v3xYaWlpzJ07t8IG4gsvvBB33313lJSUREREy5YtNypmOnXqFC1atHCwT7JeJpOJZcuWxYcffrjRXi0fffRRRETk5OREhw4domfPnnHyySeXv5a6du0aBQUF6T4BAACoBAUMVFFeXl506tQpOnXqFEcccUT58JKSknj//fcrFDNPP/103HHHHeVnWcrPz4/WrVvHTjvt9K2XNm3aRJMmTXyaT41UXFwc8+bN+87Lhr3IIiLatm0bPXr0iGOOOaa8sOzWrVsUFRWl+EwAAKB6KGCgmtWpUye6desW3bp1i2OOOaZ8+Nq1a+Odd96JuXPnbrQROm3atJg3b14sWrSown0VFhZutqTZcHFgUbaVNWvWxBdffPGdxcry5csr3K5hw4bl82vbtm1jn332qfB79+7do1GjRik9KwAASJ4CBraRgoKC2H333Td76ts1a9bE/PnzyzdiP//88wobtTNnzvzWjdvWrVtHkyZNonHjxtGoUaNK/axfv749bbJAJpOJNWvWxPLly2PZsmWV+rl06dKYP39+LF68uMJ9frMk7N27d7Rp06bCsNatWysJAQDIegoY2I4UFhZG+/bto3379psdr7i4eJN7ISxbtqx8g/mzzz6rsAFdXFz8rfeXm5sbjRo1qlRxU1hYGHXr1i2/FBQUbPb3vLw8Jc93KCsri7Vr18a6desqXL45bMPva9eujRUrVlSqSNlwfKJNqVevXoX/8YbrO+64YzRu3DhatWq10d5XviYHAABbRgEDNVCDBg2ic+fO0blz5y2+TWlpaaxYsWKjDfLNbax/+eWXMWfOnArD165dW6XMOTk5G5UyW1LcbGpYnTp1IicnJ3JyciI3N7fCz2+7/s1hDRo0iOLi4shkMlFWVlbh57dd39Sw0tLSzZYkW1KkbLhsOEZQZeXl5UXjxo03Ksl23nnn6N69+xaVag0bNoy6detW6fEBAIDvpoCBLJGXlxdNmjSJJk2abNX9bNjrYu3atd9ZKFT2928OW7VqVSxZsmSjv5eUlJQXIVUtUPbaa6949dVXq1zgbLiel5dXXhB9syhq0KBBpcqmqhRUDRs2jHr16tkLBQAAtnMKGKBSCgoKnP4XAACgknLTDgAAAABQ2ylgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAAAgYQoYAAAAgIQpYAAAAAASpoABAAAASJgCBgAAACBhChgAAACAhClgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAAAgYQoYAAAAgIQpYAAAAAASpoABAAAASJgCBgAAACBhChgAAACAhClgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAAAgYQoYAAAAgIQpYAAAAAASpoABAAAASJgCBgAAACBhChgAAACAhClgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAAAgYQoYAAAAgIQpYAAAAAASpoABAAAASJgCBgAAACBhChgAAACAhClgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAAAgYQoYAAAAgIQpYAAAAAASpoABAAAASJgCBgAAACBhChgAAACAhClgAAAAABKmgAEAAABImAIGAAAAIGEKGAAAAICEKWAAAAAAEqaAAQAAAEiYAgYAAAAgYQoYAAAAgIQpYAAAAAASpoABAAAASFh+2gFqqkaNGsWuu+6adgwAyDqNGzeOevXqpR0DAKBS7AFTRQ0aNIgZM2bEihUr0o4CAFll5syZkZeXl3YMAIBKUcBUUZ8+fSIi4t577005CQBkj+nTp8dbb70Ve+21V9pRAAAqRQFTRd27d4+f//zn8etf/zrmzp2bdhwAqPXWrl0bp5xySuy5557xk5/8JO04AACVooDZCqNGjYrmzZvHqaeeGqtXr047DgDUWplMJi6//PKYM2dO3HPPPZGf7zB2AEDNooDZCg0bNox77rknXnrppdhrr71i5syZaUcCgFrnq6++ihEjRsTNN98c1157bfTq1SvtSAAAlaaA2UqDBw+O1157LfLz82PvvfeOW2+9NcrKytKOBQC1wsSJE6N3794xffr0GD9+fPzqV79KOxIAQJUoYKpBjx49Yvr06XH22WfHhRdeGAMHDozx48crYgCgimbMmBHHH398HHroobHHHnvEzJkzY/jw4WnHAgCoMgVMNSksLIxbbrklnnrqqVi3bl2MGDEiunXrFnfccUesXLky7XgAsN0rLS2NRx99NA444IDYa6+94sUXX4w777wzHn/88WjVqlXa8QAAtooCppodcsgh8fLLL8cLL7wQvXv3jnPPPTd22WWXuPTSS2P27NmRyWTSjggA25Uvvvgi/vjHP0aXLl3iyCOPjLKysnjooYdizpw5ceaZZ0ZurtUVAKDmcwqBBOTk5MR+++0X++23X3z00Udx2223xZ133hk33HBDdO7cOUaMGBEjRoyI/fbbz1kcAMg6mUwmZs2aFePGjYtx48bF9OnTIy8vL4455pj4+9//Hn379k07IgBAtcvJ2CVjm1i9enU888wzMW7cuBg/fnzMnz8/mjVrFocddliMGDEihgwZEg0bNkw7JgAkoqSkJJ5//vny0uXDDz+M+vXrx7Bhw2LEiBFx2GGHRbNmzdKOyRa4+OKLY+zYsfHuu++mHQUAahS7X2wj9erVi+HDh8fw4cOjrKwsXn311fKV0P/3//5f5OXlxe677x777rtv7LfffrHvvvtG+/btIycnJ+3oAFBpCxcujJdeeilefPHFeOmll+LVV1+NVatWxU477RQjRoyIkSNHxqBBg6KwsDDtqAAA24Q9YLYDH374YTz99NPlK6pz5syJiIhWrVrFvvvuW17K9OnTx4oq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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import Rewriter\n", - "\n", - "# Apply rewrite rule for prepositional phrases\n", - "\n", - "rewriter = Rewriter(['prepositional_phrase', 'determiner'])\n", - "rewritten_diagram = rewriter(diagram)\n", - "\n", - "rewritten_diagram.draw(figsize=(11,5), fontsize=13)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will now ask `lambeq` to normalise the diagram, by \"stretching\" the wires and re-arranging the boxes if required:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5cAAAGjCAYAAAC44eF3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvX0lEQVR4nO3deXxU9b34//cQghBlX1SUSEGloiigVq02QbTgQgGFqrHW61or1apfW7Wlj15wo1SvWrXVWm/BVo1WKyguuIGARa0CWrziFQSFPlzYlX0J8/vj/khF1AIfkkOS5/PxyEMZhsx75uScnNeZmTO5fD6fDwAAAEhQL+sBAAAAqPnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnEJQAAAMnqZz3A9jR37txYuHBh1mNsF61atYri4uKsx6hRatPyp26z/m8d6z5QG9j2b73atP2vLcu/1sTl3LlzY7/99ouVK1dmPcp2UVRUFDNmzKgVP2TVobYtf+o26/+Ws+4DtYVt/9apbdv/2rL8a01cLly4MFauXBn33ntv7LffflmPk2TGjBlxxhlnxMKFC2v8D1h1qU3Ln7rN+r91rPtAbWDbv/Vq0/a/Ni3/WhOXG+23337RvXv3rMcgI5Y/1E3WfYC6yfZ/x+KEPgAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTlwAAACQTl1vgvffei1wuF0OGDMl6FNghjBw5MnK5XLzwwgtfeRlATfLCCy9ELpeLkSNHZj0KUAPZhtShuNy4sG+88casRwEAAKh16mc9AADAjqCkpCRWrVoVhYWFWY8CUCPVmWcuAQC+Sr169aJhw4ZRUFCQ9ShADbJs2bKsR9hh1Om4XL9+fQwfPjw6d+4cDRs2jJYtW8ZJJ50U06dP/9J/8/jjj8ehhx4aDRs2jN133z1++tOfxvr16ze5To8ePaJ9+/bxwQcfRFlZWTRv3jyKioqid+/e8c4771T13aIOe//99yOXy8V//ud/bnJ57969I5fLxc0337zJ5Ycddljst99+ERHx9ttvx6BBg2L//fePxo0bR1FRURx88MFx9913J8103XXXRS6Xi4svvjg2bNgQERFPPPFElJaWRqtWraJRo0ZRXFwcJ598svUDyNTn3y/12T+PGDEi9t9//9hpp51ir732il//+tfZDgt8pY3ngnjuuediyJAhsddee8VOO+0UBx54YDzwwAObXPeZZ56JU089NTp06BCNGjWKZs2aRa9evWLChAmbfd+N+/mzZ8+OgQMHRosWLaJJkyZfOcs999wThYWFMXDgwFi9evV2vZ87mjodl9/73vfiqquuij333DNuuOGG+OEPfxjjx4+PI444IqZNm7bZ9Z988sk455xz4vjjj4+bb745DjrooLjxxhu/8BfMihUroqSkJAoKCuL666+Piy66KF544YXo169fVFRUVMfdow7aa6+9okOHDjFu3LjKy9auXRsvvvhi1KtXb5PLP/3005gyZUr07NkzIv5vJ2rixInRp0+fuOGGG+Kaa66JwsLCOP/882PYsGFbPUtFRUVceOGF8Ytf/CKGDRsWt912W9SrVy8mTJgQffv2jaVLl8bPfvazuP322+P888+PRYsWxaxZs9IfBIDt7M4774yrr746ysrK4r/+679i9913jyuvvDLuv//+rEcD/o0rr7wyHnjggRg0aFBcffXVsXbt2igrK9vkpDsjR46MxYsXx5lnnhm33XZbXHbZZTFjxow45phjYtKkSZt9z+XLl0dpaWnUr18/rrvuuq886ef1118fZ511VlxwwQXxl7/8JRo2bFgF93IHkq8lpkyZko+I/JQpU77w78ePH5+PiPwNN9yQz+fz+WeeeSYfEflTTjklv2HDhsrrvf766/mCgoL8UUcdVXnZnDlz8hGRLyoqys+ZM6fy8g0bNuT333///G677bbJbZWWluYjIj98+PBNLv/1r3+dj4j82LFjk+4Lm/OY/ct5552XLywszK9YsSKfz+fzEyZMyEdE/owzzsg3btw4v27dunw+n88/9thj+YjIP/zww/l8Pp9fvnz5Zt+roqIiX1pamm/SpEl+7dq1lZePGDEiHxH58ePHf+FlK1euzPfv3z9fWFiYv+eeezb5npdddlk+IvIff/zx9r7rtYKf5a3j8WJ72rivMGLEiE3+vPvuu+eXLl1aeb0VK1bkW7VqlT/88MMzmpTaxrZs6/27x2zjfklxcfEm6+/SpUvzxcXF+ebNm+dXrlyZz+e/eB/oo48+yrds2TJ//PHHb3L5xv38wYMHb/ZvPrsNqaioyA8aNCgfEfnrrrsu6b7UJHX2mctRo0ZFRMTgwYMjl8tVXn7QQQfFd77znXjxxRdjwYIFm/yb/v37R/v27Sv/nMvl4uijj46PPvooli9fvsl169WrFz/+8Y83uWzjM0QzZ87cnncFNtGzZ89Yt25d5ZG2cePGRZs2beKSSy6JZcuWxauvvhoREePHj6/8GY6I2HnnnSu/x+rVq2PRokWxePHi6NWrV3z66afx9ttvb9HtL168OL797W/Hc889F2PGjIkzzzxzk79v2rRpRET89a9/3ewl5QA7orPPPrty2xURUVRUFIcffrjf51ADXHjhhZusv02bNo0f/vCHsWTJksqPT/vsPtDy5ctj0aJFUVBQEIcddli88sorX/h9f/KTn3zpba5evToGDhwYd911V4wcOTJ+/vOfb587UwPU2bicM2dO1KtXr/L9Zp+1//77V17nszp06LDZdVu2bBkREYsWLdrk8rZt2272tPeXXRe2p40HMTa+BHbcuHFx9NFHR/fu3aN58+abXH7QQQdFixYtIuL/NqY/+clPori4OBo1ahStWrWK1q1bx+DBgyMiYsmSJVt0+2eddVZMnjw5nnrqqejdu/dmf3/RRRdFt27dYtCgQdGiRYs44YQT4tZbb93sYA7AjuLLfv/7fQ47vi/a1+/cuXNERMyePTsiIt5999047bTTonnz5tG4cePKfaAnn3zyC/d/WrduHc2aNfvS27ziiiti1KhRcc8998R//Md/bJ87UkPU2bjcFl919rh8Pr/N14Xtadddd43OnTvHuHHjYuXKlfHKK69Ez549o169elFaWhrPP/98LFq0KP7xj39UhmhExOmnnx433XRTnHDCCXHffffF2LFj49lnn43LLrssIqLyZDz/zqmnnhr16tWLa665JlatWrXZ37ds2TJeffXVGD9+fFx88cWxbNmyuOyyy2LfffeNl156afs8CADbkbPHQu21fPnyKCkpibFjx8Yll1wSDz/8cDz99NPx7LPPRs+ePb9wv72oqOgrv2f//v2jqKgobrjhhjp3EKrOxmWHDh1iw4YNMWPGjM3+7q233oqIiK997WvVPRZsFz179oypU6fGmDFjYu3atXHMMcdERMQxxxxT+axiPp+vjMulS5fG448/Ht///vfjzjvvjNNPPz169+4dxx57bDRo0GCrbvt73/te3HvvvTFu3Ljo06dPrFy5crPrFBQURI8ePeK6666LSZMmxbRp02L58uVx7bXXpt95AID/31ft63fo0CGef/75+OCDD+Lmm2+OIUOGxIABA6JXr15x7LHHxooVK7bpNnv27BlPPPFEzJw5M44++uiYP39+0n2oSepsXPbv3z8iIoYNG7bJEYk333wzHnvssTjqqKOidevWGU0HaXr27BkbNmyIoUOHRnFxcXTs2LHy8jVr1sSwYcOifv36UVJSEhH/Oir/+aNzH3744TZ9FMlpp50W5eXlMWnSpDj++OM3eU/ywoULN7v+17/+9WjUqFEsXrx4q28LAODL3HHHHfHJJ59U/vmTTz6JO++8M5o1axalpaVfug/0zDPPfOn7LbdEjx49YuzYsfHee+9VnqOlLqif9QBZ+fa3vx2nnHJKPPDAA7FkyZLo06dPfPTRR/Hb3/42GjZsGLfeemvWI8I269GjR9SrVy9mzJgRZ511VuXlnTt3jt122y3eeuutOPzww6Nx48YREdG4cePo1atX3HvvvdGoUaM49NBD4/3334/f//738bWvfW2bXtIxcODAKCwsjFNOOSV69+4dTz31VDRp0iTOP//8+Oc//xm9evWKvfbaK1atWhUPPvhgLFu2bLOT/wAApGjVqlUcdthhcfbZZ0dExIgRI2Lu3Llx9913R1FRURx11FGx2267xeWXXx7vvfde7LnnnvH666/Hn//85+jSpUtMnz59m2/7qKOOimeeeSaOO+646NGjR4wbNy7atm27ve7aDqnOPHO58WjEZ983cd9998WvfvWreP/99+Pyyy+P3/3ud1FaWhovvfRSdOvWLatRIVnz5s2ja9euERGbvK/y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82c/+1m0bds26xGpQpZ/3Wb5A/xLLl8X32m6jV5++eU44ogjYvr06XHAAQdkPQ7VbOTIkXH22WfH+vXrv/SN29ReV155ZTzyyCN18rTiRPTt2zciIh577LGMJyEL++yzT5x88skxfPjwrEehmlVUVET9+vVjxIgRcdZZZ2U9DtXszTffjC5dusRLL70Uhx9+eNbj1AjecwkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAECy+lkPUJMUFBRESUlJ5PP5rEchA4WFhVFaWpr1GGSkZcuW0aVLl6zHICN77rln1K/vVybURaWlpVFYWJj1GGQgn89HSUlJFBQUZD1KjeGZy61Qv379mDhxYqxduzbrUcjAsmXL4sUXX7SBqaOWLVsWU6ZMyXoMMjJr1qz48MMPsx4DqGYFBQUxadKkWL58edajkIE1a9bExIkTHVzYCuJyKzRs2DAiIlatWpXxJGRh9erVsdNOO2U9Bhlp2LChdb8OW7NmjfUf6ijb/7pr9erVERG2/1tBXG6FNm3aRETExx9/nPEkZOGjjz6KXXfdNesxyEibNm1i0aJFsW7duqxHIQPWf6i72rRpY9+vjvroo48iImz/t4K43AotWrSIRo0axbx587IehQzMnTs32rVrl/UYZKRdu3axYcOG+OCDD7IehWqWz+dj7ty5UVxcnPUoQAbatWsXc+fOzXoMMjBv3rwoKiqK5s2bZz1KjSEut0Iul7OBqcPmzZsnLuuwjcvewaW6Z9GiRbF69WrrP9RR7dq1s+2vozY+sZDL5bIepcYQl1upuLjYBqaO8sxF3bYxLBxcqns2LnPrP9RNxcXFtv111Lx582z7t5K43EqdOnWKN954I+sxqGaLFy+OefPmRadOnbIehYw0adIk2rZta/2vg954443I5XKx9957Zz0KkIFOnTrF3LlzY8mSJVmPQjV744037PttJXG5lUpLS2PmzJlOSV/HTJo0KfL5vM+5rONKSkpiwoQJWY9BNZswYUJ07do1mjVrlvUoQAZKS0sjn8/HpEmTsh6FavTBBx/ErFmz7PttJXG5lUpKSiIi7GDWMRMmTIji4uJo37591qOQodLS0njttdd83lkdM2HCBDsXUIe1b98+2rVrZ9+vjtm4vDfu+7NlxOVW2nXXXePrX/96vPDCC1mPQjWyc0lERI8ePaKioiL+9re/ZT0K1WTu3Lnx3nvvWf+hDsvlclFaWmrfr46ZMGFC7LfffpUfRciWEZfboHfv3jF69Gifd1dHzJo1K6ZOnRq9evXKehQy1qlTpyguLo6HH34461GoJg899FA0aNBAXEId17t375g6dWq8++67WY9CNVi7dm2MGjXKvt82EJfb4Nxzz42PP/44xowZk/UoVIO77747mjVrFgMGDMh6FDKWy+Xi3HPPjfLy8vj000+zHocqls/n46677ooBAwb4jDOo404++eRo2rRp3H333VmPQjUYM2ZMzJ8/P84777ysR6lxxOU26NKlSxxxxBFx1113ZT0KVWzt2rUxYsSIOPPMM6NRo0ZZj8MO4JxzzolVq1ZFeXl51qNQxSZOnBjvvPNOXHDBBVmPAmSsqKgozjzzzBgxYoRXrtUBd911V3zzm9+MAw44IOtRahxxuY1+8IMfxDPPPBMzZ87MehSq0KhRo2L+/Plx/vnnZz0KO4g999wzTjzxxLjzzjsjn89nPQ5V6I477oh9993XyRyAiIg4//zz4+OPP45Ro0ZlPQpVaObMmfHMM8/ED37wg6xHqZHE5TY65ZRTom3btnHVVVdlPQpVZM2aNTF48ODo3bu3I1ds4vLLL4/XX3897r///qxHoYq8+uqr8eCDD8bll18euVwu63GAHUCXLl2iV69eMXjw4FizZk3W41BFrrzyythzzz3jlFNOyXqUGklcbqOioqIYPnx4PPLII84eVkvdeuut8d5778VNN92U9SjsYEpLS+Pkk0+OK6+8MlasWJH1OGxn+Xw+LrnkkjjwwAPj3HPPzXocYAdy0003xZw5c+K2227LehSqwPjx42PUqFExfPhwb4faRuIywemnnx5HHHFEXHLJJVFRUZH1OGxHH3/8cVxzzTUxaNCg6Ny5c9bjsAO64YYbYuHChTF8+PCsR2E7Ky8vj5deeiluueWWKCgoyHocYAey//77x4UXXhhXX311fPzxx1mPw3ZUUVERl156aXzzm9+MsrKyrMepscRlglwuF7/5zW9i+vTpcfXVV2c9DtvJhg0b4pxzzokGDRrEkCFDsh6HHVSHDh3iJz/5SfzqV7+KV155Jetx2E7mzp0bl1xySQwYMCCOPvrorMcBdkBDhw6NBg0axDnnnBMbNmzIehy2k6FDh8abb74Zt9xyi7dDJBCXiQ499NC49tpr4+qrr47HH38863HYDq6++up46qmn4r777osWLVpkPQ47sF/+8pdxyCGHxIABA2L+/PlZj0Oi1atXx8CBA2PnnXeO3//+91mPA+ygWrRoEffee2889dRTcc0112Q9DtvBmDFj4pprrolrr702Dj300KzHqdHE5XZw1VVXRd++feOMM86IWbNmZT0OCZ544okYOnRoXH311dG7d++sx2EH16BBg3jooYdi3bp1ceqpp8b69euzHokEP/7xj+Mf//hH/PWvf42WLVtmPQ6wAzvuuONi6NChMXTo0HjyySezHocEs2bNiu9///vRr1+/uPLKK7Mep8YTl9tBvXr14k9/+lO0bt06TjjhhJg3b17WI7ENJk+eHKeffnp85zvfiZ///OdZj0MNsccee8Rf/vKXmDRpUpxzzjkCswbK5/NxzTXXxB/+8If43e9+FwcffHDWIwE1wODBg+PEE0+MsrKymDx5ctbjsA3mzZsXxx9/fLRp0ybuueeeqFdPGqXyCG4nTZs2jbFjx8aaNWuipKQk5syZk/VIbIXx48dHr169omvXrnHffffZuLBVSktL49577437778/Tj/9dB+wXYPk8/kYPHhw/PKXv4xrrrkmzjnnnKxHAmqIevXqxf333x9du3aNXr16+fSAGmbOnDlRUlIS69ati7Fjx0bTpk2zHqlWsAe9HXXs2DEmTZoUBQUFUVJSEu+8807WI7EFxo4dGyeccEJ885vfjKeeeioaN26c9UjUQKeddlo89NBDMXr06Bg4cKDPQKsB8vl8XH755TFs2LC48cYb4xe/+EXWIwE1TOPGjeOpp56KI444Io4//vh4+umnsx6JLfDOO+/Et771rahfv35MnDgxOnTokPVItYa43M6Ki4tj4sSJscsuu8Rhhx0Wo0ePznokvsSGDRviV7/6VfTp0yeOPfbYeOyxx6KoqCjrsajBTjrppBg9enQ8/fTTceSRR8bs2bOzHokvsWjRoujbt2/cfPPNcfvtt8fll1+e9UhADVVUVBRjxoyJY445Jk488cQYPny4s8juwEaPHh2HHXZYNG7cOCZMmBDFxcVZj1SriMsq0LZt25g8eXL06NEjTjrppLj00ktj7dq1WY/FZyxYsCBOPPHE+NnPfhZXXHFFPPLII9GwYcOsx6IWOOGEE+LFF1+MJUuWRLdu3eLhhx/OeiQ+Z/LkydGtW7eYPHlyjBkzJn70ox9lPRJQwzVs2DBGjRoVP/3pT+Oqq66KPn36xIIFC7Iei89Ys2ZNXHLJJXHSSSfF0UcfHZMnT462bdtmPVatIy6rSPPmzeORRx6JW2+9Ne6444448sgjY8qUKVmPVefl8/l49NFHo2vXrvHaa6/F2LFj4/rrr4/CwsKsR6MWOeSQQ2Lq1KnRu3fv+O53vxsXXHBBLFy4MOux6rwVK1bE0KFDo6SkJIqLi+P111+PPn36ZD0WUEsUFhbGsGHD4qmnnopXX301unbtGo899ljk8/msR6vzpkyZEkceeWTceeedcdttt8Vf//rXaN68edZj1Urisgrlcrm4+OKLY/LkybFy5co45JBD4vTTT3eyn4y8/PLLUVJSEv37948DDjgg3njjDR83QpVp2rRpPPjgg3HHHXfEAw88EB07dozrr78+Vq5cmfVodc769evj7rvvjn322Seuu+66uOqqq2L8+PHRrl27rEcDaqHjjjsuXn/99TjggAOiX79+UVJSEi+//HLWY9VJs2fPjrKysjjkkENi1apVMXny5Ljooosil8tlPVqtJS6rwcEHHxxvvPFG3H333TFhwoTo1KlTXHrppZ7JqCbvvPNODBgwII444ohYtmxZjB07NsaOHeulEFS5XC4XP/zhD+Pdd9+Ns88+O4YMGRL77LNP/Pd//7ePLKkG+Xw+HnvssTjwwAPj/PPPjx49esTbb78d1157rVcrAFVqjz32qNzf+PTTT+OII46IgQMHOtljNVm4cGFceuml8fWvfz0mTpwYd999d7zxxhs+aqoaiMtqUr9+/Tj33HNj5syZMWTIkPjjH/8YHTt2jGHDhsXSpUuzHq9WmjdvXgwaNCg6d+4cr732WvzpT3+qfKmiI1ZUp1atWsUtt9wSb7/9dpSUlMR5550XBx10UIwePVpkVoF8Ph+TJk2K0tLS6NevX+y+++7x2muvxf333++MgEC1yeVy0bt375g6dWrcc8898fe//z06d+4cgwYN8pnoVWTp0qUxbNiw6NixY4wYMSKGDBkSM2fOjHPPPTfq16+f9Xh1Qi7vheCZWLBgQVx77bVxxx13RC6XixNOOCHKysqiT58+zliaYOHChfHwww9HeXl5TJo0KZo2bRqDBw+Oiy66yAl72GG89tprccUVV8T48eNj1113jVNOOSXKysri8MMPd+AjwZtvvhnl5eXxwAMPxOzZs+PAAw+M4cOHO6BEsn322SdOPvnkGD58eNajUIOtXr06br/99rjuuuvik08+iW9961tRVlYWAwcOjFatWmU9Xo21cuXKePzxx6O8vDyefPLJyOfzMWjQoPjFL37hcc2AuMzYBx98EA8++GCUl5fHq6++Grvsskv069cvysrKolevXl66tQWWLVsWo0ePjvLy8nj22Wcjn8/HscceG2VlZXHSSSdFkyZNsh4RNpPP5+O1116L8vLyePDBB+ODDz6I9u3bx2mnnRZlZWXRpUsXQbQFZs+eHQ888ECUl5fHm2++Gc2aNYsBAwZEWVlZ9OjRIwoKCrIekVpAXLI9ffrppzFq1KgoLy+P5557LnK5XHz729+OsrKy6N+/v8/b3gJr166NZ599NsrLy+PRRx+N5cuXx6GHHhplZWVx6qmneutThsTlDmTWrFmVO0lvvfVWtGjRIgYOHBhlZWVRUlIS9ep5FfNGq1evjieffDLKy8vj8ccfj9WrV8dRRx0VZWVl8d3vfjdat26d9YiwxSoqKmLSpElRXl4eDz/8cCxevDg6d+4cZWVlcdppp8Xee++d9Yg7lA8//DD+8pe/RHl5ebzyyitRVFQUffv2jbKysujdu3fstNNOWY9ILSMuqSrz58+vfMXViy++GA0bNow+ffpEWVlZnHDCCV519Rl+V9YM4nIHlM/nY/r06VFeXh7l5eXx/vvvR9u2baOkpCS6d+8e3bp1i27dukXLli2zHrVa5PP5+Oc//xnTpk2LadOmxdSpU+OFF16ITz/9NLp161Z5lMqH4FIbfPZo7OjRo2PFihXRrVu3OOywwyrX/wMOOKDO7HCsX78+3n777Zg6dWpMmzYtXn311XjppZeioKAgjj/++DjttNOib9++sfPOO2c9KrWYuKQ6zJ07t/LVbNOmTYsmTZpEjx49Krf93bt3jz322KPOvKpl0aJFm+z7TZw40at8agBxuYPL5/Px8ssvx0MPPRR///vf4/XXX48VK1ZERERxcXHlxmbjf9u2bVujV7INGzbEu+++W7kjufG/G8+s26pVq+jWrVsceeSRcdppp0WnTp0ynhiqzsqVK+OJJ56IMWPGxNSpU2PGjBmxYcOGqF+/fnTu3HmT9b9r1641/qVUq1evjunTp2+y/k+fPj1Wr14dERF77713dOvWLXr16hUDBgzwGWVUG3FJdfvf//3feOCBB+Jvf/vbF+4HfXbfr2PHjjX61W35fD4++OCDzfb95s6dGxERO++8c3Tt2jW+8Y1vxHe/+13nJ9jBicsapqKiImbNmrXJyjd16tRYvHhxRES0bt06unfvHl27do3i4uJo3br1Jl8tW7bM9D1Ia9eujYULF8aCBQtiwYIFMX/+/FiwYEHMnj07pk6dGm+88UYsW7YsIiLatWu32Qa0Lh2xg89btWrVF8bXmjVrIuL/doC7desWXbp0id122y1at24dbdq0qVz/mzRpktn6k8/nY8WKFZXr/savjz/+ON56662YNm1avPXWW1FRUREFBQWx3377bbLuH3TQQdG0adNMZgdxSZa+6BVc06ZNqzzjbOPGjeOggw6K7t27R4cOHTbb9rdq1SoaNGiQ2fwVFRWxaNGizbb/c+fOrbxPCxYsiIiIli1bVr5Cb+PvgH322adGx3NdIy5rgXw+H/Pmzavc2EybNi1ef/31+PDDDzf7mINcLhctW7bcLDo3boRatWoVjRo1isLCwigsLIz69etX/v/GP69bt26Tr/Xr11f+/4oVKyqD8fNf8+fPj08++WSz+Rs2bBjt2rXbZEeyW7duzvAFW2DdunUxY8aMTXY43nrrrVi0aNFm123QoEG0atVqk52Oz24DWrRoscn6/vntQD6fj4qKis3W+41fS5cu3ezA0We/Vq1atdlMTZs2jX333XeTl/x36dIlGjVqVB0PH2wRccmOaOHChZs92TBv3rzKV3t8VtOmTb9w279x+7/zzjt/6b5fYWHhZtv8z/551apVlU8cfNG2f9GiRfH53Khfv37svvvu0bVr1032/dq1a+dJhBpOXNZi+Xx+k529L4q9z1+2du3ar/yeRx55ZPztb3/7yusUFRVtdtTsy2K2devWsfPOO9uQwHa2fv36yiPFX3bA57N/90W//D+vefPmsWTJkn97nS9b1z//1apVKyffoUYQl9QUn32VyJZs+xcsWBArV678yu+5Jft+DRo0+Mp9vc9/NWvWzL5fLeXTRGuxXC4XzZs3j+bNm8e+++77b6+fz+dj+fLlsXr16i88MrVu3brI5/NRr169L3xWo7CwMIqKinxOJ+wA6tevH7vuumvsuuuuW3T9ioqK+PTTT2Pt2rVfeoR64/f9slc1NGnSxMcnAWQol8vFLrvsErvsskt87Wtf26J/s3Llyli5cuWX7vtt2LAhcrncl+77NWzYMHbZZRexSESISz4jl8tF48aNa/xJQYCtV1BQ4AQ5AHWQJwbYnrw7FgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgAAgGTiEgDgKxx33HHRpUuXrMcA2OHl8vl8PushAAAAqNk8cwkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAEAycQkAAECy/w/J2NoN8xs9rQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "normalised_diagram = rewritten_diagram.normal_form()\n", - "normalised_diagram.draw(figsize=(9,4), fontsize=13)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the simplified diagram, the order of the preposition tensor is reduced by 2, which at least for a classical experiment, is a substantial improvement. Note also that the determiner is now eliminated, equating the meaning of the noun phrase \"the park\" with that of the noun \"park\"." - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Another very useful rewrite rule is the :py:class:`~.CurryRewriteRule`, which allows us to convert adjoint output wires into input wires using map-state duality. For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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91doaKg2b96srVu3Ki4ujhNkVIBatWpp3LhxOnTokJYuXaqDBw/q5ptvlt1utzoaLGIYhl555RV169ZN586d00cffaQ9e/YoMTGRE2RUAE9PTyUmJurrr7/WRx99pMLCQnXr1k2vvPIKX4dVg9ntdnXs2FEHDx7U0qVLlZ6errFjx5b6onhcHTc3N8XHx+vTTz/V5s2bFRoaqgEDBmjKlClyOBxWxwMsUS2XoB944AEtXLhQf/zjH/Xhhx9aHQdVUFZWlvr376/p06dr+vTpWrt2rbp37251rGrJ09NTw4YN086dO9WnTx8NHjxYTzzxhPO7/VAz5Ofna+TIkUpKStJ9992nTz/9VAMHDqxRJwu5Vtzc3DRw4EB99tlnGjNmjJKSkjRq1Cjl5+dbHQ3XUHFxsR5//HENHjxYMTEx2rlzp4YNG8aKnErSvXt3rV27VtOmTdO0adM0YMAAZWVlWR0LuOaqZbm88IW5//vf/9S4cWOr46CK2bZtmzp06KBdu3Y5z3TKlsrK5+/vr/fff18zZszQzJkz1bdvX+d3iqF6S09PV+fOnbV8+XItXbpUc+fOlbe3t9Wxqj1vb2+9/PLLWrJkid5991117txZ6enpVsfCNfDjjz/qtttu06xZszRz5kwtX77c+dULqDxubm568sknlZycrJ07d6pDhw764osvrI4FSaNGjZJhGOrdu7fVUao9lqhRo7zxxhvq0aOHGjdurJ07d+rWW2+1OlKNYrPZNGHCBKWkpOibb75Rhw4d9NVXX1kdC5Xok08+0c0336yioiJt27ZNw4YNszpSjTN8+HBt27ZNhYWFuvnmm7V27VqrI6ES7d69W+3bt1daWppSUlL02GOPsYfANXbbbbdp586datSokbp376433njD6kjANUO5RI2xa9cujRkzRgkJCUpNTeU74SzUq1cv7dq1S/Xr19eQIUOUl5dndSRUgmPHjunuu+9W586dtX37dt10001WR6qxoqKitGPHDt1yyy26++67dezYMasjoRKcOXNGd955pxo0aKBdu3apV69eVkeqsZo2bapNmzZp6NChGjNmjHbt2mV1JOCaoFyiRjh79qyGDh2qm266Sa+88gpnga0CGjZsqHfffVcnTpzQuHHjrI6DCuZwODRixAj5+fnprbfeUt26da2OVOPVrVtXy5Ytk4+PjxITEznhSDU0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7dpldaQaLT8/X6NGjdKiRYs0d+5cXX/99VZHcimUy6swevRovfHGG3r33XfVpUsXpaenWx2pRnr99dfVtWtXBQUF6bPPPlP9+vWtjgQAAFBuISEh+vTTTxUYGKguXbpowYIFVkeqkdLT09W5c2e9++67WrJkiUaNGmV1JJdDubxKI0aM0LZt21RQUKCbb76Z7ym6hgoKCnTvvfdqzJgxGjlypLZs2aLmzZtbHQsAAOCqXXfdddq6dasSExOdyzmFhYVWx6oxVqxYoZtvvlmFhYXatm2bhg8fbnUkl0S5NCEqKkrbt29XTEyMBg8erEmTJqmoqMjqWNVaenq6unXrprfeeksLFy7UK6+8Ih8fH6tjAQAAmObj46NXX31VCxYs0JtvvqmuXbuyh1wlKyoq0qRJk3THHXfo1ltv1Y4dOzg5pAmUS5P8/f21fPlyzZo1S//85z913XXXacaMGTp9+rTV0aqVr776SsOGDVPr1q31888/67PPPmNXBQAAUC2NHj1an332mU6fPq3WrVtr2LBh+uqrr6yOVa2cPn1aL7zwgpo3b65//vOfmjVrlt577z3VrVvX6mgujXJZAWw2mx599FHt27dPAwYM0N///nc1a9ZMkyZN4qxfJhiGoQ0bNqhfv35q166dtm7dqtmzZ+urr75Su3btrI6Ha2DRokWy2WzauHHj714HABs3bpTNZtOiRYusjgJUiHbt2unrr7/W7NmztXXrVrVr1079+/fXxo0b+cYCE06cOKFJkyapWbNmeuqppzRo0CDt27dPjz76KCeGrACUywoUERGh//73v8rIyFBSUpLmz5+v5s2b67777tOBAwesjucyHA6Hli9frltuuUXR0dE6ceKE3nzzTaWnp2vs2LGqVauW1REBAAAqXa1atTR27Filp6dr6dKlOn78uPr06aNbbrlFy5cvl8PhsDqiyzhw4IDGjBmj5s2ba/78+UpKSlJGRoZee+01RUREWB2v2qBcVoJGjRrphRdeUGZmpp555hl99NFHioyMVNu2bTVx4kSlpKRwbOZvnDhxQosXL1ZCQoIaNGigIUOGqHbt2lq9erV2796thIQEeXp6Wh0TAFBF9ezZUwUFBRoxYoTVUYAK5+npqWHDhmn37t1avXq1atWqpSFDhig0NFQJCQlavHgxe8v9RlFRkVJSUjRx4kS1adNGkZGRWrVq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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "curry_functor = Rewriter(['curry'])\n", - "curried_diagram = curry_functor(normalised_diagram)\n", - "curried_diagram.draw(figsize=(9,4), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "After normalisation the resulting diagram no longer contains any cups, which eliminates :term:`post\\-selection` and allows for faster execution." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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XM4999yqRwT2gTgABqxer+eaa67JypUrs2LFivT29vbHws0335xjjjmm6hGBfSAOgAE77LDDsnDhwqrHAAaJew4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAKw6seADgwvO9976t6BOAAUWs0Go2qhwAADhxeVgAACuIAACiIAwCgIA4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAK4gAAKIgDAKAgDgCAgjgAAAriAAAoiAMAoCAOAICCOAAACuIAACiIAwCgIA4AgII4AAAK4gAAKPw/1tuturFMs2AAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "curried_diagram.normal_form().draw(figsize=(5,4), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "These examples clearly demonstrate the flexibility of :term:`string diagrams ` compared to simple :term:`tensor networks `, which was one of the main reasons for choosing them as ``lambeq``'s representation format. ``lambeq`` comes with a number of standard :term:`rewrite rules ` covering auxiliary verbs, connectors, coordinators, adverbs, determiners, relative pronouns, and prepositional phrases." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "| Rewrite rule | Description |\n", - "| -------------------------------------------- | ------------------------------------------------------------------------------ |\n", - "| `auxiliary` | Removes auxiliary verbs (such as \"do\") by replacing them with caps. |\n", - "| `connector` | Removes sentence connectors (such as \"that\") by replacing them with caps. |\n", - "| `coordination` | Simplifies \"and\" by replacing it with a layer of interleaving spiders. |\n", - "| `curry` | Uses map-state duality to reduce the number of cups in the diagram. |\n", - "| `determiner` | Removes determiners (such as \"the\") by replacing them with caps. |\n", - "| `object_rel_pronoun` , `subject_rel_pronoun` | Simplifies relative pronouns (such as \"that\") using cups, spiders and a loop. |\n", - "| `postadverb` , `preadverb` | Simplifies adverbs by passing through the noun wire transparently using a cap. |\n", - "| `prepositional_phrase` | Simplifies prepositions by passing through the noun wire using a cap. |" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "## Diagram-level rewriters" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "While box-level rewriters and rewrite rules access one box at a time, for certain cases of more general transformations you will require knowledge of the broader context in the diagram. For example, imagine the following derivation:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.grammar import Diagram, Word, Ty, Cup\n", - "from lambeq import AtomicType\n", - "\n", - "n = AtomicType.NOUN\n", - "s = AtomicType.SENTENCE\n", - "\n", - "words = [Word('do', n.r @ s @ n.l), Word('your', n @ n.l), \n", - " Word('homework', n), Word('now', s.r @ s)]\n", - "morphisms = [(Cup, 2, 3), (Cup, 4, 5), (Cup, 1, 6)]\n", - "diagram = Diagram.create_pregroup_diagram(words, morphisms)\n", - "diagram.draw(figsize=(5,2))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that this diagram has two free wires, coming from different boxes. In cases like these, if your loss function expects a single wire, you are going to get a dimension mismatch error. The probem can be addressed by merging the two free wires into one, so you are able to train your model in a consistent way. In ``lambeq``, this can be done with the :py:class:`~.UnifyCodomainRewriter`, which acts at the diagram level. Specifically, the rewriter looks at the codomain of the diagram (in the above case :math:`n^r \\cdot s`), and if this consists of more than one wires, it merges these wires with an extra box." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAGjCAYAAAC4xLZeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAt/klEQVR4nO3de1hU9aLG8XeQi1wkFURRQPGGqGjiFW+5lfK2M027m5GXysrLOW6z27M1n93NtlvNzmnvLC12e5dmerIM805iHihQU0NNQ83SDMVUSLnMOn90mqdfooICa2C+n+eZx2FmzZr3t9a41jtrFoPDsixLAAAA/8/L7gAAAMC9UA4AAICBcgAAAAyUAwAAYKAcAAAAA+UAAAAYKAcAAMBAOQAAAAbKAQAAMFAOAACAgXIAAAAMlAMAAGCgHAAAAAPlAAAAGCgHAADAQDkAAAAGygEAADBQDgAAgIFyAAAADJQDAABgoBwAAAAD5QAAABgoBwAAwEA5AAAABsoBAAAwUA4AAICBcgAAAAyUAwAAYKAcAAAAA+UAAAAYKAcAAMBAOQAAAAbKAQAAMFAOAACAgXIAAAAMlAMAAGCgHAAAAAPlAAAAGCgHAADAQDkAAAAGb7sDSNKRI0eUm5trdwzUAKGhoYqKirI7hoHXd+XwxHXtiWP2VHava9vLwZEjRxQbG6uCggK7o6AGCAgIUHZ2tttsQHl9Vx5PXNeeOGZPZfe6tr0c5ObmqqCgQG+//bZiY2PtjoNqLDs7W6NHj1Zubq7bbDx5fVcOT1zXnjhmT+UO69r2cvCr2NhYxcfH2x0DqBS8vj2HJ65rTxxzTccJiQAAwEA5AAAABsoBAAAwUA4AAICBcgAAAAyUAwAAYKAcAAAAA+UAAAAYKAcAAMBAOQAAAAbKAQAAMFAO3Fy/fv00depUu2MANYan/59q1qyZ5s+fb3cMuDnKAQAAMFAOAFwzy7JUXFxsdwxcRmFhod0RUI1QDtxIfn6+xowZo6CgIIWHh2vu3LnG/Xl5eRozZozq1aungIAADR48WF9//bVNaeGukpOTFRISogsXLhi3Dx8+XPfee68k6dVXX1WLFi3k6+urmJgY/fOf/3RNd+jQITkcDu3YscN12+nTp+VwOLR582ZJ0ubNm+VwOJSSkqLOnTvLz89PaWlplT62iuJ0OvXYY4+pfv36atSokWbNmuW678iRI7rlllsUFBSk4OBg3X777frhhx9c98+aNUvXX3+9Fi9erKioKAUFBenhhx9WSUmJJOmmm25SWFiYnn32WeM5T58+rfHjx6tBgwYKDg5W//79tXPnTknSTz/9pFq1aumLL75w5atfv7569OjhevzHH39szG/Xrl3q37+//P39FRISogceeEDnzp1z3Z+UlKThw4fr2WefVePGjRUTE1Pqsnj99ddVt25dbdiw4SqWpH369eunyZMnX9V6LMvyfvvttxUZGVmlY3InlAM3Mn36dKWmpuqDDz7Q2rVrtXnzZmVlZbnuT0pK0hdffKFVq1Zp27ZtsixLQ4YMUVFRkY2p4W5uu+02lZSUaNWqVa7bTpw4odWrV2vs2LFauXKlpkyZomnTpmn37t168MEHdf/992vTpk3lfq7HH39cL7zwgrKzs9WhQ4eKHEaleuuttxQYGKj09HTNmTNHs2fP1rp16+R0OnXLLbfo1KlTSk1N1bp16/TNN9/ojjvuMB5/8OBBpaSkaM2aNXrnnXf0xhtvaMqUKZKk1157TS+++KKefvpppaenux5z22236cSJE0pJSVFmZqbi4+M1YMAAnTp1Stddd52uv/56V/natWuXHA6Htm/f7trhZ2ZmuuaVn5+vgQMHql69evr888/13nvvaf369Xr00UeNnBs2bNC+ffu0bt06ffTRRxcthzlz5ujxxx/X2rVrNWDAgApZtlXpatdjWZZ3amqqbrjhBruGZj/LZpmZmZYkKzMz0+4otjp79qzl6+trLVu2zHXbyZMnLX9/f2vKlCnW/v37LUnW1q1bXffn5uZa/v7+xmM8mTu+luzKNHHiRGvw4MGun+fOnWs1b97ccjqdVs+ePa0JEyYY0992223WkCFDLMuyrJycHEuStX37dtf9eXl5liRr06ZNlmVZ1qZNmyxJ1v/8z/9U+lhKcy3L9YYbbrB69+5t3Na1a1drxowZ1tq1a61atWpZR44ccd23Z88eS5KVkZFhWZZlzZw50woICLDOnDnjmmbgwIFW48aNjUwxMTHW888/b1mWZW3ZssUKDg62zp8/bzxvixYtrH/84x+WZVnWf/7nf1pDhw61LMuy5s+fb91xxx1Wx44drZSUFMuyLCsyMtI1/9dee82qV6+ede7cOde8Vq9ebXl5eVnHjx+3LMuy7rvvPqthw4bWhQsXjOds2rSpNW/ePOuxxx6zwsPDrd27d5d7Gf7Kzv9z17oer7S8W7Zsab322mtVNBqTO2zLOHLgJg4ePKjCwkJ1797ddVv9+vVdhwKzs7Pl7e1t3B8SEqKYmBhlZ2dXeV64twkTJmjt2rX67rvvJElvvvmmkpKS5HA4lJ2drV69ehnT9+rV66peR126dKmQvFXt90c5wsPDdeLECWVnZysyMtI4nNy2bVvVrVvXWD7NmjVTnTp1XD83bNhQ0dHRxjwbNmyoEydOSJJ27typc+fOKSQkREFBQa5LTk6ODh48KEm64YYblJaWppKSEqWmpqpfv37q16+fNm/erO+//17ffvuta97Z2dnq2LGjAgMDXbf16tVLTqdT+/btc90WFxcnX1/fi8Y/d+5cLVq0SGlpaWrXrl25lp07uZb1eKXlfeDAAfXr168qh+NWKAdADdSpUyd17NhRycnJyszM1J49e5SUlFSmx3p5/bJZsCzLddulPrr67c6pOvHx8TF+djgccjqd1/R4b2/vS87z3LlzCg8P144dO4zLvn37NH36dElS3759dfbsWWVlZenTTz81dlapqalq0KBBucd5qfXTp08flZSUaNmyZeWepzu5lvV4peXduHFjtWrVqjJiVwuUAzfRokUL+fj4GJ9R5uXlaf/+/ZKk2NhYFRcXG/efPHlS+/btU9u2bas8L9zf+PHj9eabb2rJkiVKTEx0vYuKjY3V1q1bjWm3bt3qeh39uhM6duyY6/7fnpxYk8XGxurbb7813qV/9dVXOn369DX9P4uPj9fx48fl7e2tli1bGpfQ0FBJUt26ddWhQwe98sor8vHxUZs2bdS3b19t375dH330keLj442cO3fuVH5+vuu2rVu3ysvL65InHv5Wt27dlJKSoueee05//etfr3pc7qos6/FKy9ujzzcQ5cBtBAUFady4cZo+fbo2btyo3bt3KykpyfUurlWrVrrllls0YcIEpaWlaefOnRo9erSaNGmiW265xeb0cEd33323jh49qkWLFmns2LGu26dPn64333xTr776qr7++mv97W9/04oVK/SnP/1JkuTv768ePXq4TjRMTU3V008/bdcwqlRiYqLi4uJ0zz33KCsrSxkZGRozZoxuuOGGa/oIJTExUQkJCRo+fLjWrl2rQ4cO6bPPPtNTTz3lOmNe+uUM/H/961+uHVP9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e6t9+/Z2x6hy7du3l7e3t90xqlRgYKCaNWtmdwygVJQDuK3jx48rNzfX7hhV6qefftLBgwftjlHlDhw4oDNnztgdo0r9+OOP+uGHH+yOAZSKcgC3VadOHZ09e9buGFXq7NmzqlOnjt0xqhzrGnAvlAO4rcaNGysnJ8fuGFUqJydH4eHhdseocp66rhs3bmx3DKBUlAO4rYSEBGVmZurChQt2R6ky27ZtU0JCgt0xqlyPHj20bds2u2NUmfPnzysrK8sj1zWqB8oB3FZCQoIKCwuVlZVld5QqkZubq6+//tojdxgJCQnav3+/x5xjkpWVpcLCQo9c16geKAdwWx07dpS/v7/HvKP8dZyeuMP4dcz/+7//a3OSqrFt2zb5+/urQ4cOdkcBSkU5gNvy8fFRQkKC3n//fVmWZXecSrdixQo1adLEI3+9LTo6Wk2aNNGKFSvsjlLpLMvS+++/r4SEBPn4+NgdBygV5QBu7U9/+pM+++wzrVmzxu4olWrfvn1KTk7WY489JofDYXecKudwODR9+nQlJydr3759dsepVCkpKdq2bZumT59udxTgkigHcGuDBg1S79699dRTT8npdNodp9L8+c9/VpMmTfTggw/aHcU2Dz74oMLDwzVz5ky7o1Qap9Opp556Sn369NHAgQPtjgNcEuUAbs3hcOjZZ5/V9u3btXTpUrvjVIqMjAwtW7ZMM2fOlJ+fn91xbFO7dm3NnDlTS5cu1eeff253nErx7rvvaseOHXr22Wc98ggRqg/KAdxe3759NXLkSI0bN05bt261O06FOnDggIYNG6b4+Hjdd999dsexXVJSkjp16qRhw4bpwIEDdsepUGlpaRo/frxGjRqlPn362B0HuCzKAaqFf/7zn+rWrZuGDBmi7du32x2nQhw9elSJiYmqW7euUlJSPO5vC5TG29tba9asUXBwsBITE3X06FG7I1WIrKwsDR06VN27d1dycrLdcYArohygWvD399eqVavUunVrDRw4UJmZmXZHuiaHDh3SjTfeKMuytG7dOoWFhdkdyW2EhYVp/fr1sixLN954ow4dOmR3pGuSmZmpgQMHKiYmRqtWrZK/v7/dkYArohyg2ggODtaaNWsUERGh7t27a8aMGSooKLA7VrmUlJRo3rx5ateunQoKCrR+/XpFRkbaHcvtREZGav369crPz1e7du00b948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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import UnifyCodomainRewriter\n", - "\n", - "rewriter = UnifyCodomainRewriter(output_type=s)\n", - "\n", - "rewriter(diagram).draw(figsize=(5,4))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This type of transformation would not be possible with box-level rewriters, since it requires knowledge that is available in more than one boxes.\n", - "\n", - "Other diagram-level rewriters that are available in ``lambeq``:\n", - "\n", - "- :py:class:`~.RemoveCupsRewriter`: Removes the :term:`cups ` from a diagram, reducing or eliminating :term:`post\\-selection`.\n", - "- :py:class:`~.RemoveSwapsRewriter`: Removes the :term:`swaps ` from a diagram, producing a proper :term:`pregroup ` diagram, following J. Lambek's definition.\n", - "\n", - "More diagram-level rewriters can be created by extending the class :py:class:`~.DiagramRewriter`. " - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. rubric:: See also:\n", - "\n", - "- :ref:`lambeq.rewrite package `\n", - "- `Example notebook rewrite.ipynb <../examples/rewrite.ipynb>`_\n", - "- `DisCoCat in lambeq <./discocat.ipynb>`_\n", - "- `Extending lambeq <./extend-lambeq.ipynb>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/sentence-input.ipynb b/docs/tutorials/sentence-input.ipynb deleted file mode 100644 index b2f5959d..00000000 --- a/docs/tutorials/sentence-input.ipynb +++ /dev/null @@ -1,537 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Step 1. Sentence input" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The first part of the process in ``lambeq`` given a sentence, is to convert it into a :term:`string diagram`, according to a given :term:`compositional scheme `. ``lambeq`` can accommodate any :term:`compositional model` that can encode sentences as :term:`string diagrams `, its native data structure. The toolkit currently includes a number of :term:`compositional models `, using various degrees of syntactic information: :term:`bag-of-words` models do not use any syntactic information, :term:`word-sequence models ` respect the order of words, while fully syntax-based models are based on grammatical derivations provided by a parser.\n", - "\n", - ":download:`Download code <../_code/sentence-input.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Pre-processing and tokenisation" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Depending on the form of your data, some preprocessing steps may be required to make it appropriate for ``lambeq`` use. Section :ref:`sec-preprocessing` in the :ref:`NLP-101 tutorial ` provides more information about this. Here we will mainly talk about :ref:`tokenisation `, which is crucial in getting correct derivations from the :term:`Bobcat` parser. \n", - "\n", - "The term `tokenisation` refers to the process of breaking down a text or sentence into smaller units called `tokens`. In ``lambeq`` these tokens correspond to words, since the parser needs to know exactly what kind of words or symbols and punctuation marks are included in the sentence in order to provide an accurate grammatical analysis.\n", - "\n", - "By default, Bobcat parser assumes that every sentence is delimited by a whitespace, as below:\n", - "\n", - ".. code-block:: console\n", - "\n", - " \"John gave Mary a flower\"\n", - " \n", - "Note however that when working with raw text, this is rarely the case. Consider for example the sentence:\n", - "\n", - ".. code-block:: console\n", - "\n", - " \"This sentence isn't worth £100 (or is it?).\"\n", - " \n", - "A naïve tokenisation based on white spaces would result in the following list of tokens:\n", - "\n", - ".. code-block:: console\n", - "\n", - " [\"This\", \"sentence\", \"isn't\", \"worth\", \"£100\", \"(or\", \"is\", \"it?).\"]\n", - " \n", - "missing, for example, that \"isn't\" represents actually two words and \"(or\" is not a proper word. \n", - "\n", - "In ``lambeq``, tokenisation is provided through the :py:class:`~.Tokeniser` class hierarcy, and specifically by using the :py:class:`~.SpacyTokeniser` class, based on the popular NLP package `SpaCy `_. Here is an example:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['This',\n", - " 'sentence',\n", - " 'is',\n", - " \"n't\",\n", - " 'worth',\n", - " '£',\n", - " '100',\n", - " '(',\n", - " 'or',\n", - " 'is',\n", - " 'it',\n", - " '?',\n", - " ')',\n", - " '.']" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from lambeq import SpacyTokeniser\n", - "\n", - "tokeniser = SpacyTokeniser()\n", - "sentence = \"This sentence isn't worth £100 (or is it?).\"\n", - "tokens = tokeniser.tokenise_sentence(sentence)\n", - "tokens" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can then pass the list of the tokens to the parser, setting the ``tokenised`` argument of the :py:meth:`~.BobcatParser.sentence2diagram` method to True." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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a2srW1tba7cBoAS7ceOGXFxcrN0GisDcuXMVFRV110ENKPkCAgIUFxcnf39/7dq1S40aNcp2uo8++kjXr1/XH3/8ocqVK0uSwsPD1apVK82ZM0cvvPCCJCk2NlYTJkzQiy++qEmTJkmSnn/+eT3yyCN67bXX1LlzZ/Y/ypjr16+rXLly1m4DFsDrCdyO9QESp84oUzIyMvThhx+qYsWKcnJyUsuWLXX06NEs02R3juaFCxeqYcOGqlChglxdXXX//ffr888/L8LOS5+kpCQNHz5cwcHBcnR0lK+vr1q1apXlyKDt27erdevWcnNzk4uLix555BFt3rw5S51Ro0bJYDDo6NGj6tu3r9zd3eXm5qZ+/frpxo0bpukMBoOuX7+ur7/+2nRaldvfVYyNjVX//v3l5+cnR0dHhYWFadasWVnGyjzX9/fff5/nepTZf9u2beXh4aFy5crpgQceuGu9OXTokJ555hl5enrKyclJDz74oH766afCzFrcgzvPobVr1y49/vjj8vb2lrOzs0JCQtS/f3/rNgmLyO9zx+3mzJmjzp07S5IeffRRTtFUDP35558yGAxZnkf/+OMPGQwGNWjQIMu0bdq0UePGjU2XJ0+erLCwMDk6OiowMFAvvviirl69muU+zZs3V506dfTHH3/o4YcflouLi958800FBwfr77//1vr1603rRfPmzbPcNzk5Wa+88op8fHxUrlw5Pfnkk9l+3B7FU1JSki5evHjXeoTSwdHRUf7+/nlOt3jxYrVv394UMktSVFSU7rvvPn3//fem65YtW6bU1FQNGTLEdJ3BYNDgwYN15swZbd261bwPAEVqz549atOmjVxdXVW+fHm1bNlS27ZtM92euX+5fv16DRkyRL6+vqpYsaIVO4Yl8XoCt7t9fcjP/iFKJ45oLkPGjBkjGxsbvfrqq0pISNC4cePUs2dPbd++Pcf7rFmzRt27d1fLli01duxYSf8eIb1582YNGzasqFovdQYNGqRFixZp6NChql27tuLj47Vp0yYdPHhQDRo00G+//aY2bdqoYcOGeu+992RjY6PZs2erRYsW2rhxo8LDw7PU69Kli0JCQjR69Gjt3r1bM2bMkK+vr2mZzZs3T88//7zCw8NNR5tUq1ZNknT+/Hk1adJEBoNBQ4cOlY+Pj1atWqXnnntOiYmJGj58eJax8rMerVmz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19ixY9WvXz916dJFrVu3tnZLsJLcPz8H5MOIESPk4eGhV155RWvXrtXcuXPVtGnTfN+/d+/eWr9+PUe0FIGLFy9q4MCB+vHHH9WnTx99/vnnOX5UBSVbfv+vkpKSVLFiRT3zzDOqW7euypcvr+joaO3cuTPXo0UKW3PSpEl6//33tW7dOjVv3jzL/ZOTk/XEE0/ot99+k4uLS4F6KKmOHj2qJ554Qo0bN9bIkSNznK6w87iw8rt+xcbG6ssvvzRrTUuss2VZYbfB5l4e4eHhWrBggXr37q2LFy9q0aJFKl++/D3VYL/iXwsWLFCfPn3UsmVLTZs2zdrt3KVDhw5auXKlnnvuOdWpU0dTpkxR586d831/lnPRuXnzpt544w198cUXatGihebMmZPv71VA8VSU+xHm3k688847iouLU79+/XTu3Dm9/vrrMhgMVt83KmnS0tI0ePBgzZgxQ2PGjFH37t1znNZa+15ffvmlgoKC9MEHH+jnn3/WvHnzVKtWrXzfn+1E0YmJiVGfPn20efNmjRgxQu+//761W4IVETSj0AwGg1544QW1aNFCvXv3VmRkpHr16pXjO6IoeidPntTs2bM1efJkGY1GLVmyRE8++aS120Ix4OLioiFDhmj16tVasmSJMjIyFBoaqsmTJ+fr3N2WqDlr1ix169ZNHTt21OzZs1WxYsUC9VHSbN++XT169JC3t7d+/PHHXL/52xLLraQoy4+9OLLE8ujWrZt8fHz05JNPqmnTpho3bpwef/xxM3deesXFxWnMmDH64osv1Lt3b82YMcN0TvTipm3btvrrr780aNAgdenSRW3btpWrq6u128L/79KlS/r22281adIknTlzRp999pleeukl9vFLgaLclpp7LDs7O02dOlWBgYEaOXKk9u7dqw8++EDBwcHsH+TTjh079MYbb2jDhg2aM2eO+vTpk+v01tr3srOz07vvvqu2bduqV69eatCggZ5//vkCf+IJ5nfgwAHNnDlT06ZNk7e3t9avX6/IyEhrtwVrM6JEmTZtmrE4L7bU1FTjJ598YgwJCTFKMlavXt04evRoY2xsrLVbK3Nu3rxpXLBggTEqKspoMBiM5cuXNz7//PPGuLg4a7eGXHh6ehrHjBlj1poeHh7GsWPHmr3muHHjzFrzdtHR0caAgABjhQoVjJMnTzamp6dbbCxrS0pKMg4bNsxoMBiMDz74oDEmJsZiY3Xo0MHYoUMHs9d84oknzFqzffv2xo4dO5q1ZmmzY8cOoyTjvn37LD6Ws7Oz8YsvvrD4OHfas2ePsUmTJkZJxiZNmhh/+eUXY0ZGRpH3UVKcPXvWOHz4cKOTk5PRzc3NOGbMmBIzvzIyMozz58831q9f3yjJ6O/vbxwxYoTx0KFD1m6tzElLSzOuWrXK2LlzZ6ODg4PR3t7e+NRTTxn//vtva7eGe/TOO+8YK1eubPFxoqOjjZIsuv+Sk7lz5xoDAwONNjY2xt69exv/+eefIu+hJNm+fbuxbdu2RknGmjVrGlevXm3tlvLt+vXrxrffftvo5+dnlGSsX7++cdKkScbLly9bu7UyJyEhwTht2jRj48aNjZKMXl5exldffdWYmJho7dZQTPB2NMzKzs5OL7/8so4eParffvtNjRs31vvvv6/KlSurVatW+u9//6vffvtN169ft3arpU56err27dunyZMnq2fPngoMDFT37t1169YtzZw5U3FxcZo+fTpf/IcSoWXLljpw4IC6deumIUOGqGnTpvrmm2908+ZNa7dmNhcuXNCECRMUFhamadOm6eOPP9bWrVsVEhJi7daAYqFevXrasmWL6QtCW7durfDwcI0bN04HDx7ko7D69+PMixcvVt++fVW1alXNnj1bb7zxhk6cOGH6OHlJYDAY1L17d+3evVu7d+/WM888o+nTp6tmzZpq0qSJRo4cqRUrVujy5cvWbrXUMRqNOnLkiObMmaMBAwYoODhYbdq00YEDBzRmzBjFxsZq8eLFql27trVbBe7y7LPP6tixY/r8888VHR2tmjVr6umnn9bcuXN18eJFa7dXLJw6dUqTJ09WVFSUGjdurJiYGM2fP1/79+9Xq1atrN1evrm4uOi///2vTp8+rWXLlqly5coaNmyYAgIC1LFjR40fP15btmzh+zosICUlRdu3b9cnn3yip59+WgEBARo0aJA8PT21aNEinT17VuPHj1eFChWs3SqKCU6dAYuwsbHRo48+qkcffVQTJ07UwoUL9dNPP2nChAl69913ZWtrq3r16ikiIkIRERFq3LixKlWqxEfx7sGVK1e0e/dubd68WZs3b9a2bduUmJgoOzs7NWjQQIMGDVKfPn1Uo0YNa7cKFIi7u7umTZumHj166P3339ezzz6roUOHqnv37urfv78aNmxY4p4zUlJStHr1as2aNUvLly+XjY2NnnrqKX344YeqWrWqtdsDih2DwaDHHntMrVq10po1a/Tll19q1KhRev3111WtWjV16NBB7du3V9OmTcvEN5sbjUYdO3ZMq1at0vLly/X7778rNTVVderU0VtvvaWhQ4eW+HPn1q9fXxMnTtT48eO1bNky/fDDD5ozZ47GjBkjSapVq5Zp//Ghhx5StWrVZGfHS5r8unbtmv766y/T/uOWLVt04cIFGQwGhYWFqWPHjurdu7caNWpUYt6oQNnm5OSkoUOH6vnnn9fMmTM1b9489e3bV5L00EMPqUOHDmrXrp1q165dJr6bJiUlRbt379aKFSu0fPly/fnnn7Kzs9Mjjzyi+fPnq0uXLiV6Ptjb2+uJJ57QE088oXPnzmnevHlatWqVRo0apRs3bsjR0VEPPvigaTvRqFEj+fv783yWT0ajURcvXtSuXbu0efNmbdq0STt37tTNmzfl5OSk8PBwvfXWW+rdu3eZOb0h7h17ZbA4d3d3DRo0SIMGDVJGRoYOHDhg2rldsWKFvvjiC0mSo6OjqlatqtDQUFWrVs30u1q1agoODi625xe0FKPRqHPnzuno0aM6duyYjh07Zvr76NGjunLliqR/52/Tpk31+uuvmzamZe0L1FC6NW/eXM2bN9fRo0c1e/ZszZkzR1OmTJGHh4eaNm2aZUeyuAVNly9f1pYtW0zPeTt37tStW7dUt25dffLJJ+rZs6c8PT2t3SZQ7GUGzo899phu3ryp3377TcuXL9cPP/ygzz77TDY2Nrrvvvv0wAMPZPmpXLlyiX1xmZSUpP379+vPP//M8pOYmCh7e3s1b95cEyZMUPv27UvlJyGcnJzUtWtXde3aVUajUcePHzc9l27evFkzZ86U0WiUnZ2dqlSpku3+Y9WqVYvddsHSjEajLl++nOP+4/nz5yVJzs7Oaty4sQYMGGAK7Uv6mxQo25ycnPTiiy/qxRdf1Pnz57Vy5UotX75c//3vfzVy5Eg5OzurTp06qlu3rmkbcf/995fY/TCj0ajz58/rzz//1L59+0zbiIMHDyo1NVWenp5q27at3nrrLT3++ONyc3Ozdstm5+/vr9dee02vvfaaUlNTtW/fPtM24ptvvtG4ceMkSeXKlTNtF+7cVlSqVKlEB+8FkZGRoTNnzmTZPtz+d1JSkiTJz89PERER+t///qeIiAjVr19fDg4OVu4eJQFBM4qUjY2N6tSpozp16mjgwIGS/v3Smt27d2d5cvv55591/Phx04n+bW1tFRAQIA8PD3l4eMjd3T3X37f/7eLiYtUXmSkpKbpy5YquXr2ar9+Zf587d043btww1QkKClK1atV0//33q1OnTgoNDVVYWJhq1apV4o7qBAoiNDRUH374oT744AOtX79eGzdu1ObNmzV69GglJSXJ3t5e1apVU1BQkCpWrJjtbx8fH7P9v6SmpurcuXM6c+aMYmNj7/p9+vRpnThxQtK/O8IRERH66KOP1KJFC9WtW9csPQBlkbOzs9q1a6d27drJaDRq37592rVrl+nF9urVq3X16lVJkqurq4KCguTr6ysfH59cf3t6elp8e3r9+nVdvHhRFy5cyPP36dOnJf27D1SjRg098MADatu2rR544AFFRkaWqS/NMxgMqlq1qqpWrapnn31WknT16lXt2rVLR48eNe0/btiwQbNnz85ymiV/f395enrmub945+8KFSpYdf8xLS1NV69ezXE/MaffFy5cUEJCgqmOj4+PKVSJiopSaGioatasqbp165a5gzhQdvj5+al///7q37+/bt26pc2bN5vC2D/++ENz585VSkqKpH+fI/z9/fPcRvj4+Fj8ecFoNJr+j7PbNtz+99mzZxUfHy/p3yD1/vvvV5MmTfTCCy+ofv36Cg8PL1Of9rC3t9eDDz6oBx98UMOGDZPRaNTJkye1d+/eLEHq4sWLdfLkSaWnp5vul5+cIbvrnJycrLqduHXrVr5yhTt/x8XFmU4xYmNjo8qVK6tatWpq3LixevTooWrVqqlu3bqqWrVqiX2zHtZVdp55UGwFBASoXbt2d12fnp6uM2fOmF48nD59OssT5JEjR7Jczuncrfb29nJ3d5e7u7ucnZ1lZ2d3Tz/ly5dXQkKC0tLS8v2TkpKihIQEXb16NUtYfDtbW9u7NlheXl4KDQ2Vu7u7fH19Te+0lsUjcoCc2NraqkWLFmrRooWkf58r/vrrL23ZskVHjhxRbGys/vnnH/322286e/asaUdS+vc88m5ubnJ0dJStra1sbGxkY2Mjg8Fg+nFyctKtW7dM5381Go3KyMiQ0WhUenq6MjIydOPGDSUkJGQ5R6yTk5Mp0K5cubIeeugh1alTRxEREQoJ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IW3fvl1bt27VsmXLdOHCBdWsWVO9evVSjx49rH6EGEc0A0DJwxHNAABr4IhmFIqNjY18fX3l6+t7T/fLyMhQUlJSvgLpuLi4HAOp/LxPYmtrW6Cg2snJSfb29vf8Y2dnl+vtnFcTRcloNCotLU2pqamF+rmzRnJycoGC4uw+AZEdJyenbP8v3dzcFBISooYNG+YaGru7u8vOjk1cTlxdXbVgwQK1adNG9evX15dffqnHH38813mWlpamX3/9VS+++KISExP1yy+/FHnILEkODg7q2LGjOnbsqISEBC1evFjff/+9xo0bp8TERElSzZo11bhxYzVs2FCVKlVSQECAAgMDrfZGgtFo1NWrVxUXF6ezZ8/q7NmzpnB5586dSkpKksFgUK1atdSzZ0/16tVL9evX501SAAAAACUKr8JhFTY2NnJzczOFRgVhNBp169atewq5srvuwoUL2d5+69atLF+WaC42NjZmCawLG3zb2NjIYDDIYDBk+dsc11miZuYyz+4nIyPDrNeZq2ZBA15zBMOZddLS0sy+Dtva2srBwSHHN2tcXV3l7++fr08d5HQdb8hYXuPGjbVnzx716NFD7du3l6+vr7p06aIWLVqoXLlysrGxUUZGhq5fv67ffvtN33//vS5cuKCmTZtqw4YNqly5srUfgtzc3NS/f3/1799fGRkZ+ueff7R9+3bTz/z58+96Hvfx8VFgYKApfM7828vLS46OjnJwcLjrx9HRUfb29srIyFBycrJSUlLu+klOTtb169d17tw5nT17NkuoHBcXp1u3bmXpIyAgQOHh4Ro5cqQaN26sBx98UK6urkU5+wAAAADArAiaUWIZDAY5OzvL2dlZXl5eFhnDaDQqPT3dLKGfucLEmzdvKjExsUBjpKenW2Q+FYUqVapY/KN/lmIwGAr1ZoGTk5PKly9vljceCvvmhp2dHSFwKVKlShVt2rRJq1ev1pgxYzR16lRNmjRJ0r8hbuZ5rO3t7RUREaG5c+fqscceK5ZH2trY2KhmzZqqWbOm+vTpI+n/nd7pztA38+/9+/dr9erViouLy/P5sW7dutq3b1+efbi7u5tC7KpVqyoiIiJLoJ3529nZ2SyPGwAAAACKC4JmIBcGg0F2dnays7MrFaFARkaGKXy+80jcezmy1xrXZwZbhTl6uqivzwxubW1trbzkgexduXJFgwYN0g8//CB7e3u1bdtW4eHhpiN4M0+TsmPHDq1atUpt27ZV586d9dVXX93TeZ2t5fbTO9WtWzfH6TJP55Samprt0copKSmmIDq7I54zf5ydneXk5FRUDw8AAAAAihWCZqAMsbGxMQUiAMq2Q4cOqXXr1kpISNBXX32lrl27yt3dPcfpr1y5ou+++04jR45UgwYN9Msvv6hGjRpF17AFZZ7OCQAAAABQcHz+GQCAMiY5OVldu3aVk5OT9u7dq4EDB+YaMkuSh4eHBg0apD179sjBwUHdunVTcnJy0TQMAAAAACj2CJoBAChj3n77bR08eFALFy5UlSpV7um+wcHBWrhwof7++2+9++67FuoQAAAAAFDSEDQDAFCG/PXXX5owYYI+/PBD1atXr0A16tevr//9738aP368/v77b/M2CAAAAAAokQiaAQAoQ37++Wc5Oztr2LBhhaozbNgwOTs76+effzZTZwAAAACAkoygGQCAMiQ6OlqPPPJIob8U1NHRUQ8//LCio6PN1BkAAAAAoCQjaAYAoIy4efOmNm7cqKioKLPUi4qK0saNG3Xr1i2z1AMAAAAAlFwEzQAAlBGbN29WcnKyWrVqZZZ6rVq10s2bN7Vlyxaz1AMAAAAAlFwEzQAAlBEbN26Ut7e36tSpY5Z6derUkbe3tzZs2GCWegAAAACAkougGQCAMuLSpUsKCgqSwWAwSz0bGxsFBgYqPj7eLPUAAAAAACUXQTMAAGVEYmKiXF1dzVrT1dVViYmJZq0JAAAAACh57KzdAAAAKBpubm6qXr26WWved999KleunFlrAgAAAABKHoJmAADKiFOnTpm95sWLF3Xp0iWz1wUAAAAAlCycOgMAAAAAAAAAUCgEzQAAAAAAAACAQiFoBgAAAAAAAAAUCkEzAAAAAAAAAKBQCJoBAAAAAAAAAIVC0AwAAIqVOXPmyGAw6MSJE9ZuBQAAAACQTwTNAAAAAAAAAIBCIWgGAAAAAAAAABQKQTMAAAAAAAAAoFAImgEAgCQpKSlJw4cPV3BwsBwdHeXr66tWrVpp9+7dxaomAAAAAKD4sbN2AwAAoHgYNGiQFi1apKFDh6p27dqKj4/Xpk2bdPDgQTVo0KDY1AQAAAAAFD8EzQAAQJK0cuVKDRgwQBMmTDBdN2LEiFzv4+vrq1u3bpm1JoqXatWqqVy5ctZuAwAAAEAxx6kzAACAJMnd3V3bt2/X2bNn830fg8GggwcPmrUmio/4+Hjt379frq6u1m4FAAAAQDFH0AwAACRJ48aN0/79+1WpUiWFh4dr1KhRiomJyfU+devW1V9//aUDBw6YrSaKj++//16SVKdOHSt3AgAAAKC4I2gGAACSpC5duigmJkYTJ05UYGCgxo8fr7CwMK1atSrH+zz//POqWrWq+vfvr/T0dLPURPFw6tQpjRgxQi+88IJq1qxp7XYAAAAAFHMEzQAAwCQgIEBDhgzR0qVLdfz4cXl5eenDDz/McXonJyfNmjVLO3bs0Lhx48xSE9aXkpKiAQMGyN3dXePHj7d2OwAAAABKAIJmAACg9PR0JSQkZLnO19dXgYGBSk5OzvW+TZs21WuvvaY333xTnTt31vnz5/Nd89KlSzp06JBu3LhhxkeDwti5c6caNmyo3377TdOnT+f8zAAAAADyhaAZAAAoKSlJQUFB6tu3rz799FNNnz5dXbt21c6dO9W9e/c87z9mzBgtXLhQ69evV+3atTVv3jwlJibmWXPSpEmqVauWduzYYemHiDzcuHFDr732mpo0aSIHBwft2rVLrVu3tnZbAAAAAEoIO2s3AAAArM/FxUVDhgzR6tWrtWTJEmVkZCg0NFSTJ0/W4MGD87y/wWBQ165d1bJlSw0bNky9e/dW3bp1FR4erl27dhWoJorG/v37NW/ePH3zzTeKj4/XRx99pP/7v/+TnR27iQAAAADyz2A0Go3WbgIAAFjeE088IUn66aefLD7WmjVr9NVXX2nFihXKyMjQY489pmeffVYdO3aUi4uLxcdH7uLi4jR//nzNmzdP+/btk6enp7p166Zhw4bpvvvus3Z7AIBCevfdd/X111/r5MmTFh1n7dq1ioqKUkxMjEJCQiw6FgCg+ONQFQAAYHatWrVSq1atdPnyZX3//ff65ptv1KNHD5UrV05NmjQx/TRu3Fg+Pj7WbrdUMxqNOnbsmLZt26bt27dr27Zt2r17t+zt7dWhQwd98MEHat26tRwcHKzdKgAAAIASjKAZAABYjKenpwYNGqRBgwYpJiZGP/zwg7Zu3aoZM2boww8/lCRVrVrVFDrXr19fVatWVUBAgGxs+CqJe5WSkqJTp07p6NGj2rlzpylYjo+PlyTdd999atKkiQYNGqSnn35a7u7u1m0YAAAAQKlB0AwAAIpE1apV9frrr0v69yjbU6dOadu2baYjbRctWqSUlBRJkqOjo4KDgxUSEqKQkBBVrVrV9Ds4OFhubm5lMohOS0vTxYsXdfz4ccXExGT5ffz4cZ05c0YZGRmSJA8PDzVu3FhDhw5VkyZNFB4eLk9PTys/AgAAAAClFUEzAAAocgaDQVWqVFGVKlXUtWtXSVJycrKOHTuWJTiNiYnR5s2bNW/ePF27di3L/d3c3OTu7p7j79yuc3NzK/JTRRiNRt28eVMJCQm6evXqXb/zc93t80CSfHx8TCF8RERElmC+SpUqZTKMBwAAAGAdBM0AAKBYcHR0VO3atVW7du27bjMajYqPj1dMTIxOnjypK1euZBvGxsTEZLmclJSU43gODg6ys7OTnZ2dbG1t8/13aGiojhw5orS0NKWnpystLS1ff6empiotLS3bXmxsbLINxatXr35XYO7t7W06srt8+fJmm/8AAAAAUBgEzQAAoNgzGAzy9vaWt7e3wsPD832/9PR0JSYmZnu08LVr13INiHO67O3trXLlymUJoe8MpbMLqe3t7eXq6prtEdbly5eXwWCw4BwEAAAAAMsiaAYAAKWWra2tPDw85OHhYe1WAAAAAKBU48R9AAAAAAAAAIBCIWgGAAAAAAAAABQKQTMAAAAAAAAAoFAImgEAAAAAAAAAhULQDAAAAAAAAAAoFIJmAAAAAAAAAEChEDQDAAAAAAAAAAqFoBkAAAAAAAAAUCgEzQAAAAAAAACAQiFoBgAAAAAAAAAUCkEzAAAAAAAAAKBQCJoBAAAAAAAAAIVC0AwAAAAAAAAAKBSCZgAAAAAAAABAoRA0AwAAAAAAAAAKhaAZAAAAAAAAAFAoBM0AAAAAAAAAgEIhaAYAAAAAAAAAFApBMwAAAAAAAACgUAiaAQAAAAAAAACFQtAMAAAAAAAAACgUgmYAAAAAAAAAQKEQNAMAAAAAAAAACoWgGQCAMsRoNFq7BQAAYGFs7wEA1kDQDABAGdGwYUPFxMToypUr1m4FAABYSGpqqnbs2KFmzZpZuxUAQBlD0AwAQBnRpk0bxcXFqWHDhvrjjz+s3Q4AADCz06dPq3nz5lq3bp3at29v7XYAAGUMQTMAAGVEeHi4du/eLU9PTz344INq1qyZpkyZosuXL1u7NQAAUEA3b97Ud999pw4dOqhq1ao6deqUNmzYoO7du1u7NQBAGUPQDABAGRIcHKzNmzdr/vz5cnV11dChQ+Xv76+2bdvqo48+0u+//67r169bu00AAJCDlJQU7dixQ59//rm6du0qPz8/devWTZcuXdLnn3+uP//8U02aNLF2mwCAMshg5FsCAAAos86fP6+FCxdqxYoV2r59u5KSkmRra6sHHnhADz30kB588EHdd999Cg0Nla+vrwwGg7VbBgCgzLh69aqOHj2qI0eOaM+ePdqyZYv++OMP3bp1S46OjmrYsKFatWqlXr16KTQ0tMj7W7t2raKiohQTE6OQkJAiHx8AULwQNAMAAElSenr6/9fe3b009fgBHP/sQafTaSYukCIKwxsvugujP6HL/uSg67ooQugiIlALs8ipbTvfi36OdA/OPun0x+sFB7fzrOjm3uecLd6+fRuvXr3qDe/fv+9NbzQasba2Fo8ePer7KkIDwN/Z29vrxeSzX79+/dqb7+7du/H06dPY3NyMzc3NePz4cdRqtQnuudAMwGlCMwAw1MHBQXz48CG2trb6XgB/+vSpN99JhF5bW4t79+5Fs9kcOMzOzk7wuwGAq3N8fBy7u7uxs7PTN3z+/Ln3fPpnTF5ZWRl4QHdtbS0WFxcn+N0MJjQD8KfqpHcAALi+6vV6bGxsxMbGRt+0PyP0SYDe2tqKN2/exM7OTuzt7fUtMz8/PzRCnx2Wl5ejWvWvCgDXQ7fbjb29vYHheNDw7du3vnU0Go1oNptx586dWF9fj+fPn1/7mAwA4/LqDQD4K6MidMTvM7m+fPky8kX469evY2dnJ7a3t+Pw8PDU8qVSKZaXl/sC9K1bt6LRaPQNCwsLp+7Pzc1FuexzjwH4rSiKaLVa8f379/jx40ff8Of4/f39vrORd3d3o9PpnFrn1NTUqeeoBw8exJMnTwYeQF1ZWXFlDwD/14RmAOBSTE9Px+rqaqyurp47b1EU8fPnz3PPDnv37l3s7+/3QkC73R66zlKpFPPz82NF6fPGNxqNmJ6e/pc/HgDG0Ol0hsbgUeOGje92u0O3VS6XTz0frKysRLPZjPX19aFX3ywuLvqMAgD4H6EZAJi4kyg8Pz8fDx8+HGuZoiji6OhorOhw9v7Hjx/7xrVarZHbq9Vq0Wg0YnZ2NmZmZmJmZiZqtVrv9rjD3yzjLUSASep0OnF4eDhwODo6Gjotu8w4j83T09MDDxTevn077t+/P/Jg4tn79XpdNAaABK9aAIAbqVQq9UJss9lMr6/dbo91NtyoKLK/vx/b29sjI8rx8fGF961cLo8dsavValQqlahWq323R02b9HyVSkXg4cYpiiK63W602+1ot9vR6XTOvX2V8523jrOPVcMeu0ZdPTLM1NTUWAfWFhYWotlsDjwQd3JVyqhA7GoTALg+hGYAgIioVquxtLQUS0tLl7qdbrc7dty56NmArVarF5Ky8arT6fS9F+llq1QqVxa4T96/u1QqDR0y0y9z3Rfddr1ej4ODgyiKIiJ+x9Fhw2VOv6ptd7vdKw2+V6lcLo/9+3/e30KlUolarRbLy8v//IqMWq0WlUrlSn82AMDkCc0AAFeoXC7H7OzsjfhAqKIoesE5G60ntfzx8XG0Wq1T43/9+jUyWI4bNm/KPM+ePYuXL19eKGRf5Tz/ejsnMXZQXK3VajE3N/dPD2hc5fLO+gcArjOhGQCAgUqlUi9y1Wq1Se8OAABwjZUnvQMAAAAAANxsQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAAAAAClCMwAAAAAAKUIzAAAAAAApQjMAAABwYc1mM168eBH1en3SuwLANVAqiqKY9E4AAAAAAHBzOaMZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAFKEZAAAAAIAUoRkAAAAAgBShGQAAAACAlP8AheLH9BP4HCgAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='suppress')\n", - "diagram = parser.sentence2diagram(tokens, tokenised=True)\n", - "\n", - "diagram.draw(figsize=(23,4), fontsize=12)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " More details about :term:`DisCoCat` and syntax-based models will follow below.\n", - " \n", - "To tokenise many sentences at once, use the :py:meth:`~.SpacyTokeniser.tokenise_sentences` method:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[['This', 'is', 'a', 'sentence', '.'],\n", - " ['This', 'is', '(', 'another', ')', 'sentence', '!']]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sentences = [\"This is a sentence.\", \"This is (another) sentence!\"]\n", - "\n", - "tok_sentences = tokeniser.tokenise_sentences(sentences)\n", - "tok_sentences" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Finally, ``lambeq`` provides tokenisation at the sentence-level:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['I love pizza.', 'It is my favorite food.', 'I could eat it every day!']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "text = \"I love pizza. It is my favorite food. I could eat it every day!\"\n", - "sentences = tokeniser.split_sentences(text)\n", - "sentences" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " To simplify the rest of this tutorial, all sentences in the following sections will be delimited by white spaces, so that the parser can tokenise them properly without extra handling." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Syntax-based model: DisCoCat" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In order to obtain a :term:`DisCoCat`\\ -like output, we first use the :py:class:`.BobcatParser` class from :py:mod:`~lambeq.text2diagram` package, which, in turn, calls the :term:`parser`, obtains a :term:`CCG ` derivation for the sentence, and converts it into a :term:`string diagram`. The code below uses the default :term:`Bobcat` parser in order to produce a :term:`string diagram` for the sentence \"John walks in the park\".\n", - "\n", - ".. note::\n", - " \n", - " ``lambeq``'s string diagrams are objects of the class :py:class:`lambeq.backend.grammar.Diagram`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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tm3bVjfddJNuuukm5ebm6rzzzlNSUpImTpzYAGsNAC1bfd66MCQkRH5+fiopKdFFF13UgFMBDWPXrl1Oe8hTUlJUWlqq6OhoffTRRyooKNCHH37o9KySr776qs7LiY2N1ezZszV06FCNHDlSX3zxhfz8/BpkHWAe9rS7mIiICJ199tlavHixTpw44Tj9p59+0qeffqqLL77YvOGAOkhISNCGDRv01VdfOaI9ODhY3bt3d+xBLzu9bA9M+T2JhYWF+vvf/16nZV500UV69913tXr1al1//fVOj2xnZGQ4nbd169aKjY1VQUFB3VcOAFBB2U6F8vdfasvNzU1XXnml3n//ff30008Vvn7s2LH6jgfUy8svv+z0edlbsCUmJlZ6PyYrK0tvvPHGGS2rV69e+uSTT/TLL7/o0ksv5X3cXQB72l3QM888o8TERJ177rmaMGGC4y3fAgIClJSUZPZ4QK0kJCToiSee0MGDB51eVOu8887Tq6++qujoaLVv316SNGjQILVp00Y33nij7rjjDtlsNr311ltn9HTgP/3pT3rjjTd0ww03yN/f3/Hep3FxcRo6dKji4+PVtm1bbd68WUuXLtW0adMaZoUBoIWLj4+XJE2fPl1XX321WrVqpUsvvbTW3//UU0/pq6++0oABA3TLLbcoLi5Ox48f19atW/X555/zVGGYau/evbrssss0cuRIfffdd1qyZInGjRun3r17y8vLSx4eHrr00ks1efJk5ebmauHChQoNDVVaWtoZLW/gwIFasWKFLr74Yl111VVavny5WrVq1cBrhabCnnYXUBYmZY/SXXTRRVq9erWCgoL08MMP69lnn9XAgQP1zTffVPvCFYCVDBo0SG5ubvLz81Pv3r0dp5d/qnyZoKAgrVy5UhEREZoxY4aeffZZDRs2TLNnzz6jZV933XV6+eWXtWDBAt13332SpDvuuEP79u3TrFmzdMcdd+g///mPHn/8cc2ZM6ceawkAKNOvXz899thj2r59u8aPH69rrrmmTnvIw8LCtHHjRt10001atmyZ4xW0jx8/7niGFmCWf/3rX/L09NQDDzygjz/+WNOmTdNrr70m6fcXkF66dKlsNpv+8pe/aP78+Zo0aZLuvPPOei3zggsu0L///W99+umnFZ5BiObFZrjoK9OEhITo3nvv1QMPPGD2KI1u7ty5uvPOO5WS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nTpVpaWlZo+DFuLAgQOaNm2aRo0apdGjR5s9DiyAaAeABjR58mQVFRUpKSmJ90RtBtLT0zV79mxddtll6tSpk9njoJzg4GCNGzdOL774og4dOmT2OKiFZ555RsePH9e0adPMHqXBtG/fXosWLdK7776riRMnEu5odAcOHNAf//hHtWrVSvPnz5fNZjN7JFgA0Q4ADSgsLEyzZ8/W3LlzNX36dMLdwtLT03XhhRcqOztbTz31lNnjoBJJSUny8PDQ0KFDCXeLe/bZZ/XII49oxowZio2NNXucBvXnP/9Zb731lhYvXqxRo0Zp//79Zo8EF7Vy5UoNGjRIpaWl+vrrr9W+fXuzR4JFEO0A0MDuuusuzZkzR7NmzSLcLaos2A8fPqyvvvpKf/jDH8weCZWIiorS119/reLiYsLdwp599lndd999mj59umbOnGn2OI1i3Lhx+uijj/Tjjz+qR48eevHFF1VSUmL2WHARR44c0dVXX61LL71UPXv21Nq1a9WxY0ezx4KFEO0A0AjuueceR7jff//9KioqMnsk/L+DBw86BXtcXJzZI6Ea0dHRTuG+a9cus0fC/yspKdGTTz7pCPbHHnvMpZ/Ke/HFF+vnn3/WjTfeqLvvvluDBg3SmjVreGAWZ+zkyZOaP3++unfvri+++EJLlizRqlWr2MOOCoh2AGgk99xzj5577jnNmTNHPXv21IoVK7hzZ6KcnBzNmDFDXbt21bFjxwj2ZqQs3EtLS9WjRw/dc889On78uNljtWifffaZ+vbtq+nTp+tvf/ubywd7GX9/f7388stat26dTp48qfPPP19/+MMf9PTTTystLc3s8dAMGIah9evXa9KkSYqIiNCtt96qSy65RL/88ouuvfbaFnE9Qt0R7QDQiO6++259//336tixo/70pz9p6NCh2rx5s9ljtSjFxcWaP3++YmNjNWfOHN1zzz3auXMnwd7MREdH66efftIjjzyihQsXKiYmRs8995wKCgrMHq1F+emnn5SYmKjhw4fLz89P69ev16OPPtriQmPQoEH64Ycf9OWXX6pfv35KSkpShw4ddOmll2r58uU8uwoVHD161PEg/rnnnqvVq1fr7rvv1p49e/Tmm28qODjY7BFhYUQ7ADSy3r17Kzk5WatWrVJGRob69euna6+9VuvWreOViBtRdna23nrrLfXq1Uu33nqr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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "sentence = 'John walks in the park'\n", - "\n", - "# Parse the sentence and convert it into a string diagram\n", - "parser = BobcatParser(verbose='suppress')\n", - "diagram = parser.sentence2diagram(sentence)\n", - "\n", - "diagram.draw(figsize=(14,3), fontsize=12)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " Recall from previous section that when the input to :py:meth:`~.sentence2diagram` method is a list of tokens, you should also set ``tokenised`` argument to True (by default is set to False).\n", - "\n", - "Another case of syntax-based models in ``lambeq`` is :ref:`tree readers `, which will be presented later in this tutorial." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Bag-of-words: Spiders reader" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ":term:`DisCoCat` is not the only :term:`compositional model` that ``lambeq`` supports. In fact, any compositional scheme that manifests sentences as :term:`string diagrams `\\ /:term:`tensor networks ` can be added to the toolkit via the readers of the :py:mod:`.text2diagram` package. For example, the :py:obj:`~lambeq.text2diagram.spiders_reader` object of the :py:class:`.LinearReader` class represents a sentence as a \":term:`bag-of-words`\", composing the words using a :term:`spider` (a commutative operation)." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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X/+HP/xh1KpVKyZOnHhcrh8VKy/1ABybZ599Ni655JLo3LlzjB8/Pnbt2hUTJ06M/v37x8KFC8u8qEVExOjRo6NTp05xxx13xMKFC+NXv/pVFBQUxI9+9KMyl5szZ0489thjcf3110ejRo3i5z//eXzhC1+IlStXRosWLU7gNQSORs+ePaNp06bx0ksvxfDhwyMiYvbs2VGrVq3485//HFu3bo3GjRtHSUlJzJ07N7761a9GxMeRoWHDhnHLLbdEw4YN4/nnn4/vfe97sXXr1vjxj3981F+/uLg4vvzlL8fkyZNjypQpcdlll0XExzdG7rjjjvjKV74S55xzTmzdujVef/31WLhwYQwZMqTivxFAMu+9916MGjUqrrnmmvjSl74Uv/71r+Oqq66Ks88+O3r06JF6POA4+sd//Mf461//Gg8//HD89Kc/jZYtW0ZERKtWrSLi6O5brFmzJs4777zsxhKtWrWKp556Kq655prYunVr3HTTTamuHlBBRo8eHR07dow77rgjXn311fj5z38emzZtyj6g+Ytf/CJ69OgRw4cPj7y8vJgxY0Zcf/31UVJSEt/4xjfKfK533nknrrzyyvja174W1157bZx22mkH/Zq33XZb/Md//Ef88pe/jGuvvfa4X0c+OYGyivrWt74VzZs3j1deeSWaN28eEREjR46Ms846K77//e/Hb37zmzKXP+uss+LBBx/Mnt6wYUM8+OCDBwTKJUuWxOLFi+PUU0+NiIhBgwbFmWeeGQ8//LBXxIJKqFatWtG/f/+YPXt29rzZs2fHyJEjY9q0aTF37ty4+OKLs7FywIABERHxxz/+MerVq5f9mOuuuy6uu+66uO++++KHP/xh1KlT54hfu6ioKMaOHRvTp0+P6dOnxz/8wz9k3/fEE0/EpZdeGg888EAFXlugMnrnnXfipZdeyq4vo0ePjvbt28dDDz0UEyZMSDwdcDydccYZ0bt373j44Ydj5MiRB2wkcTT3Lf71X/81iouL46233spGy+uuuy6uvPLKGD9+fHzta18rc5sFqHo6deoU06ZNi4iIb3zjG9G4ceO477774tZbb40zzjgjZs2aVebvfNy4cXHxxRfHT37ykwMC5XvvvRczZ86Mz33uc4f8erfeemv89Kc/jYceeii+9KUvHZ8rRYXzFO8qaPXq1fHmm2/GVVddlY2TER/fQBgyZEg8+eSTB3zMddddV+b0gAEDYsOGDbF169Yy5w8ePDh7A6L0czZu3DiWLVtWwdcCqCgDBgyIhQsXxo4dOyLi460VLr300vj0pz+dDZezZ8+OnJycOP/88yMiytwA2LZtW6xfvz4GDBgQO3fujKVLlx7xa+7Zsycuv/zyePzxx+PJJ58sEycjIpo2bRqLFi2Kd999t6KuJlBJde/ePRsnIz7ecuq0005z2wE44n2LTCYTf/rTn2LYsGGRyWRi/fr12cPnPve52LJlSyxcuDDV+EAF2T8yfvOb34yIyLaLfe+bbNmyJdavXx+f/exnY9myZbFly5YyH9upU6dDxslMJhPjxo2Lu+++O37/+9+Lk1WMLSiroL/97W8REQfdlLlbt27xP//zP7Fjx45o0KBB9vwOHTqUuVyzZs0iImLTpk3RuHHjQ16u9LKbNm2qkNmBijdgwIAoKiqKV155Jdq3bx9r166NAQMGxKJFi8oEyu7du2cf1Fi0aFHcdttt8fzzzx/wQMX+NwIO5o477ojt27fHU089FQMHDjzg/T/4wQ9ixIgR8alPfSp69uwZF198cXzxi1+MM84445NfYaBScdsBOJQjrQ/r1q2LzZs3xwMPPHDIZ12sXbv2uM4IHH9du3Ytc/rUU0+NWrVqZfdX+/LLL8f3v//9eOWVVw54rYwtW7ZEkyZNsqc7dep0yK/z29/+NrZv3x6/+MUv4sorr6y4K8AJYQvKGiI3N/eg52cymWO6HFB59OnTJ+rWrRsvvfRSzJ49OwoKCuJTn/pUDBgwIObNmxe7d++O2bNnZ7dw2rx5c3z2s5+NP//5z/GDH/wgZsyYEc8880x2lw8lJSVH/Jqf+9znokGDBnHnnXeW2cF1qQsuuCDef//9+PWvfx09e/aMX/3qV9G7d+/41a9+VbFXHkjObQfgUI60PpTe5hg7dmw888wzBz3079//hM0LnBg5OTnZ4++//35cdNFFsX79+vjJT34STzzxRDzzzDNx8803R8SB900Ot8uH/v37R+vWreOee+6JjRs3Hp/hOW5sQVkFnXLKKRHx8T6f9rd06dJo2bJlma0ngeotPz8/zjnnnJg9e3Z06NAhGyIHDBgQu3fvjj/84Q+xZs2auOCCCyIi4sUXX4wNGzbEY489lj0vImL58uVH/TXPO++8uO6662Lo0KFx+eWXx5QpUyIvr+y/lObNm8fVV18dV199dWzfvj0uuOCCGD9+fHzlK1+pgGsNAFQG+4aG8mrVqlU0atQoiouLY/DgwRU4FVCZvPvuu2W2fHzvvfeipKQkOnbsGDNmzIjdu3fH9OnTy2x1/cILL5T763Tp0iXuvPPOGDhwYFx88cXx3HPPRaNGjSrkOnD82YKyCmrTpk18+tOfjt/85jexefPm7Plvv/12PP3003HppZemGw5IYsCAAfHaa6/FCy+8kA2ULVu2jG7dumW3jCw9v3Rrhn23btqzZ0/cd9995fqagwcPjkmTJsXMmTPji1/8YplHNzds2FDmsg0bNowuXbrE7t27y3/lAIBKq3TDiH3vlxyt3Nzc+MIXvhB/+tOf4u233z7g/evWrfuk4wGVwL333lvm9MSJEyMi4pJLLjnofZMtW7bEQw89dExf64wzzognn3wylixZEsOGDYtdu3Yd49ScaLagrKJ+/OMfxyWXXBKf+cxn4pprroldu3bFxIkTo0mTJjF+/PjU4wEn2IABA+Lf//3f44MPPijzYhUXXHBB/PKXv4yOHTvGySefHBER/fr1i2bNmsWXvvSluOGGGyInJyd+97vfHdPTMUeOHBkPPfRQ/PM//3M0btw4fvnLX0bExy+aMXDgwDj77LOjefPm8frrr8ejjz6afcVOAKB6OPvssyPi41fjHjNmTNSuXTuGDRt21B////7f/4sXXnghzj333Lj22muje/fusXHjxli4cGE8++yznqYJ1cDy5ctj+PDhcfHFF8crr7wSv//97+Of/umf4swzz4y6detGfn5+DBs2LL72ta/F9u3b4z//8z+joKAgVq9efUxf77zzzotp06bFpZdeGqNGjYqpU6dG7dq1K/haUdFsQVlFlIaD0kcXBg8eHDNnzowWLVrE9773vZgwYUKcd9558fLLLx92p7FA9dSvX7/Izc2NRo0axZlnnpk9f9+ne5dq0aJFPP7449GmTZu47bbbYsKECTFkyJC48847j+lrjx07Nu6999544IEH4lvf+lZERNxwww2xYsWKuOOOO+KGG26IWbNmxQ9/+MO46667PsG1BAAqm759+8a//du/xZ///Oe46qqr4sorryzXlo+tW7eOefPmxdVXXx2PPfZY9hV4N27cmH0WCFC1TZ48OerUqRPf+c534oknnohx48bFgw8+GBEfv/jv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nKd4U+FKSkri9ddfj6lTp8a0adNi8eLFUbdu3RgyZEiMHDkyhg4dGgUFBanHBCrY3r1742c/+1mMHz8+mjdvHj//+c9j5MiRXsETqjlP8YaaIZPJxJQpU+KGG26ITZs2xe233x433nijKAHV0Nq1a2PGjBkxbdq0eOaZZ6KwsDC6d+8eI0aMiJEjR0afPn2iVi3bu1GxBEqOu3fffTemTZsWU6dOjblz50ZERP/+/WPEiBHZVwUHqo+//e1vMW7cuHj88cdj2LBhMXHixDjllFNSjwUcJwIlVH/+t0P15347qQmUnFBr166Nxx9/PKZOneqRGKjG9t/KYvz48XHTTTfZygKqIYESqq99nx3RrFmzmDhxomdHQDXhmY9UNgIlyezYsSOefvrpmDZtWsyYMSM2btwYbdq0iaFDh8aAAQOiX79+0blzZzeAoArbtm1bfPe7342JEydGjx494t///d/jsssu80AEVCMCJVQ/JSUl8cQTT8S//uu/xqJFi+KGG26IH/zgB9GoUaPUowHHKJPJxLJly2Lu3Lkxe/bsePzxx2P16tXRokWLGDp0aIwcOTKGDBkSDRo0SD0qNZRASaVQVFQUL7/8ckybNi1mzpwZS5YsiYiPXy28X79+2UPv3r2jbt26iacFymvhwoVxww03xMsvvxynn356/O///b9j7Nix/p6hGhAoofooLCyM3/3ud3HXXXfFO++8E+eff37cfffd0bt379SjAeVUWFgYCxcujLlz58bLL78cc+fOjbVr10ZERLdu3eLiiy+OESNGRP/+/SMvLy/xtCBQUklt3LgxXn311exCOm/evNi5c2fk5+dHnz59ykTL1q1bpx4XOEpz586NCRMmxNSpU6OgoCC++c1vxte//vVo3rx56tGAYyRQQtW3YcOGuP/++2PixImxdu3aGDlyZNx6663Rr1+/1KMBR2nNmjUxd+7cbJBcsGBB7NmzJ+rXrx/nnHNO9O/fP/r16xfnnXee295USgIlVcLevXvjL3/5SzZYzp07Nz744IOIiDj11FPLBMsePXpEbm5u4omBw/nrX/8aP/3pT+O//uu/olatWnHNNdfEzTffHJ06dUo9GlBOAiVUXcuXL4+f/OQn8etf/zpKSkriqquuiltuucWLYUAlV1xcHIsWLSoTJJctWxYREe3bt49+/fplg+QZZ5xhP/BUCQIlVdYHH3yQXZDnzp0bb7zxRhQXF0fjxo3jvPPOyy7K5557rv3lQCW1du3auO++++Kee+6JTZs2xahRo+LWW2+Nvn37ph4NOEoCJVQ98+fPjwkTJsSjjz4azZs3j3HjxsX1118frVq1Sj0acBBbt26N1157LXvf99VXX42tW7dGbm5unHXWWdn7vp/5zGeiffv2qceFYyJQUm3s2LEj5s+fXyZabtq0KWrVqhXdu3ePM844I3r27Jk9nHLKKV6oAyqJnTt3xm9+85u466674v33349+/frFP/3TP8Xll1/u1QOhkhMooWpYs2ZNPProo/GHP/whXnnllejSpUvccsst8aUvfSnq16+fejwgPn6Bqr/97W/x9ttvZw9/+ctfYvHixVFSUhLNmjXLPnOwf//+0adPHy9qQ7UhUFJtlZSUxDvvvJPdh+WiRYvi7bffji1btkRERMOGDaNHjx5lomXPnj2jdevWXjkcEikuLo5p06bFgw8+GE8//XSUlJTERRddFGPGjInPf/7z0axZs9QjAvsRKKHy2rRpU0yZMiUmTZoUzz33XNSqVSv+4R/+Ia655poYMWKE3SJBIplMJtasWVMmRL711luxaNGi2LFjR0RENGnSJHr27Bk9evSIc845J/r16xennXaajWyotgRKapRMJhOrVq2Kt956q8w/g8WLF0dhYWFERLRo0aJMsOzVq1f06NEjmjZtmnZ4qGE2bNgQjz32WDz88MPx4osvRl5eXlxyySUxZsyYGDZsWDRs2DD1iEAIlFDZbN++PWbMmBEPP/xwzJw5M4qKimLQoEExZsyY+Md//Mdo0aJF6hGhRtm8eXOZ+56lhw0bNkRERN26daN79+5l7n/27Nkz2rVrZ8MZahSBEuLjrbaWLVt2wCNYf/3rX6O4uDgiIk4++eQDtrbs1q2bp8TACbB69er47//+75g0aVK88sorUa9evRg2bFiMGTMmLrnkkqhbt27qEaHGEighvcLCwnjqqadi0qRJMWPGjNi1a1d85jOfiTFjxsTll18ebdq0ST0iVHs7d+6MJUuWHBAiP/zww4iIyM3NjdNOO+2A+5SdO3e2NTOEQAmHtXv37njnnXcO+CezfPnyiIjIycmJU089NbvpfZcuXaJz587RuXPnaNu2rc3v4ThYsWJFTJ48OSZNmhRvvvlmNG7cOD7/+c/HsGHDYtCgQdG8efPUI0KNIlBCGhs3bowXXnghZsyYEVOmTImtW7fGpz/96RgzZkxcccUV0bFjx9QjQrVTUlISH330USxbtiyWLVsW7733XnZXYu+//36U5pVOnTodECJPO+20qFOnTuJrAJWXQAnHYPv27bF48eIy0XLRokXx0UcfZS9Tp06d6NixY5x66qnZaFl66NSpk6enQgVYsmRJTJ48OR555JFYsmRJ5OTkxNlnnx2DBw+OwYMHR//+/W1dCceZQAknRmFhYbz88svx7LPPxrPPPhsLFiyITCYT3bp1i9GjR8eYMWPi9NNPTz0mVHnbt2+P5cuXZyPk+++/nz2+YsWK2L17d/aybdu2PeB1Dbp37+6+HhwDgRIq0K5du2LFihXZf2D7/0PbtWtX9rIFBQUHhMvSQ7t27Wx9CeW0cuXKeO6557J33NauXRt169aN888/PxsszzrrLH9bUMEESjg+iouL480338z+X5szZ04UFhZGQUFBDB48OIYMGRIXXXRRtG/fPvWoUKWUlJTEqlWrytxn2/ewdu3a7GXr169/yPtsHTt2jHr16iW8JlC9CJRwgpS+Utuh/hGuWrUqe9n8/Pzo2LFjdO7c+YAtMDt16hSNGjVKeE2g8stkMvH2229n79TNmjUrduzYEc2bN4+LLrooGyw7d+6celSo8gRKqDjLli2LZ599Np555pl4/vnnY+PGjdGgQYP47Gc/m/3f1bNnTy+cAUewbdu2w24FuWfPnuxl27Vrd8gI2bp1a39vcIIIlFBJFBYWHrD15b6HHTt2ZC/bqlWr7D/N9u3bR7t27aJt27bZt23atIn8/PyE1wYqlz179sRrr72WvdM3b968KC4ujk6dOsWFF14Y5513XvTt2zd69OgReXl5qceFKkWghGNTVFQUixYtivnz58err74azz//fCxfvjxyc3Pj3HPPzQbJc8891+062MeePXti9erV8dFHH8WqVauybz/44IPsfad169ZlL9+gQYPDbgVpd0BQOQiUUAVkMplYt27dQR8B/PDDD2PVqlVl9oUS8XHE3D9c7v+2ZcuWnu5KjbRly5aYNWtWPPvss/HCCy/E4sWLo6SkJOrVqxdnnXVW9O3bN/r06RN9+/aNrl27+juBwxAo4chKSkri3Xffjfnz52cPb7zxRhQWFkatWrWie/fuMWjQoBg8eHAMHDgwGjdu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AEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyOZlMJpN6CAAAAACgZrIFJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJ/H9/ju+sDvxdCAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import spiders_reader\n", - "\n", - "# Create string diagrams based on spiders reader\n", - "spiders_diagram = spiders_reader.sentence2diagram(sentence)\n", - "\n", - "# Not a pregroup diagram, we can't use grammar.draw()\n", - "spiders_diagram.draw(figsize=(13,6), fontsize=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Word-sequence models: Cups and stairs readers" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The :py:class:`.LinearReader` class can be used to create any kind of model where words are composed in sequence, from left to right. For example, the :py:obj:`~lambeq.text2diagram.cups_reader` instance of this class generates a \":term:`tensor train`\"." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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nb799lsNHDhQXl5e6tKli95//31zCwWcFBMTo2eeeUaS1LlzZ/thR8ofJ8+Z9ZKTJ0/qoYceUps2bezT/fOf/6yv2QAqVHYonsOHD2vChAny8/NTQECAnnzySeXn59une/fdd3XTTTcpKChInp6eCgsL09tvv33Z45Ut89evX6/+/fvL29tbS5YsqfT5X375Zbm5uWnRokV1Mn9oeAjEXEjHjh2VmJioH3/8sVYe7/PPP1d2drYmTpyo4OBgDR8+XCtWrHD6/mUfzC1btqyVeoCa2LRpk0aPHq1z584pJiZGTz31lOLj4zVkyJAKD7Y8YcIEZWVlae7cuZowYYL+9a9/ac6cOZdN9+2332ratGmaOHGiXnvtNeXn5+vuu+9Wenp6PcwVrOa6665TixYttHXrVvtt27Ztk5ubm/bt26eLFy9KkkpLSxUfH69hw4ZJ+i0U8PX11VNPPaU33nhD/fr10wsvvKC//OUvV/T8JSUlevDBB/X+++9rzZo19t3tY2JiNGfOHI0YMUJvvfWWnn/+eXXo0EF79uyppTkHas+RI0c0fvx4RUdHa8GCBWrZsqUefPBBHThwwOzSgGrddddduvfeeyVJCxcu1AcffKAPPvhAgYGBkpxbLzl79qwGDRqkTZs2afr06XrjjTcUGhqqhx9+WK+//roZswU4mDBhgvLz8zV37lyNGzdOb775ph555BH7399++2117NhRzz33nBYsWKCQkBBNmzZNf//73y97rKSkJN17772Kjo7WG2+8ofDw8Aqfc9asWXrhhRe0ZMkSzZgxo65mDQ0Mu0y6kJkzZ2rs2LEKDw/XwIEDFRkZqZtvvlkjRoxQkyZNrvjxli9frsGDByskJESSNHHiRE2bNk2pqan2D93yMjIyJEk5OTnavHmz/v73vyswMND+hQww0zPPPKNWrVppx44datWqlSTpjjvu0PXXX6/Zs2frvffec5j++uuv17Jly+zX09PTtWzZMv3P//yPw3SHDh3SwYMH1bVrV0nSiBEj1LdvX3300UecuQa1zs3NTUOGDNG2bdvst23btk133HGHYmNjFR8frzFjxtjDsbKRuh9++KHD7gFTp07V1KlTtXjxYr388stOHV+puLhYkyZN0ueff67PP/9co0aNsv/tyy+/1Lhx47R06dJanFugbiQlJWnr1q3298eECRMUEhKid999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ok6dOumaa66RJA0ePFgtW7bUAw88oCeeeEI2m00ffPDBVe0edscdd+jdd9/Vf/zHf8jPz09LliyR9NtByocPH65+/fqpVatWSkhI0KpVqzjTKgDUgX79+kn67WyREydOVJMmTXTrrbc6ff+//vWviouL0w033KA//vGPCgsLU0ZGhvbs2aNNmzbZzxwPmCUlJUW33XabxowZox07dmj58uW677771LdvX3l5ealp06a69dZb9eijjyo7O1v/+Mc/FBQU5PQeUZcaNGiQYmNjNW7cOI0fP16fffaZmjRpUstzhYaIEWIuZP78+RoxYoTWrl2rp556Sk899ZR27dqladOmaefOnWrRokW1j7Fnzx4dPny4yg/Vsr8tX7682sd75JFH5O/vr7/+9a9OzwdQG8q+7JdtRRo5cqTWrVungIAAvfDCC5o/f74GDRqk7du3V3mwTaAhGjx4sNzd3dW8eXP17dvXfnv53SfLBAQE6IsvvlDbtm01a9YszZ8/X9HR0Xrttdeu6rknTZqkv//971q6dKmeeeYZSdITTzyhn3/+WXPnztUTTzyhb775Ri+//LIWLFhQg7kEAFRkwIABeumll7Rv3z49+OCDuvfee69oZFebNm20a9cuTZkyRatXr7afZS8jI4M9O9AgrFy5Up6envrLX/6iL7/8UtOnT9eyZcsk/bbX06pVq2Sz2TRz5ky98847euSRR/Tkk0/W6DlvuukmffLJJ9qwYcNlI+HhumyGhY8g+tNPP6lHjx7aunWrw5cHoKbuuusu5efn23dXbQguXLigli1b6t///rfGjx9vdjl17s0339STTz6pI0eOOJx+HLXvscce0+7du5WQkGB2KQ48PT21cOFCTZs2zexS4EJmz56tf/7znzpx4oTZpTgICQnRQw89pDlz5phdClzI4sWL9Z//+Z8Nbvfn/v37a8CAAXr77bfNLgUuZNWqVbrnnnt0/vx5pwYS1Jdx48bJy8tLq1evNruUOhcTE6M5c+YoNTXVfrI21I1t27Zp2LBhSkpKUvfu3c0uxzSMEAPgknbv3q1mzZrZD6gPAAAAAEAZjiEGwKV8+umn2rJli1asWKE//OEPl50JDwAAAAAAvikCcCkzZ85UVlaWHn74YS1cuNDscgAAAAAADRCBGACXkpKSYnYJAAAAAK5QTEwMZ39HveIYYgAAAAAAALAU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wWSGYei5557Txx9/rPfff98lwjC4HgIxXLEOHTooLi5Onp6eCg8P14svvqjCwkKzy4ILOnz4sKKiovTss8/qL3/5i+bNm+cSu45d6uabb9aSJUu0bNkyjRo1SmfOnDG7JJjkxx9/1IABA7R7926tXr3aJVceIyIi9OGHH+qLL77Q0KFD2X3SwlJSUjR06FB9+eWX+uijjxQREWF2SbUuNDRUa9as0a5duzRgwAD9+OOPZpcEk5w5c0bR0dH65z//qaVLl+qmm24yu6RaFxwcrC+++ELHjx/X9ddfr++++87skmCS8+fP66677tJf//pXvfbaaxo/frzZJQEVIhDDVenQoYO+//57Pf3003rppZcUERGhHTt2mF0WXERhYaFefPFF9e3bV2fPnlVcXJzmzp3rkmFYmYceekibNm3SwYMHFR4ers2bN5tdEurZu+++q4EDB8rDw0MJCQkaNmyY2SXVmdtvv13x8fFKT09XRESEPvvsM7NLQj1bs2aNrr/+emVkZCg+Pl633Xab2SXVmWHDhikhIUEeHh4aOHCg/vWvf5ldEurZ5s2bFR4erkOHDunrr7/WlClTzC6pzvTp00fff/+92rdvr8jISC1cuFAcocdadu/erYiICG3ZskWxsbF65plnzC4JqBSBGK6at7e3Xn31VSUmJsrHx0dDhgzR7bffrs8//1xFRUVml4dG6NSpU5o7d6569eqll156STNnztS+ffs0fPhws0urFyNGjND333+va6+9VtHR0XrggQe0f/9+s8tCHTIMQ3FxcRo7dqweeugh3Xfffdq5c6d69uxpdml1rl+/ftqzZ49GjBihO++8U+PHj9fOnTvNLgt1bOfOnRo/frzuuusu3XzzzUpMTFS/fv3MLqvO9ezZUzt37tS9996rKVOmaOzYsYqLiyMocHE//PCDHnjgAY0cOVLXXXed9u7da4l1mg4dOuibb77Rk08+qaeeekpRUVH68ssvOeaSi0tOTtZjjz2mIUOGKCgoSN9//71Lb+yAizCAWlBcXGwsXbrUiIiIMCQZwcHBxrPPPmscPnzY7NLQwBUUFBirV682brnlFsPNzc3w9vY2Jk+ebOzbt8/s0kxTXFxsvP7660ZISIghyRg9erSxceNGo7S01OzSUEuKioqMDz/80L7M7N27t/HJJ5+YXZYpSktLjWXLlhmhoaGGJCMy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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import cups_reader\n", - "\n", - "# Create string diagrams based on cups reader\n", - "cups_diagram = cups_reader.sentence2diagram(sentence)\n", - "\n", - "cups_diagram.draw(figsize=(12,2), fontsize=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note the use of a `START` symbol in the beginning of the sentence, represented as an order-1 tensor (a vector). This ensures that the final result of the computation (that is, the representation of the sentence) will be again a tensor of order 1." - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Another pre-made word-sequence model is provided by the :py:obj:`~lambeq.text2diagram.stairs_reader` instance. This model combines consecutive words using a box (\"cell\") in a recurrent fashion, similarly to a recurrent neural network. " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAIHCAYAAABwnIDaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6YklEQVR4nO3df3SW9Z3n/1eUEYyoKCEKSoiWUSMsahR1QSrOyqKdkalKObgHVxlLBQZa5VC77Xg01roq/mgtO3Ts2GpnQcdfKHSECq7OVAdFa866UuPsQHDxjJzBGxX5VbWQ7x895NtUW0MI3iHX43FOziFX7vuT9034kPDkuq+7oqWlpSUAAAAAUBD7lXsAAAAAAPgsCWIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAECh9Cj3AF3BunXrUiqVyj0GSaqqqlJTU1PuMegm7O2uxf6mM9nfXYv9TWeyv7sW+5vOZH93Hfa2IJZ169alrq4u27ZtK/coJKmsrExTU1PhNyZ7zt7ueuxvOov93fXY33QW+7vrsb/pLPZ312JvC2IplUrZtm1b5s+fn7q6unKPU2hNTU2ZNGlSSqVSoTclncPe7lrsbzqT/d212N90Jvu7a7G/6Uz2d9dhb/9G4YPYLnV1damvry/3GEAns7eh+7K/ofuyv6H7sr/pKlxUHwAAAIBCEcQAAAAAKBRBDAAAAIBCEcQAAAAAKBRBDAAAAIBCEcQAAAAAKBRBDAAAAIBCEcQAAAAAKBRBDAAAAIBCEcT2YQ0NDamoqEipVCr3KMBedvnll6e2trb1/TfeeCMVFRW5/fbbyzcU0G733XdfKioq8sYbb5R7FKCTVVRUZMaMGeUeA+iC/P3QtQliXcCuH5J/8YtflHsUAADgE6xYsSINDQ157733yj0KAJ1AEAMA2MsuvfTSbN++PYMGDSr3KEAHrVixIjfccIMgBtBNCGIAAHvZ/vvvn169eqWioqLcowAAe1FLS0u2b99e7jFoB0Gsi3r66aczatSoHHTQQenTp0/+/M//PE1NTZ942/feey+XX355+vTpk0MPPTSTJ0/Otm3b2txm13OXH3/88QwdOjQ9e/bMkCFD8rOf/eyzeDjQ7f2f//N/UlFRkcWLF7cee/nll1NRUZH6+vo2tz3//PNzxhlnJEkWLVqUP/3TP82AAQPSs2fPfO5zn8uNN96YHTt27PYMLS0t+cpXvpIDDjggCxcuTJJ89NFHueGGG/LHf/zH6dWrV/r27Zuzzjory5cv34NHC+yu372GWG1tbf7sz/4szz33XE4//fT06tUrxx57bP7u7/6uvIMCn6ihoSFf//rXkyTHHHNMKioqPnZdwPb8nP1v//Zv+Yu/+IscccQRrbf78Y9//Fk9DCD//7W4X3/99UyYMCGHHHJI+vbtm6997Wv51a9+1Xq7e++9N3/yJ3+S6urq9OzZMyeeeGJ+8IMffGy9Xd/Tn3zyyZx22mk58MADc/fdd//ez/+d73wn++23X+bOnbtXHh/t16PcA/BxTz31VM4///wce+yxaWhoyPbt2zN37tyMHDkyjY2NbS6snSQTJkzIMccck5tvvjmNjY255557Ul1dnVtvvbXN7Z577rksXLgw06dPz8EHH5zvf//7ufjii7Nu3br07dv3M3yE0P0MHTo0ffr0yc9//vOMGzcuSfLss89mv/32yyuvvJL3338/hxxySHbu3JkVK1bkK1/5SpLf/CO5d+/emTVrVnr37p2nn3461113Xd5///3cdttt7f78O3bsyF/8xV/kwQcfzGOPPZY//dM/TfKbb/g333xzvvzlL+f000/P+++/n1/84hdpbGzMmDFjOv83Ami31atXZ/z48bniiity2WWX5cc//nEuv/zynHrqqRkyZEi5xwN+y0UXXZT/+3//bx544IF897vfTVVVVZKkX79+Sdr3c/a///u/58wzz2z9j+p+/fpl6dKlueKKK/L+++/nqquuKtfDg0KaMGFCamtrc/PNN+eFF17I97///bz77rut/zn1gx/8IEOGDMm4cePSo0eP/PSnP8306dOzc+fO/OVf/mWbtf7lX/4ll1xySa688spMmTIlxx9//Cd+zmuvvTb//b//99x9992ZMmXKXn+M/GGCWBf09a9/PYcffnief/75HH744UmSL37xiznllFNy/fXX5yc/+Umb259yyin50Y9+1Pr+xo0b86Mf/ehjQaypqSmvvfZaPve5zyVJzjnnnJx00kl54IEHvPIF7KH99tsvI0eOzLPPPtt67Nlnn80Xv/jFLFq0KCtWrMh5553XGsdGjRqVJLn//vtz4IEHtt5n6tSpmTp1aubNm5fvfOc76dmz56d+7l//+teZNGlSFi9enMWLF+c//+f/3PqxJ554Il/4whfywx/+sBMfLdAZ/uVf/iU///nPW/8+mDBhQgYOHJh7773XK8hCFzNs2LDU19fngQceyBe/+MWP/Qd1e37O/qu/+qvs2LEjr776amskmzp1ai655JI0NDTkyiuvbPMzAbB3HXPMMVm0aFGS5C//8i9zyCGHZN68eZk9e3aGDRuWf/qnf2qzJ2fMmJHzzjsvd95558eC2OrVq/Ozn/0sY8eO/b2fb/bs2fnud7+be++9N5dddtneeVDsFk+Z7GLWr1+f//2//3cuv/zy1hiW/Oab8JgxY7JkyZKP3Wfq1Klt3h81alQ2btyY999/v83xc889t/Wb9K41DznkkDQ3N3fyo4BiGjVqVBobG7N169Ykv/nf4i984Qs5+eSTW0PZs88+m4qKipx11llJ0uab7ObNm1MqlTJq1Khs27Ytr7/++qd+zg8//DBf+tKX8g//8A9ZsmRJmxiWJH369Mkvf/nL/Ou//mtnPUygk5x44omtMSz5zZkmxx9/vO/LsA/6tJ+zW1pa8uijj+aCCy5IS0tLSqVS69vYsWOzadOmNDY2lmt8KKTfjVozZ85MktZ/c//2z+mbNm1KqVTK2Wefnebm5mzatKnNfY855pjfG8NaWloyY8aM3HXXXZk/f74Y1oU4Q6yL+X//7/8lySeeYllXV5cnn3wyW7duzUEHHdR6vKamps3tDjvssCTJu+++m0MOOeT33m7Xbd99991OmR2KbtSoUfn1r3+d559/PgMHDsyGDRsyatSo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c/zxx3doJgAAANjXCGKwF40ZMybPP/98xo0bl1deeSVz5szJ2LFjc9RRR2Xx4sW7tdbGjRvz5JNP5pJLLmk9dvHFF6eioiIPPfRQu9bYunVr+vXrl379+mXw4MGZPXt2Ro4cmUWLFqWiomK35gEAAIB9lSAGe9nw4cOzcOHCvPvuu3nxxRfzzW9+M5s3b8748ePz2muvtXudBx98MB999FFOOeWUrF69OqtXr84777yTM844o91Pm+zVq1eWL1+e5cuX5957701dXV02bNiQAw88sKMPDwAAAPY5XmUSPiMHHHBAhg8fnuHDh+e4447L5MmT8/DDD+f6669v1/13Ra+RI0d+4sebm5tz7LHH/sE19t9//5x77rmt748dOzYnnHBCrrzyyt0+Yw0AAAD2VYIYlMFpp52WJFm/fn27br927dqsWLEiM2bMyNlnn93mYzt37syll16a+++/P9dee+1uzdG/f/9cffXVueGGG/LCCy/kzDPP3K37AwAAwL7IUyZhL3rmmWfS0tLyseNLlixJknZfyH7X2WHXXHNNxo8f3+ZtwoQJOfvsszv8apMzZ85MZWVlbrnllg7dHwAAAPY1zhCDvWjmzJnZtm1bLrzwwpxwwgn58MMPs2LFijz44IOpra3N5MmT27XOggULcvLJJ7e+uuTvGjduXGbOnJnGxsbU19fv1ox9+/bN5MmTM2/evDQ1NaWurm637g8AAAD7GmeIwV50++2355xzzsmSJUsya9aszJo1Ky+++GKmT5+elStXpk+fPp+6RmNjY15//fVccMEFv/c2uz42f/78Ds05a9as7Lfffrn11ls7dH8AAADYlzhDDPai8847L+edd167b19VVfWxp1jW19d/4tMuf9ugQYPa3KahoSENDQ1tbnPfffflvvvu+8T7H3vssfn1r3/d7jkBAABgX+YMMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFB6lHuArqKpqancIwB0W/6OBQAAupLCB7GqqqpUVlZm0qRJ5R4FoFurrKxMVVVVuccAAAAQxGpqatLU1JRSqVTuUaBdbrrppjQ1NWX+/PnlHgV2S1VVVWpqaso9BgAAgCCW/CaK+Uca+4p+/fpl3bp1qa+vL/coAAAAsE9yUX0AAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEogM2bN+eqq65KbW1tevbsmerq6owZMyaNjY3lHg0AAAA+cz3KPQCw902dOjWPPPJIZsyYkRNPPDEbN27Mc889l6amptTX15d7PAAAAPhMCWJQAE888USmTJmSO+64o/XYNddcU8aJAAAAoHw8ZRIKoE+fPlm5cmXeeuutco8CAAAAZSeIQQHMmTMnq1atysCBA3P66aenoaEhzc3N5R4LAAAAykIQgwKYMGFCmpubM3fu3AwYMCC33XZbhgwZkqVLl5Z7NAAAAPjMCWJQEP3798/06dPz+OOPZ+3atenbt29uuummco8FAAAAnzlBDLq5HTt2ZNOmTW2OVVdXZ8CAAfnggw/KNBUAAACUj1eZhG5u8+bNOfroozN+/PicdNJJ6d27d5566qm89NJLbV51EgAAAIpCEINurrKyMtOnT8+yZcuycOHC7Ny5M4MHD868efMybdq0co8HAAAAnzlBDLq5Aw44IHPmzMmcOXPKPQoAAAB0Ca4hBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFEqPcg8An7V169alVCqVe4wOe/vtt7N169Y0NjaWexQA9sB7772XJN3i7/OqqqrU1NSUewwAgHYTxCiUdevWpa6uLtu2bSv3KHvs1FNPLfcIAHSC7vD3eWVlZZqamkQxAGCfIYhRKKVSKdu2bcv8+fNTV1dX7nEAYJ/X1NSUSZMmpVQqCWIAwD5DEKOQ6urqUl9fX+4xAAAAgDJwUX0AAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEA9sirr76a8ePHZ9CgQenVq1eOOuqojBkzJnPnzk1DQ0MqKio+9W306NGt6+3YsSMDBgxIRUVFli5d+omfc9e6pVKp9djll1/eZs2ePXvmuOOOy3XXXZdf/epXe/u3AQAA2If0KPcAAOy7VqxYkXPOOSc1NTWZMmVKjjzyyLz55pt54YUXctddd2XhwoUZPHhw6+23bNmSadOm5cILL8xFF13UevyII45o/fXTTz+d9evXp7a2NgsWLMj555/f7nl69uyZe+65J0myadOmLFq0KDfeeGPWrFmTBQsWdMIjBgAAugNBDIAOu+mmm3LooYfmpZdeSp8+fdp8bMOGDamurs6wYcNaj5VKpUybNi3Dhg3LpEmTPnHN+fPnp76+Ppdddlm+9a1vZevWrTnooIPaNU+PHj3arDt9+vSMGDEiDzzwQO6888424Q0AACguT5kEoMPWrFmTIUOGfCyGJUl1dfVur7d9+/Y89thjmThxYiZMmJDt27dn0aJFHZ6voqIiZ511VlpaWtLc3NzhdQAAgO5FEAOgwwYNGpSXX345q1at6pT1Fi9enC1btmTixIk58sgjM3r06D1+quMbb7yRJDnssMM6YUIAAKA7EMQA6LDZs2dn27ZtOfnkkzNixIh84xvfyLJly/LRRx91aL358+dnxIgRGThwYJJk4sSJWbZsWd5+++12r1EqlVIqlbJmzZrccccdefTRRzN06NAcf/zxHZoJAADofgQxADpszJgxef755zNu3Li88sormTNnTsaOHZujjjoqixcv3q21Nm7cmCeffDKXXHJJ67GLL744FRUVeeihh9q1xtatW9OvX7/069cvgwcPzuzZszNy5MgsWrQoFRUVuzUPAADQfQliAOyR4cOHZ+HChXn33Xfz4osv5pvf/GY2b96c8ePH57XXXmv3Og8++GA++uijnHLKKVm9enVWr16dd955J2eccUa7nzbZq1evLF++PMuXL8+9996burq6bNiwIQceeGBHHx4AANANeZVJADrFAQcckOHDh2f48OE57rjjMnny5Dz88MO5/vrr23X/XdFr5MiRn/jx5ubmHHvssX9wjf333z/nnntu6/tjx47NCSeckCuvvHK3z1gDAAC6L0EMgE532mmnJUnWr1/frtuvXbs2K1asyIwZM3L22We3+djOnTtz6aWX5v7778+11167W3P0798/V199dW644Ya88MILOfPMM3fr/gAAQPfkKZMAdNgzzzyTlpaWjx1fsmRJkrT7Qva7zg675pprMn78+DZvEyZMyNlnn93hV5ucOXNmKisrc8stt3To/gAAQPfjDDEAOmzmzJnZtm1bLrzwwpxwwgn58MMPs2LFijz44IOpra3N5MmT27XOggULcvLJJ7e+uuTvGjduXGbOnJnGxsbU19fv1ox9+/bN5MmTM2/evDQ1NaWurm637g8AAHQ/zhADoMNuv/32nHPOOVmyZElmzZqVWbNm5cUXX8z06dOzcuXK9OnT51PXaGxszOuvv54LLrjg995m18fmz5/foTlnzZqV/fbbL7feemuH7g8AAHQvzhADoMPOO++8nHfeee2+fVVV1ceeYllfX/+JT7v8bYMGDWpzm4aGhjQ0NLS5zX333Zf77rvvE+9/7LHH5te//nW75wQAALo3Z4gBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACF0qPcA0A5NDU1lXsEAOgWfE8FAPZFghiFUlVVlcrKykyaNKncowBAt1FZWZmqqqpyjwEA0G6CGIVSU1OTpqamlEqlco8C/AF/9Vd/lVKplLvvvrvcowDtUFVVlZqamnKPAQDQboIYhVNTU+OHdujiDj/88HzwwQepr68v9ygAAEA35KL6AAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAHQLmzdvzlVXXZXa2tr07Nkz1dXVGTNmTBobG8s9GgAA0MX0KPcAANAZpk6dmkceeSQzZszIiSeemI0bN+a5555LU1NT6uvryz0eAADQhQhiAHQLTzzxRKZMmZI77rij9dg111xTxokAAICuylMmAegW+vTpk5UrV+att94q9ygAAEAXJ4gB0C3MmTMnq1atysCBA3P66aenoaEhzc3N5R4LAADoggQxALqFCRMmpLm5OXPnzs2AAQNy2223ZciQIVm6dGm5RwMAALoYQQyAbqN///6ZPn16Hn/88axduzZ9+/bNTTfdVO6xAACALkYQA2Cft2PHjmzatKnNserq6gwYMCAffPBBmaYCAAC6Kq8yCcA+b/PmzTn66KMzfvz4nHTSSendu3eeeuqpvPTSS21edRIAACARxADoBiorKzN9+vQsW7YsCxcuzM6dOzN48ODMmzcv06ZNK/d4AABAFyOI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fX25RwEAKAsX1QcAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMA4FNt3rw5V111VWpra9OzZ89UV1dnzJgxaWxsLPdoAAC7rUe5BwAAoOubOnVqHnnkkcyYMSMnnnhiNm7cmOeeey5NTU2pr68v93gAALtFEAMA4FM98cQTmTJlSu64447WY9dcc00ZJwIA6DhPmQQA4FP16dMnK1euzFtvvVXuUQAA9pggBgDAp5ozZ05WrVqVgQMH5vTTT09DQ0Oam5vLPRYAQIcIYgAAfKoJEyakubk5c+fOzYABA3LbbbdlyJAhWbp0ablHAwDYbYIYAADt0r9//0yfPj2PP/541q5dm759++amm24q91gAALtNEAMA4A/asWNHNm3a1OZYdXV1BgwYkA8++KBMUwEAdJxXmQQA4A/avHlzjj766IwfPz4nnXRSevfunaeeeiovvfRSm1edBADYVwhiAAD8QZWVlZk+fXqWLVuWhQsXZufOnRk8eHDmzZuXadOmlXs8AIDdJogBAPAHHXDAAZkzZ07mzJlT7lEAADqFa4gBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCg9yj0AAMC+ZN26dSmVSuUeY49s2rQp+++/fxobG8s9CgDsU7Zv354NGzbs899Dq6qqUlNTU+4xyqqipaWlpdxDAADsC9atW5e6urps27at3KMAAHRYZWVlmpqaCh3FnCEGANBOpVIp27Zty/z581NXV1fucQAAdltTU1MmTZqUUqkkiAEA0H51dXWpr68v9xgAAHSQi+oDAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAB00Kuvvprx48dn0KBB6dWrV4466qiMGTMmc+fOTUNDQyoqKj71bfTo0a3r7dixIwMGDEhFRUWWLl36iZ9z17qlUqn12OWXX95mzZ49e+a4447Lddddl1/96ld7+7cBYJ/To9wDAAAA7ItWrFiRc845JzU1NZkyZUqOPPLIvPnmm3nhhRdy1113ZeHChRk8eHDr7bds2ZJp06blwgsvzEUXXdR6/Igjjmj99dNPP53169entrY2CxYsyPnnn9/ueXr27Jl77rknSbJp06YsWrQoN954Y9asWZMFCxZ0wiMG6D4EMQAAgA646aabcuihh+all15Knz592nxsw4YNqa6uzrBhw1qPlUqlTJs2LcOGDcukSZM+cc358+envr4+l112Wb71rW9l69atOeigg9o1T48ePdqsO3369IwYMSIPPPBA7rzzzjbhDaDoPGUSAACgA9asWZMhQ4Z8LIYlSXV19W6vt3379jz22GOZOHFiJkyYkO3bt2fRokUdnq+ioiJnnXVWWlpa0tzc3OF1ALojQQwAAKADBg0alJdffjmrVq3qlPUWL16cLVu2ZOLEiTnyyCMzevToPX6q4xtvvJEkOeywwzphQoDuQxADAADogNmzZ2fbtm05+eSTM2LEiHzjG9/IsmXL8tFHH3Vovfnz52fEiBEZOHBgkmTixIlZtmxZ3n777XavUSqVUiqVsmbNmtxxxx159NFHM3To0Bx//PEdmgmguxLEAAAAOmDMmDF5/vnnM27cuLzyyiuZM2dOxo4dm6OOOiqLFy/erbU2btyYJ598MpdccknrsYsvvjgVFRV56KGH2rXG1q1b069fv/Tr1y+DBw/O7NmzM3LkyCxatCgVFRW7NQ9AdyeIAQAAdNDw4cOzcOHCvPvuu3nxxRfzzW9+M5s3b8748ePz2muvtXudBx98MB999FFOOeWUrF69OqtXr84777yTM844o91Pm+zVq1eWL1+e5cuX5957701dXV02bNiQAw88sKMPD6Db8iqTAAAAe+iAAw7I8OHDM3z48Bx33HGZPHlyHn744Vx//fXtuv+u6DVy5MhP/Hhzc3OOPfbYP7jG/vvvn3PPPbf1/bFjx+aEE07IlVdeudtnrAF0d4IYAABAJzrttNOSJOvXr2/X7deuXZsVK1ZkxowZOfvss9t8bOfOnbn00ktz//3359prr92tOfr375+rr746N9xwQ1544YWceeaZu3V/gO7MUyYBAAA64JlnnklLS8vHji9ZsiRJ2n0h+11nh11zzTUZP358m7cJEybk7LPP7vCrTc6cOTOVlZW55ZZbOnR/gO7KGWIAAAAdMHPm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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import stairs_reader\n", - "\n", - "stairs_diagram = stairs_reader.sentence2diagram(sentence)\n", - "stairs_diagram.draw(figsize=(12,5), fontsize=12)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. _sec-tree-readers:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tree readers" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "A :term:`CCG ` derivation follows a biclosed form [YK2021]_ , which can be directly interpreted as a series of compositions without any explicit conversion into a :term:`pregroup ` form. Class :py:class:`.TreeReader` implements a number of compositional models by taking advantage of this fact. In order to demonstrate the way they work, it would be useful to first examine how a CCG diagram looks like:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "\n", - "
" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Even without knowing the specifics of CCG syntax, it is not difficult to see that the verb \"gave\" is first composed with the indirect object \"Mary\", then the result is composed with the noun phrase \"a flower\" which correspond to the direct object, and finally the entire verb phrase \"gave Mary a flower\" is further composed with the subject \"John\" to return a sentence. A :py:class:`.TreeReader` follows this order of composition, as demonstrated below." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAIHCAYAAABwnIDaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9i0lEQVR4nO3deZiU1Z0v8G8DArYiIkiUYY0tI8gMCuqN4hrBSBSjcRc0ZhINEtwSRpmEK4trMEQNKGoyMRNcEkUlLiFRR+cGNZOL9MUY7TAaFDVqtIlim3ajqfuHDz22YEbW6u7383ken0dOnTr1K+rlnKpvvXXeilKpVAoAAAAAFESbchcAAAAAAJuTQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQAAAAAKBSBGAAAAACFIhADAAAAoFAEYgAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABSKQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQAAAAAKBSBGAAAAACFIhADAAAAoFAEYgAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABRKu3IX0Bw8//zzqa2tLXcZrIdu3bqld+/e5S4D1src0rKZX2jOzC8t2+aeXxwvLZv1iObM/NJymVsEYnn++eczYMCA1NfXl7sU1kNlZWVqamoK/w+Z5sfc0vKZX2iuzC8t3+acXxwvLZ/1iObK/NKymVsEYqmtrU19fX1uvPHGDBgwoNzlsA5qamoyZsyY1NbWFvofMc2TuaVlM7/QnJlfWrbNPb84Xlo26xHNmfml5TK3fKDwgdhqAwYMyJAhQ8pdBtDKmFuATcX8wrpwvACbivmFlsqm+gAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxFqpKVOmpKKiIrW1teUuBQAAADa6hQsXZp999slWW22VioqKHHnkkamoqCh3WbQQArFm7sc//nEqKiry2GOPlbsUAICPtfo9S0VFRR5++OE1bi+VSunVq1cqKipy+OGHl6FCAFqT999/P8cee2z+8pe/5IorrsicOXPSp0+fcpdFC9Ku3AUAANB6dOzYMTfffHP23XffJu3/5//8n7z44ovp0KFDmSoDoDX54x//mGXLluUHP/hBvvrVryZJnnnmmTJXRUviDDEAADaaz3/+87ntttuycuXKJu0333xzhg4dmh122GGjPM6qVavyzjvvbJSxAGh5Xn311STJtttuW95C1pN1rPwEYi3Qgw8+mP322y9bbbVVtt1223zhC19ITU3NWvu+8cYbOfXUU7Ptttumc+fO+fKXv5z6+vomfSoqKjJ+/PjMmzcvgwYNSocOHbLrrrvml7/85eZ4OkAZ/Md//Ef22GOPdOzYMTvttFOuu+66xr0HV7vhhhvy2c9+Nt27d0+HDh0ycODAzJ49u8k4hx9+eD796U+v9TH23nvv7LHHHk3abrzxxgwdOjRbbrlltttuu5xwwgl54YUXNv4TBMrmxBNPzPLly3P//fc3tr333nuZO3duTjrppDX6f/e7380+++yTrl27Zsstt8zQoUMzd+7cNfqtfr9y0003Zdddd02HDh0yf/789O3bN1/4whfW6P/OO++kc+fO+drXvrZxnyBlt2zZsowbNy5///d/ny233DJdu3bNsccem+eee67cpQGbyamnnpoDDjggSXLsscemoqIiBx544Fr7rly5MhdeeGF22mmndOjQIX379s23vvWtvPvuu419vvGNb6Rr164plUqNbWeeeWYqKiry/e9/v7Htz3/+cyoqKpq8J3733XczefLkVFVVpUOHDunVq1fOO++8JuMna1/HfOYuL4FYC/PAAw/kc5/7XF599dVMmTIl3/jGN/Loo49m2LBha30TcNxxx6Wuri6XXnppjjvuuPz4xz/O1KlT1+j38MMPZ9y4cTnhhBMyffr0vPPOOzn66KOzfPnyzfCsgM3p//2//5dDDz00y5cvz9SpU/OVr3wl06ZNy7x585r0mz17dvr06ZNvfetbmTFjRnr16pVx48bl6quvbuxz/PHH59lnn83ChQub3HfZsmX5z//8z5xwwgmNbRdffHFOOeWU7Lzzzvne976Xc845J//+7/+e/fffP2+88camfMrAZtS3b9/svffeueWWWxrb5s+fnxUrVjSZE1a76qqrsvvuu2fatGm55JJL0q5duxx77LG599571+j74IMP5txzz83xxx+fq666Kv369cuYMWMyf/78/OUvf2nS9+67786bb76ZMWPGbPwnSVktXLgwjz76aE444YR8//vfz9ixY/Pv//7vOfDAA9f44hdonb72ta/lW9/6VpLkrLPOypw5c/Ltb397rX2/+tWv5oILLsiQIUNyxRVX5IADDsill17aZE3ab7/98pe//CVPPvlkY9uCBQvSpk2bLFiwoElbkuy///5JPjjL64gjjsh3v/vdjBo1KjNnzsyRRx6ZK664Iscff/watXx0Hevbt+8G/12wAUoFt2jRolKS0qJFi8pdylrdcMMNpSSlhQsXlkqlUmm33XYrde/evbR8+fLGPo8//nipTZs2pVNOOaWxbfLkyaUkpX/6p39qMt5RRx1V6tq1a5O2JKX27duXnnnmmSZjJinNnDlzUzytjaK5v3YUW3M+PkeNGlWqrKws/elPf2pse/rpp0vt2rUrfXhZqK+vX+O+n/vc50qf/vSnG/+8YsWKUocOHUrf/OY3m/SbPn16qaKiorRs2bJSqVQqPffcc6W2bduWLr744ib9nnjiiVK7du3WaC+35vz6QXM9Pj/8nmXWrFmlTp06Nc4jxx57bOmggw4qlUqlUp8+fUqHHXZY4/0+Ote89957pUGDBpU++9nPNmlPUmrTpk3pySefbNK+ZMmSUpLS7Nmzm7QfccQRpb59+5ZWrVq10Z7jxrC5X7/merxsiLWtT7/5zW9KSUo/+clPylDRptMaXz9aj3Ifnw899FApSem2225rbFv9OXi1xYsXl5KUvvrVrza574QJE0pJSg8++GCpVCqVXn311VKS0jXXXFMqlUqlN954o9SmTZvSscceW/rUpz7VeL+zzjqrtN122zWuLXPmzCm1adOmtGDBgibjX3vttaUkpUceeaSx7ePWsXIo92vXXDhDrAV5+eWXs3jx4px66qnZbrvtGtv/8R//MSNGjMgvfvGLNe4zduzYJn/eb7/9snz58rz55ptN2ocPH56ddtqpyZjbbLNNli5dupGfBVBODQ0NeeCBB3LkkUemR48eje1VVVUZOXJkk75bbrll4/+vWLEitbW1OeCAA7J06dKsWLEiSbLNNttk5MiRufXWW5ucYv6zn/0sn/nMZ9K7d+8kyR133JFVq1bluOOOS21tbeN/O+ywQ3beeec89NBDm/JpA5vZcccdl7fffjv33HNP6urqcs8996z155JJ07nm9ddfz4oVK7Lffvulurp6jb4HHHBABg4c2KStf//++V//63/lpptuamz7y1/+kvnz52f06NFNfgpO6/DhY+b999/P8uXLU1VVlW233Xatxw1QXKs/I3/jG99o0v7Nb34zSRrPRt5+++2zyy675Ne//nWS5JFHHknbtm3zz//8z/nzn/+cp59+OskHZ4jtu+++jWvLbbfdlgEDBmSXXXZp8h73s5/9bJKs8R53besY5eMqky3IsmXLkiR///d/v8ZtAwYMyK9+9av89a9/zVZbbdXYvvrD6GpdunRJ8sEbzm222eZj+63u+/rrr2+U2oHm4dVXX83bb7+dqqqqNW77aNsjjzySyZMn5ze/+c0aP0FZsWJFOnfunOSDn03Omzcvv/nNb7LPPvvkj3/8YxYtWpQrr7yysf/TTz+dUqmUnXfeea11bbHFFhv4zIDmZPvtt8/w4cNz8803p76+Pg0NDTnmmGPW2veee+7JRRddlMWLFzfZb2VtQVa/fv3WOsYpp5yS8ePHZ9myZenTp09uu+22vP/++zn55JM3zhOiWXn77bdz6aWX5oYbbsif/vSnJl/IrP7CBiD54DN0mzZt1nifu8MOO2Tbbbdt/IydfHDyyOoAbcGCBdljjz2yxx57ZLvttsuCBQvyqU99Ko8//niTL3iefvrp1NTUZPvtt1/r46/e+H+1j1vHKA+BWCvXtm3btbZ/+I3DuvQDiuGPf/xjDj744Oyyyy753ve+l169eqV9+/b5xS9+kSuuuCKrVq1q7Dtq1KhUVlbm1ltvzT777JNbb701bdq0ybHHHtvYZ9WqVamoqMj8+fPXOt9svfXWm+V5AZvPSSedlNNOOy2vvPJKRo4cudargC1YsCBHHHFE9t9//1xzzTXZcccds8UWW+SGG27IzTffvEb/D58Z9GEnnHBCzj333Nx000351re+lRtvvDF77LHHWr9EpOU788wzc8MNN+Scc87J3nvvnc6dO6eioiInnHBCk/UJYLVPcrbwvvvumx/84AdZunRpFixYkP322y8VFRXZd999s2DBgvTo0SOrVq3Kfvvt13ifVatW5R/+4R/yve99b61j9urVq8mfP24dozwEYi1Inz59kiRLlixZ47Y//OEP6datW5OzwwA+qnv37unYsWOeeeaZNW77cNvdd9+dd999N3fddVeTM0jX9tPGrbbaKocffnhuu+22fO9738vPfvaz7Lfffk1+krnTTjulVCqlX79+6d+//0Z+VkBzdNRRR+VrX/ta/vM//zM/+9nP1trn9ttvT8eOHfOrX/0qHTp0aGy/4YYb1umxtttuuxx22GG56aabMnr06DzyyCNNzlKldZk7d26+9KUvZcaMGY1t77zzjgu0AGvo06dPVq1alaeffjoDBgxobP/zn/+cN954o/EzdpLGoOv+++/PwoULM3HixCQfbKA/e/bs9OjRI1tttVWGDh3aeJ+ddtopjz/+eA4++GA/0W+B7CHWguy4447Zbbfd8m//9m9NFvzf//73ue+++/L5z3++fMUBLULbtm0zfPjwzJs3Ly+99FJj+zPPPJP58+c36ZdkjZ+hfNyH1OOPPz4vvfRSfvjDH+bxxx9f46o6X/ziF9O2bdtMnTp1jTNPS6WSK9pCK7T11ltn9uzZmTJlSkaNGrXWPm3btk1FRUUaGhoa25577rk1rnr7SZx88sl56qmn8s///M9p27btWq9oSevQtm3bNdaSmTNnNjmOAJI0fkb+6Jckq8/oOuywwxrb+vXrl7/7u7/LFVdckffffz/Dhg1L8kFQ9sc//jFz587NZz7zmbRr99/nFR133HH505/+lB/84AdrPPbbb7+dv/71rxv7KbEROUOshbn88sszcuTI7L333vnKV76St99+OzNnzkznzp0zZcqUcpcHtABTpkzJfffdl2HDhuWMM85IQ0NDZs2alUGDBmXx4sVJkkMOOSTt27fPqFGj8rWvfS1vvfVWfvCDH6R79+55+eWX1xjz85//fDp16pQJEyakbdu2Ofroo5vcvtNOO+Wiiy7Kv/zLv+S5557LkUcemU6dOuXZZ5/NnXfemdNPPz0TJkzYHE8f2Iy+9KUv/c3bDzvssHzve9/LoYcempNOOimvvvpqrr766lRVVeV3v/vdOj3WYYcdlq5du+a2227LyJEj07179w0pnWbs8MMPz5w5c9K5c+cMHDgwv/nNb/LAAw+ka9eu5S4NaGYGDx6cL33pS7n++uvzxhtv5IADDsj//b//N//2b/+WI488MgcddFCT/vvtt19++tOf5h/+4R8a998eMmRIttpqq/zXf/3XGheIOfnkk3Prrbdm7NixeeihhzJs2LA0NDTkD3/4Q2699db86le/yh577LHZni/rxhlizdzqb79Wn60xfPjw/PKXv0zXrl1zwQUX5Lvf/W4+85nP5JFHHrFBH/CJDB06NPPnz0+XLl3yv//3/86//uu/Ztq0aTn44IPTsWPHJB9cvGPu3LmpqKjIhAkTcu211+b000/P2WefvdYxO3bsmCOOOCJ1dXU56KCD1vpBdOLEibn99tvTpk2bTJ06NRMmTMhdd92VQw45JEccccQmfc5A8/TZz342//qv/5pXXnkl55xzTm655ZZ85zvfyVFHHbXOY7Vv377x7FSb6bduV111VU455ZTcdNNN+eY3v5mXX345DzzwgP0ogbX64Q9/mKlTp2bhwoU555xz8uCDD+Zf/uVf8tOf/nSNvqt/Nrnvvvs2trVr1y577713k9tXa9OmTebNm5fLLrssTzzxRCZMmND4WGeffbatQpq5ilLBd02vrq7O0KFDs2jRogwZMqTc5azh+9//fs4+++w888wz2WmnncpdTrPS3F87iq0lHp9HHnlknnzyycbLShdZS3z9KA7H58c799xzGwO2ysrKcpezVpv79XO8tGxeP5ozx2fL5bX7gDPEmrmFCxdmq622arLZH8CGevvtt5v8+emnn84vfvGLHHjggeUpCGADvfPOO7nxxhtz9NFHN9swDABoPuwh1kzdfvvt+Y//+I/cdNNN+epXv9pk4z6ADfXpT386p556aj796U9n2bJlmT17dtq3b5/zzjuv3KUBrJNXX301DzzwQObOnZvly5d/7E+7AQA+TMrSTE2YMCF1dXX5yle+kiuuuKLc5QCtzKGHHppbbrklr7zySjp06JC99947l1xySXbeeedylwawTp566qmMHj063bt3z/e///3stttu5S4JAGgBBGLN1LPPPlvuEoBW7IYbbih3CQAbxYEHHpiCb4kLAKwHe4gBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABSKQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQAAAAAKBSBGAAAAACF0q7cBTQXNTU15S6BdeQ1oyVwnLZMXjdaAsdpy1Su183x0jJ53WgJHKctj9fsA4UPxLp165bKysqMGTOm3KWwHiorK9OtW7dylwFrMLe0fOYXmivzS8u3OecXx0vLZz2iuTK/tGzmlqSiVCqVyl1EuT3//POpra0tdxkb3VNPPZWTTz45t9xyS/r371/ucjaJbt26pXfv3uUuA9aqtc4tSfLDH/4wt956a+67775yl7LJmF9ozlrz/PJP//RP6dWrV6ZOnVruUjaZzT2/tObj5ZBDDslxxx2Xr371q+UuZZOxHtGctdb55b/+679y4oknZs6cORk4cGC5y9kkzC3OEEuS9O7du1UeCKtWrUqSDBgwIIMHDy5zNVA8rXVuSZIePXpkiy22yJAhQ8pdChRSa55ftt5663Tt2tX8shG15uNliy22SI8ePRwvUCatdX5p27ZtkmSXXXYxv7RiNtUHAAAAoFAEYgAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYixVnV1dTnnnHPSt2/fdOjQId27d8+IESNSXV1d7tKAFszcAmwq5hfWheMF2FTMLy1Hu3IXQPM0duzYzJ07N+PHj8/AgQOzfPnyPPzww6mpqcmQIUPKXR7QQplbgE3F/MK6cLwAm4r5peUQiLFW9957b0477bTMmDGjse28884rY0VAa2BuATYV8wvrwvECbCrml5bDTyZZq2233Ta//e1v89JLL5W7FKAVMbcAm4r5hXXheAE2FfNLyyEQY62mT5+e3//+9+nVq1f22muvTJkyJUuXLi13WUALZ24BNhXzC+vC8QJsKuaXlkMgxlodd9xxWbp0aWbOnJkePXrk8ssvz6677pr58+eXuzSgBTO3AJuK+YV14XgBNhXzS8tRUSqVSuUugk3jsccey5577pnFixdn8ODBGzTWq6++miFDhqRv3755+OGHN1KFQEt10UUX5eqrr87LL7+8QeOYW4CP2nfffVNVVZUf//jHGzSO+aUYdtxxx3z961/PpEmTNmgcxwvwYY8//nh22223LFy4MHvssccGjWV+ab6cIcYaGhoasmLFiiZt3bt3T48ePfLuu++WqSqgpTO3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hSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAA+ISmTJmSioqK1NbWrvX2QYMG5cADD0ySPPfcc6moqEhFRUVuv/32TzTWqaeemq233rpJvwMPPLBxnIqKirRv3z79+vXL6aefnhdeeGGtddxzzz059NBD07Vr13Ts2DH9+/fPhAkTsnz58sY+77zzTqqqqrLLLrvkvffeW2OMkSNHpnPnznnppZf+x78XAGhpBGIAALCJTZs2LaVSab3v37Nnz8yZMydz5szJtddem6OPPjo333xz9t1339TX1zfpO2HChIwaNSqvvPJKzj///MyaNSvDhw/PrFmzMnjw4CxZsiRJ0rFjx8yePTtLlizJpZde2mSMn/70p/nlL3+Ziy++OD169FjvugGguWpX7gIAAKA122233bJ48eLceeed+eIXv7heY3Tu3Dljxoxp0tavX7+MHz8+jzzySEaMGJEkueWWWzJjxowcf/zxuemmm9K2bdvG/qeeemoOOuigHHvssamurk67du0yYsSInHTSSbn00ktz4oknpn///nnjjTdy7rnnZs8998y4cePW/4kDQDPmDDEAANiETjjhhPTv33+DzxL7qB122CFJ0q7df3/HPXXq1HTp0iXXX399kzAsSfbaa6+cf/75eeKJJzJ37tzG9iuuuCKVlZUZO3ZskmTixIl57bXXct1116VNGx8XAGidrHAAALAJtW3bNpMmTcrjjz+eO++8c73GaGhoSG1tbWpra/Pyyy/nwQcfzOTJk1NVVZVhw4YlSZ5++uksWbIkX/jCF7LNNtusdZxTTjklyQd7jK3WvXv3XHbZZXnooYdy5pln5vrrr89ZZ52V3Xfffb1qBYCWQCAGAACb2EknnZSdd955vc8S+8Mf/pDtt98+22+/fXr06JGDDz44q1atyn333Zf27dsnSZ566qkkyeDBgz92nL59+2abbbZJTU1Nk/bTTjstw4YNy6xZs9KzZ89MmzZtnWsEgJZEIAYAAJvYh88Smzdv3jrfv2/fvrn//vtz//33Z/78+bnyyiuzYsWKjBw5Mq+99lqSpK6uLknSqVOnvzlWp06d8uabbzZpq6ioyHbbbZck2Xvvvde40iUAtDYCMQAA2IgqKirW2j569OhUVVWt11liW221VYYPH57hw4fn0EMPzdlnn5277rorS5YsyWWXXZbk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HAAAKJyampqMGTMmtbW1AjEANovCB2KrDRgwIEOGDCl3GQAAAABsYjbVBwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABSKQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQA2GimTJmSioqK1NbWrvX2QYMG5cADD0ySPPfcc6moqEhFRUVuv/32TzTWqaeemq233rpJvwMPPLBxnIqKirRv3z79+vXL6aefnhdeeGGtddxzzz059NBD07Vr13Ts2DH9+/fPhAkTsnz58sY+77zzTqqqqrLLLrvkvffeW2OMkSNHpnPnznnppZf+x78XAACgeRGIAVB206ZNS6lUWu/79+zZM3PmzMmcOXNy7bXX5uijj87NN9+cfffdN/X19U36TpgwIaNGjcorr7yS888/P7Nmzcrw4cMza9asDB48OEuWLEmSdOzYMbNnz86SJUty6aWXNhnjpz/9aX75y1/m4osvTo8ePda7bgAAoDzalbsAAIptt912y+LFi3PnnXfmi1/84nqN0blz54wZM6ZJW79+/TJ+/Pg88sgjGTFiRJLklltuyYwZM3L88cfnpptuStu2bRv7n3rqqTnooINy7LHHprq6Ou3atcuIESNy0kkn5dJLL82JJ56Y/v3754033si5556bPffcM+PGjVv/Jw4AAJSNM8QAKKsTTjgh/fv33+CzxD5qhx12SJK0a/ff3/1MnTo1Xbp0yfXXX98kDEuSvfbaK+eff36eeOKJzJ07t7H9iiuuSGVlZcaOHZskmThxYl577bVcd911adPGMgoAAC2Rd/IAlFXbtm0zadKkPP7447nzzjvXa4yGhobU1tamtrY2L7/8ch588MFMnjw5VVVVGTZsWJLk6aefzpIlS/KFL3wh22yzzVrHOeWUU5J8sMfYat27d89ll12Whx56KGeeeWauv/76nHXWWdl9993Xq1YAAKD8BGIAlN1JJ52UnXfeeb3PEvvDH/6Q7bffPttvv3169OiRgw8+OKtWrcp9992X9u3bJ0meeuqpJMngwYM/dpy+fftmm222SU1NTZP20047LcOGDcusWbPSs2fPTJs2bZ1rBAAAmg+BGABl9+GzxObNm7fO9+/bt2/uv//+3H///Zk/f36uvPLKrFixIiNHjsxrr72WJKmrq0uSdOrU6W+O1alTp7z55ptN2ioqKrLddtslSfbee+81rnQJAAC0LAIxADarioqKtbaPHj06VVVV63WW2FZbbZXhw4dn+PDhOfTQQ3P22WfnrrvuypIlS3LZZZcl+e8gbHUw9nHq6urWCM3uuOOO3H333Rk0aFBuu+22LFiwYJ3qAwAAmheBGAAbTceOHZMkb7/99lpvr6+vb+zzUavPElu8eHF+/vOfb3AtQ4cOTefOnfPrX/86STJgwIAkye9+97uPvc+yZcvy5ptvZuDAgY1tdXV1OeusszJ06NA8+uij6dOnT84444y8//77G1wjAABQHgIxADaaPn36JEmWLFmyxm319fV54YUXGvuszZgxY1JVVZWpU6dulCtONjQ05K233kqS9O/fP/3798+8efM+9iyxn/zkJ0mSww8/vLFt0qRJefnll3PdddelU6dOmTlzZp588snMmDFjg+sDAADKQyAGwEZz8MEHp3379pk9e3ZWrVrV5Lbrr78+K1euzMiRIz/2/h8+S+yuu+7aoFoeeuihvPXWW0020b/gggvy+uuvZ+zYsWloaGjSf9GiRfnOd76TQYMG5eijj25su/rqqzN+/PgMHTo0yQdh2VFHHZULL7wwy5Yt26AaAQCA8mhX7gIAaD26d++eCy64IJMmTcr++++fI444IpWVlXn00Udzyy235JBDDsmoUaP+5hijR4/OhRdemMWLF3/ix12xYkVuvPHGJMnKlSuzZMmSzJ49O1tuuWUmTpzYZOyFCxfmqquuylNPPZXRo0enS5cuqa6uzo9+9KN07do1c+fOzRZbbJGGhoacfvrp2WGHHXLRRRc1ebyrrroqAwcOzJlnnrnBwR0AALD5CcQA2Ki+/e1vp2/fvpk1a1amTZuWlStXpl+/fpk6dWrOP//8tGnzt09ObteuXSZNmpQvf/nLn/gxX3zxxZx88slJPti0v0uXLjnggAMyefLk7Lbbbk36XnnllTnooINy9dVX55JLLkl9fX169eqVr3/965k4cWK6deuWJJk5c2aqq6szd+7cNTbZ79WrV6ZMmZIJEybkzjvvzFFHHfWJawUAAMqvorQxNmlpwaqrqzN06NAsWrQoQ4YMKXc5AABQON6TA7C52UMMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjE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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import TreeReader\n", - "\n", - "reader = TreeReader()\n", - "sentence = \"John gave Mary a flower\"\n", - "\n", - "tree_diagram = reader.sentence2diagram(sentence)\n", - "tree_diagram.draw(figsize=(12,5), fontsize=12)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that in this default call, composition is handled by a single \"cell\" named ``UNIBOX``. This can be changed by passing an explicit argument of type :py:class:`.TreeReaderMode` to the reader's constructor. There are three possible choices:\n", - "\n", - "- :py:obj:`NO_TYPE` is the default, where all compositions are handled by the same ``UNIBOX`` cell (above diagram).\n", - "- :py:obj:`RULE_ONLY` creates a different cell for each CCG rule.\n", - "- :py:obj:`RULE_TYPE` creates a different cell for each (rule, type) pair.\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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rlzZ6GPXr18fP/vZz2Ls2LEN266//vq44IIL4vDDD48bb7wxJk+eHA899FB85CMfic2bN7fkQwZaUc+ePeOkk06KuXPnNmxbunRpbNmypdGasMvNN98cxxxzTEydOjW+9rWvRYcOHWLUqFFx3333Ndn34Ycfji996UsxZsyYuPnmm+PQQw+NcePGxdKlS+Pll19utO8Pf/jD+POf/xzjxo3b8w+STK1cuTIee+yxGDt2bNxyyy0xYcKEeOihh+K0005r8otfoG265JJL4uqrr46IiC984Qtx5513xj//8z83u+9FF10UX/3qV6O2tjZuuummOPXUU+PrX/96o3PSwIED4+WXX45f//rXDdtWrFgR7dq1ixUrVjTaFhHxkY98JCLefpbXiBEj4hvf+EYMHz48ZsyYEWeffXbcdNNNMWbMmCazvPs81rNnz/f934L3oZC4J598shARhSeffDLrUZo1e/bsQkQUVq5cWSgUCoWjjz66UFlZWdi0aVPDPk8//XShXbt2hQsuuKBh2zXXXFOIiMJnP/vZRvf3yU9+stC9e/dG2yKi0LFjx8KaNWsa3WdEFGbMmNESD2uPKPavHWkr5uNz+PDhhfLy8sIf/vCHhm2rV68udOjQofDO08K2bduafOzHPvaxwmGHHdbw7y1bthTKysoKl19+eaP9pk2bVsjlcoX169cXCoVC4fnnny+0b9++cP311zfa71e/+lWhQ4cOTbZnrZi/flCsx+c7v2f55je/Wdh7770b1pFRo0YVBg0aVCgUCoVDDjmkMHTo0IaPe/da8+abbxaOOuqowumnn95oe0QU2rVrV/j1r3/daPtvf/vbQkQUbr311kbbR4wYUejZs2dh586de+wx7gmt/fUr1uPl/Wju/PT4448XIqLw/e9/P4OJWk5b/PrRdmR9fP74xz8uRERhwYIFDdt2/Ry8y1NPPVWIiMJFF13U6GOvuOKKQkQUHn744UKhUChs3LixEBGFWbNmFQqFQmHz5s2Fdu3aFUaNGlU44IADGj7uC1/4QmG//fZrOLfceeedhXbt2hVWrFjR6P5vu+22QkQUHn300YZt73Uey0LWX7ti4RliJeSll16Kp556KsaPHx/77bdfw/Z/+Id/iMGDB8ePfvSjJh8zYcKERv8eOHBgbNq0Kf785z832n7GGWdEr169Gt3nBz7wgVi7du0efhRAlnbs2BHLly+Ps88+O6qqqhq29+7dO4YMGdJo386dOzf8fcuWLVFfXx+nnnpqrF27NrZs2RIRER/4wAdiyJAhMX/+/EZPMf/BD34QJ554YlRXV0dExKJFi2Lnzp0xevToqK+vb/hz4IEHxuGHHx4//vGPW/JhA61s9OjRsX379rj33ntj69atce+99zb7csmIxmvNK6+8Elu2bImBAwfGqlWrmux76qmnRp8+fRptO+KII+KEE06IfD7fsO3ll1+OpUuXxqc//elGLwWnbXjnMfPWW2/Fpk2bonfv3tGtW7dmjxsgXbt+Rr7ssssabb/88ssjIhqejbz//vvHkUceGf/93/8dERGPPvpotG/fPr785S/Hn/70p1i9enVEvP0MsQEDBjScWxYsWBA1NTVx5JFHNvoe9/TTT4+IaPI9bnPnMbLjXSZLyPr16yMi4kMf+lCT22pqauKBBx6I1157Lbp06dKwfdcPo7vsu+++EfH2N5wf+MAH3nO/Xfu+8sore2R2oDhs3Lgxtm/fHr17925y27u3Pfroo3HNNdfE448/3uQlKFu2bIl99tknIt5+2eTixYvj8ccfj5NPPjmee+65ePLJJ+M///M/G/ZfvXp1FAqFOPzww5uda6+99nqfjwwoJvvvv3+cccYZcdddd8W2bdtix44dMXLkyGb3vffee+O6666Lp556qtH1VpoLWYceemiz93HBBRfEpEmTYv369XHIIYfEggUL4q233orzzz9/zzwgisr27dvj61//esyePTv+8Ic/NPqFzK5f2ABEvP0zdLt27Zp8n3vggQdGt27dGn7Gjnj7ySO7AtqKFSuif//+0b9//9hvv/1ixYoVccABB8TTTz/d6Bc8q1evjrq6uth///2b/fy7Lvy/y3udx8iGINbGtW/fvtnt7/zGYXf2A9Lw3HPPxUc/+tE48sgj48Ybb4wePXpEx44d40c/+lHcdNNNsXPnzoZ9hw8fHuXl5TF//vw4+eSTY/78+dGuXbsYNWpUwz47d+6MXC4XS5cubXa96dq1a6s8LqD1fOpTn4qLL744/vjHP8aQIUOafRewFStWxIgRI+IjH/lIzJo1Kw466KDYa6+9Yvbs2XHXXXc12f+dzwx6p7Fjx8aXvvSlyOfzcfXVV8ecOXOif//+zf4SkdL3+c9/PmbPnh2TJ0+Ok046KfbZZ5/I5XIxduzYRucngF3+lmcLDxgwIG6//fZYu3ZtrFixIgYOHBi5XC4GDBgQK1asiKqqqti5c2cMHDiw4WN27twZH/7wh+PGG29s9j579OjR6N/vdR4jG4JYCTnkkEMiIuK3v/1tk9ueffbZqKioaPTsMIB3q6ysjE6dOsWaNWua3PbObT/84Q/jjTfeiCVLljR6BmlzL23s0qVLDBs2LBYsWBA33nhj/OAHP4iBAwc2eklmr169olAoxKGHHhpHHHHEHn5UQDH65Cc/GZdcckn87Gc/ix/84AfN7nP33XdHp06d4oEHHoiysrKG7bNnz96tz7XffvvF0KFDI5/Px6c//el49NFHGz1LlbZl4cKF8ZnPfCamT5/esO3111/3Bi1AE4ccckjs3LkzVq9eHTU1NQ3b//SnP8XmzZsbfsaOiIbQ9eCDD8bKlSvjqquuioi3L6B/6623RlVVVXTp0iWOPfbYho/p1atXPP300/HRj37US/RLkGuIlZCDDjoojj766Pje977X6IT/zDPPxLJly+Kss87KbjigJLRv3z7OOOOMWLx4cbz44osN29esWRNLly5ttF9ENHkZynv9kDpmzJh48cUX49vf/nY8/fTTTd5V55xzzon27dvHtdde2+SZp4VCwTvaQhvUtWvXuPXWW2PKlCkxfPjwZvdp37595HK52LFjR8O2559/vsm73v4tzj///PjNb34TX/7yl6N9+/bNvqMlbUP79u2bnEtmzJjR6DgCiIiGn5Hf/UuSXc/oGjp0aMO2Qw89ND74wQ/GTTfdFG+99VaccsopEfF2KHvuuedi4cKFceKJJ0aHDv//eUWjR4+OP/zhD3H77bc3+dzbt2+P1157bU8/JPYgzxArMTfccEMMGTIkTjrppLjwwgtj+/btMWPGjNhnn31iypQpWY8HlIApU6bEsmXL4pRTTolLL700duzYEd/85jfjqKOOiqeeeioiIs4888zo2LFjDB8+PC655JJ49dVX4/bbb4/Kysp46aWXmtznWWedFXvvvXdcccUV0b59+zj33HMb3d6rV6+47rrr4itf+Uo8//zzcfbZZ8fee+8d69ati3vuuSc+97nPxRVXXNEaDx9oRZ/5zGf+z9uHDh0aN954Y3z84x+PT33qU7Fx48aYOXNm9O7dO375y1/u1ucaOnRodO/ePRYsWBBDhgyJysrK9zM6RWzYsGFx5513xj777BN9+vSJxx9/PJYvXx7du3fPejSgyPTr1y8+85nPxLe+9a3YvHlznHrqqfHzn/88vve978XZZ58dgwYNarT/wIEDY968efHhD3+44frbtbW10aVLl/jd737X5A1izj///Jg/f35MmDAhfvzjH8cpp5wSO3bsiGeffTbmz58fDzzwQPTv37/VHi+7xzPEityu337terbGGWecEffff3907949vvrVr8Y3vvGNOPHEE+PRRx91gT7gb3LsscfG0qVLY999941//dd/je985zsxderU+OhHPxqdOnWKiLffvGPhwoWRy+XiiiuuiNtuuy0+97nPxRe/+MVm77NTp04xYsSI2Lp1awwaNKjZH0SvuuqquPvuu6Ndu3Zx7bXXxhVXXBFLliyJM888M0aMGNGijxkoTqeffnp85zvfiT/+8Y8xefLkmDt3bvzHf/xHfPKTn9zt++rYsWPDs1NdTL9tu/nmm+OCCy6IfD4fl19+ebz00kuxfPly16MEmvXtb387rr322li5cmVMnjw5Hn744fjKV74S8+bNa7LvrpdNDhgwoGFbhw4d4qSTTmp0+y7t2rWLxYsXx7//+7/Hr371q7jiiisaPtcXv/hFlwopcrlC4ldNX7VqVRx77LHx5JNPRm1tbdbjNHHLLbfEF7/4xVizZk306tUr63GKSrF/7UhbKR6fZ599dvz6179ueFvplJXi1490OD7f25e+9KWGwFZeXp71OM1q7a+f46W0+fpRzByfpcvX7m2eIVbkVq5cGV26dGl0sT+A92v79u2N/r169er40Y9+FKeddlo2AwG8T6+//nrMmTMnzj333KKNYQBA8XANsSJ19913x09+8pPI5/Nx0UUXNbpwH8D7ddhhh8X48ePjsMMOi/Xr18ett94aHTt2jCuvvDLr0QB2y8aNG2P58uWxcOHC2LRp03u+tBsA4J1UliJ1xRVXxNatW+PCCy+Mm266KetxgDbm4x//eMydOzf++Mc/RllZWZx00knxta99LQ4//PCsRwPYLb/5zW/i05/+dFRWVsYtt9wSRx99dNYjAQAlQBArUuvWrct6BKANmz17dtYjAOwRp512WiR+SVwA4O/gGmIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQI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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import TreeReader, TreeReaderMode\n", - "\n", - "reader = TreeReader(mode=TreeReaderMode.RULE_ONLY)\n", - "sentence = \"John gave Mary a flower\"\n", - "\n", - "tree_diagram = reader.sentence2diagram(sentence)\n", - "tree_diagram.draw(figsize=(12,5), fontsize=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the above, each unique CCG rule gets its own box: FA boxes correspond to forward application, and BA boxes to backward application. For certain tasks, making the composition box rule-specific might lead to better generalisation and overall performance." - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. rubric:: See also:\n", - "\n", - "- :ref:`sec-preprocessing`\n", - "- :ref:`lambeq.text2diagram package `\n", - "- `Example notebook parser.ipynb <../examples/parser.ipynb>`_\n", - "- `Example notebook reader.ipynb <../examples/reader.ipynb>`_\n", - "- `Example notebook tree-reader.ipynb <../examples/tree-reader.ipynb>`_\n", - "- `DisCoCat in lambeq <./discocat.ipynb>`_\n", - "- `Extending lambeq <./extend-lambeq.ipynb>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/trainer-classical.ipynb b/docs/tutorials/trainer-classical.ipynb deleted file mode 100644 index 4084dc63..00000000 --- a/docs/tutorials/trainer-classical.ipynb +++ /dev/null @@ -1,633 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training: Classical case" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this section, we present a complete use case of ``lambeq``'s :py:mod:`.training` module, implementing a classical pipeline on the meaning classification dataset introduced in [Lea2021]_. The goal is to classify simple sentences (such as \"skillful programmer creates software\" and \"chef prepares delicious meal\") into two categories, food or IT. The dataset consists of 130 sentences created using a simple context-free grammar.\n", - "\n", - "We will use a :py:class:`.SpiderAnsatz` to split large tensors into chains of smaller ones. The pipeline uses PyTorch as a backend.\n", - "\n", - ":download:`Download code <../_code/trainer-classical.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preparation\n", - "\n", - "We start with importing PyTorch and specifying some training hyperparameters." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "BATCH_SIZE = 30\n", - "EPOCHS = 30\n", - "LEARNING_RATE = 3e-2\n", - "SEED = 0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Input data\n", - "\n", - "Let's read the data and print some example sentences." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = float(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('../examples/datasets/mc_train_data.txt')\n", - "val_labels, val_data = read_data('../examples/datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('../examples/datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " val_labels, val_data = val_labels[:2], val_data[:2]\n", - " test_labels, test_data = test_labels[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['skillful man prepares sauce .',\n", - " 'skillful man bakes dinner .',\n", - " 'woman cooks tasty meal .',\n", - " 'man prepares meal .',\n", - " 'skillful woman debugs program .']" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_data[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Targets are represented as 2-dimensional arrays:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_labels[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating and parameterising diagrams" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The first step is to convert sentences into :term:`string diagrams `." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='text')\n", - "\n", - "train_diagrams = parser.sentences2diagrams(train_data)\n", - "val_diagrams = parser.sentences2diagrams(val_data)\n", - "test_diagrams = parser.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The produced diagrams need to be parameterised by a specific :term:`ansatz `. For this experiment we will use a :py:class:`.SpiderAnsatz`." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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k8lk/ryrqys6duwIT09P6HS6Wrv6hrm4uCj4bYnut/ni4mIUFhY2uisoKEBhYSHy8vIsikUA8PDwqPXHV2BgIPr378/isY1iQUnUtrTaaygbS61Wo1evXujVq1etww0GA27cuGFRaObm5pp3sIWFhbh27ZrFzresrKzO+bm4uDRYgLq6usLJyQnOzs5wdnZu8uvahjk4OPDIqp0xmUyorKxEZWUlKioqUFFRIft1eXk5ioqK6i0Oi4qK6rxJzcHBodYfQoGBgdDpdNDr9ejSpYu5aOzcuTM8PDxsnDkiIrI3bb6gbIijo6N5xzlkyJBGjVNZWdngTv3B7urVq+bX9+7dsygSrEGlUkkqThvz2tHRESqVqtZOrVZbpX/VMGdnZ1RUVEAIYdGZTKYa/err39hxqoo+KQVeQ58zGAxWWbZVeanq3N3dLYrBgICAOo+YP/ijxtXVlT88iIioyVhQNgMnJyfo9Xro9XrZ0xJCwGAwSD5qJXec8vJylJSU1Pu5ysrKOou2xhZ3tQ2vTd++fXHq1Klah9VViDamWK1reFWx1lBh7erqCk9PT8lHkKWOU3X0mYiISEksKO2cSqWCk5MTnJycoNVqlQ7H5h4sOE0mU52FIRERESmDBSXZterFIo/EERER2adW+59yiIiIiMg2WFASERERkSwsKImIiIhIFhaURERERCQLC0oiIiIikoUFJRERERHJwoKSiIiIiGRhQUlEREREsrCgJCIiIiJZWFASERERkSwsKImIiIhIFhaURERERCQLC0oiIiIikoUFJRERERHJwoKSiIiIiGRhQUlEREREsrCgJCIiIiJZWFASERERkSwsKImIiIhIFhaURERERCQLC0oiIiIikoUFJRERERHJwoKSiIiIiGRhQUlEREREsrCgJCIiIiJZWFASERERkSwsKImIiIhIFhaURERERCQLC0oiIrI6R0dHDBkyBO3bt1c6FCKyAZUQQigdBBERERG1XDxCSURERESysKAkIiIiIllYUBIRERGRLCwoiYiIiEgWFpREREREJAsLSiIiIiKShQUlEREREcnCgpKIiIiIZGFBSURERESysKAkIiIiIllYUBIRERGRLCwoiYiIiEgWFpREREREJAsLSiIiIiKShQUlEREREcnCgpKIiIiIZGFBSURERESysKAkIiIiIllYUBIRERGRLP8H2Kk/zzRzGw0AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend.tensor import Dim\n", - "\n", - "from lambeq import AtomicType, SpiderAnsatz\n", - "\n", - "ansatz = SpiderAnsatz({AtomicType.NOUN: Dim(2),\n", - " AtomicType.SENTENCE: Dim(2)})\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "val_circuits = [ansatz(diagram) for diagram in val_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits[0].draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training\n", - "\n", - "### Instantiate model" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can now initialise the model by importing the :py:class:`.PytorchModel` class, and passing all diagrams to the class method :py:meth:`.PytorchModel.from_diagrams`." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PytorchModel\n", - "\n", - "all_circuits = train_circuits + val_circuits + test_circuits\n", - "model = PytorchModel.from_diagrams(all_circuits)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " The model can also be instantiated by using the :py:meth:`.PytorchModel.from_checkpoint` method, if an existing checkpoint is available.\n", - "\n", - " Additionally, the parameters can be initialised by invoking the :py:meth:`.PytorchModel.initialise_weights` method. Since Release :ref:`rel-0.3.0`, we initialise the parameters using a symmetric uniform distribution where the range is determined by the output dimension (`flow codomain`) of a box:\n", - "\n", - " .. math::\n", - "\n", - " U\\left(-\\sqrt{3/\\operatorname{dim}_{\\text{flow_cod}}}, \\sqrt{3/\\operatorname{dim}_{\\text{flow_cod}}}\\right)\n", - "\n", - " This ensures that the expected value of the L2 norm of the output of a box is approximately 1." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define evaluation metric\n", - "\n", - "Optionally, we can provide a dictionary of callable evaluation metrics with the signature ``metric(y_hat, y)``." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "sig = torch.sigmoid\n", - "\n", - "def accuracy(y_hat, y):\n", - " return torch.sum(torch.eq(torch.round(sig(y_hat)), y))/len(y)/2 # half due to double-counting\n", - "\n", - "eval_metrics = {\"acc\": accuracy}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialise trainer" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Next step is to initialise a :py:class:`.PytorchTrainer` object. Because this is a binary classification task, we will use binary cross-entropy as the loss. As an optimizer, we choose Adam with weight decay.\n", - "\n", - ".. note::\n", - "\n", - " :py:class:`.PytorchTrainer` uses :term:`PyTorch`'s native classes for optimisers and losses, instead of the ``lambeq`` equivalents." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PytorchTrainer\n", - "\n", - "trainer = PytorchTrainer(\n", - " model=model,\n", - " loss_function=torch.nn.BCEWithLogitsLoss(),\n", - " optimizer=torch.optim.AdamW,\n", - " learning_rate=LEARNING_RATE,\n", - " epochs=EPOCHS,\n", - " evaluate_functions=eval_metrics,\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " seed=SEED)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create datasets" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To facilitate batching and data shuffling, lambeq provides a :py:class:`.Dataset` interface. Shuffling is enabled by default, and if not specified, the batch size is set to the length of the dataset. In our example we will use the :py:attr:`BATCH_SIZE` we have set above." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "val_dataset = Dataset(val_circuits, val_labels, shuffle=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Now we can pass the datasets to the :py:meth:`~lambeq.Trainer.fit` method of the :term:`trainer` to start the training." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 5: train/loss: 0.6518 valid/loss: 0.7119 train/time: 0.53s valid/time: 0.13s train/acc: 0.5643 valid/acc: 0.5500\n", - "Epoch 10: train/loss: 0.5804 valid/loss: 0.6197 train/time: 0.39s valid/time: 0.12s train/acc: 0.5714 valid/acc: 0.6167\n", - "Epoch 15: train/loss: 0.3311 valid/loss: 0.4577 train/time: 0.31s valid/time: 0.19s train/acc: 0.8643 valid/acc: 0.7667\n", - "Epoch 20: train/loss: 0.1054 valid/loss: 0.2346 train/time: 0.47s valid/time: 0.13s train/acc: 0.9500 valid/acc: 0.9333\n", - "Epoch 25: train/loss: 0.1346 valid/loss: 0.0438 train/time: 0.32s valid/time: 0.22s train/acc: 0.9857 valid/acc: 1.0000\n", - "Epoch 30: train/loss: 0.0005 valid/loss: 0.0283 train/time: 0.56s valid/time: 0.14s train/acc: 0.9929 valid/acc: 1.0000\n", - "\n", - "Training completed!\n", - "train/time: 2.59s train/time_per_epoch: 0.09s train/time_per_step: 0.03s valid/time: 0.93s valid/time_per_eval: 0.03s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, val_dataset, eval_interval=1, log_interval=5)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " The :py:attr:`eval_interval` controls the interval in which the model is evaluated on the validation dataset. Default is 1. If evaluation on the validation dataset is expensive, we recommend setting it to a higher value." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Results\n", - "\n", - "Finally, we visualise the results and evaluate the model on the test data." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test accuracy: 1.0\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjqUlEQVR4nOzdeVwU9R/H8dcuN8ghoiCKgveteaF5ZHlXll1ql2dZpl3Wr9JMyw5L0w61rKwsu+zOysz7zDTv+74QBUUF5Ibd+f1BUiQiKDDs8n72mAfLd2d23zOb8+WzM/Mdi2EYBiIiIiIiInJRVrMDiIiIiIiIlHYqnERERERERC5BhZOIiIiIiMglqHASERERERG5BBVOIiIiIiIil6DCSURERERE5BJUOImIiIiIiFyCCicREREREZFLUOEkIiIiIiJyCSqcRIrJwIEDCQ8Pv6xln3/+eSwWS9EGEhGRMuXw4cNYLBZmzZpldhQRp6DCScoci8VSoGnZsmVmR3V4X3zxBW+++abZMUREisysWbNy9RWenp6EhobSvXt33n77bc6dO2d2RAFeeeUVfvzxxxJ/3+PHj/P888+zefPmEn9vKX4WwzAMs0OIlKTPPvss1++ffvopCxcuZPbs2bnau3btSnBw8GW/T2ZmJna7HQ8Pj0Ivm5WVRVZWFp6enpf9/qXBjTfeyPbt2zl8+LDZUUREisSsWbMYNGgQ48ePJyIigszMTGJiYli2bBkLFy6kWrVqzJ07lyZNmpgdlcOHDxMREcHHH3/MwIEDzY5TosqVK8ftt99e4kfb1q9fT6tWrcrkNi8LXM0OIFLS7rnnnly///nnnyxcuPCC9v9KSUnB29u7wO/j5uZ2WfkAXF1dcXXVP08RkdKqZ8+etGzZMuf3UaNGsWTJEm688UZuuukmdu3ahZeXl4kJRaSo6VQ9kTx06tSJRo0asWHDBjp27Ii3tzejR48G4KeffuKGG24gNDQUDw8PatasyYsvvojNZsv1Gv+9xun8ueavv/4677//PjVr1sTDw4NWrVrx119/5Vo2r2ucLBYLI0aM4Mcff6RRo0Z4eHjQsGFD5s+ff0H+ZcuW0bJlSzw9PalZsybvvfdega+b2rdvH7fddhshISF4enpStWpV+vXrR0JCQq75PvvsM1q0aIGXlxeBgYH069ePqKioXNvw119/5ciRIzmntFzuNV8iIo7guuuu47nnnuPIkSMXnN2we/dubr/9dgIDA/H09KRly5bMnTs35/n169djsVj45JNPLnjd33//HYvFwi+//JLTFh0dzeDBgwkODs7pDz766KMC5VyyZAkdOnTAx8eHgIAAbr75Znbt2pVrnvN9xu7du+nTpw9+fn5UqFCBRx99lLS0tFzznu+fvvnmGxo0aICXlxdt27Zl27ZtALz33nvUqlULT09POnXqlOdZCGvXrqVHjx74+/vj7e3NNddcw+rVq/PMtH//fgYOHEhAQAD+/v4MGjSIlJSUXHmSk5P55JNPcvqfSx39mTp1Kg0bNsTb25vy5cvTsmVLvvjii1zzXGqbL1u2jFatWgEwaNCgnPfWNWbOQ19pi1zE6dOn6dmzJ/369eOee+7JOW1v1qxZlCtXjpEjR1KuXDmWLFnC2LFjSUxMZNKkSZd83S+++IJz587xwAMPYLFYmDhxIrfeeisHDx685FGqVatW8f333/PQQw/h6+vL22+/zW233cbRo0epUKECAJs2baJHjx5UrlyZF154AZvNxvjx46lYseIls2VkZNC9e3fS09N5+OGHCQkJITo6ml9++YX4+Hj8/f0BePnll3nuuefo06cP9913H6dOnWLq1Kl07NiRTZs2ERAQwLPPPktCQgLHjh3jjTfeALJPnRARcWb33nsvo0ePZsGCBdx///0A7Nixg3bt2lGlShWeeeYZfHx8+Prrr+nduzffffcdt9xyCy1btqRGjRp8/fXXDBgwINdrzpkzh/Lly9O9e3cAYmNjadOmTU7BUrFiRX777TeGDBlCYmIijz322EXzLVq0iJ49e1KjRg2ef/55UlNTmTp1Ku3atWPjxo0XfMHVp08fwsPDmTBhAn/++Sdvv/02Z8+e5dNPP80138qVK5k7dy7Dhw8HYMKECdx444089dRTvPPOOzz00EOcPXuWiRMnMnjwYJYsWZKz7JIlS+jZsyctWrRg3LhxWK1WPv74Y6677jpWrlxJ69atL8gUERHBhAkT2LhxIzNnzqRSpUq89tprAMyePZv77ruP1q1bM3ToUABq1qx50W3ywQcf8Mgjj3D77bfnFIZbt25l7dq13HXXXQXe5vXr12f8+PGMHTuWoUOH0qFDBwCuvvrqi763OBhDpIwbPny48d9/Ctdcc40BGDNmzLhg/pSUlAvaHnjgAcPb29tIS0vLaRswYIBRvXr1nN8PHTpkAEaFChWMM2fO5LT/9NNPBmD8/PPPOW3jxo27IBNguLu7G/v3789p27JliwEYU6dOzWnr1auX4e3tbURHR+e07du3z3B1db3gNf9r06ZNBmB88803F53n8OHDhouLi/Hyyy/nat+2bZvh6uqaq/2GG27ItQ1ERBzdxx9/bADGX3/9ddF5/P39jauuuirn986dOxuNGzfO1UfY7Xbj6quvNmrXrp3TNmrUKMPNzS1XH5Genm4EBAQYgwcPzmkbMmSIUblyZSMuLi7X+/br18/w9/fP6afO9zsff/xxzjzNmjUzKlWqZJw+fTqnbcuWLYbVajX69++f03a+H7rppptyvcdDDz1kAMaWLVty2gDDw8PDOHToUE7be++9ZwBGSEiIkZiYmGsdgZx57Xa7Ubt2baN79+6G3W7PmS8lJcWIiIgwunbtekGmf28LwzCMW265xahQoUKuNh8fH2PAgAFGQdx8881Gw4YN852noNv8r7/+umCbi/PQqXoiF+Hh4cGgQYMuaP/3Oevnzp0jLi6ODh06kJKSwu7duy/5un379qV8+fI5v5//RurgwYOXXLZLly65vjVr0qQJfn5+OcvabDYWLVpE7969CQ0NzZmvVq1a9OzZ85Kvf/6I0u+//57rtId/+/7777Hb7fTp04e4uLicKSQkhNq1a7N06dJLvo+IiDMrV65czuh6Z86cYcmSJfTp0yenz4iLi+P06dN0796dffv2ER0dDWT3D5mZmXz//fc5r7VgwQLi4+Pp27cvAIZh8N1339GrVy8Mw8i1H+7evTsJCQls3Lgxz1wnTpxg8+bNDBw4kMDAwJz2Jk2a0LVrV+bNm3fBMuePIJ338MMPA1wwb+fOnXMdrYqMjATgtttuw9fX94L28/3W5s2b2bdvH3fddRenT5/OWZfk5GQ6d+7MihUrsNvtud7rwQcfzPV7hw4dOH36NImJiXmu96UEBARw7NixC06bP+9Ktrk4F52qJ3IRVapUwd3d/YL2HTt2MGbMGJYsWXLBTvq/1wHlpVq1arl+P19EnT17ttDLnl/+/LInT54kNTWVWrVqXTBfXm3/FRERwciRI5kyZQqff/45HTp04KabbuKee+7JKar27duHYRjUrl07z9e4kkExREScQVJSEpUqVQJg//79GIbBc889x3PP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tMho3ry5Ubt2bSMtLc3s6PkaNmyY4e/vbyxbtsw4ceJEzpSSkpIzz4MPPmhUq1bNWLJkibF+/Xqjbdu2Rtu2bU1MXXCXWr/9+/cb48ePN9avX28cOnTI+Omnn4waNWoYHTt2NDn5pT3zzDPG8uXLjUOHDhlbt241nnnmGcNisRgLFiwwDMOxPzdH4Kz9kmGob3KUvslZ+yXDcO6+yZn7JcMoHX1TmS+cDMMwpk6dalSrVs1wd3c3Wrdubfz5559mR7piffv2NSpXrmy4u7sbVapUMfr27Wvs37/f7FiXZenSpQZwwTRgwADDMLKHfX3uueeM4OBgw8PDw+jcubOxZ88ec0MXQn7rl5KSYnTr1s2oWLGi4ebmZlSvXt24//77HeIPqLzWCTA+/vjjnHlSU1ONhx56yChfvrzh7e1t3HLLLcaJEyfMC10Il1q/o0ePGh07djQCAwMNDw8Po1atWsb//vc/IyEhwdzgBTB48GCjevXqhru7u1GxYkWjc+fOOR2TYTj25+YonLFfMgz1TY7SNzlrv2QYzt03OXO/ZBilo2+yGIZhFN3xKxEREREREedTpq9xEhERERERKQgVTiIiIiIiIpegwklEREREROQSVDiJiIiIiIhcggonERERERGRS1DhJCIiIiIicgkqnERERERERC5BhZOIiIiIiMglqHASERERERG5BBVOIiIiIiIil6DCSURERERE5BJUOImIiIiIiFyCCicREREREZFLUOEkIiIiIiJyCSqcRERERERELkGFk4iIiIiIyCWocBIREREREbkEFU4iIiIiIiKXoMJJRERERETkElzNDlDS7HY7x48fx9fXF4vFYnYcEZEyxTAMzp07R2hoKFarvrs7T32TiIg5CtMvlbnC6fjx44SFhZkdQ0SkTIuKiqJq1apmxyg11DeJiJirIP1SmSucfH19geyN4+fnZ3IaEZGyJTExkbCwsJx9sWRT3yQiYo7C9EtlrnA6fwqEn5+fOicREZPodLTc1DeJiJirIP2STjAXERERERG5BBVOIiIiIiIil2Bq4bRixQp69epFaGgoFouFH3/88ZLLLFu2jObNm+Ph4UGtWrWYNWtWsecUEREREZGyzdTCKTk5maZNmzJ9+vQCzX/o0CFuuOEGrr32WjZv3sxjjz3Gfffdx++//17MSUVEREREpCwzdXCInj170rNn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HTsSEBBQtr5r1644HA7S09Ox2WwcPHiQpKSki8bQoUOHstcBAQEEBQWRlZUFwIgRIxgwYAAbNmygZ8+e9O/fnxtuuKFafRUREfeg3CRSfSqcRGpIQEDAOZcnuIqfn1+ltvPx8Sn33maz4XA4AOjTpw/79u3j448/ZunSpSQlJZGamsqLL77o8nhFRKRuUG4SqT7d4yRikTVr1pzzvk2bNgC0adOGb7/9lsLCwrL1q1atwsvLi9atW9OgQQOaN29OWlraJcUQHh5OSkoK77zzDtOmTeO11167pPZERMS9KTeJXJjOOInUkKKiIjIyMsp9Vq9evbKbXOfNm8d1113HjTfeyLvvvsu6dev45z//CcCgQYOYOHEiKSkpPPXUUxw+fJgHH3yQ3//+90RGRgLw1FNPMXz4cCIiIujTpw/5+fmsWrWKBx98sFLxPfnkk8THx9OuXTuKior48MMPy5KjiIh4JuUmkepT4SRSQz755BOio6PLfda6dWu2b98OOGcVmjNnDiNHjiQ6OprZs2fTtm1bAPz9/fn0008ZPXo0119/Pf7+/gwYMICpU6eWtZWSksLJkyd56aWXePjhhwkLC+POO++sdHx2u51x48axd+9e/Pz86NatG3PmzHFBz0VEpK5SbhKpPpsxxlgdhMjlxmazsXDhQvr37291KCIiIoByk0hFdI+TiIiIiIhIBVQ4iYiIiIiIVECX6omIiIiIiFRAZ5xEREREREQqoMJJRERERESkAiqcREREREREKqDCSUREREREpAIqnERERERERCqgwklERERERKQCKpxEREREREQqoMJJRERERESkAv8P7Rhdn3tW3HcAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", - "\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Epochs')\n", - "ax_br.set_xlabel('Epochs')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs+1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "# print test accuracy\n", - "test_acc = accuracy(model(test_circuits), torch.tensor(test_labels))\n", - "print('Test accuracy:', test_acc.item())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Adding custom layers to the model" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In the default setting, the forward pass of a :py:class:`.PytorchModel` performs a simple tensor contraction of the tensorised diagrams. However, if one likes to add additional custom layers, one can create a custom model that inherits from :py:class:`.PytorchModel` and overwrite the :py:meth:`.PytorchModel.forward` method." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "class MyCustomModel(PytorchModel):\n", - " def __init__(self):\n", - " super().__init__()\n", - " self.net = torch.nn.Linear(2, 2)\n", - "\n", - " def forward(self, input):\n", - " \"\"\"define a custom forward pass here\"\"\"\n", - " preds = self.get_diagram_output(input)\n", - " preds = self.net(preds.float())\n", - " return preds" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The rest follows the same procedure as explained above, i.e. initialise a trainer, fit the model and visualise the results." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 5: train/loss: 0.6729 valid/loss: 0.7965 train/time: 0.53s valid/time: 0.13s train/acc: 0.6429 valid/acc: 0.3833\n", - "Epoch 10: train/loss: 0.4602 valid/loss: 1.0563 train/time: 0.40s valid/time: 0.13s train/acc: 0.7500 valid/acc: 0.4333\n", - "Epoch 15: train/loss: 0.4580 valid/loss: 1.0329 train/time: 0.39s valid/time: 0.19s train/acc: 0.8286 valid/acc: 0.4667\n", - "Epoch 20: train/loss: 0.1645 valid/loss: 1.0594 train/time: 0.39s valid/time: 0.13s train/acc: 0.9429 valid/acc: 0.7667\n", - "Epoch 25: train/loss: 0.1098 valid/loss: 1.2642 train/time: 0.38s valid/time: 0.12s train/acc: 0.9429 valid/acc: 0.7333\n", - "Epoch 30: train/loss: 0.1957 valid/loss: 1.3476 train/time: 0.32s valid/time: 0.19s train/acc: 0.9429 valid/acc: 0.7333\n", - "\n", - "Training completed!\n", - "train/time: 2.40s train/time_per_epoch: 0.08s train/time_per_step: 0.03s valid/time: 0.89s valid/time_per_eval: 0.03s\n" - ] - } - ], - "source": [ - "custom_model = MyCustomModel.from_diagrams(all_circuits)\n", - "custom_model_trainer = PytorchTrainer(\n", - " model=custom_model,\n", - " loss_function=torch.nn.BCEWithLogitsLoss(),\n", - " optimizer=torch.optim.AdamW,\n", - " learning_rate=LEARNING_RATE,\n", - " epochs=EPOCHS,\n", - " evaluate_functions=eval_metrics,\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " seed=SEED)\n", - "\n", - "custom_model_trainer.fit(train_dataset, val_dataset, log_interval=5)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Test accuracy: 1.0\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACleElEQVR4nOzdd3gU1dvG8e9ueg8hJCEhhNB76BEpIkVERbGiqCAgWLCir4IFxIYVsaCoPxW7WBBULEBooghKVQQkEAiEVEIKCak77x8rq5EACSSZbHJ/rmsvd89OuWdW9uTZmTljMQzDQERERERERE7IanYAERERERGR2k6Fk4iIiIiIyCmocBIRERERETkFFU4iIiIiIiKnoMJJRERERETkFFQ4iYiIiIiInIIKJxERERERkVNQ4SQiIiIiInIKKpxEREREREROQYWTSDW54YYbaNas2WnN+8gjj2CxWKo2kIiI1Ct79+7FYrEwb948s6OI1AkqnKTesVgsFXqsXLnS7KhO76OPPmL27NlmxxARqTLz5s0r01d4enoSHh7O0KFDeemll8jNzTU7ogBPPvkkCxcurPH1Hjx4kEceeYTNmzfX+Lql+lkMwzDMDiFSkz744IMyr9977z2WLl3K+++/X6Z9yJAhhIaGnvZ6iouLsdlseHh4VHrekpISSkpK8PT0PO311wYXXXQRf/zxB3v37jU7iohIlZg3bx5jx47l0UcfJTo6muLiYlJSUli5ciVLly6ladOmfPXVV3Tu3NnsqOzdu5fo6GjeeecdbrjhBrPj1ChfX1+uuOKKGj/a9ttvv9GzZ896uc/rA1ezA4jUtOuuu67M619++YWlS5ce1/5f+fn5eHt7V3g9bm5up5UPwNXVFVdX/fMUEamthg0bRo8ePRyvp06dyvLly7nooou4+OKL2b59O15eXiYmFJGqplP1RMoxYMAAOnbsyIYNG+jfvz/e3t488MADACxatIgLL7yQ8PBwPDw8aNGiBY899hilpaVllvHfa5yOnWv+3HPP8cYbb9CiRQs8PDzo2bMnv/76a5l5y7vGyWKxcNttt7Fw4UI6duyIh4cHHTp04Pvvvz8u/8qVK+nRoweenp60aNGC119/vcLXTe3atYvLL7+csLAwPD09adKkCVdffTXZ2dllpvvggw/o3r07Xl5eBAUFcfXVV7N///4y+3Dx4sXs27fPcUrL6V7zJSLiDAYOHMjDDz/Mvn37jju7YceOHVxxxRUEBQXh6elJjx49+Oqrrxzv//bbb1gsFt59993jlvvDDz9gsVj45ptvHG1JSUmMGzeO0NBQR3/w9ttvVyjn8uXL6devHz4+PgQGBnLJJZewffv2MtMc6zN27NjBVVddhb+/Pw0bNuTOO++koKCgzLTH+qfPPvuM9u3b4+XlRe/evfn9998BeP3112nZsiWenp4MGDCg3LMQ1q1bx/nnn09AQADe3t6cc845/PTTT+Vmio+P54YbbiAwMJCAgADGjh1Lfn5+mTx5eXm8++67jv7nVEd/Xn75ZTp06IC3tzcNGjSgR48efPTRR2WmOdU+X7lyJT179gRg7NixjnXrGrO6Qz9pi5zAoUOHGDZsGFdffTXXXXed47S9efPm4evry+TJk/H19WX58uVMmzaNnJwcnn322VMu96OPPiI3N5ebbroJi8XCM888w2WXXcaePXtOeZRqzZo1LFiwgFtvvRU/Pz9eeuklLr/8chITE2nYsCEAmzZt4vzzz6dx48bMmDGD0tJSHn30URo1anTKbEVFRQwdOpTCwkJuv/12wsLCSEpK4ptvviErK4uAgAAAnnjiCR5++GGuuuoqbrzxRtLT03n55Zfp378/mzZtIjAwkAcffJDs7GwOHDjACy+8ANhPnRARqcuuv/56HnjgAZYsWcKECRMA2LZtG3369CEiIoIpU6bg4+PDp59+yogRI/jiiy+49NJL6dGjB82bN+fTTz9lzJgxZZY5f/58GjRowNChQwFITU3lrLPOchQsjRo14rvvvmP8+PHk5ORw1113nTDfsmXLGDZsGM2bN+eRRx7h6NGjvPzyy/Tp04eNGzce9wPXVVddRbNmzZg5cya//PILL730EocPH+a9994rM92PP/7IV199xaRJkwCYOXMmF110Effddx+vvvoqt956K4cPH+aZZ55h3LhxLF++3DHv8uXLGTZsGN27d2f69OlYrVbeeecdBg4cyI8//kivXr2OyxQdHc3MmTPZuHEj//vf/wgJCeHpp58G4P333+fGG2+kV69eTJw4EYAWLVqccJ+8+eab3HHHHVxxxRWOwnDr1q2sW7eOUaNGVXift2vXjkcffZRp06YxceJE+vXrB8DZZ599wnWLkzFE6rlJkyYZ//2ncM455xiAMXfu3OOm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k5Mdj/z8fMc0N998s9G0aVNj+fLlxm+//Wb07t3b6N27t4mpK+5U2xcfH288+uijxm+//WYkJCQYixYtMpo3b27079/f5OSnNmXKFGPVqlVGQkKCsXXrVmPKlCmGxWIxlixZYhiGc39uzqCu9kuGob7JWfqmutovGUbd7pvqcr9kGLWjb6r3hZNhGMbLL79sNG3a1HB3dzd69epl/PLLL2ZHOmMjR440GjdubLi7uxsRERHGyJEjjfj4eLNjnZYVK1YYwHGPMWPGGIZhH/b14YcfNkJDQw0PDw9j0KBBxs6dO80NXQkn2778/HzjvPPOMxo1amS4ubkZUVFRxoQJE5ziD6jytgkw3nnnHcc0R48eNW699VajQYMGhre3t3HppZcaycnJ5oWuhFNtX2JiotG/f38jKCjI8PDwMFq2bGn83//9n5GdnW1u8AoYN26cERUVZbi7uxuNGjUyBg0a5OiYDMO5PzdnURf7JcNQ3+QsfVNd7ZcMo273TXW5XzKM2tE3WQzDMKru+JWIiIiIiEjdU6+vcRIREREREakIFU4iIiIiIiKnoMJJRERERETkFFQ4iYiIiIiInIIKJxERERERkVNQ4SQiIiIiInIKKpxEREREREROQYWTiIiIiIjIKahwEhEREREROQUVTiIiIiIiIqegwklEREREROQUVDiJiIiIiIicggonERERERGRU1DhJCIiIiIicgoqnERERERERE5BhZOIiIiIiMgpqHASERERERE5BRVOIiIiIiIip6DCSURERERE5BRczQ5Q02w2GwcPHsTPzw+LxWJ2HBGResUwDHJzcwkPD8dq1W93x6hvEhExR2X6pXpXOB08eJDIyEizY4iI1Gv79++nSZMmZseoNdQ3iYiYqyL9Ur0rnPz8/AD7zvH39zc5jYhI/ZKTk0NkZKTju1js1DeJiJijMv1SvSucjp0C4e/vr85JRMQkOh2tLPVNIiLmqki/pBPMRURERERETkGFk4iIiIiIyCmocBIRERERETkFFU4iIiIiIiKnoMJJREQqzjDAVmp2ChERkRpX70bVExGTGQb89CLsWGx2Eufj5gltL4LOV4FXg5pdd94h2PIxbHwP+t9rzyAiIlKPqHASkZr180uwbLrZKZxXwmpYOg3aXwLdxkDU2VBdQ3vbbLB3NWx4F3Z8A6VF9vYtn6hwEhGRekeFk4jU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+1v+GJQchaa9of3xA3SIiIjzqDN9k0gVKtq/n8MffwJAyD33YLFW2aX4IlWi0v9HvvPOO3z22WfHtX/22We8++67VRLqRGw2GyEhIbzxxht0796dkSNH8uCDDzJ37twTzjN16lSys7Mdj/3791drxmqRtBG2fGx/PvQJOMl9tEREpParE32TSBVLn/0iFBfjc/bZ+PbpY3YckeNUunCaOXMmwcHBx7WHhITw5JNPVng5wcHBuLi4kJqaWqY9NTWVsBOM1d+4cWNat25d5rS8du3akZKSQlFRUbnzeHh44O/vX+bhVAwDfnjQ/rzzSIjobm4eERE5Y07fN4lUsaN/bCNn8WIAQu69x+Q0IuWrdOGUmJhIdHT0ce1RUVEkJiZWeDnu7u507969zBDmNpuNuLg4evfuXe48ffr0IT4+HpvN5mj766+/aNy4Me519eLB7V9D4s/g6gmDppmdRkRERKRKGYZB2vPPAeA/fDie7XWrFamdKl04hYSEsHXr1uPat2zZQsOGDSu1rMmTJ/Pmm2/y7rvvsn37dm655Rby8vIco+yNHj26zOARt9xyC5mZmdx555389ddfLF68mCeffJJJkyZVdjOcQ0khLP27WDr7dghoYm4eERERkSqWu3Qp+Wt/weLmRqM77zQ7jsgJVXpwiGuuuYY77rgDPz8/+vfvD8CqVau48847ufrqqyu1rJEjR5Kens60adNISUmhS5cufP/9944BIxITE7H+68LAyMhIfvjhB+6++246d+5MREQEd955J/fff39lN8M5rH8DDieAbyj0ucvsNCIiIiJVqjglhZSH7T8SB91wA+5NKndPUJGaZDEMw6jMDEVFRVx//fV89tlnuLra6y6bzcbo0aOZO3durT9lLicnh4CAALKzs2v3OeV5h+ClrlCYDRe/At2uNzuRiMgZc5rv4Bqm/SL1kVFaSuINY8n/9Vc8O3Sg2ccfYanlf0dK3VOZ799KH3Fyd3dn/vz5PP7442zevBkvLy86depEVFTUaQeWcqx6yl40hXaCLrprtoiIiNQth954g/xff8Xi7U3E88+paJJar9KF0zGtWrWiVatWVZlFjkn/C359y/586BNgLf/mviIiIiLOKH/TJtJfmQNA2LSHcW/WzNxAIhVQ6cEhLr/8cp5++unj2p955hmuvPLKKglV7y15CIxSaHMBND/H7DQi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tyw+sbG0W7IY365dqTp2DKqqCLz6avx79qy3fYiI1JUaJxEREcFmtxM8eBAABav+++V6pV9/436eUnR6+ilTjdcH77Awzlu0iMC+ffGOiSHqD5PrfR8iInWhxklERESAf8+uV/LJBk4cOXLadaqKS/hp4gSorCSoXz9Cb264Ge68AgNoO3cO8R9m4uzQocH2IyJSG2qcREREBABnh/Px7doVqqoofOfd066T/ac/UblvP96xscQ+8nCj3HNks+ufKyJiPf0mEhEREbeQwT8/0+k0l+sVrH6LghUrwG6n9eMz8QoJaeR0IiLWUeMkIiIibsHXXwfe3pR9/TXle/a4l1ccOEDW9OkARI4di3+PHhYlFBGxhhonERERcfMODyfw8suBfz/TyVRW8tOkSbhKSvC75BIix46xMqKIiCXUOImIiEg1IT/Prle4ejXG5SL32TmUfbUNe3AwrR+fic3b2+KEIiKNT42TiIiIVBPYpw/2wEAqDx3iyF/nkTd/PgCxDz+MT+vWFqcTEbGGGicRERGpxu7rS1D/fgAcmTMHjCH0ppsIHtDf4mQiItZR4yQiIiKnCBk8xP21o0MHotOnWJhGRMR6apxERETkFP49e+DsFI/N35/Ws2dh9/e3OpKIiKWaROM0d+5c2rdvj6+vL71792bTpk1nXPeNN96gR48ehIaGEhAQQPfu3XnllVcaMa2IiIjns9nttFu6jPgP3se3Sxer44iIWM7yxmn58uVMmDCBadOmsWXLFhISEujfvz85OTmnXT88PJwHHniAjRs3sm3bNtLS0khLS+O9995r5OQiIiKezSswAO+ICKtjiIg0CTZjjLEyQO/evenZsydz5swBwOVy0bZtW+655x6mTKnd9dSXXHIJ119/PY888kiN6xYWFhISEkJBQQHBwcHnlF1EROpGv4NPTz8XERFr1OX3r6VnnCoqKti8eTPJycnuZXa7neTkZDZu3Fjj540xZGZmsnPnTq688srTrlNeXk5hYWG1l4iIiJVUm0REmh9LG6cjR45QVVVFdHR0teXR0dFkZWWd8XMFBQUEBgbicDi4/vrrefbZZ7n22mtPu25GRgYhISHuV9u2bet1DCIiInWl2iQi0vxYfo/T2QgKCmLr1q18/vnnPProo0yYMIF169addt309HQKCgrcrwMHDjRuWBERkf+g2iQi0vx4W7nzyMhIvLy8yM7OrrY8OzubmJiYM37ObrcTHx8PQPfu3dmxYwcZGRlcffXVp6zrdDpxOp31mltERORcqDaJiDQ/lp5xcjgcJCYmkpmZ6V7mcrnIzMwkKSmp1ttxuVyUl5c3REQRERERERFrzzgBTJgwgdTUVHr06EGvXr146qmnKCkpIS0tDYCRI0fSunVrMjIygJPXhffo0YOOHTtSXl7OO++8wyuvvMK8efNqtb9fJhHUjbgiIo3vl9+9Fk/o2uSoNomIWKMudcnyxmn48OHk5uYydepUsrKy6N69O2vWrHFPGLF//37s9n+fGCspKeHuu+/m4MGD+Pn50aVLFxYvXszw4cNrtb+ioiIA3YgrImKhoqIiQkJCrI7RZKg2iYhYqzZ1yfLnODU2l8vFoUOHCAoKwmazASc7zbZt23LgwAGPe36GJ48NPHt8Glvz5Mljg3MfnzGGoqIi4uLiqv1RrKVTbfIcnjw28OzxaWzNU2PWJcvPODU2u91OmzZtTvtecHCwx/3H9AtPHht49vg0tubJk8cG5zY+nWk6lWqT5/HksYFnj09ja54aoy7pz30iIiIiIiI1UOMkIiIiIiJSAzVOnHyexrRp0zzymRqePDbw7PFpbM2TJ48NPH98TYkn/6w1tubLk8ensTVPjTm2Fjc5hIiIiIiISF3pjJOIiIiIiEgN1DiJiIiIiIjUQI2TiIiIiIhIDdQ4iYiIiIiI1ECNEzB37lzat2+Pr68vvXv3ZtOmTVZHOmfTp0/HZrNVe3Xp0sXqWGfln//8J4MGDSIuLg6bzcaKFSuqvW+MYerUqcTGxuLn50dycjI//PCDNWHPQk3ju/322085lgMGDLAmbB1kZGTQs2dPgoKCiIqKYujQoezcubPaOmVlZYwbN46IiAgCAwMZNmwY2dnZFiWum9qM7+qrrz7l2I0ZM8aixLU3b948unXr5n6YYFJSEu+++677/eZ83JoLT6xLoNrUXGqTp9Yl8Oza5Ml1CZpGbWrxjdPy5cuZMGEC06ZNY8uWLSQkJNC/f39ycnKsjnbOLrroIg4fPux+ffLJJ1ZHOislJSUkJCQwd+7c074/c+ZMnnnmGZ577jk+++wzAgIC6N+/P2VlZY2c9OzUND6AAQMGVDuWS5cubcSEZ2f9+vWMGzeOTz/9lA8++IDKykr69etHSUmJe5377ruP1atX89prr7F+/XoOHTrEjTfeaGHq2qvN+ABGjRpV7djNnDnTosS116ZNGx577DE2b97MF198QZ8+fRgyZAjffPMN0LyPW3PgyXUJVJuaQ23y1LoEnl2bPLkuQROpTaaF69Wrlxk3bpz7+6qqKhMXF2cyMjIsTHXupk2bZhISEqyOUe8A8+abb7q/d7lcJiYmxjz++OPuZceOHTNOp9MsXbrUgoTn5j/HZ4wxqampZsiQIZbkqU85OTkGMOvXrzfGnDxOPj4+5rXXXnOvs2PHDgOYjRs3WhXzrP3n+Iwx5qqrrjL33nuvdaHqUVhYmHnhhRc87rg1RZ5al4xRbWqOtcmT65Ixnl2bPL0uGdP4talFn3GqqKhg8+bNJCcnu5fZ7XaSk5PZuHGjhcnqxw8//EBcXBwdOnQgJSWF/fv3Wx2p3u3du5esrKxqxzAkJITevXt7xDH8xbp164iKiqJz586MHTuWvLw8qyPVWUFBAQDh4eEAbN68mcrKymrHrkuXLpx33nnN8tj95/h+sWTJEiIjI7n44otJT0/n+PHjVsQ7a1VVVSxbtoySkhKSkpI87rg1NZ5el0C1yVOOoyfUJfDs2uSpdQmsq03e9balZujIkSNUVVURHR1dbXl0dDTfffedRanqR+/evXnxxRfp3Lkzhw8fZsaMGVxxxRV8/fXXBAUFWR2v3mRlZQGc9hj+8l5zN2DAAG688UbOP/98du/ezf3338/AgQPZuHEjXl5eVserFZfLxe9//3suu+wyLr74YuDksXM4HISGhlZbtzkeu9OND+DWW2+lXbt2xMXFsW3bNv74xz+yc+dO3njjDQvT1s727dtJSkqirKyMwMBA3nzzTS688EK2bt3qMcetKfLkugSqTZ7y/4kn1CXw7NrkiXUJrK9NLbpx8mQDBw50f92tWzd69+5Nu3bt+Pvf/86dd95pYTKpq1tuucX9ddeuXenWrRsdO3Zk3bp19O3b18JktTdu3Di+/vrrZnsvQ03ONL7Ro0e7v+7atSuxsbH07duX3bt307Fjx8aOWSedO3dm69atFBQU8Prrr5Oamsr69eutjiXNnGqTZ/CEugSeXZs8sS6B9bWpRV+qFxkZiZeX1ykzbmRnZxMTE2NRqoYRGhrKr371K3bt2mV1lHr1y3FqCcfwFx06dCAyMrLZHMvx48fz1ltv8dFHH9GmTRv38piYGCoqKjh27Fi19ZvbsTvT+E6nd+/eAM3i2DkcDuLj40lMTCQjI4OEhASefvppjzluTVVLqkug2uQpmltdAs+uTZ5al8D62tSiGyeHw0FiYiKZmZnuZS6Xi8zMTJKSkixMVv+Ki4vZvXs3sbGxVkepV+effz4xMTHVjmFhYSGfffaZxx3DXxw8eJC8vLwmfyyNMYwfP54333yTDz/8kPPPP7/a+4mJifj4+FQ7djt37mT//v3N4tjVNL7T2bp1K0CTP3an43K5KC8vb/bHralrSXUJVJs8RXOpS+DZtaml1SWwoDbV2zQTzdSyZcuM0+k0L774ovn222/N6NGjTWhoqMnKyrI62jmZOHGiWbdundm7d6/ZsGGDSU5ONpGRkSYnJ8fqaHVWVFRkvvzyS/Pll18awMyePdt8+eWXZt++fcYYYx577DETGhpqVq5cabZt22aGDBlizj//fFNaWmpx8tr5b+MrKioykyZNMhs3bjR79+41a9euNZdcconp1KmTKSsrszr6fzV27FgTEhJi1q1bZw4fPux+HT9+3L3OmDFjzHnnnWc+/PBD88UXX5ikpCSTlJRkYeraq2l8u3btMg8//LD54osvzN69e83KlStNhw4dzJVXXmlx8ppNmTLFrF+/3uzdu9ds27bNTJkyxdhsNvP+++8bY5r3cWsOPLUuGaPa1Fxqk6fWJWM8uzZ5cl0ypmnUphbfOBljzLPPPmvOO+8843A4TK9evcynn35qdaRzNnz4cBMbG2scDodp3bq1GT58uNm1a5fVsc7KRx99ZIBTXqmpqcaYk9O+PvTQQyY6Oto4nU7Tt29fs3PnTmtD18F/G9/x48dNv379TKtWrYyPj49p166dGTVqVLP4B9TpxgSYRYsWudcpLS01d999twkLCzP+/v7mhhtuMIcPH7YudB3UNL79+/ebK6+80oSHhxun02ni4+PN5MmTTUFBgbXBa+GOO+4w7dq1Mw6Hw7Rq1cr07dvXXZiMad7HrbnwxLpkjGpTc6lNnlqXjPHs2uTJdcmYplGbbMYYU3/nr0RERERERDxPi77HSUREREREpDbUOImIiIiIiNRAjZOIiIiIiEgN1DiJiIiIiIjUQI2TiIiIiIhIDdQ4iYiIiIiI1ECNk4iIiIiISA3UOImIiIiIiNRAjZOIh7LZbKxYscLqGCIiIm6qTdKcqXESaQC33347NpvtlNeAAQOsjiYiIi2UapPIufG2OoCIpxowYACLFi2qtszpdFqURkRERLVJ5FzojJNIA3E6ncTExFR7hYWFAScvVZg3bx4DBw7Ez8+PDh068Prrr1f7/Pbt2+nTpw9+fn5EREQwevRoiouLq62zcOFCLrroIpxOJ7GxsYwfP77a+0eOHOGGG27A39+fTp06sWrVKvd7R48eJSUlhVatWuHn50enTp1OKaYiIuJZVJtEzp4aJxGLPPTQQwwbNoyvvvqKlJQUbrnlFnbs2AFASUkJ/fv3JywsjM8//5zXXnuNtWvXVis+8+bNY9y4cYwePZrt27ezatUq4uPjq+1jxowZ3HzzzWzbto3rrruOlJQU8vPz3fv/9ttveffdd9mxYwfz5s0jMjKy8X4AIiLS5Kg2ifwXRkTqXWpqqvHy8jIBAQHVXo8++qgxxhjAjBkzptpnevfubcaOHWuMMeb55583YWFhpri42P3+22+/bex2u8nKyjLGGBMXF2ceeOCBM2YAzIMPPuj+vri42ADm3XffNcYYM2jQIJOWllY/AxYRkSZPtUnk3OgeJ5EGcs011zBv3rxqy8LDw91fJyUlVXsvKSmJrVu3ArBjxw4SEhIICAhwv3/ZZZfhcrnYuXMnNpuNQ4cO0bdv3/+aoVu3bu6vAwICCA4OJicnB4CxY8cybNgwtmzZQr9+/Rg6dCiXXnrpWY1VRESaB9UmkbOnxkmkgQQEBJxyeUJ98fPzq9V6Pj4+1b632Wy4XC4ABg4cyL59+3jnnXf44IMP6Nu3L+PGjeOJJ56o97wiItI0qDaJnD3d4yRikU8//fSU7y+44AIALrjgAr766itKSkrc72/YsAG73U7nzp0JCgqiffv2ZGZmnlOGVq1akZqayuLFi3nqqad4/vnnz2l7IiLSvKk2iZyZzjiJNJDy8nKysrKqLfP29nbf5Praa6/Ro0cPLr/8cpYsWcKmTZtYsGABACkpKUybNo3U1FSmT59Obm4u99xzDyNGjCA6OhqA6dOnM2bMGKKiohg4cCBFRUVs2LCBe+65p1b5pk6dSmJiIhdddBHl5eW89dZb7uIoIiKeSbVJ5OypcRJpIGvWrCE2Nrbass6dO/Pdd98BJ2cVWrZsGXfffTexsbEsXbqUCy+8EAB/f3/ee+897r33Xnr27Im/vz/Dhg1j9uzZ7m2lpqZSVlbGk08+yaRJk4iMjOQ3v/lNrfM5HA7S09P58ccf8fPz44orrmDZsmX1MHIREWmqVJtEzp7NGGOsDiHS0thsNt58802GDh1qdRQRERFAtUmkJrrHSUREREREpAZqnERERERERGqgS/VERERERERqoDNOIiIiIiIiNVDjJCIiIiIiUgM1TiIiIiIiIjVQ4yQiIiIiIlIDNU4iIiIiIiI1UOMkIiIiIiJSAzVOIiIiIiIiNVDjJCIiIiIiUoP/D6JGajZsyXhaAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "fig1, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharey='row', figsize=(10, 6))\n", - "\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Epochs')\n", - "ax_br.set_xlabel('Epochs')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs+1)\n", - "ax_tl.plot(range_, custom_model_trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, custom_model_trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, custom_model_trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, custom_model_trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "# print test accuracy\n", - "test_acc = accuracy(model(test_circuits), torch.tensor(test_labels))\n", - "print('Test accuracy:', test_acc.item())" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. rubric:: See also:\n", - "\n", - "- `Training: Hybrid case <./trainer-hybrid.ipynb>`_\n", - "- `Training: Quantum case <./trainer-quantum.ipynb>`_\n", - "- `Advanced: Manual training <../manual-training.rst>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/trainer-hybrid.ipynb b/docs/tutorials/trainer-hybrid.ipynb deleted file mode 100644 index f3d49633..00000000 --- a/docs/tutorials/trainer-hybrid.ipynb +++ /dev/null @@ -1,1248 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training: Hybrid case" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this tutorial we train a pure quantum :term:`PennyLane` :term:`model` to solve a toy problem: classifying whether a given sentence is about cooking or computing. We also train a hybrid model that determines whether a given pair of sentences are talking about different topics.\n", - "\n", - "We use an :py:class:`.IQPAnsatz` to convert :term:`string diagrams ` into :term:`quantum circuits `. When passing these circuits to the :py:class:`PennyLaneModel`, they are automatically converted into :term:`PennyLane` circuits.\n", - "\n", - ":download:`Download code <../_code/trainer-hybrid.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preparation\n", - "\n", - "We start by specifying some training hyperparameters and importing NumPy and PyTorch." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "BATCH_SIZE = 10\n", - "EPOCHS = 15\n", - "LEARNING_RATE = 0.1\n", - "SEED = 42" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import random\n", - "import numpy as np\n", - "\n", - "torch.manual_seed(SEED)\n", - "random.seed(SEED)\n", - "np.random.seed(SEED)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Input data\n", - "\n", - "Let's read the data and print some example sentences." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = float(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('../examples/datasets/mc_train_data.txt')\n", - "dev_labels, dev_data = read_data('../examples/datasets/mc_dev_data.txt')\n", - "test_labels, test_data = read_data('../examples/datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " dev_labels, dev_data = dev_labels[:2], dev_data[:2]\n", - " test_labels, test_data = test_labels[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['skillful man prepares sauce .',\n", - " 'skillful man bakes dinner .',\n", - " 'woman cooks tasty meal .',\n", - " 'man prepares meal .',\n", - " 'skillful woman debugs program .']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_data[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Targets are represented as 2-dimensional arrays:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_labels[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating and parameterising diagrams" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The first step is to convert the sentences into :term:`string diagrams `." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "reader = BobcatParser(verbose='text')\n", - "\n", - "raw_train_diagrams = reader.sentences2diagrams(train_data)\n", - "raw_dev_diagrams = reader.sentences2diagrams(dev_data)\n", - "raw_test_diagrams = reader.sentences2diagrams(test_data)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Simplify diagrams" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We simplify the diagrams by removing cups with :py:class:`~.RemoveCupsRewriter`; this reduces the number of :term:`post-selections ` in a diagram, allowing them to be evaluated more efficiently." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import RemoveCupsRewriter\n", - "\n", - "remove_cups = RemoveCupsRewriter()\n", - "\n", - "train_diagrams = [remove_cups(diagram) for diagram in raw_train_diagrams]\n", - "dev_diagrams = [remove_cups(diagram) for diagram in raw_dev_diagrams]\n", - "test_diagrams = [remove_cups(diagram) for diagram in raw_test_diagrams]" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can visualise these diagrams using :py:meth:`~lambeq.backend.grammar.Diagram.draw`." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "train_diagrams[0].draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In order to run the experiments on a quantum computer, we apply a quantum :term:`ansatz ` to the string diagrams. For this experiment, we will use an :py:class:`.IQPAnsatz`, where noun wires (``n``) and sentence wires (``s``) are represented by one-qubit systems." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0MAAAMzCAYAAABk4skuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC4AElEQVR4nOzde1zO9/8/8MfVSV1FoVQOCRmXUyqiyJIsp4zFDCGzjY01I7PNRuNjMxPmy7CPtozmsI0ktsmhJoeiNEyOQ5tdbFGmouPr94df18clhw7X1bur9+N+u3XT9T683s/3W8/r/X6+D6+3QgghQEREREREJDNGUgdAREREREQkBRZDREREREQkSyyGiIiIiIhIllgMERERERGRLLEYIiIiIiIiWWIxREREREREssRiiIiIiIiIZInFEBERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGCIiIiIiIlliMURERERERLLEYoiIiIiIiGSJxRAREREREckSiyEiIiIiIpIlFkNERERERCRLLIaIiIiIiEiWWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQERERERHJEoshIiIiIiKSJRZDREREREQkSyyGiIiIiIhIllgMERERERGRLLEYIiIiIiIiWWIxREREREREssRiiIiIiIiIZInFEBERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGCIiIiIiIlliMURERERERLLEYoiIiIiIiGSJxRAREREREckSiyEiIiIiIpIlFkNERERERCRLLIaIiIiIiEiWWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQERERERHJEoshIiIiIiKSJRZDREREREQkSyyGiIiIiIhIllgMERERERGRLLEYIiIiIiIiWWIxREREREREssRiiIiIiIiIZInFEBERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGCIiIiIiIlliMURERERERLLEYoiIiIiIiGSJxRAREREREckSiyEiIiIiIpIlFkNERERERCRLLIaIiIiIiEiWWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQ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jfHtt99qukt+3C1zZcOHDh2K6Ojocg+5kzzxO792mTBhAn755RecOXMGrq6uMDMzQ7169RAcHIzevXtj6tSplW4zMDBQ523qW2ZmJt5//33NKz2ISFoG1ZucLpS9p0FKAwcOfOyL1vLy8sr1xFPm/fff13qB36OUvWvpUX788ccK3S4wfPjwGrnXnKgiLCws8P3332PTpk1YsWIFjh07Vm4aDw8PvPXWW3jppZdYCJGW2vCdL5XMzEx06NDhkePKunR+XPfbZ86c0boFUFe6dOmC77//HsXFxbhx4wbq1atX7Y569NHm40RHR2veUfWwli1b4rfffntqG2WdXxBR7SC7Yqg2WLduneYh34dZWFg8dlyjRo2e2nZ6evpjx5X1vkNkaIyNjREcHIzg4GCkp6dj8uTJuHnzJt555x14enqyswSqEF9fX52/hqBMSEgIQkJC9NJ2VTVt2vSJ+4SnzatPJiYmOt8n6aPNhw0dOvSx7y97uLtuIjIMLIYkoM8va55torqua9eucHFxgaWlJd8jRPQEJiYm3CfoWP369VG/fn2pwyAiHZLVM0NERERERERlWAwREREREZEssRgiIiIiIiJZYjFERERERESyxGKIiIiIiIhkicUQERERERHJEoshIiIiIiKSJYN+z1BGRobUIdQp3J5kKOrXr4979+5JHQZRhfH7Vbe4PYlIVwyyGLK1tYVSqURwcLDUodQ5SqUStra2UodB9ER37txBdna21GEQPRX3V/rD/RUR6YJBFkNOTk7IyMhAVlaW1KE81dKlS3Ho0CH88MMPUodSIba2tnBycpI6DCKiOsGQ9leTJ0+Gra0tFi5cKHUoFcL9FRHpgkEWQ8D9HYwhfAna29vD3Nwc7u7uUodCREQSMJT9Vf369dGoUSPur4hIVtiBAhERERERyRKLISIiIiIikiUWQ0REREREJEsshoiIiIiISJZYDBERERERkSyxGKpDrly5AoVCgfT09MdOk5CQAIVCgZycnBqLi8iQMa+IdI95RUS1BYshmfH29oZarYa1tTUAICoqCjY2NtIGRWTgmFdEuse8IqKaYLDvGaKqMTMzg4ODg9RhENUpzCsi3WNeEVFN4JWhWiQvLw/jx4+HlZUVHB0dERERAV9fX0yfPh0AoFAoEBMTozWPjY0NoqKitIadPXsW3t7eMDc3R6dOnZCYmKgZ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oYMuXLigNWvWKCQk5K70+/PPP6tLly7av3+/oqKicjy8IuAM7Ha7OnfuLA8PD23YsEGPPPLIXen3+++/V8eOHfXjjz/qk08+UcuWLe9Kv4AzCA8Pl7+/v6Kjo80uBbil/fv3q0GDBtq3b58SExO1bt06bd261eyy8iw2NlZhYWG5vpQ8r/76vtavX/+2yx86dEjh4eE6evSoU19dwWVytxEQECC73a6aNWsqLCzsrhwkDh06pKCgIKWmpio2NpYghCInKChISUlJKl26tIKDg7MuJShICQkJCgwM1KVLl5SYmEgQAoAi4LnnnlPTpk114cIFs0vJs5CQkGz3JhV2DodDH3zwgVMHIYkwlCM+Pj6KiYlRjx49FBkZqVdeeSXfRun4uy1btig4OFilS5dWUlKSgoKCCqQfwGyVKlVSXFycmjdvrvbt2+udd94psG/DoqOjFRYWppo1a8put2ddKw4AcG7FihXT+PHjVapUKbNLyTM3N7dsI6NGR0dnG477rz85uaJi0KBB/7j+zeaFhoZKkt54440c1duiRQu1bt06dxtbiBQzuwBnUaJECS1btkwBAQF66aWXdOTIEUVFReXb0+kNw9C7776r4cOHq3379oqOji4SOzZwK6VKldJnn32msWPH6oUXXlBKSormzZt3wzChuZWZmanJkyfrtddeU9++fbVo0SKVKFEiX9oGAKAgderU6R+/FM/JcXLKlCkaNWrUTeeVLl36hnmHDh1SRERE1vOZrIIwdAdsNpvGjBmj6tWrKzIyUs2bN9fatWvl7++fp3avXr2qF198UQsXLtTIkSM1ffr0bKOUAEWZq6urZs6cqZo1a2rw4MH69ttv9fHHH6tMmTJ5avfSpUvq27evPvnkE02bNk1jxozhAcUAAKdRqlSpPH0xXr58+WzDi99s/l9dHz25bNmyue7TGXGZXC506dJFcXFx+t///V8FBgYqOTk51239+uuvat++vZYsWaIlS5Zo5syZBCFY0jPPPKNt27Zp7969Cg4OzvaE8DvlcDjUvHlzbdy4UatXr9bYsWMJQgAA4AaEoVyqV6+ekpKS5Ovrq9DQUK1bt+6O20hNTVVwcLD27t2rbdu26ZlnnimASgHnERYWJrvdrszMTAUFBenLL7+84zaSk5MVGBiokydPateuXerSpUsBVAoAAIoCwlAeVKhQQV9++aXa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JRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFgSYQgAAACAJRGGAAAAAFjS/wMjmnamoMZj7gAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import AtomicType, IQPAnsatz\n", - "\n", - "ansatz = IQPAnsatz({AtomicType.NOUN: 1, AtomicType.SENTENCE: 1},\n", - " n_layers=1, n_single_qubit_params=3)\n", - "\n", - "train_circuits = [ansatz(diagram) for diagram in train_diagrams]\n", - "dev_circuits = [ansatz(diagram) for diagram in dev_diagrams]\n", - "test_circuits = [ansatz(diagram) for diagram in test_diagrams]\n", - "\n", - "train_circuits[0].draw(figsize=(8, 8))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training\n", - "### Instantiate model" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We instantiate a :py:class:`.PennyLaneModel`, by passing all diagrams to the class method :py:meth:`.PennyLaneModel.from_diagrams`. \n", - "\n", - "We also set `probabilities=True` so that the model outputs probabilities, rather than quantum states, which follows the behaviour of real quantum computers. \n", - "\n", - "Furthermore, we set `normalize=True` so that the output probabilities sum to one. This helps to prevent passing very small values to any following layers in a hybrid model." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PennyLaneModel\n", - "\n", - "all_circuits = train_circuits + dev_circuits + test_circuits\n", - "\n", - "# if no backend_config is provided, the default is used, which is the same as below\n", - "backend_config = {'backend': 'default.qubit'} # this is the default PennyLane simulator\n", - "model = PennyLaneModel.from_diagrams(all_circuits,\n", - " probabilities=True,\n", - " normalize=True,\n", - " backend_config=backend_config)\n", - "model.initialise_weights()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Running on a real quantum computer" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can choose to run the model on a real quantum computer, using :term:`Qiskit` with IBMQ, or the Honeywell QAPI.\n", - "\n", - "To use IBM devices we have to save our IBMQ API token to the :term:`PennyLane` configuration file, as in the cell below." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "import pennylane as qml\n", - "\n", - "qml.default_config['qiskit.ibmq.ibmqx_token'] = 'my_API_token'\n", - "qml.default_config.save(qml.default_config.path)\n", - "backend_config = {'backend': 'qiskit.ibmq',\n", - " 'device': 'ibmq_manila',\n", - " 'shots': 1000}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "if TESTING:\n", - " backend_config = None" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "q_model = PennyLaneModel.from_diagrams(all_circuits,\n", - " probabilities=True,\n", - " normalize=True,\n", - " backend_config=backend_config)\n", - "q_model.initialise_weights()" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To use Honeywell/Quantinuum devices we have to pass the email address of an account with access to the Honeywell/Quantinuum QAPI to the :term:`PennyLane` configuration file.\n", - "\n", - "The first time you run a circuit on a Honeywell device, you will be prompted to enter your password. \n", - "\n", - "You can then run circuits without entering your password again for 30 days." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "qml.default_config['honeywell.global.user_email'] = ('my_Honeywell/Quantinuum_'\n", - " 'account_email')\n", - "qml.default_config.save(qml.default_config.path)\n", - "\n", - "backend_config = {'backend': 'honeywell.hqs',\n", - " 'device': 'H1-1E',\n", - " 'shots': 1000}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "if TESTING:\n", - " backend_config = None" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "h_model = PennyLaneModel.from_diagrams(all_circuits,\n", - " probabilities=True,\n", - " normalize=True,\n", - " backend_config=backend_config)\n", - "h_model.initialise_weights()" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Running these models on a real quantum computer takes a significant amount of time as the circuits must be sent to the backend and queued, so in the remainder of this tutorial we will use `model`, which uses the default :term:`PennyLane` simulator, 'default.qubit'." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create datasets" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To facilitate data shuffling and batching, ``lambeq`` provides a native :py:class:`.Dataset` class. Shuffling is enabled by default, and if not specified, the batch size is set to the length of the dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "val_dataset = Dataset(dev_circuits, dev_labels)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Training can either by done using the :py:class:`.PytorchTrainer`, or by using native PyTorch. We give examples of both in the following section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define loss and evaluation metric" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "When using :py:class:`.PytorchTrainer` we first define our evaluation metrics and loss function, which in this case will be the accuracy and the mean-squared error, respectively." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "def acc(y_hat, y):\n", - " return (torch.argmax(y_hat, dim=1) ==\n", - " torch.argmax(y, dim=1)).sum().item()/len(y)\n", - "\n", - "def loss(y_hat, y):\n", - " return torch.nn.functional.mse_loss(y_hat, y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialise trainer" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "As :term:`PennyLane` is compatible with PyTorch autograd, :py:class:`.PytorchTrainer` can automatically use many of the PyTorch optimizers, such as Adam to train our model." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import PytorchTrainer\n", - "\n", - "trainer = PytorchTrainer(\n", - " model=model,\n", - " loss_function=loss,\n", - " optimizer=torch.optim.Adam,\n", - " learning_rate=LEARNING_RATE,\n", - " epochs=EPOCHS,\n", - " evaluate_functions={'acc': acc},\n", - " evaluate_on_train=True,\n", - " use_tensorboard=False,\n", - " verbose='text',\n", - " seed=SEED)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can now pass the datasets to the :py:meth:`~lambeq.Trainer.fit` method of the trainer to start the training." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 1: train/loss: 0.1207 valid/loss: 0.0919 train/time: 0.71s valid/time: 0.16s train/acc: 0.7857 valid/acc: 0.8667\n", - "Epoch 2: train/loss: 0.0486 valid/loss: 0.1035 train/time: 0.50s valid/time: 0.17s train/acc: 0.9286 valid/acc: 0.9000\n", - "Epoch 3: train/loss: 0.0364 valid/loss: 0.0621 train/time: 0.49s valid/time: 0.17s train/acc: 0.9429 valid/acc: 0.9333\n", - "Epoch 4: train/loss: 0.0466 valid/loss: 0.0392 train/time: 0.62s valid/time: 0.18s train/acc: 0.9857 valid/acc: 1.0000\n", - "Epoch 5: train/loss: 0.0120 valid/loss: 0.0126 train/time: 0.49s valid/time: 0.18s train/acc: 0.9857 valid/acc: 1.0000\n", - "Epoch 6: train/loss: 0.0014 valid/loss: 0.0178 train/time: 0.49s valid/time: 0.17s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 7: train/loss: 0.0022 valid/loss: 0.0079 train/time: 0.60s valid/time: 0.17s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 8: train/loss: 0.0041 valid/loss: 0.0061 train/time: 0.48s valid/time: 0.17s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 9: train/loss: 0.0003 valid/loss: 0.0108 train/time: 0.47s valid/time: 0.17s train/acc: 1.0000 valid/acc: 1.0000\n", - "Epoch 10: train/loss: 0.0001 valid/loss: 0.0205 train/time: 0.60s valid/time: 0.17s train/acc: 1.0000 valid/acc: 0.9667\n", - "Epoch 11: train/loss: 0.0001 valid/loss: 0.0281 train/time: 0.50s valid/time: 0.16s train/acc: 1.0000 valid/acc: 0.9667\n", - "Epoch 12: train/loss: 0.0005 valid/loss: 0.0309 train/time: 0.54s valid/time: 0.22s train/acc: 1.0000 valid/acc: 0.9667\n", - "Epoch 13: train/loss: 0.0004 valid/loss: 0.0314 train/time: 0.57s valid/time: 0.18s train/acc: 1.0000 valid/acc: 0.9667\n", - "Epoch 14: train/loss: 0.0004 valid/loss: 0.0308 train/time: 0.52s valid/time: 0.17s train/acc: 1.0000 valid/acc: 0.9667\n", - "Epoch 15: train/loss: 0.0011 valid/loss: 0.0286 train/time: 0.47s valid/time: 0.17s train/acc: 1.0000 valid/acc: 0.9667\n", - "\n", - "Training completed!\n", - "train/time: 8.06s train/time_per_epoch: 0.54s train/time_per_step: 0.08s valid/time: 2.60s valid/time_per_eval: 0.17s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, val_dataset)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Results\n", - "\n", - "Finally, we visualise the results and evaluate the model on the test data." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final test accuracy: 0.9666666666666667\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAIjCAYAAAD80aFnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACWZ0lEQVR4nOzdd3gU1dvG8e9ueg+QRiASmtIJUkIRRUUDKIqgNBVEXqyAGCtIE0tUikhRLD8FC4oooqKiVJUiSFcpgnRCAgGSQEjfef8IrEQSCCGbySb357r2YvfsmZlnRpzDs3PmGYthGAYiIiIiIiLiUFazAxAREREREakIlHyJiIiIiIiUAiVfIiIiIiIipUDJl4iIiIiISClQ8iUiIiIiIlIKlHyJiIiIiIiUAiVfIiIiIiIipUDJl4iIiIiISClQ8iUiIiIiIlIKlHyJlHH33XcfkZGRxVp27NixWCyWkg1IREQqjL1792KxWJg5c6bZoYiUC0q+RIrJYrEU6bV8+XKzQ3V6s2fPZvLkyWaHISJSImbOnJlvnPD09CQ8PJyYmBimTJnCyZMnzQ5RgJdffpn58+eX+nbj4+MZO3YsmzZtKvVti+NZDMMwzA5CxBl9/PHH+T5/+OGHLFq0iI8++ihf+0033URoaGixt5OdnY3NZsPDw+OSl83JySEnJwdPT89ib78suPXWW/nzzz/Zu3ev2aGIiFy2mTNnMmDAAMaNG0fNmjXJzs4mISGB5cuXs2jRIq644gq++eYbmjRpYnao7N27l5o1a/LBBx9w3333mR1OqfL19eXOO+8s9at+69ato2XLlhXymFcErmYHIOKs7rnnnnyff/vtNxYtWnRe+3+dPn0ab2/vIm/Hzc2tWPEBuLq64uqq/81FRMqizp0706JFC/vn4cOHs3TpUm699VZuu+02tm3bhpeXl4kRikhJ07RDEQfq0KEDjRo1Yv369Vx77bV4e3szYsQIAL7++mtuueUWwsPD8fDwoHbt2rzwwgvk5ubmW8d/7/k6O/9+woQJvPPOO9SuXRsPDw9atmzJ77//nm/Zgu75slgsDB48mPnz59OoUSM8PDxo2LAhCxcuPC/+5cuX06JFCzw9PalduzZvv/12ke8j27lzJz169CAsLAxPT0+qV69O7969SUlJydfv448/pnnz5nh5eVG5cmV69+7NgQMH8h3D7777jn379tmn6BT3HjgRkbLuhhtuYNSoUezbt++8GRbbt2/nzjvvpHLlynh6etKiRQu++eYb+/fr1q3DYrEwa9as89b7448/YrFYWLBggb3t0KFD3H///YSGhtrHgvfff79IcS5dupT27dvj4+NDYGAgt99+O9u2bcvX5+x4sX37dnr27Im/vz9VqlThscceIyMjI1/fs2PT3LlzadCgAV5eXrRp04Y//vgDgLfffps6derg6elJhw4dCpwJsWbNGjp16kRAQADe3t5cd911rFy5ssCYdu3axX333UdgYCABAQEMGDCA06dP54snLS2NWbNm2ceei12Fmjp1Kg0bNsTb25tKlSrRokULZs+ena/PxY758uXLadmyJQADBgywb1v33JUf+klcxMGOHTtG586d6d27N/fcc499CuLMmTPx9fUlNjYWX19fli5dyujRo0lNTWX8+PEXXe/s2bM5efIkDz74IBaLhddee43u3buze/fui14tW7FiBfPmzeORRx7Bz8+PKVOm0KNHD/bv30+VKlUA2LhxI506daJq1ao8//zz5ObmMm7cOIKDgy8aW1ZWFjExMWRmZjJkyBDCwsI4dOgQCxYsIDk5mYCAAABeeuklRo0aRc+ePfm///s/jh49ytSpU7n22mvZuHEjgYGBPPfcc6SkpHDw4EFef/11IG8qiIhIeXXvvfcyYsQIfvrpJwYNGgTAX3/9Rbt27ahWrRrPPvssPj4+fP7553Tr1o0vv/ySO+64gxYtWlCrVi0+//xz+vfvn2+dc+bMoVKlSsTExACQmJhI69at7UlPcHAwP/zwAwMHDiQ1NZVhw4YVGt/ixYvp3LkztWrVYuzYsaSnpzN16lTatWvHhg0bzvuBrGfPnkRGRhIXF8dvv/3GlClTOHHiBB9++GG+fr/++ivffPMNjz76KABxcXHceuutPP3007z55ps88sgjnDhxgtdee43777+fpUuX2pddunQpnTt3pnnz5owZMwar1coHH3zADTfcwK+//kqrVq3Oi6lmzZrExcWxYcMG3nvvPUJCQnj11VcB+Oijj/i///s/WrVqxQMPPABA7dq1Cz0m7777LkOHDuXOO++0J5dbtmxhzZo19O3bt8jHvH79+owbN47Ro0fzwAMP0L59ewDatm1b6LbFyRgiUiIeffRR47//S1133XUGYMyYMeO8/qdPnz6v7cEHHzS8vb2NjIwMe1v//v2NGjVq2D/v2bPHAIwqVaoYx48ft7d//fXXBmB8++239rYxY8acFxNguLu7G7t27bK3bd682QCMqVOn2tu6du1qeHt7G4cOHbK37dy503B1dT1vnf+1ceNGAzDmzp1baJ+9e/caLi4uxksvvZSv/Y8//jBcXV3ztd9yyy35joGIiDP74IMPDMD4/fffC+0TEBBgNGvWzP75xhtvNBo3bpxvfLDZbEbbtm2NunXr2tuGDx9uuLm55RsfMjMzjcDAQOP++++3tw0cONCoWrWqkZSUlG+7vXv3NgICAuxj1Nkx54MPPrD3iYqKMkJCQoxjx47Z2zZv3mxYrVajX79+9razY9Btt92WbxuPPPKIARibN2+2twGGh4eHsWfPHnvb22+/bQBGWFiYkZqamm8fAXtfm81m1K1b14iJiTFsNpu93+nTp42aNWsaN91003kxnXssDMMw7rjjDqNKlSr52nx8fIz+/fsbRXH77bcbDRs2vGCfoh7z33///bxjLuWHph2KOJiHhwcDBgw4r/3cefwnT54kKSmJ9u3bc/r0abZv337R9fbq1YtKlSrZP5/9dWz37t0XXbZjx475fsFr0qQJ/v7+9mVzc3NZvHgx3bp1Izw83N6vTp06dO7c+aLrP3tl68cff8w3jeNc8+bNw2az0bNnT5KSkuyvsLAw6taty7Jlyy66HRGR8srX19de9fD48eMsXbqUnj172seLpKQkjh07RkxMDDt37uTQoUNA3tiQnZ3NvHnz7Ov66aefSE5OplevXgAYhsGXX35J165dMQwj3zk4JiaGlJQUNmzYUGBchw8fZtOmTdx3331UrlzZ3t6kSRNuuukmvv/++/OWOXsl66whQ4YAnNf3xhtvzHfVLDo6GoAePXrg5+d3XvvZMWvTpk3s3LmTvn37cuzYMfu+pKWlceONN/LLL79gs9nybeuhhx7K97l9+/YcO3aM1NTUAvf7YgIDAzl48OB50//PupxjLuWLph2KOFi1atVwd3c/r/2vv/5i5MiRLF269LyT/X/viyrIFVdcke/z2UTsxIkTl7zs2eXPLnvkyBHS09OpU6fOef0KavuvmjVrEhsby6RJk/jkk09o3749t912G/fcc489Mdu5cyeGYVC3bt0C13E5hUZERJzdqVOnCAkJAWDXrl0YhsGoUaMYNWpU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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "fig, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2,\n", - " sharex=True,\n", - " sharey='row',\n", - " figsize=(10, 6))\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Iterations')\n", - "ax_br.set_xlabel('Iterations')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, trainer.epochs+1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "# print test accuracy\n", - "pred = model(test_circuits)\n", - "labels = torch.tensor(test_labels)\n", - "\n", - "print('Final test accuracy: {}'.format(acc(pred, labels)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Using standard PyTorch\n", - "\n", - "As we have a small dataset, we can use early stopping to prevent overfitting to the training data. In this case, we evaluate the performance of the model on the validation dataset every 5 epochs, and save a checkpoint if the validation accuracy has improved. If it does not improve for 10 epochs, we end the training, and load the model with the best validation accuracy." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "def accuracy(circs, labels):\n", - " probs = model(circs)\n", - " return (torch.argmax(probs, dim=1) ==\n", - " torch.argmax(torch.tensor(labels), dim=1)).sum().item()/len(circs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Training is the same as standard PyTorch. We initialize an optimizer, pass it the model parameters, and then run a training loop in which we compute the loss, run a backwards pass to compute the gradients, and then take an optimizer step." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch: 0\n", - "Train loss: 1.835998997092247\n", - "Dev acc: 0.5333333333333333\n", - "Epoch: 5\n", - "Train loss: 0.19097438035532832\n", - "Dev acc: 0.9\n", - "Epoch: 10\n", - "Train loss: 0.05956625810358673\n", - "Dev acc: 0.9666666666666667\n" - ] - } - ], - "source": [ - "model = PennyLaneModel.from_diagrams(all_circuits)\n", - "model.initialise_weights()\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)\n", - "\n", - "best = {'acc': 0, 'epoch': 0}\n", - "\n", - "for i in range(EPOCHS):\n", - " epoch_loss = 0\n", - " for circuits, labels in train_dataset:\n", - " optimizer.zero_grad()\n", - " probs = model(circuits)\n", - " loss = torch.nn.functional.mse_loss(probs,\n", - " torch.tensor(labels))\n", - " epoch_loss += loss.item()\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " if i % 5 == 0:\n", - " dev_acc = accuracy(dev_circuits, dev_labels)\n", - "\n", - " print('Epoch: {}'.format(i))\n", - " print('Train loss: {}'.format(epoch_loss))\n", - " print('Dev acc: {}'.format(dev_acc))\n", - "\n", - " if dev_acc > best['acc']:\n", - " best['acc'] = dev_acc\n", - " best['epoch'] = i\n", - " model.save('model.lt')\n", - " elif i - best['epoch'] >= 10:\n", - " print('Early stopping')\n", - " break\n", - "\n", - "if best['acc'] > accuracy(dev_circuits, dev_labels):\n", - " model.load('model.lt')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Evaluate test accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final test accuracy: 0.9\n" - ] - } - ], - "source": [ - "print('Final test accuracy: {}'.format(accuracy(test_circuits, test_labels)))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/markdown" - }, - "source": [ - "## Hybrid models" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "This model determines whether a pair of diagrams are about the same or different topics.\n", - "\n", - "It does this by first running the pair circuits to get a probability output for each, and then concatenating them together and passing them to a simple neural network.\n", - "\n", - "We expect the circuits to learn to output [0, 1] or [1, 0] depending on the topic they are referring to (cooking or computing), and the neural network to learn the XOR function to determine whether the topics are the same (output 0) or different (output 1).\n", - "\n", - ":term:`PennyLane` allows us to train both the circuits and the NN simultaneously using PyTorch autograd." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "BATCH_SIZE = 50\n", - "EPOCHS = 100\n", - "LEARNING_RATE = 0.1\n", - "SEED = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As the probability outputs from our circuits are guaranteed to be positive, we transform these outputs `x` by `2 * (x - 0.5)`, giving inputs to the neural network in the range [-1, 1]. \n", - "\n", - "This helps us to avoid \"dying ReLUs\", which could otherwise occur if all the input weights to a given hidden neuron were negative; in this case, the overall input to the neuron would be negative, and ReLU would set the output of it to 0, leading to the gradient of all these weights being 0 for all samples, causing the neuron to never learn. \n", - "\n", - "(A couple of alternative approaches could also involve initialising all the neural network weights to be positive, or using `LeakyReLU` as the activation function)." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "from torch import nn\n", - "\n", - "class XORSentenceModel(PennyLaneModel):\n", - " def __init__(self, **kwargs):\n", - " PennyLaneModel.__init__(self, **kwargs)\n", - "\n", - " self.xor_net = nn.Sequential(nn.Linear(4, 10),\n", - " nn.ReLU(),\n", - " nn.Linear(10, 1),\n", - " nn.Sigmoid())\n", - "\n", - " def forward(self, diagram_pairs):\n", - " first_d, second_d = zip(*diagram_pairs)\n", - " evaluated_pairs = torch.cat((self.get_diagram_output(first_d),\n", - " self.get_diagram_output(second_d)),\n", - " dim=1)\n", - " evaluated_pairs = 2 * (evaluated_pairs - 0.5)\n", - " return self.xor_net(evaluated_pairs)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Make paired dataset\n", - "\n", - "Our model is going to determine whether a given pair of sentences are talking about different topics, so we need to construct a dataset of pairs of diagrams for the train, dev, and test data." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations\n", - "\n", - "def make_pair_data(diagrams, labels):\n", - " pair_diags = list(combinations(diagrams, 2))\n", - " pair_labels = [int(x[0] == y[0]) for x, y in combinations(labels, 2)]\n", - " return pair_diags, pair_labels\n", - "\n", - "train_pair_circuits, train_pair_labels = make_pair_data(train_circuits,\n", - " train_labels)\n", - "dev_pair_circuits, dev_pair_labels = make_pair_data(dev_circuits,\n", - " dev_labels)\n", - "test_pair_circuits, test_pair_labels = make_pair_data(test_circuits,\n", - " test_labels)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "There are lots of pairs (2415 train pairs), so we'll sample a subset to make this example train more quickly." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "TRAIN_SAMPLES, DEV_SAMPLES, TEST_SAMPLES = 300, 200, 200" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "if TESTING:\n", - " TRAIN_SAMPLES, DEV_SAMPLES, TEST_SAMPLES = 1, 1, 1" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "train_pair_circuits, train_pair_labels = (\n", - " zip(*random.sample(list(zip(train_pair_circuits, train_pair_labels)), \n", - " TRAIN_SAMPLES)))\n", - "dev_pair_circuits, dev_pair_labels = (\n", - " zip(*random.sample(list(zip(dev_pair_circuits, dev_pair_labels)), DEV_SAMPLES)))\n", - "test_pair_circuits, test_pair_labels = (\n", - " zip(*random.sample(list(zip(test_pair_circuits, test_pair_labels)), TEST_SAMPLES)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialise model" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "As :py:class:`XORSentenceModel` inherits from :py:class:`.PennyLaneModel`, we can again pass in `probabilities=True` and `normalize=True` to :py:meth:`~XORSentenceModel.from_diagrams`." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "all_pair_circuits = (train_pair_circuits +\n", - " dev_pair_circuits +\n", - " test_pair_circuits)\n", - "a, b = zip(*all_pair_circuits)\n", - "\n", - "model = XORSentenceModel.from_diagrams(a + b)\n", - "model.initialise_weights()\n", - "model = model\n", - "\n", - "train_pair_dataset = Dataset(train_pair_circuits,\n", - " train_pair_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train and log accuracies\n", - "\n", - "We train the model using pure PyTorch in the exact same way as above." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "def accuracy(circs, labels):\n", - " predicted = model(circs)\n", - " return (torch.round(torch.flatten(predicted)) ==\n", - " torch.Tensor(labels)).sum().item()/len(circs)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch: 0\n", - "Train loss: 4.291878283023834\n", - "Dev acc: 0.53\n", - "Epoch: 5\n", - "Train loss: 3.321199357509613\n", - "Dev acc: 0.55\n", - "Epoch: 10\n", - "Train loss: 0.38510115444660187\n", - "Dev acc: 0.955\n", - "Epoch: 15\n", - "Train loss: 0.9513051249086857\n", - "Dev acc: 0.77\n", - "Epoch: 20\n", - "Train loss: 4.628978729248047\n", - "Dev acc: 0.525\n", - "Early stopping\n" - ] - } - ], - "source": [ - "best = {'acc': 0, 'epoch': 0}\n", - "\n", - "for i in range(EPOCHS):\n", - " epoch_loss = 0\n", - " for circuits, labels in train_pair_dataset:\n", - " optimizer.zero_grad()\n", - " predicted = model(circuits)\n", - " loss = torch.nn.functional.binary_cross_entropy(\n", - " torch.flatten(predicted), torch.Tensor(labels))\n", - " epoch_loss += loss.item()\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " if i % 5 == 0:\n", - " dev_acc = accuracy(dev_pair_circuits, dev_pair_labels)\n", - "\n", - " print('Epoch: {}'.format(i))\n", - " print('Train loss: {}'.format(epoch_loss))\n", - " print('Dev acc: {}'.format(dev_acc))\n", - "\n", - " if dev_acc > best['acc']:\n", - " best['acc'] = dev_acc\n", - " best['epoch'] = i\n", - " model.save('xor_model.lt')\n", - " elif i - best['epoch'] >= 10:\n", - " print('Early stopping')\n", - " break\n", - "\n", - "if best['acc'] > accuracy(dev_pair_circuits, dev_pair_labels):\n", - " model.load('xor_model.lt')\n", - " model = model" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final test accuracy: 0.945\n" - ] - } - ], - "source": [ - "print('Final test accuracy: {}'.format(accuracy(test_pair_circuits,\n", - " test_pair_labels)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Analysing the internal representations of the model\n", - "\n", - "We hypothesised that the quantum circuits would be able to separate the representations of sentences about food and cooking, and that the classical NN would learn to XOR these representations to give the model output. Here we can look at parts of the model separately to determine whether this hypothesis was accurate.\n", - "\n", - "First, we can look at the output of the NN when given the 4 possible binary inputs to XOR." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.9993979 ],\n", - " [0.65196735],\n", - " [0.00569755],\n", - " [0.1350544 ]], dtype=float32)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xor_labels = [[1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 0, 1], [0, 1, 1, 0]]\n", - "# the first two entries correspond to the same label for both sentences, the last two to different labels\n", - "xor_tensors = torch.tensor(xor_labels).float()\n", - "\n", - "model.xor_net(xor_tensors).detach().numpy()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that in the case that the labels are the same, the outputs are significantly greater than 0.5, and in the case that the labels are different, the outputs are significantly less than 0.5, and so the NN seems to have learned the XOR function.\n", - "\n", - "We can also look at the outputs of some of the test circuits to determine whether they have been able to seperate the two classes of sentences." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "FOOD_IDX, IT_IDX = 0, 6\n", - "symbol_weight_map = dict(zip(model.symbols, model.weights))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "if TESTING: \n", - " FOOD_IDX, IT_IDX = 0, 0" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "woman prepares tasty dinner .\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0.42397027, 0.57602973])" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(test_data[FOOD_IDX])\n", - "\n", - "p_circ = test_circuits[FOOD_IDX].to_pennylane(probabilities=True)\n", - "p_circ.initialise_concrete_params(symbol_weight_map)\n", - "unnorm = p_circ.eval().detach().numpy()\n", - "\n", - "unnorm / np.sum(unnorm)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "skillful person runs software .\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0.95847886, 0.04152114])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(test_data[IT_IDX])\n", - "\n", - "p_circ = test_circuits[IT_IDX].to_pennylane(probabilities=True)\n", - "p_circ.initialise_concrete_params(symbol_weight_map)\n", - "unnorm = p_circ.eval().detach().numpy()\n", - "\n", - "unnorm / np.sum(unnorm)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "From these examples, it seems that the circuits are able to strongly differentiate between the two topics, assigning approximately [0, 1] to the sentence about food, and [1, 0] to the sentence about computing." - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. rubric:: See also:\n", - "\n", - "- `Training: Classical case <./trainer-classical.ipynb>`_\n", - "- `Training: Quantum case <./trainer-quantum.ipynb>`_\n", - "- `Advanced: Manual training <../manual-training.rst>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/trainer-quantum.ipynb b/docs/tutorials/trainer-quantum.ipynb deleted file mode 100644 index bb55432b..00000000 --- a/docs/tutorials/trainer-quantum.ipynb +++ /dev/null @@ -1,683 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training: Quantum case" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this tutorial we will train a ``lambeq`` :term:`model` to solve the relative pronoun classification task presented in [Lea2021]_. The goal is to predict whether a noun phrase contains a subject-based or an object-based relative clause. The entries of this dataset are extracted from the `RelPron` dataset [Rea2016]_.\n", - "\n", - "We will use an :py:class:`.IQPAnsatz` to convert :term:`string diagrams ` into :term:`quantum circuits `. The pipeline uses :term:`tket` as a backend.\n", - "\n", - "If you have already gone through the `classical training tutorial <./trainer-classical.ipynb>`_, you will see that there are only minor differences for the quantum case.\n", - "\n", - ":download:`Download code <../_code/trainer-quantum.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preparation\n", - "\n", - "We start with importing NumPy and specifying some training hyperparameters." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import warnings\n", - "\n", - "warnings.filterwarnings('ignore')\n", - "os.environ['TOKENIZERS_PARALLELISM'] = 'true'" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " We disable warnings to filter out issues with the `tqdm` package used in jupyter notebooks. Furthermore, we have to specify whether we want to use parallel computation for the tokenizer used by the :py:class:`.BobcatParser`. None of the above impairs the performance of the code." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "BATCH_SIZE = 10\n", - "EPOCHS = 100\n", - "SEED = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Input data\n", - "\n", - "Let's read the data and print some example sentences." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def read_data(filename):\n", - " labels, sentences = [], []\n", - " with open(filename) as f:\n", - " for line in f:\n", - " t = int(line[0])\n", - " labels.append([t, 1-t])\n", - " sentences.append(line[1:].strip())\n", - " return labels, sentences\n", - "\n", - "\n", - "train_labels, train_data = read_data('../examples/datasets/rp_train_data.txt')\n", - "val_labels, val_data = read_data('../examples/datasets/rp_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_labels, train_data = train_labels[:2], train_data[:2]\n", - " val_labels, val_data = val_labels[:2], val_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['organization that church establish .',\n", - " 'organization that team join .',\n", - " 'organization that company sell .',\n", - " 'organization that soldier serve .',\n", - " 'organization that sailor join .']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_data[:5]" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Targets are represented as 2-dimensional arrays:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[1, 0], [1, 0], [1, 0], [1, 0], [1, 0]]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_labels[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating and parameterising diagrams" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The first step is to convert sentences into :term:`string diagrams `.\n", - "\n", - ".. note::\n", - "\n", - " We know that the specific dataset only consists of noun phrases, hence, we reduce potential parsing errors by restricting the parser to only return parse trees with the root categories ``N`` (noun) and ``NP`` (noun phrase)." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n", - "Tagging sentences.\n", - "Parsing tagged sentences.\n", - "Turning parse trees to diagrams.\n" - ] - } - ], - "source": [ - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(root_cats=('NP', 'N'), verbose='text')\n", - "\n", - "raw_train_diagrams = parser.sentences2diagrams(train_data, suppress_exceptions=True)\n", - "raw_val_diagrams = parser.sentences2diagrams(val_data, suppress_exceptions=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Filter and simplify diagrams" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We simplify the diagrams by calling :py:meth:`~lambeq.backend.grammar.Diagram.normal_form` and filter out any diagrams that could not be parsed." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "train_diagrams = [\n", - " diagram.normal_form()\n", - " for diagram in raw_train_diagrams if diagram is not None\n", - "]\n", - "val_diagrams = [\n", - " diagram.normal_form()\n", - " for diagram in raw_val_diagrams if diagram is not None\n", - "]\n", - "\n", - "train_labels = [\n", - " label for (diagram, label)\n", - " in zip(raw_train_diagrams, train_labels)\n", - " if diagram is not None]\n", - "val_labels = [\n", - " label for (diagram, label)\n", - " in zip(raw_val_diagrams, val_labels)\n", - " if diagram is not None\n", - "]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see the form of the diagram for a relative clause on the subject of a sentence:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5cAAAIHCAYAAAALhKgSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAyElEQVR4nO3deViU9f7/8dewCir7rrniAqi5pOZR01zzGGWWmmVqrh2zsvXbqng87SdbPLmklnayMstKtCjtmFlZWtpuaa4VKqIibiAw9+8PL+bnCCj6Qe+BeT6ui0u4GYb3ONzzmeesDsuyLAEAAAAAYMDH7gEAAAAAAJUfcQkAAAAAMEZcAgAAAACMEZcAAAAAAGPEJQAAAADAGHEJAAAAADBGXAIAAAAAjBGXAAAAAABjxCUAAAAAwBhxCQAAAAAwRlwCAAAAAIwRlwAAAAAAY8QlAAAAAMAYcQkAAAAAMEZcAgAAAACMEZcAAAAAAGPEJQAAAADAGHEJAAAAADBGXAIAAAAAjBGXAAAAAABjxCUAAAAAwBhxCQAAAAAwRlwCAAAAAIwRlwAAAAAAY8QlAAAAAMAYcQkAAAAAMEZcAgAAAACMEZcAAAAAAGPEJQAAAADAGHEJAAAAADBGXAIAAAAAjBGXAAAAAABjxCUAAAAAwBhxCQAAAAAwRlwCAAAAAIwRlwAAAAAAY8QlAAAAAMAYcQkAAAAAMEZcAgAAAACMEZcAAAAAAGPEJQAAAADAGHEJAAAAADBGXAIAAAAAjBGXAAAAAABjxCUAAAAAwBhxCQAAAAAwRlwCAAAAAIwRlwAAAAAAY8QlAAAAAMCYn90DVKSdO3cqOzvb7jFKFRUVpTp16tg9xnnnyecBAHgKb1kTJM9eF7zlfPDk8wDACVXl8qjKxOXOnTuVlJSko0eP2j1KqYKDg7Vx48Yq8UdTFk8/DwDAU3jDmiB5/rrgDeeDp58HAE6oKpdHVSYus7OzdfToUb322mtKSkqyexw3Gzdu1JAhQ5SdnV3p/2BOx5PPAwDwFN6yJkievS54y/ngyecBgBOq0uVRlYnLYklJSWrdurXdY3g1zgMAwMlYF+zHeQDgQuAFfQAAAAAAxohLAAAAAIAx4hIAAAAAYIy4BAAAAAAYIy4BAAAAAMaISwAAAACAMeISAAAAAGCMuAQAAAAAGCMuAQAAAADGiEsAAAAAgDHiEgAAAABgjLgEAAAAABgjLgEAAAAAxojLU6SlpcnhcHjN7wUqO4fDofHjx9s9BoDTWLJkiRwOh7755hu7R3EZM2aM3SMA56xevXq68sorz3i4Tz/9VA6HQ59++qlr2/Dhw1WvXr2z+n3z5s3zuH0Ynom4vICOHTumtLQ0tx0cQPl8+eWXSktLU05Oznn9Pb/88ovS0tK0ffv28/p7AADe6UKtZ4AdiMtTPPzwwzp27Nh5Oe68vDxNnjy51Lg8n78XqAq+/PJLTZ48+YLE5eTJk4lLAMB5caHWs7LMnj1bv/32my2/G1WfR8XlkSNH7B5Bfn5+qlatmtf8XgAAqgpPuB4BeDp/f38FBgbaPQaqqPMWlxs2bFCfPn0UEhKiGjVqqHv37vrqq69c3y9+7PaqVas0btw4xcTEqHbt2q7vv/jii2rQoIGCgoLUrl07rV69Wl27dlXXrl1dhzl+/LgmTpyoNm3a6LLLLpMkjRw5UitXrnSbZfv27XI4HPr3v/+tl156SQ0bNlRgYKDatm2rdevWuR321Oc+Dh8+XA6Ho9SPtLS0EnOEhoaqevXq6ty5c4k5evToIUmaPHlyieMo7TmXhYWFmjJlimveevXq6cEHH1R+fr7b4Yofd//555+rXbt2qlatmho0aKBXX331TGcTUCmkpaXp3nvvlSTVr1/ftf+cfO/ie++9p2bNmikwMFApKSnKyMhwO44dO3Zo3LhxatKkiYKCghQZGakBAwa4Hce8efM0YMAASdLll1/u+j08lB04s7/++ksjR45UQkKCAgMDVb9+fT322GNuh8nPz9ddd92l6OhoVa9eXddcc4327t3rdpiT18aT1atXT8OHD3d9fabrER9++KG6dOmimjVrKiQkRG3bttXrr79e4ni3bt2qyy+/XMHBwapVq5aeeuops/8IVGl//fWXRowYodjYWNd68/LLL7sdZtq0aUpJSVFwcLDCw8N1ySWXuP72zrSevfLKK+rWrZtiYmIUGBio5ORkzZgxo8x5Pv74Y7Vs2VLVqlVTcnKyFi9efMbTUNpzLt988021adPGtb80b95czz//fImfLc8+DO/mdz6O9Oeff1bnzp0VEhKi++67T/7+/po1a5a6du2qVatWqX379q7Djhs3TtHR0Zo4caLrFscZM2Zo/Pjx6ty5s+68805t375d/fr1U3h4uNvCkZubqzlz5mjw4MHq3bu3Hn/8cR04cEC9e/fW2rVr1bJlS7e5Xn/9dR06dEhjx46Vw+HQU089pf79+2vr1q3y9/cv9bSMHTvWFYXFMjIytGDBAsXExJSYY/To0Tp06JDmzp3rmqPYAw88oMcff1zXXHON+vfvL0lq0aJFmf+Po0aN0vz583Xdddfp7rvv1tdff63HH39cGzdu1Lvvvut22N9//13XXXedRo4cqWHDhunll1/W8OHD1aZNG6WkpJT5O4DKoH///tq0aZPeeOMNPfvss4qKipIkRUdHS5I+//xzLV68WOPGjVPNmjX1wgsv6Nprr9XOnTsVGRkpSVq3bp2+/PJLXX/99apdu7a2b9+uGTNmqGvXrvrll18UHBysyy67TLfffrteeOEFPfjgg0pKSpIk178ASpeZmal27dopJydHY8aMUdOmTfXXX3/ptddeczvcbbfdpvDwcE2aNEnbt2/Xc889p/Hjx2vhwoXn/LtLux4xb948jRgxQikpKXrggQcUFhamDRs2KCMjQzfccIPbz48fP17XX3+9Bg4cqLffflv/93//p+bNm6tPnz7nPBOqpj179ujSSy91vZBcdHS0PvzwQ40cOVK5ubmaMGGCZs+erdtvv13XXXed7rjjDuXl5emHH37Q119/rRtuuOGM69mMGTOUkpKiq666Sn5+fkpPT9e4cePkdDp16623us2zefNmDRo0SLfccouGDRumV155RQMGDFBGRoZ69uxZ7tO1fPlyDR48WN27d9eTTz4pSdq4caO++OIL3XHHHW6HPR/7MKoY6zzo16+fFRAQYG3ZssW1LTMz06pZs6Z12WWXWZZlWa+88oolyerUqZNVWFjoOlx+fr4VGRlptW3b1iooKHBtnzdvniXJ6tKli2tbYWGhlZ+fb1mWZX377beWJOvTTz+1YmNjrREjRrgOt23bNkuSFRkZae3fv9+1/f3337ckWenp6a5tkyZNsk7337J582YrNDTU6tmzp2vuk+coduDAAdccxbOtWLHCkmRNmjSpxPGe+nu/++47S5I1atQot8Pdc889liTrf//7n2tb3bp1LUnWZ5995tqWlZVlBQYGWnfffXeZp6WiFZ/Ob7/99oL9TniPp59+2pJkbdu2zW27JCsgIMD6/fffXdu+//57S5I1bdo017ajR4+WOM41a9ZYkqxXX33VtW3RokWWJGvlypUVfhoAy6qal5VDhw61fHx8rHXr1rltLz6txWtcjx49LKfT6fr+nXfeafn6+lo5OTmubWWtk3Xr1rWGDRvm+rqs6xE5OTlWzZo1rfbt21vHjh1zO46Tf3ebNm0sSdY///lP17b8/HwrLi7Ouvbaa8/6/8BTVcW/N7uMHDnSio+Pt7Kzs922X3/99VZoaKh19OhR6+qrr7ZSUlJOezxlrWeWVfpa1bt3b6tBgwZu24qv+73zzjuubQcPHrTi4+OtVq1aubatXLmyxJo2bNgwq27duq6v77jjDiskJMRtPzpV8f5Wnn0YZ68q7acV/rDYoqIiffzxx+rXr58aNGjg2h4fH68bbrhBn3/+uXJzc13bR48eLV9fX9fX33zzjfbt26fRo0fLz+//37F64403Kjw83O13+fr6KiAgQJLkdDolnXgo6SWXXKL169eXmG3QoEFux9G5c2dJJx4SUx5HjhzRNddco/DwcL3xxhuuuU+dY//+/aedozw++OADSdJdd93ltv3uu++WJC1btsxte3Jysuv0SCduAWvSpEm5TxtQmfXo0UMNGzZ0fd2iRQuFhIS4/f0HBQW5Pi8oKNC+ffuUmJiosLCwc95PAZxY99577z2lpqbqkksuOe1hx4wZ4/YUkM6dO6uoqEg7duw4599/6vWI5cuX69ChQ7r//vtLvJZBaW/59fe//931eUBAgNq1a8faiRIsy9I777yj1NRUWZal7Oxs10fv3r118OBBrV+/XmFhYfrzzz9LPO2qvE5eqw4ePKjs7Gx16dJFW7du1cGDB90Om5CQoGuuucb1dUhIiIYOHaoNGzZo9+7d5f6dYWFhOnLkiJYvX37Gw56PfRhVS4XH5d69e3X06FE1adKkxPeSkpLkdDr1xx9/uLbVr1/f7TDFf5yJiYlu2/38/Ep9T5758+erRYsW6tChg6QTVzKXLVtWYgeUpDp16rh9XRyaBw4cKMcpO7GAbdmyRe+++67roXanzlGtWjVFRkYqOjq6zDnKY8eOHfLx8Snx/xAXF6ewsLASO/Gpp006cfrKe9qAyqw8f//Hjh3TxIkTddFFFykwMFBRUVGKjo5WTk7OOe+nAE6s+7m5uWrWrNkZD2u6Dpfm1OsRW7ZskaRyzSOVDE7WTpRm7969ysnJ0UsvvaTo6Gi3j5tvvlmSlJWVpf/7v/9TjRo11K5dOzVq1Ei33nqrvvjii3L/ni+++EI9evRQ9erVFRYWpujoaD344IOSVGKtSkxMLPH327hxY0k6q1c8HzdunBo3bqw+ffqodu3aGjFiRInXLSh2PvZhVC22v1rsybfQnK3XXntNw4cPV8OGDTVx4kRJ0vTp09WtWzfXPZknO/mWzZNZlnXG3/X888/rjTfe0OzZs0s8l/PkOebOnauMjAwtX768zDnORmm3spbG5LQBlV15/v5vu+02Pfrooxo4cKDeeustffzxx1q+fLkiIyON91MA5WOyVhUVFZW63eR6RFlYO3Gq4nViyJAhWr58eakfHTt2VFJSkn777Te9+eab6tSpk9555x116tRJkyZNOuPv2LJli7p3767s7GxNnTpVy5Yt0/Lly3XnnXe6zVDRYmJi9N1332nJkiW66qqrtHLlSvXp00fDhg0rcViub+JMKvwFfaKjoxUcHFzq++f8+uuv8vHx0UUXXVTmwwXq1q0r6cQL1Fx++eWu7YWFhdq+fbvbC+C8/fbbatCggRYvXqwNGzZo4sSJat++fYkXEDC1evVq3XPPPZowYYJuvPHGEt8/eY6TY/DUC5LyhqJ04v/B6XRq8+bNbi8msmfPHuXk5Lj+nwBvcTb7T2nefvttDRs2TM8884xrW15eXon3GTP9PYC3iY6OVkhIiH766acKOb7w8PAS++Xx48e1a9eucv188UPkf/rppxKP/gHOVXR0tGrWrKmioqISL/R4qurVq2vQoEEaNGiQjh8/rv79++vRRx/VAw88oGrVqpW5zqSnpys/P19Llixxu4fw1HcfKPb777/Lsiy349u0aZMklfpov9MJCAhQamqqUlNT5XQ6NW7cOM2aNUuPPPII+xHOSoXfc+nr66tevXrp/fffd7tLfs+ePXr99dfVqVMnhYSElPnzl1xyiSIjIzV79mwVFha6ti9YsKDEXe7Ft56cfGvJjz/+qDVr1lTQqZF27dqlgQMHqlOnTnr66adLPUxpc3z99dcl5ih+7kd53jS3+Dkgzz33nNv2qVOnSpL69u1brvmBqqJ69eqSyrf/lMbX17fELavTpk0rcW+I6e8BvI2Pj4/69eun9PR0ffPNN8bH17BhQ3322Wdu21566aUy77k8Va9evVSzZk09/vjjysvLc/se967gXPn6+uraa6/VO++8U+oNKcVvx7Fv3z63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vvjiC40fP1533323evXqpb/++svusQAAqNKOHDmiW265RVdddZUuvfRS/fjjj6pfv77dY3ks4hIAKolq1arpmWee0YoVK/Trr7+qefPmmjx5svbs2WP3aAAAVClHjhzRzJkz1aJFC/33v//VrFmz9P777ysmJsbu0TwacQkAlUz37t31ww8/aPDgwXrqqadUp04dDR8+XBs2bLB7NAAAKrWdO3fq//7v/3TRRRfp1ltvVatWrbR+/XqNGTNGDofD7vE8HnEJAJVQRESEXnzxRf3555/617/+pf/9739q3bq1unTporfeekuHDx+2e0QAACqFgoICffLJJxo4cKAaNGigWbNmacSIEdqyZYvefvtt3nLkLBCXAFCJhYeH695779XWrVu1aNEiFRUVadCgQYqMjFSfPn00ffp0/fHHH3aPCQCARzlw4IBef/11DR48WNHR0erRo4e+++47Pf/88/rzzz/173//W/Xq1bN7zErHYVmWZfcQADxTWlqa5syZoz///NPuUXAWtmzZovT0dC1ZskSrV69WYWGhWrZsqdTUVF111VVq3bo1r3IHAPAqlmXp999/V3p6utLT07V69WoVFRWpdevWSk1NVWpqqlq3bs1DXw0RlwDKRFxWfjk5OcrIyFB6ero++OAD5eTkKCwsTO3bt1eHDh106aWXqn379goLC7N7VAAAKkxeXp6+/fZbrVmzRl999ZXWrFmjzMxMBQYGqnv37kpNTdWVV16p2rVr2z1qlUJcAigTcVm1FBQU6Msvv9Tq1atdi+3+/fvlcDiUlJSkSy+9VB06dFCHDh2UlJTEvZsAgErBsizt2LHDFZFr1qzRd999p4KCAgUFBalt27bq0KGDOnbsqG7duql69ep2j1xl+dk9AADgwvD391eXLl3UpUsXSScW482bN7sW4q+++krz5s2T0+lUjRo1lJSUpKZNm7o+kpKS1LBhQwUEBNh8SgAA3qioqEg7d+7Ur7/+qo0bN+rXX391fZ6dnS1JatiwoTp06KBhw4apQ4cOat68ufz9/W2e3HsQlwDgpRwOhxo3bqzGjRtr2LBhkqRDhw5p3bp1+uabb1yLdnp6unJyciRJvr6+atiwoSs2T45PHloLAKgIR48e1aZNm1zrUHFAbtq0SXl5eZKkoKAg1/rTvXt3tWrVSpdeeinvQ2kzHhYLoEw8LBbSiXs4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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "train_diagrams[0].draw(figsize=(9, 5), fontsize=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In object-based relative clauses the noun that follows the relative pronoun is the object of the sentence:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5cAAAIHCAYAAAALhKgSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7rUlEQVR4nO3dd5xUhb3w/++wNOkLgrCAVDGIAiJSDBo1JoAaLEE0ihVRY8V6rxoVTfHGciPgRVR8LKiJ4oMFo2C5ojEKEruisdCkqKGICNJ25/dHfuzjuqDAWTyzO+/368WL3dnZme/u2TnnfKacyWSz2WwAAABAAtXSHgAAAIDKT1wCAACQmLgEAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXAAAAJCYuAQAASExcAgAAkJi4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5cAAAAkJi4BAABITFwCAACQmLgEAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXAAAAJCYuAQAASExcAgAAkJi4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5cAAAAkJi4BAABIrHraA1Sk+fPnx5IlS9IeY5N23HHH2HnnndMeY7vL5WUAkCvyZZsQYbsAlUG+rJNyeX1UVZZBlYnL+fPnR+fOnWP16tVpj7JJderUiffee69K/NFsTq4vA4BckQ/bhAjbBags8mGdlOvro6qyDKpMXC5ZsiRWr14d9957b3Tu3Dntccp47733YujQobFkyZJK/wfzXXJ5GQDkinzZJkTYLkBlkC/rpFxeH1WlZVBl4nKjzp07R48ePdIeI69ZBgB8k+0CkCusj7YvB/QBAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXAAAAJCYuAQAASExcAgAAkJi4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5ffcNJJJ0Xbtm23+vvmzp0bmUwm7rrrrgqfCfhumUwmzj777LTHAMhpI0eOjEwmE0uWLKmQy7vrrrsik8nE3LlzS0/bf//9Y//99//e7502bVpkMpmYNm1ahcwC28tJJ50U9erVS+W6t/T2lGvyLi4XLVoUI0eOjDfeeGO7Xs8TTzwRI0eO3K7XAfnkpZdeipEjR8YXX3yxXa9n1qxZMXLkyDI7TAAAfL+8jMurr756k3F5++23xz//+c+tvsw2bdrE119/Hccff3zpaU888URcffXVSUYFvuGll16Kq6+++geJy6uvvlpcAnyH448/Pr7++uto06ZN2qMAOaR62gPkkho1amzT92Uymahdu3YFTwMAkJsKCgqioKAg7TGAHFMpHrmcN29enHnmmbHrrrvGDjvsEE2aNImjjjpqk48srFy5Ms4///xo27Zt1KpVK1q1ahUnnHBCLFmyJKZNmxZ77713REScfPLJkclkyrxW8puvuVy/fn00btw4Tj755HLX8eWXX0bt2rXjoosuiojyr7k86aST4n/+538i4t/huddee0VERDabjbZt28Zhhx1W7jLXrFkTDRs2jNNPPz3JrwqqpJEjR8bFF18cERHt2rUrve1+cx3wyCOPxO677x61atWKLl26xJQpU8pcxpasR+6666446qijIiLigAMOKL0erwsCqoolS5bEkCFDokGDBtGkSZM477zzYs2aNRHx3ceQyGQyZV7us6nXXG7KggUL4vDDD4+6detGs2bN4vzzz4+1a9dW4E8Em7Zy5coYMWJEaRMcdNBBERHx3nvvlZ5nxowZcfDBB0dhYWHUrVs3unbtGqNGjSp3WQsXLozDDz886tWrF02bNo2LLrooiouLy5xn1apVceGFF0br1q2jVq1aseuuu8YNN9wQ2Wy2zPk2bNgQv/3tb6NDhw5Rq1ataNu2bdx8883b4TeQjkrxyOXMmTPjpZdeimOOOSZatWoVc+fOjVtuuSX233//mDVrVtSpU6f0vMOGDYu5c+fGKaecEj169IglS5bEY489FgsWLIjOnTvHNddcE1deeWWcdtppse+++0ZExD777FPuOmvUqBFHHHFETJo0KW699daoWbNm6dceeeSRWLt2bRxzzDGbnPf000+PRYsWxdNPPx0TJkyIuXPnxhVXXBGZTCaGDh0a1113XSxbtiwaN25c+j2TJ0+OL7/8MoYOHVpRvzaoMo488sj44IMP4s9//nP86U9/ih133DEiIpo2bRoRES+++GJMmjQpzjzzzKhfv36MHj06fvnLX8b8+fOjSZMmEbFl65H99tsvzj333Bg9enRcdtll0blz54iI0v8BKrshQ4ZE27Zt49prr43p06fH6NGjY/ny5XHPPfdU+HV9/fXX8dOf/jTmz58f5557bhQVFcWECRPif//3fyv8uuDbzjjjjHjooYfi7LPPjt122y3eeuutGD16dMyZMyciIp5++uk49NBDo0WLFnHeeedF8+bN47333ovHH388zjvvvNLLKS4ujv79+0fv3r3jhhtuiGeeeSZuvPHG6NChQ/z617+OiH8/gDRo0KB47rnnYtiwYdG9e/eYOnVqXHzxxbFw4cL405/+VHp5p556atx9990xePDguPDCC2PGjBlx5513/rC/nO0pWwmsXr263Gkvv/xyNiKy99xzTzabzWZfffXVbERkIyI7adKkcucvKSnJZrPZ7MyZM7MRkb3zzjvLnefEE0/MtmnTpvTzqVOnZiMiO3ny5DLnO/jgg7Pt27cv/XzOnDnlLvOss87Kbvz1bpzt1Vdfzf7zn//MRkT2lltuKXOZgwYNyrZt27Z0zsromz8nVLTrr78+GxHZOXPmlDk9IrI1a9bMfvTRR6Wnvfnmm9mIyI4ZM6b0tC1Zj2Sz2ezEiROzEZF97rnnKvxngGw2v9aV+fSz5rqrrroqGxHZQYMGlTn9zDPPzEZE9s0339zk/sxGEZG96qqrSj+/8847y62Tf/KTn2R/8pOflH5+0003ZSMi++CDD5aetmrVqmzHjh2tZ3NIVb2dNmzYMHvWWWeVfv7Nn3PDhg3Zdu3aZdu0aZNdvnx5me/75r74iSeemI2I7DXXXFPmPHvuuWd2r732Kv38kUceyUZE9ne/+12Z8w0ePDibyWRK91HeeOONbERkTz311DLnO/7447MRkR03blzpad++PVUWleJpsTvssEPpx+vXr4+lS5dGx44do1GjRvHaa6+VOW+nTp3iiCOOKHcZmUxmq6/3wAMPjB133DEeeOCB0tOWL18eTz/9dBx99NFbfXkb5+vdu3fcd999pactW7YsnnzyyTjuuOO2aU7IdwcddFB06NCh9POuXbtGgwYNYvbs2aWnbc16BKCqOuuss8p8fs4550TEvw9EWNGeeOKJaNGiRQwePLj0tDp16sRpp51W4dcF39aoUaOYMWNGLFq0qNzXXn/99ZgzZ06MGDEiGjVqVOZrm9oXP+OMM8p8vu+++5bZx3jiiSeioKAgzj333DLnu/DCCyObzcaTTz5Zer6IiAsuuKDM+TY+c/HFF1/cwp8ud1WKuPz666/jyiuvLH0O84477hhNmzaNL774IlasWFHmvN/cwUyqevXq8ctf/jIeffTR0tcHTJo0KdavX7/NcRkRccIJJ8Tf//73mDdvXkRETJw4MdavX1/maLPAltt5553LnVZYWBjLly8v/Xxr1iMAVdUuu+xS5vMOHTpEtWrVtssRsufNmxcdO3Yst7O+6667Vvh1wbddd9118c4770Tr1q2jV69eceutt5Z+7eOPP46IiN133/17L6d27dqlL8PZ6Nv7GPPmzYuioqKoX79+mfNtfFnNxn3+efPmRbVq1aJjx45lzrfx5T6LFy/e0h8vZ1WKuDznnHPi97//fQwZMiQefPDBeOqpp+Lpp5+OJk2aRElJyXa97mOOOSZWrlxZeo/Dgw8+GD/60Y+iW7duiS6zRo0apY9e3nvvvdGzZ08rW9hGmztiYfYbL6JPcz0CkKu+GX6be/bUtw9cApXBkCFDYvbs2TFmzJgoKioqfV3x3//+9626nO1xVOSq/EzFShGXDz30UJx44olx4403xuDBg+NnP/tZ9OvXb5Pvd7fxnojN2dqFud9++0WLFi3igQceiCVLlsT//u//btGjlt91PY0bN45DDjkk7rvvvpg3b178/e9/96glfI+kK+ItXY9U5RU+wIcffljm848++ihKSkqibdu2UVhYGBFRbr248VGXrdWmTZv4+OOPyx0tc1veUxy2RYsWLeLMM8+MRx55JCZPnhwREXfccUfpMx3feeedCrmeNm3axKJFi2LlypVlTn///fdLv77x/5KSknK3w6VLl5bOW9lVirgsKCgot2IaM2bMJu9J++CDD+Lhhx8ud/rG769bt25ElF9xbk61atVi8ODBMXny5JgwYUJs2LBhi+Ly+67n+OOPj1mzZsXFF18cBQUFmz3yLPBvW3vb/bYtXY8kvR6AXLbxrdI2GjNmTEREDBw4MBo0aBA77rhjvPDCC2XOM3bs2G26roMPPjgWLVoUDz30UOlpq1evjttuu22bLg+2VHFxcbmXvGx8l4b169dHjx49ol27dnHTTTeV295/e19hSxx88MFRXFxc7i1F/vSnP0Umk4mBAweWni8i4qabbipzvo3PZuzXr99WX3euqRRvRXLooYfGhAkTomHDhrHbbrvFyy+/HM8880zpWwx8U/v27eOoo46KU045Jfbaa69YtmxZPPbYYzFu3Ljo1q1bdOjQIRo1ahTjxo2L+vXrR926daN3797Rrl27zV7/0UcfHWPGjImrrroq9thjjy16W4KN72157rnnRqdOncp9/ZBDDokmTZrExIkTY+DAgdGsWbOt+I1A/tl4m7r88stLn1r+i1/8You/f0vXI927d4+CgoL44x//GCtWrIhatWrFgQce6DYKVAlz5syJQYMGxYABA+Lll1+Oe++9N4499tjSl/uceuqp8V//9V9x6qmnRs+ePeOFF16IDz74YJuua/jw4XHzzTfHCSecEK+++mq0aNEiJkyYUOYt5GB7WLlyZbRq1SoGDx4c3bp1i3r16sXEiRMjIqJ///5RrVq1uOWWW+IXv/hFdO/ePU4++eRo0aJFvP/++/Huu+/G1KlTt+r6fvGLX8QBBxwQl19+ecydOze6desWTz31VDz66KMxYsSI0kdKu3XrFieeeGLcdttt8cUXX8RPfvKTeOWVV+Luu++OiIi99967Yn8RKagUcTlq1KgoKCiI++67L9asWRM//vGP45lnnon+/fuXO+/48eNj0qRJ8fDDD8fdd98dzZo1i5/+9KfRqlWriPj3+1fefffdcemll8YZZ5wRGzZsiDvvvPM743KfffaJ1q1bxyeffLLFB/I58sgj45xzzom//OUvce+995b7es2aNePoo4+OsWPHekosbIG99947fvvb38a4ceNiypQpUVJSUvpeVVtiS9cjzZs3j3HjxsW1114bw4YNi+Li4njuuefEJVAlPPDAA3HllVfGf/7nf0b16tXj7LPPjuuvv77061deeWX861//ioceeigefPDBGDhwYDz55JPbtA6sU6dOPPvss3HOOefEmDFjok6dOnHcccfFwIEDY8CAARX5Y0EZderUiTPPPDOeeuqpmDRpUpSUlETLli0j4v8dmbV///7x3HPPxdVXXx033nhjlJSURIcOHWL48OFbfX3VqlWLxx57LK688sp44IEH4s4774y2bdvG9ddfHxdeeGGZ844fPz7at28fd911Vzz88MPRvHnzOPnkk6vMe11mstvy2G8O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5ZxVq1bFiBEjol+/flFYWBhvvPFGXHzxxZ5Zt43EZUKdO3eOF198MW644YYYN25cdO3aNaZNm5b2WDnj/fffj3333TcuvPDCGD58eLz99ttx4IEHpj0WwHaRyWRi2LBh8e6778aee+4ZgwYNiuOOOy6WLl2a9mg5IZvNxp133hldunSJmTNnxiOPPBL3339/NG3aNO3RoEo68MAD46233orhw4fHBRdcEPvtt1+8//77aY+VM6ZNmxZdu3aNW2+9NW644YZ48cUXo3PnzmmPVamJywpQUFAQF1xwQbz11ltRVFQUBxxwQBx++OHxxBNP5OU9RNlsNqZPnx7Dhg2L7t27x9KlS+OFF16IUaNGeR9LIC+0atUqHn/88bjnnnviySefjF133TX+8z//Mz766KO0R0vF6tWr46677oq+ffvGKaecEocffnjMmjUrDjvssLRHgyqvXr16MWrUqHjhhRfiX//6V3Tv3j2GDRsW06dPz8v3xCwuLo6//vWvcfjhh8cBBxwQrVq1irfeeisuuOCCKCgoSHu8Sk9cVqBddtklpk2bFuPHj4+5c+fGIYccEu3atYuRI0fG/Pnz0x5vu1u2bFmMHj06unbtGn379o1nn302rrzyynjjjTeiX79+aY8H8IPKZDJx/PHHx6xZs+LYY4+NW2+9NXbZZZc48MAD489//nNeHAzu9ddfjzPPPDNatGgRJ598cjRo0CCmTp0ad911VxQWFqY9HuSVfv36xZtvvhlXXnll6Vsnde3aNUaPHh3Lli1Le7ztbv78+XHVVVdF27Zt49BDD4158+bF+PHj47nnnotddtkl7fGqDHFZwapVqxbDhg2L119/PV555ZUYMGBA3HjjjdG2bds4+OCD4+GHH47169enPWaFyWaz8fzzz8fQoUOjqKgoLrzwwth1111jypQpMXv27Ljssstihx12SHtMgNQ0b948Ro8eHYsWLYoJEybEhg0b4thjj42WLVvG+eefH7NmzUp7xAq1cuXKuO2226Jnz57Ro0ePeOSRR+Lss8+Ojz/+OJ566qn4+c9/nvaIkLd22GGHuOyyy+Ljjz+OKVOmxK677hoXXnhhFBUVxdChQ+P555+vUo9mrl+/PiZNmhQDBw6Mtm3bxn//93/HwIEDY+bMmfHaa6/FsGHDHFyygmWyVekvKEetXLkyHnjggbj99tvjlVdeiR133DH69esXffv2jT59+sRee+1VaZ4uun79+njzzTdj+vTpMX369HjxxRdj3rx50bFjxxg+fHiceOKJsdNOO6U9JhVk5MiRMX78+FiwYEHao+StxYsXR1FRUTz++OOOpFmFvP/++zF+/Pi4++67Y8mSJbHHHntE3759S7cLnTp1qjQ7PEuXLo0ZM2aUbhf+/ve/x5o1a2LgwIExfPjwOOSQQ6J69eppj0kFadWqVZx66qkxcuTItEehgnz22Wdx1113xfjx4+Ojjz6KNm3aRL9+/aJPnz7Rp0+f6NatW9SoUSPtMbfIqlWr4tVXX42XX365dD91yZIl0atXrxg+fHgcc8wxUa9evbTHrNLE5Q/szTffjAceeCCmT58er7zySqxatSoKCgpKn0q68YbcsWPHnDhK1cKFC0t3GF5++eV49dVXY82aNVGjRo3o0aNH9O7dOw4//PDYf//9c2JeKpa4TJ+4rNrWrl0bjz76aDz11FMxffr0mDVrVmSz2WjUqFH07t07+vTpE3379o1evXrlxNNIN2zYEG+//XaZ7cKHH34YERE77rhj9O3bN3784x/HscceG61bt055WrYHcVl1lZSUxPPPPx+PPPJITJ8+PV5//fVYv3591K5dO3r27Fm6j9qnT59o2bJl2uNGNpuNjz76qHRdNH369HjrrbeiuLg46tatG7169Yo+ffrE0UcfHd26dUt73LwhLlO0YcOGePfdd0s30tOnTy89gldhYWHsvPPO0bx583L/WrRoUfpxgwYNtinqVq1aFZ9++ukm/y1evDg+/fTTWLBgQXz22WcREbHzzjuXWansueeeUbt27Qr9fZB7xGX6xGV+WbFiRcycObN0R2n69Omlr4Vq06ZN6fr/m9uBb/7baaedtultnkpKSmLZsmVltgGb+jd37txYvXp1VK9ePbp3715mu9C+fXt3MuYBcZk/1qxZE6+//nqZ/dSNxxDZaaedolWrVt+5PmrevPk2PTMvm83Gl19++b3ro/nz55e+n/CPfvSj0jvj+vTpE126dHFwnpSIyxyzfPnyeOWVV+If//hHLFq0qFz0ff3112XOX7t27WjcuHHUrFkzatasGTVq1IgaNWpEzZo1o169erF8+fJYv359rF+/PtatWxfr16+PL774Ir766qsyl1OjRo1NRmz37t2jd+/eUVRU9EP+GsgR4jJ94jK/ffOe+VmzZpXbufr888+jpKSkzPcUFhZGvXr1SrcFG//v0KFDzJkzp3RbsPH/tWvXxpIlS2LDhg1lLqdhw4bltgs777xz9OrVK/baay+vp89T4jK/LVq0KGbMmBFvvPHGJsPv28cVqVevXjRq1KjM+qhGjRrRqFGjWLVqVel6aOM6ad26dbFs2bJyBzzbYYcdykVsUVFR9OzZM2ee2cG/eRFEjiksLIz+/ftH//79y30tm83GypUry92Qly1bVi4g161bF7Vr147i4uJyN+gGDRqUu4EWFha6xxkgx2Qymdhll102eyTD4uLiWLJkSbntwqpVq8psE9avXx8NGzaMhg0blgnOjf83bdq0XEiKR+DbioqK4ogjjogjjjii3Ney2WwsX7683AMjX375Zbn91IKCglizZk259VGNGjWicePG5dZH9evXt59aSYjLSiSTyUSDBg2iQYMG0alTp7THASBlBQUFsdNOO8VOO+3kNUVAqjKZTDRu3DgaN24cu+22W9rjkJLKcSg6AAAAcpq4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5cAAAAkJi4BAABITFwCAACQmLgEAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXAAAAJCYuAQAASExcAgAAkJi4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5cAAAAkJi4BAABITFwCAACQmLgEAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXAAAAJCYuAQAASExcAgAAkJi4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5cAAAAkJi4BAABITFwCAACQmLgEAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXAAAAJCYuAQAASExcAgAAkJi4BAAAIDFxCQAAQGLiEgAAgMTEJQAAAImJSwAAABITlwAAACQmLgEAAEhMXAIAAJCYuAQAACAxcQkAAEBi4hIAAIDExCUAAACJiUsAAAASE5cAAAAkJi4BAABITFwCAACQmLgEAAAgMXEJAABAYuISAACAxMQlAAAAiYlLAAAAEhOXADmsdu3a0aRJk1i9enXaowBEQUFBNGrUKO0xgBwlLgFyWMOGDWPZsmXxxRdfpD0KkOdKSkpiwYIFUbdu3bRHAXKUuATIYdWqVYtOnTrFzJkz0x4FyHOvvfZalJSURKdOndIeBchR4hIgxx166KHx+OOPR0lJSdqjAHls8uTJUVhYGD/+8Y/THgXIUeISIMcNGjQoFi9eHK+++mraowB57LHHHouDDz44qlevnvYoQI4SlwA5bp999onGjRvH/fffn/YoQJ5677334o033ohBgwalPQqQw8QlQI6rXr16nHvuuXHzzTfHm2++mfY4QJ4pKSmJ0047LTp06BCHHnpo2uMAOUxcAlQCl156afzoRz+KU045JTZs2JD2OEAeGTduXLz44osxfvz4qFOnTtrjADlMXAJUAjVr1ow77rgj3njjjbjhhhvSHgfIE/PmzYv/+I//iNNPPz3233//tMcBcpy4BKgkevXqFRdddFFcdtllcccdd6Q9DlDFzZs3Lw466KBo3Lhx/PGPf0x7HKAScLgvgErk2muvjS+//DJOPfXU+Oqrr+K8885LeySgCvrggw/ioIMOiurVq8e0adOiYcOGaY8EVALiEqASqVatWowdOzbq1asXI0aMiFWrVsVll12W9lhAFfL222/Hz372sygsLIxnnnkmWrZsmfZIQCXhabEAlUwmk4nrrrsurrnmmrj88svjqKOOis8++yztsYBKrqSkJMaNGxf77LNPtGjRIl544QVhCWwVcQlQCWUymbjiiiviL3/5S0ybNi26dOkS999/f2Sz2bRHAyqh2bNnx0EHHRS//vWv41e/+lU8//zz0bRp07THAioZcQlQiR199NExa9asOOigg+K4446Lww8/PBYtWpT2WEAlUVJSEqNHj4499tgj5syZE08//XTcdttt0aBBg7RHAyohcQlQyTVt2jT+8pe/xKRJk2LGjBmxyy67xAUXXCAygc3asGFD3HvvvbH77rvHeeedF6ecckq8/fbbcdBBB6U9GlCJiUuAKuKII46I9957Ly688ML4P//n/0S7du3i17/+dcydOzft0YAcsXbt2rjtttti1113jeOPPz46dOgQ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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "train_diagrams[-1].draw(figsize=(9, 5), fontsize=12)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create circuits" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In order to run the experiments on a quantum computer, we need to apply to string diagrams a quantum :term:`ansatz `. For this experiment, we will use an :py:class:`.IQPAnsatz`, where noun wires (``n``) are represented by a one-qubit system, and sentence wires (``s``) are discarded (since we deal with noun phrases)." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5cAAAP7CAYAAADPo3rEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADba0lEQVR4nOzdeVhUdf//8dewKqK4oKImWa7kvitB4paauZR3qaWp2aKmZolmabfWnaWmaeWSFYmVaZu5VS6ZuORSobaJZpZahhYoLuACzOf3Rz/mK7nCGTgOPB/X5XXBmXM+5z1H3nPmNWcZhzHGCAAAAAAAC7zsLgAAAAAA4PkIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJcAAAAAAMsIlwAAAAAAywiXAAAAAADLCJfXiO+++06bN2+2uwwAubRgwQKdOHHC7jIA5MKJEye0YMECu8sAkEtfffWVvv/+e7vLgAiX14TNmzcrKipK7dq106pVq+wuB0AOGGM0duxY9enTR23atFFSUpLdJQHIgb///lutW7dWnz59NG7cOBlj7C4JQA6sXLlS7du3V6tWrbRlyxa7yyn0CJc2W7Nmjdq3b6969eqpTZs26tKliz766CO7ywJwFZxOp4YOHarnn39ejz/+uH7//XfdcsstOnTokN2lAbgKf/zxh2655Rb98ccfevzxxzVx4kQNGzZMTqfT7tIAXIUPP/xQXbt2Vdu2bVW3bl21a9dOa9assbusQo1waaOPP/5YnTt3VuvWrbVy5Up98sknuuuuu9SzZ0+99dZbdpcH4DLS09PVr18/zZkzR2+88YamTZumjRs3KjU1VREREfrll1/sLhHAZfzyyy+KiIhQWlqaNm3apGnTpun111/X7Nmz1a9fP6Wnp9tdIoDLiImJUa9evXTXXXdp8eLFWrlypaKionT77bdr8eLFdpdXeBnY4q233jJeXl6mV69e5ty5c67pmZmZZtCgQUaSeemll2ysEMClnD592nTt2tX4+vqa999/P9tjBw8eNDVr1jTly5c333//vU0VAric7777zpQvX97UrFnTHDx4MNtjixYtMj4+PqZr167m9OnTNlUI4HKmTZtmJJnBgwebzMxM1/SzZ8+anj17Gi8vLzNv3jz7CizECJc2mD59upFkHn74YZORkXHB406n0zz55JNGknn66aeN0+m0oUoAF3PixAnTunVrU7RoUfP5559fdJ4jR46Yhg0bmlKlSpktW7bkc4UALmfz5s2mZMmSplGjRuavv/666DyfffaZKVq0qGnTpo05ceJEPlcI4FKcTqcZN26ckWSefPLJi75HzsjIMA899JCRZGbMmGFDlYUb4TIfOZ1O89///tdIMk888cQVQ+OkSZOMJDNs2LBsn8oAsEdSUpJp2rSpKVGihNm4ceNl501JSTERERGmWLFiZs2aNflUIYDLWbNmjQkICDCRkZEmJSXlsvNu2LDBlChRwjRr1swkJyfnU4UALiUzM9MMHTrUSDKTJ0++7LxOp9OMHj3aSDLjx4/nQE0+Ilzmk8zMTDN8+HAjybzwwgtXvdxrr71mHA6Hue+++0x6enoeVgjgcg4dOmRq165typYta+Lj469qmdTUVNOxY0fj5+dnFi9enMcVAricxYsXGz8/P9OpUyeTmpp6VcvEx8eb4OBgU7t2bXPo0KE8rhDApaSnp5u+ffsah8Nh5s6de9XLvfDCC0aSefTRRzlQk08Il/kgPT3d9OvXzzgcDjNnzpwcL79w4ULj4+NjunfvzvUfgA327dtnbrjhBnPdddeZ3bt352jZs2fPmrvvvtt4e3ub+fPn51GFAC4nNjbWeHl5mZ49e5qzZ8/maNmEhARz3XXXmRtvvNH8+uuveVQhgEs5ffq06datm/Hx8TGLFi3K8fKzZ882DofD9O/fnwM1+YBwmcfOnDljunfvbnx8fMx7772X63FWrFhhihQpYtq2bWtOnjzpxgoBXM6PP/5oKlSoYKpXr27279+fqzEyMjLMAw88YCSZV155xc0VAricl19+2UgyDz744EXvc3A19u/fb6pVq2YqVKhgfvzxRzdXCOBSTpw4Ydq0aWOKFCliPv3001yPs2DBAuPt7W3uuOMOc+bMGTdWiH8jXOahkydPmnbt2pkiRYqY5cuXWx5v/fr1pnjx4qZ58+Zc/wHkg23btpnSpUub+vXrm8OHD1say+l0mujoaCPJPPPMM1z/AeQxp9NpJkyYYCSZUaNGWe65w4cPm3r16pnSpUubr7/+2k1VAriU5ORk06xZM1O8eHGzfv16y+MtW7bM+Pv7m/bt23OgJg85jDEm/78ApeA7evSoOnfurJ9++knLly9Xq1at3DJufHy8OnTooAoVKmj16tWqUKGCW8YFkN26devUtWtX1atXT59++qlKlixpeUxjjF544QWNHTtWjz32mKZNmyaHw2G9WADZOJ1OjRw5UjNmzNDzzz+vMWPGuKXXjh07ps6dO+uHH37QsmXL1Lp1azdUC+DfEhMTdeutt+rw4cNauXKlGjdu7JZx4+Li1KVLF9WpU0efffaZSpUq5ZZx8X8Il3ng8OHDuvXWW/Xnn39q5cqVatKkiVvHT0hIUPv27VWkSBGtWbNGN9xwg1vHBwq7ZcuW6e6771arVq20ePFiFStWzK3jz549W4888ogGDBig119/XT4+Pm4dHyjMMjIy9OCDDyo2NlazZs3SkCFD3Dp+amqq7rjjDm3YsEEffvihunTp4tbxgcLut99+U7t27XT27Fl98cUXqlWrllvH/+abb9SxY0ddd911WrVqlUJCQtw6fmHnZXcBBc3+/fsVERGh5ORkbdiwwe3BUpLCwsK0adMmSVJERIR27drl9nUAhdW7776rO++8U7fffruWLVvm9mApSUOGDNE777yjt99+W7169dLZs2fdvg6gMDp79qx69uypd955R++++67bg6UkFStWTMuXL1fnzp11xx13aMGCBW5fB1BY7dq1SxEREfLy8tKmTZvcHiwlqWnTptqwYYOSkpIUGRmpAwcOuH0dhRnh0o0SEhIUEREhSdq0aZNuuummPFtXlSpVtGnTJpUpU0a33HKLvv322zxbF1BYzJo1S3379tV9992nRYsWyd/fP8/W1adPHy1evFgrVqxQ165dlZqammfrAgqD1NRUdenSRZ9++qk++eQT3XvvvXm2Ln9/f73//vvq27ev+vbtq9mzZ+fZuoDC4ptvvtEtt9yi4OBgbdy4UVWqVMmzddWuXVubNm2S0+nUzTffrISEhDxbV2FDuHST+Ph4RUZGqlSpUtq4cWO+nKoaEhKiuLg4Va9eXW3atNH69evzfJ1AQWSM0fPPP6+hQ4fqscce05tvvpkvp6p27dpVn3/+uTZv3qxbb71VKSkpeb5OoCA6duyY2rdvry1btujzzz/Pl1NVfXx8FBMTo0cffVSPPPKIXnjhBXGlEZA7cXFxatOmjWrUqKG4uLh8OVX1hhtu0KZNm1SqVCndcsst2r59e56vszAgXLrBhg0b1Lp1a1WrVk3r16/P15vslC5dWmvWrFGzZs3UsWNHrVixIt/WDRQExhiNHj1aY8eO1bPPPqtp06bJyyv/Xhpbt26ttWvXavfu3YqKitKRI0fybd1AQXDkyBFFRUVpz549+vLLL/P1JjteXl566aWX9Mwzz+ipp57SE088QcAEcmj58uXq2LGjWrRoodWrV+frTXYqVKig9evXq2rVqmrdurU2bNiQb+susGy7T20Bca18/+SZM2fMHXfcYfn7NIHC5Fr6/kl3fJ8mUNhcS98/6Y7v0wQKm6zvn7zzzjtt/f7JkydPuuX7NGEMRy4tWLhwobp37+46YhgYGGhbLf7+/vrggw9077336t5779Vrr71mWy2AJzh37pzuuecezZs3T/Pnz9ewYcNsrSfr+o+MjAxFRERo9+7dttYDXOt2796tiIgIOZ1Obdq0SbVr17a1nuHDhys2NlYxMTG69957de7cOVvrAa51c+bMUZ8+fdS3b1+9//77eXqfgysJDAzUp59+qg4dOqhbt25atGiRbbV4PLvTrad67bXXjMPhMPfdd59JT0+3PN7MmTPN9ddfb/z9/U2zZs3Mtm3bcjVOZmamGT58uJFkXnjhBct1AQVRamqq6dixo/Hz8zOffPKJ5fHc1b/GGHPo0CFTu3ZtU7ZsWbN9+3bLtQEFUXx8vAkODja1a9c2f/75p+Xx3NnDixcvNn5+fqZTp04mNTXVcm1AQfT8888bSebRRx81mZmZlsZyZ/+mp6ebvn37GofDYebOnWuprsKKcJkLkyZNMpLMsGHDLDeEMcYsWrTI+Pn5mbfeesv89NNP5sEHHzQlS5Y0R44cydV4TqfTjB8/3kgyTzzxhHE6nZZrBAqKlJQUExERYYoVK2bWrFljeTx3968xxiQlJZmmTZuaEiVKmA0bNliuEShINmzYYEqUKGGaNWtmkpKSLI+XFz28Zs0aU6xYMRMZGWlSUlIs1wgUFE6n04wePdpIMhMmTLD8HjUv+jczM9MMHTrUSDKTJ0+2VF9hRLjMAafTacaMGWMkmf/+979uC23NmjUzjzzyiOv3zMxMU7FiRctHHqdPn24kmYcffpjrPwBjzJEjR0zDhg1NyZIlzZYtW9wyZl7174kTJ0zr1q1N0aJFzeeff261TKBA+Oyzz0yRIkVMmzZtzIkTJ9wyZl718ObNm03JkiVNw4YNzV9//WW1TMDjZWRkmIceeshIMjNmzHDLmHnVv06n0zz99NNGkhkzZgwHanKAcHmVMjMzzaBBg4wk89JLL7lt3LNnzxpvb+8LTs277777TNeuXS2P/9ZbbxkvLy/Tq1cvc+7cOcvjAZ7q4MGDpmbNmiYkJMR8//33bhkzr/v39OnTpmvXrsbX19e8//77lscDPNmiRYuMj4+P6datmzl9+rRbxszrHv7uu+9M+fLlTa1atczBgwctjwd4qrNnz5qePXsaLy8vM2/ePLeNmZf9a4wx06ZNM5LMoEGD3HK2YmHADX2uQnp6uvr06aPXX39dMTExeuyxx9w2dlJSkjIzM1W+fPls08uXL6/Dhw9bHn/AgAH64IMP9PHHH+uOO+7Q6dOnLY8JeJqff/5ZEREROnPmjDZu3Ki6deu6Zdy87t8iRYroo48+0t13361evXrpzTfftDwm4IneeOMN9e7dW7169dKHH36oIkWKuGXcvO7hevXqadOmTTp9+rQiIiK0d+9ey2MCniYtLU133HGHPvnkE3344Yfq37+/W8bN6/6VpMcff1xvvvmmXn/9dfXt21fp6eluGbcgI1xewenTp3XHHXfoo48+0vvvv6/777/f7pJyrEePHlqxYoXWrVunjh076sSJE3aXBOSb7777TpGRkSpWrJi++uorVatWze6ScsTX11dvv/22hgwZogcffFBTp061uyQgX7344ot66KGHNGTIEM2fP1++vr52l5Qj1apV06ZNmxQQEKDIyEh99913dpcE5Jvjx4+rY8eOiouL04oVK3TnnXfaXVKODRw4UO+//74+/PBD3XnnnRyouQLC5WWcOHFCnTp10pdffqnly5frP//5j9vXERwcLG9v7wu+OP3IkSMKCQlx23puvfVWrVmzRt99953atGmjpKQkt40NXKs2b96sVq1aqXLlytqwYYMqVark1vHzq3+9vLz06quvauzYsRo1apTGjRvHF7WjwDPGaOzYsRo9erTGjRunV199VV5e7n3bkl89fN1117leg6KiorR582a3jQ1cq/7++2+1adNGP/zwg9asWaP27du7dfz86l9J+s9//qPly5dr7dq16tSpEwdqLoNweQlJSUlq06aNdu7cqTVr1qhDhw55sh4/Pz81btxYa9eudU1zOp1au3atWrZs6dZ1hYeHa/369fr99991yy236I8//nDr+MC1ZPXq1Wrfvr3q16+vL7/8UsHBwW5fR372r8Ph0HPPPacXX3xREydO1LBhw+R0Ot26DuBa4XQ6NXToUD3//POaOnWq/ve//8nhcLh9PfnZw2XLltWXX36pevXqqX379lqzZo1bxweuJX/88YfrvWZcXJzCw8Pdvo787F9J6tChg1avXq2dO3eqbdu2HKi5FLsv+rwW/fHHHyYsLMyUK1fO7NixI8/Xt2jRIuPv729iY2PNrl27zEMPPWRKlixpDh8+nCfr27NnjwkNDTXXX3+92bt3b56sA7DTRx99ZHx9fU3nzp1NWlpanq4rv/vXGGNef/1143A4TJ8+fbhRFwqcc+fOmXvvvdc4HA7zxhtv5Pn68ruH09LSzG233Wb8/PzMxx9/nCfrAOz0888/m+uvv96Ehoaan3/+OU/XZcc+eMeOHaZs2bLmpptuMn/88UeercdTES7/Ze/evaZKlSqmcuXKZs+ePfm23ldffdWEhoYaPz8/06xZM7N169Y8XV/WnTPLly9vvvvuuzxdF5Cfsu6Q3Lt373wLXvndv8YY8/777xtfX1/TtWtXt905E7Db6dOnTZcuXYyvr6/54IMP8m29+d3DZ8+eNb169XLrnTOBa0HWHZJr1qyZb3dItmMfvHv3blO5cmVTpUoV88svv+T5+jyJwxgu3Mnyww8/qH379goKCtKaNWsUGhpqd0l56q+//lLHjh3122+/6fPPP1eLFi3sLgmwZMaMGXrsscc0aNAgzZw5U97e3naXlKc+//xz9ejRQy1atNDSpUtVvHhxu0sCcu3kyZPq1q2btm7dqsWLF6tjx452l5SnMjMz9cgjj2ju3LmaMWOGHn30UbtLAizZsmWLbrvtNt14441auXKlypYta3dJeergwYNq3769Tpw4odWrV7vtTvSejmsu/7+tW7eqVatWqlChgjZu3Fjgg6UklStXTuvWrVOdOnXUrl07ffHFF3aXBOSKMUbjx4/XY489pjFjxmj27NkFPlhKUqdOnbRq1SrFx8erXbt2Sk5OtrskIFeSk5PVtm1bxcfHa/Xq1QU+WEqSt7e35syZoyeeeEIjRozQhAkTuFEXPNaaNWvUrl071a1bV19++WWBD5aSFBoaqo0bNyokJEStWrXStm3b7C7pmkC4lPTFF1+oXbt2ql27ttatW6dy5crZXVK+CQoK0qpVqxQZGanOnTvrk08+sbskIEecTqdGjBihZ599VpMmTdILL7yQJzf+uFZFRkZq3bp1+u2339SqVSv9+eefdpcE5Miff/6pW265Rfv371dcXJwiIiLsLinfOBwO1+vWM888o8cee4wbdcHjfPLJJ7r99tvVqlUrrVy5UkFBQXaXlG+yDtTcdNNNatu2bbabCxVa9p6Va7/FixcbPz8/07FjR5Oammp3ObY5e/asufvuu42Xl5eJjY21uxzgqqSnp5t+/foZh8NhXnvtNbvLsdXu3bvNddddZ2688Uazb98+u8sBrsq+ffvMDTfcYCpXrmx2795tdzm2mjNnjnE4HKZ///4mPT3d7nKAqzJv3jzj5eVlevbsac6ePWt3ObZJTU01HTp0MH5+fuaTTz6xuxxbFepwOX/+fOPt7W3uuuuuQt0QWTIyMswDDzxgJJmXX37Z7nKAyzp9+rTp3r278fHxMe+9957d5VwT9u/fb6pXr24qVKhgfvzxR7vLAS7rhx9+MBUqVDA1atQwBw4csLuca8J7771nfHx8zB133GHOnDljdznAZc2YMcNIMg8++KDJyMiwuxzbnT171tx1113G29vbvP3223aXY5tCGy5feeUVI8k88MADNMR5nE6niY6ONpLMM888Y5xOp90lARc4efKkadu2rSlSpIhZsWKF3eVcUw4fPmzq169vSpcubbZt22Z3OcBFbdu2zZQqVcrUr18/T78ywBMtX77cFClSxLRr186cPHnS7nKACzidTjNhwgQjyYwaNYr3iufJyMgwAwcONJLMK6+8Ync5tih04dLpdJpnn33WSDLR0dE0xEU4nU4zceJEI8mMGDHCZGZm2l0S4JKcnGxatGhhihcvbuLi4uwu55p07NgxEx4ebgIDA82XX35pdzlANmvXrjWBgYHm5ptvNseOHbO7nGtSXFycKV68uGnRooU5evSo3eUALpmZmebRRx81kszzzz/P++iLcDqdZuTIkUaS+d///lfotlGhCpdOp9M89thjRpKZOHFiofvPzqlZs2YZSWbAgAFc/4FrQmJioqlbt64pU6aM+fbbb+0u55p26tQpc+uttxp/f3+zdOlSu8sBjDHGLFmyxPj7+5tbb73VnDp1yu5yrmnffPONKVOmjKlbt65JTEy0uxzApKenm/79+xtJZtasWXaXc01zOp3mueeeM5LM448/XqgyR6EJlxkZGeb+++83kszMmTPtLsdjvPPOO8bb29vceeedXP8BW/3222+matWqplKlSuann36yuxyPcObMGdOjRw/j7e1t3nnnHbvLQSGXtT/5z3/+w/7kKv3000+mYsWKplq1aua3336zuxwUYmfOnDF33nmn8fb2Nu+++67d5XiMV1991UgyAwcOLDSX4RWKcMkbLGuWLl1q/P39Tfv27fmkGbbYtWuXqVSpkqlatSpvsHIoPT3dDBgwgE+aYauZM2caSeb+++8vNG+w3OXXX391fbC2a9cuu8tBIXTq1CnTvn174+/vb5YtW2Z3OR7n7bffLlQfrBX4cHn+qWFLliyxuxyP9eWXX5rAwEATHh7O9R/IV+efGvbnn3/a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tevcuXOun1evXq0aNWrom2++UXR0tFavXq3Fixfr9ttv1//+9z916NAhV0fMnE6nhg0bpk6dOql8+fKaNWuWNmzYoNmzZyswMFARERGaNWuWO59WjsybN0/NmzeX0+nU1KlTtX79es2bN0833nijunbtqieffDLfannssce0fPlyffjhh1q/fr3+/PNP3XnnndnmGTBggObMmaOMjIx8qwsAPNnF3ivMnTv3qpa9lt4rpKen211Crp09e1Zly5bVuHHjVL9+/YvOExwcrA4dOmjOnDn5XJ1FBvmqadOmxsvLy0i66n9eXl6madOmdpeOa1y/fv1Mt27dsk278847TcOGDY0xxowfP/6if1/z5s0zxhjz4YcfmrJly7qW/e233y6Yt1+/fsYYY1q1amWGDRtmRo0aZUqVKmXKly9vxo8fn23d06ZNM3Xq1DEBAQHmuuuuM4MHDzYnT540xhizbt26C8Z+6KGHjCQTHx+fq+d//fXXm4kTJ5oBAwaYwMBAU7lyZTN37tzLLtOqVSvzyCOPmEcffdSUKVPGREVFGWOM+eabb0zp0qXNsmXLLrpcenq6GTBggOnSpcsF2+vjjz82UVFRpmjRoqZevXpm8+bN2ZaNjo42TZs2NYmJiRcd+5dffjE33HCD+fDDD13Txo8fb+rXr2/efvttc/3115sSJUqYnj17mhMnTlzyuc2bN88EBQVd8vGsenfs2GGMMSY+Pt5IMtddd53Zs2fPRZf566+/TMOGDc3UqVNd0/bv329uv/12U7JkSRMQEGBuuukm8+mnn15yvddff72ZPn36JR/PkpKSYnx9fbNth4SEBCPJbNmyxTXt7Nmzxt/f33zxxRdXHBO4lHnz5hlJJj093e5SgDx1qfcKNWvWzLYvvtr3Cll+/PFH07lzZ1O8eHETGBhoIiIizC+//JJtnS+++KIJCQkxpUuXNkOGDDHnzp1zLS/JfPLJJ9nGDAoKcq03a5+1aNEic8sttxh/f3/XYzExMeamm24yfn5+JiQkxDzyyCPZxn3jjTdM9+7dTdGiRU21atXM0qVLrW1E83/vY7744gvTuHFjU7RoUdOyZUuze/fuHI/VqlUr07t374u+B5o/f7657rrrLNebnzhymY927typb7755qqPWmZxOp365ptvuIsscuTHH3/U5s2b5efnJ+mf0ysSExNd/6ZOnaqAgAA1adJEkrRx40Y1btzYtXzlypX18ccfS5L27NmjxMREvfzyy67H58+fr2LFimnbtm2aMmWKnn32Wa1Zs8b1uJeXl1555RX99NNPmj9/vr788kuNHj1akhQeHq4ZM2aoRIkSrnr69u1r+TlPmzZNTZo00Y4dOzRkyBANHjxYe/bsuewy8+fPl5+fn7766iu99tprkqRhw4Zp4sSJ6tKli3bt2qVWrVqpbNmyuvvuu/X4449rypQpeu2117Rr1y6tW7cu23hjx45VdHS0du7cqRo1aqh3796uo2q7du1SbGyslixZopCQEM2ZM0fVq1dXlSpV9Oqrr6pmzZry9fXVG2+8oVGjRmU79Xbfvn1asmSJVqxYoRUrVmj9+vWaNGmS5W2W5dixY5KkqVOnqkaNGvrkk09Up04dVaxYUePGjVP79u21e/duLVy4UBMnTtTJkyclSY888ojOnj2rDRs26IcfftDkyZMVGBhouZ74+Hilp6erXbt2rmm1atVSaGhottNz/fz81KBBA23cuNHyOgGgsMl6r+Dr6ytJ6tu3b47eK0jSoUOHdMstt8jf319ffvml4uPjdf/992c7o2TdunXat2+f1q1bp/nz5ys2NlaxsbE5rnfMmDF69NFHlZCQ4Dqq98gjj+ihhx7SDz/8oGXLlqlatWrZlnnmmWd099136/vvv9dtt92me++9V0ePHs3xui9m7NixmjZtmr799lv5+Pjo/vvvd8u4WZo1a6Y//vjjqq9vvRb42F1AYfL1119bWv6BBx5Q1apV3VQNCpqvv/5aBw4ckK+vr5xOp5xOpxwOh2688Ub17Nkz27zJycmKi4tTs2bN9L///U+StGnTJvn7+2eb96+//pIkPfHEE66QKv0Tkvz8/LRr1y6NGzdOklSqVCkNHz5c9erVc813fggoXbq0YmJilJycLEn67bffdPr0aT366KOSpNq1a1veBrfddpuGDBniqnn69Olat26datasecllqlevrilTprh+37t3r/bv368HHnhAmZmZuuOOOxQVFaWXX35ZGzdu1OOPP66xY8fKz89PvXv31qpVq9S6dWvX8tHR0ercubOkf3ZotWvX1i+//KJatWppwYIF6tevnypWrKiNGzcqOjpab7zxhmrVqqXx48dr3759cjqdatu2rTIyMrRnzx7VqlVL0j8fMsXGxqp48eKS/nkDsHbtWk2cONHydpPkCsnVq1fXvn371Lt3b02bNk0333yzZs6cqXXr1mns2LGqWbOmateura+++kodO3bUwYMH1aNHD9WtW1eSdOONN7qlnsOHD8vPz++C63LLly+vw4cPZ5tWsWJFHThwwC3rBYCCbsWKFQoMDFRGRobOnj0rLy8vPf744xo9erQCAgIUEhIi6Z97A4wbN07z589XnTp1JEkHDhxQxYoVs403a9YsBQUFadGiRa6QWqNGjWzzlCpVSjNnzpS3t7dq1aqlzp07a+3atXrwwQdzVPuIESOyXR7x3HPPaeTIka73EpLUtGnTbMv0799fvXv3liQ9//zzeuWVV/T111+rY8eOOVr3xUycOFGtWrWS9E/w7dy5s86cOaMiRYpYHluSa1sfOHDAY65xJVzmo5MnT8rb2zvXN+c5ceKE2z5pQcFz9uxZlSpVSrVq1VJmZqYOHjwoh8OhgICAbH83Z86c0ddff63Q0FAVK1bM9diZM2fk5eWVbd4TJ05I+ueoVtYOQ/rnOofAwMBs83p5een48eOuacnJydq/f7/S0tKUkZEhY4ycTqf+/vtveXt7KzU1VcYY1/w5uZnApZwfbB0Oh0JCQlwB+VL+/QnsDz/8oKZNm8rHx0e7du3SoUOHNHPmTPn6+qpBgwZatmyZa94KFSrou+++u2QNFSpUkPRPSK9Vq5Z++OEH9e/fX5K0fPly3XvvvbrnnnskSa+99pquu+66bMtmHU2U/rnLalawzHr8Ss8tJ3755RfXz6tWrdItt9yiRx55RJI0e/bsbNd9n1/b8OHDNXjwYK1evVrt2rVTjx49sm2D/FC0aFGlpaXl6zoBwFO1bt1ac+bMUWpqqqZPny4fHx+1bds22zwHDx5U9+7dFR0drbvvvts1/fTp0xcEp507dyoyMjLb+4R/q127try9vV2/V6hQQT/88EOOa886gir9s2/9888/L6j9387fJxUrVkwlSpRw2/7zUvv80NBQt4xftGhRSfKofRzhMh8VL17c0l1fo6Oj9dBDD7mxIhQk/fv3V0pKiuuW206nU/Xr11evXr1cF96npqbq5ptv1m233abFixfL4XC4lr/33ntljNF7773nmhYXF6fWrVtryZIl2Y4gRUVFqUGDBtm+UqJ79+4qWbKkYmNjtX//ftWqVUuDBw9Wz549Vbp0aW3atEkDBw7U4sWLXfONGDHCdSrt9u3b9fzzz1vaBv/esTkcjiuehl6sWLFsv2dkZLhezM+dOydfX99s455/yuf27dsvOCp6/rxZ2zerhn+Pff66zx83NTVVe/fuzXamQm6eW06c/9r079r8/PxcR66dTqd27typUaNGSfrnjIoOHTro008/1erVq/XCCy9o2rRplm+fHhISonPnziklJSXb396RI0dcn6pnOXr0KGd1AMBVKlasmOvU0bfeekv169fPdjQyNTVVXbt2VcuWLfXss89mWzY4ODjbB5/S/wWgy7nSPszhcFxwF/aL3bDn/H3T1az3atZtxeX2+e6Q9QF82bJl3TZmXuOay3zUrFkzW5dH4eLl5aWnnnpK48aN0+nTp2WMUZ8+feR0OvXOO+9kC5aS1LBhQ+3atSvbtKxAkdMPReLj4+V0OjVt2jS1aNFCNWrU0J9//nnB2NfiV+xUq1bN9Wlq1jWQM2fOVGZmprZu3apVq1YpPT1d8+fP1+eff+46EpnTsSMiIrRo0SLt3r1b6enprtNb//77b91///3q1q2bypUr5/bndymVK1d2/RwREaHVq1dr69atyszM1MyZM5WSkqITJ05o5MiRqlSpUrbTjipXrqxBgwZp8eLFGjlypN544w3L9TRu3Fi+vr5au3ata9qePXt08OBBtWzZMtu8P/74oxo2bGh5nQBQ2GS9V5g9e7Yk5eq9Qr169bRx40ZLd28tW7asEhMTXb/v3bv3ikfrihcvripVqmTbTxQ0P/74o3x9fd1y6VB+IVzmowYNGqhp06by8srZZvfy8lLTpk3VoEGDvCkMBdZdd90lb29vzZo1SxMmTNAXX3yhuXPn6tSpUzp8+LAOHz6s06dPS5I6dOign376Kdsnktdff70cDodWrFihv//+W6dOnbqq9VarVk3p6el69dVX9euvv+qdd95x3SwnS5UqVXTq1CmtXbtWSUlJrjryUtu2bTVz5szLztOwYUOdPn1a69atU9GiRRUbG6v//ve/8vf314ABA9S9e3dNnjxZ8+bN0+rVq3P0aeIdd9yhN998U+np6erRo4e6du2qm266SQEBAUpJSVHFihXVrl07VapU6YLtdSUzZ8687KlBX3/9tWrVqqVDhw5d9PGsa0aOHz+uJk2aaMyYMYqMjJS/v79Wr16txo0bq1evXjp27Jg++eQT13IjRozQqlWr9Ntvv2n79u1at26dwsLCXI/XqlUr2/xXKygoSAMHDtTjjz+udevWKT4+XgMGDFDLli3VokUL13z79+/XoUOHst34BwBw9bLeK0jS3Llzc/xeYejQoTpx4oR69eqlb7/9Vnv37tU777xzxRvqna9NmzaaOXOmduzYoW+//VaDBg267Gm2WSZMmKBp06bplVde0d69e7V9+3a9+uqrOdwC9ti5c6d27typU6dOubbnv7/TcuPGjYqMjLzqo7TXAsJlPhs+fHiu7hY7fPjwPKoIBZmPj4+GDh2qKVOm6LPPPtOpU6cUHh6uChUquP69//77kqS6deuqUaNG+uCDD1zLV6pUSc8884zGjBmj8uXLa+jQoVe13vr16+ull17S5MmTVadOHS1YsEAvvPBCtnnCw8M1aNAg9ezZU2XLltXbb7/tvid+Cfv27VNSUtJl53E4HJo8ebL69eun/fv367bbbtPff/+tAwcOaNeuXZo9e7ZSUlIUFxeX408SW7durWrVqunBBx+U0+nU3Llzdfz4cR05ckSvv/66vv32Wx09elQvvfRSjm8GkJSUpH379l3y8bS0NO3Zs+eSnyxnHbl86qmnlJaWpqefflonTpzQn3/+qWXLlumzzz5TSkqKYmNjs52mmpmZqUceeURhYWHq2LGjatSo4foEXPrnaOPx48dz9FyyTJ8+Xbfffrt69OihW265RSEhIVq8eHG2eRYuXKhbb71V119/fa7WAQCFnY+Pj+u6yq+++irH7xXKlCmjL7/8UqdOnVKrVq3UuHFjvfHGG1cVDrNMmzZNlStXVmRkpO655x5FR0crICDgisv169dPM2bM0OzZs1W7dm3dfvvt2rt3bw63gD0aNmyohg0bKj4+XitXrpSkC97vL1q0KMc3PbKdjV+DUihlZGSY7t27X/V3XXp5eZk77rjDZGRk2F06CoEVK1aYsLAwk5mZme/rzvqexdx+z6W7TZw40ZQpU8ZMnTrV/P7778YYY86cOWNWrVplIiIizOLFi3M17tGjR02LFi1MixYtzPLly01qaqoxxpgjR46Yl156yTRo0MCcOnXKbc/jamVt/1atWpmwsDCzcOFCk5KSYowx5tixYyYmJsbUrl3btS2uBWfPnjWhoaFm06ZNdpcCD8f3XKKwy8k+2M73CgXVxbb/Z599ZsLCwjzudYkjl/nM29tb7733nrp27SpJlzxFNmt6165dtWDBgmx32ALySufOnfXQQw9d8tTJwuSpp57SJ598otWrV6tq1ary8/NT0aJF9fjjj6tv377q1q1brsYtVaqU1q9fr7vvvlsjR45UsWLF5O/vr9DQUMXFxSkmJuaCmwzlp2nTpmn06NGaPHmySpYsKX9/f5UtW1bvvvuuXnnllWx3tLXbwYMH9dRTT+nmm2+2uxQAKDR4r5A/UlNTNW/ePPn4eNb9Vx3G/OvWTMgXmZmZWrhwoV555RV98803FzzetGlTPfroo+rVqxfBEoVCTEyMHnjgARUtWvSCD11Onz592esNrvZa0Nw6e/as/vrrLxUvXvyC71206vjx4zpx4oTKlSsnf39/t46dE9u3b1fjxo0VHx+vRo0aSfpnux49elRly5Z1+/UeCxYs0MMPP3zRx66//nr99NNPbl0fcDmxsbEaMGCA0tPTPe6NHOAOF9sHFHSDBg3Su+++e9HH+vTpc9nHrnRfhNq1a1/y+5fnzp2re++9N9u0grT9eQW1ibe3t/r06aM+ffpo586devDBB3X8+HFFR0erWbNm3LwHhU7WTWAWLlx4wbWMVwqXec3f3z/b3VTdKSgoSEFBQXkytlWBgYHZviLFnbp27armzZtf9LGcXKcDAEBuPPvss4qOjr7oYyVKlLjsY1fy2WefXfIeB+XLl7/6Ij0Q4fIa0KBBA1WtWlXJycl8jyUKrawb2FSuXNn1/VsouIoXL67ixYvbXQYAoJAqV67cZb/yy8rXgRXmm8xxzSUAAAAAwDLCJQAAAADAMsIlAAAAAMAywiUAAAAAwDLCJQAAAADAMsIlAAAAAMAywiUAAAAAwDLCJQAAAADAMsIlAAAAAMAywiUAAAAAwDLCJQAAAADAMsIlAAAAAMAyH7sLwD8qVqyoEiVK2F0GYLuEhAS7SyiU2O4AAPYF9ihI251weY34888/lZycbHcZgG2Cg4MVEBCgPn362F1KoRUQEKDg4GC7ywAA5DP2wfYrKPtgwiWAa0JoaKgSEhKUlJRkdyk5lpGRoebNm2v8+PHq2rWr3eXkWnBwsEJDQ+0uAwCQzzx5HyxJgwcPVlBQkCZNmmR3KblWUPbBhEsA14zQ0FCPfGHNyMiQJFWpUkWNGjWyuRoAAHLOU/fBklSiRAmVLl2affA1gBv6AAAAAAAsI1wCAAAAACwjXAIAAAAALCNcAgAAAAAsI1wCAAAAACwjXAIAAAAALCNcAgAAAAAsI1wWUvv375fD4dDOnTsvOU9cXJwcDodSUlLyrS4AV4ceBgDAHuyDL41wiUsKDw9XYmKigoKCJEmxsbEqWbKkvUUBuGr0MAAA9iis+2AfuwvAtcvPz08hISF2lwEgl+hhAADsUVj3wRy59FCpqam67777FBgYqAoVKmjatGmKiorSiBEjJEkOh0NLlizJtkzJkiUVGxubbdru3bsVHh6uIkWKqE6dOlq/fr3rsfMP58fFxWnAgAE6fvy4HA6HHA6HJkyYkLdPEijA6GEAAOzBPjjvEC491KhRo7R+/XotXbpUq1evVlxcnLZv356rcUaOHKkdO3aoZcuW6tKli5KTky+YLzw8XDNmzFCJEiWUmJioxMRERUdHu+OpAIUSPQwAgD3YB+cdwqUHOnXqlGJiYjR16lS1bdtWdevW1fz585WRkZHjsYYOHaoePXooLCxMc+bMUVBQkGJiYi6Yz8/PT0FBQXI4HAoJCVFISIgCAwPd8XSAQoceBgDAHuyD8xbh0gPt27dP586dU/PmzV3TSpcurZo1a+Z4rJYtW7p+9vHxUZMmTZSQkOCWOgFcHD0MAIA92AfnLcJlAeVwOGSMyTYtPT3dpmoA5BQ9DACAPdgH5x7h0gNVrVpVvr6+2rZtm2vasWPH9PPPP7t+L1u2rBITE12/7927V2lpaReMtXXrVtfPGRkZio+PV1hY2EXX6+fnp8zMTHc8BaBQo4cBALAH++C8xVeReKDAwEANHDhQo0aNUpkyZVSuXDmNHTtWXl7/91lBmzZtNHPmTLVs2VKZmZl64okn5Ovre8FYs2bNUvXq1RUWFqbp06fr2LFjuv/++y+63ipVqujUqVNau3at6tevr4CAAAUEBOTZ8wQKKnoYAAB7sA/OWxy59FAvvviiIiMj1aVLF7Vr104RERFq3Lix6/Fp06apcuXKioyM1D333KPo6OiL/gFPmjRJkyZNUv369bVp0yYtW7ZMwcHBF11neHi4Bg0apJ49e6ps2bKaMmVKnj0/oKCjhwEAsAf74LzjMP8+oRi26NWrl5KTk7VmzZpcjxEVFaUGDRpoxowZ7isMwBVlZGTI19dX8+bNU//+/XM9Dj0M2CM2NlYDBgxQenq6fHw4qQvwNO3bt1eZMmW0aNGiXI/BPtg9OHIJAAAAALCMcAkAAAAAsIxzPwqQuLg4u0sAYAE9DACAPdgHuwdHLgEAAAAAlhEuAQAAAACWES4BAAAAAJYRLgEAAAAAlhEuAQAAAACWES4BAAAAAJYRLgEAAAAAlhEuAQAAAACWES4BAAAAAJYRLgEAAAAAlhEuAQAAAACWES4BAAAAAJYRLgEAAAAAlhEuAQAAAACWES4BAAAAAJYRLgEAAAAAlhEuAQAAAACWES4BAAAAAJYRLgEAAAAAlvnYXYA7HTx4UElJSXaXkSvVqlVTxYoVtX37drtLybXg4GCFhobaXQaQ74wxioiIkL+/v92lALbx5H2w0+lU9+7dtWPHDnl7e9tdTq6wD4ZVntzDdevWVUBAAO+jrwEOY4yxuwh3OHjwoMLCwpSWlmZ3KYVWQECAEhISCkRjADmRkZEhX19fzZs3T/3797e7HCDfsQ+2H/tgWEEP26+g9HCBOXKZlJSktLQ0vfvuuwoLC7O7nEInISFBffr0UVJSksc3BQAgZ9gH24t9MKyih+1VkHq4wITLLGFhYWrUqJHdZQAAUOiwDwY8Gz0Mq7ihDwAAAADAMsIlAAAAAMAywiUAAAAAwDLCJQAAAADAMsIlAAAAAMAywiUAAAAAwDLCJQAAAADAMsIlAAAAAMAywiUAAAAAwDLCJQAAAADAMsIlAAAAAMAyH7sLAABPt3PnTknSypUrde7cOTVr1kwNGjSwtSYAAID8xpFLAMiFzMxMvfvuu2rWrJmaNm0qSfrggw/08MMPq2HDhmrWrJneffddZWZm2lwpAABA/iBcAkAOnT59Wj169FDfvn0VHx/vmm6Mcf0cHx+vvn376j//+Y9Onz5tR5kohJKTk1WuXDnt37//svNFRUVpxIgR+VITcic2NlYlS5a85OP79++Xw+FwnTmRX6pUqaIZM2a4ZaykpCSVK1dOf/zxh1vGQ/7Ys2ePQkJCdPLkyaua367XG7t6xF1atGihjz/+2O4ycoxwaaP+/fure/fuF0yPi4uTw+FQSkpKvtcE4PIyMzPVu3dvLV++XJLkdDovOl/W9GXLlumee+7hCCauqH///nI4HHI4HPL19dUNN9yg0aNH68yZM1c9xsSJE9WtWzdVqVJFUt7uT64Ufq4FycnJmjBhgpo2baqyZcsqNDRUnTt31qJFi7J9GJQbW7duVb9+/VStWjWVKVNGYWFhGjx4sH766Sc3VZ97u3bt0uDBgxUWFqYyZcqoevXq6tevn7Zs2ZKvdbz++uuKiopSiRIlLvp3GBwcrPvuu0/jx4/P17oKK3e8xkjSk08+qWHDhql48eJ5VGnB98YbbygyMlKlSpVSqVKlNHjw4AvmGTdunMaMGXPJ9xnXKsIlAOTAwoULtXTp0qt+sXc6nVqyZIkWLlyYx5WhIOjYsaMSExP166+/avr06Zo7d+5Vv/FOS0tTTEyMBg4cmMdVXrvOnTvn+nn16tWqUaOGvvnmG0VHR2v16tVavHixbr/9dv3vf/9Thw4dlJqamuN1OJ1ODRs2TJ06dVL58uU1a9YsbdiwQbNnz1ZgYKAiIiI0a9Ysdz6tHJk0aZKaN28up9OpqVOnav369Zo3b55uvPFGde3aVU8++WS+1ZKWlqaOHTvqqaeeuuQ8AwYM0IIFC3T06NF8q6sws/IaI0kHDx7UihUr1L9//7wr8ioYY5SRkWFrDVbExcWpd+/eWrdunbZs2aLy5ctLkv766y/XPJ06ddLJkyf1+eef21VmrhAuASAHXnnlFXl55eyl08vLS6+88koeVYSCxN/fXyEhIapcubK6d++udu3aac2aNZKkCRMmuI46nP8vNjZWkvTZZ5/J399fLVq0kPTPKWGtW7eWJJUqVUoOhyPbG0Kn06nRo0erdOnSCgkJ0YQJE7LV8tJLL6lu3boqVqyYKleurCFDhujUqVOS/nljNGDAAB0/flwOh0ONGze2/NyrVKmi559/Xvfff7+KFy+u0NBQvf7665ddJioqSkOHDtWIESMUHBysDh06SJK+/fZb9e7dW7Gxsfr000/Vs2dPNWzYUE2aNNHgwYP13Xff6brrrlPv3r1dY2WdQrd48WK1bt1aAQEBql+//gVH+5544glt27ZNCQkJmjJlijp06KDatWurdevWevHFF/Xtt99q2rRp+uijj1zLTJgwQQ0aNNA777yjKlWqKCgoSL169brq0wqv1gcffKA333xT8fHxmjt3rjp37qw6deooIiJC48eP165du7Rq1SpNmzbNtcyBAwfUpUsXlSpVSsWKFVPt2rX12WefuaWeESNGaMyYMa6/yYupXbu2KlasqE8++cQt68TlXe41RpIiIiK0d+9e1+9DhgxRrVq1lJaWJumfv7H69eurUqVK2cb96quvFBUVpYCAAJUqVUodOnTQsWPHXI9f7vXmYqevpqSkyOFwKC4uTtL/nYXx+eefq3HjxvL399emTZvkdDo1ZcoUVatWTf7+/goNDdXEiROz1fbrr79etqdzI+vMjVWrViksLEyBgYGu4H41FixYoCFDhqhBgwaqVauWnn76aUnS119/7ZrH29tbt912mxYtWmS53vxEuASAq7Rz50598803OT5Fxel06ptvvvHY6z5gjx9//FGbN2+Wn5+fJCk6OlqJiYmuf1OnTlVAQICaNGkiSdq4cWO2kFe5cmXX9Tp79uxRYmKiXn75Zdfj8+fPV7FixbRt2zZNmTJFzz77bLY3mVkfivz000+aP3++vvzyS40ePVqSFB4erhkzZqhEiRJKTEzUqlWr3PKcp02bpiZNmmjHjh0aMmSIBg8erD179lx2mfnz58vPz09fffWVXnvtNUnSsGHDNHHiRHXp0kW7du1Sq1atVLZsWd199916/PHHNWXKFL322mvatWuX1q1bl228sWPHKjo6Wjt37lSNGjXUu3dv1xGSXbt2KTY2VkuWLFFISIjmzJmj6tWrq0qVKnr11VdVs2ZN+fr66o033tCoUaOynXq7b98+LVmyRCtWrNCKFSu0fv16TZo0yS3bLctrr72mTz75RDVq1NAnn3yiOnXqqGLFiho3bpzat2+v3bt3a+HChZo4caIr2D7yyCM6e/asNmzYoB9++EGTJ09WYGCgW+u6kmbNmmnjxo35uk5c+BojSTfffLPuvfdeZWRk6NNPP9Wbb76pBQsWKCAgQNI/rzNZrzlZdu7cqbZt2+qmm27Sli1btGnTJnXp0iXb5SBXer25WmPGjNGkSZOUkJCgevXq6cknn9SkSZP09NNPa9euXXrvvfdcRwGzXK6nrUhLS9PUqVP1zjvvaMOGDTp48KCio6NzNVbWqcklSpTINt0Te4OvIrHZihUrLngR59os4Np0/ieKuTFy5EjVqVPHTdWgoPn666+1e/du+fn5yel0KjMzUw6HQ40aNdKjjz6abd7ExEQtXrxY7du31xtvvCHpn/1JkSJFss2bdaOUl156Sf7+/q7pv/zyiwIDA3X06FHNnDlTklSuXDk9+eSTWrFihWu+3377zfXzjTfeqHnz5snX11fSP0HrzJkzeuGFF7KdymXFbbfdpiFDhkj65wjh9OnTtW7dOtWsWfOSy1SvXl1Tpkxx/b53717t379fDzzwgDIzM3XHHXcoKipKL7/8sjZu3KjHH39cY8eOlZ+fn3r37q1Vq1a5jvBK/4T4zp07S5KeeeYZ1a5dW7/88otq1aqlBQsWqF+/fqpYsaI2btyo6OhovfHGG6pVq5bGjx+vffv2yel0qm3btsrIyNCePXtUq1YtSf98yBQbG+u6Tq1v375au3btBUdZrGjSpInq1q2rffv2qXfv3po2bZpuvvlmzZw5U+vWrdPYsWNVs2ZN1a5dW1999ZU6duyogwcPqkePHqpbt66kf/6f81vFihW1Y8eOfF9vYZT1vjMjI0Nnz56Vl5eX6zVA+ieI9e3bV8OHD9fixYs1YcKEbB9aHThw4IJwOWXKFDVp0kSzZ892Tatdu3a2eerVq+c6/bZ69eqaOXOm1q5dq/bt2+eo/meffda1zMmTJ/Xyyy9r5syZ6tevnySpatWqioiIyLbM5XraivT0dL322muqWrWqJGno0KF69tlnczVW1tlNzZs3zza9YsWK+v333+V0OnN81pRdCJc2a926tebMmZNt2rZt29SnTx+bKgJwKSdPnpS3t3euPwBKSEjQ33//7eaqUFAkJiaqWLFiqlixopxOp5KSkuRwOPT777/r999/d8137tw57du3T6VLl9ahQ4d06NAhSf9cq+Pn55ftSFzWaawbN26Ut7e3a3pKSor8/f2zzZuWlqZff/3Vdd3iqVOn9Ndff+ns2bNyOp0yxsgYo7Vr18rLy0vHjh1TRkaG1q1b57Y7IterV8/1s8PhUEhIyBWD679Pyf3hhx/UtGlT+fj4aNeuXTp06JBmzpwpX19fNWjQQMuWLXPNW6FCBX333XeXrKFChQqS/tm2tWrV0g8//OA6tXj58uW69957dc8990j656jhddddl23Z808LrFKlSrYboFSoUMFtofzfta9atUq33HKLHnnkEUnS7Nmzs133fX5tw4cP1+DBg7V69Wq1a9dOPXr0yLYN8kPRokVdp10ib2W970xNTdX06dPl4+OjHj16aPv27ZL+OXIWExOjDh06KDw8XGPGjMm2/OnTp1WkSJFs03bu3Km77rrrsuv9999Ubv/+zw+2CQkJOnv2rNq2bXvV6/53T1sREBDgCpZZY+fmOU2aNEmrV6+WpGwfAkr/9IbT6dTZs2dVtGhRS/XmF8KlzYoVK6Zq1aplm8YtuYFrU/HixS2dWTBhwgQ99NBDbqwIBUn//v2VkpKiJUuWSPrnSFf9+vX16KOPum7Sk5qaqptvvlm33367Fi9eLIfD4Vr+3nvvlTFG7733nmtaXFycWrdura+++irbnV2joqLUoEGDbF8p0b17d5UsWVKxsbHav3+/atWqpcGDB6tnz54qXbq0Nm3apIEDB2rTpk2u+UaMGKHvv/9e27dvd8t1l1lHRbM4HI4rnoZerFixbL9nZGS43oSdO3dOvr6+2cY9/2yh7du3X3BU9Px5s7ZvVg3/Hvv8dZ8/bmpqqvbu3ZvtjWdunltOZb0x/Xdtfn5+rlMfnU6ndu7cqVGjRkmSHnjgAXXo0EGffvqpVq9erRdeeEHTpk3TsGHD3Frb5Rw9elRly5bNt/UVZue/73zrrbdUv359xcTEqGHDhq55NmzYIG9vbyUmJio1NTXbhyLBwcHZPjSRdFWh53J//1lH5M4/jTw9Pf2S9edkvf9e97972oqLPaec3oV66tSpmjRpkmbNmqW+ffte8PjRo0dVrFgxjwmWEtdcAsBVa9asma3Lo3Dx8vLSU089pXHjxun06dMyxqhPnz5yOp165513sgVLSWrYsKF27dqVbVpWoMjphyLx8fFyOp2aNm2aWrRooRo1aujPP/+8YOxr8TKOatWq6YcffpAk1zWQM2fOVGZmprZu3apVq1YpPT1d8+fP1+eff56ju16eP3ZERIQWLVqk3bt3Kz093XV6699//637779f3bp1U7ly5dz+/C7nl19+cdW2evVqbd26VZmZmZo5c6ZSUlJ04sQJjRw5UpUqVVLTpk1dy1WuXFmDBg3S4sWLNXLkSNep1vnlxx9/zBZukD/Of43Juubvu+++0+TJk7V8+XIFBgZq6NCh2Za52OtMvXr1tHbt2lzXkfXBwvk3w7maexRUr15dRYsWtbRuO02ZMkX/+9//tHLlSt10000XnccTe4NwCQBXqUGDBmratGmu7hbbtGlTNWjQIG8KQ4F11113ydvbW7NmzdKECRP0xRdfaO7cuTp16pQOHz6sw4cPu05J7dChg3766adsRxWuv/56ORwOrVixQn///bfrNNkrqVatmtLT0/Xqq6/q119/1TvvvOO6WU6WKlWq6NSpU1q7du0FRzLyStu2bbNdH3YxDRs21OnTp7Vu3ToVLVpUsbGx+u9//yt/f38NGDBA3bt31+TJkzVv3jytXr06R0fM7rjjDr355ptKT09Xjx491LVrV910000KCAhQSkqKKlasqHbt2qlSpUoXbK8rmTlz5mVP7/v6669Vq1Yt12nQF/PFF1/o6NGjatKkicaMGaPIyEj5+/tr9erVaty4sXr16qVjx45luzPriBEjtGrVKv3222/avn271q1bp7CwMNfjtWrVyvWdXA8fPqydO3e6Qu8PP/ygnTt3ZvvakbS0NMXHx+vWW2/N1TpgTdZrzAcffCBJevrppzV8+HB16tRJCxYs0Pvvv5/tzscdOnTQli1bsn2w9OSTT+qbb77RkCFD9P3332v37t2aM2eOkpKSrqqGokWLqkWLFq4b9axfv17jxo274nJFihTRE088odGjR+vtt9/Wvn37tHXrVsXExORwK+S/yZMn6+mnn9Zbb72lKlWquLbVv08P37hxo8f1BuESAHJg+PDhubpb7PDhw/OoIhRkPj4+Gjp0qKZMmaLPPvtMp06dUnh4uCpUqOD69/7770uS6tatq0aNGrneJEpSpUqV9Mwzz2jMmDEqX778BUchLqV+/fp66aWXNHnyZNWpU0cLFizQCy+8kG2e8PBwDRo0SD179lS7du3c96QvY9++fVd8w+pwODR58mT169dP+/fv12233aa///5bBw4c0K5duzR79mylpKQoLi7ugpuOXEnr1q1VrVo1Pfjgg3I6nZo7d66OHz+uI0eO6PXXX9e3336ro0eP6qWXXrrgurQrSUpK0r59+y75eFpamvbs2XPJ0wUlqV27durdu7fS0tL09NNP68SJE/rzzz+1bNkyffbZZ0pJSXF9hUKWzMxMPfLIIwoLC1PHjh1Vo0aNbDdm2bNnj44fP56j55LltddeU8OGDfXggw9Kkm655RY1bNgw23WvS5cuVWhoqCIjI3O1DliT9Rrz9ttvS/on6D3//POS/nlNef755/Xwww+7PtTo1KmTfHx89MUXX7jGqFGjhlavXq3vvvtOzZo1U8uWLbV06VL5+Fz91XdvvfWWMjIy1LhxY40YMULPPffcVS339NNPa+TIkfrvf/+rsLAw9ezZ0+3XMueFOXPm6Ny5c/rPf/6jChUquL5G6Z133nHNc+jQIW3evFkDBgywq8zcMQVEfHy8kWTi4+PtLqVQYvujsMjIyDDdu3c3Xl5eRtIV/3l5eZk7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Qzt37sw2/eWXX1ZsbKxb1vFvVapUybOxc8oYo//+97+qUKGCihYtqnbt2mnv3r2ux4ODg3Xfffdp/PjxNlaJwupSH/LExcXJ4XAoJSUl32sCcPXoYcBz0b/XJrcduezYsaMSExP166+/avr06Zo7d26O3vAfPHhQK1asUP/+/d1Vksu5c+fcPublhISEyN/fP0/XERQUpJIlS+bpOq4FU6ZM0SuvvKLXXntN27ZtU7FixdShQ4dsH1wMGDBACxYs0NGjR22sFAAAACjc3BYu/f39FRISosqVK6t79+5q166d1qxZI0l6++23FRgYmO2I05AhQ1SrVi2lpaVJkj744APVr19flSpVuuK61q9fr2bNmsnf318VKlTQmDFjlJGR4Xo8KipKQ4cO1YgRIxQcHKwOHTpIkpYtW6bq1aurSJEiat26tebPn5/tk43k5GT17t1blSpVUkBAgOrWrauFCxdmW3dUVJSGDx+u0aNHq3Tp0goJCdGECROyzXP+abETJkxwHdU9/1/WkcGVK1cqIiJCJUuWVJkyZXT77bdr3759rrFuuOEGSVLDhg3lcDgUFRUl6cJPa86ePavhw4erXLlyKlKkiCIiIvTNN9+4Hs/6FGft2rVq0qSJAgICFB4erj179kiSYmNjXbUdOHBAAwYMyLa+y+nfv78ef/xxSdKtt96qMmXK6JFHHlF6evoVl70cY4xmzJihcePGqVu3bqpXr57efvtt/fnnn9lOO65du7YqVqyoTz75xNL6AAAAAORenlxz+eOPP2rz5s3y8/OTJN1333267bbbdO+99yojI0Offvqp3nzzTS1YsEABAQGSpI0bN6pJkyZXHPvQoUO67bbb1LRpU3333XeaM2eOYmJiFBMTk22++fPny8/PT1999ZVee+01/fbbb/rPf/6j7t2767vvvtPDDz+ssWPHZlvmzJkzaty4sT799FP9+OOPeuihh9S3b199/fXXF4xdrFgxbdu2TVOmTNGzzz7rCtL/Fh0drcTERNe/qVOnKiAgwPVcU1NT9fjjj+vbb7/V2rVr5eXlpTvuuENOp1OSXOv+4osvlJiYqMWLF190PaNHj9bHH3+s+fPna/v27apWrZo6dOhwwdG8sWPHatq0afr222/l4+Oj+++/X5LUs2dPV43XXXedZsyYcdn1/du3334rSZo7d67mz5+v2NhYy6fW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55+XJD3zzDPy8PBQx44ddenSpXtuey/NmjXTf/7zH7Vt2/aO6zg6Oqp58+ZasmSJ6f4AAAAAZEyW3XO5f/9+ffvtt3JxcZH072WccXFx9q8JEybI1dVVTzzxhCQpKipKtWvXvme7iYmJCgkJUZEiRbR79259+eWX2rJliz744IM064WHh+vQoUPavHmz1q5dq4sXL6ply5aqVq2a9u7dq3fffVfDhg1Ls01qaqoeeughffnllzpw4IBGjBihN998U8uWLUuz3rZt23T06FFt27ZN8+fP17x58+wh+WahoaFp3vfixYvl5OSkevXqSZIuXbqk7t27Kzo6Wt9//70qVaqk5s2b24PZ7t27JUlz585VXFyc/eebffzxx5o4caImTJign3/+WSEhIWrVqpWOHDmSZr233npLYWFhiomJ0SOPPKLnn39eycnJ8vf3t9fo5+enIUOG3LW/m/3xxx+SpMmTJ2vt2rWKjIzUuHHj7mvbzPDkk08qKioq2/oDAAAAkJZTZja2du1aubm5KTk5Wf/8848cHBw0depUSf9exunm5iZJ+v777/X2229r/vz5qlq1qiTpxIkTKlmy5D37+OKLL3T16lV9/vnnKly4sCRp6tSpatmyZZr1ChcurE8//dQebmfMmCGbzabZs2erYMGCqlKlik6dOqXevXvbt3F2dtbo0aPtP5cvX17fffedli1bpueee86+vEiRIpo6daocHR316KOPqkWLFgoPD0/T1nWFChVSoUKFJElHjx7Vyy+/rPfee09NmjSRJDVq1CjN+rNmzZKnp6ciIyP1zDPPqFixYpIkT09P+fj43HG/TJgwQcOGDVPHjh0lSR988IG2bdumyZMnp7mkNCwsTC1atJAkjR49Wo899ph+/fVXPfroo/b2XVxc5Obmdtf+bnb9fseKFSuqVq1a6tq1q8LDwzV27Nj7bsOMkiVL6vfff1dqaqocHHLUPFUAgBzs+meXG6WkpFhUDQDkbpn6Kbxhw4aKiYnRzp071b17d/Xs2VPt27dPs87JkyfVpk0bhYWFpQlsV65cUcGCBdOs+9hjj9lDabNmzSRJsbGxql69uj1YSlK9evVumcylWrVq9mApSYcOHdLjjz+epo8nn3zylvcwbdo01a5dW8WKFZObm5tmzZqlkydP3lKXo6Oj/ecSJUro77//vuu+uXDhgp555hm1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pjlz5iglJUV+fn5ycXGxuqR0KVCggBo0aKA///zT6lLS7ffff9exY8d08uRJwiUybN26dVq0aJE8PT1VvXp1q8tJt8qVK0uS/vjjD4srSb8ffvhBiYmJCgwMJFwCAABUqFBBy5cvV2hoqDw8PLRixQq5urpaXVaet3fvXoWEhKhq1apaunSp1eUgF3v99dd16NAhLViwQB07dlTfvn2tLinPMwxD48aNU2RkpF599VX17t3b6pIyRe689gMAAOQobdq00bp16xQVFaWQkBBduHDB6pLytO3bt6thw4aqUKGCIiMjVaJECatLQi7m5OSkuXPnasCAAerXr5/GjRtndUl5mmEYGjZsmN58802NHj1aH330Ua69JP9meeNdAAAAyzVu3FhbtmzRL7/8ooYNG+rvv/+2uqQ8ad26dQoJCVGdOnW0ZcsWFS1a1OqSkAc4ODjo448/1ogRI/TGG29o+PDhMgzD6rLynJSUFPXp00fjx4/X5MmTNWLECNlsNqvLyjSESwAAkGmeeuopRUZGKi4uTvXr19fvv/9udUl5ytKlS9W6dWuFhIRo7dq1cnNzs7ok5CE2m81+Ju2DDz5Q//79lZKSYnVZeca1a9fUuXNnzZkzR/PmzdMrr7xidUmZjnAJAAAyVbVq1RQVFaV//vlHAQEBOnz4sNUl5QmzZs3S888/r06dOmn58uUqWLCg1SUhj3rttdc0Z84czZo1S127dlVSUpLVJeV6ly9fVps2bfTVV1/pyy+/zLMTcBEuAQBApqtYsaKio6NVuHBhBQYGKiYmxuqScrUPP/xQffr00YABAzR37lw5OTEnI7JWr169tGzZMi1fvlxt27bVlStXrC4p17pw4YJCQkIUGRmpb775Ru3atbO6pCxDuAQAAFmiVKlS2r59u0qXLq2goCDt2LHD6pJyHcMw9MYbb2jYsGF655139PHHH+eZiT+Q87Vv315ff/21tm3bpqZNm+rixYtWl5Tr/Pe//1XDhg21f/9+bdmyRcHBwVaXlKX47QQAALKMt7e3tm7dqho1aujpp5/Wpk2brC4p10hNTVX//v01btw4TZw4UWPGjMlTE38gdwgJCdHmzZv1008/qVGjRoqPj7e6pFzj999/V2BgoP78809FRkbKz8/P6pKyHOESAABkKXd3d61fv14NGzbUM888o+XLl1tdUo6XlJSkrl27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evLJJzV58mQlJiaqZ8+eGWrv/PnzeuaZZxQTE6P169erUaNGpuoD8pKHH35Y0dHRatKkierXr6+NGzeqZs2aGW4vs49fSdq+fbueeeYZValSRevWrVPRokUz3FZ+RLgEAAC5hoODgyZPnqwiRYrojTfe0Pnz5/X+++9n+F7G0NBQ/fe//9WIESN0+vRp1ahRQxs2bLhlkpD78ffffyskJEQnTpxQeHi46tatm6GagLysZMmS2r59u5o1a6agoCCtXbtWgYGBGWorM49fSfrmm2/UoUMH1atXT6tWrZKbm1uG2snPbIZhGFYXAQC5WXJyspydnTV37lz16NHD6nKAfGPy5Ml67bXX1LdvX02dOtXSx3ucPHlSTZo00aVLl7Rp0yZVrVrVslqA3ODSpUtq3bq1vv/+e61cuVJNmza1tJ4lS5aoa9euatGihZYsWaKCBQtaWk9uxT2XAAAgV3r11Vf12WefadasWeratauSkpIsqePQoUMKCAhQUlKSoqKiCJbAfXjggQe0bt06BQcHq1WrVlq2bJlltcycOVOdOnVSp06dtHz5coKlCYRLAACQa/Xs2VPLli3T8uXL1bZtW125ciVb+//xxx8VGBioBx54QFFRUapQoUK29g/kZgULFtSKFSv03HPPqWPHjvr000+zvYYPPvhAffv21YABAzR37lw5OXHXoBmESwAAkKu1b99ea9eu1bZt29S0aVNdvHgxW/rdsWOHGjZsqLJly2r79u0qVapUtvQL5CXOzs76/PPP1a9fP/Xu3VsTJkzIln4Nw9Abb7yh4cOH65133tHHH38sBweikVnsQQAAkOs9/fTT2rx5s3766Sc1atRI8fHxWdrfhg0b1KRJE9WsWVPh4eHy8vLK0v6AvMzBwUFTp07Vm2++qaFDh+rtt99WVk4Lk5qaqv79+2vcuHH66KOPNGbMmAxPCoa0CJcAACBP8Pf3V2RkpH7//XfVr19ff/zxR5b08+WXX6pVq1YKDg7WunXr5O7uniX9APmJzWbT2LFj9eGHH2rs2LEaOHCgUlNTM72fpKQkdenSRbNmzdKcOXP02muvZXof+RnhEgAA5BnVq1dXVFSUEhMTFRAQoF9//TVT258zZ446duyoZ599VitWrFChQoUytX0gvxs6dKhmzZqlTz75RN27d8/UibquXLmitm3bavny5Vq6dKl69eqV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CJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0wiXAAAAAADTCJcAAAAAANMIlwAAAAAA0/4fk4tDYlznoo8AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import AtomicType, IQPAnsatz, RemoveCupsRewriter\n", - "\n", - "ansatz = IQPAnsatz({AtomicType.NOUN: 1, AtomicType.SENTENCE: 0},\n", - " n_layers=1, n_single_qubit_params=3)\n", - "remove_cups = RemoveCupsRewriter()\n", - "\n", - "train_circuits = [ansatz(remove_cups(diagram)) for diagram in train_diagrams]\n", - "val_circuits = [ansatz(remove_cups(diagram)) for diagram in val_diagrams]\n", - "\n", - "train_circuits[0].draw(figsize=(9, 10))" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Note that we remove the :term:`cups ` before parameterising the diagrams. By doing so, we reduce the number of :term:`post-selections `, which makes the model computationally more efficient. The effect of cups removal on a :term:`string diagram` is demonstrated below:" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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3377TR06dFBsbKxeeOEFtWrVSmfPnlWvXr300ksv5fjYgwYNUqNGjdSuXTs98cQTOnfunFatWqV27dpp5cqVevnll7PdZ9euXZo6dar8/Pz017/+Vfv27dOqVav0yy+/6Ndff1Xp0qVz3dby5ctrwoQJ2abfvXtX4eHhunXrlsqUKVPgfG3atFFcXJzmz5+v1q1bq02bNlkeMy/h4eEKDg5WxYoV1bt3b5UtW1Zr1qxRcHCwfvjhB61cuTJbiSQuLk7NmzdXvXr15OHhodu3b+vs2bPy8/PToUOHVKVKlTwfEwAAa5Tf/enIkSO1bds2denSRS+99JJWrVqlkJAQpaSkaMqUKZnLHTp0SB988IH8/PzUvXt3lS1bVocPH9bixYu1du1a7d27V97e3pJ+LzBI0rZt29S3b9/MovyD9uMAgII5efKkQkNDNXz4cNWpU8fsOChkkZGRGjZsmJydndW9e3dVq1ZN586d03/+8x99/fXXatGiReayM2fO1IYNG/Tyyy+rbdu22rBhg6ZPn64rV65o0aJFj5zl6tWrev7551WxYkX16tVLycnJcnV1LXDOx5E1N4mJiRoxYoQCAgLUvn37InscADDLrFmzNGjQIJUvX17+/v6qXLmydu/erSlTpmjr1q3aunWrHB0dNWvWLL333nvy8PBQ9+7dValSJV24cEE7d+7UN998ox49esjX11dDhgxRZGSkGjVqpG7dumU+Tsb5XUxMjMLCwvTiiy+qWbNmKlWqlPbt26dZs2bpu+++0969e+Xm5pYt59ChQ7V9+3b17NlTLi4uioqK0oQJE3Tw4EF9/fXXD73tD9qme937fvCAAQN0/PhxrV69mveDgcdg0qRJSkhI0LRp08yOAgAAAAAAgEdhoETbtm2bIcmoW7eucf369czp165dM5566ilDkhETE2MYhmFs3brVkGRIMubMmZO57LJlywxJxogRIwxJxttvv53lMTZv3px5v7lz52aZd+LEiWyZzp8/b3h6ehq1atXKMv3ex1+yZEmWeW+88YYhyfjqq6+yTPf29ja8vb0f+Dy8++67hiQjKCjokfNNmDAhx8eYMGGCIcnYunVr5rRjx44ZDg4ORuXKlY3Tp09nTk9OTjZatGhhSDIWLFiQOf3kyZOZz8FHH32U+febM2eOMW7cOEOSERoa+sDthXn27NljSDL27Nlj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q2XLlsnf319RUVGZl1KXfv+Qeu7cuerRo4d69uypSpUq6eeff9bevXvVuXNnrV27ttC39+uvv9bq1av1xBNP6M6dOwoJCcm2TL9+/VS9evUC56tTp448PT21ZMkSOTk5qWrVqrJYLAoKCpKbm1uOeWrUqKGPP/5YwcHBatiwoXr27KmyZcsqKipKR44c0csvv6zXX389c/kFCxZIkpo3b57luQQAwFbktT8tqKCgIAUFBemZZ55RQECA0tLStGnTJhmGoUaNGunAgQNZlvfz85PFYtHf/vY3/fe//5Wbm5vKly+vwMDAwto8AChRkpOTNXjwYLVr1y7PLyvDNjRo0EAREREaPHiw6tWrp27dusnb21sXLlxQTEyMOnfurIiIiAKv19PTU6+99poWL16sJk2aqGPHjrp06ZK++eYbdezYUStWrLCKnI8qo5xVs2ZNDR8+/LE/PgA8bvXr19dnn32md999V7Vr11anTp1Uo0YNJSUl6cSJE9q2bZv69eunzz//XN26dZOrq6uaN28ub29vpaamatOmTYqNjVVAQEDmwCcuLi5q2rSpYmJi9MYbb6hWrVqys7PTG2+8IW9vb7333nsKCwtTo0aN5O/vr8TERK1fv17e3t7y9PTMNWvz5s3VqFEjvfrqq1neu33llVfUo0ePh9r+/G4TgMdr6dKl2rp1q9avXy8nJyez4wAAAAAAAKAQUZiHpk+frmeeeUazZs3SF198IUmqV6+eJk2apP79++d7PeXKlVNMTIzGjBmj1atXa/fu3apXr56++uornThxQlFRUXJ1dc1c/plnntHGjRs1btw4rVy5Uvb29nrhhRe0fft2rVmzpkgK8xmjB12+fDlzBP37tWnTRtWrVy9wPnt7e61cuVKjR4/WV199paSkJEnS66+/nmthXpKGDx+umjVrKjw8XP/+97+VkpKip556SmFhYRo8eLAsFoskKT4+XtOmTZP0+2V6AQCwRXntTwtq0KBBKlWqlGbMmKF//vOfKl++vDp37qzQ0FD95S9/ybb8008/rblz5yosLEwzZszQnTt35O3tTWEeAB7S1KlTdebMGa1duzbzvAa2LTAwUPXr11dYWJjWr1+v3377TZUrV1azZs3Us2fPh17vl19+KXd3dy1dulSffvqpateurS+++EKenp4FLswXZc5HsXjxYsXExGjjxo1ydHQ0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ZkcAio1ly5aZHSFPnL+guKAwDwAAAACAlRk1apT+8pe/aMyYMZoyZYpVjxoBAABgS1JTU/X222/r0KFD+te//mV2HAAoNm7cuKGgoCB16tRJH374odlxirVDhw7p9ddf15UrVyicACjxbt26pSFDhqhDhw4KDQ01Ow4AALgP5y8oTijMAwAAAABgZXr06KGwsDAFBwfr1KlTioiIUOXKlc2OBQAAYNNOnTqlt956S9HR0Vq0aJGef/55syMBQLExbtw4JSYmatasWZQkAACF5u9//7suXLigLVu2qGbNmmbHAQAAQDHGEHUAAAAAAFgZi8Wi4cOHa+nSpVqzZo28vb01aNAgnThxwuxoAAAANueXX37RG2+8oRo1amjv3r367rvv1Lt3b7NjAUCxsXPnTn366aeaNGkSZXkAQKE5evSo/vGPf2jUqFGU5QEAAPDIKMwDAAAAAGClevbsqdOnT2vs2LFatmyZatWqpd69e2vnzp0yDMPseAAAAMXW3bt3tXXrVnXp0kUNGzbUtm3bFBYWpri4OPn5+ZkdDwCKjbS0NL399ttq1KiRBg8ebHYcAICNMAxDgwcPloeHh8aMGWN2HAAAANgACvMAAAAAAFixihUraty4cTp16pSmT5+un376Sc2aNdOTTz6pgQMHasWKFbpx44bZMQEAAKzelStXtGjRIvXp00eVK1dW27ZtFRcXp/nz5+v48eMaMmSIXFxczI4JAMVKZGSkDh48qC+++EIODg5mxwEA2IjVq1drw4YNioyMVJkyZcyOAwAAABvAuxYAAAAAABQDZcqU0aBBg/TXv/5VMTExWrdundatW6c5c+bIwcFBLVq0UKdOndSxY0c9/fTTsre3NzsyAACAqVJTU3XgwAGtX79e69at044dO2QYhp555hm9++676tSpk5o3by47O8YWAoCHcerUKX3wwQcKDAxU06ZNzY4DALARt27d0pAhQ/TnP/9ZXbt2NTsOAAAAbASFeQAAAAAAihEHBwe1bdtWbdu21SeffKKTJ09mlsAmTJigUaNGqWzZsnrmmWfUpEmTzJ/atWtTogcAADYrNTVVsbGx2rNnj3bv3q09e/bowIEDunPnjlxdXdWhQwe9/fbb6tixozw8PMyOCwDFnmEYGjRokMqXL6/JkyebHQcAYENCQ0N14cIFbdmyRRaLxew4AAAAsBEU5gEAAAAAKMZ8fHz03nvv6b333tPt27f1008/ac+ePdqzZ4++/fZbRUZGSlK2En3Dhg1Vs2ZNlS1b1uQtAAAAKJjExEQdPXpUBw4cyCzIZ5TjLRaL6tSpoyZNmqh379569tln9dxzz6lUqVJmxwYAm7Jy5UqtXbtWK1askKurq9lxAAA24ujRo5o6dapGjRqlmjVrmh0HAAAANoTCPAAAAAAANsLZ2Tlz9PkM169f1969ezNL9GvXrs0s0UvSk08+qaeeekq1atXSU089lfn7H//4Rzk6OpqxGQAAALp9+7aOHz+u//3vfzp69GiWfy9evChJmeX4Z599Vr1791aTJk3k6+srFxcXk9MDgG27ceOGgoKC5O/vr+7du5sdBwBgIwzD0ODBg+Xh4aExY8aYHQcAAAA2hsI8AAAAAAA2rHz58jmW6A8fPpyleLZr1y4tWrRIN2/elCTZ2dmpevXqmQX66tWr68knn9STTz4pT09PeXp6qnTp0mZtFgAAKOZu3bqlc+fO6fz58zp37pzOnTunkydPZh6bnDlzRoZhSJLc3Nwyj0lefPHFzC/61alTh3I8ADzA8ePH5eHhoTJlyhTaOseNG6fExETNnDlTFoul0NYLACjZVq9erQ0bNmjVqlWFut8CAAAAJArzAAAAAACUOOXLl1fz5s3VvHnzLNMNw1B8fHy2UVy3bNmiU6dOZZbpM1SsWDFLif7efzN+r1y5suzs7B7n5gEAABOlpaXp4sWLWYrwGb/fO+3GjRtZ7ufq6ipvb2/Vrl1bffr0yXIFHHd3dwqZAPCQFi5cqGnTpum1117TwIED1bRp00da386dO/Xpp5/qk08+UbVq1QopZeGpXr26JCkuLs7UHJIUEhKiiRMnauvWrWrTpo3ZcQDAqt26dUtDhgzRn//8Z3Xt2tXsOAAKSb9+/TR//nydPHky8zgtL3FxcfLx8VHfvn01b968h15PftYJACh5KMwDAAAAAABJksViyRw9vnXr1lnmGYahpKSkbGW3jN9//fVXbdy4UfHx8bp7927m/RwcHPSHP/wh12K9h4eHKlasqAoVKsjJyelxbzIAAMin27dvKyEhQdeuXdP58+dzPB44d+6cLl68qPT09Mz7lSpVKvP44sknn9TTTz+d7Qt2np6ejBQPAEWkd+/eunTpkr766ivNnj1bDRo00MCBA/X666+rUqVKBVpXWlqa3n77bTVq1EiDBw8uosTFR3R0tPz8/DRhwgSFhISYHSebjGJZxhVbAMCahYaG6sKFC9qyZQtflgVMRLk8K46nAMC2UJgHAAAAAAAPZLFY5OrqKldXV9WtWzfX5e7evavLly/nWKA7f/68oqOjde7cOSUkJGS7r7OzsypUqPDAn4yC/b0/lO0BAHiwjNJ7Tj/Xrl3LdV5CQoLu3LmTbX3u7u6ZxXdfX1917tw52xVnKlWqxNVmAMBETz31lD777DOFh4dr5cqVmjNnjoYNG6bRo0erW7duGjhwoF588cV8/b86MjJSBw8e1I4dO+TgYJ0fM2/ZssXsCJkCAwPVq1cvqxyJHwCsydGjRzV16lSNGjVKNWvWNDsOACsUGhqq999/X08++aTZUQAAxZh1vpMBAAAAAACKJXt7e/3hD3/QH/7wBzVp0iTX5W7fvq3z588rPj4+z3Le8ePHs9xOTk7OcX2U7QEAJUVhl94lqUyZMtn2j7Vq1cp1X+rh4SEPDw/2oQBQjJQuXVq9e/dW7969derUKc2bN0/z5s3T0qVL5e3trb/+9a8aM2ZMrvc/deqUPvjgAwUGBqpp06aPMXnB1KhRw+wImdzd3eXu7m52DACwaoZhaMiQIfLw8MhzPwSgZMt4HwIAgEdBYR4AAAAAADx2zs7OqlGjRoHLDHmVBPMq21+7di3XkmBuZXsXFxeVKVNGZcqUUdmyZTN/z89tR0fHwniaAADFmGEYSklJ0a1btzJ/bt68me/bSUlJBSq937s/y/iCWG6ld748BgDFV0pKiq5du5ZlWrly5ZSUlJRl2h/+8Idc1+Ht7a1q1aqpQoUKOnPmjE6dOqXx48fLw8ND/fr1y1wuOjpafn5++uCDD7Rp0ybdvXtXCxYs0IwZM2QYhiTpypUr+tvf/qZVq1bpt99+U7169fS3v/1NN27cUP/+/TV37tws65wzZ45Wr16tAwcO6MKFCypTpoyaNm2q999/X35+fllyZjz+hAkT1KVLF40ZM0Y///yz7Ozs1LZtW02bNk3Vq1fPcp+M23FxcZn/+vj45Pmcbt26VW3atClQvpCQEE2cOFGSNHHixMzfJenkyZOqXr165jL3rj9DVFSUwsPDtXfvXqWkpOipp55S3759NXjw4CzLZeTv27evxo0bp5EjRyo6OlopKSl6/vnnFRYWpkaNGuW5rRaLJfP3CRMmKCQkJM/nAwAep9WrV2v9+vVatWqVypQpY3YcoFiKiYnRP/7xD/30009KSkpStWrV9Oqrr+pvf/tbltfVihUrNH36dB06dEiJiYmqWLGinn76ab377rvq0aOH5s2bp/79+0uS5s+fr/nz52feN+N45vz585o9e7a+++47nThxQjdu3JCHh4c6deqkkJAQVa5cOceM6enpmjp1qv75z3/qzJkz8vDwUP/+/TVmzBiVKlXqgdvYr18/zZ8/P/M4K7/bdL9jx45xPAUAJRiFeQAAAAAAUGw4OzvL2dlZnp6eBb5vQcv295YWM37PraR4PwcHhwIV7B/mdn4+SAAA5OxRy+z5uX3r1i3dvXs3X3lKly6d7f/3ZcuWpfQOAMjmxx9/zFYsnzt3bma5KUNGof1+aWlp6tatm9auXSvp9/LPH//4x8yC+759+xQZGZnlPqtWrdLBgwfVqFEjdejQQadPn5Yk/fbbb2rdurViY2P1wgsvqFWrVjp79qx69eqll156KcfHHzRokBo1aqR27drpiSee0Llz57Rq1Sq1a9dOK1eu1Msvv5ztPrt27dLUqVPl5+env/71r9q3b59WrVqlX375Rb/++qtKly6d6/NVvnx5TZgwIdv0u3fvKjw8XLdu3cpSJMtvvjZt2iguLk7z589X69atsxTiy5cvn2seSQoPD1dwcLAqVqyo3r17q2zZslqzZo2Cg4P1ww8/aNy4cdnuExcXp+bNm6tevXoaMGCAjh8/rtWrV8vPz0+HDh1SlSpVsm3rqlWrdODAgSzT7i/uA4CZbt26pSFDhujPf/6zunbtanYcoFiaNWuWBg0apPLly8vf31+VK1fW7t27NWXKFG3dulVbt26Vo6OjZs2apffee08eHh7q3r27KlWqpAsXLmjnzp365ptv1KNHD/n6+mrIkCGKjIxUo0aN1K1bt8zHySipx8TEKCwsTC+++KKaNWumUqVKad++fZo1a5a+++477d27V25ubtlyDh06VNu3b1fPnj3l4uKiqKgoTZgwQQcPHtTXX3/90Nv+oG26F8dTAAAK8wAAAAAAoER4lLJ9hrt37+r27dsPVZq8d1pCQoLOnj2b4/yHKeXfX6jPGOXe0dFRpUqVyvH3vOY96u/29vZZRt0BUDIZhqG7d+8qJSVFKSkpSk1NLdLfc7qd1/+bH6XMfu/t8uXLP9KXoZydnWVnZ1fEfw0AgK1o1KiRNm3alGVavXr1sk27X2xsrObOnat//etfSkhIkKOjo/72t7/pnXfeUZUqVZSQkKDmzZtr+vTpCggIUMuWLTPvm1GW37dvX5bj/I8//lixsbF6++23NXv27Mzp/fr1U7t27XLNcf+onfHx8Xr22Wc1cuTIHAvz69at05IlS/Tqq69mTnvzzTe1cOFCrVq1Sr169cp1u8uXL5/jCKDvvfeebt26paCgID333HMFzpdRlJo/f77atGmT71FGjx8/rtGjR2eW2by8vCRJU6ZMUbt27bRq1So1btw42/22bdumjz76SKNHj86cNn78eE2ePFlz587V+++/n21b4+LidODAAUZABWC1QkNDdeHCBW3ZsoX3kYCHEBsbq8GDB6thw4basmWLKlWqlDnvo48+0pgxYzRjxgwFBwfryy+/lKOjo/bv359tFPirV69Kknx9fTV06FBFRkbK19c3x2OItm3b6sKFC3JxcckyfcGCBerbt69mzpypsWPHZrvfzz//rAMHDqhq1aqSfj/2ad++vVasWKEVK1bkOBr8g+Rnm+7F8RQAgMI8AAAAAABAPtnb28vFxSXbBwKFKb+l/AcV9ZOTk5WUlJSvUmnG76mpqYWyDRaL5bEU9B0cHGRnZyd7e3vZ2dll+T23f4tiXkHuzwfAtimjGJ6enp7t35ymFWSZoph39+5dpaWlPZYCe2F52C8AUWYHANiaChUq5FhG9/DwyHH56Ohovf/++9qxY0fmF4gTEhK0cOFC9ezZM8t6J0yYoD59+mjevHlZCvN2dnZas2ZNtmPZf//733J0dNSkSZOyTH/xxRfVoUMHbdy4MVue+8voGdl79OihGTNm6NSpU/L29s4yv1WrVlnK8pI0YMAALVy4ULt27cqzMJ+TadOmadasWerUqZOmTZv2yPkKYvHixUpLS1NwcHBmWV6SnJyc9PHHH+tPf/qToqKist3Px8dHI0eOzDJt4MCBmjx5snbt2vXQeQDALEePHtXUqVM1evRo1axZ0+w4QLE0e/ZspaWlacaMGVnK8pI0atQohYeH66uvvlJwcLAkqVSpUjletfT+++bl/mJ6hjfeeENBQUHavHlzjoX5IUOGZJblpd/f55kyZYpatmypefPmPVRhXirYNnE8BQCgMA8AAAAAAGBFHkcpPzeGYSgt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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq.backend import draw_equation\n", - "\n", - "original_diagram = train_diagrams[0]\n", - "removed_cups_diagram = remove_cups(original_diagram)\n", - "\n", - "draw_equation(original_diagram, removed_cups_diagram, symbol='-->', figsize=(30, 6), asymmetry=0.3, fontsize=14)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training\n", - "### Instantiate the model" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We will use a :py:class:`.TketModel`, which we initialise by passing all diagrams to the class method\n", - ":py:meth:`.TketModel.from_diagrams`. The :py:class:`.TketModel` needs a backend configuration dictionary passed as a keyword argument to the initialisation method. This dictionary must contain entries for ``backend``, ``compilation`` and ``shots``. The backend is provided by `pytket-extensions `_. In this example, we use :term:`Qiskit`\\ 's AerBackend with 8192 :term:`shots`." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from pytket.extensions.qiskit import AerBackend\n", - "from lambeq import TketModel\n", - "\n", - "all_circuits = train_circuits + val_circuits\n", - "\n", - "backend = AerBackend()\n", - "backend_config = {\n", - " 'backend': backend,\n", - " 'compilation': backend.default_compilation_pass(2),\n", - " 'shots': 8192\n", - "}\n", - "\n", - "model = TketModel.from_diagrams(all_circuits, backend_config=backend_config)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " The model can also be instantiated by calling :py:meth:`.TketModel.from_checkpoint`, in case a pre-trained checkpoint is available." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define loss and evaluation metric" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We use standard binary cross-entropy as the loss. Optionally, we can provide a dictionary of callable evaluation metrics with the signature ``metric(y_hat, y)``." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import BinaryCrossEntropyLoss\n", - "\n", - "# Using the builtin binary cross-entropy error from lambeq\n", - "bce = BinaryCrossEntropyLoss()\n", - "\n", - "acc = lambda y_hat, y: np.sum(np.round(y_hat) == y) / len(y) / 2 # half due to double-counting\n", - "eval_metrics = {\"acc\": acc}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialise trainer" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In ``lambeq``, quantum pipelines are based on the :py:class:`.QuantumTrainer` class. Furthermore, we will use the standard ``lambeq`` SPSA optimizer, implemented in the :py:class:`.SPSAOptimizer` class. This needs three hyperameters:\n", - "\n", - "- ``a``: The initial learning rate (decays over time),\n", - "- ``c``: The initial parameter shift scaling factor (decays over time),\n", - "- ``A``: A stability constant, best choice is approx. 0.01 * number of training steps." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import QuantumTrainer, SPSAOptimizer\n", - "\n", - "trainer = QuantumTrainer(\n", - " model,\n", - " loss_function=bce,\n", - " epochs=EPOCHS,\n", - " optimizer=SPSAOptimizer,\n", - " optim_hyperparams={'a': 0.05, 'c': 0.06, 'A':0.001*EPOCHS},\n", - " evaluate_functions=eval_metrics,\n", - " evaluate_on_train=True,\n", - " verbose='text',\n", - " log_dir='RelPron/logs',\n", - " seed=0\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create datasets" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To facilitate data shuffling and batching, ``lambeq`` provides a native :py:class:`.Dataset` class. Shuffling is enabled by default, and if not specified, the batch size is set to the length of the dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "from lambeq import Dataset\n", - "\n", - "train_dataset = Dataset(\n", - " train_circuits,\n", - " train_labels,\n", - " batch_size=BATCH_SIZE)\n", - "\n", - "val_dataset = Dataset(val_circuits, val_labels, shuffle=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We can now pass the datasets to the :py:meth:`~lambeq.Trainer.fit` method of the trainer to start the training. Here, we perform early stopping if the validation accuracy doesn't improve within the specified `early_stopping_interval` epochs." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch 1: train/loss: 0.9327 valid/loss: 3.2976 train/time: 13.22s valid/time: 2.94s train/acc: 0.5143 valid/acc: 0.5645\n", - "Epoch 2: train/loss: 2.1623 valid/loss: 1.4883 train/time: 14.20s valid/time: 2.83s train/acc: 0.5929 valid/acc: 0.6290\n", - "Epoch 3: train/loss: 0.2750 valid/loss: 1.7657 train/time: 13.35s valid/time: 3.04s train/acc: 0.6429 valid/acc: 0.7742\n", - "Epoch 4: train/loss: 1.0235 valid/loss: 2.0944 train/time: 12.91s valid/time: 2.75s train/acc: 0.5786 valid/acc: 0.5161\n", - "Epoch 5: train/loss: 0.7471 valid/loss: 1.1852 train/time: 13.02s valid/time: 2.87s train/acc: 0.6571 valid/acc: 0.7581\n", - "Epoch 6: train/loss: 0.9657 valid/loss: 2.0165 train/time: 12.81s valid/time: 2.91s train/acc: 0.5571 valid/acc: 0.4839\n", - "Epoch 7: train/loss: 0.8952 valid/loss: 1.7803 train/time: 12.73s valid/time: 3.00s train/acc: 0.5714 valid/acc: 0.7258\n", - "Epoch 8: train/loss: 3.7057 valid/loss: 2.4827 train/time: 12.86s valid/time: 2.78s train/acc: 0.4571 valid/acc: 0.6613\n", - "Early stopping!\n", - "Best model (epoch=3, step=21) saved to\n", - "RelPron/logs/best_model.lt\n", - "\n", - "Training completed!\n", - "train/time: 1m45s train/time_per_epoch: 13.14s train/time_per_step: 1.88s valid/time: 23.12s valid/time_per_eval: 2.89s\n" - ] - } - ], - "source": [ - "trainer.fit(train_dataset, val_dataset,\n", - " early_stopping_criterion='acc',\n", - " early_stopping_interval=5,\n", - " minimize_criterion=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Results\n", - "\n", - "Finally, we visualise the results and evaluate the model on the test data." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Validation accuracy: 0.7419354838709677\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADXZ0lEQVR4nOzdd3QU1f/G8fem94QEQgIEQq+h9450FSmioCJFsIKKiCiKgBV7QxT9Wig2FBAVpPfee28hlAQIkN6z8/sDsz8jNbDJpDyvc/Ycd3Zm7rMT3NnPzp17LYZhGIiIiIiIiMhtcTA7gIiIiIiISGGg4kpERERERMQOVFyJiIiIiIjYgYorERERERERO1BxJSIiIiIiYgcqrkREREREROxAxZWIiIiIiIgdqLgSERERERGxAxVXIiIiIiIidqDiSsREAwcOJDQ09Ja2HT9+PBaLxb6BRESkSAkPD8disTBlyhSzo4gUCiquRK7CYrHc1GPFihVmRy3wfvrpJz755BOzY4iI2M2UKVOynSvc3NwoVaoUnTt35rPPPiM+Pt7siAK8/fbbzJkzJ8/bPXPmDOPHj2fHjh153rbkPothGIbZIUTymx9++CHb82nTprF48WKmT5+ebXnHjh0pWbLkLbeTnp6O1WrF1dU1x9tmZGSQkZGBm5vbLbefH9x9993s2bOH8PBws6OIiNjFlClTGDRoEK+//jrly5cnPT2dqKgoVqxYweLFiylbtix//vkntWvXNjsq4eHhlC9fnu+//56BAweaHSdPeXl50bt37zy/ardlyxYaNWpUJI95UeBkdgCR/Khfv37Znm/YsIHFixdfsfy/kpKS8PDwuOl2nJ2dbykfgJOTE05O+l9YRCS/6tq1Kw0bNrQ9Hz16NMuWLePuu+/mnnvuYf/+/bi7u5uYUETsTd0CRW5R27ZtqVWrFlu3bqV169Z4eHjw8ssvA/DHH39w1113UapUKVxdXalYsSJvvPEGmZmZ2fbx33uusvq+f/DBB3z99ddUrFgRV1dXGjVqxObNm7Nte7V7riwWC8OGDWPOnDnUqlULV1dXatasyYIFC67Iv2LFCho2bIibmxsVK1bkq6++uun7uA4fPsy9995LUFAQbm5ulClThr59+xIbG5ttvR9++IEGDRrg7u6Ov78/ffv25eTJk9mO4bx58zhx4oSt+8yt3oMmIlIQ3HHHHbz66qucOHHiil4SBw4coHfv3vj7++Pm5kbDhg35888/ba9v2bIFi8XC1KlTr9jvwoULsVgszJ0717bs9OnTPPLII5QsWdJ2Pvjuu+9uKueyZcto1aoVnp6e+Pn50b17d/bv359tnaxzxoEDB7j//vvx8fEhICCAZ599lpSUlGzrZp2ffvvtN2rUqIG7uzvNmjVj9+7dAHz11VdUqlQJNzc32rZte9XeDBs3bqRLly74+vri4eFBmzZtWLt27VUzHTlyhIEDB+Ln54evry+DBg0iKSkpW57ExESmTp1qO//c6CrSxIkTqVmzJh4eHhQrVoyGDRvy008/ZVvnRsd8xYoVNGrUCIBBgwbZ2tY9b4WHfvYWuQ0XLlyga9eu9O3bl379+tm6CE6ZMgUvLy9GjBiBl5cXy5YtY+zYscTFxfH+++/fcL8//fQT8fHxPP7441gsFt577z169erFsWPHbni1a82aNcyePZunnnoKb29vPvvsM+69914iIiIICAgAYPv27XTp0oXg4GBee+01MjMzef311ylRosQNs6WlpdG5c2dSU1N5+umnCQoK4vTp08ydO5eYmBh8fX0BeOutt3j11Ve5//77GTJkCOfPn2fixIm0bt2a7du34+fnxyuvvEJsbCynTp3i448/Bi530xARKcwefvhhXn75ZRYtWsSjjz4KwN69e2nRogWlS5fmpZdewtPTk19//ZUePXowa9YsevbsScOGDalQoQK//vorAwYMyLbPGTNmUKxYMTp37gzA2bNnadq0qa2oKVGiBPPnz2fw4MHExcUxfPjwa+ZbsmQJXbt2pUKFCowfP57k5GQmTpxIixYt2LZt2xU/gt1///2EhoYyYcIENmzYwGeffcalS5eYNm1atvVWr17Nn3/+ydChQwGYMGECd999N6NGjeKLL77gqaee4tKlS7z33ns88sgjLFu2zLbtsmXL6Nq1Kw0aNGDcuHE4ODjw/fffc8cdd7B69WoaN258Raby5cszYcIEtm3bxjfffENgYCDvvvsuANOnT2fIkCE0btyYxx57DICKFSte85j873//45lnnqF379624nHXrl1s3LiRBx988KaPefXq1Xn99dcZO3Ysjz32GK1atQKgefPm12xbChhDRG5o6NChxn//d2nTpo0BGJMnT75i/aSkpCuWPf7444aHh4eRkpJiWzZg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ihVjwIABPPPMM1gsFqZPn27Xbnm3a/z48SxatIgWLVrw5JNPkpmZyeeff06tWrXYsWPHdbddtmwZw4YN47777qNKlSpkZGQwffp024kFLv/K+OabbzJ69GjCw8Pp0aMH3t7eHD9+nN9//53HHnuMkSNHApdPmjNmzGDEiBE0atQILy8vunXrltuHQEQk182fP58DBw6QkZHB2bNnWbZsGYsXL6ZcuXL8+eefuLm52dadNGkSLVu2JCwsjEcffZQKFSpw9uxZ1q9fz6lTp9i5c2e2fffp04exY8fi5ubG4MGDcXDI/nv5O++8w/Lly2nSpAmPPvooNWrU4OLFi2zbto0lS5Zw8eLFa+Z+//336dq1K82aNWPw4MG2odh9fX0ZP378FesfP36ce+65hy5durB+/Xp++OEHHnzwQerUqXN7B/AfDg4OfPPNN3Tt2pWaNWsyaNAgSpcuzenTp1m+fDk+Pj789ddfOd5vgwYNWLJkCR999BGlSpWifPnytsE0/qtTp04EBQXRokULSpYsyf79+/n888+56667bINx3Owxr1ixIn5+fkyePBlvb288PT1p0qRJtqt/UoDl/QCFIgXPtYZiv9awrGvXrjWaNm1quLu7G6VKlTJGjRplLFy40ACM5cuX29a71lDs77///hX7BIxx48bZnl9rKPahQ4desW25cuWuGG526dKlRr169QwXFxejYsWKxjfffGM8//zzhpub2zWOwmXHjh0zHnnkEaNixYqGm5ub4e/vb7Rr185YsmTJFevOmjXLaNmypeHp6Wl4enoa1apVM4YOHWocPHjQtk5CQoLx4IMPGn5+fgagYdlFpMDLGoo96+Hi4mIEBQUZHTt2ND799NNsw47/29GjR43+/fsbQUFBhrOzs1G6dGnj7rvvNmbOnHnFuocPH7btf82aNVfd39mzZ42hQ4caISEhhrOzsxEUFGS0b9/e+Prrr23rXG0odsMwjCVLlhgtWrQw3N3dDR8fH6Nbt27Gvn37sq2TdR7at2+f0bt3b8Pb29soVqyYMWzYMCM5OTnbulc7P13rnLd8+fKrTvmxfft2o1evXkZAQIDh6upqlCtXzrj//vuNpUuXXpHp/Pnz2bbN+pv8eyj4AwcOGK1btzbc3d0N4LrDsn/11VdG69atbW1XrFjReOGFF4zY2Nhs693MMTeMy1Os1KhRwzYFioZlLzwshpGPfk4XEVP16NGDvXv32kZmEhERuZbx48fz2muvcf78eYoXL252HJF8QfdciRRRycnJ2Z4fPnyYv//+m7Zt25oTSERERKSA0z1XIkVUhQoVGDhwIBUqVODEiRN8+eWXuLi4MGrUKLOjiYiIiBRIKq5EiqguXbrw888/ExUVhaurK82aNePtt9++5sS/IiIiInJ9uudKRERERETEDnTPlYiIiIiIiB2ouBIREREREbED3XN1FVarlTNnzuDt7Y3FYjE7johIkWEYBvHx8ZQqVeqKSVGLOp2bRETMkZNzk4qrqzhz5gwhISFmxxARKbJOnjxJmTJlzI6Rr+jcJCJirps5N6m4ugpvb2/g8gH08fExOY2ISNERFxdHSEiI7XNY/p/OTSIi5sjJuUnF1VVkdbfw8fHRCUxExATq9nYlnZtERMx1M+cmdWgXERERERGxAxVXIiIiIiIidqDiSkRERERExA5UXImIiIiIiNiBiisREZEiwmpYzY4gIlKoqbgSEREp5LZEbeGRhY/w5oY3zY4iIlKoqbgSEREp5DKNTDZHbWbRiUWkZ6abHUdEpNBScSUiIlLINSzZkAC3AGJTY1kfud7sOCIihZaKKxERkULO0cGRjuU6ArAwfKHJaURECi8VVyIiIkVA1/JdAVgWsYzUzFST04iIFE4qrkRERIqAuoF1CfQIJCE9gbWn15odR0SkUFJxJSIiUgQ4WBzoHNoZgAXhC0xOIyJSOKm4EhERKSK6hHYBYMXJFSRnJJsbRkSkEFJxJSIiUkSEFQ+jtFdpkjOSWXVqldlxREQKHRVXIiIiRYTFYrF1DdSogSIi9qfiSkREpAjJ6hq46tQqEtMTTU4jIlK4qLgSEREpQqr5V6OcTzlSM1NZcXKF2XFERAoVFVciIiJFyL+7Bi44rlEDRUTsScWViIhIEZPVNXDNmTXEpcWZnEZEpPBQcSUiIlLEVC5WmUp+lciwZrAsYpnZcURECg0VVyIiIkWQJhQWEbE/FVciIiJFUFbXwI1nNnIp5ZLJaURECgcVVyIiIkVQqG8o1fyrkWFksCRiidlxREQKBRVXIiIiRZRtQuHjmlBYRMQe8nVx9eWXX1K7dm18fHzw8fGhWbNmzJ8//7rb/Pbbb1SrVg03NzfCwsL4+++/8yitiIhIwZLVNXDz2c1EJ0ebnEZEpODL18VVmTJleOedd9i6dStbtmzhjjvuoHv37uzdu/eq669bt44HHniAwYMHs337dnr06EGPHj3Ys2dPHicXERHJ/8p4lyGseBhWw8riE4vNjiMiUuBZDMMwzA6RE/7+/rz//vsMHjz4itf69OlDYmIic+fOtS1r2rQpdevWZfLkyTfdRlxcHL6+vsTGxuLj42OX3CIicmP6/L223Do2U/dO5YMtH1A/sD5Tu061235FRAqLnHz+5usrV/+WmZnJL7/8QmJiIs2aNbvqOuvXr6dDhw7ZlnXu3Jn169dfd9+pqanExcVle4iIiJgpr85NWfddbT+3najEqFxpQ0SkqMj3xdXu3bvx8vLC1dWVJ554gt9//50aNWpcdd2oqChKliyZbVnJkiWJirr+yWLChAn4+vraHiEhIXbLLyIicivy6twU5BlEvcB6GBgsCl+UK22IiBQV+b64qlq1Kjt27GDjxo08+eSTDBgwgH379tm1jdGjRxMbG2t7nDx50q77FxERyam8PDdlDWyxMFyjBoqI3I58X1y5uLhQqVIlGjRowIQJE6hTpw6ffvrpVdcNCgri7Nmz2ZadPXuWoKCg67bh6upqG5Ew6yEiImKmvDw3dQrthIPFgV3RuzidcDrX2hERKezyfXH1X1arldTU1Ku+1qxZM5YuXZpt2eLFi695j5aIiIhAcffiNCzZENDVKxGR25Gvi6vRo0ezatUqwsPD2b17N6NHj2bFihU89NBDAPTv35/Ro0fb1n/22WdZsGABH374IQcOHGD8+PFs2bKFYcOGmfUWRERECoSsgS0WHF9gchIRkYIrXxdX586do3///lStWpX27duzefNmFi5cSMeOHQGIiIggMjLStn7z5s356aef+Prrr6lTpw4zZ85kzpw51KpVy6y3ICIiUiB0LNcRR4sj+y/u50TcCbPjiIgUSAVunqu8oHlWRETMoc/fa8uLY/PE4idYe2Ytw+oO4/E6j+dKGyIiBU2hnOdKREREcpeta2C4ugaKiNwKFVciIiICwB1l78DJwYkjMUc4GnPU7DgiIgWOiisREREBwNfVlxalWgC6eiUicitUXImIiIjNv0cN1G3ZIiI5o+JKREREbNqFtMPV0ZXwuHAOXjpodhwRkQJFxZWIiIjYeLl40ap0K0BzXomI5JSKKxEREcmmc/n/HzVQXQNFRG6eiisRERHJpnXp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XP83nZsKTu6CmBmUO68VxNwFMTPk7blJV66uwsHBgTJlytz2fnx8fArUP7wsyp13CmJmUO68VhBz305mXbG6Op2bCl7ugpgZlDuvFcTcBTEz5M25ST8LioiIiIiI2IGKKxERERERETtQcZULXF1dGTduHK6urmZHyRHlzjsFMTMod14riLkLYuaioqD+bQpi7oKYGZQ7rxXE3AUxM+Rtbg1oISIiIiIiYge6ciUiIiIiImIHKq5ERERERETsQMWViIiIiIiIHai4EhERERERsQMVVyIiIiIiInag4kpERERERMQOVFyJiIiIiIjYgYorERERERERO1BxJSIiIiIiYgcqrkREREREROxAxZWIiIiIiIgdqLgSERERERGxAxVXIiIiIiIidqDiSkRERERExA5UXImIiIiIiNiBiisRERERERE7UHElIiIiIiJiByquRERERERE7EDFlYiIiIiIiB2ouBIREREREbEDFVciIiIiIiJ2oOJKRERERETEDlRciYiIiIiI2IGKKxERERERETtQcSUiIiIiImIHKq5ERERERETsQMWViIiIiIiIHai4EhERERERsQMVVyIiIiIiInag4kpERERERMQOVFyJiIiIiIjYgYorERERERERO1BxJSIiIiIiYgcqrkREREREROzAyewA+ZHVauXMmTN4e3tjsVjMjiMiUmQYhkF8fDylSpXCwUG///2bzk0iIubIyblJxdVVnDlzhpCQELNjiIgUWSdPnqRMmTJmx8hXdG4SETHXzZybVFxdhbe3N3D5APr4+JicRkSk6IiLiyMkJMT2OSz/T+cmERFz5OTcpOLqKrK6W/j4+OgEJiJiAnV7u5LOTSIi5rqZc5M6tIuIiIgUYaGhoXzyySdmx8gV48ePp27dumbHkCJExZWIiIiInWRmZrJixQp+/vlnVqxYQWZmptmRTLVixQosFgsxMTGmtD9y5EiWLl1qSttSNKm4EhEREbGD2bNnU6lSJdq1a8eDDz5Iu3btqFSpErNnzzY72lWlpaWZHSHXeXl5ERAQYHYMKUJUXImIiIjcptmzZ9O7d2/CwsJYv3498fHxrF+/nrCwMHr37n3bBZbVamXChAmUL18ed3d36tSpw8yZM22vZ2ZmMnjwYNvrVatW5dNPP822j4EDB9KjRw/eeustSpUqRdWqVa9o55FHHuHuu+/Otiw9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fp3HH39c6yj/6JVXXiElJYU6depgMBgwmUy89957xMTEaB1NuDi5NtmfXJccR65NjqXJtcluY2KlHC449eKpp55SqlSpopw9e1brKEWSlZWlHDt2TNm1a5fyyiuvKMHBwcqff/6pday7io+PV0JCQpT9+/dbHnOF6Rd/d+3aNcXf39+pp7q4u7srUVFRBR579tlnlVatWmmUyHpdu3ZVHnroIa1jFMnChQuVihUrKgsXLlQOHDigLFiwQAkKClLmzZundTRxC7k22Z+rXZvkuuRYcm1yLC2uTVJc2YmrXcDGjBmjVKxYUTl58qTWUYqtU6dOyqhRo7SOcVfLly9XAMVgMFhugKLT6RSDwaDk5uZqHbHIWrRoobzyyitax7ijypUrK0888USBx7744gulfPnyGiWyzunTpxW9Xq+sWLFC6yhFUrFiReXzzz8v8Ng777yj1K5dW6NEojBybXI8Z782yXXJseTa5FhaXJtkWmAppygKzz77LMuXL2f9+vVUrVpV60jFZjabycrK0jrGXXXq1ImDBw8WeGz48OHUqVOHl19+GYPBoFEy66SlpXHixAmGDBmidZQ7io6Ovq1189GjR6lSpYpGiawzd+5cQkJCePDBB7WOUiQZGRno9QWX8RoMBsxms0aJhCuTa5PjyHXJseTa5FhaXJukuLKhtLQ0jh8/bvn61KlT7Nu3j6CgICpXrqxhsjsbM2YM3333HStXrsTPz4+EhAQAAgIC8Pb21jjdnY0fP54ePXpQuXJlUlNT+e6771i/fj2//PKL1tHuys/P77Y1A0ajkbJlyzr1WoIXX3yRnj17UqVKFS5cuMCECRMwGAwMHjxY62h39O9//5vWrVszadIkBgwYwI4dO5g5cyYzZ87UOto/MpvNzJ07l2HDhrlEa2GAnj178t5771G5cmXq16/P3r17mTJlCiNGjNA6Wqkn1ybHccVrk1yXHEuuTY6lybXJbmNipdC6desU4LbbsGHDtI52R4XlBZS5c+dqHe2uRowYoVSpUkXx8PBQypUrp3Tq1En59ddftY5VLK4wt33gwIFKeHi44uHhoVSoUEEZOHCgcvz4ca1j/aMffvhBadCggeLp6anUqVNHmTlzptaRiuSXX35RAOXIkSNaRymylJQUZezYsUrlypUVLy8vpVq1asprr72mZGVlaR2t1JNrk+OUlGuTXJfsS65NjqPFtUmnKHbcolgIIYQQQgghSgnZ50oIIYQQQgghbECKKyGEEEIIIYSwASmuhBBCCCGEEMIGpLgSQgghhBBCCBuQ4koIIYQQQgghbECKKyGEEEIIIYSwASmuhBBCCCGEEMIGpLgSQgghhBBCCBuQ4kqIUkyn07FixQqtYwghhBCAXJeE65PiSgiNPP744+h0uttu3bt31zqaEEKIUkiuS0LcOzetAwhRmnXv3p25c+cWeMzT01OjNEIIIUo7uS4JcW9k5EoIDXl6ehIWFlbgFhgYCKhTI6ZPn06PHj3w9vamWrVqLF26tMDzDx48SMeOHfH29qZs2bKMGjWKtLS0AsfMmTOH+vXr4+npSXh4OM8880yBP79y5Qp9+/bFx8eHmjVrsmrVKsufXbt2jZiYGMqVK4e3tzc1a9a87aIrhBCi5JDrkhD3RoorIZzYG2+8Qb9+/di/fz8xMTEMGjSIw4cPA5Cenk63bt0IDAxk586dLFmyhN9//73ARWr69OmMGTOGUaNGcfDgQVatWkWNGjUKvMbbb7/NgAEDOHDgAA888AAxMTEkJSVZXv/QoUP8/PPPHD58mOnTpxMcHOy4H4AQQginItclIf6BIoTQxLBhwxSDwaAYjcYCt/fee09RFEUBlKeeeqrAcyIjI5XRo0criqIoM2fOVAIDA5W0tDTLn//000+KXq9XEhISFEVRlPLlyyuvvfbaHTMAyuuvv275Oi0tTQGUn3/+WVEURenZs6cyfPhw23zDQgghnJpcl4S4d7LmSggNdejQgenTpxd4LCgoyHI/KiqqwJ9FRUWxb98+AA4fPkzjxo0xGo2WP4+OjsZsNnPkyBF0Oh0XLlygU6dOd83QqFEjy32j0Yi/vz+XLl0CYPTo0fTr1489e/bQtWtX+vTpQ+vWrYv1vQohhHB+cl0S4t5IcSWEhoxG423TIWzF29u7SMe5u7sX+Fqn02E2mwHo0aMHZ86cYfXq1fz222906tSJMWPG8PHHH9s8rxBCCO3JdUmIeyNrroRwYtu2bbvt67p16wJQt25d9u/fT3p6uuXPt2zZgl6vp3bt2vj5+REREUFsbOw9ZShXrhzDhg3jm2++YerUqcycOfOezieEEMJ1yXVJiLuTkSshNJSVlUVCQkKBx9zc3CyLc5csWUKLFi1o06YN3377LTt27GD27NkAxMTEMGHCBIYNG8Zbb73F5cuXefbZZxkyZAihoaEAvPXWWzz11FOEhITQo0cPUlNT2bJlC88++2yR8r355ps0b96c+vXrk5WVxY8//mi5iAohhCh55LokxL2R4koIDa1Zs4bw8PACj9WuXZu//voLUDsmLVq0iKeffprw8HAWLlxIvXr1APDx8eGXX35h7NixtGzZEh8fH/r168eUKVMs5xo2bBiZmZl88sknvPjiiwQHB/PII48UOZ+Hhwfjx4/n9OnTeHt707ZtWxYtWmSD71wIIYQzkuuSEPdGpyiKonUIIcTtdDody5cvp0+fPlpHEUIIIeS6JEQRyJorIYQQQgghhLABKa6EEEIIIYQQwgZkWqAQQgghhBBC2ICMXAkhhBBCCCGEDUhxJYQQQgghhBA2IMWVEEIIIYQQQtiAFFdCCCGEEEIIYQNSXAkhhBBCCCGEDUhxJYQQQgghhBA2IMWVEEIIIYQQQtiAFFdCCCGEEEIIYQP/DznCQEHgugecAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "fig, ((ax_tl, ax_tr), (ax_bl, ax_br)) = plt.subplots(2, 2, sharex=True, sharey='row', figsize=(10, 6))\n", - "ax_tl.set_title('Training set')\n", - "ax_tr.set_title('Development set')\n", - "ax_bl.set_xlabel('Epochs')\n", - "ax_br.set_xlabel('Epochs')\n", - "ax_bl.set_ylabel('Accuracy')\n", - "ax_tl.set_ylabel('Loss')\n", - "\n", - "colours = iter(plt.rcParams['axes.prop_cycle'].by_key()['color'])\n", - "range_ = np.arange(1, len(trainer.train_epoch_costs)+1)\n", - "ax_tl.plot(range_, trainer.train_epoch_costs, color=next(colours))\n", - "ax_bl.plot(range_, trainer.train_eval_results['acc'], color=next(colours))\n", - "ax_tr.plot(range_, trainer.val_costs, color=next(colours))\n", - "ax_br.plot(range_, trainer.val_eval_results['acc'], color=next(colours))\n", - "\n", - "# mark best model as circle\n", - "best_epoch = np.argmax(trainer.val_eval_results['acc'])\n", - "ax_tl.plot(best_epoch + 1, trainer.train_epoch_costs[best_epoch], 'o', color='black', fillstyle='none')\n", - "ax_tr.plot(best_epoch + 1, trainer.val_costs[best_epoch], 'o', color='black', fillstyle='none')\n", - "ax_bl.plot(best_epoch + 1, trainer.train_eval_results['acc'][best_epoch], 'o', color='black', fillstyle='none')\n", - "ax_br.plot(best_epoch + 1, trainer.val_eval_results['acc'][best_epoch], 'o', color='black', fillstyle='none')\n", - "\n", - "ax_br.text(best_epoch + 1.4, trainer.val_eval_results['acc'][best_epoch], 'early stopping', va='center')\n", - "\n", - "# print test accuracy\n", - "model.load(trainer.log_dir + '/best_model.lt')\n", - "val_acc = acc(model(val_circuits), val_labels)\n", - "print('Validation accuracy:', val_acc.item())" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. rubric:: See also:\n", - "\n", - "- `Training: Classical case <./trainer-classical.ipynb>`_\n", - "- `Training: Hybrid case <./trainer-hybrid.ipynb>`_\n", - "- `Advanced: Manual training <../manual-training.rst>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/training-symbols.ipynb b/docs/tutorials/training-symbols.ipynb deleted file mode 100644 index ddbf5fd4..00000000 --- a/docs/tutorials/training-symbols.ipynb +++ /dev/null @@ -1,364 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Introduction to symbols" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The parameterisable parts of a diagram are represented by :term:`symbols `; these are instances of the :py:class:`lambeq.Symbol` class. Let's create a tensor diagram for a sentence:\n", - "\n", - ":download:`Download code <../_code/training-symbols.ipynb>`" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAIHCAYAAABwnIDaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABDYklEQVR4nO3deXiU9b3w/08WdkLYQYpsiuzQsihKwbWCWtGni9YWt1arx609PfpUW1vRqqjtqdS1erRWq9WeR62CVnAXKlZQ3AURFXFDBWUJyJJkfn/0x1yERUEC94Tv63Vdc5FMJpPP8M195553ZiZFuVwuFwAAAACQiOKsBwAAAACA7UkQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAkiKIAQAAAJAUQQwAAACApAhiAAAAACRFEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAkiKIAQAAAJAUQQwAAACApAhiAAAAACRFEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJKU06wEKwfz582PhwoVZj/GFWrduHZ06dcp6jO2urqwPhS/VbSjCdgQAW8Ixg2MGtl6q21Fd2YZSXZ91JR/E5s+fH7169YoVK1ZkPcoXaty4ccyaNSupb9q6tD4UvhS3oQjbEQBsKccMjhnYeiluR3VpG0pxfdaXfBBbuHBhrFixIm699dbo1atX1uNs0qxZs2LMmDGxcOHCpL5h68r6UPhS3YYibEcAsCUcMzhmYOuluh3VlW0o1fVZX/JBbK1evXrFwIEDsx6DTbA+sPVsRwDA5nDMAFvHNlQ3eFF9AAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAkiKIAQAAAJAUQQwAAACApAhiAAAAACRFEAMAAAAgKYJYLRo7dmwUFRXFwoULsx6FRB133HHRpUuX/Pvz5s2LoqKi+N3vfpfdUADEn//85ygqKop58+ZlPQoAm6moqChOO+20rMeAzeZ7dssIYhux9qD1mWeeyXoUAAAAtqFp06bF2LFjY/HixVmPAmxHghgAwDZ29NFHx2effRadO3fOehQA1jNt2rQ4//zzBTFIjCAGALCNlZSURMOGDaOoqCjrUQCAHUgul4vPPvss6zHqJEFsMz366KMxfPjwaNKkSTRv3jwOO+ywmDVr1kYvu3jx4jjuuOOiefPmUV5eHscff3ysWLGixmXWPrf3nnvuib59+0aDBg2iT58+MWnSpO1xc8jIiy++GEVFRTFhwoT8ec8++2wUFRXFwIEDa1z2oIMOij322CMiIu6999445JBDokOHDtGgQYPYZZdd4je/+U1UVVVt8Qy5XC5+/OMfR/369ePuu++OiIg1a9bE+eefH927d4+GDRtGq1at4utf/3o89NBDW3FrAVhr/dcQ69KlS3zzm9+Mf/7zn7H77rtHw4YNo1u3bnHLLbdkOyhAYsaOHRtnnXVWRER07do1ioqKNnjNx825z/bee+/FD3/4w2jXrl3+cn/605+2182ggK19rfHZs2fHEUccEc2aNYtWrVrFT37yk1i5cmX+cjfddFPst99+0bZt22jQoEH07t07rr322g2ub+0xxOTJk2Pw4MHRqFGjuO666zb59S+88MIoLi6OK6+8cpvcvrqsNOsB6oKHH344DjrooOjWrVuMHTs2Pvvss7jyyitj2LBhMXPmzBovYh4RccQRR0TXrl1j3LhxMXPmzLjhhhuibdu2cemll9a43D//+c+4++6745RTTomysrK44oor4tvf/nbMnz8/WrVqtR1vIdtL3759o3nz5jFlypQYPXp0RERMnTo1iouL44UXXoilS5dGs2bNorq6OqZNmxY//vGPI+Lfd6SaNm0aP/vZz6Jp06bx6KOPxq9//etYunRp/Pa3v93sr19VVRU//OEP429/+1v8/e9/j0MOOSQi/r2THjduXJxwwgmx++67x9KlS+OZZ56JmTNnxje+8Y3a/48AIObOnRvf+c534kc/+lEce+yx8ac//SmOO+64GDRoUPTp0yfr8QCS8K1vfSvmzJkTt99+e1x++eXRunXriIho06ZNRGzefbYPP/wwhg4dmn/QQ5s2beKBBx6IH/3oR7F06dL46U9/mtXNo4AcccQR0aVLlxg3blz861//iiuuuCI+/fTT/C/Drr322ujTp0+MHj06SktLY+LEiXHKKadEdXV1nHrqqTWu67XXXoujjjoqTjrppDjxxBOjR48eG/2a5557blx88cVx3XXXxYknnrjNb2NdI4hthrPOOitatmwZTz31VLRs2TIiIg4//PD42te+Fuedd17cfPPNNS7/ta99LW688cb8+4sWLYobb7xxgyA2a9asePXVV2OXXXaJiIh99903BgwYELfffru/DLGDKi4ujmHDhsXUqVPz502dOjUOP/zwuPfee2PatGkxatSofBwbPnx4RET89a9/jUaNGuU/5+STT46TTz45rrnmmrjwwgujQYMGX/i1KysrY8yYMTFhwoSYMGFCHHjggfmP3X///XHwwQfH9ddfX4u3FoDP89prr8WUKVPy+/ojjjgidt5557jpppv8dWCA7aR///4xcODAuP322+Pwww/f4MEOm3Of7Ze//GVUVVXFSy+9lI9kJ598chx11FExduzYOOmkk2ocy5Omrl27xr333hsREaeeemo0a9YsrrnmmjjzzDOjf//+8cQTT9T4PjnttNNi1KhR8fvf/36DIDZ37tyYNGlSjBw5cpNf78wzz4zLL788brrppjj22GO3zY2q4zxl8gt88MEH8fzzz8dxxx2Xj2ER/95xfuMb34h//OMfG3zOySefXOP94cOHx6JFi2Lp0qU1zj/ggAPyO9a119msWbN48803a/lWUEiGDx8eM2fOjOXLl0fEv3/rdPDBB8dXv/rVfCibOnVqFBUVxde//vWIiBo7xmXLlsXChQtj+PDhsWLFipg9e/YXfs3Vq1fHd7/73bjvvvviH//4R40YFhHRvHnzeOWVV+L111+vrZsJwBfo3bt3PoZF/PvRCD169HAcAFBAvug+Wy6Xi7vuuisOPfTQyOVysXDhwvxp5MiRsWTJkpg5c2ZW41NA1o9ap59+ekREvimse59vyZIlsXDhwth7773jzTffjCVLltT43K5du24yhuVyuTjttNPiD3/4Q9x6661i2OfwCLEv8Pbbb0dEbPQhiL169YrJkyfH8uXLo0mTJvnzO3XqVONyLVq0iIiITz/9NJo1a7bJy6297Kefflors1OYhg8fHpWVlfHUU0/FzjvvHB999FEMHz48XnnllRpBrHfv3vkI+8orr8S5554bjz766AZhdf2d48aMGzcuKioq4oEHHoh99tlng49fcMEFcdhhh8Vuu+0Wffv2jVGjRsXRRx8d/fv33/obDMBGOQ4AKHxftK/++OOPY/HixXH99ddv8tkWH3300Tadkbqhe/fuNd7fZZddori4OP96dU8++WScd9558dRTT23wGuRLliyJ8vLy/Ptdu3bd5Ne55ZZboqKiIq699to46qijau8G7IA8QmwbKCkp2ej5uVzuS12OHcvgwYOjYcOGMWXKlJg6dWq0bds2dttttxg+fHhMnz49Vq1aFVOnTs0/amDx4sWx9957xwsvvBAXXHBBTJw4MR566KH8U3Crq6u/8GuOHDkymjRpEpdddlmNF25ca8SIEfHGG2/En/70p+jbt2/ccMMNMXDgwLjhhhtq98YDkOc4AKDwfdG+eu2x+JgxY+Khhx7a6GnYsGHbbV7qjnX/8vQbb7wR+++/fyxcuDB+//vfx/333x8PPfRQ/Od//mdEbHif7/Oegjts2LBo165dXHXVVfHJJ59sm+F3EB4h9gU6d+4cEf9+nY/1zZ49O1q3bl3j0WHwRerXrx+77757TJ06NTp16pQPX8OHD49Vq1bFbbfdFh9++GGMGDEiIiIef/zxWLRoUdx999358yIi3nrrrc3+mkOHDo2TTz45vvnNb8Z3v/vd+Pvf/x6lpTU3/5YtW8bxxx8fxx9/fFRUVMSIESNi7NixccIJJ9TCrQYAgMK0bpjYUm3atImysrKoqqqKAw44oBanYkfz+uuv13hk19y5c6O6ujq6dOkSEydOjFWrVsWECRNqPCrxscce2+Kvs+uuu8Zll10W++yzT4waNSoeeeSRKCsrq5XbsKPxCLEvsNNOO8VXv/rVuPnmm2Px4sX5819++eV48MEH4+CDD85uOOqs4cOHx9NPPx2PPfZYPoi1bt06evXqlX/k19rz1/5Wat1HDKxevTquueaaLfqaBxxwQNxxxx0xadKkOProo2v8lmHRokU1Ltu0adPYddddY9WqVVt+4wAAoA5Z+wCHde/vba6SkpL49re/HXfddVe8/PLLG3z8448/3trx2EFcffXVNd6/8sorIyLioIMO2uh9viVLlsRNN930pb5W//794x//+EfMmjUrDj300Pjss8++5NQ7No8Q2wy//e1v46CDDoo999wzfvSjH8Vnn30WV155ZZSXl8fYsWOzHo86aPjw4XHRRRfFO++8U+MFlUeMGBHXXXdddOnSJTp27BgREXvttVe0aNEijj322DjjjDOiqKgo/vKXv3ypp9QcfvjhcdNNN8UxxxwTzZo1i+uuuy4i/v3Czvvss08MGjQoWrZsGc8880zceeed/topAAA7vEGDBkXEv/9a5Pe+972oV69eHHrooZv9+Zdcckk89thjsccee8SJJ54YvXv3jk8++SRmzpwZDz/8sKetERH/fobP6NGjY9SoUfHUU0/FrbfeGt///vdjwIAB0bBhw6hfv34ceuihcdJJJ0VFRUX8z//8T7Rt2zY++OCDL/X1hg4dGvfee28cfPDB8Z3vfCfuueeeqFevXi3fqrrNI8Q2Ym1oWFtpDzjggJg0aVK0atUqfv3rX8fvfve7GDp0aDz55JOf+2J2sCl77bVXlJSURFlZWQwYMCB//rpPn1yrVatWcd9998VOO+0U5557bvzud7+Lb3zjG3HZZZd9qa89ZsyYuPrqq+P666+Ps846KyIizjjjjJg3b16MGzcuzjjjjHjiiSfiwgsvjP/+7//eilsJAACFb8iQIfGb3/wmXnjhhTjuuOPiqKOO2qJHdrVr1y6mT58exx9/fNx99935v/D3ySef5J/9AX/729+iQYMGcfbZZ8f9998fp512Wtx4440R8e8/4nfnnXdGUVFRnHnmmfHHP/4xfvzjH8dPfvKTrfqa++23X/zv//5vPPjggxs8S4iIolzir9w6c+bMGDRoUDz77LMxcODAiIi44oor4ic/+UnMnTu3xp/YzdLG5kxBqreb2pfy91LKtx0AtlTKPzdTvu3UrlS/lzZ2u8eOHRvnn39+fPzxx9G6deuMJ/y3VNdnfR4hthEzZsyIJk2a5F9QHwAAAIAdh9cQW8ddd90Vjz/+eNx2221xwgknbPBX+AAAAACo+xSfdZx55pmxbNmy+NGPfhSXX3551uMAAAAAsA0IYut46623sh4BAAAA2EGMHTs2xo4dm/UYbITXEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJJSmvUAhWLWrFlZj/C5Cn2+bS3128/W8z3k/wAANoefl/4P2Hqpfw8V+u0v9Pm2l+SDWOvWraNx48YxZsyYrEf5Qo0bN47WrVtnPcZ2VZfWh8KX4jYUYTsCgC3lmMExA1svxe2oLm1DKa7P+opyuVwu6yGyNn/+/Fi4cGGtXNfcuXPjyCOPjD//+c/Rr1+/WrnOtVq3bh2dOnWq1eusC2pzfSIinnrqqTjttNPi/vvvj/bt29fa9VJ7JkyYEOeff37MmDEjiotr75ndqW5DEbW/Hd1www3xv//7v/Hggw/W2nVSuy6++OJ45ZVX4rbbbst6FDbhpz/9aUREjB8/PtM52LQf/OAH0adPn/jFL36R9ShswoEHHhhHHHFEnHDCCbV6vY4ZaueYobq6OoYMGRLnnXdejB49ulauk9q1YMGCOOSQQ+Kqq66KPffcs1avO9XtqLaPu1966aU47rjj4m9/+1vsuuuutXa9qa7PupJ/hFhERKdOnWrtG6F+/foREdGjR48YOHBgrVxn6mpzfSIiv3Pq169f7LzzzrV2vdSeF154ISIiBg4cWKtBLGW1vR116NAh6tWrZz9XwNq0aRONGze2RgWsefPmERHWqIA1btw42rRpY40KWL169aJDhw7WqBbV5jFDdXV1RER07tzZGhWod955JyIiunfvbo1qSW0fd69evToiInr37h19+/attevFi+oDAAAAkBhBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiGXooosuiqKioujbt2/Wo7AJ1qjwzJgxI0477bTo06dPNGnSJDp16hRHHHFEzJkzJ+vR+P9Zo7rHvq7wWaPCYj9XN9mOCp81KnzWqLBZny1TmvUAqXr33Xfj4osvjiZNmmQ9CptgjQrTpZdeGk8++WR897vfjf79+8eCBQviqquuioEDB8a//vUvO/8CYI3qFvu6wmeNCo/9XN1jOyp81qjwWaPCZn22nCCWkTPPPDOGDh0aVVVVsXDhwqzHYSOsUWH62c9+Fn/961+jfv36+fOOPPLI6NevX1xyySVx6623ZjgdEdaorrGvK3zWqPDYz9U9tqPCZ40KnzUqbNZny3nKZAamTJkSd955Z4wfPz7rUdgEa1S49tprrxp3QCIiunfvHn369IlZs2ZlNBXrskZ1h31d4bNGhcl+rm6xHRU+a1T4rFFhsz5fjiC2nVVVVcXpp58eJ5xwQvTr1y/rcdgIa1T35HK5+PDDD6N169ZZj8ImWKPCY19X+KxR3WI/V5hsR4XPGhU+a1TYrM+X5ymT29kf//jHePvtt+Phhx/OehQ2wRrVPbfddlu89957ccEFF2Q9CptgjQqPfV3hs0Z1i/1cYbIdFT5rVPisUWGzPl+eR4htR4sWLYpf//rX8atf/SratGmT9ThshDWqe2bPnh2nnnpq7LnnnnHsscdmPQ4bYY0Kj31d4bNGdYv9XGGyHRU+a1T4rFFhsz5bRxDbjs4999xo2bJlnH766VmPwiZYo7plwYIFccghh0R5eXnceeedUVJSkvVIrMcaFSb7usJnjeoO+7nCZTsqfNao8FmjwmZ9to6nTG4nr7/+elx//fUxfvz4eP/99/Pnr1y5MtasWRPz5s2LZs2aRcuWLTOcMm3WqG5ZsmRJHHTQQbF48eKYOnVqdOjQIeuRWI81Kkz2dYXPGtUd9nOFy3ZU+KxR4bNGhc36bD2PENtO3nvvvaiuro4zzjgjunbtmj89/fTTMWfOnOjatavXnMiYNao7Vq5cGYceemjMmTMn7rvvvujdu3fWI7Eea1S47OsKnzWqG+znCpvtqPBZo8JnjQqb9dl6HiG2nfTt2zf+/ve/b3D+ueeeG8uWLYs//OEPscsuu2QwGWtZo7qhqqoqjjzyyHjqqafi3nvvjT333DPrkViPNSps9nWFzxoVPvu5wmc7KnzWqPBZo8JmfbaeILadtG7dOg4//PANzh8/fnxExEY/xvZljeqG//qv/4oJEybEoYceGp988knceuutNT4+ZsyYjCZjLWtU2OzrCp81Knz2c4XPdlT4rFHhs0aFzfpsPUEMqFOef/75iIiYOHFiTJw4cYOPuxOSPWsE7Ojs5wCg7hPEMvb4449nPQJfwBoVFutR+KxR3WTdCp81KhzWou6ydoXPGhU+a1TYrM/m86L6AAAAACRFEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAkiKIAQAAAJAUQQwoOI0aNYpBgwZFdXV11qOwCQ0bNoy+fftmPQYAievTp080bNgw6zHYhOrq6hg0aFA0atQo61HYhKKiohg8eHDkcrmsR2ET1m5HxcXyTW3zPwoUnNLS0nj22Wdj2bJlWY/CJixYsCDmz5+f9RgAJG7+/Pnx4YcfZj0Gm7B06dJ49tlno169elmPwiY0bdo0nnnmmVi6dGnWo7AJa7ejsrKyrEfZ4QhiQMFp0aJFRER8+umnGU/Cpnz66af5dQKArLRo0cLxQgFbuzaOGQpXs2bNoqioyHZUwGxH244gBhScVq1aRUTEBx98kPEkbMqCBQuiZcuWWY8BQOJatWrleKGALViwICLCMUMBKy4ujpYtW9qOCtiCBQuifv360aRJk6xH2eEIYkDB6dOnT5SXl8fDDz+c9ShsxMqVK+OJJ56Ir3/961mPAkDihg0bFlOmTIlVq1ZlPQob8dBDD0V5eXn06dMn61H4HMOGDXPcXcAeeuihGDZsWBQVFWU9yg5HEAMKTr169eKggw6KCRMmZD0KG/H444/H8uXLY/To0VmPAkDiRo8eHRUVFfH4449nPQobMWHChDj44IO9hliBGz16dEybNi0+/vjjrEdhPRUVFfHII4847t5GBDGgIB122GExc+bMeOedd7IehfXce++90a1bN7/tBSBzffv2ja5du8a9996b9SisZ/78+fHcc8/FYYcdlvUofIFvfvObkcvl4v777896FNYzefLkWL16tSC2jQhiQEEaNWpUlJaWxsSJE7MehXXkcrmYMGFCjB492sO2AchcUVFRjB49OiZMmBC5XC7rcVjHxIkTo7S0NEaNGpX1KHyBdu3axdChQz07owBNmDAh+vbtG926dct6lB2SIAYUpObNm8fee+8dd911V9ajsI7p06fH+++/77dUABSM0aNHx3vvvRfTp0/PehTWcffdd8c+++wT5eXlWY/CZhg9enRMnjw5li1blvUo/P9WrlwZ999/v+PubUgQAwrWCSecEI8++mjccccdWY9CRKxevTpOOeWU2G233bygPgAFY/jw4bHbbrvFqaeeGqtXr856HCLi9ttvj0cffTROOOGErEdhMx111FEREfGf//mfGU/CWuecc04sW7YsxowZk/UoOyxBDChYRx55ZHzve9+Lk08+Od5+++2sx0ner371q3jppZfi9ttv9+K4ABSMevXqxV//+td44YUX4te//nXW4yRv3rx5cfLJJ8dRRx0VRxxxRNbjsJk6d+4cV1xxRdx4442eoVEAJk+eHOPHj49LL700evXqlfU4OyxBDChYRUVFce2110Z5eXkcffTRUVVVlfVIyXr00Ufjt7/9bVx44YUxcODArMcBgBoGDRoUF154YVx22WXx2GOPZT1OsiorK+Poo4+OFi1axDXXXOP1RuuYH/7wh/Gtb30rTjzxxHj33XezHidZH3/8cRx33HFx4IEHxhlnnJH1ODs0QQwoaM2bN49bb701nnzyybjkkkuyHidJixYtimOOOSb23XffOPPMM7MeBwA26qyzzop99tknjj766Pjkk0+yHidJl1xySUybNi3+8pe/RPPmzbMehy1UVFQU//M//xONGzeOY445Jqqrq7MeKTm5XC5+9KMfRWVlZfz5z3+O4mLJZlvyvwsUvOHDh8c555wT5513Xlx11VX+itR29O6778YhhxwSK1asiJtvvtkPZQAKVnFxcdxyyy2xYsWKOOSQQ+K9997LeqRk5HK5uPLKK2Ps2LHxi1/8IoYPH571SHxJLVu2jFtuuSUef/zxOPbYY2PFihVZj5SMVatWxX/8x3/ExIkT48Ybb4yddtop65F2eO7ZAHXC2LFj47TTTovTTz89xowZE8uXL896pB3eY489FgMHDoz33nsvHnjggejYsWPWIwHA5+rYsWM88MAD8e6778bAgQM9fXI7WL58efzgBz+IM844I04//fQ477zzsh6JrbTffvvFrbfeGnfddVfsueee8cYbb2Q90g5v/vz5MWLEiLjpppvi+uuv95cltxNBDKgTSktLY/z48XH77bfHvffeG0OHDo05c+ZkPdYOKZfLxWWXXRYHHHBA9O/fP2bOnBl77LFH1mMBwGbZY489YubMmdG3b9844IAD4rLLLvPo8m1kzpw5sccee8SECRPijjvuiMsvvzxKS0uzHota8P3vfz+efvrpWLFiRQwaNCgmTpyY9Ug7rIcffjgGDhwYCxYsiCeffDJOPPHErEdKhiAG1Cnf+9734umnn441a9bEkCFD4u6773aQW4sWL14c3/72t+PnP/95/PznP4/JkydHmzZtsh4LALZImzZtYvLkyfF//+//jZ///Ofxne98JxYvXpz1WDuMXC4Xd911VwwePDgqKytj+vTpceSRR2Y9FrWsX79+8cwzz8Q+++wTo0ePjnPPPTfWrFmT9Vg7jMrKyrj44otj5MiRMWjQoHj22Wdj8ODBWY+VFEEMqHP69OkT06dPjwMOOCC+/e1vx7Bhw2LChAle+HMrLFiwIM4+++zo3LlzPPLII3HPPffExRdfHCUlJVmPBgBfSmlpaYwbNy7uueeeePjhh6Nz585xzjnnxIIFC7Ierc6qrq6Oe++9N4YNGxbf+c534sADD4zp06dH7969sx6NbaS8vDzuvvvuGDduXIwbNy523XXXuOKKK7x8yVZYuXJl/PGPf4wePXrEL3/5y/jlL38Z//jHP6J169ZZj5YcQQyok5o1axZ33nln3HfffVFSUhKHHXZY9OvXL26++eZYvXp11uPVGXPnzo2TTjopunTpEtdcc02cdNJJMWvWrDjssMOyHg0AasVhhx0Ws2bNipNOOimuvvrq6NKlS5x88skxd+7crEerM1avXh1//vOfo2/fvnH44YdHSUlJ3HffffH//t//i2bNmmU9HttYcXFxnH322fH888/HiBEj4mc/+1l07tw5zj///Fi0aFHW49UZixcvjnHjxkWXLl3i1FNPjcGDB8ezzz4bF1xwgV9CZ0QQA+qsoqKiOOSQQ2Lq1Knxz3/+M3bZZZc47rjjYtddd43x48fHkiVLsh6xIOVyuZgxY0YceeSR0aNHj7jnnnvivPPOi/nz58dll10WHTp0yHpEAKhVHTp0iMsuuyzmz58f5513Xvz973+PHj16xJFHHhkzZszw8gubsGTJkhg/fnzssssucfzxx8euu+4a//znP2Pq1KlxyCGHRFFRUdYjsh3169cv/vKXv8TcuXPj+9//flx66aXRqVOn+OlPfxrz5s3LeryC9e6778bPf/7z6NSpU4wdOzYOP/zweO211+Jvf/tbDBw4MOvxkiaIATuEtU+bfOmll2LfffeNs846K1q3bh177713jBs3Lp577rmkn1K5ePHiuPPOO+OEE06ITp06xe677x7PPPNMXH311TFv3rw455xzonnz5lmPCQDbVPPmzeOcc86JefPmxdVXXx3PPPNM7L777tGpU6c48cQT484770z6tcaqq6tj5syZMW7cuNh7772jdevWcdZZZ8V+++0XL7/8ckyYMCGGDRuW9ZhkrEuXLnHF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Y445Jt5444244IILon79+lmPBwAAdYogBuspKSmJb33rW/H000/Ho48+Gu3atYujjjoqvvKVr8Spp54aU6dOjerq6qzHBBKwcOHCuO6662LfffeNrl27xm233RY///nPY/78+TF+/Pjo1KlT1iMCAECdJIjBJhQVFcW+++4bkydPjueffz6OOeaYmDhxYowYMSI6deoUP/vZz2L69OmeUgnUqsWLF8dNN90Uo0aNivbt28epp54a9evXjxtuuCHmz58f5513XrRq1SrrMQEAoE4rzXoAqAsGDBgQAwYMiEsvvTSeeuqpuOOOO+Kvf/1rXH755bHTTjvFiBEj8qfevXtHcbHWDGyeJUuWxLRp0+KJJ56IKVOmxIwZM6KqqipGjBgRV155ZXz729+Otm3bZj0mAADsUAQx2ALFxcUxbNiwGDZsWIwfPz6eeOKJePDBB2PKlCnxk5/8JCorK6NVq1YxfPjwfCAbMGBAlJba1IB/W7hwYUydOjWmTJkSU6ZMieeffz6qq6ujffv2sffee8eYMWPisMMOi6985StZjwoAADss99LhSyopKYn99tsv9ttvv4iIWL58efzrX//K38n9xS9+EStXroyysrIYNmxY7L333jF8+PDo27dvlJeXZzw9sD1UVVXF22+/HdOnT8/vG1555ZWIiOjSpUuMGDEiTjnllBgxYkTsuuuuUVRUlPHEAACQBkEMakmTJk1i//33j/333z8iIlatWhXPPPNM/mlQF110UVRUVERERPv27aNnz54bnHbeeWdPt4Q6qKKiIubMmROzZ8+ucZozZ06sWrUqIiJ69OgRI0aMiLPPPjv/WoQAAEA2BDHYRho0aJB/euUvfvGLqKysjJdeeilmzZoVr732WsyePTumTZsWN910U/4Oc6NGjaJHjx4bhLLu3btH48aNM75FkLZcLhfvv/9+Pnat3Y5nz54d77zzTv5yO+20U/Ts2TO+/vWvxwknnBA9e/aMAQMGRLt27TKcHgAAWJcgBttJaWlpfO1rX4uvfe1rNc6vqqqK+fPnb/DIkkcffTQ++uij/OU6d+68QSjbddddo127dlGvXr3tfXNgh5TL5WLp0qXxzjvv1Ahea09rH+VZr1696N69e/To0SPGjBmT3yZ79OjhKdEAAFAHCGKQsZKSkujatWt07do1DjrooBof+/TTTze4Uz5p0qS46qqroqqqKn+5Vq1aRfv27b/w1LJlS0/JJEmfffZZfPjhh7FgwYIap42dt3LlyvzntWjRInr16hX9+/ePI444Ih++unbt6o9lAABAHeZoHgpYixYtYujQoTF06NAa569evTrefPPNePPNNze4Y//OO+/EjBkzYsGCBbF06dIan1daWhpt27bdrHjWtGlTL/BNQausrIyPP/54syLXkiVLanxuSUlJjW2hV69ese++++bf79ChQ/To0SNat25tOwAAgB2QIAZ1UP369fOPVPk8K1as2GgcWHt6+eWX45FHHokFCxbkX8dsrUaNGkX79u2jRYsWUVZWFs2aNYuysrL8ad33N/V2WVlZ1K9ff1v+V1AH5XK5WL58eSxbtiyWLl0ay5Yty5/WfX9TH1u6dGl8/PHH8fHHH0cul6tx3S1btsxHra985SsxaNCgGqG3Xbt20b59+2jVqlWUlJRk9D8AAABkTRCDHVjjxo3zT8f8PLlcLpYsWbLRaLZ48eJ8hHjvvfc2iBMrVqz43Otu0KDBZoWzdd9v2rRp1K9fP+rXrx/16tXLv73+++u/LXB8eblcLiorK2P16tWxevXqWLNmzUbfXv/9lStXblHMWntaP2Stq6SkZJPfLx06dIiysrL8o7vWBq727dtH27Zto0GDBtvxfw0AAKirBDEgioqKonnz5tG8efMvfNTZ+qqqqqKiomKzY8jatxcuXBhvvfXWFoWSL1JcXLxZ4WxzA1v9+vWjuLg4ioqK8v+uPW3J+8XFxdGoUaP47LPPIpfLRS6Xi+rq6vzbX+b9NWvWbDJafV7A+ry3t8amwmfr1q2ja9eumxVC177dsGFDT1MEAAC2KUEM2ColJSVRXl5eK39Zb+1T6ZYvX75FYWdrLrtmzZpYsWJFLF68eKOXXTdEbUm0Wv9jPXv2jFmzZm11XFt7+rzIV79+/fyj7DY3AH7Zy64NYZ4aCwAA1CWCGFAwioqKomnTptG0adOsRwEAAGAHVpz1AAAAAACwPQliAAAAACRFEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAkiKIAQAAAJAUQQwAAACApAhiAAAAACRFEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAkiKIAQAAAJAUQQwAAACApAhiAAAAACRFEAMAAAAgKYIYAAAAAEkRxAAAAABIiiAGAAAAQFIEMQAAAACSIogBAAAAkBRBDAAAAICkCGIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQIYgAAAAAkRRADAAAAICmCGAAAAABJEcQAAAAASIogBgAAAEBSBDEAAAAAklKa9QA7mtLS0ujdu3esWbMm61EAgAJWXl4ejRs3znoMAIAkeYRYLWvfvn28+uqr8c4772Q9CgBQwJ577rkoLfW7SQCALAhitax58+bRs2fPuPrqq6OysjLrcQCAAvTwww/HK6+8EkOHDs16FACAJAli28ANN9wQ//rXv+Kiiy7KehQAoMAsXLgwjjnmmDjggAPiBz/4QdbjAAAkSRDbBoYNGxbnnntuXHDBBfHggw9mPQ4AUCA+++yzOP7442P16tVx8803R3GxQzEAgCw4CttGfvWrX8V+++0Xo0aNitNPPz0qKiqyHgkAyNDUqVNjwIAB8dBDD8VNN90UHTp0yHokAIBkCWLbSGlpaUyaNCl+//vfx4033hj9+vWLhx56KOuxAIDtbNmyZXHaaafFiBEjok2bNvH888/HoYcemvVYAABJE8S2oZKSkvjpT38aL730UnTt2jUOPPDA+D//5//EQw89FNXV1VmPBwBsQx999FFcdtll0bt377jpppviD3/4Q0yZMiV69uyZ9WgAAMkTxLaDXXbZJR555JH405/+FK+//noceOCBsdtuu8Vvf/vb+Pjjj7MeDwCoJblcLp544ok46qijomPHjvHrX/869tlnn3jppZfijDPOiJKSkqxHBAAgBLHtpqioKI4//vh46aWXYurUqbHnnnvGr371q+jYsWN8//vfj8mTJ8fKlSuzHhMA+BLmzZsXl19+efTu3Tv22WefmDlzZlx66aXx3nvvxV/+8pfo1q1b1iMCALCOolwul8t6iFQtWrQobr755rjuuutizpw50ahRo9h3331j5MiRMWrUqOjevXsUFRVlPSYAsJ7PPvssnnjiiZg0aVJMmjQpXnvttahXr15861vfipNPPjn23ntvP8N3AIMGDYrdd989rr322qxHAQBqmSBWAHK5XLzyyiv5g+qpU6fG6tWro2vXrjFq1KgYOXJk7LffflFWVpb1qACQpFwuF7Nnz45JkybF5MmT44knnoiVK1fGzjvvHKNGjYpRo0bF/vvvH+Xl5VmPSi0SxABgxyWIFaCKiop4/PHH8wfdc+fOjeLi4ujVq1cMGTIkhgwZEoMHD44BAwZEgwYNsh4XAHY477//fsyYMSOeeeaZ/L+LFi2KBg0axN57752PYD179vRIsB2YIAYAOy5BrA6YO3duPP744/mD8hdffDEqKyujXr160b9//xg8eHA+lPXu3TtKS0uzHhkA6oxFixblf8aujV/vv/9+RES0bds2/zN2jz32iBEjRkTjxo0znpjtRRADgB2XIFYHrVy5Ml588cUav7meNWtWVFdXR8OGDaN79+41Trvttlt079492rVr57fYACRp1apV8cYbb8Trr78er7/+esyZMyf/9nvvvRcREc2bN6/xS6bBgwdHx44d/exMmCAGADsuDyWqgxo2bBi777577L777vnzKioq4rnnnouZM2fGnDlzYs6cOXHHHXfE/PnzY23zLCsr22go6969e7Rq1SqrmwMAtWLNmjUxb968jUav+fPnR3V1dURENG3aNP/z7+tf/3r07t07hgwZErvssov4BQCQCEFsB9G0adMYPnx4DB8+vMb5K1eu3OhvxKdMmRIffPBB/nItW7bcaCzr2LFjtG7dOkpKSrb3TQKADSxfvjwWLFgQb7755gY/2956662orKyMiIgGDRrErrvuGrvttlscccQRNX62tW/fXvgCAEicILaDa9iwYfTp0yf69OmzwccqKipi7ty5NX6DPmfOnJg0aVIsXLgwf7ni4uJo27ZttG/f/gtPzZo1cycDgC2yZs2a+Oijj2LBggWbPH344YexYMGCWLZsWf7zSktLo1u3btG9e/f45je/WeOXOh07dozi4uIMbxUAAIVMEEtY06ZN46tf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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import warnings\n", - "warnings.filterwarnings('ignore')\n", - "\n", - "from lambeq import AtomicType, BobcatParser, TensorAnsatz\n", - "from lambeq.backend.tensor import Dim\n", - "\n", - "# Define atomic types\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE\n", - "\n", - "# Parse a sentence\n", - "parser = BobcatParser(verbose='suppress')\n", - "diagram = parser.sentence2diagram('John walks in the park')\n", - "\n", - "# Apply a tensor ansatz\n", - "ansatz = TensorAnsatz({N: Dim(4), S: Dim(2)})\n", - "tensor_diagram = ansatz(diagram)\n", - "tensor_diagram.draw(figsize=(12,5), fontsize=12)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - " \n", - " Class :py:class:`~lambeq.Symbol` inherits from class :py:class:`sympy.Symbol`.\n", - "\n", - "The :term:`symbols ` of the diagram can be accessed by the ``free_symbols`` attribute:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{John__n, in__s.r@n.r.r@n.r@s@n.l, park__n, the__n@n.l, walks__n.r@s}" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tensor_diagram.free_symbols" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Each symbol is associated with a specific size, which is defined from the applied ansatz." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(in__s.r@n.r.r@n.r@s@n.l, 256),\n", - " (walks__n.r@s, 8),\n", - " (John__n, 4),\n", - " (the__n@n.l, 16),\n", - " (park__n, 4)]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[(s, s.size) for s in tensor_diagram.free_symbols]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For example, you see that preposition \"in\" has been assigned 256 dimensions, which is derived by multiplying the dimensions of each individual wire ($2 \\cdot 4 \\cdot 4 \\cdot 2 \\cdot 4$), nouns are assigned 4 dimensions, and the determiner 16 dimensions.\n", - "\n", - "## Circuit symbols" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We will now convert the original diagram into a :term:`quantum circuit` and examine its parameters:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAMzCAYAAABJAM7VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1gUZ9cG8HvpRVAU7CKCJVhRrImCMUY0WGNXFGMX1MTYoknEFrvGrkSNWGJiiWLXxBhFY+zmNYpiA7GXiEYEROD5/vDbCcsusH0X9v5dl1eyU589nNmZOTPzjEwIIUBERERERERERGQhrEzdACIiIiIiIiIiImNiQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2JERERERERERGRRWBAjIiIiIiIiIiKLwoIYERERERERERFZFBbEiIiIiIiIiIjIorAgRkREREREREREFoUFMSIiIiIiIiIisigsiBERERERERERkUVhQYyIiIiIiIiIiCwKC2I6SElJQdeuXTF37lxTN6VAW7FiBTp27Ijnz5+buikF1u3bt/HRRx9h69atpm4KWbiYmBh89NFHOHv2rKmbUmClp6ejd+/emDJliqmbUqCtW7cObdu2xaNHj0zdlALr0aNHaNu2LdatW2fqphRoU6ZMQe/evfHmzRtTN4UsWGZmJvr374/x48ebuikF2tatW/HRRx/h9u3bpm4KWbi5c+eiW7duSE1NNXVTCjZBWhs7dqwAIKysrMTp06dN3ZwCKTY2VtjZ2QkAYtCgQaZuToGUlZUlgoKCBADh5uYmHj58aOomkYV69eqV8PHxEQBErVq1xOvXr03dpAJp2rRpAoAAIA4fPmzq5hRI8fHxwtnZWQAQ3bp1M3VzCqyuXbsKAMLZ2VkkJCSYujkF0m+//SZtz9OnTzd1c8iCLVq0SMrF6OhoUzenQHrw4IFwc3MTAETr1q1FVlaWqZtEFurUqVPCyspKABDjxo0zdXMKNN4hpqWzZ89i/vz5mDZtGvz8/DBgwACkp6ebulkFSmZmJgYMGAAvLy98++23WLVqFQ4fPmzqZhU4GzZswMGDB7Fu3TpYW1tjxIgRpm4SWaiIiAjcvXsXmzdvRmxsLObMmWPqJhU4sbGxmDZtGr744gsEBARg0KBBSElJMXWzChQhBIYMGYLixYtj5cqV2LJlC6Kjo03drAJnx44d2Lp1KyIjI+Hm5oYhQ4ZACGHqZhUoKSkpGDRoEAICAjB+/HhMnToVV65cMXWzyAIlJCRgwoQJCA8Px0cffYSwsDA+maGFESNGwNraGuvWrcOBAwewceNGUzeJLFB6ejoGDBiAunXrYtq0aZg3bx6fzNCFqStyBVF6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64vq1atj/vz5mg6NiIiIiKhUCA0NhZWVFUaNGoW7d+9i2rRp8PHxQfv27TUdGhEpgQkxIh23dOlSmJiYoGXLljh69CjWr1/PX6qIiIiIiFTE1NQU69evx5EjR9CqVSuYmppi6dKlmg6LiJRUTtMBEJFyzM3NERkZiV69emHkyJHo2LGjpkMiIiItkpycXCb3rWqa+i6lqQ2JdFmnTp0wYsQIbNy4Ebt27ULlypU1HRIRKYkJMaJSoGfPnvj77795YSYiIgkLCwuYmJhgyJAhGo3DxMQEFhYWGo1BGdrQjrrehkSlxZo1a7Bw4UJYWVlpOhQiUgEmxIhKCV6YiYjofWKxGMnJycjIyCh2HW5ubpg1axZ69epV7DosLCwgFouLvb2mKduO4eHhuHjxIrZu3VrsGHS9DYlKC0NDQ465iUoRJsSIiIiISimxWKxUIkUkEkEsFqNp06YqjEr3KNOOlpaWMDExKfNtSEREpG04qT4REREREREREZUpTIgREREREREREVGZwoQYERERERERERGVKUyIEREREZFGBQcHQyQSKTRxvY2NDby9vdUflI5hGxIRERUNE2JEREREpLOSkpIQHByMtLQ0TYeis9iGRERUFvEtk0RERESkM65fvw49vf9+001KSkJISAjatm0LGxsbzQWmQ9iGRERETIgRERERkQ4xNDTUdAg6j21IRETERyaJiIiIqBiOHz+OZs2awcjICHZ2dli3bp1kHisASEtLg0gkQkxMjMy2IpEIwcHBMsszMjLQr18/mJmZoWrVqpgwYQKys7Olyrw//1VMTAz69u0LAGjXrh1EIhFEIhGOHDmiyq+qNmxDIiIizeEdYkRERERUJH/88Qc6d+4MS0tLBAcHIycnB0FBQbCyslKq3n79+sHGxgYLFy7E6dOnERERgczMTMTGxsot37p1a4wfPx4RERGYNWsW7O3tAUDyv9qMbUhERKRZTIgRERERUZEEBgZCEAQcO3YMYrEYANC7d280btxYqXptbW2xZ88eAMDYsWNhZmaGyMhITJ06FU5OTjLl69atCw8PD0RERKBTp05o27atUvsvSWxDIiIizeIjk0RERESksNzcXMTHx6NHjx6SRA7w7o4iT09PpeoeO3as1Odx48YBAA4ePKhUvdqGT/cuoQAATWhJREFUbUhERKR5TIgRERERkcIePXqEV69eoX79+jLrGjZsqFTdH9ZpZ2cHPT09pKWlKVWvtmEbEhERaR4TYkRERESkcvkTw38oNzdX6TrKCrYhERGR+jAhRkREREQKs7S0hLGxMW7evCmz7vr165L/b25uDgDIysqSKnPnzp0C6/6wzpSUFOTl5cHGxqbAbXQx4cM2JCIi0jwmxIiIiIhIYfr6+vD09MTu3buRnp4uWZ6cnIz4+HjJZzMzM1hYWCAhIUFq+8jIyALrXr16tdTnlStXAgC6du1a4DampqYAZJNG2oxtSEREpHl8yyQRERERFUlISAgOHToEDw8P+Pn5IScnBytXroSDgwOuXLkiKefr64tFixbB19cXbm5uSEhIwI0bNwqsNzU1FV9++SW6dOmCU6dOIS4uDoMGDYKzs3OB27i4uEBfXx/h4eF4+vQpDA0N0b59e1SrVk2l31nV2IZERESaxTvEiIiIiKhInJycEB8fD0tLSwQGBuK7775DSEgIevbsKVUuMDAQPj4+2LFjB6ZPn47c3Fz8/PPPBda7bds2GBoaYubMmThw4AD8/f0RHR1daCzW1tZYu3YtHj58CB8fHwwcOBBJSUkq+Z7qxDYkIiLSLN4hRkRERERF1rp1a5w/f15qWXBwsNRnY2NjREVFISoqSmq5IAgy2+Vvu3379kL3K+9tib6+vvD19VUscC3CNiQiItIc3iFGRERERERERERlChNiRERERERERERUpjAhRkREREREREREZQoTYqRx5cuXR/Xq1TUdBhGR1qhSpQqMjY01HQZRkQUHB8vMbVXWGRsbo0qVKgqXZxuSulSuXBmmpqaaDoOISGswIUYa9/btWzx48EDTYRARaY0nT57g1atXmg6DiFTg1atXePLkiabDIEJWVhZevHih6TCIiLQGE2JERERERERERFSmMCFGRERERERERERlChNiRERERERERERUpjAhRkREpEUyMzPx/PlzpKWl4ciRI8jMzNR0SEREpOMyMzORlZWFe/fu8dpCRPT/mBAjIiLSAomJiRg5ciSqV6+OW7du4cCBA2jXrh1q1KiBkSNHIjExUdMhEhGRjnn/2nLlyhX8/vvvvLYQEf0/JsRIowRBQEZGBnJzc5GSksLXjBNRmSMIAkJDQ+Hm5obffvsNAQEBknXnz59HYGAgfvvtN7i5uSE0NJTnSSIdIggCnj59ipcvX3KcQyWK1xYi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xo0b57Of/WwOPvjgXfqeAYDi4DgHAArLGWLsttq3b5/58+enVatWGT58eO6+++6MHDkyX/rSl2qMGz58eMrKyjJv3rwMGTIklZWVefTRR7e57gMPPJDGjRvn2muvzSOPPJIBAwZk1qxZH1nLoYcemqlTp+add95JWVlZLrnkkixatGiXvE8AoPg4zgGAwiqpqqqqKnQRe7Jjjz02vXv3zujRowtdyh5r7NixGT16dFavXr1d40eMGJGRI0fGH10AtmX69Om58sorP9HNx6mttLQ0U6ZMSUVFRaFL2WMNGDAgzz33XF566aXtGu84BwDqhzPEAAAAACgqAjEAAAAAiopADAAAAICi4imT7LRNmzbVeBrSJ/Xb3/42mzdvzgsvvLBd4y+88MJceOGFNca3atUqrVu33uEaAAA+zB//+Me88cYbOzz/nXfeybp163bqOOeII47IoYceusM1AAC1CcTYaTNmzEj//v13ep3OnTvv8Nyjjz46b775Zho1arTTdQAAbDVq1KiMHTt2p9fZmeOcz3zmM/nJT36y0zUAAH8hEGOnnX766SkpKUlFRUW+9rWv1eve7733Xv7+7/8+p512Who29McZANi1OnbsmCQZOXJkLrzwwnrd+6233srFF1+cM844o173BYBiIEFgp5199tnp379/7r777lx77bVp06ZNve19xRVXVD8SvqSkpN72BQCKQ+/evTN37txMnTo1V111VQ488MB62beqqipDhw7NUUcdldGjR9fLngBQTNxUn11i9OjRadGiRSoqKlJVVVUvez711FOZOXNmbr/99hx55JH1sicAUFxKSkoyZcqU/PGPf8yQIUPqbd/Zs2fn8ccfz7Rp09KsWbN62xcAioVAjF2iWbNmmTZtWh5//PHMnj27zvdbt25drrjiipx77rmpqKio8/0AgOJ15JFH5vbbb8+MGTPy1FNP1fl+K1euzKBBg9K3b99069atzvcDgGIkEGOX6d69e/r27Zurr746K1eurNO9hg8fnuXLl2fGjBlp0MAfYwCgblVUVOTcc8/NFVdckXXr1tXpXgMHDkyjRo0ybty4Ot0HAIqZJIFdaty4cWnYsGEGDhz4sWM3btyYoUOH5vDDD0/Tpk1z1lln5fHHH//YeT//+c8zbty4jBw5MieccMKuKBsA4CM1aNAgM2bMyPLly3PjjTd+7PgdPc556KGHMm/evEyYMCEtWrTYFaUDAB9CIMYu1aJFi0yYMCHz5s3LQw899JFjL7/88txxxx257LLLctddd6W0tDQXXHBBnnvuuW3O+dOf/pSysrJ06NAhV1999a4uHwBgm0444YSMGDEid9xxR37+859/5NgdOc5ZvXp1+vfvnx49eqRXr167unwA4K8IxNjlevXqlR49eqR///5ZvXr1h45ZuHBh7r///owZMyZjx45NRUVFnnrqqRx99NEfecPa2267LYsWLcqsWbPSsKGHpAIA9euaa65Jhw4dUlZWlj/96U8fOmZHj3MGDx6cdevWZfLkyZ6eDQB1TCDGLldSUpLJkydn3bp1+eY3v/mhY+bNm5fS0tIaN8Rv0qRJysrKsmDBgrz99tu15ixatCg33XRThg4dmg4dOtRV+QAA29SwYcPMmjUrixYtym233fahY3bkOOfJJ5/M3XffnbFjx+aII46os/oBgD8TiFEnjjjiiIwdOzazZs3Kk08+Wav/xRdfzAknnJDmzZvXaD/zzDOTJC+99FKN9srKypSXl+fYY4/NDTfcUGd1AwB8nA4dOmTIkCG5+eabs2jRolr9n/Q4Z+3atbniiivSpUuXlJeX11ndAMBfCMSoM+Xl5enSpUuuuOKKrF27tkbfihUrcthhh9Was7Vt+fLlNdonTZqUBQsWZObMmWnSpEndFQ0AsB2GDx+eNm3apLy8PJWVlTX6Pulxzg033JAVK1Z4ejYA1CPfuNSZrU9jWrFiRYYPH16jb/369WncuHGtOVvDrvXr11e3LVmyJNddd1369++fv/3bv63bogEAtkOTJk0ya9asLFiwIJMmTarR90mOc372s5/lrrvuyqhRo3LcccfVbdEAQDWBGHXquOOOy6hRo3LnnXfmZz/7WXV706ZNs3HjxlrjN2zYUN2fJFVVVfna176WFi1aZMyYMfVTNADAdvjbv/3b9O/fP9/61reyZMmS6vbtPc7Z+vTsjh07ZtCgQfVSMwDwZwIx6tygQYPSsWPHlJeXVz+N6bDDDsuKFStqjd3advjhhydJ5syZkx//+MeZNm1amjVrVn9FAwBshzFjxuRv/uZv8rWvfS1VVVVJtv84Z8yYMXnjjTc8PRsACkAgRp3b+jSm119/PbfeemuSP9+MdvHixXn//fdrjN16FlmHDh2ycuXKDBo0KH369En37t3rvW4AgI/TrFmzTJ06NT/+8Y8zZ86cJNt3nPPqq6/mlltuydChQ3P66afXe90AUOwEYtSL008/PUOHDs3NN9+cV199NRdffHEqKyszffr06jEbN27Mt7/97Zx11lk56qijMnDgwDRs2DDjxo0rYOUAAB/tggsuSJ8+fTJo0KD87ne/+9jjnMMPPzxlZWVp27Zthg0bVsDKAaB4OTebejNs2LA8+OCDKSsry09+8pP07Nkz1113Xd55550cd9xxmT17dpYsWZJZs2ble9/7XubNm5f7778/LVu2LHTpAAAfady4cZk/f34GDhyY7373ux95nDNhwoQsXLgwzz77rKdnA0CBCMSoN02aNMnMmTNzzjnnZOLEiZkzZ05uuOGG3HvvvVm9enXat2+fhx9+OKeddlpOOeWUXHjhhenVq1ehywYA+FgtW7bM+PHjc8kll+R73/veNo9zjjrqqHTv3j0DBgzI2WefXeiyAaBolVRtvfsnO+TYY49N7969M3r06EKXsscYOHBg7r777rzyyis55phjavWXl5fn3/7t3/Lqq6/myCOPLECFAOzppk+fniuvvDKVlZWFLmWPVlpamilTpqSioqLQpewRqqqqctFFF+UXv/hFFi1alAMPPLBW/xe+8IUsXrw4r776avbff//CFAoAuIcY9W/06NFp2bJlKioq8sE89sknn8ysWbMyduxYYRgAsEcpKSnJ5MmTs3bt2nzzm9+s1X/PPffkiSeeyLRp04RhAFBgAjHqXbNmzTJt2rQ88cQTmT17dnX72rVrU1FRkfPOOy/l5eUFrBAAYMcceeSRuf322zNz5sw8+eST1e0rV67M1Vdfna985Svp1q1bASsEABKBGAXSrVu39O3bN4MGDcrKlSuTJMOHD8/y5cszY8aMNGjgjyYAsGe64oorct5556WioiJr165NkgwYMCCNGjXKHXfcUeDqAIBEIEYBjRs3Lo0aNcqAAQOycOHC3HnnnRk1alSOP/74QpcGALDDGjRokBkzZmT58uUZPnx4HnrooTz44IOZOHFiWrRoUejyAIB4yiQF1KJFi0ycODFf/vKX8+yzz6Zjx44ZNGhQocsCANhpxx9/fEaNGpVrr702s2fPzkUXXZSePXsWuiwA4L85Q4yC6tmzZ3r06JE//OEPmTVrVho2lNECAHuHQYMGpWPHjtm0aVMmTZqU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jPnre5Tcc8896dmzZ5Lk/PPPT0lJSUpKSvL000/vyrcKAHsM388AADhDrI788pe/zBe+8IW0atUqI0aMyObNm3PjjTfmkEMO2al1e/XqlTZt2mTMmDF5/vnnM378+KxevTpz5sz50PHnnnturrrqqowfPz7f+ta3cvLJJydJ9X8BoJj4fgYAIBGI1Znhw4enqqoqzz77bFq3bp0k+Yd/+IecdtppO7XuMccck3//939PkvTv3z/NmzfP5MmTM3jw4LRv377W+GOPPTbnnHNOxo8fn89//vPp0qXLTu0PAHsy388AACQumawTlZWVmT9/fr74xS9WH2wnf/5X365du+7U2v3796/xeuDAgUmSH/3oRzu1LgDs7Xw/AwCwlUCsDrz77rtZv359jj/++Fp9J5544k6t/cE127ZtmwYNGnhkOwB8DN/PAABsJRAroK037/2gysrKnV4DANgxvp8BAPZ+ArE60KpVqzRt2jRvvvlmrb433nij+tcHHXRQkuS9996rMWbp0qXbXPuDa/7qV7/Kli1b0qZNm23OcVAOAL6fAQD4C4FYHSgtLU3Xrl3z/e9/P8uWLatuf+211zJ//vzq182bN0/Lli3zzDPP1Jg/efLkba49adKkGq8nTJiQJOnevfs25+y3335Jah/YA0Ax8f0MAMBWnjJZR0aOHJnHHnss55xzTvr165fNmzdnwoQJadeuXV5++eXqceXl5bn11ltTXl6ezp0755lnnsnixYu3ue5bb72VHj16pFu3blmwYEHuu+++XHrppTn99NO3OadDhw4pLS3NbbfdljVr1qRx48b57Gc/m4MPPniXvmcA2N35fgYAIHGGWJ1p37595s+fn1atWmX48OG5++67M3LkyHzpS1+qMW748OEpKyvLvHnzMmTIkFRWVubRRx/d5roPPPBAGjdunGuvvTaPPPJIBgwYkFmzZn1kLYceemimTp2ad955J2VlZbnkkkuyaNGiXfI+AWBP4vsZAIAkKamqqqoqdBF7smOPPTa9e/fO6NGjt2v8iBEjMnLkyPhtB4C6M3369Fx55ZXbfSN8388frrS0NFOmTElFRUWhSwEA2KWcIQYAAABAURGIAQAAAFBUBGIAAAAAFBVPmUyybNmyrFq1aofmbty4MStXrsx//ud/btf4Hj16pEePHjXGt2zZMq1bt96h/YGadubzvCv4PMOu8c477+Tmm2/e4fmvvPJKtmzZkquuumq75wwcOLDG+BNPPDH9+/ff4RoAANh9Ff1N9ZctW5aTTz4569atK1gN++67b1577TV/iYad5PMMe48JEybkqquuylFHHZUDDzxwh9aoqqpKSUnJDs399a9/ncrKyqxatSr777//Dq2xN3BTfQBgb1X0Z4itWrUq69aty3333ZeTTz653vd/7bXX0qdPn6xatcpfoGEn+TzD3uPyyy/P2LFjc9JJJ2X+/Pk7HGztiFdffTUdO3bMkCFDijoMAwDYmxV9ILbVySefnDPOOKPQZQC7gM8z7PmaNWuWadOm5YILLsjs2bNz+eWX18u+lZWVKSsrS9u2bTNs2LB62RMAgPrnpvoAwG6pe/fu6du3bwYNGpSVK1fWy54TJkzIwoULM3PmzDRp0qRe9gQAoP4JxACA3da4cePSqFGjDBw4sM73euutt3L99denf//+Ofvss+t8PwAACkcgBhSN3//+9znjjDNyyy23JEm2bNmSU089tfr1J/U//sf/yJAhQ3ZlicAHtGjRIhMmTMi8efPy0EMP1dk+VVVVqaioSMuWLTN69Og62wcAgN2DQOwTuueee1JSUpJf/OIXH9rfpUuXnHrqqfVcFbA9HnjggfTs2TPXX399kuQ73/lO3n777QwYMKB6zM9//vMMGDAg7dq1y3777ZfWrVunV69eWbx4ca31hg4dmkmTJtXbpVxQrHr16pUePXqkf//+Wb169UeO3bhxY4YOHZrDDz88TZs2zVlnnZXHH3/8Y/e455578sQTT2TatGlp1qzZriodAIDdlEAMKBpz587NZZddVv167Nix6d27dw444IDqtttuuy0PPvhg/u7v/i533XVXKioq8swzz+SMM87IK6+8UmO9iy66KM2bN8/kyZPr7T1AMSopKcnkyZOzbt26fPOb3/zIsZdffnnuuOOOXHbZZbnrrrtSWlqaCy64IM8999w256xYsSJXX311+vbtm27duu3q8gEA2A0JxICi8Otf/zqNGjVK69atkyQvvvhi/u///b/p1atXjXFXX311li5dmvHjx6e8vDzDhg3Ls88+m82bN+fWW2+tMbZBgwa5+OKLM2fOnFRVVdXbe4FidMQRR2Ts2LGZNWtWnnzyyQ8ds3Dhwtx///0ZM2ZMxo4dm4qKijz11FM5+uijP/Ly5oEDB6ZRo0YZN25cXZUPAMBuRiAGFIX77ruvxtlh3//+97PPPvvk3HPPrTHuM5/5TPbZZ58abccff3zatWuX1157rda6n//857N06dK89NJLdVI38Bfl5eXp0qVLrrjiiqxdu7ZW/7x581JaWpqKiorqtiZNmqSsrCwLFizI22+/XWvOgw8+mAcffDATJ05MixYt6rR+AAB2HwKxHbRmzZqsWrWq1s+mTZsKXRoUvc2bN9dqe/DBB9OzZ8/q1z/96U9z6qmnplGjRh+7XlVVVX73u9+lZcuWtfo6deqUJPnJT36yExUD26NBgwaZMWNGVqxYkeHDh9fqf/HFF3PCCSekefPmNdrPPPPMJKkVXK9evToDBgzIRRddVOP/DwAA7P0EYjvoc5/7XFq1alXr56c//WmhS4Oi9eabbyZJunbtmj/+8Y/V7c8//3xOPPHEGvcKe/3113PMMcds17r/+q//mv/6r//Kl7/85Vp9RxxxRPbZZ58sWrRoJ6sHtsdxxx2XUaNG5c4778zPfvazGn0rVqzIYYcdVmvO1rbly5fXaB88eHDWrVuXSZMmpaSkpO6KBgBgt9Ow0AXsqSZNmpQTTjihVvs111yTysrKAlQEbH0y3Jo1a/K9730vffv2TfLnyyW3/nqr3//+9znooIM+ds3XX389/fv3z6c//en84z/+44eOOeigg7Jq1aqdrB7YXoMGDcoDDzyQ8vLyvPDCC9WXOa9fvz6NGzeuNb5JkybV/Vs98cQTufvuuzN9+vQcccQR9VM4AAC7DWeI7aAzzzwzn/vc52r9bM9fsIG6ceihhyZJOnbsmLlz5yZJNm3alCeeeCLdu3evNf7jboS/cuXK/M//+T9zwAEHVN+b6MNUVVU5uwTqUcOGDTNr1qy8/vrrNR520bRp02zcuLHW+A0bNlT3J8natWtzxRVX5Pzzz095eXn9FA0AwG5FIAbsdbp165Ynnngi7777bh577LF89rOfrXWvsBYtWmT16tXbXGPNmjXp3r173nvvvTz22GM5/PDDtzn2vffe+9D7iwF15/TTT8/QoUNz880359VXX03y50sjV6xYUWvs1ratn+Nhw4Zl5cqVmT59ujAbAKBICcSAvc7nPve5lJSU5IEHHsi9995b63LJJDnppJPy1ltvfej8DRs25MILL8zixYvz8MMP55RTTtnmXv/1X/+VP/3pTzn55JN3Wf3A9hk2bFjatm2bsrKyVFZWpkOHDlm8eHHef//9GuO23musQ4cOef7553PXXXflpptuynHHHVeIsgEA2A0IxIC9zgEHHJCuXbtm5syZee211/LpT3+61phPf/rTeeWVV2pdXlVZWZkvf/nLWbBgQf7t3/7tQ+f+tRdeeCFJ8pnPfGbXvQFguzRp0iQzZ87MwoULM3HixFx88cWprKzM9OnTq8ds3Lgx3/72t3PWWWfl4IMPTllZWTp16pRvfOMbhSscAICCc1N9YK906aWX5tJLL82NN974of0XXXRRbrrppvyf//N/8oUvfKG6/ZprrskPfvCDXHjhhfnDH/6Q++67r8a8Pn361Hj9+OOPp3Xr1unYsWNefPHFXf9GgI909tlnp3///vnWt76VV155JT179sx1112Xd955J8cdd1xmz56dJUuWZNasWRkzZkwWL16cF154IQ0bOgQCAChmjgaBvdJFF12U/fffv1aAtVWnTp3Svn37fPe7360RiL300ktJkh/+8If54Q9/WGveX6+3ZcuWPPjggykrK3MfIiig0aNH5wc/+EEqKirygx/8IEcffXTuvfferF69Ou3bt8/DDz+cv/mbv8no0aNz7bXXpn379oUuGQCAAnPJ5Cd0+eWXp6qqKp07d/7Q/qeffjqvvPJKPVcFfNC+++6bJ5544iPvETR48OB897vfzXvvvVfd9vTTT6eqqmqbP3/tBz/4Qd57773069evrt4GsB2aNWuWadOm5YknnsgDDzyQsWPHZsWKFdmwYUMWLlyYz33ucykrK0vbtm0zbNiwQpcLAMBuQCAG7LXOOuusj+y/7LLL0rp160yaNGmH1r/tttsyYMCAHHbYYTs0H9h1unXrlr59+2bQoEFZuXJljb7x48fn5z//eWbNmpXGjRsXqEIAAHYnLpkEilaDBg126ozOBQsW7MJqgJ01bty4PPbYYxkwYEDmzZuXJPnNb36T66+/PgMGDPDwCwAAqjlDDADYK7Ro0SITJ07Mgw8+mIceeihVVVWpqKhIq1atMnr06EKXBwDAbsQZYgDAXqNnz57513/91/Tv3z9vvfVWnnzyyTz22GPZf//9C10aAAC7EYHYf3vttdeKal/Ym/k8Q/EqKSnJ5MmTc8opp2Tw4MH5yle+kq5duxa6LAAAdjNFH4i1bNky++67b/r06VOwGvbdd9+0bNmyYPvD3sLnGUiSI444IjNmzMj3vve93HHHHYUuBwCA3VBJVVVVVaGLKLRly5Zl1apVOzT3wgsvTNeuXTNgwIAd3r9ly5Zp3br1Ds8H/mJnPs+7gs8zsDcpLS3NlClTUlFRUehSAAB2qaI/QyxJWrduvcN/gW3cuHEOPfTQnHHGGbu4KmBH7MznGQAAgOLgKZMAAAAAFBWBGAAAAABFRSAGAAAAQFERiO0hRowYkZKSku26WXibNm1y+eWX131RAAAAAHsggVgRWLRoUUaMGJElS5YUuhQAAACAgvOUyb3QG2+8kQYN/pJ1Llq0KCNHjkyXLl3Spk2bwhUGAAAAsBsQiO2FGjduXOgSAAAAAHZbLpmsQ88991w+9alPpUmTJmnbtm2mTZtWfS+wJFmyZElKSkpyzz331JpbUlKSESNG1GpftWpVevXqlebNm6dFixb5+te/ng0bNtQY89f3ELvnnnvSs2fPJMn555+fkpKSlJSU5Omnn96VbxUAAABgj+EMsTryy1/+Ml/4whfSqlWrjBgxIps3b86NN96YQw45ZKfW7dWrV9q0aZMxY8bk+eefz/jx47N69erMmTPnQ8efe+65ueqqqzJ+/Ph861vfysknn5wk1f8FAAAAKDYCsToyfPjwVFVV5dlnn03r1q2TJP/wD/+Q0047bafWPeaYY/Lv//7vSZL+/funefPmmTx5cgYPHpz27dvXGn/sscfmnHPOyfjx4/P5z38+Xbp02an9AQAAAPZ0LpmsA5WVlZk/f36++MUvVodhyZ/PyuratetOrd2/f/8arwcOHJgk+dGPfrRT6wIAAAAUC4FYHXj33Xezfv36HH/88bX6TjzxxJ1a+4Nrtm3bNg0aNMiSJUt2al0AAACAYiEQK6CtN9f/oMrKyp1eAwAAAIAPJxCrA61atUrTpk3z5ptv1up74403qn990EEHJUnee++9GmOWLl26zbU/uOavfvWrbNmyJW3atNnmHKEZAAAAwF8IxOpAaWlpunbtmu9///tZtmxZdftrr72W+fPnV79u3rx5WrZsmWeeeabG/MmTJ29z7UmTJtV4PWHChCRJ9+7dtzlnv/32S1I7eAMAAAAoRp4yWUdGjhyZxx57LOecc0769euXzZs3Z8KECWnXrl1efvnl6nHl5eW59dZbU15ens6dO+eZZ57J4sWLt7nuW2+9lR49eqRbt25ZsGBB7rvvvlx66aU5/fTTtzmnQ4cOKS0tzW233ZY1a9akcePG+exnP5uDDz54l75nAAAAgD2BM8TqSPv27TN//vy0atUqw4cPz913352RI0fmS1/6Uo1xw4cPT1lZWebNm5chQ4aksrIyjz766DbXfeCBB9K4ceNce+21eeSRRzJgwIDMmjXrI2s59NBDM3Xq1LzzzjspKyvLJZdckkWLFu2S9wkAAACwpympqqqqKnQRe7Jjjz02vXv3zujRo7dr/IgRIzJy5Mj4bQcAdnelpaWZMmVKKioqCl0KAMAu5QwxAAAAAIqKQAwAAACAoiIQAwAAAKCoFP1TJn/9619n2bJlOzx//fr1Wbp0af7jP/5ju8afd955eeqpp2qM/9SnPpX9999/h2sAAAAAYPsV9U31q6qqctJJJ2Xx4sUFrePGG2/MiBEjCloDAMAHuak+ALC3KuozxEpKStKlS5e89dZbefzxx3PUUUfV6/4zZ87MmDFjct5559XrvgAAAADFrKjPEEuSNWvW5JRTTknHjh3zwx/+MCUlJfWy79tvv5127dqld+/emT59er3sCQDwSThDDADYWxX9TfUPOOCATJkyJY888ki+853v1MueVVVVufLKK9OsWbPcfvvt9bInAAAAAH9W9IFYkvTo0SNf/vKXc9VVV+Xdd9+t8/3uv//+PPLII5kyZUoOPPDAOt8PAAAAgL8QiP238ePHp6qqKt/4xjfqdJ933303V111VXr16pUePXrU6V4AAAAA1CYQ+28HH3xw7rzzzsydOzcPP/zwx47fuHFjhg4dmsMPPzxNmzbNWWedlccff/xj533jG9/Ili1bMn78+F1RNgAAAACfkEDsr/Tp0yfdunXLlVdemffff/8jx15++eW54447ctlll+Wuu+5KaWlpLrjggjz33HPbnPPII49k7ty5ufPOO3PIIYfs6vIBAAAA2A5F/5TJD1q6dGlOPfXU9O3bN5MnT/7QMQsXLsxZZ52VsWPHZvDgwUmSDRs25NRTT83BBx+cn/70p7XmvP/++2nXrl3atWuXRx99tN6eZgkAsKM8ZRIA2Fs5Q+wDjj766IwZMyZTpkzJM88886Fj5s2bl9LS0hoHh02aNElZWVkWLFiQt99+u9aca6+9NqtXr860adOEYQAAAAAFJBD7EP369cvZZ5+d8vLy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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from lambeq import IQPAnsatz\n", - "\n", - "iqp_ansatz = IQPAnsatz({N: 1, S: 1}, n_layers=1)\n", - "circuit = iqp_ansatz(diagram)\n", - "circuit.draw(figsize=(12,8), fontsize=12)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Let's see the :term:`symbols ` of the :term:`circuit `:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{John__n_0,\n", - " John__n_1,\n", - " John__n_2,\n", - " in__s.r@n.r.r@n.r@s@n.l_0,\n", - " in__s.r@n.r.r@n.r@s@n.l_1,\n", - " in__s.r@n.r.r@n.r@s@n.l_2,\n", - " in__s.r@n.r.r@n.r@s@n.l_3,\n", - " park__n_0,\n", - " park__n_1,\n", - " park__n_2,\n", - " the__n@n.l_0,\n", - " walks__n.r@s_0}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "circuit.free_symbols" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In contrast to the tensor case, the above symbols are not associated with a specific size; this is because the parameters of the :term:`circuit ` are not tensors but numbers (i.e. \"tensors\" of size 1), defining rotation angles on :term:`qubits `. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## From symbols to tensors" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this section we will create actual tensors and associate them with the :term:`symbols ` of the diagram. In order to do this, we first need to fix the order of the symbols, since they are represented as a set. We can use ``sympy``'s ``default_sort_key`` for this purpose." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from sympy import default_sort_key\n", - "\n", - "parameters = sorted(tensor_diagram.free_symbols, key=default_sort_key)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will use `numpy` arrays for the tensors, initialised randomly:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0.20328544 0.6856217 0.6337871 0.57768928]\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "tensors = [np.random.rand(p.size) for p in parameters]\n", - "print(tensors[0])" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "Associating the ``numpy`` arrays with the :term:`symbols ` in the diagram can be done by using the :py:meth:`~lambeq.backend.tensor.Diagram.lambdify` method:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Before lambdify: John__n\n", - "After lambdify: [0.20328544 0.6856217 0.6337871 0.57768928]\n" - ] - } - ], - "source": [ - "tensor_diagram_np = tensor_diagram.lambdify(*parameters)(*tensors)\n", - "print(\"Before lambdify:\", tensor_diagram.boxes[0].data)\n", - "print(\"After lambdify:\", tensor_diagram_np.boxes[0].data)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "To contract the :term:`tensor network` and compute a representation for the sentence, we will use :py:meth:`~lambeq.backend.tensor.Diagram.eval`." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[18.41306384 16.09003165]\n" - ] - } - ], - "source": [ - "result = tensor_diagram_np.eval(dtype=float)\n", - "print(result)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " The result is a 2-dimensional array, based on the fact that we have assigned a dimension of 2 to the sentence space when applying the :term:`ansatz `.\n", - "\n", - "The result is an instance of the :py:class:`numpy.ndarray` class." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([18.41306384, 16.09003165])" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/training-usecase.ipynb b/docs/tutorials/training-usecase.ipynb deleted file mode 100644 index 85999ff6..00000000 --- a/docs/tutorials/training-usecase.ipynb +++ /dev/null @@ -1,508 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# A complete use case" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "In this section we present a complete use case of manual training (without using the :py:mod:`~lambeq.training` package), based on the meaning classification dataset introduced in [Lea2021]_. The goal is to classify simple sentences (such as \"skillful programmer creates software\" and \"chef prepares delicious meal\") into two categories, food or IT. The dataset consists of 130 sentences created using a simple context-free grammar.\n", - "\n", - "We will use a :py:class:`.SpiderAnsatz` to split large tensors into chains of smaller ones. For differentiation we will use JAX, and we will apply simple gradient-descent optimisation to train the tensors.\n", - "\n", - ":download:`Download code <../_code/training-usecase.ipynb>`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preparation\n", - "\n", - "We start with a few essential imports." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import warnings\n", - "warnings.filterwarnings('ignore') # Ignore warnings\n", - "\n", - "from jax import numpy as np\n", - "import numpy\n", - "\n", - "from lambeq.backend.numerical_backend import set_backend\n", - "set_backend('jax')\n", - "\n", - "numpy.random.seed(0) # Fix the seed\n", - "np.random = numpy.random " - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - ".. note::\n", - "\n", - " Note the ``set_backend('jax')`` assignment in the above code. This is required to let :term:`lambeq` know that from now on we use JAX's version of ``numpy``.\n", - "\n", - "Let's read the datasets:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Input data" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Read data\n", - "def read_data(fname):\n", - " with open(fname, 'r') as f:\n", - " lines = f.readlines()\n", - " data, targets = [], []\n", - " for ln in lines:\n", - " t = int(ln[0])\n", - " data.append(ln[1:].strip())\n", - " targets.append(np.array([t, not(t)], dtype=np.float32))\n", - " return data, np.array(targets)\n", - "\n", - "train_data, train_targets = read_data('../examples/datasets/mc_train_data.txt')\n", - "test_data, test_targets = read_data('../examples/datasets/mc_test_data.txt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "nbsphinx": "hidden" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "TESTING = int(os.environ.get('TEST_NOTEBOOKS', '0'))\n", - "\n", - "if TESTING:\n", - " train_targets, train_data = train_targets[:2], train_data[:2]\n", - " test_targets, test_data = test_targets[:2], test_data[:2]\n", - " EPOCHS = 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first few lines of the train dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['skillful man prepares sauce .',\n", - " 'skillful man bakes dinner .',\n", - " 'woman cooks tasty meal .',\n", - " 'man prepares meal .',\n", - " 'skillful woman debugs program .',\n", - " 'woman prepares tasty meal .',\n", - " 'person runs program .',\n", - " 'person runs useful application .',\n", - " 'woman prepares sauce .',\n", - " 'woman prepares dinner .']" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_data[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Targets are represented as 2-dimensional arrays:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Array([[1., 0.],\n", - " [1., 0.],\n", - " [1., 0.],\n", - " [1., 0.],\n", - " [0., 1.],\n", - " [1., 0.],\n", - " [0., 1.],\n", - " [0., 1.],\n", - " [1., 0.],\n", - " [1., 0.]], dtype=float32)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_targets[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating and parameterising diagrams" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "First step is to convert sentences into :term:`string diagrams `:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAECCAYAAADKEomXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwGklEQVR4nO3dd3wU9b7/8femFyA9pFBCkhMEAsoRRQxoBCSACDawQagiHFEURLEc4eoRKdYrCh66nHsfioriERClXkFUEJSq9HJJgUAKqZBkfn/4y96sKQSSMJnk9Xw89pHNN7Mzn918Z+f7nrJrMwzDEAAAAABYjJPZBQAAAADAlSDMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAAS3IxuwDUrMLCQqWmpiopKUnJyckOP11cXBQWFqbQ0FCFhYXZ7wcFBcnJiVwLazMMQxkZGQ59vuR+VlaWQkJCHPp/aGioQkND5eHhYXbpQLXl5+crOTm5TN9PSUlRkyZNyvT9sLAw+fr6ymazmV06UC3FxcU6c+ZMmb6flJSkwsLCcvt+06ZN5eLCELi+sBmGYZhdBC6tvJBSXmA5ffq0Sv9LnZ2dFRISotDQUBUWFio5ObnMNC4uLmratKlDwCH0oK6oLKT8ua2goMDhsX5+fgoLC1Pjxo3t609F01TW9wk9MEtFIeXPfT89Pd3hce7u7vZB2/nz58udxsPDo0yf/3PfJ/TALCUhpaI+X3I/NTVVhYWF9sfZbDYFBwcrNDRULi4u9lBfVFRUZpqK+jyhx1oIMyarbki51EYoMDBQzs7ODsu8ePGiTp8+XemG8VKhp7KVn9CDqqiJkFJZ3w8JCZGnp2eZZaanp1e6YSz5SehBbSoJKZcaqFUUUip7D64ogOTl5SklJeWSfb+iZRJ6UBNqIqRU1h+Dg4Pl6urqsMyioiKlpaVdsu9XJfSUt3xCj7kIM7XEjJBS0wg9uBKlQ8qlNlY1FVJq4zkQenAlzAgpNY3QgythRkipaYQeayLMXKbSIeVyBvh1KaTUNEJPw1AfQkpNq4nQU1nfJ/TUHfUhpNS06oae+via1EflhZTLGeDXhZBS0wg9dQth5v8jpNS+Kw09VX2NCT1XhpBS+wg9dVd5IYUBec0i9NRNhJTaV93Qc6nXmNDzh3ofZi5evKjU1NRLbqwIKXUHoadm1OQAmpByddT2/6whhR5CivUQempG6ZBS2TaUkFJ3EHqqx7JhhpCChhp6CCloyKGHkIKGGnoIKSD0lM+SYeaLL77QPffcQ0hBlVQn9OzevVtt2rQxsfqygoODdebMGYc2QgrKU53Q8+yzz2r69OkmVV6+yZMna8aMGQ5tVh+govZcaegJCgrS6dOnTaq6fPv371f79u0JKaiS6oSe5cuX66677jKv+CtgvfilPwanhmFo2bJlio6OJqSgUq6urgoPD1d4eHil05UOPRs3btQzzzyj4uLiq1Rl1RUUFGj48OEaOXIkIQWVstls8vf3l7+/v9q1a1fhdH++bmr48OG6cOHCVay0ai5cuKDw8HAtWrSIkIJL8vT0VKtWrdSqVatKpysdehYsWKDPPvvsKlVYdcXFxSoqKtLMmTMVHx9PSEGlnJ2d1bRpUzVt2lQdO3ascLrSoefQoUMaNGiQLl68eBUrrRmWDDMlevXqJR8fH7PLQD1ROvSU/tjIuig2NlZxcXFml4F6wmazyc/PT35+fmrXrl2dfl/18fHR7bffbnYZqEdKh54ff/yxToaZEl27dtUNN9xgdhmoJ0qHnsjISLPLuWJ174IAAAAAAKgCwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAAAAASyLMAAAAALAkwowF2Gw2DRs27JLTTZ06VTabTceOHbO3LV68WDabTRs3brS3bdy4UTabTYsXL3Z4fFpamhITExUWFiabzab4+PjLrrW8GgAAAIDa4GJ2Aag7Jk6cqI8//lgvvPCCIiMj1bRpU7NLAgAAACpEmKlHXnzxRU2ePFnu7u5X9Phvv/1WCQkJeumll2q4MgAAAKDmcZpZPeLi4iIPDw/ZbLYrenxKSor8/f1ruCoAwKWcP3/e7BIuyQo1Amh4CDMmy8/P19SpU9W6dWt5eXnJ19dX7du316RJkyp93I4dOxQSEqK2bdvqxIkTkq78epWSxxmGoSVLlshms9mvqTl27JhsNpumTp1a4eO4Pga1peSar3Xr1unll19Wy5Yt5enpqc6dO+uHH36QJG3atEldu3aVt7e3QkND9corrzjM45tvvtH999+vyMhIeXp6ytfXV7169dKmTZvKLC8+Pl4RERFKSkrSgw8+KD8/P3l5eSkhIUEHDhy4Ks8Z1lTSV9euXaupU6eqZcuWcnd3V4cOHfTRRx85TBsREaH4+Hjt3LlTCQkJ8vHxUYcOHex/P3jwoIYMGaLQ0FC5ubkpIiJCkyZNUk5OjsN8hg0bJpvNpjNnzigxMVEBAQHy9vZWjx49tGPHjjI1vv/+++rVq5fCw8Pl5uam0NBQDR48uNz38JJrNdetW6euXbuqUaNGuvPOO+1/3759u+6++24FBgbK3d1drVu31quvvqrCwkKH+ezdu1cDBw5UeHi43N3dFRISottuu00rV668kpcZ9UxVxkAff/yx+vfvrxYtWsjd3V2BgYG66667tGvXrjLzq+ga4/KuH5akrKwsvfDCC2rTpo08PDwUEBCgrl27lllnk5OTNXbsWLVo0UJubm4KCwvT6NGjdfr06Rp5HVA9nGZmsscee0wLFy5UYmKiJkyYoMLCQh08eFDr16+v8DFr1qzRfffdpw4dOujf//53tY+m3HPPPYqOjtaQIUPUrVs3jR49WpJ08803V2u+QE2ZPHmyioqKNH78eF24cEFvvPGGevXqpQ8//FAjR47U6NGj9fDDD2vZsmV66aWX1KpVKw0ePFjSHxuxc+fOKTExUc2aNdOpU6c0f/589ejRQxs2bFC3bt0clpWTk6NbbrlFN910k6ZNm6ajR4/qnXfe0YABA7Rnzx45Ozub8RLAIp599lnl5OTob3/7myRp0aJFevDBB5Wfn+8wyDpx4oS6d++ugQMH6t5771V2drYk6eeff1b37t3l6+urRx99VOHh4fr111/1n//5n9qyZYs2bdokV1dXh2X27t1b/v7+mjp1qlJSUjR79mzdeuut2rp1q2JjY+3Tvf7667rpppv0xBNPyN/fX3v27NH8+fO1fv167d69WwEBAQ7z3b59uz777DM98sgjGjp0qL195cqV9u3GxIkT5e/vr61bt+qll17SL7/8ok8++USSdPbsWXXv3l2SNGbMGLVs2VJpaWnavn27fvzxR91xxx0198LDkqoyBpo9e7YCAgI0evRohYSE6PDhw/rnP/+puLg47dixQ3/5y1+uaNkZGRnq2rWr9u7dq/vuu09jx45VUVGRdu7cqa+++koPPPCApD/W1S5duujChQsaOXKkoqKidOjQIc2ZM0cbNmzQ9u3b5ePjUyOvB66QYUHLli0zJBkZGRlml1Jtfn5+Rp8+fSqdRpIxdOhQwzAM48MPPzRcXV2NAQMGGLm5uQ7TTZkyxZBkHD161N62aNEiQ5KxYcMGe9uGDRsMScaiRYsqXE6Jo0ePGpKMKVOmlKmrvOWV12ZF33//vSHJ2LNnj9mllNGkSRPjjTfeMLuMq6Kk/3bs2NEoKCiwt69YscKQZLi4uBjbtm2ztxcUFBghISHGTTfdZG/Lzs4uM9+UlBQjICCgzLp36623GpKMGTNmOLTPnDnTkGR8/fXXNfXU6rS2bdsaTz31lNlllPHUU08Zbdu2NbuMcpX01RYtWjhsmzIyMowWLVoYfn5+9vfsli1bGpKMefPmlZlPhw4djNatWxtZWVkO7cuXLy/zvj106FBDknH33XcbxcXF9vbt27cbNpvNSEhIcJhHeevC2rVry+3zkgxJxrfffuvQnpeXZzRt2tTo1q2bcfHiRYe/vfnmmw7bm5L19OOPPy6z3LrqjTfeMJo0aWJ2GWXs2bPHkGR8//33ZpdSo6oyBiqv3+7bt89wc3Mzxo4d69Be3jjGMMofC40dO9aQZHzwwQdlpi8qKrLf79+/vxEUFGScPHnSYZpt27YZzs7O5Y6PrCgjI8OQZCxbtszsUi4bp5mZzMfHR3v37tWePXsuOe306dM1dOhQjRgxQp999pk8PT2vQoWA+caOHSs3Nzf77yVHUzp37qxOnTrZ293c3HTjjTfq4MGD9jZvb2/7/ezsbJ09e1bOzs7q3LmzfvzxxzLLcnJy0hNPPOHQVrJ3ufR8gfKMHTvWYS+tj4+PxowZo/T0dIdTXPz9/TV8+HCHx+7evVu7du3SQw89pIKCAqWlpdlvJadSfvPNN2WW+cwzzzhcK3n99dfr9ttv19q1a+1HfKT/WxeKi4uVmZmptLQ0XXvttfLx8Sl3Xbj22mvVs2dPh7Zvv/1WqampGj58uDIyMhxq7Nu3ryTZayx5HVavXq2srKwqvX5oWKoyBirpt4ZhKCsrS2lpaQoKClLr1q3L7bdVUVxcrI8++kht2rSxn41SmpPTH8PjzMxMffXVV+rfv788PDwc+ntERISio6PLXSdxdRFmTPb2228rPT1d7du3V1RUlEaNGqUVK1aouLjYYbrly5frueee06hRozR37lxOdUGDEhkZ6fC7n5+fJKlVq1ZlpvXz89PZs2ftvx8+fFgPPPCA/Pz81LhxYwUGBiooKEirVq1Senp6mceHhYXJw8PDoa3k9JvS8wXK06ZNmzJtbdu2lSQdOXLE3hYVFVXmfXz//v2SpClTpigoKMjhFhwcrJycHKWmplZ5mUVFRTp+/Li9bf369YqPj5e3t7d8fX3t887MzCx3XYiJiSnTVlLjiBEjytR4zTXXSJK9xltvvVWJiYlavHixAgMDFRcXpylTpmjfvn1l5ouGqSpjoJ07d6pfv35q3LixfHx87P1t9+7d5fbbqkhLS1N6erquu+66Sqf7/fffVVxcrAULFpTp70FBQfr999/LXSdxdXHNjMkGDBigY8eOadWqVdq0aZPWrl2rBQsWqFu3blq7dq19b/SNN96oY8eO6dNPP9Xo0aMd9kbXpso+Ge3PF3oCtaWi8H6pUJ+dna1bbrlFOTk5evLJJ9W+fXs1btxYTk5Oeu2118q9Nq2yeRqGcXmFAxXw8vIq01bSvyZOnKjevXuX+7iSIH+5tm3bpl69eik6OlrTp09Xq1at5OnpKZvNpgceeKDMDrRL1Thr1qwKB4JhYWH2+0uWLNGkSZO0evVqfffdd3rjjTf06quv6u2339a4ceOu6Lmg/rjUGCglJUW33HKLmjRpor///e9q3bq1vL29ZbPZ9OSTTzoceazMlY5XSvr74MGDHa4bK42zZMxHmKkD/P39NXjwYA0ePFiGYWjy5MmaOXOmVqxYoYEDB0qSmjVrpiVLlqh79+7q2bOnvv76a910001XpTZJOnfuXJm/ld7LCNRF69atU1JSkhYuXFjmlJ4XX3zRpKpQn+3fv18DBgxwaCs5EvHnI4x/VnIhs7Ozc5nTuy61zD9vD/bt2ydnZ2e1bNlSkvTf//3fKioq0urVqx2OaObk5FzW3u2SGr29vatcY2xsrGJjYzVp0iRlZGSoc+fOmjx5sh577LEr/ioB1B+VjYGSkpKUnZ2tL7/8UrfddpvD486ePVvme/X8/f2rNF4JDAyUn5+ffv3110pri46Ols1m04ULFy5rncTVxWlmJioqKlJGRoZDm81mU8eOHSWVDRDh4eHatGmTwsLC1KtXL23ZsqXWa2zcuLFCQkK0fv16h73SR44c0RdffFHryweqo+Qoy5+PqHzzzTdXfK41UJk5c+YoMzPT/ntmZqbmzp0rX19f3XrrrZU+tmPHjoqNjdXcuXPL3VlUWFhY7kBt5syZDn18x44dWrt2rXr06KFGjRpJqnhdmDZtWrlHZSqSkJCg4OBgTZ8+vdxa8vLy7N9Hc+7cuTLz9vX1VatWrZSbm6v8/PwqLxf1T1XGQBX123nz5iklJaXMPGNiYrR161bl5uba29LT07Vo0SKH6ZycnPTggw9q3759WrBgQZn5lCwvICBAffv21fLly+1fB/Dn6c6cOVOFZ4vaxJEZE50/f16hoaHq37+/OnbsqODgYB09elRz5syRn5+fw2f6lwgJCdHGjRvVs2dP9e7dW1999dUlN5DVNW7cOL344ovq06eP7rrrLiUlJWnu3LmKjY3Vtm3banXZQHV07dpVISEhmjhxoo4dO6ZmzZrpl19+0dKlS9W+fXvt3r3b7BJRzwQGBqpz5872I4GLFi3SiRMnNH/+/HJP2yrNZrNp6dKl6t69uzp06KARI0aoXbt2ys3N1aFDh7R8+XK99tprZb5H4/jx40pISFD//v2VnJys2bNny9PTU7NmzbJPc/fdd+utt95S3759NXr0aLm5uenbb7/Vrl27FBgYWOXn5+3trQ8//FB33XWXWrdurREjRig6OloZGRn67bfftHz5cn3++eeKj4/Xhx9+qLfeekt33323oqOj5erqqk2bNmnNmjUaNGgQp+c0cFUZA+Xl5cnLy0tDhgzRuHHj5Ofnpy1btmjVqlWKiooqc/rYuHHjNHjwYHXv3l1DhgxRRkaG5s2bp5YtW5YJP//4xz+0fv16jRo1St988426du0qwzC0c+dOFRYWaunSpZL+2EHRtWtX3XLLLUpMTFTHjh1VXFysI0eOaMWKFUpMTCz3u/hw9RBmTOTl5aUnn3xS69ats3/qTMmK/dxzzzmcd1xacHCwNmzYoJ49e6pv37768ssv1aNHj1qr89lnn1VmZqaWLl2qjRs3qm3btlqwYIF+/vlnwgzqNF9fX61Zs0bPPPOM3n33XRUWFur666/XqlWrtGDBAsIMatyMGTP03Xff6b333lNqaqpiYmL0X//1X3rooYeq9PjrrrtOO3fu1GuvvaYvv/xSc+fOVePGjRUREaFhw4aV+17/9ddfa8KECZoyZYry8vJ00003adasWQ5fxBkXF6fPPvtMr7zyiv7+97/L09NTPXv21KZNm3TLLbdc1nNMSEjQtm3bNH36dP3rX//SmTNn5Ofnp6ioKE2YMMG+3JIvBv3qq6+UnJwsZ2dntWrVSq+//jrXy6DKY6DVq1fr+eef17Rp0+Ts7Ky4uDht2rRJ48aNK/OFrw8//LCSkpI0e/ZsTZgwQZGRkXrppZfk5ORU5mi8n5+ftm7dqmnTptlDeOPGjdW2bVs9/vjj9umaN2+un3/+WTNmzNCKFSv0r3/9Sx4eHmrevLnuvPNODRo0qNZfK1TOZljwitZPPvlEgwYNUkZGBl9UhFqxdetW3XzzzdqzZ4/atWtndjkOfHx8NGXKFE2YMMHsUlBPtWvXTgkJCXrzzTfNLsXBhAkTtGbNGu3du9fsUspYvHixhg8frg0bNig+Pv6qLHPYsGFasmQJH0xRg9588039x3/8h8OpgnXB3r17FRsbq++//15dunQxuxzUQ5mZmfL19dWyZcvs12tbBdfMAAAAALAkwgwAAAAASyLMAAAAALAkwgwAANU0bNgwGYZx1a6Xkf64TofrZQA0dIQZAAAAAJZEmAEAAABgSYQZAAAAAJZEmAEAAABgSYQZAAAAAJZEmAEAAABgSYQZAAAAAJbkYnYB1TFw4EC5urqaXQbqofT0dLNLqNS8efO0bt06s8tAPXX8+HGzS6jQ8ePHdccdd5hdBuqpI0eOmF1CpSZOnCg/Pz+zy0A9dPHiRbNLuGI2w4LfuHX+/HmNHz9eGRkZZpdSbSkpKdq6dav69OkjDw8Ps8upljNnzmjz5s3q1auXvL29zS6n2qKiojR9+nQ5OzubXYqDDz74QGvWrDG7DMs4duyYdu7cqbvvvtvsUizDyclJ06ZNU0xMjNmlODhw4ICef/55FRcXm12Kg9TUVH3//ffq3bu3PD09zS7Hweeff66OHTsqIiLC7FIcbNmyRa6urrrxxhvNLqWMhIQEPfroo2aX4aCoqEiTJ0/W4cOHzS7FMnbs2KGsrKyr+kW2Vufr66t33nlHjRs3NruUy2LJMFOfrFy5Uv369VNycrJCQkLMLqda1q9frx49eujw4cOKjIw0uxxAkrRgwQKNGjWKb0pHrVmzZo169+6tkydPqlmzZmaX48Bms2n+/PkaOXKk2aU4SEhIkI+Pj5YtW2Z2KainRo4cqX379mnr1q1ml4JaxjUzAAAAACyJMAMAAADAkggzAAAAACyJMAMAAADAkggzAAAAACyJMAMAAADAkggzsKRjx47JZrNp6tSpZpcCAKij2FYA9R9hBgAAAIAlEWYAAAAAWBJhBgAACzMMQ9nZ2WaXAQCmIMxYyOLFi2Wz2bR+/Xq9/vrrioqKkru7u2JiYrRkyRKzy7ss9em5oP6gX6K2VbePbdy4UTabTYsXL9Z7772ntm3bysPDQ6+//nq16srPz9fUqVPVunVreXl5ydfXV+3bt9ekSZOqNd/qYp1EbaOPWZ+L2QXg8j3//PPKy8vTo48+Knd3d82ZM0fDhg1TdHS04uLizC7vstSn54L6g36J2lbdPvb222/r7NmzeuSRRxQSEqLmzZtXq57HHntMCxcuVGJioiZMmKDCwkIdPHhQ69evr9Z8awrrJGobfcy6CDMWVFBQoG3btsnNzU2SdN999ykyMlKzZ8+23ApXn54L6g/6JWpbdfvYiRMn9Ntvvyk4OLhG6vn888/Vp0+fOrsnmnUStY0+Zl2cZmZBf/vb3+wrmySFh4crJiZGBw8eNLGqK1OfngvqD/olalt1+1hiYmKNBRlJ8vHx0d69e7Vnz54am2dNYp1EbaOPWRdhxoIiIyPLtAUEBOjs2bMmVFM99em5oP6gX6K2VbePxcTE1Gg9b7/9ttLT09W+fXtFRUVp1KhRWrFihYqLi2t0OVeKdRK1jT5mXYQZC3J2di633TCMq1xJ9dWn54L6g36J2lbdPubl5VWT5WjAgAE6duyYli5dqu7du2vdunW66667FB8frwsXLtTosq4E6yRqG33MuggzAABA/v7+Gjx4sObNm6cjR47omWee0XfffacVK1aYXRoAVIgwgxrj6empsLAw5eXl1eh8Sy50vXjxYo3OFw1DQUGBoqKizC4DuGxX672vqKhIGRkZDm02m00dO3aUJJ07d67GlxkcHCwnp5odgrCtQGmGYSgsLMzsMnAVEGZQY0JCQpSUlKTDhw/X6HwTExPVpk0bnTp1qkbni4bh4MGDKiwsNLsM4LJdrfe+8+fPKzQ0VPfff7+mT5+uhQsX6u9//7vGjRsnPz8/3XnnnTW+TA8PD+3bt69G58m2AqX99ttvcnV1NbsMXAWEGdSYiIgIRUVF6euvvza7FMBu9erV6tWrl9llAHWWl5eXnnzySR09elSzZs3S2LFjtXTpUvXv318//vhjrezdjo+P1+7du5Wamlrj8waysrL0008/6bbbbjO7FFwFNoMrm0y1cuVK9evXT8nJyQoJCTG7nGobP368PvroIx04cEA+Pj5ml4MG7vvvv1dcXJy++OILDRgwwOxyUE+tWbNGvXv31smTJ9WsWTOzy3Fgs9k0f/58jRw50uxSHKSkpCgsLExvvfWWxo8fb3Y5qGcWLVqkESNG6NChQ5xm3ABwZAY16umnn1Zubq5efPFFs0tBA3fx4kWNGTNGnTp1Ur9+/cwuB0ApISEhGj58uF5++WWlp6ebXQ7qkezsbL344osaNGgQQaaBIMygRjVv3lwvv/yy3nvvPX366adml4MGyjAMTZw4UXv37tUHH3xQ4UduAjDPq6++qgsXLmjMmDF15vtsYG2GYWj8+PE6e/asZsyYYXY5uEoIM6hxTzzxhB588EE98MAD+uyzz8wuBw2MYRh66qmn9O677+q9997TX//6V7NLAlCOkJAQLVmyRJ9++qkef/xxvs8D1fbcc89p4cKF+uc//6mIiAizy8FVQphBjXN2dtaSJUt0//33a9CgQZo0aZJyc3PNLgsNwPHjx3XHHXfonXfe0Zw5czRmzBizSwJQiXvuuUcffPCB3n//fQ0aNIhvW8cVyczMVGJiombMmKG33npLiYmJZpeEq4gwg1rh4uKiJUuWaNq0aZo9e7ZiY2P17bffml0W6qmioiK9/fbbateunXbv3q1///vfBBnAIkaNGqVly5Zp/fr1at++vVavXm12SbCQkn6zYsUKLVmyRE8++aTZJeEqI8yg1ri4uOjZZ5/V7t271apVK/Xq1UtDhgzR/v37zS4N9URxcbHWrVunLl26aMKECRo+fLj27t3LBf+AxQwcOFC7d+/Wtddeq759++rRRx/VyZMnzS4LdVhycrLGjx+vHj16KDo6Wrt27eKITANFmEGti46O1tq1a7Vw4UJ9/fXXatu2rW6++WbNnz9f58+fN7s8WNCJEyf08ssvKyoqSj179lR+fr62bNmid999V02aNDG7PABXICwsTKtWrdKcOXP00UcfKSIiQvfcc4/Wrl3L9TSQ9Mc1kZs2bdL999+vFi1aaMGCBXrzzTe1du1atWzZ0uzyYBLCDK4Km82m4cOH63//93+1bNky+fj4aPTo0faP59y8eTMbK1SqoKBAy5YtU+/evRUREaGZM2fqtttu0+bNm/Xrr7+qS5cuZpcIoJpsNpvGjBmjU6dO6b333tPBgwd1++23q02bNnrnnXeUkZFhdokwwfnz5zVnzhx16NBB8fHx+vXXX/XGG2/o1KlTeuqpp+TkxHC2IeO/j6vK3d1dAwcO1OrVq3X8+HFNnjxZmzZtUrdu3XTNNdfoH//4hzZv3qz8/HyzS0UdkJ6erpUrV+qJJ55QWFiY7r//fmVlZWnevHlKTk7WwoULFRcXJ5vNZnapAGpQo0aNNGbMGO3atUv/8z//o+uuu05PP/20wsPDNXr0aK1atUpZWVlml4lalJ2drTVr1uixxx5TeHi4Hn/8ccXExGjt2rXav3+/nnjiCb6cG5Ikm8HucFOtXLlS/fr1U3JyskJCQswuxxTFxcXatGmTFixYoC+++EI5OTlyc3NTp06dFBcXp7i4ON18880KCgoyu1TUIsMwdPjwYW3ZssV+27dvnyQpNDRUDz/8sEaMGKE2bdqYXCngaM2aNerdu7dOnjypZs2amV2OA5vNpvnz52vkyJFml1JtycnJmj9/vubPn68TJ07IyclJ119/veLj4xUfH6+uXbtymqmFZWdna8uWLdq4caM2btyobdu2qaioSGFhYRoxYoQeffTROrd+oW4gzJiMMOOosLBQu3btsg9mN2/erFOnTkmSYmJi7OEmLi5Of/nLX/gyRAvLz8/Xr7/+6hBeUlNTJUnt2rVz+F9HRkZy9AV1FmHm6irZ8VEy6N24caNOnTpVJtx06dJFfn5+ZpeLCmRmZuqHH34oE15CQkLs/8P4+HjFxMTw/o9KEWZMRpipnGEYOnHihMOAd9euXTIMQ66uroqIiFB0dLSioqLsP6OiotSqVSt5eHiYXX6Dl5mZqcOHD+vw4cM6dOiQw89Tp07JMAx5eHioc+fO9uDCAARWQ5gxV0XhRpKCg4PVunVrxcTEKCYmxn4/KipKbm5uJlde/128eFFHjhzRgQMH9Pvvvzv8TElJkSTCC6rNxewCgMrYbDa1bNlSLVu21EMPPSRJysrK0k8//aQDBw7YB8br16/X/Pnz7dfa2Gw2NWvWzCHgREVFKSQkRIGBgQoICJC/v79cXFgFrlR+fr7Onj2rs2fPKi0tTadOnSoTWNLS0uzT+/r62kNnXFycoqOj1bZtW3Xs2JFBBYArZrPZFB0drejoaI0aNcoebrZt22YfPP/yyy/6+OOPlZ2dLUlycnJSq1atHAJOZGSkgoKCFBwcrKCgILm7u5v8zOq+Cxcu6MyZMzp9+rTOnDmjo0ePOgSWI0eOqKioSJLk7e1tD5UloaVTp06EF1QbIzlYTpMmTdSzZ0/17NnTob24uFhJSUlljgTs2LFDn3zyiTIzM8vMy8/Pzx5uAgMDy9wv/buvr688PT3l4eEhd3f3evHmW1xcrPz8fOXn5ys3N1fnzp1TWlqaPaCU3Mr7vWRQUFpISIiio6N1zTXX6I477nA4aubv72/CMwTQ0JQON6UZhqGUlJQyRwlWrVql2bNnq7Cw0GH6xo0b24NN6ZDz57bAwEB5e3vbtw9W3DYYhqH8/Hzl5eUpNzdXaWlp9oBSOqyUvn/69OkyH8Lg7OxsD4n9+vVzCIthYWGWfG1Q9xFmUG84OTmpWbNmatasmW699VaHvxmGoXPnzunMmTPlDtBL7v/+++/2++fOnat0eR4eHvaNV+n75bWVvu/u7i5nZ2c5OTlVevPy8lJOTo6Ki4srvRUVFdkDSV5eXpn7lbVduHChwufn7OxcJtC1bNmywrDXtGlTNWrUqEb+lwBQ02w2m0JDQxUaGlpmG3Hx4kUlJSVVOHA/c+aMdu3aZb+fk5NT4XJK3u//fPPy8iq33dPTs8x2obxtRKNGjZSdnV3hdqDkfkFBgXJzc5WXl3fJW8l0lX2CqKenp0OQK7l+tbygFxYWxpF2XHWEGTQINptNAQEBCggIqPJjCgsLlZ6ebg83GRkZlx0YsrKylJqa6vC3goICh42QYRjlbpxuuOEGbd++XTab7ZLBp6Iw5evre8mgVfqnv7+/PaQ0adKEvWgAGgRXV1f7Kc1VkZubaw82aWlp9lBwqRBR8vdz5845tOfn51e4LSi5de7cWT/88EOlO8NsNpvc3d3LDU/+/v5VCldeXl4KDAy0BxVvb+9afvWB6iHMABVwcXGxv5kDAFDCy8vrssIPgNrDl2YCAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIswAAAAAsCTCDAAAAABLIsyYrFGjRuratavy8/PNLgUAcAUKCgoUHx8vV1dXs0sBgAaHMGOypk2bavPmzfr555/NLgUAcAW2b9+uH374QUFBQWaXAgANDmHGZK1bt1b37t319NNPKycnx+xyAACX4dChQ5o1a5bGjh0rJyc2qQBwtfHOazKbzaYPPvhAKSkpGjt2rAoKCswuCQBQBWfPntXQoUMVEhKiV155xexyAKBBIszUAdHR0Zo7d64++ugjdenSRb///rvZJQEAKrFhwwZ16NBBv/32m5YuXSpvb2+zSwKABokwU0cMHTpUP/74o3JycvTXv/5Vs2bNUmZmptllAQBKOXXqlJ566in16NFDMTEx2rVrl7p27Wp2WQDQYBFm6pCOHTvq559/1tChQ/XCCy+oefPmmjhxok6cOGF2aQDQoP3yyy8aMmSIIiIitHDhQk2bNk1r165VeHi42aUBQINGmKljGjVqpPfff19Hjx7VY489poULFyoyMlL33nuvlixZotTUVLNLBIAG4fDhw5o9e7Zuu+02dezYUd99951mzpypkydPavLkyXJ2dja7RABo8GyGYRhmF4GKZWdna/HixVqyZIm2b98uSbr++uvVp08f9enTR507d2aDCgA1IC8vT5s2bdLq1au1evVqHTx4UK6urrrlllv0yCOP6N5775WLi4vZZV4Wm82m+fPna+TIkWaXAgC1gjBjIadPn9aaNWu0evVqrVmzRufOnZOfn58SEhLUp08fJSQkqGnTpmaXCQCWYBiGjhw5Yg8vGzZsUF5enpo3b66+ffuqT58+6t69uxo3bmx2qVeMMAOgviPMWFRRUZF++ukn+0a45KhNWFiYYmNjFRsbq/bt2ys2NlZt2rThk3YANGjp6enas2dPmdu5c+fk6uqqrl272gNM27ZtZbPZzC65RhBmANR3hJl6IjU1VRs3btTu3bvtG+kjR47I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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Parse sentences to diagrams\n", - "\n", - "from lambeq import BobcatParser\n", - "\n", - "parser = BobcatParser(verbose='suppress')\n", - "train_diagrams = parser.sentences2diagrams(train_data)\n", - "test_diagrams = parser.sentences2diagrams(test_data)\n", - "\n", - "train_diagrams[0].draw(figsize=(8,4), fontsize=13)" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The produced diagrams need to be parameterised by a specific :term:`ansatz `. For this experiment we will use a :py:class:`.SpiderAnsatz`." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAGjCAYAAAAYUkvcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA88UlEQVR4nO3de3zP9f//8ft7mx2xg2GsNhnmsClKCRliE3LMVwcRHynlUzrol0+FDnTio4Pi04E+qT4dJJUORohK5RAZUhkRiWEOm80Or98fffb+eNvBzHi9nnvfrpfL+7Lt9X7t9X5sz+fz9X7dX6e3y7IsSwAAAABgGB+7CwAAAACAiiDMAAAAADASYQYAAACAkQgzAAAAAIxEmAEAAABgJMIMAAAAACMRZgAAAAAYiTADAAAAwEiEGQAAAABGIswAAAAAMBJhBgAAAICRCDMAAAAAjESYAQAAAGAkwgwAAAAAIxFmAAAAABiJMAMAAADASIQZAAAAAEYizAAAAAAwEmEGAAAAgJEIMwAAAACMRJgBAAAAYCTCDAAAAAAjEWYAAAAAGIkwAwAAAMBIhBkAAAAARiLMAAAAADASYQYAAACAkQgzAAAAAIxEmAEAAABgJMIMAAAAACMRZgAAAAAYiTADAAAAwEiEGQAAAABGIswAAAAAMBJhBgAAAICRCDMAAAAAjESYAQAAAGAkwgwAAAAAIxFmAAAAABiJMAMAAADASH52F1BRO3bsUEZGht1lwOEiIyMVExNjdxnnhJPHBO0AeGJMAP/DeHAOE9vCyDCzY8cONWvWTNnZ2XaXAocLDg7W5s2bjRuYp8vpY4J2ADwxJoD/YTw4h4ltYWSYycjIUHZ2tt544w01a9bM7nLgUJs3b9bgwYOVkZFh1KCsCCePCdoB8MSYAP6H8eAcpraFkWGmSLNmzdS6dWu7ywAcgzHhDLQD4IkxAfwP46FycQMAAAAAAEYizAAAAAAwEmEGAAAAgJEIMwAAAACMRJgBAAAAYCTCDAAAAAAjEWYAAAAAGIkwAwAAAMBIhBkAAAAARiLMAAAAADASYQYAAACAkQgzAAAAAIxEmAEAAABgJMIMAAAAACMRZgAAAAAYiTBzFrlcLt10002nnG/ixIlyuVzavn27e9prr70ml8ulZcuWuactW7ZMLpdLr732msfvZ2RkaMiQIapfv75cLpc6dep02rWWVAMAAADgZISZKuCee+7RO++8o1tvvVVz5szRAw88cE5fv7CwUNOmTVPTpk0VGBio888/X/fcc4+ysrLOaR1wvtdff12tWrVSUFCQ6tatqxEjRmjfvn12lwXQN4ET/Otf/9INN9ygpk2bytfXVy6Xy+6S4ABO3d4jzDjAgw8+qGPHjik2NrZCv79o0SKlpKRo/PjxGjx4sLp161bJFZbtrrvu0t13363mzZvr+eef18CBA/Xcc8/p6quvVmFh4TmtBc715ptvaujQoQoNDdWzzz6rW265RW+//bY6depk+4oQ3m3atGn0TeAEjz/+uD766CPVqVNH9evXt7scOIRTt/f8bHtluPn5+cnPr+JNsWfPHkVERFRiReW3ceNGPf/88+rfv7/ef/999/QLLrhAd9xxh95++21df/31ttQGZ3nxxRfVpk0bffHFF/L19ZUktWnTRr1799azzz6rf/zjHzZXWDUdOXJENWrUsLuMMtlZY0ZGhh588EH6phdhTJzasmXLFBMTIx8fH/Xq1Uu///67bbXAGZy8vceRmQrKycnRxIkTFR8fr+DgYIWFhSkxMVFjx44t8/fWrl2rqKgoNW/eXDt27JBU8etVin7Psiz9+9//lsvlcl9Ts337drlcLk2cOLHU36uM62P+85//yLIsjRkzxmP6zTffrODgYL3xxhtn/Br43zVUX3zxhR555BHFxsYqKChIl112mb799lv3fMOHD1dISIjq1aunRx991GMZqampGjRokBo2bKigoCCFhYUpOTlZX375ZbHX69Spkxo0aKDdu3fruuuuU3h4uIKDg5WSkqKff/65Qn9DTk6O/v73v7s3FiXp6quvVsOGDeknZShq+8WLF2vixImKjY1VQECAWrZsqbfffttj3gYNGqhTp0764YcflJKSotDQULVs2dL9/C+//KIbb7xR9erVk7+/vxo0aKCxY8cWO/pw0003yeVyad++fRoyZIhq1aqlkJAQXXnllVq7dm2xGl988UUlJycrOjpa/v7+qlevngYPHlziOqboWsIvvvhCHTp0UPXq1XX11Ve7n1+9erX69eunyMhIBQQEKD4+XpMmTVJ+fr7HcjZu3KiBAwcqOjpaAQEBioqKUufOnfXJJ5+c1v93/vz5ys7Opm8ahDFxdsdE0f/Nx4dNxNKUZxvwnXfeUe/evRUTE6OAgABFRkbq7rvvLnF5pV1jXdL105J0+PBhPfDAA2rWrJkCAwNVq1YtdejQoVj//+OPPzRq1CjFxMTI399f9evX18iRI7V3797T/pudvL3HkZkKuv322zVr1iwNGTJEd999t/Lz8/XLL79oyZIlpf7OwoULdc0116hly5b6+OOPz/hoSv/+/dWoUSPdeOONuuKKKzRy5EhJUrt27c5ouadj1apV8vHx0aWXXuoxPTAwUBdddJFWrVp1zmrxBvfff78KCgp055136vjx45o6daqSk5M1YcIESVKrVq10yy236N1339X48eN1wQUXaPDgwZL+WikeOHBAQ4YM0Xnnnaddu3bplVde0ZVXXqmlS5fqiiuu8HitrKwsdezYUW3bttXkyZO1bds2Pfvss+rTp4/S0tI8NvzK6/LLLy82rW3btvrPf/6jo0ePqnr16hX4r3iH//f//p+ysrJ02223SZJmz56t6667Tjk5OR5vgjt27FCXLl00cOBADRgwQEePHpUkrVmzRl26dFFYWJhuueUWRUdHa/369Xruuef09ddf68svv1S1atU8XrN79+6KiIjQxIkTtWfPHk2fPl1JSUlauXKlEhIS3PNNmTJFbdu21R133KGIiAilpaXplVde0ZIlS7RhwwbVqlXLY7mrV6/W+++/r5tvvllDhw51T//kk0/c67V77rlHERERWrlypcaPH69169bpvffekyTt379fXbp0kSTdeuutio2NVUZGhlavXq3vvvtOPXv2LPf/tWgdRd80D2Pi7IwJnFp5tgGnT5+uWrVqaeTIkYqKitLWrVs1Y8YMSX/1ydatW1fotTMzM9WhQwdt3LhR11xzjUaNGqWCggL98MMPWrBgga699lr3a1x++eU6fvy4/va3vykuLk6//vqrZsyYoaVLl2r16tUKDQ0t9+s6envPMtCaNWssSdaaNWtsqyE8PNy66qqrypxHkjV06FDLsizr9ddft6pVq2b16dPHys7O9phvwoQJliRr27Zt7mmzZ8+2JFlLly51T1u6dKklyZo9e3apr1Nk27ZtliRrwoQJxeoq6fVKmlYeCQkJVp06dUp8buDAgZYkKzc397SWWVmc0E8qS1F/aNWqlcf/88MPP7QkWb6+vh5/a25urhUVFWW1bdvWPe/Ro0eLLXfPnj1WrVq1ivXlpKQkS5L15JNPekx/6qmnLEnW559/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ZsyYoUOHDrl/PnTokGbOnKmwsDAlJSWV+butWrVSQkKCZs6cWeLOjPz8/BLfSJ966imPPrN27VotXrxYV155pXsDv7S+NXny5NP6ELWUlBTVqVNHTzzxRIm1HDt2zH1qxoEDB4otOywsTBdccIGys7PdpzyUR58+fRQUFETfNBBj4uyMCZStPNuApfWBefPmlbjMJk2aaOXKlR7XnBw8eFCzZ8/2mM/Hx0fXXXedNm3apFdffbXYcoper1atWurRo4fmzZvn8fENJ863b9++U/ylnpy8vceRmQo4cuSI6tWrp969e6tVq1aqU6eOtm3bphkzZig8PNzj/vBFoqKitGzZMnXt2lXdu3fXggULTrmyPVOjR4/Wgw8+qKuuukp9+/bV7t27NXPmTCUkJFTaLfQSExN1++23a/r06erfv7969OihzZs367nnnlNSUhIfmOkQHTp0UFRUlO655x5t375d5513ntatW6c5c+YoMTFRGzZsOOs1jBo1Ss8884y6du2q6667Trt27dLUqVPVtGnTYvetR3GRkZG67LLL3EfWZs+erR07duiVV1455XnKLpdLc+bMUZcuXdSyZUsNHz5cLVq0UHZ2tn799VfNmzdPjz/+eLHPOfjtt9+UkpKi3r17648//tD06dMVFBSkp59+2j1Pv379NG3aNPXo0UMjR46Uv7+/Fi1apB9//FGRkZHl/vtCQkL0+uuvq2/fvoqPj9fw4cPVqFEjZWZm6qefftK8efP0wQcfqFOnTnr99dc1bdo09evXT40aNVK1atX05ZdfauHChfq///u/0zp9onbt2nr00Ud177330jcNw5g4O2NC+ivMF+39//XXXyVJjz32mKS/QpI3n7ZWnm3AY8eOKTg4WDfeeKNGjx6t8PBwff311/r4449LXObo0aM1ePBgdenSRTfeeKMyMzP18ssvKzY2Vnv27PGY97HHHtOSJUs0YsQIpaamqkOHDrIsSz/88IPy8/M1Z84cSX+F/Q4dOqhjx44aMmSIWrVqpcLCQqWnp+vDDz/UkCFDSvwswtI4envvHN89rVLYfRu/3Nxc6/7777fatGljRUREWP7+/lZsbKw1bNgw6+eff3bPpxJutZeRkWFddNFFVnBwsLV48WLLss7OrZkty7Ly8vKssWPHWlFRUVZAQIDVqlUr66OPPqrUWzNblmXl5+dbU6ZM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n7S7JMAY1apV08KFCxUdHa2OHTvq008/tbukKiMnJ0fXX3+9nnrqKU2dOlV/+9vf7C4J5ZCSkqI333xTb7/9trp3767MzEy7S6oyvvvuO7Vt21YFBQVaunQp146VgDADRwsODtbcuXP197//XbfffrvGjh3LLZvPUG5urgYPHqzJkyfr6aef1gsvvCA/Pz+7ywKMEhUVpWXLlunKK6/U1Vdfzd0XK8H+/fvVrVs3ffjhh3rvvfd09913c5t4g1x//fVatGiR1q1bp/bt2+u3336zuyTjffDBB+rcubMaN26slStXcoOeUhBm4Hi+vr565pln9Mwzz2jq1KkaNGiQsrKy7C7LSBkZGUpOTta8efP07rvv6t5772VjAaigkJAQzZs3T7fffrtGjRql++67j1vUVtAvv/yidu3a6aefftKSJUs0YMAAu0tCBXTs2FHffPONjh07prZt2+r777+3uyQjWZaladOmacCAAerVq5cWL16syMhIu8tyLMIMjHHnnXdq3rx5+uSTTxQXF6fp06crNzfX7rKMcOTIET366KOKi4vTxo0btWTJEg0cONDusgDj+fr66rnnntO0adM0ZcoUtWjRQu+88w5HkMtpz549uuOOO5SQkCDLsrRy5UpdfvnldpeFM9C0aVOtXLlSMTExatu2rYYMGaL09HS7yzKCZVn6/PPP1aZNG919992699579fbbb/N5MqdAmIFR+vbtq02bNumqq67SnXfeqSZNmmj27NnsDS1FTk6Opk2bpoYNG+qxxx7T8OHDtWnTJrVr187u0oAqZcyYMVqzZo0aNWqka6+9Vq1bt9Ynn3zC3Z1KceDAAY0bN05xcXGaM2eOJkyYoLVr16pRo0Z2l4ZKULduXa1YsULTp0/XokWLFB8fr1GjRmnXrl12l+ZYK1asUFJSkq666ioFBARo6dKleuqpp+Tjw6b6qfAfgnEaNGig2bNnKy0tTZdeeqmGDx+uhIQEvfvuu+wN/a+8vDy99NJLatSokcaOHat+/frp119/1bRp01SnTh27ywOqpFatWumTTz7RV199pdDQUPXq1Uvt27fXsmXL7C5N+fn5yszMtH3Hz9GjRzVp0iQ1bNhQzz//vMaMGaP09HT94x//UPXq1W2tDZXL399ft912m7Zu3apJkybp3Xffdb8nZWRk2F2eY6xdu1Y9evRQx44ddeTIEfc6pFOnTnaXZgzCDIzVrFkzvffee1qzZo0aNmyoQYMGKSYmRqNHj9bixYuVl5dnd4nn1LFjx/TRRx9p+PDhql+/vm699VYlJSVp8+bNeumll3T++efbXSLgFYoCzMKFC5WXl6fOnTuradOmGjdunL777rtzttOlsLBQCxYsUPfu3eXv76/w8HD5+/ure/fuWrBgwTmr4+DBg3rzzTc1cOBARUVF6ZFHHtFNN93k3sgNDw8/J3XAHsHBwbrvvvuUnp6u++67TzNnzlR0dLR69uypV155RX/++afdJZ5TlmXpxx9/1COPPKLWrVvr4osvVnp6ut59912tWbNGPXr04FrW0+SyOAauAQMGKDs7W5999pndpeAMfPfdd3r77bf1wQcf6LffflNYWJh69uypvn37qnv37lVyr9+BAwe0YMECzZ8/XwsXLlR2draaNWumfv366frrr1eLFi3sLhFnoHnz5urevbv++c9/2l0KKsiyLC1cuFBz587VRx99pH379qlevXrq06eP+vbtq86dO8vf37/SXzcrK0vXXHONPv/8c/n6+qqgoMD9XNHP3bt319y5cxUSElLpr//777/rww8/1Pz587Vs2TLl5+fr0ksvVd++fTV48GB2rnixjIwMvfnmm/rggw+0YsUKWZaldu3aqW/fvurbt2+VPNWwoKBAX3/9tebPn6/58+dr27Ztqlmzpnr27Kn+/furb9++3FX0DBBmRJipaizL0vr1690rjfXr1ysgIEBdunRRmzZtlJiYqISEBDVq1Miolcfx48e1ZcsWbdiwQWlpafr222+1fPlyFRQU6PLLL1ffvn3Vp08fxcfH210qKglhpmopKCjQN9984143paenq2bNmkpOTlarVq3c66bY2NgzOk++sLBQPXv2VGpqaplHX3x8fJSSkqIFCxac0etlZ2dr06ZN7nXTihUrtGrVKvn5+alLly7q27evevfurejo6Aq/BqqmjIwMjx1yOTk5atGihTp37uweDwkJCapZs6bdpZabZVnavXu3ezysW7dOCxcuVEZGhurVq+cObZ06dTorOzK8EWFGhJmqbtu2bfrwww/16aef6scff3Qf0g4ICFCzZs08VpiJiYmqV6+erSEnLy9PO3bsUFpamtLS0twrxC1btrjPdz/vvPN00UUXqVevXurduzefkF1FEWaqLsuylJaWpvnz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AAAARiLMAAAAADASYQYAAACAkfzsLsAJGjZsqP3799tdBgB4aNKkierVq2d3GQAAOBZHZiRlZWVpzZo1dpcBAG6WZWnZsmWyLMvuUgAAcCzCjKQLL7xQaWlp2r17t92lAIAkafXq1Tp06JAuvPBCu0sBAMCxCDOSBg0aJH9/f82ZM8fuUgBAkjRr1ixFR0era9eudpcCAIBjEWYkhYWFacCAAXr11VeVl5dndzkAvNyhQ4f0n//8RzfddJN8fX3tLgcAAMcizPzXmDFjtH37dt155512lwLAixUUFOiGG26QJI0cOdLmagAAcDbCzH9dcsklevHFFzVjxgzNmDHD7nIAeKkHHnhAn332md555x3FxMTYXQ4AAI7GrZlPMGLECP3444+64447VKNGDQ0ePNjukgB4Ccuy9PTTT+vJJ5/U1KlTlZKSYndJAAA4HmHmJP/85z91+PBh3XjjjVq+fLmeffZZBQUF2V0WgCrswIEDuummm/Txxx9r3Lhxuuuuu+wuCQAAI3Ca2Un8/Pw0e/Zsvfrqq5ozZ47atm2rn376ye6yAFRR3377rVq3bq2vvvpKH3/8sSZPniyXy2V3WQAAGIEwUwKXy6Xhw4fr+++/V25urhITEzVq1Cjt2rXL7tIAVBE///yzrrvuOl1++eWqV6+e1q1bp169etldFgAARiHMlCExMVFr167V5MmT9e6776pRo0YaO3asMjIy7C4NgKF27NihESNGqHnz5lqxYoVeeuklLV++nIv9AQCoAMLMKQQHB2vs2LFKT0/Xfffdp5kzZ6phw4b6+9//rh9++MHu8gAYwLIsrVixQsOGDVPjxo310UcfacqUKfr111918803q1q1anaXCACAkQgz5RQaGqqHH35Y6enpGj16tObOnavWrVurVatWev7557V//367SwTgMLt27dLjjz+uJk2aqGPHjlq+fLl7PTJmzBgFBgbaXSIAAEZzWZZl2V2EifLz8/X5559r1qxZ+vjjj+Xj46Orr75avXr1Urdu3RQdHW13iQBssHXrVi1atEgfffSRFi5cqICAAF1zzTUaPny4OnbsKB8f9iHh3HvxxRd11113KTc31+5SAKBScWvmCvLz81OvXr3Uq1cv7d27V2+88YbeeustDR8+XJZlqXnz5kpOTla3bt2UlJSkkJAQu0sGcBZkZmZqyZIlSk1N1aJF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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Create ansatz and convert to tensor diagrams\n", - "\n", - "from lambeq import AtomicType, SpiderAnsatz\n", - "from lambeq.backend.tensor import Dim\n", - "\n", - "N = AtomicType.NOUN\n", - "S = AtomicType.SENTENCE\n", - "\n", - "# Create an ansatz by assigning 2 dimensions to both\n", - "# noun and sentence spaces\n", - "ansatz = SpiderAnsatz({N: Dim(2), S: Dim(2)})\n", - "\n", - "train_circuits = [ansatz(d) for d in train_diagrams]\n", - "test_circuits = [ansatz(d) for d in test_diagrams]\n", - "\n", - "all_circuits = train_circuits + test_circuits\n", - "\n", - "all_circuits[0].draw(figsize=(8,4), fontsize=13)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating a vocabulary\n", - "\n", - "We are now ready to create a vocabulary." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0.5488135 , 0.71518937])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create vocabulary\n", - "\n", - "from sympy import default_sort_key\n", - "\n", - "vocab = sorted(\n", - " {sym for circ in all_circuits for sym in circ.free_symbols},\n", - " key=default_sort_key\n", - ")\n", - "tensors = [np.random.rand(w.size) for w in vocab]\n", - "\n", - "tensors[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Training\n", - "\n", - "### Define loss function\n", - "\n", - "This is a binary classification task, so we will use binary cross entropy as the loss." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "def sigmoid(x):\n", - " return 1 / (1 + np.exp(-x))\n", - "\n", - "def loss(tensors):\n", - " # Lambdify\n", - " np_circuits = [c.lambdify(*vocab)(*tensors) for c in train_circuits]\n", - " # Compute predictions\n", - " predictions = sigmoid(np.array([c.eval(dtype=float) for c in np_circuits]))\n", - "\n", - " # binary cross-entropy loss\n", - " cost = -np.sum(train_targets * np.log2(predictions)) / len(train_targets)\n", - " return cost" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The loss function follows the steps below:\n", - "\n", - "1. The :term:`symbols ` in the training diagrams are replaced with concrete ``numpy`` arrays.\n", - "2. The resulting :term:`tensor networks ` are evaluated and produce results.\n", - "3. Based on the predictions, an average loss is computed for the specific iteration.\n", - "\n", - "We use JAX in order to get a gradient function on the loss, and \"just-in-time\" compile it to improve speed:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from jax import jit, grad\n", - "\n", - "training_loss = jit(loss)\n", - "gradient = jit(grad(loss))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Train" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "We are now ready to start training. The following loop computes gradients and uses them to update the tensors associated with the :term:`symbols `." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 10 - loss 0.1838509440422058\n", - "Epoch 20 - loss 0.029141228646039963\n", - "Epoch 30 - loss 0.014427061192691326\n", - "Epoch 40 - loss 0.009020495228469372\n", - "Epoch 50 - loss 0.006290055345743895\n", - "Epoch 60 - loss 0.004701168276369572\n", - "Epoch 70 - loss 0.0036874753423035145\n", - "Epoch 80 - loss 0.0029964144341647625\n", - "Epoch 90 - loss 0.0025011023972183466\n" - ] - } - ], - "source": [ - "training_losses = []\n", - "\n", - "epochs = 90\n", - "\n", - "for i in range(epochs):\n", - "\n", - " gr = gradient(tensors)\n", - " for k in range(len(tensors)):\n", - " tensors[k] = tensors[k] - gr[k] * 1.0\n", - "\n", - " training_losses.append(float(training_loss(tensors)))\n", - "\n", - " if (i + 1) % 10 == 0:\n", - " print(f\"Epoch {i + 1} - loss {training_losses[-1]}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Evaluate\n", - "\n", - "Finally, we use the trained model on the test dataset:" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy on test set: 0.8666666666666667\n" - ] - } - ], - "source": [ - "# Testing\n", - "\n", - "np_test_circuits = [c.lambdify(*vocab)(*tensors) for c in test_circuits]\n", - "test_predictions = sigmoid(np.array([c.eval(dtype=float) for c in np_test_circuits]))\n", - "\n", - "hits = 0\n", - "for i in range(len(np_test_circuits)):\n", - " target = test_targets[i]\n", - " pred = test_predictions[i]\n", - " if np.argmax(target) == np.argmax(pred):\n", - " hits += 1\n", - "\n", - "print(\"Accuracy on test set:\", hits / len(np_test_circuits))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Working with quantum circuits" - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "The process when working with :term:`quantum circuits ` is very similar, with two important differences:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. The parameterisable part of the circuit is an array of parameters, as described in Section [Circuit Symbols](training-symbols.ipynb#Circuit-symbols), instead of tensors associated to words.\n", - "2. If optimisation takes place on quantum hardware, standard automatic differentiation cannot be used. An alternative is to use a gradient-approximation technique, such as [Simultaneous Perturbation Stochastic Approximation](https://en.wikipedia.org/wiki/Simultaneous_perturbation_stochastic_approximation) (SPSA)." - ] - }, - { - "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "More information can be also found in [Mea2020]_ and [Lea2021]_, the papers that describe the first NLP experiments on quantum hardware.\n", - "\n", - ".. rubric:: See also:\n", - "\n", - "- `Classical pipeline with Pytorch <../examples/classical-pipeline.ipynb>`_\n", - "- `Quantum pipeline with tket <../examples/quantum-pipeline.ipynb>`_\n", - "- `Quantum pipeline with JAX <../examples/quantum-pipeline-jax.ipynb>`_" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/uml-diagrams.rst b/docs/uml-diagrams.rst deleted file mode 100644 index 8c830586..00000000 --- a/docs/uml-diagrams.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. _uml-diagrams: - -Class diagrams -============== - -For users who would like to contribute more actively to the development of ``lambeq``, this section provides high-level `UML class diagrams `_ for the most important sub-packages and components of the toolkit. For completeness, the diagrams contain first-degree associations with external libraries. - -.. note:: - Click on a diagram to zoom. - -The significance of the colors used for the class/package boxes is explained in the following diagram: - -.. image:: ./puml/img/legend.png - :scale: 80% - -.. _uml_ansatz: - -lambeq.ansatz -------------- - -.. image:: ./puml/img/ansatz.png - :width: 100% - -.. _uml_backend: - -lambeq.backend --------------- - -This shows the internals of the classes from :py:mod:`.grammar` and how they are related to each other via attributes and methods. - -.. image:: ./puml/img/backend.png - :width: 80% - -Zooming out a bit, this shows how the classes from :py:mod:`.grammar`, :py:mod:`.tensor`, and :py:mod:`.quantum` interact through inheritance. - -.. image:: ./puml/img/backend-inheritance.png - :width: 80% - -This is similar to the above diagram but with a focus on classes from :py:mod:`.quantum`. - -.. image:: ./puml/img/backend-quantum-inheritance.png - :width: 80% - -.. _uml_bobcat: - -lambeq.bobcat -------------- - -.. image:: ./puml/img/bobcat.png - :scale: 80% - -.. _uml_rewrite: - -lambeq.rewrite --------------- - -.. image:: ./puml/img/rewrite.png - :width: 100% - -.. _uml_text2diagram: - -lambeq.text2diagram -------------------- - -.. image:: ./puml/img/text2diagram.png - :width: 100% - -.. _uml_tokeniser: - -lambeq.tokeniser ----------------- - -.. image:: ./puml/img/tokeniser.png - :scale: 80% - -.. _uml_training: - -lambeq.training ---------------- - -.. image:: ./puml/img/training.png - :scale: 58% - diff --git a/docs/use-cases.rst b/docs/use-cases.rst deleted file mode 100644 index b74f0a68..00000000 --- a/docs/use-cases.rst +++ /dev/null @@ -1,220 +0,0 @@ -.. _sec-usecases: - -lambeq use cases -================ - -``lambeq`` covers a wide range of experiment use cases (:numref:`fig-usecases`) in three broad categories: - -- quantum simulations on classical hardware; -- actual runs on quantum hardware; -- evaluation of tensor networks on classical hardware. - -.. _fig-usecases: -.. figure:: _static/images/use_cases.png - :scale: 45% - :align: center - - Hierarchy of experimental use cases in lambeq. - -The above figure introduces a couple of concepts that might need further explanation for users new to quantum computing: - -- **shot-based run/simulation**: Unlike classical computers, quantum computers are inherently non-deterministic. This means that running a quantum circuit only once and using the output for some task would produce unreliable results. The solution is to run the same circuit many times (or :term:`shots`), exploiting statistical aggregation. The inherent uncertainty of quantum computers is greatly increased by the limitations of current :term:`NISQ` devices, which are prone to :term:`noise`, errors, and environmental interference. -- **noisy simulation**: A noisy simulation uses a noise model that tries to approximate the negative effect of noise, errors, and environmental interference that are inherent in current :term:`NISQ` devices. It is the closest you can get to an actual quantum run from a simulation running on classical hardware. - -:numref:`tbl-usecases` provides a concise reference for the most common scenarios, together with the recommended ``lambeq`` models and trainers to use for each of them, while the following subsections present each case in more detail. - -.. _tbl-usecases: -.. csv-table:: Common training use cases. - :header: "Use case", "Configurations", "" - :widths: 40, 40, 10 - - "Exact non-shot based simulation of quantum circuits on classical hardware", "| :py:class:`.NumpyModel` with :py:class:`.QuantumTrainer` - | :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`", ":ref:`details `" - "Noiseless shot-based simulation of quantum circuits on classical hardware", "| :py:class:`.TketModel` with :py:class:`.QuantumTrainer`, - | :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`", ":ref:`details `" - "Noisy shot-based simulation of quantum circuits on classical hardware", "| :py:class:`.TketModel` with :py:class:`.QuantumTrainer` - | :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`", ":ref:`details `" - "Evaluation of quantum circuits on a quantum computer", "| :py:class:`.TketModel` with :py:class:`.QuantumTrainer` - | :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`", ":ref:`details `" - "Evaluation of classical, tensor-based models", ":py:class:`.PytorchModel` with :py:class:`.PytorchTrainer`", ":ref:`details `" - "Hybrid classical/quantum simulation of quantum circuits on classical hardware", ":py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`", ":ref:`details `" - -.. _uc1: - -Exact (non :term:`shot-based `) simulation of quantum circuits on classical hardware -------------------------------------------------------------------------------------------- -:Description: - Perform a simple, noiseless, non-shot-based simulation of a quantum run on classical hardware. -:Configuration: - - :py:class:`.NumpyModel` with :py:class:`.QuantumTrainer`. - - :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`. -:When to use: - - As a first proof-of-concept for a quantum model configuration - - As a simple baseline for comparing with quantum runs - - When fast training speeds are required - -Computation with :term:`NISQ` devices is slow, noisy and limited, so it is still not practical to do extensive training and comparative analyses on them. For this reason, and especially at the early stages of modelling, proofs-of-concept are usually obtained by running simulations on classical hardware. The simplest possible way to simulate a quantum computation on a classical computer is by using linear algebra; since quantum gates correspond to complex-valued tensors, each circuit can be represented as a tensor network where computation takes the form of tensor contraction. The output of the tensor network gives the ideal probability distribution of the measurement outcomes on a noise-free quantum computer and is only a rough approximation of the sampled probability distribution obtained from a :term:`NISQ` device. An "exact simulation" of this form usually serves as a simple baseline or the first proof of concept for testing a quantum configuration, and in ``lambeq`` is implemented by the :py:class:`.NumpyModel` class, and by the :py:class:`.PennyLaneModel` with the attribute ``backend_config={'backend'='default.qubit', 'shots'=None}``. - -.. rubric:: See also: - -- :ref:`sec-numpymodel` -- :ref:`sec-pennylanemodel` - -.. _uc2: - -:term:`Shot-based ` simulation of quantum circuits on classical hardware -------------------------------------------------------------------------------- - -:Description: - Noisy or noiseless shot-based simulations on classical hardware using :term:`tket` or :term:`PennyLane` backends. -:Configuration: - - :py:class:`.TketModel` with :py:class:`.QuantumTrainer`. - - :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`. -:When to use: - - As a faithful approximation of an actual quantum run - - When the available actual quantum machines are still small for the kind of experiment you have in mind - -When a faithful approximation of a quantum run is needed, one should use a proper shot-based simulation, optionally including a noise model that is appropriate for the specific kind of quantum hardware. In fact, a noisy shot-based simulation is as close as we could get to an actual quantum run. For example, in order to run an architecture-aware simulation on an IBM machine, we could use a :py:class:`.TketModel` initialised with a :term:`Qiskit` noise model: - -.. code-block:: python - - from pytket.extensions.qiskit import IBMQEmulatorBackend - from lambeq import TketModel - - all_circuits = train_circuits + dev_circuits + test_circuits - - device_name = 'ibmq_washington' # need credentials to access this device - backend = IBMQEmulatorBackend(device_name) - backend_config = { - 'backend': backend, - 'compilation': backend.default_compilation_pass(2), - 'shots': 8192 - } - model = TketModel.from_diagrams(all_circuits, backend_config=backend_config) - -As another example, simulating a noisy run on a Honeywell machine with a :py:class:`.PennyLaneModel` would require the following initialisation: - -.. code-block:: python - - from lambeq import PennyLaneModel - - all_circuits = train_circuits + dev_circuits + test_circuits - - backend_config = {'backend': 'honeywell.hqs', - 'device': 'H1', - 'shots': 1000, - 'probabilities': True, - 'normalize': True} - model = PennyLaneModel.from_diagrams(all_circuits, - backend_config=backend_config) - -If you have not previously done so, it will be necessary to save your Honeywell account email address to the PennyLane configuration file in order to use the 'honeywell.hqs' backend: - -.. code-block:: python - - import pennylane as qml - - qml.default_config["honeywell.global.user_email"] = "my_Honeywell/Quantinuum_account_email" - qml.default_config.save(qml.default_config.path) - - -Using a noise model in our simulations is not always necessary, especially in the early stages of modelling when it is often useful to assess the expected performance of the model in ideal conditions, ignoring the effects of noise and environmental interference. By default :py:class:`.PennyLaneModel` uses a noiseless simulation, and a shot-based simulation can be initialised as below: - -.. code-block:: python - - from lambeq import PennyLaneModel - - backend_config = {'shots': 1000} - model = PennyLaneModel.from_diagrams(all_circuits, - backend_config=backend_config) - -.. rubric:: See also: - -- :ref:`sec-tketmodel` -- :ref:`sec-pennylanemodel` - -.. _uc3: - -Evaluation of quantum circuits on a quantum computer ----------------------------------------------------- - -:Description: - Perform actual quantum runs using :term:`tket` or :term:`PennyLane` backends. -:Configuration: - - :py:class:`.TketModel` with :py:class:`.QuantumTrainer`. - - :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`. -:When to use: - The real thing, use it whenever possible! - -As soon as you are satisfied with the results of the simulations, it's time for the ultimate test of your model on a real quantum machine. For this, you will need an account on a platform that provides quantum services, such as `IBM Quantum `_. - -.. note:: - - While providers usually offer free plans which allow some limited access to their resources, depending on your experimental needs a paid subscription might be required. :numref:`tbl-quantumservices` summarises some popular quantum platforms that are currently available to the public. - -.. _tbl-quantumservices: -.. csv-table:: Quantum platforms. - :header: "Platform", "Technology" - :widths: 30, 60 - :align: center - - "`Alpine Quantum Technologies `_", "`Trapped ions `_" - "`Amazon Braket `_", "`Annealing `_, trapped ions, `superconducting qubits `_, `photonics `_" - "`Atom Computing `_", "`Neutral atoms `_" in an "`optical lattice `_" - "`Google Quantum AI `_", "Superconducting qubits" - "`IBM Quantum `_", "Superconducting qubits" - "`IonQ Cloud access `_", "Trapped ions" - "`IQM `_", "Superconducting qubits" - "`Microsoft Azure Quantum `_", "Trapped ions, superconducting qubits, `neutral atoms `_" - "`Oxford Quantum Circuits `_", "Superconducting qubits" - "`Quandela `_", "Photonics" - "`Quantinuum `_", "Trapped ions" - "`Quantware `_", "Superconducting qubits" - "`QuEra `_", Neutral atoms - "`Rigetti Quantum Cloud Services `_", "Superconducting qubits" - -.. rubric:: See also: - -- :ref:`sec-tketmodel` -- :ref:`sec-pennylanemodel` - -.. _uc4: - -Evaluation of classical tensor-based models -------------------------------------------- - -:Description: - Perform tensor-based experiments on classical hardware using :term:`PyTorch`. -:Configuration: - :py:class:`.PytorchModel` with :py:class:`.PytorchTrainer`. -:When to use: - - As a proof-of-concept for validating sentence modelling at a high level - - As a classical baseline to compare with similarly structured quantum models - - For enhancing models with neural parts and other ML features - -While ``lambeq`` is primarily aimed at the design and execution of NLP models on quantum hardware, in practice it is more than a QNLP toolkit: it is a modelling tool capable of representing language at many different levels of abstraction, including syntax trees, string/monoidal diagrams, strict pregroup diagrams, and quantum circuits. For example, the abstract representation given by a string diagram can be directly translated into a tensor network and executed on classical hardware. This can be useful for providing comparison and benchmarking between quantum models and similar classical implementations. - -Furthermore, using the PyTorch backend via :py:class:`.PytorchModel` provides access to a wide range of robust deep learning features, allowing you to combine your tensor-based models with neural parts (e.g. embeddings or classifiers) in an effortless way. - -.. rubric:: See also: - -- :ref:`sec-pytorchmodel` - -.. _uc5: - -Hybrid classical/quantum simulations on classical hardware ----------------------------------------------------------- - -:Description: - Hybrid neural/classical/quantum configurations based on :term:`PennyLane` and :term:`PyTorch`. -:Configuration: - :py:class:`.PennyLaneModel` with :py:class:`.PytorchTrainer`. -:When to use: - - To mix neural nets (or other classical models) and quantum circuits into hybrid models - - To exploit the rich functionality and options provided by the :term:`PennyLane` toolkit - -:term:`PennyLane` is currently one of the most complete quantum ML toolkits available, covering almost every possible training use case. One of its big strengths is allowing the combination of quantum and classical parts in models, in what is usually referred to as `hybrid` QML. PennyLane integrates smoothly with PyTorch; for example in ``lambeq`` it is possible to use a :py:class:`.PennyLaneModel` in conjunction with a :py:class:`.PytorchTrainer` to perform a wide range of experiments. - -.. rubric:: See also: - -- :ref:`sec-pennylanemodel` diff --git a/lambeq/backend/grammar.py b/lambeq/backend/grammar.py index 3e7d3873..9b5534e3 100644 --- a/lambeq/backend/grammar.py +++ b/lambeq/backend/grammar.py @@ -989,11 +989,14 @@ def transpose(self, left: bool = False) -> Self: The transpose of any diagram in a category with cups and caps can be constructed as follows: - (default) - Left transpose Right transpose - │╭╮ ╭╮│ - │█│ │█│ - ╰╯│ │╰╯ + + .. code-block:: console + + (default) + Left transpose Right transpose + │╭╮ ╭╮│ + │█│ │█│ + ╰╯│ │╰╯ The input and output types of the transposed diagram are the adjoints of the respective types of the original diagram. @@ -1870,16 +1873,16 @@ class Functor: >>> n = Ty('n') >>> diag = Cap(n, n.l) @ Id(n) >> Id(n) @ Cup(n.l, n) >>> diag.draw( - ... figsize=(2, 2), path='./docs/_static/images/snake.png') + ... figsize=(2, 2), path='./snake.png') - .. image:: ./docs/_static/images/snake.png + .. image:: ./_static/images/snake.png :align: center >>> F = Functor(grammar, lambda _, ty : ty @ ty) >>> F(diag).draw( - ... figsize=(2, 2), path='./docs/_static/images/snake-2.png') + ... figsize=(2, 2), path='./snake-2.png') - .. image:: ./docs/_static/images/snake-2.png + .. image:: ./_static/images/snake-2.png :align: center """ diff --git a/setup.cfg b/setup.cfg index 43798199..67cb316d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,7 +7,7 @@ author = Cambridge Quantum QNLP team author_email = lambeq-support@cambridgequantum.com license = Apache-2.0 license_files = file: LICENSE -url = https://cqcl.github.io/lambeq +url = https://cqcl.github.io/lambeq-docs download_url = https://pypi.org/project/lambeq project_urls = Source Code = https://github.com/CQCL/lambeq