From 61b564d7ce8c43fee3b5e3958d0448ca68ae9641 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Tue, 7 May 2024 19:10:12 -0400 Subject: [PATCH 01/10] [ITensorGaussianMPS] Move to separate repository (#1415) --- .../04_ITensorGaussianMPS_bug_report.md | 60 - .../04_ITensorGaussianMPS_feature_request.md | 24 - .../generate_issue_templates.jl | 10 +- .github/workflows/CompatHelper.yml | 2 +- .../test_itensorgaussianmps_ubuntu.yml | 44 - ITensorGaussianMPS/.JuliaFormatter.toml | 2 - .../.github/workflows/CompatHelper.yml | 16 - .../.github/workflows/TagBot.yml | 13 - ITensorGaussianMPS/.github/workflows/test.yml | 31 - ITensorGaussianMPS/.gitignore | 2 - ITensorGaussianMPS/LICENSE | 21 - ITensorGaussianMPS/NEWS.md | 44 - ITensorGaussianMPS/Project.toml | 15 - ITensorGaussianMPS/README.md | 105 -- ITensorGaussianMPS/examples/Project.toml | 3 - .../broken/hubbard_1d_no_spin_conservation.jl | 84 -- .../broken/hubbard_2d_no_spin_conservation.jl | 96 -- .../examples/hubbard_1d_spin_conservation.jl | 109 -- .../examples/hubbard_2d_spin_conservation.jl | 106 -- .../examples/mps_to_determinants.jl | 81 -- .../examples/spinless_fermion.jl | 71 -- .../examples/spinless_fermion_pairing.jl | 84 -- ITensorGaussianMPS/src/ITensorGaussianMPS.jl | 25 - ITensorGaussianMPS/src/gmera.jl | 183 --- ITensorGaussianMPS/src/gmps.jl | 1073 ----------------- ITensorGaussianMPS/src/linalg.jl | 201 --- ITensorGaussianMPS/test/Project.toml | 4 - ITensorGaussianMPS/test/electron.jl | 279 ----- ITensorGaussianMPS/test/gmera.jl | 176 --- ITensorGaussianMPS/test/gmps.jl | 239 ---- ITensorGaussianMPS/test/linalg.jl | 36 - ITensorGaussianMPS/test/runtests.jl | 9 - 32 files changed, 5 insertions(+), 3243 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_feature_request.md delete mode 100644 .github/workflows/test_itensorgaussianmps_ubuntu.yml delete mode 100644 ITensorGaussianMPS/.JuliaFormatter.toml delete mode 100644 ITensorGaussianMPS/.github/workflows/CompatHelper.yml delete mode 100644 ITensorGaussianMPS/.github/workflows/TagBot.yml delete mode 100644 ITensorGaussianMPS/.github/workflows/test.yml delete mode 100644 ITensorGaussianMPS/.gitignore delete mode 100644 ITensorGaussianMPS/LICENSE delete mode 100644 ITensorGaussianMPS/NEWS.md delete mode 100644 ITensorGaussianMPS/Project.toml delete mode 100644 ITensorGaussianMPS/README.md delete mode 100644 ITensorGaussianMPS/examples/Project.toml delete mode 100644 ITensorGaussianMPS/examples/broken/hubbard_1d_no_spin_conservation.jl delete mode 100644 ITensorGaussianMPS/examples/broken/hubbard_2d_no_spin_conservation.jl delete mode 100644 ITensorGaussianMPS/examples/hubbard_1d_spin_conservation.jl delete mode 100644 ITensorGaussianMPS/examples/hubbard_2d_spin_conservation.jl delete mode 100644 ITensorGaussianMPS/examples/mps_to_determinants.jl delete mode 100644 ITensorGaussianMPS/examples/spinless_fermion.jl delete mode 100644 ITensorGaussianMPS/examples/spinless_fermion_pairing.jl delete mode 100644 ITensorGaussianMPS/src/ITensorGaussianMPS.jl delete mode 100644 ITensorGaussianMPS/src/gmera.jl delete mode 100644 ITensorGaussianMPS/src/gmps.jl delete mode 100644 ITensorGaussianMPS/src/linalg.jl delete mode 100644 ITensorGaussianMPS/test/Project.toml delete mode 100644 ITensorGaussianMPS/test/electron.jl delete mode 100644 ITensorGaussianMPS/test/gmera.jl delete mode 100644 ITensorGaussianMPS/test/gmps.jl delete mode 100644 ITensorGaussianMPS/test/linalg.jl delete mode 100644 ITensorGaussianMPS/test/runtests.jl diff --git a/.github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_bug_report.md b/.github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_bug_report.md deleted file mode 100644 index a774199b5a..0000000000 --- a/.github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_bug_report.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: ITensorGaussianMPS.jl bug report -about: Create a bug report to help us improve ITensorGaussianMPS.jl -title: "[ITensorGaussianMPS] [BUG] YOUR SHORT DESCRIPTION OF THE BUG HERE" -labels: ["ITensorGaussianMPS", "bug"] -assignees: '' - ---- - -**Description of bug** - -Please give a brief description of the bug or unexpected behavior here. - -**Minimal code demonstrating the bug or unexpected behavior** - -If applicable, provide a minimal code that can be run to demonstrate the bug or unexpected behavior. - -If you are unable to construct a minimal code that demonstrates the bug or unexpected behavior, provide detailed steps for how to reproduce the behavior you are seeing. - -
Minimal runnable code

- -```julia -[YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Expected output or behavior** - -Describe what you expected to happen. - -If you provided a minimal code that can be run to demonstrate the bug or unexpected behavior, describe what you expected the output would be. - - -**Actual output or behavior** - -Describe what actually happened. - -If you provided a minimal code that demonstrates the bug or unexpected behavior, provide the output you get from that code. If the code leads to an error or warning, include the full error or warning below. - -
Output of minimal runnable code

- -```julia -[OUTPUT OF YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Version information** - - - Output from `versioninfo()`: -```julia -julia> versioninfo() -[YOUR OUTPUT HERE] -``` - - Output from `using Pkg; Pkg.status("ITensors")`: -```julia -julia> using Pkg; Pkg.status("ITensors") -[YOUR OUTPUT HERE] -``` diff --git a/.github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_feature_request.md b/.github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_feature_request.md deleted file mode 100644 index c4f75c0112..0000000000 --- a/.github/ISSUE_TEMPLATE/04_ITensorGaussianMPS_feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: ITensorGaussianMPS.jl feature request -about: Suggest an idea for ITensorGaussianMPS.jl -title: "[ITensorGaussianMPS] [ENHANCEMENT] YOUR SHORT DESCRIPTION OF THE FEATURE REQUEST HERE" -labels: ["ITensorGaussianMPS", "enhancement"] -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl index af1bee1b64..c3021a136b 100644 --- a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl +++ b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl @@ -6,7 +6,6 @@ package_names = [ "ITensors", "NDTensors", "ITensorGPU", - "ITensorGaussianMPS", "ITensorVisualizationBase", "ITensorUnicodePlots", "ITensorMakie", @@ -17,11 +16,10 @@ package_ordering = Dict([ "ITensors" => 1, "NDTensors" => 2, "ITensorGPU" => 3, - "ITensorGaussianMPS" => 4, - "ITensorVisualizationBase" => 5, - "ITensorUnicodePlots" => 6, - "ITensorMakie" => 7, - "ITensorGLMakie" => 8, + "ITensorVisualizationBase" => 4, + "ITensorUnicodePlots" => 5, + "ITensorMakie" => 6, + "ITensorGLMakie" => 7, ]) function bug_report_file(package_name::String) diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index 5b1520abe6..0f630e1060 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -12,4 +12,4 @@ jobs: - name: CompatHelper.main() env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGaussianMPS", "ITensorGLMakie", "ITensorMakie", "ITensorUnicodePlots", "ITensorVisualizationBase", "NDTensors"])' + run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "ITensorMakie", "ITensorUnicodePlots", "ITensorVisualizationBase", "NDTensors"])' diff --git a/.github/workflows/test_itensorgaussianmps_ubuntu.yml b/.github/workflows/test_itensorgaussianmps_ubuntu.yml deleted file mode 100644 index ad8e6c4f0b..0000000000 --- a/.github/workflows/test_itensorgaussianmps_ubuntu.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Run ITensorGaussianMPS tests (Ubuntu) - -on: - push: - branches: - - main - tags: '*' - pull_request: - -jobs: - test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.threads }} thread(s) - runs-on: ${{ matrix.os }} - env: - JULIA_NUM_THREADS: ${{ matrix.threads }} - strategy: - matrix: - version: - - '1.6' - - '1' - os: - - ubuntu-latest - threads: - - '1' - arch: - - x64 - exclude: - # MacOS not available on x86 - - {os: 'macOS-latest', arch: 'x86'} - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - - name: Install Julia dependencies and run tests - shell: julia --depwarn=yes {0} - run: | - using Pkg; - Pkg.activate(temp=true) - Pkg.develop(path="./NDTensors"); - Pkg.develop(path="."); - Pkg.develop(path="./ITensorGaussianMPS"); - Pkg.test("ITensorGaussianMPS"); diff --git a/ITensorGaussianMPS/.JuliaFormatter.toml b/ITensorGaussianMPS/.JuliaFormatter.toml deleted file mode 100644 index 08f664cdb9..0000000000 --- a/ITensorGaussianMPS/.JuliaFormatter.toml +++ /dev/null @@ -1,2 +0,0 @@ -style = "blue" -indent = 2 diff --git a/ITensorGaussianMPS/.github/workflows/CompatHelper.yml b/ITensorGaussianMPS/.github/workflows/CompatHelper.yml deleted file mode 100644 index cba9134c67..0000000000 --- a/ITensorGaussianMPS/.github/workflows/CompatHelper.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: CompatHelper -on: - schedule: - - cron: 0 0 * * * - workflow_dispatch: -jobs: - CompatHelper: - runs-on: ubuntu-latest - steps: - - name: Pkg.add("CompatHelper") - run: julia -e 'using Pkg; Pkg.add("CompatHelper")' - - name: CompatHelper.main() - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }} - run: julia -e 'using CompatHelper; CompatHelper.main()' diff --git a/ITensorGaussianMPS/.github/workflows/TagBot.yml b/ITensorGaussianMPS/.github/workflows/TagBot.yml deleted file mode 100644 index e72d645208..0000000000 --- a/ITensorGaussianMPS/.github/workflows/TagBot.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: TagBot -on: - schedule: - - cron: 0 0 * * * - workflow_dispatch: -jobs: - TagBot: - runs-on: ubuntu-latest - steps: - - uses: JuliaRegistries/TagBot@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - ssh: ${{ secrets.DOCUMENTER_KEY }} diff --git a/ITensorGaussianMPS/.github/workflows/test.yml b/ITensorGaussianMPS/.github/workflows/test.yml deleted file mode 100644 index 71bef92420..0000000000 --- a/ITensorGaussianMPS/.github/workflows/test.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Tests -on: - push: - branches: - - main - tags: '*' - pull_request: -jobs: - test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - version: - - '1.3' - - '1' - os: - - ubuntu-latest - arch: - - x64 - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - - uses: julia-actions/julia-buildpkg@latest - - uses: julia-actions/julia-runtest@latest - - uses: julia-actions/julia-uploadcodecov@latest - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/ITensorGaussianMPS/.gitignore b/ITensorGaussianMPS/.gitignore deleted file mode 100644 index faa7bfd045..0000000000 --- a/ITensorGaussianMPS/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -Manifest.toml -.*.swp diff --git a/ITensorGaussianMPS/LICENSE b/ITensorGaussianMPS/LICENSE deleted file mode 100644 index 0f0d66e4ad..0000000000 --- a/ITensorGaussianMPS/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Matthew Fishman and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/ITensorGaussianMPS/NEWS.md b/ITensorGaussianMPS/NEWS.md deleted file mode 100644 index 9a08924a85..0000000000 --- a/ITensorGaussianMPS/NEWS.md +++ /dev/null @@ -1,44 +0,0 @@ -This file is a (mostly) comprehensive list of changes made in each release of ITensorGaussianMPS.jl. For a completely comprehensive but more verbose list, see the [commit history on Github](https://github.com/ITensor/ITensors.jl/commits/main/ITensorGaussianMPS). - -While we are in v0.x of the package, we will follow the convention that updating from v0.x.y to v0.x.(y+1) (for example v0.1.15 to v0.1.16) should not break your code, unless you are using internal/undocumented features of the code, while updating from `v0.x.y` to `v0.(x+1).y` might break your code, though we will try to add deprecation warnings when possible, such as for simple cases where the name of a function changes. - -Note that as of Julia v1.5, in order to see deprecation warnings you will need to start Julia with `julia --depwarn=yes` (previously they were on by default). Please run your code like this before upgrading between minor versions of the code (for example from v0.1.41 to v0.2.0). - -After we release v1 of the package, we will start following [semantic versioning](https://semver.org). - -ITensors v0.0.4 Release Notes -============================= - -Bugs: - -Enhancements: - -- Update for new OpSum representation and interface (#920) -- Add check for proper fermionic operators when making hopping Hamiltonian (#920) - -ITensors v0.0.3 Release Notes -============================= - -Bugs: - -Enhancements: - -- Add support for GMERA (#879) - -ITensors v0.0.2 Release Notes -============================= - -Bugs: - -Enhancements: - -- Bump to ITensors 0.3 (#880) - -ITensors v0.0.1 Release Notes -============================= - -Bugs: - -Enhancements: - -- Move ITensorGaussianMPS package into ITensors repository (#792) diff --git a/ITensorGaussianMPS/Project.toml b/ITensorGaussianMPS/Project.toml deleted file mode 100644 index 75b4b4abb8..0000000000 --- a/ITensorGaussianMPS/Project.toml +++ /dev/null @@ -1,15 +0,0 @@ -name = "ITensorGaussianMPS" -uuid = "2be41995-7c9f-4653-b682-bfa4e7cebb93" -authors = ["Matthew Fishman and contributors"] -version = "0.1.6" - -[deps] -Compat = "34da2185-b29b-5c13-b0c7-acf172513d20" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[compat] -Compat = "3.40.0, 4" -ITensors = "0.3.58, 0.4, 0.5" -LinearAlgebra = "1.6" -julia = "1.6" diff --git a/ITensorGaussianMPS/README.md b/ITensorGaussianMPS/README.md deleted file mode 100644 index 17588e246f..0000000000 --- a/ITensorGaussianMPS/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# ITensorGaussianMPS - -|**Citation** |**Open-access preprint** | -|:-------------------------------------------------------------------------------:|:-----------------------------------------------------:| -| [![DOI](http://img.shields.io/badge/PRB-10.1103/PhysRevB.92.075132-B31B1B.svg)](https://doi.org/10.1103/PhysRevB.92.075132) | [![arXiv](https://img.shields.io/badge/arXiv-1504.07701-b31b1b.svg)](https://arxiv.org/abs/1504.07701) | - -A package for creating the matrix product state of a free fermion (Gaussian) state. - -## Installation - -To install this package, first install Julia, start the Julia REPL by typing `julia` at your command line, and run the command: -```julia -julia>] - -pkg> add ITensorGaussianMPS -``` - -## Examples - -This can help create starting states for DMRG. For example: -```julia -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Half filling -N = 20 -Nf = N÷2 - -@show N, Nf - -# Hopping -t = 1.0 - -# Free fermion hopping Hamiltonian -h = Hermitian(diagm(1 => fill(-t, N-1), -1 => fill(-t, N-1))) -_, u = eigen(h) - -# Get the Slater determinant -Φ = u[:, 1:Nf] - -# Create an mps for the free fermion ground state -s = siteinds("Fermion", N; conserve_qns = true) -ψ0 = slater_determinant_to_mps(s, Φ; maxblocksize = 4) - -# Make an interacting Hamiltonian -U = 1.0 -@show U - -os = OpSum() -for b in 1:N-1 - os .+= -t,"Cdag",b,"C",b+1 - os .+= -t,"Cdag",b+1,"C",b -end -for b in 1:N - os .+= U, "Cdag*C", b -end -H = MPO(os, s) - -println("\nFree fermion starting energy") -@show inner(ψ0, H, ψ0) - -# Random starting state -ψr = randomMPS(s, n -> n ≤ Nf ? "1" : "0") - -println("\nRandom state starting energy") -@show inner(ψr, H, ψr) - -println("\nRun dmrg with random starting state") -@time dmrg(H, ψr; nsweeps=10, maxdim=[10, 20, 40, 60], cutoff=1e-12) - -println("\nRun dmrg with free fermion starting state") -@time dmrg(H, ψ0; nsweeps=4, maxdim=60, cutoff=1e-12) -``` -This will output something like: -```julia -(N, Nf) = (20, 10) -U = 1.0 - -Free fermion starting energy -inner(ψ0, H, ψ0) = -2.3812770621299357 - -Random state starting energy -inner(ψr, H, ψr) = 10.0 - -Run dmrg with random starting state -After sweep 1 energy=6.261701784151 maxlinkdim=2 time=0.041 -After sweep 2 energy=2.844954346204 maxlinkdim=5 time=0.056 -After sweep 3 energy=0.245282430911 maxlinkdim=14 time=0.071 -After sweep 4 energy=-1.439072132586 maxlinkdim=32 time=0.098 -After sweep 5 energy=-2.220202191945 maxlinkdim=59 time=0.148 -After sweep 6 energy=-2.376787647893 maxlinkdim=60 time=0.186 -After sweep 7 energy=-2.381484153892 maxlinkdim=60 time=0.167 -After sweep 8 energy=-2.381489999291 maxlinkdim=57 time=0.233 -After sweep 9 energy=-2.381489999595 maxlinkdim=49 time=0.175 -After sweep 10 energy=-2.381489999595 maxlinkdim=49 time=0.172 - 1.349192 seconds (8.94 M allocations: 1.027 GiB, 18.05% gc time) - -Run dmrg with free fermion starting state -After sweep 1 energy=-2.381489929965 maxlinkdim=49 time=0.139 -After sweep 2 energy=-2.381489999588 maxlinkdim=49 time=0.165 -After sweep 3 energy=-2.381489999594 maxlinkdim=48 time=0.161 -After sweep 4 energy=-2.381489999594 maxlinkdim=48 time=0.169 - 0.637021 seconds (4.59 M allocations: 525.989 MiB, 17.09% gc time) -``` diff --git a/ITensorGaussianMPS/examples/Project.toml b/ITensorGaussianMPS/examples/Project.toml deleted file mode 100644 index 8787f2a31b..0000000000 --- a/ITensorGaussianMPS/examples/Project.toml +++ /dev/null @@ -1,3 +0,0 @@ -[deps] -ITensorGaussianMPS = "2be41995-7c9f-4653-b682-bfa4e7cebb93" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" diff --git a/ITensorGaussianMPS/examples/broken/hubbard_1d_no_spin_conservation.jl b/ITensorGaussianMPS/examples/broken/hubbard_1d_no_spin_conservation.jl deleted file mode 100644 index c1bb8e3547..0000000000 --- a/ITensorGaussianMPS/examples/broken/hubbard_1d_no_spin_conservation.jl +++ /dev/null @@ -1,84 +0,0 @@ -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Electrons - -# Half filling -N = 50 -Nf = N - -@show N, Nf - -# Maximum MPS link dimension -_maxlinkdim = 200 - -@show _maxlinkdim - -# DMRG cutoff -_cutoff = 1e-8 - -# Hopping -t = 1.0 - -# Electron-electron on-site interaction -U = 1.0 - -@show t, U - -# Make the free fermion Hamiltonian for the up spins -os_up = OpSum() -for n in 1:(N - 1) - os_up .+= -t, "Cdagup", n, "Cup", n + 1 - os_up .+= -t, "Cdagup", n + 1, "Cup", n -end - -# Make the free fermion Hamiltonian for the down spins -os_dn = OpSum() -for n in 1:(N - 1) - os_dn .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_dn .+= -t, "Cdagdn", n + 1, "Cdn", n -end - -# Hopping Hamiltonian with 2*N spinless fermions, -# alternating up and down spins -h = hopping_hamiltonian(os_up, os_dn) - -# Get the Slater determinant -Φ = slater_determinant_matrix(h, Nf) - -# Create an MPS from the slater determinant. -# In this example, we will turn off spin conservation (so this would -# work with a Hamiltonian that mixed the up and down spin sectors) -s = siteinds("Electron", N; conserve_qns=true, conserve_sz=false) -println("Making free fermion starting MPS") -@time ψ0 = slater_determinant_to_mps( - s, Φ; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim -) -@show maxlinkdim(ψ0) - -@show U -os = os_up + os_dn -for n in 1:N - os .+= U, "Nupdn", n -end -H = MPO(os, s) - -# Random starting state -ψr = randomMPS(s, n -> n ≤ Nf ? (isodd(n) ? "↑" : "↓") : "0") - -println("Random starting state energy") -@show flux(ψr) -@show inner(ψr', H, ψr) -println() -println("Free fermion starting state energy") -@show flux(ψ0) -@show inner(ψ0', H, ψ0) - -println("\nStart from product state") -@time dmrg(H, ψr; nsweeps=10, maxdim=[10, 20, _maxlinkdim], cutoff=_cutoff) - -println("\nStart from free fermion state") -@time dmrg(H, ψ0; nsweeps=5, maxdim=_maxlinkdim, cutoff=_cutoff) - -nothing diff --git a/ITensorGaussianMPS/examples/broken/hubbard_2d_no_spin_conservation.jl b/ITensorGaussianMPS/examples/broken/hubbard_2d_no_spin_conservation.jl deleted file mode 100644 index f69a551c5e..0000000000 --- a/ITensorGaussianMPS/examples/broken/hubbard_2d_no_spin_conservation.jl +++ /dev/null @@ -1,96 +0,0 @@ -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Electrons - -# Half filling -Nx, Ny = 6, 3 -N = Nx * Ny -Nf = N - -@show Nx, Ny -@show N, Nf - -# Maximum MPS link dimension -_maxlinkdim = 1_000 - -@show _maxlinkdim - -# DMRG cutoff -_cutoff = 1e-5 - -# Hopping -t = 1.0 - -# Electron-electon on-site interaction -U = 4.0 - -@show t, U - -lattice = square_lattice(Nx, Ny; yperiodic=true) - -# Make the free fermion Hamiltonian for the up spins -os_up = OpSum() -for b in lattice - os_up .+= -t, "Cdagup", b.s1, "Cup", b.s2 - os_up .+= -t, "Cdagup", b.s2, "Cup", b.s1 -end - -# Make the free fermion Hamiltonian for the down spins -os_dn = OpSum() -for b in lattice - os_dn .+= -t, "Cdagdn", b.s1, "Cdn", b.s2 - os_dn .+= -t, "Cdagdn", b.s2, "Cdn", b.s1 -end - -# Hopping Hamiltonian with 2*N spinless fermions, -# alternating up and down spins -h = hopping_hamiltonian(os_up, os_dn) - -# Get the Slater determinant -Φ = slater_determinant_matrix(h, Nf) - -println() -println("Exact free fermion energy: ", tr(Φ'h * Φ)) -println() - -# Create an MPS from the slater determinant. -# In this example we are turning of spin conservation. -s = siteinds("Electron", N; conserve_qns=true, conserve_sz=false) -println("Making free fermion starting MPS") -@time ψ0 = slater_determinant_to_mps( - s, Φ; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim -) -@show maxlinkdim(ψ0) - -os = os_up + os_dn -for n in 1:N - os .+= U, "Nupdn", n -end -H = MPO(os, s) - -# Random starting state -ψr = randomMPS(s, n -> n ≤ Nf ? (isodd(n) ? "↑" : "↓") : "0") - -println("\nRandom starting state energy") -@show flux(ψr) -@show inner(ψr, H, ψr) - -println("\nFree fermion MPS starting state energy") -@show flux(ψ0) -@show inner(ψ0, H, ψ0) - -println("\nStart from random product state") -dmrg_kwargs = (; - nsweeps=10, - maxdim=[10, 20, 100, 200, _maxlinkdim], - cutoff=_cutoff, - noise=[1e-7, 1e-8, 1e-10, 0.0], -) -@time dmrg(H, ψr; dmrg_kwargs...) - -println("\nStart from free fermion state") -@time dmrg(H, ψ0; nsweeps=10, maxdim=_maxlinkdim, cutoff=_cutoff) - -nothing diff --git a/ITensorGaussianMPS/examples/hubbard_1d_spin_conservation.jl b/ITensorGaussianMPS/examples/hubbard_1d_spin_conservation.jl deleted file mode 100644 index 460bdd4df9..0000000000 --- a/ITensorGaussianMPS/examples/hubbard_1d_spin_conservation.jl +++ /dev/null @@ -1,109 +0,0 @@ -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Electrons - -# Half filling -N = 100 -Nf_up = N ÷ 2 -Nf_dn = N ÷ 2 -Nf = Nf_up + Nf_dn - -@show N, Nf - -# Maximum MPS link dimension -_maxlinkdim = 200 - -@show _maxlinkdim - -# DMRG cutoff -_cutoff = 1e-8 - -# Hopping -t = 1.0 - -# Electron-electron on-site interaction -U = 1.0 - -@show t, U - -# Make the free fermion Hamiltonian for the up spins -os_up = OpSum() -for n in 1:(N - 1) - os_up .+= -t, "Cdagup", n, "Cup", n + 1 - os_up .+= -t, "Cdagup", n + 1, "Cup", n -end - -# Make the free fermion Hamiltonian for the down spins -os_dn = OpSum() -for n in 1:(N - 1) - os_dn .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_dn .+= -t, "Cdagdn", n + 1, "Cdn", n -end - -# Hopping Hamiltonians for the up and down spins -h_up = hopping_hamiltonian(os_up) -h_dn = hopping_hamiltonian(os_dn) - -# Get the Slater determinant -Φ_up = slater_determinant_matrix(h_up, Nf_up) -Φ_dn = slater_determinant_matrix(h_dn, Nf_dn) - -# Create an MPS from the slater determinants. -s = siteinds("Electron", N; conserve_qns=true) -println("Making free fermion starting MPS") -@time ψ0 = slater_determinant_to_mps( - s, Φ_up, Φ_dn; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim -) -@show maxlinkdim(ψ0) - -# The total non-interacting part of the Hamiltonian -os_noninteracting = OpSum() -for n in 1:(N - 1) - os_noninteracting .+= -t, "Cdagup", n, "Cup", n + 1 - os_noninteracting .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_noninteracting .+= -t, "Cdagup", n + 1, "Cup", n - os_noninteracting .+= -t, "Cdagdn", n + 1, "Cdn", n -end - -H_noninteracting = MPO(os_noninteracting, s) -@show inner(ψ0', H_noninteracting, ψ0) -@show sum(diag(Φ_up' * h_up * Φ_up)) + sum(diag(Φ_dn' * h_dn * Φ_dn)) - -# The total interacting Hamiltonian -os_interacting = OpSum() -for n in 1:(N - 1) - os_interacting .+= -t, "Cdagup", n, "Cup", n + 1 - os_interacting .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_interacting .+= -t, "Cdagup", n + 1, "Cup", n - os_interacting .+= -t, "Cdagdn", n + 1, "Cdn", n -end -for n in 1:N - os_interacting .+= U, "Nupdn", n -end -H = MPO(os_interacting, s) -#@show norm(prod(H) - prod(H_noninteracting)) - -# Random starting state -ψr = randomMPS(s, n -> n ≤ Nf ? (isodd(n) ? "↑" : "↓") : "0") - -println("Random starting state energy") -@show flux(ψr) -@show inner(ψr', H, ψr) -println() -println("Free fermion starting state energy") -@show flux(ψ0) -@show inner(ψ0', H, ψ0) - -println("\nStart from random product state") -er, ψ̃r = @time dmrg(H, ψr; nsweeps=10, maxdim=[10, 20, _maxlinkdim], cutoff=_cutoff) -@show er -@show flux(ψ̃r) - -println("\nStart from free fermion state") -e0, ψ̃0 = @time dmrg(H, ψ0; nsweeps=5, maxdim=_maxlinkdim, cutoff=_cutoff) -@show e0 -@show flux(ψ̃0) - -nothing diff --git a/ITensorGaussianMPS/examples/hubbard_2d_spin_conservation.jl b/ITensorGaussianMPS/examples/hubbard_2d_spin_conservation.jl deleted file mode 100644 index 41274b5a43..0000000000 --- a/ITensorGaussianMPS/examples/hubbard_2d_spin_conservation.jl +++ /dev/null @@ -1,106 +0,0 @@ -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Electrons - -# Half filling -Nx, Ny = 6, 3 -N = Nx * Ny -Nf = N -Nf_up = N ÷ 2 -Nf_dn = N - Nf_up - -@show Nx, Ny -@show N, Nf - -# Maximum MPS link dimension -_maxlinkdim = 1_000 - -@show _maxlinkdim - -# DMRG cutoff -_cutoff = 1e-5 - -# Hopping -t = 1.0 - -# Electron-electon on-site interaction -U = 4.0 - -@show t, U - -lattice = square_lattice(Nx, Ny; yperiodic=true) - -# Make the free fermion Hamiltonian for the up spins -os_up = OpSum() -for b in lattice - os_up .+= -t, "Cdagup", b.s1, "Cup", b.s2 - os_up .+= -t, "Cdagup", b.s2, "Cup", b.s1 -end - -# Make the free fermion Hamiltonian for the down spins -os_dn = OpSum() -for b in lattice - os_dn .+= -t, "Cdagdn", b.s1, "Cdn", b.s2 - os_dn .+= -t, "Cdagdn", b.s2, "Cdn", b.s1 -end - -# Hopping Hamiltonian with 2*N spinless fermions, -# alternating up and down spins -h_up = hopping_hamiltonian(os_up) -h_dn = hopping_hamiltonian(os_dn) - -# Get the Slater determinant -Φ_up = slater_determinant_matrix(h_up, Nf_up) -Φ_dn = slater_determinant_matrix(h_dn, Nf_dn) - -println() -println("Exact free fermion energy: ", tr(Φ_up'h_up * Φ_up) + tr(Φ_dn'h_dn * Φ_dn)) -println() - -# Create an MPS from the slater determinant. -# For now it only works without Sz conservation, this will be supported soon. -s = siteinds("Electron", N; conserve_qns=true) -println("Making free fermion starting MPS") -@time ψ0 = slater_determinant_to_mps( - s, Φ_up, Φ_dn; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim -) -@show maxlinkdim(ψ0) - -os = OpSum() -for b in lattice - os .+= -t, "Cdagup", b.s1, "Cup", b.s2 - os .+= -t, "Cdagdn", b.s1, "Cdn", b.s2 - os .+= -t, "Cdagup", b.s2, "Cup", b.s1 - os .+= -t, "Cdagdn", b.s2, "Cdn", b.s1 -end -for n in 1:N - os .+= U, "Nupdn", n -end -H = MPO(os, s) - -# Random starting state -ψr = randomMPS(s, n -> n ≤ Nf ? (isodd(n) ? "↑" : "↓") : "0") - -println("\nRandom starting state energy") -@show flux(ψr) -@show inner(ψr', H, ψr) - -println("\nFree fermion MPS starting state energy") -@show flux(ψ0) -@show inner(ψ0', H, ψ0) - -println("\nStart from random product state") -dmrg_kwargs = (; - nsweeps=10, - maxdim=[10, 20, 100, 200, _maxlinkdim], - cutoff=_cutoff, - noise=[1e-7, 1e-8, 1e-10, 0.0], -) -@time dmrg(H, ψr; dmrg_kwargs...) - -println("\nStart from free fermion state") -@time dmrg(H, ψ0; nsweeps=10, maxdim=_maxlinkdim, cutoff=_cutoff) - -nothing diff --git a/ITensorGaussianMPS/examples/mps_to_determinants.jl b/ITensorGaussianMPS/examples/mps_to_determinants.jl deleted file mode 100644 index c3590b4bc7..0000000000 --- a/ITensorGaussianMPS/examples/mps_to_determinants.jl +++ /dev/null @@ -1,81 +0,0 @@ -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Half filling -N = 20 -Nf_up = N ÷ 2 -Nf_dn = N ÷ 2 -Nf = Nf_up + Nf_dn - -@show N, Nf - -# Maximum MPS link dimension -_maxlinkdim = 50 - -@show _maxlinkdim - -# DMRG cutoff -_cutoff = 1e-8 - -# Hopping -t = 1.0 - -# Electron-electron on-site interaction -U = 1.0 - -@show t, U - -# Make the free fermion Hamiltonian for the up spins -os_up = OpSum() -for n in 1:(N - 1) - os_up .+= -t, "Cdagup", n, "Cup", n + 1 - os_up .+= -t, "Cdagup", n + 1, "Cup", n -end - -# Make the free fermion Hamiltonian for the down spins -os_dn = OpSum() -for n in 1:(N - 1) - os_dn .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_dn .+= -t, "Cdagdn", n + 1, "Cdn", n -end - -# Hopping Hamiltonians for the up and down spins -h_up = hopping_hamiltonian(os_up) -h_dn = hopping_hamiltonian(os_dn) - -# Get the Slater determinant -Φ_up = slater_determinant_matrix(h_up, Nf_up) -Φ_dn = slater_determinant_matrix(h_dn, Nf_dn) - -# Create an MPS from the slater determinants. -s = siteinds("Electron", N; conserve_qns=true) -println("Making free fermion starting MPS") -@time ψ0 = slater_determinant_to_mps( - s, Φ_up, Φ_dn; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim -) -@show maxlinkdim(ψ0) - -# The total interacting Hamiltonian -os = os_up + os_dn -for n in 1:N - os .+= U, "Nupdn", n -end -H = MPO(os, s) - -println("Free fermion starting state energy") -@show flux(ψ0) -@show inner(ψ0', H, ψ0) - -println("\nStart from free fermion state") -e, ψ = @time dmrg(H, ψ0; nsweeps=5, maxdim=_maxlinkdim, cutoff=_cutoff) -@show e -@show flux(ψ) - -using ITensorGaussianMPS: correlation_matrix_to_gmps, correlation_matrix_to_mps, entropy - -Λ_up = correlation_matrix(ψ, "Cdagup", "Cup") -Λ_dn = correlation_matrix(ψ, "Cdagdn", "Cdn") -ψ̃0 = correlation_matrix_to_mps(s, Λ_up, Λ_dn; eigval_cutoff=1e-2, maxblocksize=4) -@show inner(ψ̃0, ψ) -@show inner(ψ̃0', H, ψ̃0) diff --git a/ITensorGaussianMPS/examples/spinless_fermion.jl b/ITensorGaussianMPS/examples/spinless_fermion.jl deleted file mode 100644 index 7d2f74b9af..0000000000 --- a/ITensorGaussianMPS/examples/spinless_fermion.jl +++ /dev/null @@ -1,71 +0,0 @@ -using ITensors -using ITensorGaussianMPS -using LinearAlgebra - -# Half filling -N = 50 -Nf = N ÷ 2 - -@show N, Nf - -# Maximum MPS link dimension -_maxlinkdim = 100 - -@show _maxlinkdim - -# DMRG cutoff -_cutoff = 1e-12 - -# Hopping -t = 1.0 - -# Electron-electron on-site interaction -U = 1.0 - -@show t, U - -# Free fermion Hamiltonian -os = OpSum() -for n in 1:(N - 1) - os .+= -t, "Cdag", n, "C", n + 1 - os .+= -t, "Cdag", n + 1, "C", n -end - -# Hopping Hamiltonian with N spinless fermions -h = hopping_hamiltonian(os) - -# Get the Slater determinant -Φ = slater_determinant_matrix(h, Nf) - -# Create an mps for the free fermion ground state -s = siteinds("Fermion", N; conserve_qns=true) -println("Making free fermion starting MPS") -@time ψ0 = slater_determinant_to_mps( - s, Φ; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim -) -@show maxlinkdim(ψ0) - -# Make an interacting Hamiltonian -for n in 1:(N - 1) - os .+= U, "N", n, "N", n + 1 -end -H = MPO(os, s) - -# Random starting state -ψr = randomMPS(s, n -> n ≤ Nf ? "1" : "0") - -println("\nRandom state starting energy") -@show flux(ψr) -@show inner(ψr', H, ψr) - -println("\nFree fermion starting energy") -@show flux(ψ0) -@show inner(ψ0', H, ψ0) - -println("\nRun dmrg with random starting state") -@time dmrg(H, ψr; nsweeps=20, maxdim=[10, 20, 40, _maxlinkdim], cutoff=_cutoff) - -println("\nRun dmrg with free fermion starting state") -@time dmrg(H, ψ0; nsweeps=4, maxdim=_maxlinkdim, cutoff=_cutoff) - -nothing diff --git a/ITensorGaussianMPS/examples/spinless_fermion_pairing.jl b/ITensorGaussianMPS/examples/spinless_fermion_pairing.jl deleted file mode 100644 index 145b042e41..0000000000 --- a/ITensorGaussianMPS/examples/spinless_fermion_pairing.jl +++ /dev/null @@ -1,84 +0,0 @@ -# This script shows a minimal example of the GMPS-MPS conversion -# of the ground state of quadratic fermionic Hamiltonian with pairing terms. -using LinearAlgebra -using ITensors -using ITensorGaussianMPS - -ITensors.disable_contraction_sequence_optimization() -let - N = 8 - sites = siteinds("Fermion", N; conserve_qns=false, conserve_nfparity=true) - _maxlinkdim = 100 - # DMRG cutoff - _cutoff = 1e-13 - # Hopping - t = -1.0 - # Electron-electron on-site interaction - U = 0.0 - # Pairing - Delta = 1.00 - @show t, U, Delta - # Free fermion Hamiltonian - os_h = OpSum() - for n in 1:(N - 1) - os_h .+= -t, "Cdag", n, "C", n + 1 - os_h .+= -t, "Cdag", n + 1, "C", n - end - os_p = OpSum() - for n in 1:(N - 1) - os_p .+= Delta / 2.0, "Cdag", n, "Cdag", n + 1 - os_p .+= -Delta / 2.0, "Cdag", n + 1, "Cdag", n - os_p .+= -Delta / 2.0, "C", n, "C", n + 1 - os_p .+= Delta / 2.0, "C", n + 1, "C", n - end - os = os_h + os_p - h = quadratic_hamiltonian(os) - hb = ITensorGaussianMPS.reverse_interleave(h) - # Make MPO from free fermion Hamiltonian in blocked format - os_new = OpSum() - for i in 1:N - for j in 1:N - if abs(hb[i, j]) > 1e-8 - os_new .+= -t, "Cdag", i, "C", j - os_new .+= t, "C", i, "Cdag", j - os_new .+= Delta / 2.0 * sign(i - j), "C", i, "C", j - os_new .+= -Delta / 2.0 * sign(i - j), "Cdag", i, "Cdag", j - end - end - end - H = ITensors.MPO(os_h + os_p, sites) - - #Get Ground state - @assert ishermitian(h) - e = eigvals(Hermitian(h)) - @show e - E, V = eigen_gaussian(h) - @show sum(E[1:N]) - Φ = V[:, 1:N] - c = real.(conj(Φ) * transpose(Φ)) - - #Get (G)MPS - psi = ITensorGaussianMPS.correlation_matrix_to_mps( - sites, c; eigval_cutoff=1e-10, maxblocksize=14, cutoff=1e-11 - ) - @show eltype(psi[1]) - cdagc = correlation_matrix(psi, "C", "Cdag") - cc = correlation_matrix(psi, "C", "C") - - println("\nFree fermion starting energy") - @show flux(psi) - @show inner(psi', H, psi) - println("\nRun dmrg with GMPS starting state") - _, psidmrg = dmrg(H, psi; nsweeps=12, maxdim=[10, 20, 40, _maxlinkdim], cutoff=_cutoff) - cdagc_dmrg = correlation_matrix(psidmrg, "C", "Cdag") - cc_dmrg = correlation_matrix(psidmrg, "C", "C") - - @show norm(cdagc_dmrg - cdagc) - @show norm(cc_dmrg - cc) - - @show inner(psidmrg', H, psidmrg) - @show(abs(inner(psidmrg, psi))) - - #return -end -nothing diff --git a/ITensorGaussianMPS/src/ITensorGaussianMPS.jl b/ITensorGaussianMPS/src/ITensorGaussianMPS.jl deleted file mode 100644 index 3bc0b920fa..0000000000 --- a/ITensorGaussianMPS/src/ITensorGaussianMPS.jl +++ /dev/null @@ -1,25 +0,0 @@ -module ITensorGaussianMPS - -using Compat -using ITensors -using ITensors.NDTensors -using LinearAlgebra -import LinearAlgebra: Givens - -export slater_determinant_to_mps, - correlation_matrix_to_mps, - slater_determinant_to_gmps, - correlation_matrix_to_gmps, - hopping_hamiltonian, - hopping_operator, - quadratic_hamiltonian, - quadratic_operator, - slater_determinant_matrix, - slater_determinant_to_gmera, - eigen_gaussian - -include("gmps.jl") -include("gmera.jl") -include("linalg.jl") - -end diff --git a/ITensorGaussianMPS/src/gmera.jl b/ITensorGaussianMPS/src/gmera.jl deleted file mode 100644 index 2a84663321..0000000000 --- a/ITensorGaussianMPS/src/gmera.jl +++ /dev/null @@ -1,183 +0,0 @@ -# brick wall scanning for a single MERA layer with treatment to the tail -function correlation_matrix_to_gmps_brickwall_tailed( - Λ0::AbstractMatrix{ElT}, - inds::Vector{Int}; - eigval_cutoff::Float64=1e-8, - maxblocksize::Int=size(Λ0, 1), -) where {ElT<:Number} - Λ = Hermitian(Λ0) - N = size(Λ, 1) - V = Circuit{ElT}([]) - #ns = Vector{real(ElT)}(undef, 2*N) - err_tot = 0.0 - indsnext = Int[] - relinds = Int[] - for i in 1:N - if i % 2 == 0 - append!(indsnext, inds[i]) - append!(relinds, i) - continue - end - blocksize = 0 - n = 0.0 - err = 0.0 - p = Int[] - uB = 0.0 - # find the block whose lowest eigenvalue is within torelence - for blocksize in 1:maxblocksize - j = min(i + blocksize, N) - ΛB = deepcopy(Λ[i:j, i:j]) #@view Λ[i:j, i:j] # \LambdaB is still part of Lambda - nB, uB = eigen(Hermitian(ΛB)) - # sort by -(n * log(n) + (1 - n) * log(1 - n)) in ascending order - p = sortperm(nB; by=entropy) - n = nB[p[1]] - err = min(n, 1 - n) - err ≤ eigval_cutoff && break - end - # keep the node if the err cannot be reduced - if i + maxblocksize >= N && err > eigval_cutoff - append!(indsnext, inds[i]) - append!(relinds, i) - continue - end - err_tot += err - #ns[i] = n # eigenvalue - v = deepcopy(uB[:, p[1]]) #@view uB[:, p[1]] # eigenvector of the correlation matrix - g, _ = givens_rotations(v) # convert eigenvector into givens rotation - shift!(g, i - 1) # shift rotation location - # In-place version of: - # V = g * V - lmul!(g, V) - #@show g - Λ = Hermitian(g * Λ * g') #isolate current site i - end - return Λ, V, indsnext, relinds -end - -# shift givens rotation indexes according to the inds -function shiftByInds!(G::Circuit, inds::Vector{Int}) - for (n, g) in enumerate(G.rotations) - G.rotations[n] = Givens(inds[g.i1], inds[g.i2], g.c, g.s) - end - return G -end - -""" - correlation_matrix_to_gmera(Λ::AbstractMatrix{ElT}; eigval_cutoff::Float64 = 1e-8, maxblocksize::Int = size(Λ0, 1)) - -Diagonalize a correlation matrix through MERA layers, -output gates and eigenvalues of the correlation matrix -""" -# Combine gates for each MERA layer -function correlation_matrix_to_gmera( - Λ0::AbstractMatrix{ElT}; eigval_cutoff::Float64=1e-8, maxblocksize::Int=size(Λ0, 1) -) where {ElT<:Number} - Λ = Hermitian(Λ0) - N = size(Λ, 1) - Nnew = N - 1 - inds = collect(1:N) - V = Circuit{ElT}([]) - Λtemp = deepcopy(Λ) - layer = 0 # layer label of MERA - while N > Nnew # conditioned on the reduction of nodes - N = Nnew - # indsnext: next layer indexes with original matrix labels - # relinds: next layer indexes with labels from the last layer - Λr, C, indsnext, relinds = correlation_matrix_to_gmps_brickwall_tailed( - Λtemp, inds; eigval_cutoff=eigval_cutoff, maxblocksize=maxblocksize - ) - shiftByInds!(C, inds) # shift the index back to the original matrix - inds = indsnext - Λtemp = deepcopy(Λr[relinds, relinds]) # project to even site for next layer based on keeping indexes relinds - Nnew = size(Λtemp, 1) - lmul!(C, V) # add vector of givens rotation C into the larger vector V - #V = C * V - layer += 1 - #Λ = ITensors.Hermitian(C * Λ * C') - end - # gmps for the final layer - Λr, C = correlation_matrix_to_gmps( - Λtemp; eigval_cutoff=eigval_cutoff, maxblocksize=maxblocksize - ) - shiftByInds!(C, inds) - lmul!(C, V) - Λ = V * Λ0 * V' - ns = real.(diag(Λ)) - return ns, V -end - -# output the MERA gates and eigenvalues of correlation matrix from WF -function slater_determinant_to_gmera(Φ::AbstractMatrix; kwargs...) - return correlation_matrix_to_gmera(conj(Φ) * transpose(Φ); kwargs...) -end - -# ouput the MPS based on the MERA gates -function correlation_matrix_to_mera( - s::Vector{<:Index}, - Λ::AbstractMatrix; - eigval_cutoff::Float64=1e-8, - maxblocksize::Int=size(Λ, 1), - kwargs..., -) - @assert size(Λ, 1) == size(Λ, 2) - ns, C = correlation_matrix_to_gmera( - Λ; eigval_cutoff=eigval_cutoff, maxblocksize=maxblocksize - ) - if all(hastags("Fermion"), s) - U = [ITensor(s, g) for g in reverse(C.rotations)] - ψ = MPS(s, n -> round(Int, ns[n]) + 1, U; kwargs...) - elseif all(hastags("Electron"), s) - isodd(length(s)) && error( - "For Electron type, must have even number of sites of alternating up and down spins.", - ) - N = length(s) - if isspinful(s) - error( - "correlation_matrix_to_mps(Λ::AbstractMatrix) currently only supports spinless Fermions or Electrons that do not conserve Sz. Use correlation_matrix_to_mps(Λ_up::AbstractMatrix, Λ_dn::AbstractMatrix) to use spinful Fermions/Electrons.", - ) - else - sf = siteinds("Fermion", 2 * N; conserve_qns=true) - end - U = [ITensor(sf, g) for g in reverse(C.rotations)] - ψf = MPS(sf, n -> round(Int, ns[n]) + 1, U; kwargs...) - ψ = MPS(N) - for n in 1:N - i, j = 2 * n - 1, 2 * n - C = combiner(sf[i], sf[j]) - c = combinedind(C) - ψ[n] = ψf[i] * ψf[j] * C - ψ[n] *= δ(dag(c), s[n]) - end - else - error("All sites must be Fermion or Electron type.") - end - return ψ -end - -function slater_determinant_to_mera(s::Vector{<:Index}, Φ::AbstractMatrix; kwargs...) - return correlation_matrix_to_mera(s, conj(Φ) * transpose(Φ); kwargs...) -end - -# G the circuit from the gates, N is the total number of sites -function UmatFromGates(G::Circuit, N::Int) - U = Matrix{Float64}(I, N, N) - n = size(G.rotations, 1) - for k in 1:n - rot = G.rotations[k] - U = rot * U - end - return U -end - -# compute the energy of the state based on the gates -function EfromGates(H::Matrix{<:Number}, U::Matrix{<:Number}) - Htemp = U * H * U' - Etot = 0 - N = size(U, 1) - for i in 1:N - if Htemp[i, i] < 0.0 - Etot += Htemp[i, i] - end - end - return Etot -end diff --git a/ITensorGaussianMPS/src/gmps.jl b/ITensorGaussianMPS/src/gmps.jl deleted file mode 100644 index 6d2e3a8e96..0000000000 --- a/ITensorGaussianMPS/src/gmps.jl +++ /dev/null @@ -1,1073 +0,0 @@ -import Base: sortperm, size, length, eltype, conj, transpose, copy, * -using ITensors: alias -using ITensors.ITensorMPS: ITensorMPS -abstract type AbstractSymmetry end -struct ConservesNfParity{T} <: AbstractSymmetry - data::T -end - -struct ConservesNf{T} <: AbstractSymmetry - data::T -end -# -# Single particle von Neumann entanglement entropy -# -function entropy(n::Number) - (n ≤ 0 || n ≥ 1) && return 0 - return -(n * log(n) + (1 - n) * log(1 - n)) -end - -entropy(ns::Vector{Float64}) = sum(entropy, ns) - -# -# Linear Algebra tools -# - -""" - frobenius_distance(M1::AbstractMatrix, M2::AbstractMatrix) - -Computes the Frobenius distance `√tr((M1-M2)'*(M1-M2))`. -""" -function frobenius_distance(M1::AbstractMatrix, M2::AbstractMatrix) - return sqrt(abs(tr(M1'M1) + tr(M2'M2) - tr(M1'M2) - tr(M2'M1))) -end - -# -# Rotations -# - -struct Circuit{T} <: LinearAlgebra.AbstractRotation{T} - rotations::Vector{Givens{T}} -end - -Base.adjoint(R::Circuit) = Adjoint(R) - -function Base.show(io::IO, ::MIME"text/plain", C::Circuit{T}) where {T} - print(io, "Circuit{$T}:\n") - return show(io, "text/plain", C.rotations) -end - -function Base.copy(aR::Adjoint{<:Any,Circuit{T}}) where {T} - return Circuit{T}(reverse!([r' for r in aR.parent.rotations])) -end - -function LinearAlgebra.lmul!(G::Givens, R::Circuit) - push!(R.rotations, G) - return R -end - -function LinearAlgebra.lmul!(R::Circuit, A::AbstractArray) - @inbounds for i in 1:length(R.rotations) - lmul!(R.rotations[i], A) - end - return A -end - -function LinearAlgebra.rmul!(A::AbstractMatrix, adjR::Adjoint{<:Any,<:Circuit}) - R = adjR.parent - @inbounds for i in 1:length(R.rotations) - rmul!(A, adjoint(R.rotations[i])) - end - return A -end - -Base.:*(g1::Circuit, g2::Circuit) = Circuit(vcat(g2.rotations, g1.rotations)) -LinearAlgebra.lmul!(g1::Circuit, g2::Circuit) = append!(g2.rotations, g1.rotations) - -Base.:*(A::Circuit, B::Union{<:Hermitian,<:Diagonal}) = A * convert(Matrix, B) -Base.:*(A::Adjoint{<:Any,<:Circuit}, B::Hermitian) = copy(A) * convert(Matrix, B) -Base.:*(A::Adjoint{<:Any,<:Circuit}, B::Diagonal) = copy(A) * convert(Matrix, B) -function Base.:*(A::Adjoint{<:Any,<:AbstractVector}, B::Adjoint{<:Any,<:Circuit}) - return convert(Matrix, A) * B -end - -function LinearAlgebra.rmul!(A::AbstractMatrix, R::Circuit) - @inbounds for i in reverse(1:length(R.rotations)) - rmul!(A, R.rotations[i]) - end - return A -end - -function Base.:*(A::AbstractMatrix, B::Adjoint{<:Any,<:Circuit}) - AB = copy(A) - rmul!(AB, B) - return AB -end - -function replace!(f, G::Circuit) - for i in eachindex(G.rotations) - G.rotations[i] = f(G.rotations[i]) - end - return G -end - -function replace_indices!(f, G::Circuit) - return replace!(g -> Givens(f(g.i1), f(g.i2), g.c, g.s), G) -end - -function shift!(G::Circuit, i::Int) - return replace_indices!(j -> j + i, G) -end - -function scale!(G::Circuit, i::Int) - return replace_indices!(j -> j * i, G) -end - -function conj!(G::Circuit) - return replace!(g -> Givens(g.i1, g.i2, g.c, g.s'), G) -end - -ngates(G::Circuit) = length(G.rotations) - -# -# Free fermion tools -# - -is_creation_operator(o::Op) = is_creation_operator(ITensors.name(o)) -is_creation_operator(o::String) = is_creation_operator(OpName(o)) -is_creation_operator(::OpName) = false -is_creation_operator(::OpName"Cdag") = true -is_creation_operator(::OpName"Cdagup") = true -is_creation_operator(::OpName"Cdagdn") = true -is_creation_operator(::OpName"c†") = true -is_creation_operator(::OpName"c†↑") = true -is_creation_operator(::OpName"c†↓") = true - -is_annihilation_operator(o::Op) = is_annihilation_operator(ITensors.name(o)) -is_annihilation_operator(o::String) = is_annihilation_operator(OpName(o)) -is_annihilation_operator(::OpName) = false -is_annihilation_operator(::OpName"C") = true -is_annihilation_operator(::OpName"Cup") = true -is_annihilation_operator(::OpName"Cdn") = true -is_annihilation_operator(::OpName"c") = true -is_annihilation_operator(::OpName"c↑") = true -is_annihilation_operator(::OpName"c↓") = true - -expand_to_ladder_operators(o::Op) = expand_to_ladder_operators(ITensors.name(o)) -expand_to_ladder_operators(o::String) = expand_to_ladder_operators(OpName(o)) -expand_to_ladder_operators(opname::OpName) = opname # By default does nothing -expand_to_ladder_operators(::OpName"N") = ["Cdag", "C"] -expand_to_ladder_operators(::OpName"Nup") = ["Cdagup", "Cup"] -expand_to_ladder_operators(::OpName"Ndn") = ["Cdagdn", "Cdn"] -expand_to_ladder_operators(opname::OpName"n↑") = expand_to_ladder_operators(alias(opname)) -expand_to_ladder_operators(opname::OpName"n↓") = expand_to_ladder_operators(alias(opname)) - -#interlaced_hamiltonian(h::AbstractMatrix) = h -#blocked_hamiltonian(h::AbstractMatrix) = Hermitian(reverse_interleave(Matrix(h))) - -function quadrant(term) - if is_creation_operator(term[1]) && is_annihilation_operator(term[2]) - q = (2, 2) - elseif is_annihilation_operator(term[1]) && is_creation_operator(term[2]) - q = (1, 1) - elseif is_annihilation_operator(term[1]) && is_annihilation_operator(term[2]) - q = (1, 2) - elseif is_creation_operator(term[1]) && is_creation_operator(term[2]) - q = (2, 1) - else - error("Unknown quadratic hopping term: $term") - end - return q -end - -function single_to_quadratic(term) - site = ITensors.site(term[1]) - new_ops = expand_to_ladder_operators(term[1]) - return coefficient(term) * Op(new_ops[1], site) * Op(new_ops[2], site) -end - -function quadratic_operator(os::OpSum) - os = deepcopy(os) - #os = ITensorMPS.sorteachterm(os, sites) - os = ITensorMPS.sortmergeterms(os) - - nterms = length(os) - coefs = Vector{Number}(undef, nterms) - sites = Vector{Tuple{Int,Int}}(undef, nterms) - quads = Vector{Tuple{Int,Int}}(undef, nterms) - nsites = 0 - # detect terms and size of lattice - for n in 1:nterms - term = os[n] - #@show term - #@show term.coef - coef = isreal(coefficient(term)) ? real(coefficient(term)) : coefficient(term) - coefs[n] = coef - term = (length(term) == 1) ? single_to_quadratic(term) : term - length(term) ≠ 2 && error("Must create hopping Hamiltonian from quadratic Hamiltonian") - quads[n] = quadrant(term) - sites[n] = ntuple(n -> ITensors.site(term[n]), Val(2)) - nsites = max(nsites, maximum(sites[n])) - end - # detect coefficient type - coef_type = mapreduce(typeof, promote_type, coefs) - ElT = isreal(coefs) ? real(coef_type) : coef_type - # fill Hamiltonian matrix with elements - h = zeros(ElT, 2 * nsites, 2 * nsites) - other_quad = i -> i == 2 ? 1 : 2 - for n in 1:nterms - quad = quads[n] - offsets = nsites .* (quad .- 1) - if quad[1] != quad[2] - h[(sites[n] .+ offsets)...] += coefs[n] - else - h[(sites[n] .+ offsets)...] += 0.5 * coefs[n] - other_offsets = nsites .* (other_quad.(quad) .- 1) - h[(sites[n] .+ other_offsets)...] += -0.5 * conj(coefs[n]) - end - end - return interleave(h) -end - -function quadratic_operator(os_up::OpSum, os_dn::OpSum) - h_up = quadratic_operator(os_up) - h_dn = quadratic_operator(os_dn) - @assert size(h_up) == size(h_dn) - N = size(h_up, 1) - h = zeros(eltype(h_up), (2 * N, 2 * N)) - n = div(N, 2) - # interlace the blocks of both quadratic hamiltonians - h_up = reverse_interleave(Matrix(h_up)) - h_dn = reverse_interleave(Matrix(h_dn)) - # super-quadrant (1,1) - h[1:2:N, 1:2:N] = h_up[1:n, 1:n] - h[2:2:N, 2:2:N] = h_dn[1:n, 1:n] - # super-quadrant (2,1) - h[(N + 1):2:(2 * N), 1:2:N] = h_up[(n + 1):(2 * n), 1:n] - h[(N + 2):2:(2 * N), 2:2:N] = h_dn[(n + 1):(2 * n), 1:n] - # super-quadrant (2,2) - h[(N + 1):2:(2 * N), (N + 1):2:(2 * N)] = h_up[(n + 1):N, (n + 1):N] - h[(N + 2):2:(2 * N), (N + 2):2:(2 * N)] = h_dn[(n + 1):N, (n + 1):N] - # super-quadrant (1,2) - h[1:2:N, (N + 1):2:(2 * N)] = h_up[1:n, (n + 1):(2 * n)] - h[2:2:N, (N + 2):2:(2 * N)] = h_dn[1:n, (n + 1):(2 * n)] - #convert from blocked to interlaced format. Odd base-rows are spin-up, even are spin-down. - return interleave(h) -end - -quadratic_hamiltonian(os::OpSum) = Hermitian(quadratic_operator(os)) -function quadratic_hamiltonian(os_up::OpSum, os_dn::OpSum) - return Hermitian(quadratic_operator(os_up, os_dn)) -end - -function hopping_operator(os::OpSum; drop_pairing_terms_tol=nothing) - # convert to blocked format - h = reverse_interleave(Matrix(quadratic_hamiltonian(os))) - # check that offdiagonal blocks are 0 - N = div(size(h, 1), 2) - if isnothing(drop_pairing_terms_tol) - drop_pairing_terms_tol = eps(real(eltype(h))) - end - if !all(abs.(h[1:N, (N + 1):(2 * N)]) .< drop_pairing_terms_tol) - error("Trying to convert hamiltonian with pairing terms to hopping hamiltonian!") - end - return 2 .* h[(N + 1):(2 * N), (N + 1):(2 * N)] -end - -# Make a combined hopping Hamiltonian for spin up and down -function hopping_operator(os_up::OpSum, os_dn::OpSum; drop_pairing_terms_tol=nothing) - # convert to blocked format - h = reverse_interleave(Matrix(quadratic_hamiltonian(os_up, os_dn))) - # check that offdiagonal blocks are 0 - N = div(size(h, 1), 2) - if isnothing(drop_pairing_terms_tol) - drop_pairing_terms_tol = eps(real(eltype(h))) - end - if !all(abs.(h[1:N, (N + 1):(2 * N)]) .< drop_pairing_terms_tol) - error("Trying to convert hamiltonian with pairing terms to hopping hamiltonian!") - end - return 2 .* h[(N + 1):(2 * N), (N + 1):(2 * N)] -end - -function hopping_hamiltonian(os::OpSum; drop_pairing_terms_tol=nothing) - return Hermitian(hopping_operator(os; drop_pairing_terms_tol)) -end -function hopping_hamiltonian(os_up::OpSum, os_dn::OpSum; drop_pairing_terms_tol=nothing) - return Hermitian(hopping_operator(os_up, os_dn; drop_pairing_terms_tol)) -end - -function slater_determinant_matrix(h::AbstractMatrix, Nf::Int) - _, u = eigen(h) - return u[:, 1:Nf] -end - -# -# Correlation matrix diagonalization -# - -struct Boguliobov - u::Givens -end - -set_data(::ConservesNf, x) = ConservesNf(x) -set_data(::ConservesNfParity, x) = ConservesNfParity(x) -site_stride(::ConservesNf) = 1 -site_stride(::ConservesNfParity) = 2 -copy(A::T) where {T<:AbstractSymmetry} = T(copy(A.data)) -size(A::T) where {T<:AbstractSymmetry} = size(A.data) -size(A::T, dim::Int) where {T<:AbstractSymmetry} = size(A.data, dim) - -length(A::T) where {T<:AbstractSymmetry} = length(A.data) -eltype(A::T) where {T<:AbstractSymmetry} = eltype(A.data) -Hermitian(A::T) where {T<:AbstractSymmetry} = set_data(A, Hermitian(A.data)) -conj(A::T) where {T<:AbstractSymmetry} = set_data(A, conj(A.data)) -transpose(A::T) where {T<:AbstractSymmetry} = set_data(A, transpose(A.data)) - -""" - givens_rotations(v::AbstractVector) - -For a vector `v`, return the `length(v)-1` -Givens rotations `g` and the norm `r` such that: - -```julia -g * v ≈ r * [n == 1 ? 1 : 0 for n in 1:length(v)] -``` -""" -function givens_rotations(v::AbstractVector{ElT}) where {ElT} - N = length(v) - gs = Circuit{ElT}([]) - r = v[1] - for n in reverse(1:(N - 1)) - g, r = givens(v, n, n + 1) - v = g * v - lmul!(g, gs) - end - return gs, r -end - -givens_rotations(v::ConservesNf) = return givens_rotations(v.data) - -""" - givens_rotations(_v0::ConservesNfParity) - - For a vector - ```julia - v=_v0.data - ``` - from a fermionic Gaussian state, return the `4*length(v)-1` - real Givens/Boguliobov rotations `g` and the norm `r` such that: - ```julia - g * v ≈ r * [n == 2 ? 1 : 0 for n in 1:length(v)] - c - with `g` being composed of diagonal rotation aligning pairs - of complex numbers in the complex plane, and Givens/Boguliobov Rotations - with real arguments only, acting on the interlaced single-particle space of - annihilation and creation operator coefficients. - """ -function givens_rotations(_v0::ConservesNfParity;) - v0 = _v0.data - N = div(length(v0), 2) - if N == 1 - error( - "Givens rotation on 2-element vector not allowed for ConservesNfParity-type calculations. This should have been caught elsewhere.", - ) - end - ElT = eltype(v0) - gs = Circuit{ElT}([]) - v = copy(v0) - # detect if v is actually number-conserving because only defined in terms of annihilation operators - if norm(v[2:2:end]) < 10 * eps(real(ElT)) - r = v[1] - gsca, _ = givens_rotations(v[1:2:end]) - replace_indices!(i -> 2 * i - 1, gsca) - gscc = Circuit(copy(gsca.rotations)) - replace_indices!(i -> i + 1, gsca) - conj!(gscc) - gsc = interleave(gscc, gsca) - LinearAlgebra.lmul!(gsc, gs) - return gs, r - end - r = v[2] - # Given's rotations from creation-operator coefficients - gscc, _ = givens_rotations(v[2:2:end]) - replace_indices!(i -> 2 * i, gscc) - gsca = Circuit(copy(gscc.rotations)) - replace_indices!(i -> i - 1, gsca) - conj!(gsca) - gsc = interleave(gscc, gsca) - LinearAlgebra.lmul!(gsc, gs) - # detect if v is actually number-conserving because only defined in terms of creation operators - if norm(v[1:2:end]) < 10 * eps(real(ElT)) - return gs, r - end - v = gsc * v - # if we get here, v was actually number-non conserving, so procedure - # Given's rotations from annihilation-operator coefficients - gsaa, _ = givens_rotations(v[3:2:end]) - replace_indices!(i -> 2 * i + 1, gsaa) - gsac = Circuit(copy(gsaa.rotations)) - replace_indices!(i -> i + 1, gsac) - conj!(gsac) - gsa = interleave(gsac, gsaa) - v = gsa * v - LinearAlgebra.lmul!(gsa, gs) - - # Boguliobov rotation for remaining Bell pair - g1, r = givens(v, 2, 3) - g2 = Givens(1, 4, g1.c, g1.s') - v = g1 * v - v = g2 * v #should have no effect - LinearAlgebra.lmul!(g2, gs) - LinearAlgebra.lmul!(g1, gs) - return gs, r -end - -function maybe_drop_pairing_correlations(Λ0::AbstractMatrix{ElT}) where {ElT<:Number} - Λblocked = reverse_interleave(Λ0) - N = div(size(Λblocked, 1), 2) - if all(x -> abs(x) <= 10 * eps(real(eltype(Λ0))), @view Λblocked[1:N, (N + 1):end]) - return ConservesNf(Λblocked[(N + 1):end, (N + 1):end]) - #return ConservesNfParity(Λ0) - else - return ConservesNfParity(Λ0) - end -end - -maybe_drop_pairing_correlations(Λ0::ConservesNf) = Λ0 -function maybe_drop_pairing_correlations(Λ0::ConservesNfParity) - return maybe_drop_pairing_correlations(Λ0.data) -end - -sortperm(x::ConservesNf) = sortperm(x.data; by=entropy) -sortperm(x::ConservesNfParity) = sortperm(x.data) - -function get_error(x::ConservesNf, perm) - n = x.data[first(perm)] - return min(abs(n), abs(1 - n)) -end -function get_error(x::ConservesNfParity, perm) - n1 = x.data[first(perm)] - n2 = x.data[last(perm)] - return min(abs(n1), abs(n2)) -end - -function isolate_subblock_eig( - _Λ::AbstractSymmetry, - startind::Int; - eigval_cutoff::Float64=1e-8, - minblocksize::Int=2, - maxblocksize::Int=div(size(_Λ.data, 1), 1), -) - blocksize = 0 - err = 0.0 - p = Int[] - ElT = eltype(_Λ.data) - nB = eltype(_Λ.data)[] - uB = 0.0 - ΛB = 0.0 - i = startind - Λ = _Λ.data - N = size(Λ, 1) - for blocksize in minblocksize:maxblocksize - j = min(site_stride(_Λ) * i + site_stride(_Λ) * blocksize, N) - ΛB = @view Λ[ - (site_stride(_Λ) * i + 1 - site_stride(_Λ)):j, - (site_stride(_Λ) * i + 1 - site_stride(_Λ)):j, - ] - - if typeof(_Λ) <: ConservesNf - nB, uB = eigen(Hermitian(ΛB)) - elseif typeof(_Λ) <: ConservesNfParity - m = similar(ΛB) - m .= ΛB - _ΛB = maybe_drop_pairing_correlations(m) - if typeof(_ΛB) <: ConservesNf - nB, uB = eigen(Hermitian(_ΛB.data)) - #promote basis uB to non-conserving frame - N2 = size(nB, 1) * 2 - nuB = zeros(eltype(uB), N2, N2) - nuB[2:2:N2, 1:2:N2] .= uB - nuB[1:2:N2, 2:2:N2] .= conj(uB) - uB = nuB - nB = interleave(1 .- nB, nB) - elseif typeof(_ΛB) <: ConservesNfParity - nB, uB = ITensorGaussianMPS.diag_corr_gaussian(Hermitian(ΛB)) - #try to rotate to real - uB = ITensorGaussianMPS.make_real_if_possible(uB, nB .- 0.5) - if ElT <: Real - if norm(imag.(uB)) <= sqrt(eps(real(ElT))) - uB = real(real.(uB)) - else - error( - "Not able to construct real fermionic basis for input correlation matrix. Exiting, retry with complex input type.", - ) - end - end - end - end - nB = set_data(_Λ, abs.(nB)) - p = sortperm(nB) - err = get_error(nB, p) - err ≤ eigval_cutoff && break - end - v = set_data(_Λ, @view uB[:, p[1]]) - return v, nB, err -end - -function set_occupations!(_ns::ConservesNf, _nB::ConservesNf, _v::ConservesNf, i::Int) - p = Int[] - ns = _ns.data - nB = _nB.data - p = sortperm(nB; by=entropy) - ns[i] = nB[p[1]] - return nothing -end - -function set_occupations!( - _ns::ConservesNfParity, _nB::ConservesNfParity, _v::ConservesNfParity, i::Int -) - p = Int[] - ns = _ns.data - nB = _nB.data - v = _v.data - - p = sortperm(nB) - n1 = nB[first(p)] - n2 = nB[last(p)] - ns[2 * i] = n1 - ns[2 * i - 1] = n2 - if length(v) == 2 - # For some reason the last occupations are reversed, so take care of this conditionally here. - # ToDo: Fix this in givens_rotations instead. - if abs(v[1]) >= abs(v[2]) - ns[2 * i] = n2 - ns[2 * i - 1] = n1 - end - end - return nothing -end - -stop_gmps_sweep(v::ConservesNfParity) = length(v.data) == 2 ? true : false -stop_gmps_sweep(v::ConservesNf) = false - -""" - correlation_matrix_to_gmps(Λ::AbstractMatrix{ElT}; eigval_cutoff::Float64 = 1e-8, maxblocksize::Int = size(Λ0, 1)) - -Diagonalize a correlation matrix, returning the eigenvalues and eigenvectors -stored in a structure as a set of Givens rotations. - -The correlation matrix should be Hermitian, and will be treated as if it itensor -in the algorithm. - -If `is_bcs`, the correlation matrix is assumed to be in interlaced format: -Λ[2*i-1:2*i,2*j-1:2*j]=[[c_i c_j^dagger , c_i c_j ], [c_i^dagger c_j^dagger,c_i^dagger c_j]] -Note that this may not be the standard choice in the literature, but it is internally -consistent with the format of single-particle Hamiltonians and Slater determinants employed. -""" - -# Default to ConservesNf if no further arguments are given for backward compatibility -function correlation_matrix_to_gmps( - Λ0::AbstractMatrix; - eigval_cutoff::Float64=1e-8, - minblocksize::Int=1, - maxblocksize::Int=size(Λ0, 1), -) - return correlation_matrix_to_gmps( - ConservesNf(Λ0); - eigval_cutoff=eigval_cutoff, - minblocksize=minblocksize, - maxblocksize=maxblocksize, - ) -end - -function correlation_matrix_to_gmps( - Λ0::AbstractMatrix, - Nsites::Int; - eigval_cutoff::Float64=1e-8, - minblocksize::Int=1, - maxblocksize::Int=size(Λ0, 1), -) - return correlation_matrix_to_gmps( - symmetric_correlation_matrix(Λ0, Nsites); - eigval_cutoff=eigval_cutoff, - minblocksize=minblocksize, - maxblocksize=maxblocksize, - ) -end - -function correlation_matrix_to_gmps( - Λ0::T; - eigval_cutoff::Float64=1e-8, - minblocksize::Int=1, - maxblocksize::Int=size(Λ0.data, 1), -) where {T<:AbstractSymmetry} - ElT = eltype(Λ0.data) - Λ = T(Hermitian(copy((Λ0.data)))) - V = Circuit{ElT}([]) - err_tot = 0.0 ### FIXME: keep track of error below - N = size(Λ.data, 1) - #ns = set_data(Λ, Vector{real(ElT)}(undef, N)) - for i in 1:div(N, site_stride(Λ)) - err = 0.0 - v, _, err = isolate_subblock_eig( - Λ, - i; - eigval_cutoff=eigval_cutoff, - minblocksize=minblocksize, - maxblocksize=maxblocksize, - ) - if stop_gmps_sweep(v) - break - end - g, _ = givens_rotations(v) - replace_indices!(j -> j + site_stride(Λ) * (i - 1), g) - - # In-place version of: - # V = g * V - LinearAlgebra.lmul!(g, V) - Λ = set_data(Λ, Hermitian(g * Matrix(Λ.data) * g')) - end - ###return non-wrapped occupations for backwards compatibility - ns = diag(Λ.data) - @assert norm(imag.(ns)) <= sqrt(eps(real(ElT))) - - return real(real.(ns)), V -end - -function (x::AbstractSymmetry * y::AbstractSymmetry) - if !has_same_symmetry(x, y) - error("Can't multiply two symmetric objects with different symmetries.") - end - return set_data(x, x.data * y.data) -end - -has_same_symmetry(::AbstractSymmetry, ::AbstractSymmetry) = false -has_same_symmetry(::ConservesNf, ::ConservesNf) = true -has_same_symmetry(::ConservesNfParity, ::ConservesNfParity) = true - -function slater_determinant_to_gmps(Φ::AbstractMatrix, N::Int; kwargs...) - return correlation_matrix_to_gmps(conj(Φ) * transpose(Φ), N; kwargs...) -end - -function slater_determinant_to_gmps(Φ::AbstractMatrix; kwargs...) - return correlation_matrix_to_gmps(ConservesNf(conj(Φ) * transpose(Φ)); kwargs...) -end - -function slater_determinant_to_gmps(Φ::AbstractSymmetry; kwargs...) - return correlation_matrix_to_gmps(conj(Φ) * transpose(Φ); kwargs...) -end - -# -# Turn circuit into MPS -# - -function ITensors.ITensor(u::Givens, s1::Index, s2::Index) - U = [ - 1 0 0 0 - 0 u.c u.s 0 - 0 -conj(u.s) u.c 0 - 0 0 0 1 - ] - return itensor(U, s2', s1', dag(s2), dag(s1)) -end - -function ITensors.ITensor(b::Boguliobov, s1::Index, s2::Index) - U = [ - b.u.c 0 0 conj(b.u.s) - 0 1 0 0 - 0 0 1 0 - -(b.u.s) 0 0 b.u.c - ] - return itensor(U, s2', s1', dag(s2), dag(s1)) -end - -function ITensors.ITensor(sites::Vector{<:Index}, u::ConservesNfParity{Givens{T}}) where {T} - s1 = sites[div(u.data.i1 + 1, 2)] - s2 = sites[div(u.data.i2 + 1, 2)] - if abs(u.data.i2 - u.data.i1) % 2 == 1 - return ITensor(Boguliobov(u.data), s1, s2) - else - return ITensor(u.data, s1, s2) - end -end - -function ITensors.ITensor(sites::Vector{<:Index}, u::ConservesNf{Givens{T}}) where {T} - return ITensor(sites, u.data) -end - -function ITensors.ITensor(sites::Vector{<:Index}, u::Givens) - s1 = sites[u.i1] - s2 = sites[u.i2] - return ITensor(u, s1, s2) -end - -function itensors(s::Vector{<:Index}, C::ConservesNfParity) - U = [ITensor(s, set_data(C, g)) for g in reverse(C.data.rotations[begin:2:end])] - return U -end - -function itensors(sites::Vector{<:Index}, C::ConservesNf) - return itensors(sites, C.data) -end - -function itensors(s::Vector{<:Index}, C::Circuit) - U = [ITensor(s, g) for g in reverse(C.rotations)] - return U -end - -""" - MPS(sites::Vector{<:Index}, state, U::Vector{<:ITensor}; kwargs...) - -Return an MPS with site indices `sites` by applying the circuit `U` to the starting state `state`. -""" -function ITensors.MPS(sites::Vector{<:Index}, state, U::Vector{<:ITensor}; kwargs...) - return apply(U, productMPS(sites, state); kwargs...) -end - -function isspinful(s::Index) - !hasqns(s) && return false - return all(qnblock -> ITensors.hasname(qn(qnblock), ITensors.QNVal("Sz", 0)), space(s)) -end - -function isspinful(s::Vector{<:Index}) - return all(isspinful, s) -end - -# Checks whether correlation matrix is of a number conserving system and returns AbstractSymmetry wrapper around correlation matrix -# ToDo: Behaviour assumes (spinless) "Fermion" sites, handle "Electron" sites separately for cases where correlation matrix does not factorize. -function symmetric_correlation_matrix(Λ::AbstractMatrix, s::Vector{<:Index}) - if length(s) == size(Λ, 1) - return ConservesNf(Λ) - elseif 2 * length(s) == size(Λ, 1) - return ConservesNfParity(Λ) - else - return error("Correlation matrix is not the same or twice the length of sites") - end -end - -function symmetric_correlation_matrix(Λ::AbstractMatrix, Nsites::Int) - if Nsites == size(Λ, 1) - return ConservesNf(Λ) - elseif 2 * Nsites == size(Λ, 1) - return ConservesNfParity(Λ) - else - return error("Correlation matrix is not the same or twice the length of sites") - end -end - -function correlation_matrix_to_mps( - s::Vector{<:Index}, - Λ::AbstractMatrix; - eigval_cutoff::Float64=1e-8, - maxblocksize::Int=size(Λ, 1), - minblocksize::Int=1, - kwargs..., -) - return correlation_matrix_to_mps( - s, - symmetric_correlation_matrix(Λ, s); - eigval_cutoff=eigval_cutoff, - maxblocksize=maxblocksize, - minblocksize=minblocksize, - kwargs..., - ) -end - -""" - correlation_matrix_to_mps(s::Vector{<:Index}, Λ::AbstractMatrix{ElT}; - eigval_cutoff::Float64 = 1e-8, - maxblocksize::Int = size(Λ, 1), - kwargs...) - -Return an approximation to the state represented by the correlation matrix as -a matrix product state (MPS). - -The correlation matrix should correspond to a pure state (have all eigenvalues -of zero or one). -""" -function correlation_matrix_to_mps( - s::Vector{<:Index}, - Λ0::AbstractSymmetry; - eigval_cutoff::Float64=1e-8, - maxblocksize::Int=size(Λ0.data, 1), - minblocksize::Int=1, - kwargs..., -) - MPS_Elt = eltype(Λ0.data) - Λ = maybe_drop_pairing_correlations(Λ0) - @assert size(Λ.data, 1) == size(Λ.data, 2) - ns, C = correlation_matrix_to_gmps( - Λ; eigval_cutoff=eigval_cutoff, minblocksize=minblocksize, maxblocksize=maxblocksize - ) - if all(hastags("Fermion"), s) - U = itensors(s, set_data(Λ, C)) - ψ = MPS(MPS_Elt, s, n -> round(Int, ns[site_stride(Λ) * n]) + 1) - ψ = apply(U, ψ; kwargs...) - elseif all(hastags("Electron"), s) - # ToDo: This is not tested properly, Electron sitetype tests currently assume interface with two AbstractSymmetry (correlation matrix) arguments - # FIXME: isodd is not correct here, there shouldn't be any restrictions on the number of electronic sites. - isodd(length(s)) && error( - "For Electron type, must have even number of sites of alternating up and down spins.", - ) - N = length(s) - if isspinful(s) - # FIXME: Can we lift this restriction now, at least for ConservesNf? - error( - "correlation_matrix_to_mps(Λ::AbstractMatrix) currently only supports spinless Fermions or Electrons that do not conserve Sz. Use correlation_matrix_to_mps(Λ_up::AbstractMatrix, Λ_dn::AbstractMatrix) to use spinful Fermions/Electrons.", - ) - elseif typeof(Λ) <: ConservesNf - sf = siteinds("Fermion", 2 * N; conserve_qns=true) - elseif typeof(Λ) <: ConservesNfParity - # FIXME: Does this also break, even if it doesn't make use of identity blocks? To be safe, issue error. - error( - "ConservesNfParity and Electron site type currently not supported. Please use Fermion sites instead.", - ) - sf = siteinds("Fermion", 2 * N; conserve_qns=false, conserve_nfparity=true) - end - U = itensors(sf, set_data(Λ, C)) - ψ = MPS(MPS_Elt, sf, n -> round(Int, ns[site_stride(Λ) * n]) + 1) - ψ = apply(U, ψ; kwargs...) - ψ = MPS(N) - for n in 1:N - i, j = 2 * n - 1, 2 * n - C = combiner(sf[i], sf[j]) - c = combinedind(C) - ψ[n] = ψf[i] * ψf[j] * C - ψ[n] *= δ(dag(c), s[n]) ###This back conversion to Electron will likely not work reliably for ConservesNfParity - end - else - error("All sites must be Fermion or Electron type.") - end - return ψ -end - -""" - slater_determinant_to_mps(s::Vector{<:Index}, Φ::AbstractMatrix; kwargs...) - -Given indices and matrix of orbitals representing a Slater determinant, -compute a matrix product state (MPS) approximately having the same correlation -matrices as this Slater determinant. - -Optional keyword arguments: -* `eigval_cutoff::Float64=1E-8` - cutoff used to adaptively determine the block size (eigenvalues must be closer to 1 or 0 by an amount smaller than this cutoff for their eigenvectors be labeled as "inactive" orbitals) -* `maxblocksize::Int` - maximum block size used to compute inactive orbitals. Setting this to a smaller value can lead to faster running times and a smaller MPS bond dimension, though the accuracy may be lower. -""" -function slater_determinant_to_mps(s::Vector{<:Index}, Φ::AbstractMatrix; kwargs...) - return correlation_matrix_to_mps(s, conj(Φ) * transpose(Φ); kwargs...) -end - -function slater_determinant_to_mps(s::Vector{<:Index}, Φ::AbstractSymmetry; kwargs...) - return correlation_matrix_to_mps(s, conj(Φ) * transpose(Φ); kwargs...) -end - -function slater_determinant_to_mps( - s::Vector{<:Index}, Φ_up::AbstractMatrix, Φ_dn::AbstractMatrix; kwargs... -) - return correlation_matrix_to_mps( - s, conj(Φ_up) * transpose(Φ_up), conj(Φ_dn) * transpose(Φ_dn); kwargs... - ) -end - -function mapindex(f::Function, C::Circuit) - return Circuit(mapindex.(f, C.rotations)) -end - -function mapindex(f::Function, g::Givens) - return Givens(f(g.i1), f(g.i2), g.c, g.s) -end - -function identity_blocks!(T::Tensor) - # FIXME: This is not generic logic. Only works reliably for QN subspace sizes = 1. - for b in nzblocks(T) - T[b] = Matrix{Float64}(I, dims(T[b])) - end - return T -end - -# Creates an ITensor with the specified flux where each nonzero block -# is identity -# TODO: make a special constructor for this. -# TODO: Introduce a modified combiner which keeps track of state-ordering/spaces. -function identity_blocks_itensor(flux::QN, i1::Index, i2::Index) - A = ITensor(flux, i1, i2) - identity_blocks!(tensor(A)) - return A -end - -function identity_blocks_itensor(i1::ITensors.QNIndex, i2::ITensors.QNIndex) - return identity_blocks_itensor(QN(), i1, i2) -end - -function identity_blocks_itensor(i1::Index, i2::Index) - M = Matrix{Float64}(I, dim(i1), dim(i2)) - return itensor(M, i1, i2) -end - -convert_union_nothing(v::Vector{T}) where {T} = convert(Vector{Union{T,Nothing}}, v) - -function interleave(xs...) - nexts = convert_union_nothing(collect(Base.iterate.(xs))) - res = Union{eltype.(xs)...}[] - while any(!isnothing, nexts) - for ii in eachindex(nexts) - if !isnothing(nexts[ii]) - (item, state) = nexts[ii] - push!(res, item) - nexts[ii] = iterate(xs[ii], state) - end - end - end - return res -end - -function interleave(a::ConservesNf{T}, b::ConservesNf{T}) where {T} - return set_data(a, interleave(a.data, b.data)) -end -function interleave(a::ConservesNfParity{T}, b::ConservesNfParity{T}) where {T} - return set_data( - a, - interleave( - interleave(a.data[1:2:end], b.data[1:2:end]), - interleave(a.data[2:2:end], b.data[2:2:end]), - ), - ) -end - -function interleave(M::AbstractMatrix) - @assert size(M, 1) == size(M, 2) - n = div(size(M, 1), 2) - first_half = Vector(1:n) - second_half = Vector((n + 1):(2 * n)) - interleaved_inds = interleave(first_half, second_half) - return M[interleaved_inds, interleaved_inds] -end - -function interleave(g1::Circuit, g2::Circuit) - return Circuit(interleave(g1.rotations, g2.rotations)) -end - -function reverse_interleave(M::AbstractMatrix) - @assert size(M, 1) == size(M, 2) - n = div(size(M, 1), 2) - first_half = Vector(1:n) - second_half = Vector((n + 1):(2 * n)) - interleaved_inds = interleave(first_half, second_half) - ordered_inds = sortperm(interleaved_inds) - return M[ordered_inds, ordered_inds] -end - -function correlation_matrix_to_mps( - s::Vector{<:Index}, - Λ_up0::AbstractSymmetry, - Λ_dn0::AbstractSymmetry; - eigval_cutoff::Float64=1e-8, - maxblocksize::Int=min(size(Λ_up0, 1), size(Λ_dn0, 1)), - minblocksize::Int=1, - kwargs..., -) - MPS_Elt = promote_type(eltype(Λ_up0.data), eltype(Λ_dn0.data)) - Λ_up = maybe_drop_pairing_correlations(Λ_up0) - Λ_dn = maybe_drop_pairing_correlations(Λ_dn0) - @assert size(Λ_up.data, 1) == size(Λ_up.data, 2) - @assert size(Λ_dn.data, 1) == size(Λ_dn.data, 2) - - if !( - (typeof(Λ_up) <: ConservesNfParity && typeof(Λ_dn) <: ConservesNfParity) || - (typeof(Λ_up) <: ConservesNf && typeof(Λ_dn) <: ConservesNf) - ) - error("Λ_up and Λ_dn have incompatible subtypes of AbstractSymmetry") - end - - N_up = div(size(Λ_up.data, 1), site_stride(Λ_up)) - N_dn = div(size(Λ_dn.data, 1), site_stride(Λ_up)) - N = N_up + N_dn - ns_up, C_up = correlation_matrix_to_gmps( - Λ_up; eigval_cutoff=eigval_cutoff, maxblocksize=maxblocksize - ) - ns_dn, C_dn = correlation_matrix_to_gmps( - Λ_dn; eigval_cutoff=eigval_cutoff, maxblocksize=maxblocksize - ) - C_up = mapindex(n -> 2n - 1, C_up) - C_dn = mapindex(n -> 2n, C_dn) - C_up_rot = set_data(Λ_up, C_up.rotations) - C_dn_rot = set_data(Λ_dn, C_dn.rotations) - ns_up = set_data(Λ_up, ns_up) - ns_dn = set_data(Λ_dn, ns_dn) - C = Circuit(interleave(C_up_rot, C_dn_rot).data) - ns = interleave(ns_up, ns_dn).data - if all(hastags("Fermion"), s) - U = itensors(s, set_data(Λ_up, C)) - ψ = MPS(MPS_Elt, s, n -> round(Int, ns[site_stride(Λ_up) * n]) + 1) - ψ = apply(U, ψ; kwargs...) - elseif all(hastags("Electron"), s) - @assert length(s) == N_up - @assert length(s) == N_dn - if isspinful(s) - if typeof(Λ_up) <: ConservesNf - space_up = [QN(("Nf", 0, -1), ("Sz", 0)) => 1, QN(("Nf", 1, -1), ("Sz", 1)) => 1] - space_dn = [QN(("Nf", 0, -1), ("Sz", 0)) => 1, QN(("Nf", 1, -1), ("Sz", -1)) => 1] - elseif typeof(Λ_up) <: ConservesNfParity - error( - "ConservesNfParity and Electron site type currently not supported. Please use Fermion sites instead.", - ) - # FIXME: issue with combiner-logic for subspace-size > 1 in identity_blocks_itensor, see below - space_up = [QN(("NfParity", 0, -2),) => 1, QN(("NfParity", 1, -2),) => 1] - space_dn = [QN(("NfParity", 0, -2),) => 1, QN(("NfParity", 1, -2),) => 1] - end - sf_up = [Index(space_up, "Fermion,Site,n=$(2n-1)") for n in 1:N_up] - sf_dn = [Index(space_dn, "Fermion,Site,n=$(2n)") for n in 1:N_dn] - sf = collect(Iterators.flatten(zip(sf_up, sf_dn))) - else - if typeof(Λ_up) <: ConservesNf - sf = siteinds("Fermion", N; conserve_qns=true, conserve_sz=false) - elseif typeof(Λ_up) <: ConservesNfParity - error( - "ConservesNfParity and Electron site type currently not supported. Please use Fermion sites instead.", - ) - sf = siteinds( - "Fermion", N; conserve_qns=false, conserve_sz=false, conserve_nfparity=true - ) - end - end - U = itensors(sf, set_data(Λ_up, C)) - ψf = MPS(MPS_Elt, sf, n -> round(Int, ns[site_stride(Λ_up) * n]) + 1) - ψf = apply(U, ψf; kwargs...) - ψ = MPS(N_up) - for n in 1:N_up - i, j = 2 * n - 1, 2 * n - C = combiner(sf[i], sf[j]) - c = combinedind(C) - ψ[n] = ψf[i] * ψf[j] * C - # FIXME: combiner looses track of state ordering for QN subspaces > 1 in identity_blocks_itensor - ψ[n] *= identity_blocks_itensor(dag(c), s[n]) - end - else - error("All sites must be Fermion or Electron type.") - end - - return ψ -end - -function correlation_matrix_to_mps( - s::Vector{<:Index}, - Λ_up::AbstractMatrix, - Λ_dn::AbstractMatrix; - eigval_cutoff::Float64=1e-8, - maxblocksize::Int=min(size(Λ_up, 1), size(Λ_dn, 1)), - minblocksize::Int=1, - kwargs..., -) - if all(hastags("Electron"), s) - return correlation_matrix_to_mps( - s, - symmetric_correlation_matrix(Λ_up, s), - symmetric_correlation_matrix(Λ_dn, s); - eigval_cutoff=eigval_cutoff, - maxblocksize=maxblocksize, - minblocksize=minblocksize, - kwargs..., - ) - elseif all(hastags("Fermion"), s) - # equivalent number of electrons - n_electrons = div(length(s), 2) - return correlation_matrix_to_mps( - s, - symmetric_correlation_matrix(Λ_up, n_electrons), - symmetric_correlation_matrix(Λ_dn, n_electrons); - eigval_cutoff=eigval_cutoff, - maxblocksize=maxblocksize, - minblocksize=minblocksize, - kwargs..., - ) - end -end diff --git a/ITensorGaussianMPS/src/linalg.jl b/ITensorGaussianMPS/src/linalg.jl deleted file mode 100644 index ec9a054987..0000000000 --- a/ITensorGaussianMPS/src/linalg.jl +++ /dev/null @@ -1,201 +0,0 @@ -""" -Some of the functionality in this script is closely related to routines in the following package -https://github.com/Jacupo/F_utilities -and the associated publication -10.21468/SciPostPhysLectNotes.54 -""" - -"""Takes a single-particle Hamiltonian in blocked Dirac format and finds the fermionic transformation U that diagonalizes it""" -function _eigen_gaussian_blocked(H; noise_scale=nothing) - #make sure H is Hermitian - @assert ishermitian(H) - H = Hermitian(H) - ElT = eltype(H) - #convert from Dirac to Majorana picture - N = size(H, 1) - Ω = build_Ω(ElT, N) - h = real(-im .* (Ω * H * Ω')) - h = (h - h') ./ 2 - #@show size(h) - if !isnothing(noise_scale) - noise = rand(size(h)...) * noise_scale - noise = (noise - noise') ./ 2 - h = h + noise - end - # Schur diagonalize including reordering - _, O, vals = order_schur(schur(h)) - # convert back to Dirac Frame - Fxpxx = build_Fxpxx(N) - U = Ω' * O * (Fxpxx') * Ω - d = vcat(-vals, vals) - if ElT <: Real - U = make_real_if_possible(U, d) - # make another pass with rotation in the complex plane per eigenvector - U .*= exp.(-im * angle.(U[1:1, :])) - @assert norm(imag.(U)) < sqrt(eps(real(ElT))) - U = real(real.(U)) - end - return d, U -end - -"""Takes a single-particle Hamiltonian in interlaced Dirac format and finds the complex fermionic transformation U that diagonalizes it.""" -function eigen_gaussian(H; noise_scale=nothing) - d, U = _eigen_gaussian_blocked( - ITensorGaussianMPS.reverse_interleave(complex(H)); noise_scale=noise_scale - ) - nU = similar(U) - n = div(size(H, 1), 2) - nU[1:2:end, :] = U[1:n, :] - nU[2:2:end, :] = U[(n + 1):end, :] - return d, nU -end - -"""Takes a single-particle Hamiltonian in interlaced Dirac format and outputs the ground state correlation matrix (with the input Hamiltonians element type).""" -function get_gaussian_GS_corr(H::AbstractMatrix; noise_scale=nothing) - ElT = eltype(H) - d, U = eigen_gaussian(H; noise_scale=noise_scale) - n = div(size(H, 1), 2) - c = conj(U[:, 1:n]) * transpose(U[:, 1:n]) - if ElT <: Real && norm(imag.(c)) <= sqrt(eps(real(ElT))) - c = real(real.(c)) - end - return c -end - -"""Takes a single-particle correlation matrix in interlaced Dirac format and finds the fermionic transformation U that diagonalizes it""" -function diag_corr_gaussian(Λ::Hermitian; noise_scale=nothing) - #shift correlation matrix by half so spectrum is symmetric around 0 - populations, U = eigen_gaussian(Λ - 0.5 * I; noise_scale=noise_scale) - n = diag(U' * Λ * U) - if !all(abs.(populations - (n - 0.5 * ones(size(n)))) .< sqrt(eps(real(eltype(Λ))))) - @show n - @show populations .+ 0.5 - @error( - "The natural orbital populations are not consistent, see above. Try adding symmetric noise to the input matrix." - ) - end - return populations .+ 0.5, U -end - -"""Takes a single-particle correlation matrix in interlaced Dirac format and finds the fermionic transformation U that diagonalizes it""" -function diag_corr_gaussian(Γ::AbstractMatrix; noise_scale=nothing) - #enforcing hermitianity - Γ = (Γ + Γ') / 2.0 - return diag_corr_gaussian(Hermitian(Γ); noise_scale=noise_scale) -end - -"""Schur decomposition of skew-hermitian matrix""" -function order_schur(F::LinearAlgebra.Schur) - T = F.Schur - O = F.vectors #column vectors are Schur vectors - - N = size(T, 1) - n = div(N, 2) - shuffled_inds = Vector{Int}[] - ElT = eltype(T) - vals = ElT[] - # build a permutation matrix that takes care of the ordering - for i in 1:n - ind = 2 * i - 1 - val = T[ind, ind + 1] - if real(val) >= 0 - push!(shuffled_inds, [ind, ind + 1]) - else - push!(shuffled_inds, [ind + 1, ind]) - end - push!(vals, abs(val)) - end - # build block local rotation first - perm = sortperm(real.(vals); rev=true) ##we want the upper left corner to be the largest absolute value eigval pair? - vals = vals[perm] - shuffled_inds = reduce(vcat, shuffled_inds[perm]) - # then permute blocks for overall ordering - T = T[shuffled_inds, shuffled_inds] - O = O[:, shuffled_inds] - return T, O, vals #vals are only positive, and of length n and not N -end - -"""Checks if we can make degenerate subspaces of a U0 real by multiplying columns or rows with a phase""" -function make_real_if_possible(U0::AbstractMatrix, spectrum::Vector; sigdigits=12) - # only apply to first half of spectrum due to symmetry around 0 - # assumes spectrum symmetric around zero and ordered as vcat(-E,E) where E is ordered in descending magnitude - U = copy(U0) - n = div(length(spectrum), 2) - # Round spectrum for comparison within finite floating point precision. - # Not the cleanest way to compare floating point numbers for approximate equality but should be sufficient here. - rounded_halfspectrum = round.(spectrum[1:n], sigdigits=sigdigits) - approx_unique_eigvals = unique(rounded_halfspectrum) - # loop over degenerate subspaces - for e in approx_unique_eigvals - mask = rounded_halfspectrum .== e - if abs(e) < eps(real(eltype(U0))) - # handle values close to zero separately - # rotate subspace for both positive and negative eigenvalue if they are close enough to zero - mask = vcat(mask, mask) - subspace = U[:, mask] - subspace = make_subspace_real_if_possible(subspace) - U[:, mask] = subspace - - else - mask = rounded_halfspectrum .== e - # rotate suspace for the negative eigenvalue - subspace = U[:, 1:n][:, mask] - subspace = make_subspace_real_if_possible(subspace) - v = @views U[:, 1:n][:, mask] - v .= subspace - # rotate suspace for the positive eigenvalue - subspace = U[:, (n + 1):end][:, mask] - subspace = make_subspace_real_if_possible(subspace) - v = @views U[:, (n + 1):end][:, mask] - v .= subspace - end - end - return U -end - -"""Checks if we can make a degenerate subspace of the eigenbasis of an operator real by multiplying columns or rows with a phase""" -function make_subspace_real_if_possible(U::AbstractMatrix; atol=sqrt(eps(real(eltype(U))))) - if eltype(U) <: Real - return U - end - if size(U, 2) == 1 - nU = U .* exp(-im * angle(U[1, 1])) - if norm(imag.(nU)) .<= atol - return nU - else - return U - end - else - n = size(U, 2) - gram = U * U' - if norm(imag.(gram)) .<= atol - D, V = eigen(Hermitian(real.(gram))) - proj = V[:, (size(U, 1) - n + 1):end] * (V[:, (size(U, 1) - n + 1):end])' - @assert norm(proj * U - U) < atol - return complex(V[:, (size(U, 1) - n + 1):end]) - else - return U - end - end -end - -# transformation matrices (in principle sparse) between and within Majorana and Dirac picture - -function build_Ω(T, N::Int) - n = div(N, 2) - nElT = T <: Real ? Complex{T} : T - Ω = zeros(nElT, N, N) - Ω[1:n, 1:n] .= diagm(ones(nElT, n) ./ sqrt(2)) - Ω[1:n, (n + 1):N] .= diagm(ones(nElT, n) ./ sqrt(2)) - Ω[(n + 1):N, 1:n] .= diagm(ones(nElT, n) * (im / sqrt(2))) - Ω[(n + 1):N, (n + 1):N] .= diagm(ones(nElT, n) * (-im / sqrt(2))) - return Ω -end - -function build_Fxpxx(N::Int) - Fxpxx = zeros(Int8, N, N) - n = div(N, 2) - Fxpxx[1:n, 1:2:N] .= diagm(ones(Int8, n)) - Fxpxx[(n + 1):N, 2:2:N] .= diagm(ones(Int8, n)) - return Fxpxx -end diff --git a/ITensorGaussianMPS/test/Project.toml b/ITensorGaussianMPS/test/Project.toml deleted file mode 100644 index 622e01b82b..0000000000 --- a/ITensorGaussianMPS/test/Project.toml +++ /dev/null @@ -1,4 +0,0 @@ -[deps] -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/ITensorGaussianMPS/test/electron.jl b/ITensorGaussianMPS/test/electron.jl deleted file mode 100644 index 4d260d1408..0000000000 --- a/ITensorGaussianMPS/test/electron.jl +++ /dev/null @@ -1,279 +0,0 @@ -using ITensorGaussianMPS -using ITensors -using LinearAlgebra -using Test - -function expect_compat(psi::MPS, ops::AbstractString...; kwargs...) - if ITensors.version() >= v"0.2" - return expect(psi, ops...; kwargs...) - end - psi = copy(psi) - N = length(psi) - ElT = real(promote_itensor_eltype(psi)) - Nops = length(ops) - s = siteinds(psi) - site_range::UnitRange{Int} = get(kwargs, :site_range, 1:N) - Ns = length(site_range) - start_site = first(site_range) - offset = start_site - 1 - orthogonalize!(psi, start_site) - psi[start_site] ./= norm(psi[start_site]) - ex = ntuple(n -> zeros(ElT, Ns), Nops) - for j in site_range - orthogonalize!(psi, j) - for n in 1:Nops - ex[n][j - offset] = real(scalar(psi[j] * op(ops[n], s[j]) * dag(prime(psi[j], s[j])))) - end - end - return Nops == 1 ? ex[1] : ex -end - -@testset "Electron" begin - # Half filling - N = 40 - Nf_up = N ÷ 2 - Nf_dn = N ÷ 2 - Nf = Nf_up + Nf_dn - - # Maximum MPS link dimension - _maxlinkdim = 200 - - # DMRG cutoff - _cutoff = 1e-8 - - # Hopping - t = 1.0 - - # Electron-electron on-site interaction - U = 1.0 - - # Make the free fermion Hamiltonian for the up spins - os_up = OpSum() - for n in 1:(N - 1) - os_up .+= -t, "Cdagup", n, "Cup", n + 1 - os_up .+= -t, "Cdagup", n + 1, "Cup", n - end - - # Make the free fermion Hamiltonian for the down spins - os_dn = OpSum() - for n in 1:(N - 1) - os_dn .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_dn .+= -t, "Cdagdn", n + 1, "Cdn", n - end - - # Hopping Hamiltonians for the up and down spins - h_up = hopping_hamiltonian(os_up) - h_dn = hopping_hamiltonian(os_dn) - h_combined = hopping_hamiltonian(os_up, os_dn) - - # Get the Slater determinant - Φ_up = slater_determinant_matrix(h_up, Nf_up) - Φ_dn = slater_determinant_matrix(h_dn, Nf_dn) - - # Create an MPS from the slater determinants. - s = siteinds("Electron", N; conserve_qns=true) - ψ0 = slater_determinant_to_mps( - s, Φ_up, Φ_dn; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim - ) - - @test maxlinkdim(ψ0) ≤ _maxlinkdim - - # The total non-interacting part of the Hamiltonian - os_noninteracting = OpSum() - for n in 1:(N - 1) - os_noninteracting .+= -t, "Cdagup", n, "Cup", n + 1 - os_noninteracting .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_noninteracting .+= -t, "Cdagup", n + 1, "Cup", n - os_noninteracting .+= -t, "Cdagdn", n + 1, "Cdn", n - end - - H_noninteracting = MPO(os_noninteracting, s) - @test tr(Φ_up' * h_up * Φ_up) + tr(Φ_dn' * h_dn * Φ_dn) ≈ inner(ψ0', H_noninteracting, ψ0) rtol = - 1e-3 - - # The total interacting Hamiltonian - os_interacting = OpSum() - for n in 1:(N - 1) - os_interacting .+= -t, "Cdagup", n, "Cup", n + 1 - os_interacting .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_interacting .+= -t, "Cdagup", n + 1, "Cup", n - os_interacting .+= -t, "Cdagdn", n + 1, "Cdn", n - end - for n in 1:N - os_interacting .+= U, "Nupdn", n - end - H = MPO(os_interacting, s) - - # Random starting state - ψr = randomMPS(s, n -> n ≤ Nf ? (isodd(n) ? "↑" : "↓") : "0") - - @test flux(ψr) == QN(("Nf", Nf, -1), ("Sz", 0)) - @test flux(ψ0) == QN(("Nf", Nf, -1), ("Sz", 0)) - - @test inner(ψ0', H, ψ0) < inner(ψr', H, ψr) - - sweeps = Sweeps(3) - setmaxdim!(sweeps, 10, 20, _maxlinkdim) - setcutoff!(sweeps, _cutoff) - setnoise!(sweeps, 1e-5, 1e-6, 1e-7, 0.0) - er, _ = dmrg(H, ψr, sweeps; outputlevel=0) - - sweeps = Sweeps(3) - setmaxdim!(sweeps, _maxlinkdim) - setcutoff!(sweeps, _cutoff) - setnoise!(sweeps, 1e-5, 1e-6, 1e-7, 0.0) - e0, _ = dmrg(H, ψ0, sweeps; outputlevel=0) - - @test e0 > inner(ψ0', H_noninteracting, ψ0) - @test e0 < er -end - -@testset "Regression test for bug away from half filling" begin - N = 3 - t = 1.0 - os_up = OpSum() - for n in 1:(N - 1) - os_up .+= -t, "Cdagup", n, "Cup", n + 1 - os_up .+= -t, "Cdagup", n + 1, "Cup", n - end - os_dn = OpSum() - for n in 1:(N - 1) - os_dn .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_dn .+= -t, "Cdagdn", n + 1, "Cdn", n - end - h_up = hopping_hamiltonian(os_up) - h_dn = hopping_hamiltonian(os_dn) - s = siteinds("Electron", N; conserve_qns=true) - H = MPO(os_up + os_dn, s) - Nf_up, Nf_dn = 1, 0 - Φ_up = slater_determinant_matrix(h_up, Nf_up) - Φ_dn = slater_determinant_matrix(h_dn, Nf_dn) - ψ = slater_determinant_to_mps(s, Φ_up, Φ_dn; eigval_cutoff=0.0, cutoff=0.0) - @test inner(ψ', H, ψ) ≈ tr(Φ_up' * h_up * Φ_up) + tr(Φ_dn' * h_dn * Φ_dn) - @test maxlinkdim(ψ) == 2 - @test flux(ψ) == QN(("Nf", 1, -1), ("Sz", 1)) - ns_up = expect_compat(ψ, "Nup") - ns_dn = expect_compat(ψ, "Ndn") - @test ns_up ≈ diag(Φ_up * Φ_up') - @test ns_dn ≈ diag(Φ_dn * Φ_dn') - @test sum(ns_up) ≈ Nf_up - @test sum(ns_dn) ≈ Nf_dn -end - -@testset "Electron - Pairing (currently inactive)" begin - # Keep this testset for when the Electron-sites + pairing bug is fixed - # But skip the tests for now. - is_implemented = false - if !is_implemented - nothing - else - # Half filling - N = 40 - Nf_up = N ÷ 2 - Nf_dn = N ÷ 2 - Nf = Nf_up + Nf_dn - - # Maximum MPS link dimension - _maxlinkdim = 200 - - # DMRG cutoff - _cutoff = 1e-8 - - # Hopping - t = 1.0 - pairing = 1.2 - # Electron-electron on-site interaction - U = 1.0 - - # Make the free fermion Hamiltonian for the up spins - os_up = OpSum() - for n in 1:(N - 1) - os_up .+= -t, "Cdagup", n, "Cup", n + 1 - os_up .+= -t, "Cdagup", n + 1, "Cup", n - os_up .+= -pairing, "Cdagup", n + 1, "Cdagup", n - os_up .+= -pairing, "Cup", n, "Cup", n + 1 - - #os_up .+= -pairing, "Cdagup", n+1,"Cdagup", n - end - - # Make the free fermion Hamiltonian for the down spins - os_dn = OpSum() - for n in 1:(N - 1) - os_dn .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_dn .+= -t, "Cdagdn", n + 1, "Cdn", n - os_dn .+= -pairing, "Cdn", n, "Cdn", n + 1 - os_dn .+= -pairing, "Cdagdn", n + 1, "Cdagdn", n - end - - # Hopping Hamiltonians for the up and down spins - h_up = quadratic_hamiltonian(os_up) - h_dn = quadratic_hamiltonian(os_dn) - - # Get the Slater determinant, N*2 because of pairing (should pass chemical potential as arg later) - Φ_up = slater_determinant_matrix(h_up, Nf_up * 2) - Φ_dn = slater_determinant_matrix(h_dn, Nf_dn * 2) - - # Create an MPS from the slater determinants. - s = siteinds( - "Electron", N; conserve_qns=false, conserve_nfparity=true, conserve_nf=false - ) - H_ni_up = MPO(os_up, s) - - ψ0 = slater_determinant_to_mps( - s, Φ_up, Φ_dn; eigval_cutoff=1e-4, cutoff=_cutoff, maxdim=_maxlinkdim - ) - @show norm(ψ0) - @test maxlinkdim(ψ0) ≤ _maxlinkdim - - # The total non-interacting part of the Hamiltonian - os_noninteracting = OpSum() - for n in 1:(N - 1) - os_noninteracting .+= -t, "Cdagdn", n, "Cdn", n + 1 - os_noninteracting .+= -t, "Cdagdn", n + 1, "Cdn", n - os_noninteracting .+= -pairing, "Cdn", n, "Cdn", n + 1 - os_noninteracting .+= -pairing, "Cdagdn", n + 1, "Cdagdn", n - os_noninteracting .+= -t, "Cdagup", n, "Cup", n + 1 - os_noninteracting .+= -t, "Cdagup", n + 1, "Cup", n - os_noninteracting .+= -pairing, "Cdagup", n + 1, "Cdagup", n - os_noninteracting .+= -pairing, "Cup", n, "Cup", n + 1 - end - - H_noninteracting = MPO(os_noninteracting, s) - @show tr(Φ_up' * h_up * Φ_up), - tr(Φ_dn' * h_dn * Φ_dn), inner(ψ0', H_noninteracting, ψ0), - inner(ψ0', H_ni_up, ψ0) - @test tr(Φ_up' * h_up * Φ_up) + tr(Φ_dn' * h_dn * Φ_dn) ≈ - inner(ψ0', H_noninteracting, ψ0) rtol = 1e-3 - - # The total interacting Hamiltonian - os_interacting = copy(os_noninteracting) - #os_interacting .+= os_noninteracting - for n in 1:N - os_interacting .+= U, "Nupdn", n - end - H = MPO(os_interacting, s) - - # Random starting state - ψr = randomMPS(s, n -> n ≤ Nf ? (isodd(n) ? "↑" : "↓") : "0") - @show flux(ψr), flux(ψ0) - #@test flux(ψr) == QN(("Nf", Nf, -1), ("Sz", 0)) - #@test flux(ψ0) == QN(("Nf", Nf, -1), ("Sz", 0)) - - @test inner(ψ0', H, ψ0) < inner(ψr', H, ψr) - - sweeps = Sweeps(3) - setmaxdim!(sweeps, 10, 20, _maxlinkdim) - setcutoff!(sweeps, _cutoff) - setnoise!(sweeps, 1e-5, 1e-6, 1e-7, 0.0) - er, _ = dmrg(H, ψr, sweeps; outputlevel=0) - - sweeps = Sweeps(3) - setmaxdim!(sweeps, _maxlinkdim) - setcutoff!(sweeps, _cutoff) - setnoise!(sweeps, 1e-5, 1e-6, 1e-7, 0.0) - e0, _ = dmrg(H, ψ0, sweeps; outputlevel=0) - - @test e0 > inner(ψ0', H_noninteracting, ψ0) - @test e0 < er - end -end diff --git a/ITensorGaussianMPS/test/gmera.jl b/ITensorGaussianMPS/test/gmera.jl deleted file mode 100644 index 9b5dd5d1dc..0000000000 --- a/ITensorGaussianMPS/test/gmera.jl +++ /dev/null @@ -1,176 +0,0 @@ -using ITensorGaussianMPS -using ITensors -using LinearAlgebra -using Test - -@testset "Basic" begin - # Test Givens rotations - v = randn(6) - g, r = ITensorGaussianMPS.givens_rotations(v) - @test g * v ≈ r * [n == 1 ? 1 : 0 for n in 1:length(v)] -end - -@testset "Fermion" begin - N = 10 - Nf = N ÷ 2 - - # Hopping - t = 1.0 - - # Hopping Hamiltonian - h = Hermitian(diagm(1 => fill(-t, N - 1), -1 => fill(-t, N - 1))) - e, u = eigen(h) - - @test h * u ≈ u * Diagonal(e) - - E = sum(e[1:Nf]) - - # Get the Slater determinant - Φ = u[:, 1:Nf] - @test h * Φ ≈ Φ * Diagonal(e[1:Nf]) - - # Diagonalize the correlation matrix as a - # Gaussian MPS (GMPS) gates - n, gmps = slater_determinant_to_gmera(Φ; maxblocksize=10) - - ns = round.(Int, n) - @test sum(ns) == Nf - - Λ = conj(Φ) * transpose(Φ) - @test gmps * Λ * gmps' ≈ Diagonal(ns) rtol = 1e-2 - @test gmps' * Diagonal(ns) * gmps ≈ Λ rtol = 1e-2 - - # Form the MPS - s = siteinds("Fermion", N; conserve_qns=true) - ψ = ITensorGaussianMPS.slater_determinant_to_mera(s, Φ; maxblocksize=4) - - os = OpSum() - for i in 1:N, j in 1:N - if h[i, j] ≠ 0 - os .+= h[i, j], "Cdag", i, "C", j - end - end - H = MPO(os, s) - - @test inner(ψ', H, ψ) ≈ E rtol = 1e-5 - - # Compare to DMRG - sweeps = Sweeps(10) - setmaxdim!(sweeps, 10, 20, 40, 60) - setcutoff!(sweeps, 1E-12) - energy, ψ̃ = dmrg(H, productMPS(s, n -> n ≤ Nf ? "1" : "0"), sweeps; outputlevel=0) - - # Create an mps - @test abs(inner(ψ, ψ̃)) ≈ 1 rtol = 1e-5 - @test inner(ψ̃', H, ψ̃) ≈ inner(ψ', H, ψ) rtol = 1e-5 - @test E ≈ energy -end - -@testset "Fermion (complex)" begin - N = 10 - Nf = N ÷ 2 - - # Hopping - θ = π / 8 - t = exp(im * θ) - - # Hopping Hamiltonian - h = Hermitian(diagm(1 => fill(-t, N - 1), -1 => fill(-conj(t), N - 1))) - e, u = eigen(h) - - @test h * u ≈ u * Diagonal(e) - - E = sum(e[1:Nf]) - - # Get the Slater determinant - Φ = u[:, 1:Nf] - @test h * Φ ≈ Φ * Diagonal(e[1:Nf]) - - # Diagonalize the correlation matrix as a - # Gaussian MPS (GMPS) - n, gmps = slater_determinant_to_gmera(Φ; maxblocksize=4) - - ns = round.(Int, n) - @test sum(ns) == Nf - - Λ = conj(Φ) * transpose(Φ) - @test gmps * Λ * gmps' ≈ Diagonal(ns) rtol = 1e-2 - @test gmps' * Diagonal(ns) * gmps ≈ Λ rtol = 1e-2 - - # Form the MPS - s = siteinds("Fermion", N; conserve_qns=true) - ψ = ITensorGaussianMPS.slater_determinant_to_mera(s, Φ; maxblocksize=4) - - os = OpSum() - for i in 1:N, j in 1:N - if h[i, j] ≠ 0 - os .+= h[i, j], "Cdag", i, "C", j - end - end - H = MPO(os, s) - - @test inner(ψ', H, ψ) ≈ E rtol = 1e-5 - @test inner(ψ', H, ψ) / norm(ψ) ≈ E rtol = 1e-5 - - # Compare to DMRG - sweeps = Sweeps(10) - setmaxdim!(sweeps, 10, 20, 40, 60) - setcutoff!(sweeps, 1E-12) - energy, ψ̃ = dmrg(H, productMPS(s, n -> n ≤ Nf ? "1" : "0"), sweeps; outputlevel=0) - - # Create an mps - @test abs(inner(ψ, ψ̃)) ≈ 1 rtol = 1e-5 - @test inner(ψ̃', H, ψ̃) ≈ inner(ψ', H, ψ) rtol = 1e-5 - @test E ≈ energy -end - -# Build 1-d SSH model -function SSH1dModel(N::Int, t::Float64, vardelta::Float64) - # N should be even - s = siteinds("Fermion", N; conserve_qns=true) - limit = div(N - 1, 2) - t1 = -t * (1 + vardelta / 2) - t2 = -t * (1 - vardelta / 2) - os = OpSum() - for n in 1:limit - os .+= t1, "Cdag", 2 * n - 1, "C", 2 * n - os .+= t1, "Cdag", 2 * n, "C", 2 * n - 1 - os .+= t2, "Cdag", 2 * n, "C", 2 * n + 1 - os .+= t2, "Cdag", 2 * n + 1, "C", 2 * n - end - if N % 2 == 0 - os .+= t1, "Cdag", N - 1, "C", N - os .+= t1, "Cdag", N, "C", N - 1 - end - h = hopping_hamiltonian(os) - H = MPO(os, s) - #display(t1) - return (h, H, s) -end - -@testset "Energy" begin - N = 2^4 - Nf = div(N, 2) - t = 1.0 - gapsize = 0 - vardelta = gapsize / 2 - h, H, s = SSH1dModel(N, t, vardelta) - - Φ = slater_determinant_matrix(h, Nf) - E, V = eigen(h) - sort(E) - Eana = sum(E[1:Nf]) - - Λ0 = Φ * Φ' - @test Eana ≈ tr(h * Λ0) rtol = 1e-5 - # Diagonalize the correlation matrix as a - # Gaussian MPS (GMPS) and GMERA - ngmps, V1 = ITensorGaussianMPS.correlation_matrix_to_gmps(Λ0; eigval_cutoff=1e-8) - nmera, V1 = ITensorGaussianMPS.correlation_matrix_to_gmera(Λ0; eigval_cutoff=1e-8)#,maxblocksize=6) - @test sum(round.(Int, nmera)) == sum(round.(Int, ngmps)) - - U = ITensorGaussianMPS.UmatFromGates(V1, N) - Etest = ITensorGaussianMPS.EfromGates(h, U) - - @test Eana ≈ Etest rtol = 1e-5 -end diff --git a/ITensorGaussianMPS/test/gmps.jl b/ITensorGaussianMPS/test/gmps.jl deleted file mode 100644 index 64adb7041f..0000000000 --- a/ITensorGaussianMPS/test/gmps.jl +++ /dev/null @@ -1,239 +0,0 @@ -using ITensorGaussianMPS -using ITensors -using LinearAlgebra -using Test - -@testset "Basic" begin - # Test Givens rotations - v = randn(6) - g, r = ITensorGaussianMPS.givens_rotations(v) - @test g * v ≈ r * [n == 1 ? 1 : 0 for n in 1:length(v)] -end - -@testset "Hamiltonians" begin - N = 8 - t = -0.8 ###nearest neighbor hopping - mu = 0.0 ###on-site chemical potential - pairing = 1.2 - os = OpSum() - for i in 1:N - if 1 < i < N - js = [i - 1, i + 1] - elseif i == 1 - js = [i + 1] - else - js = [i - 1] - end - for j in js - os .+= t, "Cdag", i, "C", j - end - end - h_hop = ITensorGaussianMPS.hopping_hamiltonian(os) - for i in 1:N - if 1 < i < N - js = [i - 1, i + 1] - elseif i == 1 - js = [i + 1] - else - js = [i - 1] - end - for j in js - os .+= pairing / 2.0, "Cdag", i, "Cdag", j - os .+= -conj(pairing / 2.0), "C", i, "C", j - end - end - - h_hopandpair = ITensorGaussianMPS.quadratic_hamiltonian(os) - h_hopandpair_spinful = ITensorGaussianMPS.quadratic_hamiltonian(os, os) - - @test all( - abs.( - ( - 2 .* ITensorGaussianMPS.reverse_interleave(Matrix(h_hopandpair))[ - (N + 1):end, (N + 1):end - ] - ) - h_hop - ) .< eps(Float32), - ) -end - -@testset "Fermion (real and complex)" begin - N = 10 - Nf = N ÷ 2 - - # Hopping - θs = [0.0, π / 8] - for θ in θs - t = exp(im * θ) - - # Hopping Hamiltonian - h = Hermitian(diagm(1 => fill(-t, N - 1), -1 => fill(-conj(t), N - 1))) - if θ == 0.0 - h = real(h) - end - e, u = eigen(h) - - @test h * u ≈ u * Diagonal(e) - - E = sum(e[1:Nf]) - - # Get the Slater determinant - Φ = u[:, 1:Nf] - @test h * Φ ≈ Φ * Diagonal(e[1:Nf]) - - # Diagonalize the correlation matrix as a - # Gaussian MPS (GMPS) - n, gmps = slater_determinant_to_gmps(Φ, N; maxblocksize=4) - ns = round.(Int, n) - @test sum(ns) == Nf - - Λ = conj(Φ) * transpose(Φ) - @test gmps * Λ * gmps' ≈ Diagonal(ns) rtol = 1e-2 - @test gmps' * Diagonal(ns) * gmps ≈ Λ rtol = 1e-2 - - # Form the MPS - s = siteinds("Fermion", N; conserve_qns=true) - ψ = slater_determinant_to_mps(s, Φ; maxblocksize=4) - os = OpSum() - for i in 1:N, j in 1:N - if h[i, j] ≠ 0 - os .+= h[i, j], "Cdag", i, "C", j - end - end - H = MPO(os, s) - - @test inner(ψ', H, ψ) ≈ E rtol = 1e-5 - @test inner(ψ', H, ψ) / norm(ψ) ≈ E rtol = 1e-5 - - # Compare to DMRG - sweeps = Sweeps(10) - setmaxdim!(sweeps, 10, 20, 40, 60) - setcutoff!(sweeps, 1E-12) - energy, ψ̃ = dmrg(H, productMPS(s, n -> n ≤ Nf ? "1" : "0"), sweeps; outputlevel=0) - - # Create an mps - @test abs(inner(ψ, ψ̃)) ≈ 1 rtol = 1e-5 - @test inner(ψ̃', H, ψ̃) ≈ inner(ψ', H, ψ) rtol = 1e-5 - @test E ≈ energy - end -end - -@testset "Fermion BCS (real,real - no pairing, complex)" begin - N = 12 - Nf = N ÷ 2 - ts = [1.0, exp(im * pi / 3.0), 1.0] - Deltas = [1.0, 1.0, 0.0] - for (Delta, t) in zip(Deltas, ts) - t = isreal(t) ? real(t) : t - os_h = OpSum() - for n in 1:(N - 1) - os_h .+= -t, "Cdag", n, "C", n + 1 - os_h .+= -t', "Cdag", n + 1, "C", n - end - os_p = OpSum() - for n in 1:(N - 1) - os_p .+= Delta / 2.0, "Cdag", n, "Cdag", n + 1 - os_p .+= -Delta / 2.0, "Cdag", n + 1, "Cdag", n - os_p .+= -Delta / 2.0, "C", n, "C", n + 1 - os_p .+= Delta / 2.0, "C", n + 1, "C", n - end - - h = ITensorGaussianMPS.quadratic_hamiltonian(os_h + os_p) - @assert ishermitian(h) - ElT = eltype(h) - e, u = ITensorGaussianMPS.eigen_gaussian(h) - E = sum(e[1:(N)]) - Φ = (u[:, 1:N]) - @test h * Φ ≈ Φ * Diagonal(e[1:N]) - c = conj(Φ) * transpose(Φ) - c2 = ITensorGaussianMPS.get_gaussian_GS_corr(h) - @test norm(c - c2) <= sqrt(eps(real(eltype(h)))) - if ElT <: Real - @assert norm(imag.(c)) <= sqrt(eps()) - c = real.(c) - end - n, gmps = correlation_matrix_to_gmps(ElT.(c), N; eigval_cutoff=1e-10, maxblocksize=14) - ns = round.(Int, n) - @test sum(ns) == N - - Λ = ITensorGaussianMPS.ConservesNfParity(c) - @test gmps * Λ.data * gmps' ≈ Diagonal(ns) rtol = 1e-2 - @test gmps' * Diagonal(ns) * gmps ≈ Λ.data rtol = 1e-2 - - # Form the MPS - s = siteinds("Fermion", N; conserve_qns=false) - h_mpo = MPO(os_h + os_p, s) - psi = correlation_matrix_to_mps( - s, ElT.(c); eigval_cutoff=1e-10, maxblocksize=14, cutoff=1e-11 - ) - @test eltype(psi[1]) <: ElT - sweeps = Sweeps(5) - _maxlinkdim = 60 - _cutoff = 1e-10 - setmaxdim!(sweeps, 10, 20, 40, _maxlinkdim) - setcutoff!(sweeps, _cutoff) - E_dmrg, psidmrg = dmrg(h_mpo, psi, sweeps; outputlevel=0) - E_ni_mpo = inner(psi', h_mpo, psi) - @test E_dmrg ≈ E_ni_mpo rtol = 1e-4 - @test inner(psidmrg, psi) ≈ 1 rtol = 1e-4 - - # compare entries of the correlation matrix - cdagc = correlation_matrix(psi, "Cdag", "C") - cdagcdag = correlation_matrix(psi, "Cdag", "Cdag") - ccdag = correlation_matrix(psi, "C", "Cdag") - cc = correlation_matrix(psi, "C", "C") - cblocked = ITensorGaussianMPS.reverse_interleave(c) - tol = 1e-5 - @test all(abs.(cblocked[(N + 1):end, (N + 1):end] - cdagc[:, :]) .< tol) - @test all(abs.(cblocked[1:N, 1:N] - ccdag[:, :]) .< tol) - @test all(abs.(cblocked[1:N, (N + 1):end] - cc[:, :]) .< tol) - @test all(abs.(cblocked[(N + 1):end, 1:N] - cdagcdag[:, :]) .< tol) - @show "Completed test for: ", Delta, t - end -end - -@testset "Bad Terms" begin - @testset "Bad single" begin - os = OpSum() - os += -1.0, "Nupdn", 1 - @test_throws Any h_hop = ITensorGaussianMPS.hopping_hamilontian(os) - end - @testset "Bad quadratic" begin - os = OpSum() - os += -1.0, "Ntot", 1, "Ntot", 2 - @test_throws Any h_hop = ITensorGaussianMPS.hopping_hamilontian(os) - end -end - -@testset "Rewrite Hamiltonians" begin - @testset "Spinless" begin - os = OpSum() - os += -1.0, "Cdag", 1, "C", 2 - os += -1.0, "Cdag", 2, "C", 1 - os += 2, "N", 1 - os += 3, "N", 2 - h_hop = ITensorGaussianMPS.hopping_hamiltonian(os) - @test h_hop[1, 1] == 2 - @test h_hop[2, 2] == 3 - end - @testset "Spin $o" for o in ("up", "dn") - os = OpSum() - os += -1.0, "Cdag$o", 1, "C$o", 2 - os += -1.0, "Cdag$o", 2, "C$o", 1 - os += 2, "N$o", 1 - os += 3, "N$o", 2 - h_hop = ITensorGaussianMPS.hopping_hamiltonian(os) - @test h_hop[1, 1] == 2 - @test h_hop[2, 2] == 3 - end - @testset "Spin $o" for o in ("↑", "↓") - os = OpSum() - os += -1.0, "c†$o", 1, "c$o", 2 - os += -1.0, "c†$o", 2, "c$o", 1 - os += 2, "n$o", 1 - os += 3, "n$o", 2 - h_hop = ITensorGaussianMPS.hopping_hamiltonian(os) - @test h_hop[1, 1] == 2 - @test h_hop[2, 2] == 3 - end -end diff --git a/ITensorGaussianMPS/test/linalg.jl b/ITensorGaussianMPS/test/linalg.jl deleted file mode 100644 index 5ea9df39cd..0000000000 --- a/ITensorGaussianMPS/test/linalg.jl +++ /dev/null @@ -1,36 +0,0 @@ -using ITensorGaussianMPS -using ITensors -using LinearAlgebra -using Test -const GMPS = ITensorGaussianMPS - -@testset "Fermionic Hamiltonian diagonalization in parity-conserving frame" begin - N = 10 - # generate random Hamiltonian in non-number-conserving space - H = zeros(ComplexF64, 2 * N, 2 * N) - hoffd = rand(N, N) .- 0.5 + im * (rand(N, N) .- 0.5) - hoffd = (hoffd - transpose(hoffd)) ./ 2 - H[1:N, (N + 1):end] = hoffd - H[(N + 1):end, 1:N] = -conj.(hoffd) - hd = rand(N, N) .- 0.5 + im * (rand(N, N) .- 0.5) - hd = (hd + hd') ./ 2 - H[1:N, 1:N] = -1 .* conj.(hd) - H[(N + 1):end, (N + 1):end] = hd - H = (H + H') ./ 2 - # compare spectrum, which can also accurately be computed via standard eigendecomposition - d, U = GMPS._eigen_gaussian_blocked(Hermitian(H)) - d2, _ = eigen(Hermitian(H)) - d3, _ = GMPS.eigen_gaussian(Hermitian(GMPS.interleave(H))) - @test sort(d) ≈ sort(d2) - @test sort(d) ≈ sort(d3) -end - -@testset "Undoing arbitrary complex rotation within degenerate subspaces" begin - A = (x -> Matrix(qr(x).Q))(randn(5, 3)) - U = (x -> Matrix(qr(x).Q))(randn(ComplexF64, 3, 3)) - AU = A * U - B = GMPS.make_subspace_real_if_possible(AU) - # verify that same subspace is spanned by real eigenvectors B as original eigenvectors A or AU - @test norm(((B * B' * A) .- A)) <= eps(Float64) * 10 - @test norm(((B * B' * AU) .- AU)) <= eps(Float64) * 10 -end diff --git a/ITensorGaussianMPS/test/runtests.jl b/ITensorGaussianMPS/test/runtests.jl deleted file mode 100644 index 8b8982fd86..0000000000 --- a/ITensorGaussianMPS/test/runtests.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensorGaussianMPS -using LinearAlgebra -using Test - -@testset "ITensorGaussianMPS.jl" begin - include("gmps.jl") - include("electron.jl") - include("linalg.jl") -end From 08672a2d5cfb98954a27154bf2a77f10e9df01f7 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 09:03:31 -0400 Subject: [PATCH 02/10] [ITensorGPU] Move to separate repository (#1412) --- .../03_ITensorGPU_bug_report.md | 60 -- .../03_ITensorGPU_feature_request.md | 24 - .../generate_issue_templates.jl | 10 +- .gitignore | 2 - ITensorGPU/.JuliaFormatter.toml | 2 - ITensorGPU/.gitignore | 7 - ITensorGPU/.gitlab-ci.yml | 50 -- ITensorGPU/LICENSE | 19 - ITensorGPU/NEWS.md | 71 --- ITensorGPU/Project.toml | 33 - ITensorGPU/README.md | 50 -- ITensorGPU/examples/dmrg.jl | 24 - ITensorGPU/examples/gate_evolution.jl | 46 -- ITensorGPU/src/ITensorGPU.jl | 114 ---- ITensorGPU/src/adapt.jl | 33 - ITensorGPU/src/cuarray/set_types.jl | 17 - ITensorGPU/src/cuitensor.jl | 127 ---- ITensorGPU/src/mps/cumps.jl | 13 - ITensorGPU/src/tensor/cucombiner.jl | 1 - ITensorGPU/src/tensor/cudense.jl | 573 ------------------ ITensorGPU/src/tensor/cudiag.jl | 228 ------- ITensorGPU/src/tensor/culinearalgebra.jl | 159 ----- ITensorGPU/src/tensor/cutruncate.jl | 87 --- ITensorGPU/src/tensor/dense.jl | 285 --------- ITensorGPU/src/traits.jl | 51 -- ITensorGPU/test/Project.toml | 7 - ITensorGPU/test/runtests.jl | 30 - ITensorGPU/test/test_cucontract.jl | 227 ------- ITensorGPU/test/test_cudense.jl | 118 ---- ITensorGPU/test/test_cudiag.jl | 101 --- ITensorGPU/test/test_cuitensor.jl | 145 ----- ITensorGPU/test/test_cumpo.jl | 184 ------ ITensorGPU/test/test_cumps.jl | 275 --------- ITensorGPU/test/test_cutruncate.jl | 62 -- ITensorGPU/test/test_dmrg.jl | 236 -------- ITensorGPU/test/test_pastaq.jl | 73 --- NDTensors/src/lib/CUDAExtensions/src/cuda.jl | 2 +- .../src/lib/MetalExtensions/src/metal.jl | 4 +- docs/src/RunningOnGPUs.md | 4 +- 39 files changed, 9 insertions(+), 3545 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/03_ITensorGPU_bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/03_ITensorGPU_feature_request.md delete mode 100644 ITensorGPU/.JuliaFormatter.toml delete mode 100644 ITensorGPU/.gitignore delete mode 100644 ITensorGPU/.gitlab-ci.yml delete mode 100644 ITensorGPU/LICENSE delete mode 100644 ITensorGPU/NEWS.md delete mode 100644 ITensorGPU/Project.toml delete mode 100644 ITensorGPU/README.md delete mode 100644 ITensorGPU/examples/dmrg.jl delete mode 100644 ITensorGPU/examples/gate_evolution.jl delete mode 100644 ITensorGPU/src/ITensorGPU.jl delete mode 100644 ITensorGPU/src/adapt.jl delete mode 100644 ITensorGPU/src/cuarray/set_types.jl delete mode 100644 ITensorGPU/src/cuitensor.jl delete mode 100644 ITensorGPU/src/mps/cumps.jl delete mode 100644 ITensorGPU/src/tensor/cucombiner.jl delete mode 100644 ITensorGPU/src/tensor/cudense.jl delete mode 100644 ITensorGPU/src/tensor/cudiag.jl delete mode 100644 ITensorGPU/src/tensor/culinearalgebra.jl delete mode 100644 ITensorGPU/src/tensor/cutruncate.jl delete mode 100644 ITensorGPU/src/tensor/dense.jl delete mode 100644 ITensorGPU/src/traits.jl delete mode 100644 ITensorGPU/test/Project.toml delete mode 100644 ITensorGPU/test/runtests.jl delete mode 100644 ITensorGPU/test/test_cucontract.jl delete mode 100644 ITensorGPU/test/test_cudense.jl delete mode 100644 ITensorGPU/test/test_cudiag.jl delete mode 100644 ITensorGPU/test/test_cuitensor.jl delete mode 100644 ITensorGPU/test/test_cumpo.jl delete mode 100644 ITensorGPU/test/test_cumps.jl delete mode 100644 ITensorGPU/test/test_cutruncate.jl delete mode 100644 ITensorGPU/test/test_dmrg.jl delete mode 100644 ITensorGPU/test/test_pastaq.jl diff --git a/.github/ISSUE_TEMPLATE/03_ITensorGPU_bug_report.md b/.github/ISSUE_TEMPLATE/03_ITensorGPU_bug_report.md deleted file mode 100644 index 7fbd2619a8..0000000000 --- a/.github/ISSUE_TEMPLATE/03_ITensorGPU_bug_report.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: ITensorGPU.jl bug report -about: Create a bug report to help us improve ITensorGPU.jl -title: "[ITensorGPU] [BUG] YOUR SHORT DESCRIPTION OF THE BUG HERE" -labels: ["ITensorGPU", "bug"] -assignees: '' - ---- - -**Description of bug** - -Please give a brief description of the bug or unexpected behavior here. - -**Minimal code demonstrating the bug or unexpected behavior** - -If applicable, provide a minimal code that can be run to demonstrate the bug or unexpected behavior. - -If you are unable to construct a minimal code that demonstrates the bug or unexpected behavior, provide detailed steps for how to reproduce the behavior you are seeing. - -
Minimal runnable code

- -```julia -[YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Expected output or behavior** - -Describe what you expected to happen. - -If you provided a minimal code that can be run to demonstrate the bug or unexpected behavior, describe what you expected the output would be. - - -**Actual output or behavior** - -Describe what actually happened. - -If you provided a minimal code that demonstrates the bug or unexpected behavior, provide the output you get from that code. If the code leads to an error or warning, include the full error or warning below. - -
Output of minimal runnable code

- -```julia -[OUTPUT OF YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Version information** - - - Output from `versioninfo()`: -```julia -julia> versioninfo() -[YOUR OUTPUT HERE] -``` - - Output from `using Pkg; Pkg.status("ITensors")`: -```julia -julia> using Pkg; Pkg.status("ITensors") -[YOUR OUTPUT HERE] -``` diff --git a/.github/ISSUE_TEMPLATE/03_ITensorGPU_feature_request.md b/.github/ISSUE_TEMPLATE/03_ITensorGPU_feature_request.md deleted file mode 100644 index 98530af229..0000000000 --- a/.github/ISSUE_TEMPLATE/03_ITensorGPU_feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: ITensorGPU.jl feature request -about: Suggest an idea for ITensorGPU.jl -title: "[ITensorGPU] [ENHANCEMENT] YOUR SHORT DESCRIPTION OF THE FEATURE REQUEST HERE" -labels: ["ITensorGPU", "enhancement"] -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl index c3021a136b..3cf60fb500 100644 --- a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl +++ b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl @@ -5,7 +5,6 @@ template_package_name = "PACKAGE" package_names = [ "ITensors", "NDTensors", - "ITensorGPU", "ITensorVisualizationBase", "ITensorUnicodePlots", "ITensorMakie", @@ -15,11 +14,10 @@ package_names = [ package_ordering = Dict([ "ITensors" => 1, "NDTensors" => 2, - "ITensorGPU" => 3, - "ITensorVisualizationBase" => 4, - "ITensorUnicodePlots" => 5, - "ITensorMakie" => 6, - "ITensorGLMakie" => 7, + "ITensorVisualizationBase" => 3, + "ITensorUnicodePlots" => 4, + "ITensorMakie" => 5, + "ITensorGLMakie" => 6, ]) function bug_report_file(package_name::String) diff --git a/.gitignore b/.gitignore index ac4095b6a1..0cd5f1ab53 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,6 @@ ITensorMakie/Manifest.toml ITensorMakie/test/Manifest.toml ITensorGLMakie/Manifest.toml ITensorGLMakie/test/Manifest.toml -ITensorGPU/Manifest.toml -ITensorGPU/test/Manifest.toml ITensorVisualizationBase/Manifest.toml ITensorVisualizationBase/test/Manifest.toml NDTensors/Manifest.toml diff --git a/ITensorGPU/.JuliaFormatter.toml b/ITensorGPU/.JuliaFormatter.toml deleted file mode 100644 index 08f664cdb9..0000000000 --- a/ITensorGPU/.JuliaFormatter.toml +++ /dev/null @@ -1,2 +0,0 @@ -style = "blue" -indent = 2 diff --git a/ITensorGPU/.gitignore b/ITensorGPU/.gitignore deleted file mode 100644 index aa25970241..0000000000 --- a/ITensorGPU/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.jl.*.cov -.*.swp -*.jl.cov -*.jl.mem -.DS_Store -/Manifest.toml -/dev/ diff --git a/ITensorGPU/.gitlab-ci.yml b/ITensorGPU/.gitlab-ci.yml deleted file mode 100644 index 6886680085..0000000000 --- a/ITensorGPU/.gitlab-ci.yml +++ /dev/null @@ -1,50 +0,0 @@ -include: - - 'https://raw.githubusercontent.com/JuliaGPU/gitlab-ci/master/templates/v6.yml' - -test:1.4: - extends: - - .julia:1.4 - - .test - tags: - - nvidia - - cuda_11.0 - script: - - julia --project -e 'using Pkg; Pkg.develop(["ITensors", "CUDA", "GPUArrays", "GPUCompiler"]);' - - julia --project -e 'using Pkg; Pkg.test("ITensorGPU"; coverage=true)' - variables: - JULIA_CUDA_VERSION: '11.0' - JULIA_CUDA_USE_BINARYBUILDER: 'true' - -test:1.5: - extends: - - .julia:1.5 - - .test - tags: - - nvidia - - cuda_11.0 - script: - - julia --project -e 'using Pkg; Pkg.develop(["ITensors", "CUDA", "GPUArrays", "GPUCompiler"]);' - - julia --project -e 'using Pkg; Pkg.test("ITensorGPU"; coverage=true)' - variables: - JULIA_CUDA_VERSION: '11.0' - JULIA_CUDA_USE_BINARYBUILDER: 'true' - -test:nightly: - extends: - - .julia:nightly - - .test - tags: - - nvidia - - cuda_11.0 - script: - - julia --project -e 'using Pkg; Pkg.develop(["ITensors", "CUDA", "GPUArrays", "GPUCompiler"]);' - - julia --project -e 'using Pkg; Pkg.test("ITensorGPU")' - allow_failure: true - variables: - JULIA_CUDA_VERSION: '11.0' - JULIA_CUDA_USE_BINARYBUILDER: 'true' - -coverage: - extends: - - .julia:nightly - - .coverage diff --git a/ITensorGPU/LICENSE b/ITensorGPU/LICENSE deleted file mode 100644 index 1385d3954e..0000000000 --- a/ITensorGPU/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2019 Katharine Hyatt - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/ITensorGPU/NEWS.md b/ITensorGPU/NEWS.md deleted file mode 100644 index 3c6eddd974..0000000000 --- a/ITensorGPU/NEWS.md +++ /dev/null @@ -1,71 +0,0 @@ -This file is a (mostly) comprehensive list of changes made in each release of ITensorGPU.jl. For a completely comprehensive but more verbose list, see the [commit history on Github](https://github.com/ITensor/ITensors.jl/commits/main/ITensorGPU). - -While we are in v0.x of the package, we will follow the convention that updating from v0.x.y to v0.x.(y+1) (for example v0.1.15 to v0.1.16) should not break your code, unless you are using internal/undocumented features of the code, while updating from `v0.x.y` to `v0.(x+1).y` might break your code, though we will try to add deprecation warnings when possible, such as for simple cases where the name of a function changes. - -Note that as of Julia v1.5, in order to see deprecation warnings you will need to start Julia with `julia --depwarn=yes` (previously they were on by default). Please run your code like this before upgrading between minor versions of the code (for example from v0.1.41 to v0.2.0). - -After we release v1 of the package, we will start following [semantic versioning](https://semver.org). - -ITensorGPU v0.0.7 Release Notes -=============================== - -Bugs: - -Enhancements: - -- Bump version compat for dependencies. - -ITensorGPU v0.0.6 Release Notes -=============================== - -Bugs: - -Enhancements: - -ITensorGPU v0.0.5 Release Notes -=============================== - -Bugs: - -Enhancements: - -- Clean up `outer` and add GEMM routing for CUDA (#887) - -ITensorGPU v0.0.4 Release Notes -=============================== - -Bugs: - -Enhancements: - -- `cu([[A, B], [C]])` -> `[[cu(A), cu(B)], [cu(C)]]` and same for cpu (#898). -- Allow cutruncate to work for Float32s (#897). - -ITensorGPU v0.0.3 Release Notes -=============================== - -Bugs: - -- Fix bugs in complex SVD on GPU (with and without truncations) (#871) - -Enhancements: - -- Remove some unnecessary contract code (#860) - -ITensorGPU v0.0.2 Release Notes -=============================== - -Bugs: - -- Remove unnecessary `CuDense` type equality definition (#823) - -Enhancements: - -ITensorGPU v0.0.1 Release Notes -=============================== - -Bugs: - -Enhancements: - -- Register ITensorGPU package, code in ITensors.jl repository diff --git a/ITensorGPU/Project.toml b/ITensorGPU/Project.toml deleted file mode 100644 index 762e51ee4d..0000000000 --- a/ITensorGPU/Project.toml +++ /dev/null @@ -1,33 +0,0 @@ -name = "ITensorGPU" -uuid = "d89171c1-af8f-46b3-badf-d2a472317c15" -authors = ["Katharine Hyatt", "Matthew Fishman "] -version = "0.1.7" - -[deps] -Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" -Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -Functors = "d9f16b24-f501-4c13-a1f2-28368ffc5196" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -NDTensors = "23ae76d9-e61a-49c4-8f12-3f1a16adf9cf" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -SimpleTraits = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" -Strided = "5e0ebb24-38b0-5f93-81fe-25c709ecae67" -TimerOutputs = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -cuTENSOR = "011b41b2-24ef-40a8-b3eb-fa098493e9e1" - -[compat] -Adapt = "3.5, 4" -CUDA = "4.0" -Combinatorics = "1.0.2" -Functors = "0.2, 0.3, 0.4" -ITensors = "= 0.3.37" -NDTensors = "0.1.50" -SimpleTraits = "0.9.4" -StaticArrays = "1.2.13" -Strided = "1.1.2, 2" -TimerOutputs = "0.5.13" -cuTENSOR = "1.1.0" -julia = "1.6 - 1.9" diff --git a/ITensorGPU/README.md b/ITensorGPU/README.md deleted file mode 100644 index 40238bef34..0000000000 --- a/ITensorGPU/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# ITensorGPU: Intelligent Tensors with GPU acceleration - -[![codecov](https://codecov.io/gh/ITensor/ITensorGPU.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/ITensor/ITensorGPU.jl) - -[![gitlab-ci](https://gitlab.com/JuliaGPU/ITensorGPU-jl/badges/master/pipeline.svg)](https://gitlab.com/JuliaGPU/ITensorGPU-jl/commits/master) - -This package extends the functionality of [ITensors.jl](https://github.com/ITensor/ITensors.jl) to make use of CUDA-enabled GPUs to accelerate tensor contractions and factorizations. It sits on top of the wonderful [CUDA.jl](https://github.com/JuliaGPU/CUDA.jl) package and uses NVIDIA's [cuTENSOR](https://developer.nvidia.com/cutensor) library for high-performance tensor operations. - -## Installing ITensorGPU.jl - -Dependencies: - - [Julia 1.3 or later](https://julialang.org/downloads/) - - [CUDA 10.1 or later](https://developer.nvidia.com/cuda-downloads) -- Currently only NVIDIA GPUs are supported. NVIDIA drivers are required so that Julia can make use of the NVIDIA GPU on your system. - - [cuTENSOR v1.0.0 or later](https://developer.nvidia.com/cutensor) -- A specialized library for perfoming permutation-free tensor contractions on the GPU. `libcutensor.so` needs to be in your `LD_LIBRARY_PATH` so that `CUDA.jl` will be able to find it. - - [ITensors.jl](https://itensor.github.io/ITensors.jl/stable/#Installation-1) - -To properly install CUDA with Julia, it may be helpful to first follow the [CUDA.jl installation instructions](https://juliagpu.github.io/CUDA.jl/stable/installation/overview/) and test that you have that installed properly and that it is able to use `cuTENSOR`. You can run the commands: -```julia -julia> using CUDA.CUTENSOR - -julia> CUTENSOR.has_cutensor() -true - -julia> CUTENSOR.version() -v"1.2.1" -``` -to check that `CUDA.jl` can see the version of `cuTENSOR` you have installed. - -Once you have all of the dependencies installed, you can then go ahead and install `ITensorGPU.jl` with the following command: -``` -julia> ] - -pkg> add ITensorGPU -``` - -To check if this has all worked, you can run the package tests using: -```julia -julia> ] - -pkg> test ITensorGPU -``` - -## Examples - -Take a look at the `examples/` directory for examples of running ITensor calculations on the GPU. - -For an application of `ITensorGPU.jl` to more sophisticated tensor network calculations, take a look at [PEPS.jl](https://github.com/ITensor/PEPS.jl). - -For some background on the development and design of this package, you can take a look at [this blog post](https://kshyatt.github.io/post/itensorsgpu/) by Katie Hyatt, original author of the `ITensorGPU.jl` package. - diff --git a/ITensorGPU/examples/dmrg.jl b/ITensorGPU/examples/dmrg.jl deleted file mode 100644 index e3448ccace..0000000000 --- a/ITensorGPU/examples/dmrg.jl +++ /dev/null @@ -1,24 +0,0 @@ -using ITensors -using ITensorGPU - -# Set to identity to run on CPU -device = cu - -N = 50 -sites = siteinds("S=1", N) - -opsum = OpSum() -for j in 1:(N - 1) - opsum .+= 0.5, "S+", j, "S-", j + 1 - opsum .+= 0.5, "S-", j, "S+", j + 1 - opsum .+= "Sz", j, "Sz", j + 1 -end -H = device(MPO(opsum, sites)) - -ψ₀ = device(randomMPS(sites)) - -dmrg_kwargs = (; - nsweeps=6, maxdim=[10, 20, 40, 100], mindim=[1, 10], cutoff=1e-11, noise=1e-10 -) -energy, ψ = @time dmrg(H, ψ₀; dmrg_kwargs...) -@show energy diff --git a/ITensorGPU/examples/gate_evolution.jl b/ITensorGPU/examples/gate_evolution.jl deleted file mode 100644 index d570039915..0000000000 --- a/ITensorGPU/examples/gate_evolution.jl +++ /dev/null @@ -1,46 +0,0 @@ -using ITensors -using ITensorGPU - -import ITensors: space, state, op - -space(::SiteType"Qubit") = 2 -state(::SiteType"Qubit", ::StateName"0") = 1 -state(::SiteType"Qubit", ::StateName"1") = 2 - -op_matrix(s::String) = op_matrix(OpName(s)) - -op_matrix(::OpName"Id") = [ - 1 0 - 0 1 -] - -op_matrix(::OpName"I") = op_matrix("Id") - -op_matrix(::OpName"X") = [ - 0 1 - 1 0 -] - -function op_matrix(on::OpName, s::Index...; kwargs...) - rs = reverse(s) - return itensor(op_matrix(on; kwargs...), prime.(rs)..., dag.(rs)...) -end - -op_matrix(gn::String, s::Index...; kwargs...) = op_matrix(OpName(gn), s...; kwargs...) - -function op_matrix(gn::String, s::Vector{<:Index}, ns::Int...; kwargs...) - return op_matrix(OpName(gn), s[[ns...]]...; kwargs...) -end - -op(gn::OpName, ::SiteType"Qubit", s::Index...; kwargs...) = op_matrix(gn, s...; kwargs...) - -N = 10 -s = siteinds("Qubit", N) -X = cu.(ops(s, [("X", n) for n in 1:N])) - -initstate = fill("0", N) - -ψ0 = productCuMPS(s, initstate) - -gates = [X[n] for n in 1:2:N] -ψ = apply(gates, ψ0) diff --git a/ITensorGPU/src/ITensorGPU.jl b/ITensorGPU/src/ITensorGPU.jl deleted file mode 100644 index 93be4c9342..0000000000 --- a/ITensorGPU/src/ITensorGPU.jl +++ /dev/null @@ -1,114 +0,0 @@ -module ITensorGPU -using NDTensors - -using Adapt -using CUDA -using CUDA.CUBLAS -using CUDA.CUSOLVER -using Functors -using ITensors -using LinearAlgebra -using Random -using SimpleTraits -using StaticArrays -using Strided -using TimerOutputs -using cuTENSOR - -using NDTensors: setdata, setstorage, cpu, IsWrappedArray, parenttype - -import Adapt: adapt_structure -import Base: *, permutedims! -import CUDA: CuArray, CuMatrix, CuVector, cu -import CUDA.Mem: pin -import ITensors: - randn!, - compute_contraction_labels, - eigen, - tensor, - scale!, - unioninds, - array, - matrix, - vector, - polar, - tensors, - truncate!, - leftlim, - rightlim, - permute, - BroadcastStyle, - Indices -import NDTensors: - Atrans, - Btrans, - CombinerTensor, - ContractionProperties, - Combiner, - Ctrans, - Diag, - DiagTensor, - Dense, - DenseTensor, - NonuniformDiag, - NonuniformDiagTensor, - Tensor, - UniformDiag, - UniformDiagTensor, - _contract!!, - _contract!, - _contract_scalar!, - _contract_scalar_noperm!, - can_contract, - compute_contraction_properties!, - contract!!, - contract!, - contract, - contraction_output, - contraction_output_type, - data, - getperm, - ind, - is_trivial_permutation, - outer!, - outer!!, - permutedims!!, - set_eltype, - set_ndims, - similartype, - zero_contraction_output -import cuTENSOR: cutensorContractionPlan_t, cutensorAlgo_t - -#const ContractionPlans = Dict{String, Tuple{cutensorAlgo_t, cutensorContractionPlan_t}}() -const ContractionPlans = Dict{String,cutensorAlgo_t}() - -include("cuarray/set_types.jl") -include("traits.jl") -include("adapt.jl") -include("tensor/cudense.jl") -include("tensor/dense.jl") -include("tensor/culinearalgebra.jl") -include("tensor/cutruncate.jl") -include("tensor/cucombiner.jl") -include("tensor/cudiag.jl") -include("cuitensor.jl") -include("mps/cumps.jl") - -export cu, - cpu, cuITensor, randomCuITensor, cuMPS, randomCuMPS, productCuMPS, randomCuMPO, cuMPO - -## TODO: Is this needed? -## const devs = Ref{Vector{CUDAdrv.CuDevice}}() -## const dev_rows = Ref{Int}(0) -## const dev_cols = Ref{Int}(0) -## function __init__() -## voltas = filter(dev->occursin("V100", CUDAdrv.name(dev)), collect(CUDAdrv.devices())) -## pascals = filter(dev->occursin("P100", CUDAdrv.name(dev)), collect(CUDAdrv.devices())) -## devs[] = voltas[1:1] -## #devs[] = pascals[1:2] -## CUBLASMG.cublasMgDeviceSelect(CUBLASMG.mg_handle(), length(devs[]), devs[]) -## dev_rows[] = 1 -## dev_cols[] = 1 -## end - -end #module diff --git a/ITensorGPU/src/adapt.jl b/ITensorGPU/src/adapt.jl deleted file mode 100644 index fe40c14435..0000000000 --- a/ITensorGPU/src/adapt.jl +++ /dev/null @@ -1,33 +0,0 @@ -# -# Used to adapt `EmptyStorage` types -# - -function NDTensors.cu(eltype::Type{<:Number}, x) - return fmap(x -> adapt(CuVector{eltype,default_buffertype()}, x), x) -end -NDTensors.cu(x) = fmap(x -> adapt(CuArray, x), x) - -function NDTensors.set_eltype_if_unspecified( - arraytype::Type{CuVector{T}}, eltype::Type -) where {T} - return arraytype -end -function NDTensors.set_eltype_if_unspecified(arraytype::Type{CuVector}, eltype::Type) - return CuVector{eltype} -end - -# Overload `CUDA.cu` for convenience -const ITensorType = Union{ - TensorStorage,Tensor,ITensor,Array{ITensor},Array{<:Array{ITensor}},MPS,MPO -} -CUDA.cu(x::ITensorType) = NDTensors.cu(x) -CUDA.cu(eltype::Type{<:Number}, x::ITensorType) = NDTensors.cu(eltype, x) - -function NDTensors.adapt_storagetype( - to::Type{<:CUDA.CuArray}, x::Type{<:NDTensors.EmptyStorage} -) - store = NDTensors.storagetype(x) - return NDTensors.emptytype( - NDTensors.set_datatype(store, CuVector{eltype(store),default_buffertype()}) - ) -end diff --git a/ITensorGPU/src/cuarray/set_types.jl b/ITensorGPU/src/cuarray/set_types.jl deleted file mode 100644 index 21beda4ab8..0000000000 --- a/ITensorGPU/src/cuarray/set_types.jl +++ /dev/null @@ -1,17 +0,0 @@ -buffertype(datatype::Type{<:CuArray{<:Any,<:Any,B}}) where {B} = B -function buffertype(datatype::Type{<:CuArray}) - println( - "CuArray definitions require a CUDA.Mem buffer try $(datatype{default_buffertype()})" - ) - throw(TypeError) -end - -default_buffertype() = CUDA.Mem.DeviceBuffer - -function set_eltype(arraytype::Type{<:CuArray}, eltype::Type) - return CuArray{eltype,ndims(arraytype),buffertype(arraytype)} -end - -function set_ndims(arraytype::Type{<:CuArray}, ndims) - return CuArray{eltype(arraytype),ndims,buffertype(arraytype)} -end diff --git a/ITensorGPU/src/cuitensor.jl b/ITensorGPU/src/cuitensor.jl deleted file mode 100644 index 667aa28eb2..0000000000 --- a/ITensorGPU/src/cuitensor.jl +++ /dev/null @@ -1,127 +0,0 @@ -import ITensors.NDTensors: NeverAlias, AliasStyle, AllowAlias -import ITensors: ITensor -import CUDA: CuArray - -function cuITensor(eltype::Type{<:Number}, inds::IndexSet) - return itensor( - NDTensors.default_storagetype(CuVector{eltype,default_buffertype()})(dim(inds)), inds - ) -end -cuITensor(::Type{T}, inds::Index...) where {T<:Number} = cuITensor(T, IndexSet(inds...)) - -cuITensor(is::IndexSet) = cuITensor(Float64, is) -cuITensor(inds::Index...) = cuITensor(IndexSet(inds...)) - -cuITensor() = ITensor() -function cuITensor(x::S, inds::IndexSet{N}) where {S<:Number,N} - d = NDTensors.Dense{S,CuVector{S,default_buffertype()}}( - fill!(CuVector{S,default_buffertype()}(undef, dim(inds)), x) - ) - return ITensor(d, inds) -end -cuITensor(x::S, inds::Index...) where {S<:Number} = cuITensor(x, IndexSet(inds...)) - -function ITensor( - as::AliasStyle, - eltype::Type{<:Number}, - A::CuArray{<:Number}, - inds::Indices{Index{Int}}; - kwargs..., -) - length(A) ≠ dim(inds) && throw( - DimensionMismatch( - "In ITensor(::CuArray, inds), length of AbstractArray ($(length(A))) must match total dimension of IndexSet ($(dim(inds)))", - ), - ) - data = CuArray{eltype}(as, A) - return itensor(Dense(data), inds) -end - -# Fix ambiguity error -function ITensor( - as::NDTensors.AliasStyle, eltype::Type{<:Number}, A::CuArray{<:Number}, inds::Tuple{} -) - length(A) ≠ dim(inds) && throw( - DimensionMismatch( - "In ITensor(::CuArray, inds), length of AbstractArray ($(length(A))) must match total dimension of IndexSet ($(dim(inds)))", - ), - ) - data = CuArray{eltype}(as, A) - return itensor(Dense(data), inds) -end - -# Helper functions for different view behaviors -CuArray{ElT,N}(::NeverAlias, A::AbstractArray) where {ElT,N} = CuArray{ElT,N}(A) -function CuArray{ElT,N}(::AllowAlias, A::AbstractArray) where {ElT,N} - return convert(CuArray{ElT,N}, A) -end -function CuArray{ElT}(as::AliasStyle, A::AbstractArray{ElTA,N}) where {ElT,N,ElTA} - return CuArray{ElT,N}(as, A) -end - -# TODO: Change to: -# (Array{ElT, N} where {ElT})([...]) = [...] -# once support for `VERSION < v"1.6"` is dropped. -# Previous to Julia v1.6 `where` syntax couldn't be used in a function name -function CuArray{<:Any,N}(as::AliasStyle, A::AbstractArray{ElTA,N}) where {N,ElTA} - return CuArray{ElTA,N}(as, A) -end - -cuITensor(data::Array, inds...) = cu(ITensor(data, inds...)) - -cuITensor(data::CuArray, inds...) = ITensor(data, inds...) - -cuITensor(A::ITensor) = cu(A) - -function randomCuITensor(::Type{S}, inds::Indices) where {S<:Real} - T = cuITensor(S, inds) - randn!(T) - return T -end -function randomCuITensor(::Type{S}, inds::Indices) where {S<:Complex} - Tr = cuITensor(real(S), inds) - Ti = cuITensor(real(S), inds) - randn!(Tr) - randn!(Ti) - return complex(Tr) + im * Ti -end -function randomCuITensor(::Type{S}, inds::Index...) where {S<:Number} - return randomCuITensor(S, IndexSet(inds...)) -end -randomCuITensor(inds::IndexSet) = randomCuITensor(Float64, inds) -randomCuITensor(inds::Index...) = randomCuITensor(Float64, IndexSet(inds...)) - -CuArray(T::ITensor) = CuArray(tensor(T)) - -function CuArray{ElT,N}(T::ITensor, is::Vararg{Index,N}) where {ElT,N} - ndims(T) != N && throw( - DimensionMismatch( - "cannot convert an $(ndims(T)) dimensional ITensor to an $N-dimensional CuArray." - ), - ) - TT = tensor(permute(T, is...; allow_alias=true)) - return CuArray{ElT,N}(TT)::CuArray{ElT,N} -end - -function CuArray{ElT}(T::ITensor, is::Vararg{Index,N}) where {ElT,N} - return CuArray{ElT,N}(T, is...) -end - -function CuArray(T::ITensor, is::Vararg{Index,N}) where {N} - return CuArray{eltype(T),N}(T, is...)::CuArray{<:Number,N} -end - -CUDA.CuMatrix(A::ITensor) = CuArray(A) - -function CuVector(A::ITensor) - if ndims(A) != 1 - throw(DimensionMismatch("Vector() expected a 1-index ITensor")) - end - return CuArray(A) -end - -function CuMatrix(T::ITensor, i1::Index, i2::Index) - ndims(T) != 2 && - throw(DimensionMismatch("ITensor must be order 2 to convert to a Matrix")) - return CuArray(T, i1, i2) -end diff --git a/ITensorGPU/src/mps/cumps.jl b/ITensorGPU/src/mps/cumps.jl deleted file mode 100644 index f59099f8d8..0000000000 --- a/ITensorGPU/src/mps/cumps.jl +++ /dev/null @@ -1,13 +0,0 @@ -# cu(ψ::Union{MPS,MPO}) = map(cu, ψ) -# cpu(ψ::Union{MPS,MPO}) = map(cpu, ψ) - -cuMPS(ψ::MPS) = cu(ψ) -cuMPS(args...; kwargs...) = cu(MPS(args...; kwargs...)) -randomCuMPS(args...; kwargs...) = cu(randomMPS(args...; kwargs...)) - -# For backwards compatibility -productCuMPS(args...; kwargs...) = cuMPS(args...; kwargs...) - -cuMPO(M::MPO) = cu(M) -cuMPO(args...; kwargs...) = cu(MPO(args...; kwargs...)) -randomCuMPO(args...; kwargs...) = cu(randomMPO(args...; kwargs...)) diff --git a/ITensorGPU/src/tensor/cucombiner.jl b/ITensorGPU/src/tensor/cucombiner.jl deleted file mode 100644 index d01109a892..0000000000 --- a/ITensorGPU/src/tensor/cucombiner.jl +++ /dev/null @@ -1 +0,0 @@ -Base.promote_rule(::Type{<:Combiner}, StorageT::Type{<:CuDense}) = StorageT diff --git a/ITensorGPU/src/tensor/cudense.jl b/ITensorGPU/src/tensor/cudense.jl deleted file mode 100644 index 2db9055d9c..0000000000 --- a/ITensorGPU/src/tensor/cudense.jl +++ /dev/null @@ -1,573 +0,0 @@ -using LinearAlgebra: BlasFloat - -const CuDense{ElT,VecT} = Dense{ElT,VecT} where {VecT<:CuVector} -const CuDenseTensor{ElT,N,StoreT,IndsT} = Tensor{ElT,N,StoreT,IndsT} where {StoreT<:CuDense} - -# function Dense{T,SA}(x::Dense{T,SB}) where {T<:Number,SA<:CuArray,SB<:Array} -# return Dense{T,SA}(CuArray(x)) -# end -# function Dense{T,SA}(x::Dense{T,SB}) where {T<:Number,SA<:Array,SB<:CuArray} -# return Dense{T,SA}(collect(x.data)) -# end -# Dense{T,S}(size::Integer) where {T,S<:CuArray{<:T}} = Dense{T,S}(CUDA.zeros(T, size)) -# function Dense{T,S}(x::T, size::Integer) where {T,S<:CuArray{<:T}} -# arr = CuArray{T}(undef, size) -# fill!(arr, x) -# return Dense{T,S}(arr) -# end - -function Base.complex(::Type{Dense{ElT,VT}}) where {ElT,VT<:CuArray} - return Dense{complex(ElT),CuVector{complex(ElT)}} -end - -CuArray(x::CuDense{ElT}) where {ElT} = CuVector{ElT}(data(x)) -function CuArray{ElT,N}(x::CuDenseTensor{ElT,N}) where {ElT,N} - return CuArray{ElT,N}(reshape(data(store(x)), dims(inds(x))...)) -end -CuArray(x::CuDenseTensor{ElT,N}) where {ElT,N} = CuArray{ElT,N}(x) - -*(D::Dense{T,AT}, x::S) where {T,AT<:CuArray,S<:Number} = Dense(x .* data(D)) - -Base.getindex(D::CuDense{<:Number}) = collect(data(D))[] -Base.getindex(D::CuDenseTensor{<:Number,0}) = store(D)[] -LinearAlgebra.norm(T::CuDenseTensor) = norm(data(store(T))) - -function Base.copyto!(R::CuDenseTensor{<:Number,N}, T::CuDenseTensor{<:Number,N}) where {N} - RA = array(R) - TA = array(T) - RA .= TA - return R -end - -# This is for type promotion for Scalar*Dense -function Base.promote_rule( - ::Type{<:Dense{ElT1,CuVector{ElT1}}}, ::Type{ElT2} -) where {ElT1,ElT2<:Number} - ElR = promote_type(ElT1, ElT2) - VecR = CuVector{ElR} - return Dense{ElR,VecR} -end - -function permutedims!!( - B::Tensor{ElT,N,StoreT,IndsB}, - A::Tensor{ElT,N,StoreT,IndsA}, - perm::NTuple{N,Int}, - f::Function=(r, t) -> permute!(r, t), -) where {N,ElT,IndsB,IndsA,StoreT<:CuDense{ElT}} - Ais = inds(A) - Bis = ITensors.NDTensors.permute(inds(A), perm) - B = f(B, A) - return B -end - -import ITensors.NDTensors: GemmBackend, auto_select_backend, _gemm! -function backend_cutensor() - return gemm_backend[] = :CUTENSOR -end -function backend_cublas() - return gemm_backend[] = :CUBLAS -end - -@inline function auto_select_backend( - ::Type{<:CuArray{<:BlasFloat}}, - ::Type{<:CuArray{<:BlasFloat}}, - ::Type{<:CuArray{<:BlasFloat}}, -) - return GemmBackend(:CUBLAS) -end - -@inline function auto_select_backend( - ::Type{<:CuArray{<:BlasFloat}}, ::Type{<:CuArray{<:BlasFloat}}, ::Type{<:AbstractVecOrMat} -) - return GemmBackend(:GenericCUDA) -end - -# CUBLAS matmul -function _gemm!( - ::GemmBackend{:CUBLAS}, - tA, - tB, - alpha, - A::AbstractVecOrMat, - B::AbstractVecOrMat, - beta, - C::AbstractVecOrMat, -) - return CUBLAS.gemm!(tA, tB, alpha, A, B, beta, C) -end - -# CUDA generic matmul -function _gemm!( - ::GemmBackend{:GenericCUDA}, - tA, - tB, - alpha, - A::AbstractVecOrMat, - B::AbstractVecOrMat, - beta, - C::CuDenseTensor, -) - C_dat = reshape(data(store(C)), size(C)) - A_ = tA == 'T' ? transpose(A) : A - B_ = tB == 'T' ? transpose(B) : B - C_dat = mul!(C_dat, A_, B_, alpha, beta) - copyto!(data(store(C)), C_dat) - return C -end - -function _contract_scalar!( - R::CuDenseTensor{ElR,NR}, - labelsR, - T₁::CuDenseTensor, - labelsT₁, - T₂::CuDenseTensor, - labelsT₂, - α=one(ElR), - β=zero(ElR), -) where {ElR,NR} - if nnz(T₁) == nnz(T₂) == 1 - new_R = Tensor(Dense(data(store(T₁)) .* data(store(T₂))), inds(R)) - copyto!(store(R), store(new_R)) - elseif nnz(T₁) == 1 - props = ContractionProperties(labelsT₁, labelsT₂, labelsR) - compute_contraction_properties!(props, T₁, T₂, R) - R = _contract!(R, T₁, T₂, props, α, β) - elseif nnz(T₂) == 1 - props = ContractionProperties(labelsT₁, labelsT₂, labelsR) - compute_contraction_properties!(props, T₁, T₂, R) - R = _contract!(R, T₁, T₂, props, α, β) - else - error("In _contract_scalar!, one tensor must be a scalar") - end - return R -end - -function _gemm_contract!( - CT::DenseTensor{El,NC}, - AT::DenseTensor{El,NA}, - BT::DenseTensor{El,NB}, - props::ContractionProperties, - α::Number=one(El), - β::Number=zero(El), -) where {El,NC,NA,NB} - # TODO: directly use Tensor instead of Array - C = array(CT) - A = array(AT) - B = array(BT) - - tA = 'N' - if props.permuteA - pA = NTuple{NA,Int}(props.PA) - Ap = permutedims(A, pA) - AM = reshape(Ap, props.dmid, props.dleft) - tA = 'T' - else - #A doesn't have to be permuted - if Atrans(props) - AM = reshape(A, props.dmid, props.dleft) - tA = 'T' - else - AM = reshape(A, props.dleft, props.dmid) - end - end - - tB = 'N' - if props.permuteB - pB = NTuple{NB,Int}(props.PB) - Bp = permutedims(B, pB) - BM = reshape(Bp, props.dmid, props.dright) - else - if Btrans(props) - BM = reshape(B, props.dright, props.dmid) - tB = 'T' - else - BM = reshape(B, props.dmid, props.dright) - end - end - - #TODO: this logic may be wrong - if props.permuteC - #Need to copy here since we will be permuting - #into C later - CM = reshape(copy(C), props.dleft, props.dright) - else - if Ctrans(props) - CM = reshape(C, props.dleft, props.dright) - (AM, BM) = (BM, AM) - if tA == tB - tA = tB = (tA == 'T' ? 'N' : 'T') - end - else - CM = reshape(C, props.dleft, props.dright) - end - end - - CM = CUBLAS.gemm!(tA, tB, El(α), AM, BM, El(β), CM) - - if props.permuteC - pC = NTuple{NC,Int}(props.PC) - Cr = reshape(CM, props.newCrange...) - @strided C .= permutedims(Cr, pC) - end - return C -end - -function _contract!( - CT::CuDenseTensor{El,NC}, - AT::CuDenseTensor{El,NA}, - BT::CuDenseTensor{El,NB}, - props::ContractionProperties, - α::Number=one(El), - β::Number=zero(El), -) where {El,NC,NA,NB} - if ndims(CT) > 12 || ndims(BT) > 12 || ndims(AT) > 12 - return _gemm_contract!(CT, AT, BT, props, α, β) - end - Ainds = inds(AT) - Adims = dims(Ainds) - Binds = inds(BT) - Bdims = dims(Binds) - Cinds = inds(CT) - Cdims = dims(Cinds) - Adata = reshape(data(store(AT)), Adims...) - Bdata = reshape(data(store(BT)), Bdims...) - Cdata = reshape(data(store(CT)), Cdims...) - contracted = commoninds(Ainds, Binds) - A_only = uniqueinds(Ainds, Binds) - B_only = uniqueinds(Binds, Ainds) - ind_dict = Vector{Index}() - for (idx, i) in enumerate(contracted) - push!(ind_dict, i) - end - if length(A_only) > 0 - for (idx, i) in enumerate(A_only) - push!(ind_dict, i) - end - end - if length(B_only) > 0 - for (idx, i) in enumerate(B_only) - push!(ind_dict, i) - end - end - ctainds = zeros(Int, length(Ainds)) - ctbinds = zeros(Int, length(Binds)) - ctcinds = zeros(Int, length(Cinds)) - for (ii, ia) in enumerate(Ainds) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Binds) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - for (ii, ic) in enumerate(Cinds) - ctcinds[ii] = findfirst(x -> x == ic, ind_dict) - end - id_op = cuTENSOR.CUTENSOR_OP_IDENTITY - dict_key = "" - for cc in zip(ctcinds, Cdims) - dict_key *= string(cc[1]) * "," * string(cc[2]) * "," - end - for aa in zip(ctainds, Adims) - dict_key *= string(aa[1]) * "," * string(aa[2]) * "," - end - for bb in zip(ctbinds, Bdims) - dict_key *= string(bb[1]) * "," * string(bb[2]) * "," - end - if haskey(ENV, "CUTENSOR_AUTOTUNE") && tryparse(Int, ENV["CUTENSOR_AUTOTUNE"]) == 1 - if haskey(ContractionPlans, dict_key) - dict_val = ContractionPlans[dict_key] - algo = dict_val - #plan = dict_val[2] - Cdata = cuTENSOR.contraction!( - α, - Adata, - Vector{Char}(ctainds), - id_op, - Bdata, - Vector{Char}(ctbinds), - id_op, - β, - Cdata, - Vector{Char}(ctcinds), - id_op, - id_op; - algo=algo, - ) - else - # loop through all algos - # pick the fastest one - # store that plan! - best_time = 1e6 - best_plan = nothing - best_algo = nothing - max_algos = Ref{Int32}(C_NULL) - cuTENSOR.cutensorContractionMaxAlgos(max_algos) - # fix once the other options are documented - #algos = collect(Cint(cuTENSOR.CUTENSOR_ALGO_GETT):Cint(max_algos[] - 1)) - algos = collect(Cint(cuTENSOR.CUTENSOR_ALGO_GETT):Cint(-1)) - for algo in reverse(algos) - try - Cdata, this_time, bytes, gctime, memallocs = @timed cuTENSOR.contraction!( - α, - Adata, - Vector{Char}(ctainds), - id_op, - Bdata, - Vector{Char}(ctbinds), - id_op, - β, - Cdata, - Vector{Char}(ctcinds), - id_op, - id_op; - algo=cuTENSOR.cutensorAlgo_t(algo), - ) - if this_time < best_time - best_time = this_time - #best_plan = this_plan - best_algo = cuTENSOR.cutensorAlgo_t(algo) - end - catch err - @warn "Algorithm $algo not supported" - end - end - ContractionPlans[dict_key] = best_algo - end - else - Cdata = cuTENSOR.contraction!( - α, - Adata, - Vector{Char}(ctainds), - id_op, - Bdata, - Vector{Char}(ctbinds), - id_op, - β, - Cdata, - Vector{Char}(ctcinds), - id_op, - id_op, - ) - end - return parent(Cdata) -end - -function Base.:+(B::CuDenseTensor, A::CuDenseTensor) - opC = cuTENSOR.CUTENSOR_OP_IDENTITY - opA = cuTENSOR.CUTENSOR_OP_IDENTITY - opAC = cuTENSOR.CUTENSOR_OP_ADD - Ais = inds(A) - Bis = inds(B) - ind_dict = Vector{Index}() - for (idx, i) in enumerate(inds(A)) - push!(ind_dict, i) - end - Adata = data(store(A)) - Bdata = data(store(B)) - reshapeBdata = reshape(Bdata, dims(Bis)...) - reshapeAdata = reshape(Adata, dims(Ais)...) - ctainds = zeros(Int, length(Ais)) - ctbinds = zeros(Int, length(Bis)) - for (ii, ia) in enumerate(Ais) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Bis) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - ctcinds = copy(ctbinds) - C = CUDA.zeros(eltype(Bdata), dims(Bis)...) - cuTENSOR.elementwiseBinary!( - one(eltype(Adata)), - reshapeAdata, - ctainds, - opA, - one(eltype(Bdata)), - reshapeBdata, - ctbinds, - opC, - C, - ctcinds, - opAC, - ) - copyto!(data(store(B)), vec(C)) - return B -end - -function Base.:+(B::CuDense, Bis::IndexSet, A::CuDense, Ais::IndexSet) - opA = cuTENSOR.CUTENSOR_OP_IDENTITY - opC = cuTENSOR.CUTENSOR_OP_IDENTITY - opAC = cuTENSOR.CUTENSOR_OP_ADD - ind_dict = Vector{Index}() - for (idx, i) in enumerate(Ais) - push!(ind_dict, i) - end - Adata = data(A) - Bdata = data(B) - reshapeBdata = reshape(Bdata, dims(Bis)...) - reshapeAdata = reshape(Adata, dims(Ais)...) - ctainds = zeros(Int, length(Ais)) - ctbinds = zeros(Int, length(Bis)) - for (ii, ia) in enumerate(Ais) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Bis) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - ctcinds = copy(ctbinds) - C = CUDA.zeros(eltype(Bdata), dims(Bis)...) - Cis = Bis - C = cuTENSOR.elementwiseBinary!( - 1, reshapeAdata, ctainds, opA, 1, reshapeBdata, ctbinds, opC, C, ctcinds, opAC - ) - copyto!(data(B), vec(C)) - return C -end - -function Base.:-(B::CuDenseTensor, A::CuDenseTensor) - opC = cuTENSOR.CUTENSOR_OP_IDENTITY - opA = cuTENSOR.CUTENSOR_OP_IDENTITY - opAC = cuTENSOR.CUTENSOR_OP_ADD - Ais = inds(A) - Bis = inds(B) - ind_dict = Vector{Index}() - for (idx, i) in enumerate(inds(A)) - push!(ind_dict, i) - end - Adata = data(store(A)) - Bdata = data(store(B)) - reshapeBdata = reshape(Bdata, dims(Bis)...) - reshapeAdata = reshape(Adata, dims(Ais)...) - ctainds = zeros(Int, length(Ais)) - ctbinds = zeros(Int, length(Bis)) - for (ii, ia) in enumerate(Ais) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Bis) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - ctcinds = copy(ctbinds) - C = CUDA.zeros(eltype(Bdata), dims(Bis)) - cuTENSOR.elementwiseBinary!( - -one(eltype(Adata)), - reshapeAdata, - ctainds, - opA, - one(eltype(Bdata)), - reshapeBdata, - ctbinds, - opC, - C, - ctcinds, - opAC, - ) - copyto!(data(store(B)), vec(C)) - return B -end - -function Base.:-(A::CuDense, Ais::IndexSet, B::CuDense, Bis::IndexSet) - opA = cuTENSOR.CUTENSOR_OP_IDENTITY - opC = cuTENSOR.CUTENSOR_OP_IDENTITY - opAC = cuTENSOR.CUTENSOR_OP_ADD - ind_dict = Vector{Index}() - for (idx, i) in enumerate(Ais) - push!(ind_dict, i) - end - Adata = data(A) - Bdata = data(B) - reshapeBdata = reshape(Bdata, dims(Bis)...) - reshapeAdata = reshape(Adata, dims(Ais)...) - ctainds = zeros(Int, length(Ais)) - ctbinds = zeros(Int, length(Bis)) - for (ii, ia) in enumerate(Ais) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Bis) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - ctcinds = copy(ctbinds) - C = CUDA.zeros(eltype(Bdata), dims(Bis)...) - Cis = Bis - C = cuTENSOR.elementwiseBinary!( - one(eltype(Adata)), - reshapeAdata, - ctainds, - opA, - -one(eltype(Bdata)), - reshapeBdata, - ctbinds, - opC, - C, - ctcinds, - opAC, - ) - copyto!(data(B), vec(C)) - return C -end - -function Base.permute!(B::CuDenseTensor, A::CuDenseTensor) - Ais = inds(A) - Bis = inds(B) - ind_dict = Vector{Index}() - for (idx, i) in enumerate(Ais) - push!(ind_dict, i) - end - Adata = data(store(A)) - Bdata = data(store(B)) - reshapeBdata = reshape(Bdata, dims(Bis)...) - reshapeAdata = reshape(Adata, dims(Ais)...) - if ndims(A) < 40 # use CUTENSOR - ctainds = zeros(Int, length(Ais)) - ctbinds = zeros(Int, length(Bis)) - for (ii, ia) in enumerate(Ais) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Bis) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - cuTENSOR.permutation!( - one(eltype(Adata)), - reshapeAdata, - Vector{Char}(ctainds), - reshapeBdata, - Vector{Char}(ctbinds), - ) - else # use GPUArrays - perm = Int[] - for aix in Ais - b_pos = findfirst(bix -> bix == aix, Bis) - push!(perm, b_pos) - end - @assert isperm(perm) - permutedims!(reshapeBdata, reshapeAdata, invperm(perm)) - end - return Tensor(Dense(vec(reshapeBdata)), inds(B)) -end - -function Base.permute!(B::CuDense, Bis::IndexSet, A::CuDense, Ais::IndexSet) - ind_dict = Vector{Index}() - for (idx, i) in enumerate(Ais) - push!(ind_dict, i) - end - Adata = data(A) - Bdata = data(B) - reshapeBdata = reshape(Bdata, dims(Bis)...) - reshapeAdata = reshape(Adata, dims(Ais)...) - ctainds = zeros(Int, length(Ais)) - ctbinds = zeros(Int, length(Bis)) - for (ii, ia) in enumerate(Ais) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Bis) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - - cuTENSOR.permutation!( - one(eltype(Adata)), - reshapeAdata, - Vector{Char}(ctainds), - reshapeBdata, - Vector{Char}(ctbinds), - ) - return Tensor(Dense(reshapeBdata), Tuple(Bis)) -end - -Base.:/(A::CuDenseTensor, x::Number) = A * inv(x) diff --git a/ITensorGPU/src/tensor/cudiag.jl b/ITensorGPU/src/tensor/cudiag.jl deleted file mode 100644 index 0e27bebd67..0000000000 --- a/ITensorGPU/src/tensor/cudiag.jl +++ /dev/null @@ -1,228 +0,0 @@ -export CuDiag - -const CuDiag{ElT,VecT} = Diag{ElT,VecT} where {VecT<:CuArray{ElT}} -const NonuniformCuDiagTensor{ElT,N,StoreT,IndsT} = - Tensor{ElT,N,StoreT,IndsT} where {StoreT<:CuDiag} - -CuArray(D::NonuniformCuDiagTensor) = CuArray(dense(D)) - -function NDTensors.dense(T::NonuniformCuDiagTensor{ElT}) where {ElT} - R_data = CUDA.zeros(ElT, dim(inds(T))) - diag_inds = diagind(reshape(R_data, dims(inds(T))), 0) - R_data[diag_inds] .= data(store(T)) - return Tensor(Dense(R_data), inds(T)) -end - -function Base.promote_rule( - ::Type{Diag{ElT2,VecT2}}, ::Type{CuDense} -) where {ElT2,VecT2<:Number} - return promote_type(DenseT1, ElT2) -end - -function Base.promote_rule( - ::Type{<:Tensor{ElT1,N1,StoreT1}}, ::Type{<:Tensor{ElT2,N2,StoreT2}} -) where {ElT1,ElT2,N1,N2,StoreT1<:CuDense,StoreT2<:UniformDiag} - ElT3 = promote_type(ElT1, ElT2) - return Tensor{promote_type(ElT1, ElT2),N3,CuDense{ElT3,CuVector{ElT3}}} where {N3} -end -function Base.promote_rule( - ::Type{<:Tensor{ElT1,N1,StoreT1}}, ::Type{<:Tensor{ElT2,N2,StoreT2}} -) where {ElT1,ElT2,N1,N2,StoreT1<:UniformDiag,StoreT2<:CuDense} - ElT3 = promote_type(ElT1, ElT2) - return Tensor{promote_type(ElT1, ElT2),N3,CuDense{ElT3,CuVector{ElT3}}} where {N3} -end - -function Base.promote_rule( - ::Type{<:UniformDiag{ElT1}}, ::Type{<:NonuniformDiag{ElT2,VecT2}} -) where {ElT1,ElT2,VecT2<:CuArray} - ElT3 = promote_type(ElT1, ElT2) - return NonuniformDiag{ElT3,CuVector{ElT3}} -end -function Base.promote_rule( - ::Type{<:NonuniformDiag{ElT2,VecT2}}, ::Type{<:UniformDiag{ElT1}} -) where {ElT1,ElT2,VecT2<:CuArray} - ElT3 = promote_type(ElT1, ElT2) - return NonuniformDiag{ElT3,CuVector{ElT3}} -end -function Base.promote_rule( - ::Type{DenseT1}, ::Type{Diag{ElT2,VecT2}} -) where {DenseT1<:CuDense,ElT2,VecT2<:Number} - return promote_type(DenseT1, ElT2) -end - -function contraction_output_type( - TensorT1::Type{<:NonuniformCuDiagTensor}, TensorT2::Type{<:CuDenseTensor}, IndsR -) - return similartype(promote_type(TensorT1, TensorT2), IndsR) -end -function contraction_output_type( - TensorT1::Type{<:CuDenseTensor}, TensorT2::Type{<:NonuniformCuDiagTensor}, IndsR -) - return contraction_output_type(TensorT2, TensorT1, IndsR) -end - -function contraction_output_type( - TensorT1::Type{<:DiagTensor{<:Number,<:CuDiag}}, - TensorT2::Type{<:DiagTensor{<:Number,<:CuDiag}}, - IndsR::Type, -) - return similartype(promote_type(TensorT1, TensorT2), IndsR) -end - -function contraction_output_type( - TensorT1::Type{<:UniformDiagTensor}, - TensorT2::Type{<:DiagTensor{<:Number,<:CuDiag}}, - IndsR::Type, -) - return similartype(promote_type(TensorT1, TensorT2), IndsR) -end -function contraction_output_type( - TensorT1::Type{<:DiagTensor{<:Number,<:CuDiag}}, - TensorT2::Type{<:UniformDiagTensor}, - IndsR::Type, -) - return contraction_output_type(TensorT2, TensorT1, IndsR) -end - -function zero_contraction_output( - T1::UniformDiagTensor{ElT1,N1}, T2::CuDenseTensor{ElT2,N2}, indsR::IndsR -) where {ElT1,N1,ElT2,N2,IndsR} - ElT3 = promote_type(ElT1, ElT2) - dat = CUDA.zeros(ElT3, dim(indsR)) - return Tensor(Dense(dat), indsR) -end -function zero_contraction_output( - T2::CuDenseTensor{ElT2,N2}, T1::UniformDiagTensor{ElT1,N1}, indsR::IndsR -) where {ElT1,N1,ElT2,N2,IndsR} - return zero_contraction_output(T1, T2, indsR) -end - -function zero_contraction_output( - T1::TensorT1, T2::TensorT2, indsR -) where {TensorT1<:NonuniformDiagTensor,TensorT2<:NonuniformCuDiagTensor} - ElT3 = promote_type(eltype(TensorT1), eltype(TensorT2)) - dat = CUDA.zeros(ElT3, length(data(store(T2)))) - return Tensor(Diag(dat), indsR) -end - -function zero_contraction_output( - T1::TensorT1, T2::TensorT2, indsR -) where {TensorT1<:UniformDiagTensor,TensorT2<:NonuniformCuDiagTensor} - ElT3 = promote_type(eltype(TensorT1), eltype(TensorT2)) - dat = CUDA.zeros(ElT3, length(data(store(T2)))) - return Tensor(Diag(dat), indsR) -end -function zero_contraction_output( - T1::TensorT1, T2::TensorT2, indsR -) where {TensorT2<:UniformDiagTensor,TensorT1<:NonuniformCuDiagTensor} - return zero_contraction_output(T2, T1, indsR) -end - -function zero_contraction_output( - T1::TensorT1, T2::TensorT2, indsR -) where {TensorT1<:DiagTensor,TensorT2<:CuDenseTensor} - ElT3 = promote_type(eltype(TensorT1), eltype(TensorT2)) - dat = CUDA.zeros(ElT3, length(data(store(T2)))) - return Tensor(Dense(dat), indsR) -end -function zero_contraction_output( - T1::TensorT1, T2::TensorT2, indsR -) where {TensorT2<:DiagTensor,TensorT1<:CuDenseTensor} - return zero_contraction_output(T2, T1, indsR) -end - -function contraction_output( - T1::UniformDiagTensor, T2::DiagTensor{Elt2,<:CuDiag}, indsR -) where {Elt2} - return zero_contraction_output(T1, T2, indsR) -end -function contraction_output( - T1::DiagTensor{Elt1,<:CuDiag}, T2::UniformDiagTensor, indsR -) where {Elt1} - return contraction_output(T2, T1, indsR) -end - -function contract!( - C::CuDenseTensor{<:Number,NC}, - Clabels, - A::UniformDiagTensor{<:Number,NA}, - Alabels, - B::CuDenseTensor{<:Number,NB}, - Blabels, -) where {NC,NA,NB} - Bstore = data(store(B)) - Astore = data(store(A)) - Cstore = data(store(C)) - return copyto!(Cstore, Astore .* Bstore) -end - -function contract!( - C::CuDenseTensor{<:Number,NC}, - Clabels, - A::CuDenseTensor{<:Number,NA}, - Alabels, - B::UniformDiagTensor{<:Number,NB}, - Blabels, -) where {NC,NA,NB} - return contract!(C, Clabels, B, Blabels, A, Alabels) -end - -function contract!( - C::NonuniformCuDiagTensor{EltC,NC,IndsC}, - Clabels, - A::UniformDiagTensor{EltA,NA,IndsA}, - Alabels, - B::NonuniformCuDiagTensor{EltB,NB,IndsB}, - Blabels, -) where {EltC<:Number,EltB<:Number,EltA<:Number,NC,NB,NA,IndsA,IndsB,IndsC} - Bstore = data(store(B)) - Astore = data(store(A)) - Cstore = data(store(C)) - return copyto!(Cstore, Astore .* Bstore) -end - -function contract!( - C::NonuniformCuDiagTensor{EltC,NC,IndsC}, - Clabels, - B::NonuniformCuDiagTensor{EltB,NB,IndsB}, - Blabels, - A::UniformDiagTensor{EltA,NA,IndsA}, - Alabels, -) where {EltC<:Number,EltB<:Number,EltA<:Number,NC,NB,NA,IndsA,IndsB,IndsC} - Bstore = data(store(B)) - Astore = data(store(A)) - Cstore = data(store(C)) - return copyto!(Cstore, Astore .* Bstore) -end - -function contract!( - C::NonuniformCuDiagTensor{EltC,NC,IndsC}, - Clabels, - B::NonuniformCuDiagTensor{EltB,NB,IndsB}, - Blabels, - A::NonuniformCuDiagTensor{EltA,NA,IndsA}, - Alabels, -) where {EltC<:Number,EltB<:Number,EltA<:Number,NC,NB,NA,IndsA,IndsB,IndsC} - Bstore = data(store(B)) - Astore = data(store(A)) - Cstore = data(store(C)) - return copyto!(Cstore, Astore .* Bstore) -end - -# Dense * NonuniformCuDiag -function contract!( - C::CuDenseTensor, Clabels, A::NonuniformCuDiagTensor, Alabels, B::CuDenseTensor, Blabels -) - Astore = data(store(A)) - newAstore = CUDA.zeros(eltype(A), dims(inds(A))[1], dims(inds(A))[2]) - adi = diagind(newAstore, 0) - newAstore[adi] .= Astore[:] - newA = Tensor(Dense(vec(newAstore)), inds(A)) - return contract!(C, Clabels, newA, Alabels, B, Blabels) -end - -function contract!( - C::CuDenseTensor, Clabels, A::CuDenseTensor, Alabels, B::NonuniformCuDiagTensor, Blabels -) - return contract!(C, Clabels, B, Blabels, A, Alabels) -end diff --git a/ITensorGPU/src/tensor/culinearalgebra.jl b/ITensorGPU/src/tensor/culinearalgebra.jl deleted file mode 100644 index c64a3b06d3..0000000000 --- a/ITensorGPU/src/tensor/culinearalgebra.jl +++ /dev/null @@ -1,159 +0,0 @@ - -# -# Linear Algebra of order 2 Tensors -# -# Even though CuDenseTensor{_,2} is strided -# and passable to BLAS/LAPACK, it cannot -# be made <: StridedArray - -function Base.:*( - T1::Tensor{ElT1,2,StoreT1,IndsT1}, T2::Tensor{ElT2,2,StoreT2,IndsT2} -) where {ElT1,StoreT1<:CuDense,IndsT1,ElT2,StoreT2<:CuDense,IndsT2} - RM = matrix(T1) * matrix(T2) - indsR = IndsT1(ind(T1, 1), ind(T2, 2)) - pT = promote_type(ElT1, ElT2) - return tensor(Dense(vec(RM)), indsR) -end -#= FIX ME -function LinearAlgebra.exp(T::CuDenseTensor{ElT,2}) where {ElT,IndsT} - expTM = exp(matrix(T)) - return tensor(Dense(vec(expTM)),inds(T)) -end - -function expHermitian(T::CuDenseTensor{ElT,2}) where {ElT,IndsT} - # exp(::Hermitian/Symmetric) returns Hermitian/Symmetric, - # so extract the parent matrix - expTM = parent(exp(Hermitian(matrix(T)))) - return tensor(Dense(vec(expTM)),inds(T)) -end -=# - -# svd of an order-2 tensor -function LinearAlgebra.svd(T::CuDenseTensor{ElT,2,IndsT}; kwargs...) where {ElT,IndsT} - maxdim::Int = get(kwargs, :maxdim, minimum(dims(T))) - mindim::Int = get(kwargs, :mindim, 1) - cutoff::Float64 = get(kwargs, :cutoff, 0.0) - absoluteCutoff::Bool = get(kwargs, :absoluteCutoff, false) - doRelCutoff::Bool = get(kwargs, :doRelCutoff, true) - fastSVD::Bool = get(kwargs, :fastSVD, false) - # Safer to use `Array`, which ensures - # no views/aliases are made, since - # we are using in-place `CUSOLVER.svd!` below. - aT = Array(T) - @timeit "CUSOLVER svd" begin - MU, MS, MV = CUSOLVER.svd!(aT) - end - if !(MV isa CuMatrix) - # Materialize any array wrappers, - # for now, since `Adjoint` wrappers - # seem to cause issues throughout - # CUDA.jl, for example with slicing, - # reshaping and then copying, etc. - # TODO: Fix this in a more robust way. - MV = copy(MV) - end - # for consistency with cpu version, - # ITensors.jl/NDTensors/src/linearalgebra.jl/svd - # need conj!(MV) - conj!(MV) - P = MS .^ 2 - truncerr, docut, P = truncate!( - P; - mindim=mindim, - maxdim=maxdim, - cutoff=cutoff, - absoluteCutoff=absoluteCutoff, - doRelCutoff=doRelCutoff, - ) - spec = Spectrum(P, truncerr) - dS = length(P) - if dS < length(MS) - MU = MU[:, 1:dS] - MS = MS[1:dS] - MV = MV[:, 1:dS] - end - - # Make the new indices to go onto U and V - u = eltype(IndsT)(dS) - v = eltype(IndsT)(dS) - Uinds = IndsT((ind(T, 1), u)) - Sinds = IndsT((u, v)) - Vinds = IndsT((ind(T, 2), v)) - U = tensor(Dense(vec(MU)), Uinds) - Sdata = CUDA.zeros(ElT, dS * dS) - dsi = diagind(reshape(Sdata, dS, dS), 0) - Sdata[dsi] = MS - S = tensor(Dense(Sdata), Sinds) - V = tensor(Dense(vec(MV)), Vinds) - return U, S, V, spec -end - -function LinearAlgebra.eigen( - T::Hermitian{ElT,<:CuDenseTensor{ElT,2,IndsT}}; kwargs... -) where {ElT<:Union{Real,Complex},IndsT} - ispossemidef::Bool = get(kwargs, :ispossemidef, false) - maxdim::Int = get(kwargs, :maxdim, minimum(dims(T))) - mindim::Int = get(kwargs, :mindim, 1) - cutoff::Float64 = get(kwargs, :cutoff, 0.0) - absoluteCutoff::Bool = get(kwargs, :absoluteCutoff, false) - doRelCutoff::Bool = get(kwargs, :doRelCutoff, true) - @timeit "CUSOLVER eigen" begin - local DM, UM - if ElT <: Complex - DM, UM = CUSOLVER.heevd!('V', 'U', matrix(parent(T))) - else - DM, UM = CUSOLVER.syevd!('V', 'U', matrix(parent(T))) - end - end - DM_ = reverse(DM) - @timeit "truncate" begin - truncerr, docut, DM = truncate!( - DM_; - maxdim=maxdim, - cutoff=cutoff, - absoluteCutoff=absoluteCutoff, - doRelCutoff=doRelCutoff, - ) - end - spec = Spectrum(DM, truncerr) - dD = length(DM) - dV = reverse(UM; dims=2) - if dD < size(dV, 2) - dV = CuMatrix(dV[:, 1:dD]) - end - # Make the new indices to go onto U and V - l = eltype(IndsT)(dD) - r = eltype(IndsT)(dD) - Vinds = IndsT((dag(ind(T, 2)), dag(r))) - Dinds = IndsT((l, dag(r))) - U = tensor(Dense(vec(dV)), Vinds) - D = tensor(Diag(real.(DM)), Dinds) - return D, U, spec -end - -function LinearAlgebra.qr(T::CuDenseTensor{ElT,2,IndsT}; kwargs...) where {ElT,IndsT} - QM, RM = qr(matrix(T)) - # Make the new indices to go onto Q and R - q, r = inds(T) - q = dim(q) < dim(r) ? sim(q) : sim(r) - Qinds = IndsT((ind(T, 1), q)) - Rinds = IndsT((q, ind(T, 2))) - QM = CuMatrix(QM) - Q = tensor(Dense(vec(QM)), Qinds) - R = tensor(Dense(vec(RM)), Rinds) - return Q, R -end - -function polar(T::CuDenseTensor{ElT,2,IndsT}) where {ElT,IndsT} - QM, RM = polar(matrix(T)) - dim = size(QM, 2) - # Make the new indices to go onto Q and R - q = eltype(IndsT)(dim) - # TODO: use push/pushfirst instead of a constructor - # call here - Qinds = IndsT((ind(T, 1), q)) - Rinds = IndsT((q, ind(T, 2))) - Q = tensor(Dense(vec(QM)), Qinds) - R = tensor(Dense(vec(RM)), Rinds) - return Q, R -end diff --git a/ITensorGPU/src/tensor/cutruncate.jl b/ITensorGPU/src/tensor/cutruncate.jl deleted file mode 100644 index 108bc1e0be..0000000000 --- a/ITensorGPU/src/tensor/cutruncate.jl +++ /dev/null @@ -1,87 +0,0 @@ -import LinearAlgebra: BlasReal - -function truncate!(P::CuVector{T}; kwargs...)::Tuple{T,T,CuVector{T}} where {T<:BlasReal} - maxdim::Int = min(get(kwargs, :maxdim, length(P)), length(P)) - mindim::Int = min(get(kwargs, :mindim, 1), maxdim) - cutoff::Float64 = get(kwargs, :cutoff, 0.0) - absoluteCutoff::Bool = get(kwargs, :absoluteCutoff, false) - doRelCutoff::Bool = get(kwargs, :doRelCutoff, true) - origm = length(P) - docut = zero(T) - - maxP = maximum(P) - if maxP == zero(T) - P = CUDA.zeros(T, 1) - return zero(T), zero(T), P - end - if origm == 1 - docut = maxP / 2 - return zero(T), docut, P[1:1] - end - @timeit "setup rP" begin - #Zero out any negative weight - #neg_z_f = (!signbit(x) ? x : 0.0) - rP = map(x -> !signbit(x) ? Float64(x) : 0.0, P) - n = origm - end - @timeit "handle cutoff" begin - if absoluteCutoff - #Test if individual prob. weights fall below cutoff - #rather than using *sum* of discarded weights - sub_arr = rP .- Float64(cutoff) - err_rP = sub_arr ./ abs.(sub_arr) - flags = reinterpret(Float64, (signbit.(err_rP) .<< 1 .& 2) .<< 61) - cut_ind = CUDA.CUBLAS.iamax(length(err_rP), err_rP .* flags) - 1 - if cut_ind > 0 - n = min(maxdim, cut_ind) - n = max(n, mindim) - else - n = maxdim - end - truncerr = T(sum(rP[(n + 1):end])) - else - truncerr = zero(T) - scale = one(T) - @timeit "find scale" begin - if doRelCutoff - scale = sum(P) - scale = scale > zero(T) ? scale : one(T) - end - end - #Truncating until *sum* of discarded probability - #weight reaches cutoff reached (or m==mindim) - csum_rp = Float64.(CUDA.reverse(CUDA.cumsum(CUDA.reverse(rP)))) - sub_arr = csum_rp .- Float64(cutoff * scale) - err_rP = sub_arr ./ abs.(sub_arr) - flags = reinterpret(Float64, (signbit.(err_rP) .<< 1 .& 2) .<< 61) - cut_ind = (CUDA.CUBLAS.iamax(length(err_rP), err_rP .* flags) - 1) - if cut_ind > 0 - n = min(maxdim, cut_ind) - n = max(n, mindim) - else - n = maxdim - end - truncerr = sum(rP[(n + 1):end]) - if scale == zero(T) - truncerr = zero(T) - else - truncerr /= scale - end - end - end - if n < 1 - n = 1 - end - if n < origm - hP = collect(P) - docut = (hP[n] + hP[n + 1]) / 2 - if abs(hP[n] - hP[n + 1]) < 1E-3 * hP[n] - docut += T(1E-3) * hP[n] - end - end - @timeit "setup return" begin - rinds = 1:n - rrP = P[rinds] - end - return truncerr, docut, rrP -end diff --git a/ITensorGPU/src/tensor/dense.jl b/ITensorGPU/src/tensor/dense.jl deleted file mode 100644 index 04e1cb8ac6..0000000000 --- a/ITensorGPU/src/tensor/dense.jl +++ /dev/null @@ -1,285 +0,0 @@ -function contract!!( - R::DenseTensor{<:Number,NR}, - labelsR::NTuple{NR}, - T1::DenseTensor{<:Number,N1}, - labelsT1::NTuple{N1}, - T2::DenseTensor{<:Number,N2}, - labelsT2::NTuple{N2}, - α::Number=1, - β::Number=0, -) where {NR,N1,N2} - if N1 == 0 - (α ≠ 1 || β ≠ 0) && - error("contract!! not yet implemented for scalar ITensor with non-trivial α and β") - # TODO: replace with an add! function? - # What about doing `R .= T1[] .* PermutedDimsArray(T2,perm)`? - perm = getperm(labelsR, labelsT2) - R = permutedims!!(R, T2, perm, (r, t2) -> T1[] * t2) - elseif N2 == 0 - (α ≠ 1 || β ≠ 0) && - error("contract!! not yet implemented for scalar ITensor with non-trivial α and β") - perm = getperm(labelsR, labelsT1) - R = permutedims!!(R, T1, perm, (r, t1) -> T2[] * t1) - elseif N1 + N2 == NR - (α ≠ 1 || β ≠ 0) && error( - "contract!! not yet implemented for outer product tensor contraction with non-trivial α and β", - ) - # TODO: permute T1 and T2 appropriately first (can be more efficient - # then permuting the result of T1⊗T2) - # TODO: implement the in-place version directly - R = outer!!(R, T1, T2) - labelsRp = (labelsT1..., labelsT2...) - perm = getperm(labelsR, labelsRp) - if !is_trivial_permutation(perm) - R = permutedims!!(R, copy(R), perm) - end - else - #if dim(T1) > 2^13 && dim(T2) > 2^13 - # R = _big_contract!!(R,labelsR,T1,labelsT1,T2,labelsT2, α, β) - #else - if α ≠ 1 || β ≠ 0 - R = _contract!!(R, labelsR, T1, labelsT1, T2, labelsT2, α, β) - else - R = _contract!!(R, labelsR, T1, labelsT1, T2, labelsT2) - end - #end - end - return R -end - -function _big_contract!!( - R::DenseTensor{<:Number,NR}, - labelsR, - T1::DenseTensor{ElT1,N1}, - labelsT1, - T2::DenseTensor{ElT2,N2}, - labelsT2, - α::Number=1, - β::Number=0, -) where {ElT1,ElT2,N1,N2,NR} - props = ContractionProperties(labelsT1, labelsT2, labelsR) - compute_contraction_properties!(props, T1, T2, R) - _big_contract!(R, T1, T2, props, α, β) - #val, t, _ = @timed _blasmg_contract!(R,T1,T2,props,α,β) - return R -end - -function _big_contract!( - CT::DenseTensor{El,NC}, - AT::DenseTensor{El,NA}, - BT::DenseTensor{El,NB}, - props::ContractionProperties, - α::Number=one(El), - β::Number=zero(El), -) where {El,NC,NA,NB} - Ainds = inds(AT) - Adims = dims(Ainds) - Binds = inds(BT) - Bdims = dims(Binds) - Cinds = inds(CT) - Cdims = dims(Cinds) - Adata = reshape(data(store(AT)), Adims) - Bdata = reshape(data(store(BT)), Bdims) - Cdata = reshape(data(store(CT)), Cdims) - contracted = commoninds(Ainds, Binds) - A_only = uniqueinds(Ainds, Binds) - B_only = uniqueinds(Binds, Ainds) - ind_dict = Vector{Index}() - for (idx, i) in enumerate(contracted) - push!(ind_dict, i) - end - if length(A_only) > 0 - for (idx, i) in enumerate(A_only) - push!(ind_dict, i) - end - end - if length(B_only) > 0 - for (idx, i) in enumerate(B_only) - push!(ind_dict, i) - end - end - ctainds = zeros(Int, length(Ainds)) - ctbinds = zeros(Int, length(Binds)) - ctcinds = zeros(Int, length(Cinds)) - for (ii, ia) in enumerate(Ainds) - ctainds[ii] = findfirst(x -> x == ia, ind_dict) - end - for (ii, ib) in enumerate(Binds) - ctbinds[ii] = findfirst(x -> x == ib, ind_dict) - end - for (ii, ic) in enumerate(Cinds) - ctcinds[ii] = findfirst(x -> x == ic, ind_dict) - end - id_op = cuTENSOR.CUTENSOR_OP_IDENTITY - dict_key = "" - for cc in zip(ctcinds, Cdims) - dict_key *= string(cc[1]) * "," * string(cc[2]) * "," - end - for aa in zip(ctainds, Adims) - dict_key *= string(aa[1]) * "," * string(aa[2]) * "," - end - for bb in zip(ctbinds, Bdims) - dict_key *= string(bb[1]) * "," * string(bb[2]) * "," - end - #=synchronize() - if haskey(ENV, "CUTENSOR_AUTOTUNE") && tryparse(Int, ENV["CUTENSOR_AUTOTUNE"]) == 1 - if haskey(ContractionPlans, dict_key) - dict_val = ContractionPlans[dict_key] - algo = dict_val - Cdata = cuTENSOR.contraction!(α, Adata, Vector{Char}(ctainds), id_op, Bdata, Vector{Char}(ctbinds), id_op, β, Cdata, Vector{Char}(ctcinds), id_op, id_op; algo=algo) - synchronize() - else - # loop through all algos - # pick the fastest one - # store that plan! - best_time = 1e6 - best_plan = nothing - best_algo = nothing - max_algos = Ref{Int32}(C_NULL) - cuTENSOR.cutensorContractionMaxAlgos(max_algos) - # fix once the other options are documented - #algos = collect(Cint(cuTENSOR.CUTENSOR_ALGO_GETT):Cint(max_algos[] - 1)) - algos = collect(Cint(cuTENSOR.CUTENSOR_ALGO_GETT):Cint(-1)) - for algo in reverse(algos) - try - Cdata, this_time, bytes, gctime, memallocs = @timed cuTENSOR.contraction!(α, Adata, Vector{Char}(ctainds), id_op, Bdata, Vector{Char}(ctbinds), id_op, β, Cdata, Vector{Char}(ctcinds), id_op, id_op; algo=cuTENSOR.cutensorAlgo_t(algo)) - synchronize() - if this_time < best_time - best_time = this_time - best_algo = cuTENSOR.cutensorAlgo_t(algo) - end - catch err - @warn "Algorithm $algo not supported" - end - end - ContractionPlans[dict_key] = best_algo - end - else - =# - Cdata .= zero(eltype(Cdata)) - #@show size(Adata) - #@show size(Bdata) - #@show size(Cdata) - @assert !any(isnan.(Adata)) - @assert !any(isnan.(Bdata)) - @assert !any(isnan.(Cdata)) - #@show ctainds - #@show ctbinds - #@show ctcinds - #flush(stdout) - CUDA.Mem.pin(Adata) - CUDA.Mem.pin(Bdata) - CUDA.Mem.pin(Cdata) - synchronize() - #AC = CuArray(Adata) - #BC = CuArray(Bdata) - #CC = CuArray(Cdata) - @assert !any(isnan.(Adata)) - @assert !any(isnan.(Bdata)) - @assert !any(isnan.(Cdata)) - #@assert !any(isnan.(AC)) - #@assert !any(isnan.(BC)) - #@assert !any(isnan.(CC)) - #CC = cuTENSOR.contraction!(α, AC, ctainds, id_op, BC, ctbinds, id_op, β, CC, ctcinds, id_op, id_op) - #synchronize() - #@assert !any(isnan.(AC)) - #@assert !any(isnan.(BC)) - #@assert !any(isnan.(CC)) - Cdata = cuTENSOR.contraction!( - α, Adata, ctainds, id_op, Bdata, ctbinds, id_op, β, Cdata, ctcinds, id_op, id_op - ) - synchronize() - #end - #CCh = collect(CC) - #@assert !any(isnan.(CCh)) - #Cdata .= CCh - @assert !any(isnan.(Adata)) - @assert !any(isnan.(Bdata)) - @assert !any(isnan.(Cdata)) - return parent(Cdata) -end - -function _blasmg_contract!( - CT::DenseTensor{El,NC}, - AT::DenseTensor{El,NA}, - BT::DenseTensor{El,NB}, - props::ContractionProperties, - α::Number=one(El), - β::Number=zero(El), -) where {El,NC,NA,NB} - # TODO: directly use Tensor instead of Array - C = array(CT) - A = array(AT) - B = array(BT) - - tA = 'N' - if props.permuteA - pA = NTuple{NA,Int}(props.PA) - @strided Ap = permutedims(A, pA) - AM = reshape(Ap, props.dmid, props.dleft) - tA = 'T' - else - #A doesn't have to be permuted - if Atrans(props) - AM = reshape(A, props.dmid, props.dleft) - tA = 'T' - else - AM = reshape(A, props.dleft, props.dmid) - end - end - - tB = 'N' - if props.permuteB - pB = NTuple{NB,Int}(props.PB) - @strided Bp = permutedims(B, pB) - BM = reshape(Bp, props.dmid, props.dright) - else - if Btrans(props) - BM = reshape(B, props.dright, props.dmid) - tB = 'T' - else - BM = reshape(B, props.dmid, props.dright) - end - end - - # TODO: this logic may be wrong - if props.permuteC - # Need to copy here since we will be permuting - # into C later - CM = reshape(copy(C), props.dleft, props.dright) - else - if Ctrans(props) - CM = reshape(C, props.dleft, props.dright) - (AM, BM) = (BM, AM) - if tA == tB - tA = tB = (tA == 'T' ? 'N' : 'T') - end - else - CM = reshape(C, props.dleft, props.dright) - end - end - - if length(AM) > 4096 && length(BM) > 4096 && length(CM) > 4096 - CM = CUBLASMG.mg_gemm!( - tA, - tB, - El(α), - AM, - BM, - El(β), - CM; - devs=devs[], - dev_rows=dev_rows[], - dev_cols=dev_cols[], - ) - else - BLAS.gemm!(tA, tB, El(α), AM, BM, El(β), CM) - end - - if props.permuteC - pC = NTuple{NC,Int}(props.PC) - Cr = reshape(CM, props.newCrange...) - @strided C .= permutedims(Cr, pC) - end - return C -end diff --git a/ITensorGPU/src/traits.jl b/ITensorGPU/src/traits.jl deleted file mode 100644 index 6589298607..0000000000 --- a/ITensorGPU/src/traits.jl +++ /dev/null @@ -1,51 +0,0 @@ -# Trait type indicating the object is either on CPU -# or on a CUDA device (for example a type that doesn't -# have any data, like a Combiner or uniform Diagonal -# tensor). -struct CPUorCUDA end - -is_cu(::Type{<:Number}) = CPUorCUDA() -is_cu(::Type{NDTensors.NoData}) = CPUorCUDA() -is_cu(::Type{<:Array}) = false -is_cu(::Type{<:CuArray}) = true - -# Handle Array wrappers like `ReshapedArray`. -@traitfn function is_cu(arraytype::Type{T}) where {T; IsWrappedArray{T}} - return is_cu(parenttype(arraytype)) -end - -is_cu(X::Type{<:TensorStorage}) = is_cu(NDTensors.datatype(X)) -is_cu(X::Type{<:Tensor}) = is_cu(NDTensors.storagetype(X)) -is_cu(::Type{ITensor}) = error("Unknown") - -is_cu(x::CuArray) = is_cu(typeof(x)) -is_cu(x::Array) = is_cu(typeof(x)) - -is_cu(x::TensorStorage) = is_cu(typeof(x)) -is_cu(x::Tensor) = is_cu(typeof(x)) -is_cu(x::ITensor) = is_cu(typeof(tensor(x))) -is_cu(x::MPS) = all(is_cu, x) -is_cu(x::MPO) = all(is_cu, x) - -mixed_cu_cpu(::Bool, ::CPUorCUDA) = false -mixed_cu_cpu(::CPUorCUDA, ::Bool) = false -mixed_cu_cpu(::CPUorCUDA, ::CPUorCUDA) = false -mixed_cu_cpu(is_cu1::Bool, is_cu2::Bool) = (is_cu1 ⊻ is_cu2) -mixed_cu_cpu(T1::Type, T2::Type) = mixed_cu_cpu(is_cu(T1), is_cu(T2)) - -@traitdef MixedCuCPU{T1,T2} - -#! format: off -@traitimpl MixedCuCPU{T1,T2} <- mixed_cu_cpu(T1, T2) -#! format: on - -@traitfn function can_contract( - ::Type{T1}, ::Type{T2} -) where {T1<:TensorStorage,T2<:TensorStorage;!MixedCuCPU{T1,T2}} - return true -end -@traitfn function can_contract( - ::Type{T1}, ::Type{T2} -) where {T1<:TensorStorage,T2<:TensorStorage;MixedCuCPU{T1,T2}} - return false -end diff --git a/ITensorGPU/test/Project.toml b/ITensorGPU/test/Project.toml deleted file mode 100644 index a3d2e41464..0000000000 --- a/ITensorGPU/test/Project.toml +++ /dev/null @@ -1,7 +0,0 @@ -[deps] -Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/ITensorGPU/test/runtests.jl b/ITensorGPU/test/runtests.jl deleted file mode 100644 index 71a592139e..0000000000 --- a/ITensorGPU/test/runtests.jl +++ /dev/null @@ -1,30 +0,0 @@ -if VERSION < v"1.8" && "@v#.#" ∉ LOAD_PATH - push!(LOAD_PATH, "@v#.#") -end - -using ITensorGPU, Test, CUDA - -println("Running ITensorGPU tests with a runtime CUDA version: $(CUDA.runtime_version())") - -CUDA.allowscalar(false) -@testset "ITensorGPU.jl" begin - #@testset "$filename" for filename in ("test_cucontract.jl",) - # println("Running $filename with autotune") - # cmd = `$(Base.julia_cmd()) -e 'using Pkg; Pkg.activate(".."); Pkg.instantiate(); include("test_cucontract.jl")'` - # run(pipeline(setenv(cmd, "CUTENSOR_AUTOTUNE" => 1); stdout=stdout, stderr=stderr)) - #end - @testset "$filename" for filename in ( - "test_dmrg.jl", - "test_cuitensor.jl", - "test_cudiag.jl", - "test_cudense.jl", - "test_cucontract.jl", - "test_cumpo.jl", - "test_cumps.jl", - "test_cutruncate.jl", - #"test_pastaq.jl", - ) - println("Running $filename") - include(filename) - end -end diff --git a/ITensorGPU/test/test_cucontract.jl b/ITensorGPU/test/test_cucontract.jl deleted file mode 100644 index ad12e0ec6a..0000000000 --- a/ITensorGPU/test/test_cucontract.jl +++ /dev/null @@ -1,227 +0,0 @@ -using ITensors, - ITensorGPU, - LinearAlgebra, # For tr() - Combinatorics, # For permutations() - Random, - CUDA, - Test - -@testset "cuITensor $T Contractions" for T in (Float64, ComplexF64) - mi, mj, mk, ml, ma = 2, 3, 4, 5, 6, 7 - i = Index(mi, "i") - j = Index(mj, "j") - k = Index(mk, "k") - l = Index(ml, "l") - a = Index(ma, "a") - @testset "Test contract cuITensors" begin - A = cuITensor(randomITensor(T)) - B = cuITensor(randomITensor(T)) - Ai = cuITensor(randomITensor(T, i)) - Bi = cuITensor(randomITensor(T, i)) - Aj = cuITensor(randomITensor(T, j)) - Aij = cuITensor(randomITensor(T, i, j)) - Aji = cuITensor(randomITensor(T, j, i)) - Bij = cuITensor(randomITensor(T, i, j)) - Aik = cuITensor(randomITensor(T, i, k)) - Ajk = cuITensor(randomITensor(T, j, k)) - Ajl = cuITensor(randomITensor(T, j, l)) - Akl = cuITensor(randomITensor(T, k, l)) - Aijk = cuITensor(randomITensor(T, i, j, k)) - Ajkl = cuITensor(randomITensor(T, j, k, l)) - Aikl = cuITensor(randomITensor(T, i, k, l)) - Akla = cuITensor(randomITensor(T, k, l, a)) - Aijkl = cuITensor(randomITensor(T, i, j, k, l)) - @testset "Test contract cuITensor (Scalar*Scalar -> Scalar)" begin - C = A * B - @test scalar(C) ≈ scalar(A) * scalar(B) - C = cuITensor(T(2.0)) * cuITensor(T(2.0)) - @test scalar(C) ≈ T(4.0) - end - @testset "Test contract cuITensor (Scalar*Vector -> Vector)" begin - C = A * Ai - @test cpu(C) ≈ scalar(A) * cpu(Ai) - C = cuITensor(T(2.0)) * Ai - @test cpu(C) ≈ T(2.0) * cpu(Ai) - C = Ai * cuITensor(T(2.0)) - @test cpu(C) ≈ T(2.0) * cpu(Ai) - end - @testset "Test contract cuITensor (Vector*Scalar -> Vector)" begin - C = Aj * A - @test cpu(C) ≈ scalar(A) * cpu(Aj) - end - @testset "Test contract cuITensors (Vectorᵀ*Vector -> Scalar)" begin - C = Ai * Bi - Ccpu = cpu(Ai) * cpu(Bi) - @test scalar(Ccpu) ≈ scalar(C) - end - @testset "Test contract cuITensors (Vector*Vectorᵀ -> Matrix)" begin - C = Ai * Aj - Ccpu = cpu(Ai) * cpu(Aj) - @test Ccpu ≈ cpu(permute(C, i, j)) - end - @testset "Test contract cuITensors (Matrix*Scalar -> Matrix)" begin - Aij = permute(Aij, i, j) - C = Aij * A - @test cpu(permute(C, i, j)) ≈ scalar(A) * cpu(Aij) - end - @testset "Test contract cuITensors (Matrixᵀ*Vector -> Vector)" begin - cAij = permute(copy(Aij), j, i) - Ccpu = cpu(Aij) * cpu(Aj) - C = cAij * Aj - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Matrix*Vector -> Vector)" begin - cpAij = permute(copy(Aij), i, j) - Ccpu = cpu(cpAij) * cpu(Aj) - C = copy(cpAij) * copy(Aj) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Vector*Matrix -> Vector)" begin - Aij = permute(Aij, i, j) - C = Ai * Aij - Ccpu = cpu(Ai) * cpu(Aij) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Vector*Matrixᵀ -> Vector)" begin - C = Ai * Aji - Ccpu = cpu(Ai) * cpu(Aji) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Matrix*Matrix -> Scalar)" begin - Aij = permute(Aij, i, j) - Bij = permute(Bij, i, j) - C = Aij * Bij - Ccpu = cpu(Aij) * cpu(Bij) - @test scalar(Ccpu) ≈ scalar(C) - end - @testset "Test contract cuITensors (Matrix*Matrix -> Matrix)" begin - Aij = permute(Aij, i, j) - Ajk = permute(Ajk, j, k) - C = Aij * Ajk - Ccpu = cpu(Aij) * cpu(Ajk) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Matrixᵀ*Matrix -> Matrix)" begin - Aij = permute(Aij, j, i) - Ajk = permute(Ajk, j, k) - C = Aij * Ajk - Ccpu = cpu(Aij) * cpu(Ajk) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Matrix*Matrixᵀ -> Matrix)" begin - Aij = permute(Aij, i, j) - Ajk = permute(Ajk, k, j) - C = Aij * Ajk - Ccpu = cpu(Aij) * cpu(Ajk) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Matrixᵀ*Matrixᵀ -> Matrix)" begin - Aij = permute(Aij, j, i) - Ajk = permute(Ajk, k, j) - C = Aij * Ajk - Ccpu = cpu(Aij) * cpu(Ajk) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (3-Tensor*Scalar -> 3-Tensor)" begin - Aijk = permute(Aijk, i, j, k) - C = Aijk * A - @test cpu(permute(C, i, j, k)) ≈ scalar(A) * cpu(Aijk) - end - @testset "Test contract cuITensors (3-Tensor*Vector -> Matrix)" begin - cAijk = permute(copy(Aijk), i, j, k) - C = cAijk * Ai - Ccpu = cpu(cAijk) * cpu(Ai) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (Vector*3-Tensor -> Matrix)" begin - Aijk = permute(Aijk, i, j, k) - C = Aj * Aijk - Ccpu = cpu(Aj) * cpu(Aijk) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (3-Tensor*Matrix -> Vector)" begin - Aijk = permute(Aijk, i, j, k) - Aik = permute(Aik, i, k) - C = Aijk * Aik - Ccpu = cpu(Aijk) * cpu(Aik) - @test Ccpu ≈ cpu(C) - end - @testset "Test contract cuITensors (3-Tensor*Matrix -> 3-Tensor)" begin - Aijk = permute(Aijk, i, j, k) - Ajl = permute(Ajl, j, l) - C = Aijk * Ajl - Ccpu = cpu(Aijk) * cpu(Ajl) - @test Ccpu ≈ cpu(permute(C, i, k, l)) - end - @testset "Test contract cuITensors (Matrix*3-Tensor -> 3-Tensor)" begin - Aijk = permute(Aijk, i, j, k) - Akl = permute(Akl, k, l) - C = Akl * Aijk - Ccpu = cpu(Aijk) * cpu(Akl) - @test Ccpu ≈ cpu(permute(C, l, i, j)) - end - @testset "Test contract cuITensors (3-Tensor*3-Tensor -> 3-Tensor)" begin - Aijk = permute(Aijk, i, j, k) - Ajkl = permute(Ajkl, j, k, l) - C = Aijk * Ajkl - Ccpu = cpu(Aijk) * cpu(Ajkl) - @test Ccpu ≈ cpu(permute(C, i, l)) - end - @testset "Test contract cuITensors (3-Tensor*3-Tensor -> 3-Tensor)" begin - for inds_ijk in permutations([i, j, k]), inds_jkl in permutations([j, k, l]) - Aijk = permute(Aijk, inds_ijk...) - Ajkl = permute(Ajkl, inds_jkl...) - C = Ajkl * Aijk - Ccpu = cpu(Ajkl) * cpu(Aijk) - @test Ccpu ≈ cpu(C) - end - end - @testset "Test contract cuITensors (4-Tensor*3-Tensor -> 3-Tensor)" begin - for inds_ijkl in permutations([i, j, k, l]), inds_kla in permutations([k, l, a]) - Aijkl = permute(Aijkl, inds_ijkl...) - Akla = permute(Akla, inds_kla...) - C = Akla * Aijkl - Ccpu = cpu(Akla) * cpu(Aijkl) - @test Ccpu ≈ cpu(C) - end - end - @testset "Test contract cuITensors (4-Tensor*3-Tensor -> 1-Tensor)" begin - for inds_ijkl in permutations([i, j, k, l]), inds_jkl in permutations([j, k, l]) - Aijkl = permute(Aijkl, inds_ijkl...) - Ajkl = permute(Ajkl, inds_jkl...) - C = Ajkl * Aijkl - Ccpu = cpu(Ajkl) * cpu(Aijkl) - @test Ccpu ≈ cpu(C) - end - end - @testset "Test supersized contract cuITensors (14-Tensor*14-Tensor -> 14-Tensor)" begin - a_only_inds = [Index(2) for ii in 1:7] - b_only_inds = [Index(2) for ii in 1:7] - shared_inds = [Index(2) for ii in 1:7] - A = randomITensor(IndexSet(vcat(a_only_inds, shared_inds))) - B = randomITensor(IndexSet(vcat(b_only_inds, shared_inds))) - cA = cuITensor(A) - cB = cuITensor(B) - inds_a = vcat(a_only_inds, shared_inds) - inds_b = vcat(b_only_inds, shared_inds) - cA_ = permute(cA, inds_a...) - cB_ = permute(cB, inds_b...) - @disable_warn_order begin - C = cA_ * cB_ - Ccpu = cpu(cA_) * cpu(cB_) - end - @test Ccpu ≈ cpu(C) - for shuffles in 1:1 # too many permutations to test all - inds_a = shuffle(vcat(a_only_inds, shared_inds)) - inds_b = shuffle(vcat(b_only_inds, shared_inds)) - cA_ = permute(cA, inds_a...) - cB_ = permute(cB, inds_b...) - @disable_warn_order begin - C = cA_ * cB_ - Ccpu = cpu(cA_) * cpu(cB_) - end - @test Ccpu ≈ cpu(C) - end - end - end # End contraction testset -end diff --git a/ITensorGPU/test/test_cudense.jl b/ITensorGPU/test/test_cudense.jl deleted file mode 100644 index ef01eaff98..0000000000 --- a/ITensorGPU/test/test_cudense.jl +++ /dev/null @@ -1,118 +0,0 @@ -using ITensors, - ITensorGPU, - LinearAlgebra, # For tr() - Combinatorics, # For permutations() - CUDA, - Test - -# gpu tests! -@testset "cuITensor, Dense{$SType} storage" for SType in (Float64, ComplexF64) - mi, mj, mk, ml, ma = 2, 3, 4, 5, 6 - i = Index(mi, "i") - j = Index(mj, "j") - k = Index(mk, "k") - l = Index(ml, "l") - a = Index(ma, "a") - indices = [i, j, k, l, a] - @testset "Test add CuDense" begin - A = [SType(1.0) for ii in 1:dim(i), jj in 1:dim(j)] - dA = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - SType(1.0), dim(i) * dim(j) - ) - B = [SType(2.0) for ii in 1:dim(i), jj in 1:dim(j)] - dB = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - SType(2.0), dim(i) * dim(j) - ) - dC = +(dA, IndexSet(i, j), dB, IndexSet(j, i)) - hC = collect(dC) - @test collect(A + B) ≈ hC - end - @testset "Test2 add CuDense" begin - for i1 in indices, i2 in indices - i1 == i2 && continue - A = randomITensor(SType, i1, i2) - B = randomITensor(SType, i1, i2) - cuA = cu(A) - cuB = cu(B) - C = A + B - cuC = cuA + cuB - @test C ≈ cpu(cuC) #move to CPU to avoid scalar indexing error on GPU - @test A ≈ cpu(cuA) #check does operation `+` modify cuA - @test B ≈ cpu(cuB) #check does operation `+` modify cuB - cuA += cuB - @test cuC ≈ cuA - @test B ≈ cpu(cuB) #check does operation `+=`` modify cuB - end - end - - @testset "Test subtract CuDense" begin - A = [SType(1.0) for ii in 1:dim(i), jj in 1:dim(j)] - dA = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - SType(1.0), dim(i) * dim(j) - ) - B = [SType(2.0) for ii in 1:dim(i), jj in 1:dim(j)] - dB = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - SType(2.0), dim(i) * dim(j) - ) - dC = -(dA, IndexSet(i, j), dB, IndexSet(i, j)) - hC = collect(dC) - @test A - B ≈ hC - end - @testset "Test2 subtract CuDense" begin - for i1 in indices, i2 in indices - i1 == i2 && continue - A = randomITensor(SType, i1, i2) - B = randomITensor(SType, i1, i2) - cuA = cu(A) - cuB = cu(B) - C = A - B - cuC = cuA - cuB - @test C ≈ cpu(cuC) #move to CPU to avoid scalar indexing error on GPU - @test A ≈ cpu(cuA) #check does operation `-` modify cuA - @test B ≈ cpu(cuB) #check does operation `-` modify cuB - cuA -= cuB - @test cuC ≈ cuA - @test B ≈ cpu(cuB) #check does operation `-=`` modify cuB - #end - end - end - @testset "Test permute CuDense" begin - A = [SType(ii * jj) for ii in 1:dim(i), jj in 1:dim(j)] - dA = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - NDTensors.Dense(vec(A)) - ) - B = [SType(0.0) for ii in 1:dim(j), jj in 1:dim(j)] - dB = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - SType(0.0), dim(i) * dim(j) - ) - dC = permute!(dB, IndexSet(j, i), dA, IndexSet(i, j)) - hC = cpu(dC) - @test transpose(A) == hC - end - @testset "Test move CuDense on/off GPU" begin - A = [SType(1.0) for ii in 1:dim(i), jj in 1:dim(j)] - dA = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}( - NDTensors.Dense(vec(A)) - ) - dB = convert(NDTensors.Dense{SType,Vector{SType}}, dA) - @test NDTensors.data(dB) == vec(A) - end - @testset "Test basic CuDense features" begin - @test NDTensors.Dense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}(10) isa - ITensorGPU.CuDense{SType} - @test complex(NDTensors.Dense{SType,CuVector{SType}}) == - NDTensors.Dense{complex(SType),CuVector{complex(SType)}} - end - if SType == Float64 - @testset "Test CuDense complex" begin - A = CUDA.rand(SType, dim(i) * dim(j)) - dA = ITensorGPU.CuDense{SType,CuVector{SType,ITensorGPU.default_buffertype()}}(A) - dC = complex(dA) - @test typeof(dC) !== typeof(dA) - cdC = CuArray(dC) - hC = collect(cdC) - ccA = complex.(A) - @test hC == collect(ccA) - end - end -end # End Dense storage test diff --git a/ITensorGPU/test/test_cudiag.jl b/ITensorGPU/test/test_cudiag.jl deleted file mode 100644 index c618d44fa5..0000000000 --- a/ITensorGPU/test/test_cudiag.jl +++ /dev/null @@ -1,101 +0,0 @@ -using ITensors, - ITensors.NDTensors, - ITensorGPU, - LinearAlgebra, # For tr() - Combinatorics, # For permutations() - CUDA, - Test - -@testset "cuITensor $T Contractions" for T in (Float64, ComplexF64) - mi, mj, mk, ml, ma = 2, 3, 4, 5, 6, 7 - i = Index(mi, "i") - j = Index(mj, "j") - k = Index(mk, "k") - l = Index(ml, "l") - a = Index(ma, "a") - @testset "Test contract cuITensors" begin - Aij = cuITensor(randomITensor(T, i, j)) - Aji = cuITensor(randomITensor(T, j, i)) - Bij = cuITensor(randomITensor(T, i, j)) - Aik = cuITensor(randomITensor(T, i, k)) - Ajk = cuITensor(randomITensor(T, j, k)) - Ajl = cuITensor(randomITensor(T, j, l)) - Akl = cuITensor(randomITensor(T, k, l)) - Dv = rand(T, mi) - D = itensor(ITensors.tensor(NDTensors.Diag(CuVector(Dv)), IndexSet(i, i'))) - Ev = rand(T, mi) - E = itensor(ITensors.tensor(NDTensors.Diag(CuVector(Ev)), IndexSet(i, i''))) - @testset "Test contract cuITensors (Matrix*Diag -> Matrix)" begin - C = Aij * D - @test collect(CuArray(C)) ≈ collect(CuMatrix(Aij, j, i)) * diagm(0 => Dv) - end - @testset "Test contract cuDiagITensors (Diag*Diag -> Diag)" begin - C = E * D - cC = CuArray(C) - @test collect(cC) ≈ diagm(0 => Ev) * diagm(0 => Dv) - end - @testset "Test contract cuDiagITensors (UniformDiag*Diag -> Diag)" begin - scal = itensor(ITensors.tensor(NDTensors.Diag(2.0), IndexSet(i, i''))) - C = scal * D - @test collect(CuArray(C)) ≈ 2.0 .* diagm(0 => Dv) - C = D * scal - @test collect(CuArray(C)) ≈ 2.0 .* diagm(0 => Dv) - end - @testset "Test contract cuITensors (Matrix*UniformDiag -> Matrix)" begin - scal = itensor(ITensors.tensor(NDTensors.Diag(T(2.0)), IndexSet(i, i'))) - C = scal * Aij - @test cpu(C) ≈ 2.0 * cpu(replaceind(Aij, i, i')) atol = 1e-4 - C = Aij * scal - @test_broken cpu(C) ≈ 2.0 * cpu(replaceind(permute(Aij, j, i), i, i')) atol = 1e-4 - end - end # End contraction testset -end - -@testset "cuITensor $T1, $T2 Contractions" for T1 in (Float64, ComplexF64), - T2 in (Float64, ComplexF64) - - mi, mj, mk, ml, ma = 2, 3, 4, 5, 6, 7 - i = Index(mi, "i") - j = Index(mj, "j") - k = Index(mk, "k") - l = Index(ml, "l") - a = Index(ma, "a") - @testset "Test contract cuITensors" begin - Aij = cuITensor(randomITensor(T1, i, j)) - Aji = cuITensor(randomITensor(T1, j, i)) - Bij = cuITensor(randomITensor(T1, i, j)) - Dv = rand(T2, mi) - D = itensor(ITensors.tensor(NDTensors.Diag(CuVector(Dv)), IndexSet(i, i'))) - Ev = rand(T2, mi) - E = itensor(ITensors.tensor(NDTensors.Diag(CuVector(Ev)), IndexSet(i, i''))) - @testset "Test contract cuITensors (Matrix*Diag -> Matrix)" begin - C = Aij * D - cC = CuArray(C) - @test collect(cC) ≈ collect(CuMatrix(Aij, j, i)) * diagm(0 => Dv) - end - @testset "Test contract cuDiagITensors (Diag*Diag -> Diag)" begin - C = E * D - cC = CuArray(C) - @test collect(cC) ≈ diagm(0 => Ev) * diagm(0 => Dv) - end - @testset "Test contract cuDiagITensors (UniformDiag*Diag -> Diag)" begin - scal = itensor(ITensors.tensor(NDTensors.Diag(T2(2.0)), IndexSet(i, i''))) - C = scal * D - cC = CuArray(C) - @test collect(cC) ≈ 2.0 .* diagm(0 => Dv) - C = D * scal - cC = CuArray(C) - @test collect(cC) ≈ 2.0 .* diagm(0 => Dv) - end - @testset "Test contract cuITensors (Matrix*UniformDiag -> Matrix)" begin - scal = itensor(ITensors.tensor(NDTensors.Diag(T2(2.0)), IndexSet(i, i'))) - C = scal * Aij - cC = CuArray(C) - @test collect(cC) ≈ array(2.0 * cpu(replaceind(Aij, i, i'))) atol = 1e-4 - C = Aij * scal - cC = CuArray(C) - @test_broken collect(cC) ≈ array(2.0 * cpu(replaceind(permute(Aij, j, i), i, i'))) atol = - 1e-4 - end - end # End contraction testset -end diff --git a/ITensorGPU/test/test_cuitensor.jl b/ITensorGPU/test/test_cuitensor.jl deleted file mode 100644 index 886ad6d22f..0000000000 --- a/ITensorGPU/test/test_cuitensor.jl +++ /dev/null @@ -1,145 +0,0 @@ -using ITensors, - ITensorGPU, - LinearAlgebra, # For tr() - Combinatorics, # For permutations() - Random, - CUDA, - Test - -# gpu tests! -@testset "cuITensor, Dense{$SType} storage" for SType in (Float64, ComplexF64) - mi, mj, mk, ml, ma = 2, 3, 4, 5, 6, 7 - i = Index(mi, "i") - j = Index(mj, "j") - k = Index(mk, "k") - l = Index(ml, "l") - a = Index(ma, "a") - @testset "Constructor" begin - A = cuITensor(one(SType), i, j, k) - @test collect(CuArray(A, i, j, k)) == ones(SType, dim(i), dim(j), dim(k)) - A = randomCuITensor(IndexSet(i, j, k)) - @test inds(A) == IndexSet(i, j, k) - @test ITensorGPU.storage(A) isa ITensorGPU.CuDense - Aarr = rand(SType, dim(i) * dim(j) * dim(k)) - @test cpu(ITensor(Aarr, i, j, k)) == cpu(cuITensor(Aarr, i, j, k)) - @test cuITensor(SType, i, j, k) isa ITensor - @test storage(cuITensor(SType, i, j, k)) isa ITensorGPU.CuDense{SType} - @test vec(collect(CuArray(ITensor(Aarr, i, j, k), i, j, k))) == Aarr - end - @testset "Test permute(cuITensor,Index...)" begin - CA = randomCuITensor(SType, i, k, j) - permCA = permute(CA, k, j, i) - permA = cpu(permCA) - @test k == inds(permA)[1] - @test j == inds(permA)[2] - @test i == inds(permA)[3] - A = cpu(CA) - for ii in 1:dim(i), jj in 1:dim(j), kk in 1:dim(k) - @test A[k => kk, i => ii, j => jj] == permA[i => ii, j => jj, k => kk] - end - end - @testset "Test permute(cuITensor,Index...) for large tensors" begin - inds = [Index(2) for ii in 1:14] - A = randomITensor(SType, IndexSet(inds)) - CA = cuITensor(A) - for shuffle_count in 1:20 - perm_inds = shuffle(inds) - permCA = permute(CA, perm_inds...) - permA = cpu(permCA) - pA = permute(A, perm_inds...) - for ci in CartesianIndices(pA) - @test pA[ci] == permA[ci] - end - end - end - #=@testset "Test scalar(cuITensor)" begin - x = SType(34) - A = randomCuITensor(a) - @test x==scalar(A) - end=# - @testset "Test CuVector(cuITensor)" begin - v = CuVector(ones(SType, dim(a))) - A = cuITensor(v, a) - @test v == CuVector(A) - end - @testset "Test CuMatrix(cuITensor)" begin - v = CuMatrix(ones(SType, dim(a), dim(l))) - A = cuITensor(vec(v), a, l) - @test v == CuMatrix(A, a, l) - A = cuITensor(vec(v), a, l) - @test v == CuMatrix(A) - A = cuITensor(vec(v), a, l) - @test v == CuArray(A, a, l) - @test v == CuArray(A) - end - @testset "Test norm(cuITensor)" begin - A = randomCuITensor(SType, i, j, k) - B = dag(A) * A - @test norm(A) ≈ sqrt(real(scalar(B))) - end - @testset "Test complex(cuITensor)" begin - A = randomCuITensor(SType, i, j, k) - cA = complex(A) - @test complex.(CuArray(A)) == CuArray(cA) - end - #@testset "Test exp(cuITensor)" begin - # A = randomCuITensor(SType,i,i') - # @test CuArray(exp(A,i,i')) ≈ exp(CuArray(A)) - #end - @testset "Test add cuITensors" begin - dA = randomCuITensor(SType, i, j, k) - dB = randomCuITensor(SType, k, i, j) - A = cpu(dA) - B = cpu(dB) - C = cpu(dA + dB) - @test CuArray(permute(C, i, j, k)) == - CuArray(permute(A, i, j, k)) + CuArray(permute(B, i, j, k)) - for ii in 1:dim(i), jj in 1:dim(j), kk in 1:dim(k) - @test C[i => ii, j => jj, k => kk] == - A[j => jj, i => ii, k => kk] + B[i => ii, k => kk, j => jj] - end - end - - @testset "Test factorizations of a cuITensor" begin - A = randomCuITensor(SType, i, j, k, l) - @testset "Test SVD of a cuITensor" begin - U, S, V = svd(A, (j, l)) - u = commonind(U, S) - v = commonind(S, V) - @test cpu(A) ≈ cpu(U * S * V) - @test cpu(U * dag(prime(U, u))) ≈ δ(SType, u, u') rtol = 1e-14 - @test cpu(V * dag(prime(V, v))) ≈ δ(SType, v, v') rtol = 1e-14 - end - - A = randomCuITensor(SType, i, j, k, l) - @testset "Test SVD consistency between CPU and GPU" begin - U_gpu, S_gpu, V_gpu = svd(A, (j, l)) - U_cpu, S_cpu, V_cpu = svd(cpu(A), (j, l)) - @test cpu(U_gpu) * cpu(S_gpu) * cpu(V_gpu) ≈ U_cpu * S_cpu * V_cpu - end - - #=@testset "Test SVD truncation" begin - M = randn(4,4) - (U,s,V) = svd(M) - ii = Index(4) - jj = Index(4) - S = Diagonal(s) - T = cuITensor(vec(CuArray(U*S*V')),IndexSet(ii,jj)) - (U,S,V) = svd(T,ii;maxm=2) - @test norm(U*S*V-T)≈sqrt(s[3]^2+s[4]^2) - end=# - - @testset "Test QR decomposition of a cuITensor" begin - Q, R = qr(A, (i, l)) - q = commonind(Q, R) - @test cpu(A) ≈ cpu(Q * R) - @test cpu(Q * dag(prime(Q, q))) ≈ δ(SType, q, q') atol = 1e-14 - end - - #=@testset "Test polar decomposition of a cuITensor" begin - U,P = polar(A,(k,l)) - @test cpu(A)≈cpu(U*P) - end=# - - end # End ITensor factorization testset -end # End Dense storage test diff --git a/ITensorGPU/test/test_cumpo.jl b/ITensorGPU/test/test_cumpo.jl deleted file mode 100644 index 059aeb7bdb..0000000000 --- a/ITensorGPU/test/test_cumpo.jl +++ /dev/null @@ -1,184 +0,0 @@ -using ITensors, ITensorGPU, Test - -@testset "CuMPO Basics" begin - N = 6 - sites = [Index(2, "Site") for n in 1:N] - @test length(cuMPO()) == 0 - O = cuMPO(sites) - @test length(O) == N - - str = split(sprint(show, O), '\n') - @test str[1] == "MPO" - @test length(str) == length(O) + 2 - - O[1] = cuITensor(sites[1], prime(sites[1])) - @test hasind(O[1], sites[1]) - @test hasind(O[1], prime(sites[1])) - P = copy(O) - @test hasind(P[1], sites[1]) - @test hasind(P[1], prime(sites[1])) - - K = randomCuMPO(sites) - K_ = cuMPO(ITensors.data(K)) - @test all(ITensors.data(K) .== ITensors.data(K_)) - - s = siteinds("S=1/2", N) - L = randomMPO(s) - K = cuMPO(L) - @test all(ITensors.data(cpu(K)) .== ITensors.data(cpu(L))) - @testset "orthogonalize" begin - phi = randomCuMPS(sites) - K = randomCuMPO(sites) - orthogonalize!(phi, 1) - orthogonalize!(K, 1) - orig_inner = inner(phi', K, phi) - orthogonalize!(phi, div(N, 2)) - orthogonalize!(K, div(N, 2)) - @test inner(phi', K, phi) ≈ orig_inner - end - - @testset "inner " begin - phi = randomCuMPS(sites) - K = randomCuMPO(sites) - @test maxlinkdim(K) == 1 - psi = randomCuMPS(sites) - phidag = dag(phi) - prime!(phidag) - phiKpsi = phidag[1] * K[1] * psi[1] - for j in 2:N - phiKpsi *= phidag[j] * K[j] * psi[j] - end - @test phiKpsi[] ≈ inner(phi', K, psi) - - badsites = [Index(2, "Site") for n in 1:(N + 1)] - badpsi = randomCuMPS(badsites) - @test_throws DimensionMismatch inner(phi', K, badpsi) - - # make bigger random MPO... - for link_dim in 2:5 - mpo_tensors = ITensor[cuITensor() for ii in 1:N] - mps_tensors = ITensor[cuITensor() for ii in 1:N] - mps_tensors2 = ITensor[cuITensor() for ii in 1:N] - mpo_link_inds = [Index(link_dim, "r$ii,Link") for ii in 1:(N - 1)] - mps_link_inds = [Index(link_dim, "r$ii,Link") for ii in 1:(N - 1)] - mpo_tensors[1] = randomCuITensor(mpo_link_inds[1], sites[1], sites[1]') - mps_tensors[1] = randomCuITensor(mps_link_inds[1], sites[1]) - mps_tensors2[1] = randomCuITensor(mps_link_inds[1], sites[1]) - for ii in 2:(N - 1) - mpo_tensors[ii] = randomCuITensor( - mpo_link_inds[ii], mpo_link_inds[ii - 1], sites[ii], sites[ii]' - ) - mps_tensors[ii] = randomCuITensor( - mps_link_inds[ii], mps_link_inds[ii - 1], sites[ii] - ) - mps_tensors2[ii] = randomCuITensor( - mps_link_inds[ii], mps_link_inds[ii - 1], sites[ii] - ) - end - mpo_tensors[N] = randomCuITensor(mpo_link_inds[N - 1], sites[N], sites[N]') - mps_tensors[N] = randomCuITensor(mps_link_inds[N - 1], sites[N]) - mps_tensors2[N] = randomCuITensor(mps_link_inds[N - 1], sites[N]) - K = MPO(mpo_tensors, 0, N + 1) - psi = MPS(mps_tensors, 0, N + 1) - phi = MPS(mps_tensors2, 0, N + 1) - orthogonalize!(psi, 1; maxdim=link_dim) - orthogonalize!(K, 1; maxdim=link_dim) - orthogonalize!(phi, 1; normalize=true, maxdim=link_dim) - phidag = dag(phi) - prime!(phidag) - phiKpsi = phidag[1] * K[1] * psi[1] - for j in 2:N - phiKpsi *= phidag[j] * K[j] * psi[j] - end - @test scalar(phiKpsi) ≈ inner(phi', K, psi) - end - end - - @testset "contract" begin - phi = randomCuMPS(sites) - K = randomCuMPO(sites) - @test maxlinkdim(K) == 1 - psi = randomCuMPS(sites) - psi_out = contract(K, psi; maxdim=1) - @test inner(phi', psi_out) ≈ inner(phi', K, psi) - @test_throws MethodError contract(K', psi, method="fakemethod") - - badsites = [Index(2, "Site") for n in 1:(N + 1)] - badpsi = randomCuMPS(badsites) - @test_throws DimensionMismatch contract(K, badpsi) - - # make bigger random MPO... - for link_dim in 2:5 - mpo_tensors = ITensor[ITensor() for ii in 1:N] - mps_tensors = ITensor[ITensor() for ii in 1:N] - mps_tensors2 = ITensor[ITensor() for ii in 1:N] - mpo_link_inds = [Index(link_dim, "r$ii,Link") for ii in 1:(N - 1)] - mps_link_inds = [Index(link_dim, "r$ii,Link") for ii in 1:(N - 1)] - mpo_tensors[1] = randomCuITensor(mpo_link_inds[1], sites[1], sites[1]') - mps_tensors[1] = randomCuITensor(mps_link_inds[1], sites[1]) - mps_tensors2[1] = randomCuITensor(mps_link_inds[1], sites[1]) - for ii in 2:(N - 1) - mpo_tensors[ii] = randomCuITensor( - mpo_link_inds[ii], mpo_link_inds[ii - 1], sites[ii], sites[ii]' - ) - mps_tensors[ii] = randomCuITensor( - mps_link_inds[ii], mps_link_inds[ii - 1], sites[ii] - ) - mps_tensors2[ii] = randomCuITensor( - mps_link_inds[ii], mps_link_inds[ii - 1], sites[ii] - ) - end - mpo_tensors[N] = randomCuITensor(mpo_link_inds[N - 1], sites[N], sites[N]') - mps_tensors[N] = randomCuITensor(mps_link_inds[N - 1], sites[N]) - mps_tensors2[N] = randomCuITensor(mps_link_inds[N - 1], sites[N]) - K = MPO(mpo_tensors, 0, N + 1) - psi = MPS(mps_tensors, 0, N + 1) - phi = MPS(mps_tensors2, 0, N + 1) - orthogonalize!(psi, 1; maxdim=link_dim) - orthogonalize!(K, 1; maxdim=link_dim) - orthogonalize!(phi, 1; normalize=true, maxdim=link_dim) - psi_out = contract(deepcopy(K), deepcopy(psi); maxdim=10 * link_dim, cutoff=0.0) - @test inner(phi', psi_out) ≈ inner(phi', K, psi) - end - end - @testset "add" begin - shsites = siteinds("S=1/2", N) - K = randomCuMPO(shsites) - L = randomCuMPO(shsites) - M = add(K, L) - @test length(M) == N - psi = randomCuMPS(shsites) - k_psi = contract(K, psi; maxdim=1) - l_psi = contract(L, psi; maxdim=1) - @test inner(psi', add(k_psi, l_psi)) ≈ inner(psi', M, psi) atol = 5e-3 - end - @testset "contract(::CuMPO, ::CuMPO)" begin - psi = randomCuMPS(sites) - K = randomCuMPO(sites) - L = randomCuMPO(sites) - @test maxlinkdim(K) == 1 - @test maxlinkdim(L) == 1 - KL = contract(prime(K), L; maxdim=1) - psi_kl_out = contract(prime(K), contract(L, psi; maxdim=1); maxdim=1) - @test inner(psi'', KL, psi) ≈ inner(psi'', psi_kl_out) atol = 5e-3 - - # where both K and L have differently labelled sites - othersitesk = [Index(2, "Site,aaa") for n in 1:N] - othersitesl = [Index(2, "Site,bbb") for n in 1:N] - K = randomCuMPO(sites) - L = randomCuMPO(sites) - for ii in 1:N - replaceind!(K[ii], sites[ii]', othersitesk[ii]) - replaceind!(L[ii], sites[ii]', othersitesl[ii]) - end - KL = contract(K, L; maxdim=1) - psik = randomCuMPS(othersitesk) - psil = randomCuMPS(othersitesl) - psi_kl_out = contract(K, contract(L, psil; maxdim=1); maxdim=1) - @test inner(psik, KL, psil) ≈ inner(psik, psi_kl_out) atol = 5e-3 - - badsites = [Index(2, "Site") for n in 1:(N + 1)] - badL = randomCuMPO(badsites) - @test_throws DimensionMismatch contract(K, badL) - end -end diff --git a/ITensorGPU/test/test_cumps.jl b/ITensorGPU/test/test_cumps.jl deleted file mode 100644 index 1ebe28b4d9..0000000000 --- a/ITensorGPU/test/test_cumps.jl +++ /dev/null @@ -1,275 +0,0 @@ -using ITensors, ITensorGPU, Test -@testset "cuMPS Basics" begin - N = 10 - sites = [Index(2, "Site") for n in 1:N] - psi = cuMPS(sites) - @test length(psi) == N - @test length(cuMPS()) == 0 - - str = split(sprint(show, psi), '\n') - @test str[1] == "MPS" - @test length(str) == length(psi) + 2 - - @test siteind(psi, 2) == sites[2] - @test hasind(psi[3], linkind(psi, 2)) - @test hasind(psi[3], linkind(psi, 3)) - - psi[1] = cuITensor(sites[1]) - @test hasind(psi[1], sites[1]) - - L = randomMPS(sites) - K = cuMPS(L) - @test all(ITensors.data(cpu(K)) .== ITensors.data(cpu(L))) - - @testset "cuproductMPS" begin - @testset "vector of string input" begin - sites = siteinds("S=1/2", N) - state = fill("", N) - for j in 1:N - state[j] = isodd(j) ? "Up" : "Dn" - end - psi = productCuMPS(sites, state) - for j in 1:N - sign = isodd(j) ? +1.0 : -1.0 - ops = cuITensor(op(sites, "Sz", j)) - psip = prime(psi[j], "Site") - res = psi[j] * ops * dag(psip) - @test res[] ≈ sign / 2 - end - @test_throws DimensionMismatch cuMPS(sites, fill("", N - 1)) - @test_throws DimensionMismatch productCuMPS(sites, fill("", N - 1)) - end - - @testset "vector of int input" begin - sites = siteinds("S=1/2", N) - state = fill(0, N) - for j in 1:N - state[j] = isodd(j) ? 1 : 2 - end - psi = productCuMPS(sites, state) - for j in 1:N - sign = isodd(j) ? +1.0 : -1.0 - ops = cuITensor(op(sites, "Sz", j)) - psip = prime(psi[j], "Site") - @test (psi[j] * ops * dag(psip))[] ≈ sign / 2 - end - end - end - - @testset "randomMPS" begin - phi = randomCuMPS(sites) - @test hasind(phi[1], sites[1]) - @test norm(phi[1]) ≈ 1.0 - @test hasind(phi[4], sites[4]) - @test norm(phi[4]) ≈ 1.0 - end - - @testset "inner different MPS" begin - phi = randomMPS(sites) - psi = randomMPS(sites) - phipsi = dag(phi[1]) * psi[1] - for j in 2:N - phipsi *= dag(phi[j]) * psi[j] - end - @test phipsi[] ≈ inner(phi, psi) - phi = randomCuMPS(sites) - psi = randomCuMPS(sites) - cphi = MPS([cpu(phi[i]) for i in 1:length(phi)]) - cpsi = MPS([cpu(psi[i]) for i in 1:length(psi)]) - phipsi = dag(phi[1]) * psi[1] - cphipsi = dag(cphi[1]) * cpsi[1] - for j in 2:N - phipsi *= dag(phi[j]) * psi[j] - cphipsi *= dag(cphi[j]) * cpsi[j] - end - @test cpu(phipsi)[] ≈ cphipsi[] - @test cpu(phipsi)[] ≈ inner(cphi, cpsi) - @test cpu(phipsi)[] ≈ inner(phi, psi) - phipsi = dag(phi[1]) * psi[1] - for j in 2:N - phipsi = phipsi * dag(phi[j]) * psi[j] - end - @test cpu(phipsi)[] ≈ inner(phi, psi) - - badsites = [Index(2) for n in 1:(N + 1)] - badpsi = randomCuMPS(badsites) - @test_throws DimensionMismatch inner(phi, badpsi) - end - - @testset "inner same MPS" begin - psi = randomMPS(sites) - psidag = dag(deepcopy(psi)) - ITensors.prime_linkinds!(psidag) - psipsi = psidag[1] * psi[1] - for j in 2:N - psipsi = psipsi * psidag[j] * psi[j] - end - @test psipsi[] ≈ inner(psi, psi) - psi = randomCuMPS(sites) - psidag = dag(deepcopy(psi)) - ITensors.prime_linkinds!(psidag) - psipsi = psidag[1] * psi[1] - for j in 2:N - psipsi = psipsi * psidag[j] * psi[j] - end - @test psipsi[] ≈ inner(psi, psi) - end - - @testset "add MPS" begin - psi = randomMPS(sites) - phi = deepcopy(psi) - xi = add(psi, phi) - @test inner(xi, xi) ≈ 4.0 * inner(psi, psi) - psi = randomCuMPS(sites) - phi = deepcopy(psi) - xi = add(psi, phi) - @test inner(xi, xi) ≈ 4.0 * inner(psi, psi) - end - - sites = siteinds("S=1/2", N) - psi = cuMPS(sites) - @test length(psi) == N # just make sure this works - @test length(siteinds(psi)) == N - - psi = randomCuMPS(sites) - orthogonalize!(psi, N - 1) - @test ITensors.leftlim(psi) == N - 2 - @test ITensors.rightlim(psi) == N - orthogonalize!(psi, 2) - @test ITensors.leftlim(psi) == 1 - @test ITensors.rightlim(psi) == 3 - psi = randomCuMPS(sites) - psi.rlim = N + 1 # do this to test qr from rightmost tensor - orthogonalize!(psi, div(N, 2)) - @test ITensors.leftlim(psi) == div(N, 2) - 1 - @test ITensors.rightlim(psi) == div(N, 2) + 1 - - #@test_throws ErrorException linkind(MPS(N, fill(cuITensor(), N), 0, N + 1), 1) - - @testset "replacebond!" begin - # make sure factorization preserves the bond index tags - psi = randomCuMPS(sites) - phi = psi[1] * psi[2] - bondindtags = tags(linkind(psi, 1)) - replacebond!(psi, 1, phi) - @test tags(linkind(psi, 1)) == bondindtags - - # check that replaceBond! updates llim_ and rlim_ properly - orthogonalize!(psi, 5) - phi = psi[5] * psi[6] - replacebond!(psi, 5, phi; ortho="left") - @test ITensors.leftlim(psi) == 5 - @test ITensors.rightlim(psi) == 7 - - phi = psi[5] * psi[6] - replacebond!(psi, 5, phi; ortho="right") - @test ITensors.leftlim(psi) == 4 - @test ITensors.rightlim(psi) == 6 - - psi.llim = 3 - psi.rlim = 7 - phi = psi[5] * psi[6] - replacebond!(psi, 5, phi; ortho="left") - @test ITensors.leftlim(psi) == 3 - @test ITensors.rightlim(psi) == 7 - end -end - -# Helper function for making MPS -function basicRandomCuMPS(N::Int; dim=4) - sites = [Index(2, "Site") for n in 1:N] - M = MPS(sites) - links = [Index(dim, "n=$(n-1),Link") for n in 1:(N + 1)] - M[1] = randomCuITensor(sites[1], links[2]) - for n in 2:(N - 1) - M[n] = randomCuITensor(links[n], sites[n], links[n + 1]) - end - M[N] = randomCuITensor(links[N], sites[N]) - M[1] /= sqrt(inner(M, M)) - return M -end -@testset "MPS gauging and truncation" begin - N = 30 - - @testset "orthogonalize! method" begin - c = 12 - M = basicRandomCuMPS(N) - orthogonalize!(M, c) - - @test ITensors.leftlim(M) == c - 1 - @test ITensors.rightlim(M) == c + 1 - - # Test for left-orthogonality - L = M[1] * prime(M[1], "Link") - l = linkind(M, 1) - @test cpu(L) ≈ delta(l, l') rtol = 1E-12 - for j in 2:(c - 1) - L = L * M[j] * prime(M[j], "Link") - l = linkind(M, j) - @test cpu(L) ≈ delta(l, l') rtol = 1E-12 - end - - # Test for right-orthogonality - R = M[N] * prime(M[N], "Link") - r = linkind(M, N - 1) - @test cpu(R) ≈ delta(r, r') rtol = 1E-12 - for j in reverse((c + 1):(N - 1)) - R = R * M[j] * prime(M[j], "Link") - r = linkind(M, j - 1) - @test cpu(R) ≈ delta(r, r') rtol = 1E-12 - end - - @test norm(M[c]) ≈ 1.0 - end - - @testset "truncate! method" begin - M = basicRandomCuMPS(N; dim=10) - M0 = copy(M) - truncate!(M; maxdim=5) - @test ITensors.rightlim(M) == 2 - # Test for right-orthogonality - R = M[N] * prime(M[N], "Link") - r = linkind(M, N - 1) - @test cpu(R) ≈ delta(r, r') rtol = 1E-12 - for j in reverse(2:(N - 1)) - R = R * M[j] * prime(M[j], "Link") - r = linkind(M, j - 1) - @test cpu(R) ≈ delta(r, r') rtol = 1E-12 - end - @test inner(M0, M) > 0.1 - end -end - -#=@testset "Other MPS methods" begin - - @testset "sample! method" begin - N = 10 - sites = [Index(3,"Site,n=$n") for n=1:N] - psi = makeRandomCuMPS(sites,chi=3) - nrm2 = inner(psi,psi) - psi[1] *= (1.0/sqrt(nrm2)) - - s = sample!(psi) - - @test length(s) == N - for n=1:N - @test 1 <= s[n] <= 3 - end - - # Throws becase not orthogonalized to site 1: - orthogonalize!(psi,3) - @test_throws ErrorException sample(psi) - - # Throws becase not normalized - orthogonalize!(psi,1) - psi[1] *= (5.0/norm(psi[1])) - @test_throws ErrorException sample(psi) - - # Works when ortho & normalized: - orthogonalize!(psi,1) - psi[1] *= (1.0/norm(psi[1])) - s = sample(psi) - @test length(s) == N - end - -end=# diff --git a/ITensorGPU/test/test_cutruncate.jl b/ITensorGPU/test/test_cutruncate.jl deleted file mode 100644 index 1afcfb92dd..0000000000 --- a/ITensorGPU/test/test_cutruncate.jl +++ /dev/null @@ -1,62 +0,0 @@ -using ITensors, - ITensorGPU, - LinearAlgebra, # For tr() - CUDA, - Test - -# gpu tests! -@testset "cutrunctate" begin - @testset for T in (Float32, Float64) - @test ITensorGPU.truncate!(CUDA.zeros(T, 10)) == (zero(T), zero(T), CUDA.zeros(T, 1)) - trunc = ITensorGPU.truncate!( - CuArray(T[1.0, 0.5, 0.4, 0.1, 0.05]); absoluteCutoff=true, cutoff=T(0.2) - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.25) - @test Array(trunc[3]) == T[1.0, 0.5, 0.4] - - trunc = ITensorGPU.truncate!( - CuArray(T[1.0, 0.5, 0.4, 0.1, 0.05]); absoluteCutoff=true, maxdim=3 - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.25) - @test Array(trunc[3]) == T[1.0, 0.5, 0.4] - - trunc = ITensorGPU.truncate!( - CuArray(T[1.0, 0.5, 0.4, 0.1, 0.05]); absoluteCutoff=true, maxdim=3, cutoff=T(0.07) - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.25) - @test Array(trunc[3]) == T[1.0, 0.5, 0.4] - - trunc = ITensorGPU.truncate!( - CuArray(T[0.4, 0.26, 0.19, 0.1, 0.05]); relativeCutoff=true, cutoff=T(0.2) - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.145) - @test Array(trunc[3]) == T[0.4, 0.26, 0.19] - - trunc = ITensorGPU.truncate!( - CuArray(T[0.4, 0.26, 0.19, 0.1, 0.05]); relativeCutoff=true, maxdim=3 - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.145) - @test Array(trunc[3]) == T[0.4, 0.26, 0.19] - - trunc = ITensorGPU.truncate!( - CuArray(T[0.4, 0.26, 0.19, 0.1, 0.05]); relativeCutoff=true, maxdim=3, cutoff=T(0.07) - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.145) - @test Array(trunc[3]) == T[0.4, 0.26, 0.19] - - trunc = ITensorGPU.truncate!( - CuArray(convert(Vector{T}, [0.4, 0.26, 0.19, 0.1, 0.05] / 2)); - relativeCutoff=true, - cutoff=T(0.2), - ) - @test trunc[1] ≈ T(0.15) - @test trunc[2] ≈ T(0.145 / 2) - @test Array(trunc[3]) == convert(Vector{T}, [0.4, 0.26, 0.19] / 2) - end -end # End truncate test diff --git a/ITensorGPU/test/test_dmrg.jl b/ITensorGPU/test/test_dmrg.jl deleted file mode 100644 index 811343d249..0000000000 --- a/ITensorGPU/test/test_dmrg.jl +++ /dev/null @@ -1,236 +0,0 @@ -using ITensorGPU, ITensors, Test, Random - -function heisenberg(n) - opsum = OpSum() - for j in 1:(n - 1) - opsum += 0.5, "S+", j, "S-", j + 1 - opsum += 0.5, "S-", j, "S+", j + 1 - opsum += "Sz", j, "Sz", j + 1 - end - return opsum -end - -@testset "Basic DMRG" begin - @testset "Spin-one Heisenberg" begin - N = 10 - sites = siteinds("S=1", N) - H = cuMPO(MPO(heisenberg(N), sites)) - - psi = randomCuMPS(sites) - - sweeps = Sweeps(3) - @test length(sweeps) == 3 - maxdim!(sweeps, 10, 20, 40) - mindim!(sweeps, 1, 10) - cutoff!(sweeps, 1E-11) - noise!(sweeps, 1E-10) - str = split(sprint(show, sweeps), '\n') - @test length(str) > 1 - energy, psi = dmrg(H, psi, sweeps; outputlevel=0) - @test energy < -12.0 - end - - #=@testset "QN-conserving Spin-one Heisenberg" begin - N = 10 - sites = siteinds("S=1",N; conserve_qns=true) - - opsum = OpSum() - for j=1:N-1 - add!(opsum,"Sz",j,"Sz",j+1) - add!(opsum,0.5,"S+",j,"S-",j+1) - add!(opsum,0.5,"S-",j,"S+",j+1) - end - H = cuMPO(MPO(opsum,sites)) - - state = [isodd(n) ? "Up" : "Dn" for n in 1:N] - psi = randomCuMPS(sites,state,4) - - sweeps = Sweeps(3) - @test length(sweeps) == 3 - maxdim!(sweeps,10,20,40) - mindim!(sweeps,1,10) - cutoff!(sweeps,1E-11) - noise!(sweeps,1E-10) - str = split(sprint(show, sweeps), '\n') - @test length(str) > 1 - energy,psi = dmrg(H, psi, sweeps; outputlevel=0) - @test energy < -12.0 - end=# - - @testset "Transverse field Ising" begin - N = 32 - sites = siteinds("S=1/2", N) - Random.seed!(432) - psi0 = randomCuMPS(sites) - - opsum = OpSum() - for j in 1:N - j < N && add!(opsum, -1.0, "Sz", j, "Sz", j + 1) - add!(opsum, -0.5, "Sx", j) - end - H = cuMPO(MPO(opsum, sites)) - - sweeps = Sweeps(5) - maxdim!(sweeps, 10, 20) - cutoff!(sweeps, 1E-12) - noise!(sweeps, 1E-10) - energy, psi = dmrg(H, psi0, sweeps; outputlevel=0) - - # Exact energy for transverse field Ising model - # with open boundary conditions at criticality - energy_exact = 0.25 - 0.25 / sin(π / (2 * (2 * N + 1))) - @test abs((energy - energy_exact) / energy_exact) < 1e-2 - end - - @testset "DMRGObserver" begin - device = cu - n = 5 - s = siteinds("S=1/2", n) - - H = device(MPO(heisenberg(n), s)) - ψ0 = device(randomMPS(s)) - - dmrg_params = (; nsweeps=4, maxdim=10, cutoff=1e-8, noise=1e-8, outputlevel=0) - observer = DMRGObserver(["Z"], s; energy_tol=1e-4, minsweeps=10) - E, ψ = dmrg(H, ψ0; observer=observer, dmrg_params...) - @test expect(ψ, "Z") ≈ observer.measurements["Z"][end] rtol = - 10 * sqrt(eps(real(ITensors.scalartype(ψ0)))) - @test correlation_matrix(ψ, "Z", "Z") ≈ correlation_matrix(cpu(ψ), "Z", "Z") - end - - #=@testset "DMRGObserver" begin - N = 10 - sites = siteinds("S=1/2",N) - Random.seed!(42) - psi0 = randomCuMPS(sites) - - opsum = OpSum() - for j = 1:N-1 - add!(opsum,-1.0,"Sz",j,"Sz",j+1) - end - for j = 1:N - add!(opsum,-0.2,"Sx",j) - end - H = cuMPO(MPO(opsum,sites)) - - sweeps = Sweeps(3) - maxdim!(sweeps,10) - cutoff!(sweeps,1E-12) - - observer = DMRGObserver(["Sz","Sx"], sites) - - E,psi = dmrg(H,psi0,sweeps,observer=observer,outputlevel=0) - @test length(measurements(observer)["Sz"])==3 - @test length(measurements(observer)["Sx"])==3 - @test all(length.(measurements(observer)["Sz"]) .== N) - @test all(length.(measurements(observer)["Sx"]) .== N) - @test length(energies(observer))==3 - @test length(truncerrors(observer))==3 - @test energies(observer)[end]==E - @test all(truncerrors(observer) .< 1E-9) - - orthogonalize!(psi,1) - m = scalar(dag(psi[1])*noprime(op(sites, "Sz", 1)*psi[1])) - @test measurements(observer)["Sz"][end][1] ≈ m - end - - @testset "Sum of MPOs (ProjMPOSum)" begin - N = 10 - sites = siteinds("S=1",N) - - ampoZ = OpSum() - for j=1:N-1 - add!(opsumZ,"Sz",j,"Sz",j+1) - end - HZ = MPO(opsumZ,sites) - - ampoXY = OpSum() - for j=1:N-1 - add!(opsumXY,0.5,"S+",j,"S-",j+1) - add!(opsumXY,0.5,"S-",j,"S+",j+1) - end - HXY = MPO(opsumXY,sites) - - psi = randomMPS(sites) - - sweeps = Sweeps(3) - maxdim!(sweeps,10,20,40) - mindim!(sweeps,1,10,10) - cutoff!(sweeps,1E-11) - noise!(sweeps,1E-10) - energy,psi = dmrg([HZ,HXY], psi, sweeps; outputlevel=0) - @test energy < -12.0 - end=# - - #=@testset "Excited-state DMRG" begin - N = 10 - weight = 15.0 - - sites = siteinds("S=1",N) - sites[1] = Index(2,"S=1/2,n=1,Site") - sites[N] = Index(2,"S=1/2,n=$N,Site") - - opsum = OpSum() - for j=1:N-1 - add!(opsum,"Sz",j,"Sz",j+1) - add!(opsum,0.5,"S+",j,"S-",j+1) - add!(opsum,0.5,"S-",j,"S+",j+1) - end - H = cuMPO(MPO(opsum,sites)) - - psi0i = randomCuMPS(sites,10) - - sweeps = Sweeps(4) - maxdim!(sweeps, 10,20,100,100) - cutoff!(sweeps, 1E-11) - noise!(sweeps,1E-10) - - energy0, psi0 = dmrg(H,psi0i, sweeps; outputlevel=0) - @test energy0 < -11.5 - - psi1i = randomCuMPS(sites,10) - energy1,psi1 = dmrg(H,[psi0],psi1i,sweeps;outputlevel=0,weight=weight) - - @test energy1 > energy0 - @test energy1 < -11.1 - - @test inner(psi1,psi0) < 1E-6 - end=# - - #=@testset "Fermionic Hamiltonian" begin - N = 10 - t1 = 1.0 - t2 = 0.5 - V = 0.2 - s = siteinds("Fermion", N; conserve_qns = true) - - state = fill(1,N) - state[1] = 2 - state[3] = 2 - state[5] = 2 - state[7] = 2 - psi0 = productMPS(s,state) - - opsum = OpSum() - for j=1:N-1 - opsum += (-t1, "Cdag", j, "C", j+1) - opsum += (-t1, "Cdag", j+1, "C", j) - opsum += ( V, "N", j, "N", j+1) - end - for j=1:N-2 - opsum += (-t2, "Cdag", j, "C", j+2) - opsum += (-t2, "Cdag", j+2, "C", j) - end - H = MPO(opsum, s) - - sweeps = Sweeps(5) - maxdim!(sweeps, 10, 20, 100, 100, 200) - cutoff!(sweeps, 1E-8) - noise!(sweeps, 1E-10) - - energy, psi = dmrg(H, psi0, sweeps; outputlevel = 0) - @test (-6.5 < energy < -6.4) - end=# -end - -nothing diff --git a/ITensorGPU/test/test_pastaq.jl b/ITensorGPU/test/test_pastaq.jl deleted file mode 100644 index 5c740853ef..0000000000 --- a/ITensorGPU/test/test_pastaq.jl +++ /dev/null @@ -1,73 +0,0 @@ -using Test -using ITensors -using ITensorGPU -using PastaQ -using Zygote -using OptimKit - -function ising_model(n; J=1.0, h) - H = OpSum() - for j in 1:n - if j < n - H -= J, "Z", j, "Z", j + 1 - end - H -= h, "X", j - end - return H -end - -Ry(θ) = [("Ry", j, (θ=θ[j],)) for j in 1:length(θ)] -CNOT(n) = [("CNOT", j, j + 1) for j in 1:(n - 1)] -function U(θ) - nlayers = length(θ) - Uθ = Tuple[] - for l in 1:(nlayers - 1) - Uθ = [Uθ; [Ry(θ[l]); CNOT(length(θ[l]))]] - end - Uθ = [Uθ; Ry(θ[nlayers])] - return Uθ -end - -function f(θ, ψ; kwargs...) - i = siteinds(ψ) - ψθ = runcircuit(i, U(θ); kwargs...) - return 1 - abs(inner(ψ, ψθ)) -end - -function f_∇f(f, θ, ψ; kwargs...) - fθ, (∇fθ,) = withgradient(θ -> f(θ, ψ; kwargs...), θ) - return fθ, ∇fθ -end - -@testset "PastaQ runcircuit on $device with element type $eltype" for device in (cpu, cu), - eltype in (Float32, Float64) - - n = 4 - h = 0.5 - cutoff = 1e-5 - gradtol = 1e-4 - maxdim = 10 - maxiter = 30 - nlayers = 4 - i = siteinds("Qubit", n) - ψ = device(eltype, MPS(i, j -> isodd(j) ? "0" : "1")) - H = device(eltype, MPO(ising_model(n; h), i)) - _, ψ = dmrg(H, ψ; nsweeps=10, cutoff, maxdim, outputlevel=0) - θ = [zeros(eltype, n) for l in 1:nlayers] - (θ,) = optimize( - θ -> f_∇f(f, θ, ψ; cutoff, maxdim, device, eltype), - θ, - LBFGS(; verbosity=0, maxiter, gradtol), - ) - ψθ = runcircuit(i, U(θ); cutoff, maxdim, device, eltype) - energy_reference = inner(ψ', H, ψ) - energy_opt = inner(ψθ', H, ψθ) - is_device(x, device) = device == cu ? ITensorGPU.is_cu(x) : !ITensorGPU.is_cu(x) - @test is_device(H, device) - @test is_device(ψ, device) - @test is_device(ψθ, device) - @test ITensors.scalartype(H) <: eltype - @test ITensors.scalartype(ψ) <: eltype - @test ITensors.scalartype(ψθ) <: eltype - @test inner(ψ', H, ψ) ≈ inner(ψθ', H, ψθ) atol = 1e-3 -end diff --git a/NDTensors/src/lib/CUDAExtensions/src/cuda.jl b/NDTensors/src/lib/CUDAExtensions/src/cuda.jl index 44b8007672..7e94917a21 100644 --- a/NDTensors/src/lib/CUDAExtensions/src/cuda.jl +++ b/NDTensors/src/lib/CUDAExtensions/src/cuda.jl @@ -1,6 +1,6 @@ using NDTensors.TypeParameterAccessors: TypeParameterAccessors, Position using NDTensors.GPUArraysCoreExtensions: storagemode -# Implemented in `ITensorGPU` and NDTensorsCUDAExt +# Implemented in NDTensorsCUDAExt function cu end ## Here we need an CuArrayAdaptor because the CuArrayAdaptor provided by CUDA diff --git a/NDTensors/src/lib/MetalExtensions/src/metal.jl b/NDTensors/src/lib/MetalExtensions/src/metal.jl index 1e2855c7c3..ab15cd3499 100644 --- a/NDTensors/src/lib/MetalExtensions/src/metal.jl +++ b/NDTensors/src/lib/MetalExtensions/src/metal.jl @@ -1,12 +1,12 @@ using NDTensors.TypeParameterAccessors: TypeParameterAccessors, Position using NDTensors.GPUArraysCoreExtensions: storagemode -# Implemented in `ITensorGPU` and NDTensorsMetalExt +# Implemented in NDTensorsMetalExt function mtl end ## Here we need an MtlArrayAdaptor because the MtlArrayAdaptor provided by Metal ## converts 64 bit numbers to 32 bit. We cannot write `adapt(MtlArray, x)` because this ## Will not allow us to properly utilize the buffer preference without changing the value of -## default_buffertype. Also `adapt(MtlArray{<:Any, <:Any, Buffertype})` fails to work properly +## default_buffertype. Also `adapt(MtlArray{<:Any, <:Any, Buffertype})` fails to work properly struct MtlArrayAdaptor{B} end diff --git a/docs/src/RunningOnGPUs.md b/docs/src/RunningOnGPUs.md index a527f2d655..e86f5af708 100644 --- a/docs/src/RunningOnGPUs.md +++ b/docs/src/RunningOnGPUs.md @@ -37,7 +37,7 @@ Bmtl = mtl(B) Amtl * Bmtl ``` -Note that we highly recommend using these new package extensions as opposed to [ITensorGPU.jl](https://github.com/ITensor/ITensors.jl/tree/main/ITensorGPU), which is ITensor's previous CUDA backend. The package extensions are better integrated into the main library so are more reliable and better supported right now. We plan to deprecate `ITensorGPU.jl` in the future. +Note that we highly recommend using these new package extensions as opposed to [ITensorGPU.jl](https://github.com/ITensor/ITensorGPU.jl), which is ITensor's previous CUDA backend. The package extensions are better integrated into the main library so are more reliable and better supported right now. We plan to deprecate `ITensorGPU.jl` in the future. ## GPU backends @@ -45,7 +45,7 @@ ITensor currently provides package extensions for the following GPU backends: * [CUDA.jl](https://github.com/JuliaGPU/CUDA.jl) (NVIDIA GPUs) -* [cuTENSOR.jl] (https://github.com/JuliaGPU/CUDA.jl/tree/master/lib/cutensor) (`CUDA.jl` extension providing accelerated binary tensor contractions) +* [cuTENSOR.jl] (https://github.com/JuliaGPU/CUDA.jl/tree/master/lib/cutensor) (`CUDA.jl` extension providing accelerated binary tensor contractions) * [Metal.jl](https://github.com/JuliaGPU/Metal.jl) (Apple GPUs) * [AMDGPU.jl](https://github.com/JuliaGPU/AMDGPU.jl) (AMD GPUs) From 45a9876edfa666d86414d0e6574d8db50f05a9f9 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 09:04:33 -0400 Subject: [PATCH 03/10] [ITensors] Bump to v0.5.5 [no ci] --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1766c6bd56..762b5136e9 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ITensors" uuid = "9136182c-28ba-11e9-034c-db9fb085ebd5" authors = ["Matthew Fishman ", "Miles Stoudenmire "] -version = "0.5.4" +version = "0.5.5" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" From 6fbbb95025126216204bd51dc9ecd4cb7e7e2034 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 10:27:07 -0400 Subject: [PATCH 04/10] [ITensorVisualizationBase] Move to separate repository (#1417) --- .../05_ITensorVisualizationBase_bug_report.md | 60 ----- ...TensorVisualizationBase_feature_request.md | 24 -- .../generate_issue_templates.jl | 14 +- .github/workflows/CompatHelper.yml | 2 +- .../workflows/test_itensorglmakie_ubuntu.yml | 2 +- .../test_itensorunicodeplots_ubuntu.yml | 45 ---- .../test_itensorvisualization_ubuntu.yml | 44 ---- .gitignore | 2 - ITensorVisualizationBase/.JuliaFormatter.toml | 2 - ITensorVisualizationBase/LICENSE | 21 -- ITensorVisualizationBase/NEWS.md | 61 ----- ITensorVisualizationBase/Project.toml | 33 --- ITensorVisualizationBase/README.md | 114 -------- .../assets/ITensorVisualization_A_B_C.png | Bin 64926 -> 0 bytes .../ITensorVisualization_A_B_C_sequence.png | Bin 93399 -> 0 bytes .../examples/ex_2d_tensor_network_layered.jl | 10 - ITensorVisualizationBase/examples/ex_dmrg.jl | 34 --- .../examples/ex_grid_layout.jl | 12 - .../examples/ex_itensor_graph_makie.jl | 9 - .../examples/ex_itensor_graph_unicode.jl | 9 - .../examples/ex_qn_mps.jl | 13 - .../examples/ex_quantum_circuit.jl | 32 --- .../examples/ex_visualize_3d.jl | 9 - .../examples/notest_ex_2d_circuit.jl | 26 -- .../examples/notest_ex_qft_circuit.jl | 22 -- .../src/ITensorVisualizationBase.jl | 64 ----- .../src/backends_interface.jl | 42 --- ITensorVisualizationBase/src/defaults.jl | 247 ------------------ .../src/experimental/spanning_trees/mst.jl | 71 ----- .../spanning_trees/shortest_path_tree.jl | 35 --- .../spanning_trees/spanning_tree.jl | 71 ----- ITensorVisualizationBase/src/graphs.jl | 11 - ITensorVisualizationBase/src/itensor_graph.jl | 113 -------- .../src/layered_layout.jl | 9 - ITensorVisualizationBase/src/visualize.jl | 245 ----------------- ITensorVisualizationBase/test/Project.toml | 7 - ITensorVisualizationBase/test/runtests.jl | 14 - ITensorVisualizationBase/test/test_basics.jl | 51 ---- .../test/test_examples.jl | 15 -- 39 files changed, 6 insertions(+), 1589 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_feature_request.md delete mode 100644 .github/workflows/test_itensorunicodeplots_ubuntu.yml delete mode 100644 .github/workflows/test_itensorvisualization_ubuntu.yml delete mode 100644 ITensorVisualizationBase/.JuliaFormatter.toml delete mode 100644 ITensorVisualizationBase/LICENSE delete mode 100644 ITensorVisualizationBase/NEWS.md delete mode 100644 ITensorVisualizationBase/Project.toml delete mode 100644 ITensorVisualizationBase/README.md delete mode 100644 ITensorVisualizationBase/assets/ITensorVisualization_A_B_C.png delete mode 100644 ITensorVisualizationBase/assets/ITensorVisualization_A_B_C_sequence.png delete mode 100644 ITensorVisualizationBase/examples/ex_2d_tensor_network_layered.jl delete mode 100644 ITensorVisualizationBase/examples/ex_dmrg.jl delete mode 100644 ITensorVisualizationBase/examples/ex_grid_layout.jl delete mode 100644 ITensorVisualizationBase/examples/ex_itensor_graph_makie.jl delete mode 100644 ITensorVisualizationBase/examples/ex_itensor_graph_unicode.jl delete mode 100644 ITensorVisualizationBase/examples/ex_qn_mps.jl delete mode 100644 ITensorVisualizationBase/examples/ex_quantum_circuit.jl delete mode 100644 ITensorVisualizationBase/examples/ex_visualize_3d.jl delete mode 100644 ITensorVisualizationBase/examples/notest_ex_2d_circuit.jl delete mode 100644 ITensorVisualizationBase/examples/notest_ex_qft_circuit.jl delete mode 100644 ITensorVisualizationBase/src/ITensorVisualizationBase.jl delete mode 100644 ITensorVisualizationBase/src/backends_interface.jl delete mode 100644 ITensorVisualizationBase/src/defaults.jl delete mode 100644 ITensorVisualizationBase/src/experimental/spanning_trees/mst.jl delete mode 100644 ITensorVisualizationBase/src/experimental/spanning_trees/shortest_path_tree.jl delete mode 100644 ITensorVisualizationBase/src/experimental/spanning_trees/spanning_tree.jl delete mode 100644 ITensorVisualizationBase/src/graphs.jl delete mode 100644 ITensorVisualizationBase/src/itensor_graph.jl delete mode 100644 ITensorVisualizationBase/src/layered_layout.jl delete mode 100644 ITensorVisualizationBase/src/visualize.jl delete mode 100644 ITensorVisualizationBase/test/Project.toml delete mode 100644 ITensorVisualizationBase/test/runtests.jl delete mode 100644 ITensorVisualizationBase/test/test_basics.jl delete mode 100644 ITensorVisualizationBase/test/test_examples.jl diff --git a/.github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_bug_report.md b/.github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_bug_report.md deleted file mode 100644 index bc7fc64162..0000000000 --- a/.github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_bug_report.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: ITensorVisualizationBase.jl bug report -about: Create a bug report to help us improve ITensorVisualizationBase.jl -title: "[ITensorVisualizationBase] [BUG] YOUR SHORT DESCRIPTION OF THE BUG HERE" -labels: ["ITensorVisualizationBase", "bug"] -assignees: '' - ---- - -**Description of bug** - -Please give a brief description of the bug or unexpected behavior here. - -**Minimal code demonstrating the bug or unexpected behavior** - -If applicable, provide a minimal code that can be run to demonstrate the bug or unexpected behavior. - -If you are unable to construct a minimal code that demonstrates the bug or unexpected behavior, provide detailed steps for how to reproduce the behavior you are seeing. - -
Minimal runnable code

- -```julia -[YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Expected output or behavior** - -Describe what you expected to happen. - -If you provided a minimal code that can be run to demonstrate the bug or unexpected behavior, describe what you expected the output would be. - - -**Actual output or behavior** - -Describe what actually happened. - -If you provided a minimal code that demonstrates the bug or unexpected behavior, provide the output you get from that code. If the code leads to an error or warning, include the full error or warning below. - -
Output of minimal runnable code

- -```julia -[OUTPUT OF YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Version information** - - - Output from `versioninfo()`: -```julia -julia> versioninfo() -[YOUR OUTPUT HERE] -``` - - Output from `using Pkg; Pkg.status("ITensors")`: -```julia -julia> using Pkg; Pkg.status("ITensors") -[YOUR OUTPUT HERE] -``` diff --git a/.github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_feature_request.md b/.github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_feature_request.md deleted file mode 100644 index 65142912b7..0000000000 --- a/.github/ISSUE_TEMPLATE/05_ITensorVisualizationBase_feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: ITensorVisualizationBase.jl feature request -about: Suggest an idea for ITensorVisualizationBase.jl -title: "[ITensorVisualizationBase] [ENHANCEMENT] YOUR SHORT DESCRIPTION OF THE FEATURE REQUEST HERE" -labels: ["ITensorVisualizationBase", "enhancement"] -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl index 3cf60fb500..6fb91c9288 100644 --- a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl +++ b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl @@ -3,21 +3,15 @@ using FileUtils template_package_name = "PACKAGE" package_names = [ - "ITensors", - "NDTensors", - "ITensorVisualizationBase", - "ITensorUnicodePlots", - "ITensorMakie", - "ITensorGLMakie", + "ITensors", "NDTensors", "ITensorUnicodePlots", "ITensorMakie", "ITensorGLMakie" ] package_ordering = Dict([ "ITensors" => 1, "NDTensors" => 2, - "ITensorVisualizationBase" => 3, - "ITensorUnicodePlots" => 4, - "ITensorMakie" => 5, - "ITensorGLMakie" => 6, + "ITensorUnicodePlots" => 3, + "ITensorMakie" => 4, + "ITensorGLMakie" => 5, ]) function bug_report_file(package_name::String) diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index 0f630e1060..49713602ee 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -12,4 +12,4 @@ jobs: - name: CompatHelper.main() env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "ITensorMakie", "ITensorUnicodePlots", "ITensorVisualizationBase", "NDTensors"])' + run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "ITensorMakie", "ITensorUnicodePlots", "NDTensors"])' diff --git a/.github/workflows/test_itensorglmakie_ubuntu.yml b/.github/workflows/test_itensorglmakie_ubuntu.yml index 0cee260fc4..bd51e2ae4e 100644 --- a/.github/workflows/test_itensorglmakie_ubuntu.yml +++ b/.github/workflows/test_itensorglmakie_ubuntu.yml @@ -46,4 +46,4 @@ jobs: - run: sudo apt-get update && sudo apt-get install -y xorg-dev mesa-utils xvfb libgl1 freeglut3-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev - name: Install Julia dependencies and run tests run: | - JULIA_REFERENCETESTS_UPDATE=true DISPLAY=:0 xvfb-run -s '-screen 0 1024x768x24' julia --depwarn=yes -e 'using Pkg; Pkg.activate(temp=true); Pkg.develop(path="./NDTensors"); Pkg.develop(path="."); Pkg.develop(path="./ITensorVisualizationBase"); Pkg.develop(path="./ITensorMakie"); Pkg.develop(path="./ITensorGLMakie"); Pkg.test("ITensorGLMakie")' + JULIA_REFERENCETESTS_UPDATE=true DISPLAY=:0 xvfb-run -s '-screen 0 1024x768x24' julia --depwarn=yes -e 'using Pkg; Pkg.activate(temp=true); Pkg.develop(path="./NDTensors"); Pkg.develop(path="."); Pkg.develop(path="./ITensorMakie"); Pkg.develop(path="./ITensorGLMakie"); Pkg.test("ITensorGLMakie")' diff --git a/.github/workflows/test_itensorunicodeplots_ubuntu.yml b/.github/workflows/test_itensorunicodeplots_ubuntu.yml deleted file mode 100644 index d496ca45c7..0000000000 --- a/.github/workflows/test_itensorunicodeplots_ubuntu.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Run ITensorUnicodePlots tests (Ubuntu) - -on: - push: - branches: - - main - tags: '*' - pull_request: - -jobs: - test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.threads }} thread(s) - runs-on: ${{ matrix.os }} - env: - JULIA_NUM_THREADS: ${{ matrix.threads }} - strategy: - matrix: - version: - - '1.6' - - '1' - os: - - ubuntu-latest - threads: - - '1' - arch: - - x64 - exclude: - # MacOS not available on x86 - - {os: 'macOS-latest', arch: 'x86'} - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - - name: Install Julia dependencies and run tests - shell: julia --depwarn=yes {0} - run: | - using Pkg; - Pkg.activate(temp=true); - Pkg.develop(path="./NDTensors"); - Pkg.develop(path="."); - Pkg.develop(path="./ITensorVisualizationBase"); - Pkg.develop(path="./ITensorUnicodePlots"); - Pkg.test("ITensorUnicodePlots") diff --git a/.github/workflows/test_itensorvisualization_ubuntu.yml b/.github/workflows/test_itensorvisualization_ubuntu.yml deleted file mode 100644 index 0c5ac112bc..0000000000 --- a/.github/workflows/test_itensorvisualization_ubuntu.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Run ITensorVisualizationBase tests (Ubuntu) - -on: - push: - branches: - - main - tags: '*' - pull_request: - -jobs: - test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.threads }} thread(s) - runs-on: ${{ matrix.os }} - env: - JULIA_NUM_THREADS: ${{ matrix.threads }} - strategy: - matrix: - version: - - '1.6' - - '1' - os: - - ubuntu-latest - threads: - - '1' - arch: - - x64 - exclude: - # MacOS not available on x86 - - {os: 'macOS-latest', arch: 'x86'} - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - - name: Install Julia dependencies and run tests - shell: julia --depwarn=yes {0} - run: | - using Pkg; - Pkg.activate(temp=true); - Pkg.develop(path="./NDTensors"); - Pkg.develop(path="."); - Pkg.develop(path="./ITensorVisualizationBase"); - Pkg.test("ITensorVisualizationBase") diff --git a/.gitignore b/.gitignore index 0cd5f1ab53..e63c617aef 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,6 @@ ITensorMakie/Manifest.toml ITensorMakie/test/Manifest.toml ITensorGLMakie/Manifest.toml ITensorGLMakie/test/Manifest.toml -ITensorVisualizationBase/Manifest.toml -ITensorVisualizationBase/test/Manifest.toml NDTensors/Manifest.toml NDTensors/test/Manifest.toml precompile/tmp diff --git a/ITensorVisualizationBase/.JuliaFormatter.toml b/ITensorVisualizationBase/.JuliaFormatter.toml deleted file mode 100644 index 08f664cdb9..0000000000 --- a/ITensorVisualizationBase/.JuliaFormatter.toml +++ /dev/null @@ -1,2 +0,0 @@ -style = "blue" -indent = 2 diff --git a/ITensorVisualizationBase/LICENSE b/ITensorVisualizationBase/LICENSE deleted file mode 100644 index d53452f0d9..0000000000 --- a/ITensorVisualizationBase/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Matthew Fishman and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/ITensorVisualizationBase/NEWS.md b/ITensorVisualizationBase/NEWS.md deleted file mode 100644 index 4426f5c097..0000000000 --- a/ITensorVisualizationBase/NEWS.md +++ /dev/null @@ -1,61 +0,0 @@ -This file is a (mostly) comprehensive list of changes made in each release of ITensorVisualizationBase.jl. For a completely comprehensive but more verbose list, see the [commit history on Github](https://github.com/ITensor/ITensors.jl/commits/main/ITensorVisualizationBase). - -While we are in v0.x of the package, we will follow the convention that updating from v0.x.y to v0.x.(y+1) (for example v0.1.15 to v0.1.16) should not break your code, unless you are using internal/undocumented features of the code, while updating from `v0.x.y` to `v0.(x+1).y` might break your code, though we will try to add deprecation warnings when possible, such as for simple cases where the name of a function changes. - -Note that as of Julia v1.5, in order to see deprecation warnings you will need to start Julia with `julia --depwarn=yes` (previously they were on by default). Please run your code like this before upgrading between minor versions of the code (for example from v0.1.41 to v0.2.0). - -After we release v1 of the package, we will start following [semantic versioning](https://semver.org). - -ITensors v0.1.5 Release Notes -============================= - -Bugs: - -Enhancements: - -- Bump to AbstractTrees 0.4 (#1031) - -ITensors v0.1.4 Release Notes -============================= - -Bugs: - -Enhancements: - -- Generalize edge labels for more general vertices (#907) - -ITensors v0.1.3 Release Notes -============================= - -Bugs: - -Enhancements: - -- Bump to ITensors 0.3 (#880) - -ITensors v0.1.2 Release Notes -============================= - -Bugs: - -Enhancements: - -- Remove subscript from single tensor visualization. Show plevs by default. (#841) - -ITensors v0.1.1 Release Notes -============================= - -Bugs: - -Enhancements: - -- Generalize `ITensorVisualizationBase.visualize` to make it easier to overload for new types (#802) - -ITensors v0.1.0 Release Notes -============================= - -Bugs: - -Enhancements: - -- Register ITensorVisualizationBase package, code in ITensors.jl repository diff --git a/ITensorVisualizationBase/Project.toml b/ITensorVisualizationBase/Project.toml deleted file mode 100644 index f19d74c181..0000000000 --- a/ITensorVisualizationBase/Project.toml +++ /dev/null @@ -1,33 +0,0 @@ -name = "ITensorVisualizationBase" -uuid = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" -authors = ["Matthew Fishman and contributors"] -version = "0.1.7" - -[deps] -AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -Compat = "34da2185-b29b-5c13-b0c7-acf172513d20" -GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -MetaGraphs = "626554b9-1ddb-594c-aa3c-2596fe9399a5" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[compat] -AbstractTrees = "0.4" -Compat = "3.40.0, 4" -GeometryBasics = "0.4.1" -Graphs = "1.4.1" -ITensors = "0.2.12, 0.3, 0.4, 0.5" -MetaGraphs = "0.7.1" -NetworkLayout = "0.4.3" -Statistics = "1" -julia = "1.6" - -[extras] -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[targets] -test = ["Test"] diff --git a/ITensorVisualizationBase/README.md b/ITensorVisualizationBase/README.md deleted file mode 100644 index 06d97ae558..0000000000 --- a/ITensorVisualizationBase/README.md +++ /dev/null @@ -1,114 +0,0 @@ -# ITensorVisualizationBase - -This is an internal package providing common code for defining backends for visualizing tensor network of ITensors. It is only an interface package, and does not provide concrete implementations of visualizing tensor network code (by default, it does nothing). You will need to load a visualization backend, such as `ITensorUnicodePlots` or `ITensorGLMakie`. The main purpose is to use it with the [ITensors.jl](https://github.com/ITensor/ITensors.jl) package to view and debug tensor network contractions, for example: -```julia -using ITensors - -# Load a visualization backend, which will reexport the interface -# of ITensorVisualizationBase automatically -using ITensorUnicodePlots - -# ITensorVisualizationBase handles the logic of switching -# between backends. -@show ITensorVisualizationBase.get_backend() - -i = Index(2, "i") -j = Index(10, "j") -k = Index(40, "k") -l = Index(40, "l") -m = Index(40, "m") -A = randomITensor(i, j, k) -B = randomITensor(i, j, l, m) -C = randomITensor(k, l) -ABC = @visualize A * B * C -``` -This will execute the contraction and output -```julia -ITensorVisualizationBase.get_backend() = ITensorVisualizationBase.Backend{:UnicodePlots}()⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀A⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⢱⠀⠀⠉⠉⠑⠒⠒⠤⠤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠤⠤40⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠒⠢⠤⠤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠒⠒⠢⠤⠤C⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀2⊗10⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔40⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀B⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀40⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -``` -You can show the visualization with tags with: -```julia -ABC = @visualize A * B * C edge_labels=(tags=true,) -``` -```julia - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀A⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⢱⠀⠀⠉⠉⠑⠒⠒⠤⠤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒(40|"k")⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠒⠢⠤⠤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠒⠒⠢⠤⠤C⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀(2|"i")⊗(10|"j")⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀(40|"l")⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀B⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀(40|"m")⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -``` - -In order to output a more sophisticated interactive visualization, -you can load a Makie-based backend called GLMakie: -```julia -using ITensorGLMakie - -ABC = @visualize A * B * C edge_labels=(tags=true,); -``` -A window like the following should appear: -![alt text](assets/ITensorVisualization_A_B_C.png) - -You can switch back to another backend like the following: -```julia -julia> ITensorVisualizationBase.set_backend!("UnicodePlots"); - -julia> ITensorVisualizationBase.get_backend() -ITensorVisualizationBase.Backend{:UnicodePlots}() - -julia> ABC = @visualize A * B * C edge_labels=(tags=true,) # The visualization will now use the UnicodePlots backend -[...] -``` -The visualization makes an initial guess for the locations of the tensors (using [NetworkLayout.jl](https://github.com/JuliaGraphs/NetworkLayout.jl)), and then allows users to interactively move the tensors to better locations. You can move the tensors and external indices (the square and circle nodes of the network) by left clicking on a node and dragging it to a new location. You can also right click and drag to translate the entire diagram, and scroll to zoom in and out. - -In addition, you can visualize multiple steps of a contraction as follows: -```julia -julia> ITensorVisualizationBase.set_backend!("Makie"); - -julia> ITensorVisualizationBase.get_backend() -ITensorVisualizationBase.Backend{:Makie}() - -julia> AB = @visualize fig A * B edge_labels=(tags=true,); - -julia> ABC = @visualize! fig[1, 2] AB * C edge_labels=(tags=true,); - -julia> fig -``` -![alt text](assets/ITensorVisualization_A_B_C_sequence.png) diff --git a/ITensorVisualizationBase/assets/ITensorVisualization_A_B_C.png b/ITensorVisualizationBase/assets/ITensorVisualization_A_B_C.png deleted file mode 100644 index c971d788c0cf77248cb8e6e746ea77460ab7aa95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64926 zcmbrmcRbeZ|2M8dB4n455;{W^LWGoLW$#%w*?TLJ6+*}gNwSl@Tc^GE?9ARId;ebV zQ`hHveedu6$M3%H^YOU4G@R%AIF8qNzMjwLAy8iS0TBTW0S*ohk)(u}A`Z^U1NaYx ze;odV64yTs{&&LuuB0+PKK{_C+%Nd;d58Pz4ocR>4$hD5jBre>tSybM*&Emy8Cltz zT01PCs1e4&xrievCaUa`urOlsDC+(W@9*8UpV9gjGXE z{4)C%q06O)cf65@gqLa6$yo=1z9&b&!>MO{oJ;-p>sLA`&turHlcVm<5+40&4xNWx+4h1qVRywmk+N>*#lfN{eYrvzC4c{p=NUB+^OUxI~#UeIEO6$vx(hY1TZknkBCDO-ctv#@k#6F4IdRyCifDwYRGN2s-t?$tFnD z{m^k5t{G`hPT|e4%bT^W^VF%^Lh6cE~~OjvygELulGmb>d73MIvv`( zG43CwlPP_iweu6!he_<(b_2Lo8YA&)@>|Op+y^T^7r60s27Z^vTvqtlN+&SaF>9}z zz{^(iiHLNuzt~8=M%X@vT`nzb*XroeOpnEx&C<%HnRsn%w|G|w&=HV!+~kw-c+$~$ zjPK_qmCVm8vxer2_s6Z>pNuv>xiWlLtV3d=HtRt(ucIc9#kRG%ciIb2$)5Jx&rRII+#*yqCn6O(?7zp* zrWY`HRH~9E&2`h32U~`gO1MzN6+Vm)ES7aEqG%VMK-2}bEhjw4U!Jp1jSyzu`(hjlxN*{wPb#j+hN9TGqNo|jG=s*L+yIP(E8E8|I%Pim9|`$)H1X_ z&&yaox#ZqfYT=R_6PZz$rZ#MQC=zIjc{{R7#ooAXck~^qYcoE7>=oyj?Vj}qI$MNheSlzMs-=6 zGu>+2WFyW2BN8xE|Mf($nn&XN0I{~-hI^nX8z>2;pJ*!yk`>FubX=FJw#*85%$**i^7aXncbJX5L9Pil$TvrlX4QV;vvDYF}m zW-I2yMizYScXj$_Nc8r;7Lw?C7}vhO;$)$X2?!H99Fq=2MM*7g*{>Y!KzsA#=e3bP zO`Hq9ygKeYOOavGOG7)~OQ^Mlwb`RRb|;6$J?uo&a~FJbyg4o$eNS9jLR7WcJNgayNtN-J(`W^1$E3xnHj_ zODp}sX}>rzK)`uEmrH|YrD4T%Z8vXfT^SUlfz0~P?z9Jl?OTmbXBgVGznKsC zXc=Qw#c_UZcPeS)pg2e20tZFlD&f%C@Vdz}_YFe+$ozedOzr6EfnUWc`-SEjyH+L% z_M^-ehOi4A5-y8sdOW@9DAT^sfOp{mL-S9vP5uI&jl$y2&6pxge703*=67*7 zJprZ~&pM)}8Uh#EX_lWt%*+eEY0@#R@qE^RQ3Rcr*f}{jclQIu-YEzl9XAdSqirsA z`;?l{h=vkLs@T&DAP%T_{75{hQyCx^VYoPN#J+}tbRw{Y6{+I*f{s@OWbX_6+S z_R;k>Eyh_raY@KaPhS32Qj&F%=0lc9-8{7nWv01Qygx*01& z70k@Z8O9d4`sWWjRd9!Cw|NnP-(7Yqm72ehu;pQE5XZASU!FKw5tDfEYru;0(_FQ;DkK68|=R-Rwmf1#VkXQE4S+otCt=1>L?4#2Qf#5lt-T9`*&TW><5Z{bDc;o+SMR(?H=`Xhr%E-6K6}Ud*gHK z!*7XhZ-pkT$1jhzA0!U#5|@p=7E$P4lt@<+>&|f}k-RZ)L`m+w@my%Zc$pW9ZO|Ncy7#ZDUG<|mG6)A=NPqejl|_ z^&NwM5-7$P9`Jp%zr>osTZ)~Eje>v!RjiqFo*vDPQq54t55k^DvSYo`>=Su5&I>#) z>z|oLa16#`0o_~SKmB$hF;KVLXJ7I zL4s*)b5}#&qF_K>Qd>bmK}E%=U?4#@y>8qrF1ddh3dKR{gD_)uU6x4rM%XW|*trE1 z@3}KHA$X!UuqRWj2=pP387;o*NJ!y=P$l3o z3kAiaJ}ri4EK);0yKi35Vde{iT$*B$ufEl8;fR$pKOH+NR6JFKC@8YQ5H{!J@yW@_ zJ=d{1s9#2TH1QA>?rGKq(i0kQl45RY4f<(@-S+y zbu@dgF`%N^>?__2pznTl?MnX~#^5qD8ac8!Ji|m5D4X6j>##UfG93o>)Rbp#b64mB zNloe-G#Ua97yax`a)ZxUP!PdE>79$OB$%}2n>h^inQzRaiq+X6zEBkZ#FqlBnfV=| zd!nGrmI@|EJ70fvZ*<&>e>t;e((S%ue}&ijU{q6}>BO7-{Z`9rp$1rW3R1wcdIqc9 zoewAogFJ0c9=6(icH-2Q5@WaoM@&KTn|ah!=vz2! zmdHR{v|1?Xm%|GSJ@@4#x3fH7`;M_S2kvumoPW&NG`Z#9+5!`h~W@w&HO z;;iQ3_o=BVN}lwELIoSUbMXsFP+9gHdZ9(93Jv)LskF}}-we6VpTYC}`pC$L**k$S z2vV@a)DWtieQ~pK0k*CDvvk=qPS3!Zce>NVZhb-wvhh1Zy?VSJx27`>Hzjh_l)s1R zd6ips$%#3PzZcw1>hrjaQTmRHrV38eDzVzjfb=D$Fma#|Oq8Xfs2g8d$a%#;!EoE< zy1~jGvQ}f;8zQLa2E)IfCaVRYnUWAUOk}(JookZoa4z3l&(BQ*Rpoka_j9RLEZa8O z^t`74?mj7MJD7KsY#s85f2Gde3(X;?*m8*G)@{L&AY8O;dO>TbJ{83S#_()BG{hgY z(z_{8{9a!5l5ciID%!SazWOlx!4V1Zbis@Rv*v6ae~1~|w63s{VGQ4DBR@>wdXfvJ zy-b&)jCj#~S1&C8XWyZ0{6LlER8(d9m1lP@Lbb9h8?aa!EMoI!4VQTS{V^4VARRFW zYRZ|yz3L}GgP!C!0b?truy&W*{>1cSVFk(RIjWFb9Bflad->ZvlY2}#(l|+VM2y#* z?;kFYk8MghEhemwb!}D(s2E(UA9Xt(+L#e0@_RS0hOFbEGsVNor9nE54{2wE(KJX3 z6`FOuK#u#-^?F?NLc+D&)Hk?jubP?$AN}~2Vw1KD2d~8#66j*Fh$lfv|=u)P>HpiB?mp@(tom6kT=Wda>pjjg=LDh{b!GZq1de!TVC2Y~8 z9oy8pdxKedjbh&tvfn%Y^3jiM=uVTSK0we8H_DhE$u9;9ll8kF07cT2c(xa;W9)uIn?=p&w89Jp;rT;rvyz2nnC;i5GO`lqUCE zm8^!n&CSdlJB4mA=bu>dii50)jyh17eH~KMAnqyW8OS`|(=`mh6Vgd@?_Nk?#Hy7Hc zN|$}aubjm<{im1QAvbk`P*`6au$(Qy$k7RYaIkKO;GBwPxV5)At-I83{fOLS z?q1E_Rx5Xy#X#w^02!+JZ+SK6+p~&BjJpYJL~TVyL#%#dJFJHMf?b)pGsV!N6BUL3 z_fbd(pcnyAF_HqeWsMO=um)7Ry=4B>R5%#3BF!i%zoQ6W zrRH#BK03*(a@zXx1@CPU&%A2c+#ZuzZUNTD=}KXv$;yG0N3Q}}=iR?9xURO%4hu^s z5q}oFcvd0}IsLds=re2T#el zP0WURo{~@X!XyQtr>b^$J`XIb(Xks{POS^^cAj%zyjFJWG2v%XCNiWgNkt_kx!zO3 zHsYf#n6%sWsAeGyN|c>G*x%h&Vn_9w@<4uB@UHrf?d^F`QOr9Cq$ysFk}4>B3&Z6=Rp9Ei>_2DI9CVm9zOE%S>7VAq z9(|)-5#R4Fa&)XPZ*YB3e~{lcZ2+Ges;_zue&ImLGLZo;sJM2ECZt?Dx3g36;I#x( zCOw7y139f6RVoVjM}Q!!?qk6U KGHD<80)Ew%c414CN-+I~A6<=!*8w(CI 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 QPbQs}l9x<4t#j{x0akK)2mk;8 diff --git a/ITensorVisualizationBase/assets/ITensorVisualization_A_B_C_sequence.png b/ITensorVisualizationBase/assets/ITensorVisualization_A_B_C_sequence.png deleted file mode 100644 index 2c37cd1c23b5ba0b6ae48be5e2ce23f311ebbb24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93399 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
ITqVxBcW)VDQ*iOuR$(9p#Dj=Z)ao-c8Tyq|3 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 WD>ZURCFv?LPLibT>Ex4_Z~s4H4^ip> diff --git a/ITensorVisualizationBase/examples/ex_2d_tensor_network_layered.jl b/ITensorVisualizationBase/examples/ex_2d_tensor_network_layered.jl deleted file mode 100644 index 8a652b8b43..0000000000 --- a/ITensorVisualizationBase/examples/ex_2d_tensor_network_layered.jl +++ /dev/null @@ -1,10 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using LayeredLayouts -using Graphs - -tn = itensornetwork(grid((4, 4)); linkspaces=3) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true layout = layout - -fig diff --git a/ITensorVisualizationBase/examples/ex_dmrg.jl b/ITensorVisualizationBase/examples/ex_dmrg.jl deleted file mode 100644 index f91751d730..0000000000 --- a/ITensorVisualizationBase/examples/ex_dmrg.jl +++ /dev/null @@ -1,34 +0,0 @@ -using ITensors -using ITensorVisualizationBase - -N = 10 -sites(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") -l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") -h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") -s⃗ = [sites(n) for n in 1:N] -l⃗ = [l(n) for n in 1:(N - 1)] -h⃗ = [h(n) for n in 1:(N - 1)] - -# Add some more indices between two of the tensors -x = Index([QN("Sz", 0) => 2]; tags="X") -y = Index([QN("Sz", 0) => 2]; tags="Y") - -n = 2 -ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) -hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) -hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) -ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) -ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - -edge_labels = (; plevs=true) - -R = @visualize fig1 ELn0 * ψn1n2 * hn1 * hn2 * ERn2 edge_labels = edge_labels vertex_size = - 50 -@show R ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - -# Split it up into multiple contractions -R1 = @visualize fig2 ELn0 * ψn1n2 * hn1 edge_labels = edge_labels vertex_size = 50 -R2 = @visualize fig3 R1 * hn2 * ERn2 edge_labels = edge_labels vertex_size = 50 -@show R2 ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - -fig1, fig2, fig3 diff --git a/ITensorVisualizationBase/examples/ex_grid_layout.jl b/ITensorVisualizationBase/examples/ex_grid_layout.jl deleted file mode 100644 index 9795c23484..0000000000 --- a/ITensorVisualizationBase/examples/ex_grid_layout.jl +++ /dev/null @@ -1,12 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using GeometryBasics -using Graphs -using NetworkLayout - -N = 10 -g = grid((N,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn siteinds_direction = Point(1, -0.5) layout = SquareGrid(; cols=1) width = - 20 height = 50 -fig diff --git a/ITensorVisualizationBase/examples/ex_itensor_graph_makie.jl b/ITensorVisualizationBase/examples/ex_itensor_graph_makie.jl deleted file mode 100644 index 802d0efa79..0000000000 --- a/ITensorVisualizationBase/examples/ex_itensor_graph_makie.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Graphs - -g = grid((5,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn - -fig diff --git a/ITensorVisualizationBase/examples/ex_itensor_graph_unicode.jl b/ITensorVisualizationBase/examples/ex_itensor_graph_unicode.jl deleted file mode 100644 index 802d0efa79..0000000000 --- a/ITensorVisualizationBase/examples/ex_itensor_graph_unicode.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Graphs - -g = grid((5,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn - -fig diff --git a/ITensorVisualizationBase/examples/ex_qn_mps.jl b/ITensorVisualizationBase/examples/ex_qn_mps.jl deleted file mode 100644 index 2aac387598..0000000000 --- a/ITensorVisualizationBase/examples/ex_qn_mps.jl +++ /dev/null @@ -1,13 +0,0 @@ -using ITensors -using ITensorVisualizationBase - -s = siteinds("S=1/2", 5; conserve_qns=true) -ψ = randomMPS(s, n -> isodd(n) ? "↑" : "↓"; linkdims=2) -orthogonalize!(ψ, 2) -ψdag = prime(linkinds, dag(ψ)) -tn = [ψ..., ψdag...] - -edge_labels = (; plevs=true, qns=true) -@visualize fig tn edge_labels = edge_labels edge_textsize = 20 - -fig diff --git a/ITensorVisualizationBase/examples/ex_quantum_circuit.jl b/ITensorVisualizationBase/examples/ex_quantum_circuit.jl deleted file mode 100644 index 7a48cf8efa..0000000000 --- a/ITensorVisualizationBase/examples/ex_quantum_circuit.jl +++ /dev/null @@ -1,32 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using LayeredLayouts -using Graphs - -N = 10 -layers = 10 -ndelete = 0 - -s = siteinds("Qubit", N) -layer(N, start) = [("CX", i, i + 1) for i in start:2:(N - 1)] -layer(N) = append!(layer(N, 1), layer(N, 2)) -layer_N = layer(N) -gates = [] -for _ in 1:layers - append!(gates, layer_N) -end - -for _ in 1:ndelete - deleteat!(gates, rand(eachindex(gates))) -end - -U, s̃ = circuit_network(gates, s) -ψ = prod(MPS(s)) -ψ̃ = prod(MPS(s̃)) -tn = [ψ, U..., ψ̃] - -edge_labels = (; plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels layout = layout - -fig diff --git a/ITensorVisualizationBase/examples/ex_visualize_3d.jl b/ITensorVisualizationBase/examples/ex_visualize_3d.jl deleted file mode 100644 index de6104927f..0000000000 --- a/ITensorVisualizationBase/examples/ex_visualize_3d.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Graphs - -tn = itensornetwork(grid((3, 3, 3))) -edge_labels = (; dims=false) -@visualize fig tn ndims = 3 edge_labels = edge_labels vertex_size = 400 - -fig diff --git a/ITensorVisualizationBase/examples/notest_ex_2d_circuit.jl b/ITensorVisualizationBase/examples/notest_ex_2d_circuit.jl deleted file mode 100644 index fe80995222..0000000000 --- a/ITensorVisualizationBase/examples/notest_ex_2d_circuit.jl +++ /dev/null @@ -1,26 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Graphs -using LayeredLayouts -using PastaQ: randomcircuit - -Nx, Ny = 3, 3 -N = Nx * Ny -# TODO: change to (Nx, Ny) with PastaQ v0.0.16 -gates = randomcircuit( - Nx, Ny; depth=4, twoqubitgates="CX", onequbitgates="Rn", layered=false, rotated=false -) - -s = siteinds("Qubit", N) - -U, s̃ = circuit_network(gates, s) -ψ = MPS(s) -ψ̃ = MPS(s̃) -tn = [prod(ψ), U..., prod(ψ̃)] - -edge_labels = (; plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels layout = layout edge_textsize = - 20 - -fig diff --git a/ITensorVisualizationBase/examples/notest_ex_qft_circuit.jl b/ITensorVisualizationBase/examples/notest_ex_qft_circuit.jl deleted file mode 100644 index f915c7bba8..0000000000 --- a/ITensorVisualizationBase/examples/notest_ex_qft_circuit.jl +++ /dev/null @@ -1,22 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Graphs -using LayeredLayouts -using PastaQ: qft - -N = 4 -gates = qft(N) - -s = siteinds("Qubit", N) - -U, s̃ = circuit_network(gates, s) -ψ = MPS(s) -ψ̃ = MPS(s̃) -tn = [ψ..., U..., ψ̃...] - -edge_labels = (; tags=true, plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels edge_textsize = 20 layout = - layout - -fig diff --git a/ITensorVisualizationBase/src/ITensorVisualizationBase.jl b/ITensorVisualizationBase/src/ITensorVisualizationBase.jl deleted file mode 100644 index 46c532544b..0000000000 --- a/ITensorVisualizationBase/src/ITensorVisualizationBase.jl +++ /dev/null @@ -1,64 +0,0 @@ -module ITensorVisualizationBase - -using AbstractTrees -using Compat -using GeometryBasics -using Graphs -using ITensors -using ITensors.ITensorVisualizationCore -using LinearAlgebra -using MetaGraphs -using NetworkLayout -using SparseArrays -using Statistics - -# Avoid conflict between `Graphs.contract` and `ITensors.contract` -using Graphs: - Graphs, - AbstractEdge, - AbstractGraph, - SimpleGraph, - SimpleDiGraph, - add_edge!, - add_vertex!, - all_neighbors, - dst, - edges, - ne, - neighbors, - nv, - src, - vertices - -using ITensors: data, QNIndex - -import ITensors.ITensorVisualizationCore: visualize, visualize!, visualize_sequence - -export @visualize, - @visualize!, - @visualize_noeval, - @visualize_noeval!, - @visualize_sequence, - @visualize_sequence_noeval, - circuit_network, - itensornetwork, - layered_layout, - IndexLabels - -# Some general graph functionality -include("graphs.jl") - -# Some general layout functionality -include("layered_layout.jl") - -# Backends interface -include("backends_interface.jl") -include("defaults.jl") - -# Conversion betweens graphs and ITensor networks -include("itensor_graph.jl") - -# Visualizing ITensor networks -include("visualize.jl") - -end diff --git a/ITensorVisualizationBase/src/backends_interface.jl b/ITensorVisualizationBase/src/backends_interface.jl deleted file mode 100644 index 9d2476d45a..0000000000 --- a/ITensorVisualizationBase/src/backends_interface.jl +++ /dev/null @@ -1,42 +0,0 @@ -struct Backend{backend} end - -Backend(b::Backend) = b -Backend(s::AbstractString) = Backend{Symbol(s)}() -Backend(s::Symbol) = Backend{s}() -Backend(s::Nothing) = Backend{s}() -backend(::Backend{N}) where {N} = N -Backend() = Backend{Symbol()}() - -macro Backend_str(s) - return Backend{Symbol(s)} -end - -const current_backend = Ref{Union{Nothing,Backend}}(nothing) - -visualize(::Backend{nothing}, args...; kwargs...) = nothing - -set_backend!(::Nothing) = (current_backend[] = nothing) -function set_backend!(backend::Backend) - original_backend = current_backend[] - current_backend[] = backend - return original_backend -end -set_backend!(backend::Union{Symbol,String}) = set_backend!(Backend(backend)) - -get_backend() = isnothing(current_backend[]) ? default_backend() : current_backend[] - -function plot(::Backend{T}, args...; kwargs...) where {T} - return error("plot not implemented for backend type $T.") -end -function draw_edge!(::Backend{T}, args...; kwargs...) where {T} - return error("draw_edge! not implemented for backend type $T.") -end -function annotate!(::Backend{T}, args...; kwargs...) where {T} - return error("annotate! not implemented for backend type $T.") -end - -function translate_color(::Backend{T}, color) where {T} - return error("translate_color not implemented for backend type $T and color $color") -end - -point_to_line(v1, v2) = ([v1[1], v2[1]], [v1[2], v2[2]]) diff --git a/ITensorVisualizationBase/src/defaults.jl b/ITensorVisualizationBase/src/defaults.jl deleted file mode 100644 index a43d72b59a..0000000000 --- a/ITensorVisualizationBase/src/defaults.jl +++ /dev/null @@ -1,247 +0,0 @@ -############################################################################# -# backend -# - -default_backend() = Backend(nothing) - -############################################################################# -# vertex labels -# - -function subscript_char(n::Integer) - @assert 0 ≤ n ≤ 9 - return Char(0x2080 + n) -end - -function subscript(n::Integer) - ss = prod(Iterators.reverse((subscript_char(d) for d in digits(abs(n))))) - if n < 0 - ss = "₋" * ss - end - return ss -end - -subscript(n) = string(n) - -default_vertex_labels_prefix(b::Backend, g) = "T" -function default_vertex_labels( - b::Backend, g::AbstractGraph, vertex_labels_prefix=default_vertex_labels_prefix(b) -) - return [string(vertex_labels_prefix, subscript(v)) for v in vertices(g)] -end - -default_vertex_size(b::Backend, g) = 60 -default_vertex_textsize(b::Backend, g) = 20 - -# TODO: customizable vertex marker -# nodeshapes="●", # ●, ▶, ◀, ■, █, ◩, ◪, ⧄, ⧅, ⦸, ⊘, ⬔, ⬕, ⬛, ⬤, 🔲, 🔳, 🔴, 🔵, ⚫ -# edgeshapes="—", # ⇵, ⇶, ⇄, ⇅, ⇆, ⇇, ⇈, ⇉, ⇊, ⬱, —, –, ⟵, ⟶, ➖, −, ➡, ⬅, ⬆, ⬇ - -############################################################################# -# edge labels -# - -default_edge_textsize(b::Backend) = 30 - -function default_edge_labels(b::Backend, g::AbstractGraph) - return fill("", ne(g)) -end - -function default_edge_labels(b::Backend, g::AbstractMetaGraph) - return IndexLabels(b) -end - -default_dims(b::Backend) = true -default_tags(b::Backend) = false -default_ids(b::Backend) = false -default_plevs(b::Backend) = true -default_qns(b::Backend) = false -default_newlines(b::Backend) = true - -abstract type AbstractEdgeLabels end - -(l::AbstractEdgeLabels)(g::AbstractGraph) = edge_labels(l, g) - -struct IndexLabels <: AbstractEdgeLabels - dims::Bool - tags::Bool - ids::Bool - plevs::Bool - qns::Bool - newlines::Bool -end - -IndexLabels(; kwargs...) = IndexLabels(Backend(); kwargs...) -IndexLabels(backend; kwargs...) = IndexLabels(Backend(backend); kwargs...) - -function IndexLabels( - b::Backend; - dims=default_dims(b), - tags=default_tags(b), - ids=default_ids(b), - plevs=default_plevs(b), - qns=default_qns(b), - newlines=default_newlines(b), -) - return IndexLabels(dims, tags, ids, plevs, qns, newlines) -end - -edge_labels(b::Backend, l::Vector{String}, g::AbstractGraph) = l - -function edge_labels(b::Backend, l::IndexLabels, g::AbstractGraph) - return edge_labels(l, g) -end - -function edge_labels(l::IndexLabels, g::AbstractGraph) - return String[edge_label(l, g, e) for e in edges(g)] -end - -function edge_labels(b::Backend, params::NamedTuple, g::AbstractGraph) - return IndexLabels(b; params...)(g) -end - -function edge_label(l::IndexLabels, g::AbstractMetaGraph, e) - indsₑ = get_prop(g, e, :inds) - return label_string( - indsₑ; - is_self_loop=is_self_loop(e), - dims=l.dims, - tags=l.tags, - ids=l.ids, - plevs=l.plevs, - qns=l.qns, - newlines=l.newlines, - ) -end - -function _edge_label(l, g::AbstractGraph, e) - return string(e) -end - -edge_label(l::IndexLabels, g::AbstractGraph, e) = _edge_label(l, g, e) -edge_label(l, g::AbstractGraph, e) = _edge_label(l, g, e) - -#function default_edge_labels(b::Backend, g; kwargs...) -# return [edge_label(g, e; kwargs...) for e in edges(g)] -#end - -plevstring(i::Index) = ITensors.primestring(plev(i)) -idstring(i::Index) = string(id(i) % 1000) -tagsstring(i::Index) = string(tags(i)) -qnstring(i::Index) = "" -function qnstring(i::QNIndex) - str = "[" - for (n, qnblock) in pairs(space(i)) - str *= "$qnblock" - if n ≠ lastindex(space(i)) - str *= ", " - end - end - str *= "]" - if dir(i) == ITensors.In - str *= "†" - end - return str -end - -function label_string(i::Index; dims, tags, plevs, ids, qns) - showing_plev = plevs && (plev(i) > 0) - - str = "" - if any((tags, showing_plev, ids, qns)) - str *= "(" - end - if dims - str *= string(dim(i)) - end - if ids - if dims - str *= "|" - end - str *= idstring(i) - end - if tags - if any((dims, ids)) - str *= "|" - end - str *= tagsstring(i) - end - if any((tags, showing_plev, ids, qns)) - str *= ")" - end - if plevs - str *= plevstring(i) - end - if qns - str *= qnstring(i) - end - return str -end - -function label_string(is; is_self_loop=false, dims, tags, plevs, ids, qns, newlines) - str = "" - for n in eachindex(is) - str *= label_string(is[n]; dims=dims, tags=tags, plevs=plevs, ids=ids, qns=qns) - if n ≠ lastindex(is) - if any((dims, tags, ids, qns)) - str *= "⊗" - end - if newlines && any((tags, ids, qns)) - str *= "\n" - end - end - end - return str -end - -############################################################################# -# edge width -# - -function width(inds) - return log2(dim(inds)) + 1 -end - -function default_edge_widths(b::Backend, g::AbstractMetaGraph) - return Float64[width(get_prop(g, e, :inds)) for e in edges(g)] -end - -function default_edge_widths(b::Backend, g::AbstractGraph) - return fill(one(Float64), ne(g)) -end - -############################################################################# -# arrow -# - -default_arrow_size(b::Backend, g) = 30 - -_hasqns(tn::Vector{ITensor}) = any(hasqns, tn) - -function _hasqns(g::AbstractMetaGraph) - if iszero(ne(g)) - if has_prop(g, first(vertices(g)), :inds) - return hasqns(get_prop(g, first(vertices(g)), :inds)) - else - return hasqns(()) - end - end - return hasqns(get_prop(g, first(edges(g)), :inds)) -end - -_hasqns(g::AbstractGraph) = false - -default_arrow_show(b::Backend, g) = _hasqns(g) - -############################################################################# -# self-loop/siteinds direction -# - -default_siteinds_direction(b::Backend, g) = Point2(0, -1) - -############################################################################# -# dimensions -# - -_ndims(::Any) = 2 -_ndims(::NetworkLayout.AbstractLayout{N}) where {N} = N diff --git a/ITensorVisualizationBase/src/experimental/spanning_trees/mst.jl b/ITensorVisualizationBase/src/experimental/spanning_trees/mst.jl deleted file mode 100644 index fa3e278c47..0000000000 --- a/ITensorVisualizationBase/src/experimental/spanning_trees/mst.jl +++ /dev/null @@ -1,71 +0,0 @@ -using Graphs, SimpleWeightedGraphs -using GraphRecipes, Plots - -#spanning_tree_method = "mst" -spanning_tree_method = "bfs" - -nx, ny = 7, 7 -n = nx * ny -g = Graphs.grid((nx, ny); periodic=false) - -nx_middle = nx ÷ 2 + 1 -ny_middle = ny ÷ 2 + 1 -n_middle = LinearIndices((nx, ny))[nx_middle, ny_middle] - -vert_names = string.(vertices(g)) -dist = gdistances(g, n_middle) -#names = string.(vert_names, ", ", dist) -names = dist - -wg = SimpleWeightedGraph(nv(g)) - -for e in edges(g) - dw = mean([dist[src(e)], dist[dst(e)]]) - w = 1 / dw^2 + eps() * randn() - add_edge!(wg, src(e), dst(e), w) -end - -g_st = if spanning_tree_method == "mst" - # mst_function = boruvka_mst - mst_function = kruskal_mst - mst_weight = mst_function(wg; minimize=false) - mst = mst_function == boruvka_mst ? mst_weight.mst : mst_weight - g_mst = SimpleWeightedGraph(nv(wg)) - for ew in mst - add_edge!(g_mst, src(ew), dst(ew), weight(ew)) - end - g_mst -elseif spanning_tree_method == "bfs" - # Weights are set to 1 - SimpleWeightedGraph(dfs_tree(wg, n_middle)) -end - -edgelabel_dict = Dict{Tuple{Int,Int},String}() -for ew in edges(wg) - edgelabel_dict[(src(ew), dst(ew))] = string(round(weight(ew); digits=2)) -end - -edgecolor_dict = Dict() -for ew in edges(wg) - color = ew ∈ edges(g_st) ? :black : :red - edgecolor_dict[(src(ew), dst(ew))] = color -end - -edgelabel_dict_mst = Dict() -for i in vertices(g_st), j in vertices(g_st) - edgelabel_dict_mst[(i, j)] = string(round(get_weight(g_st, i, j); digits=2)) -end - -plt = graphplot( - wg; - markersize=0.3, - names=names, - edgelabel=edgelabel_dict, - curves=false, - edgecolor=edgecolor_dict, - linewidth=20, - fontsize=20, - size=(3000, 3000), -) - -plt diff --git a/ITensorVisualizationBase/src/experimental/spanning_trees/shortest_path_tree.jl b/ITensorVisualizationBase/src/experimental/spanning_trees/shortest_path_tree.jl deleted file mode 100644 index 0cfb3a7f86..0000000000 --- a/ITensorVisualizationBase/src/experimental/spanning_trees/shortest_path_tree.jl +++ /dev/null @@ -1,35 +0,0 @@ -using Graphs -using Random - -Random.seed!(1234) - -function dijkstra_spt(g, v_src_initial) - out = dijkstra_shortest_paths(g, [v_src_initial]; allpaths=true, trackvertices=true) - paths = out.predecessors - edges = Edge{Int}[] - for v_dst_final in eachindex(paths) - v_src = v_src_initial - p = paths[v_dst_final] - @show v_src_initial, p, v_dst_final - for v_src in p - push!(edges, Edge(v_src => v_dst_final)) - end - end - return edges -end - -g = Graph(6, 10) - -@show collect(edges(g)) - -t_mst = kruskal_mst(g) - -@show t_mst - -t_bfs = bfs_tree(g, 1) - -@show collect(edges(t_bfs)) - -t_spt = dijkstra_spt(g, 1) - -@show t_spt diff --git a/ITensorVisualizationBase/src/experimental/spanning_trees/spanning_tree.jl b/ITensorVisualizationBase/src/experimental/spanning_trees/spanning_tree.jl deleted file mode 100644 index 1efc9716ce..0000000000 --- a/ITensorVisualizationBase/src/experimental/spanning_trees/spanning_tree.jl +++ /dev/null @@ -1,71 +0,0 @@ -using Graphs, SimpleWeightedGraphs -using GraphRecipes, Plots - -#spanning_tree_method = "mst" -spanning_tree_method = "bfs" - -nx, ny = 7, 7 -n = nx * ny -g = Graphs.grid((nx, ny); periodic=false) - -nx_middle = 1 #nx ÷ 2 + 1 -ny_middle = 1 #ny ÷ 2 + 1 -n_middle = LinearIndices((nx, ny))[nx_middle, ny_middle] - -vert_names = string.(vertices(g)) -dist = gdistances(g, n_middle) -#names = string.(vert_names, ", ", dist) -names = dist - -wg = SimpleWeightedGraph(nv(g)) - -for e in edges(g) - dw = mean([dist[src(e)], dist[dst(e)]]) - w = 1 / dw^2 + eps() * randn() - add_edge!(wg, src(e), dst(e), w) -end - -g_st = if spanning_tree_method == "mst" - # mst_function = boruvka_mst - mst_function = kruskal_mst - mst_weight = mst_function(wg; minimize=false) - mst = mst_function == boruvka_mst ? mst_weight.mst : mst_weight - g_mst = SimpleWeightedGraph(nv(wg)) - for ew in mst - add_edge!(g_mst, src(ew), dst(ew), weight(ew)) - end - g_mst -elseif spanning_tree_method == "bfs" - # Weights are set to 1 - SimpleWeightedGraph(bfs_tree(wg, n_middle)) -end - -edgelabel_dict = Dict{Tuple{Int,Int},String}() -for ew in edges(wg) - edgelabel_dict[(src(ew), dst(ew))] = string(round(weight(ew); digits=2)) -end - -edgecolor_dict = Dict() -for ew in edges(wg) - color = ew ∈ edges(g_st) ? :black : :red - edgecolor_dict[(src(ew), dst(ew))] = color -end - -edgelabel_dict_mst = Dict() -for i in vertices(g_st), j in vertices(g_st) - edgelabel_dict_mst[(i, j)] = string(round(get_weight(g_st, i, j); digits=2)) -end - -plt = graphplot( - wg; - markersize=0.3, - names=names, - edgelabel=edgelabel_dict, - curves=false, - edgecolor=edgecolor_dict, - linewidth=20, - fontsize=20, - size=(3000, 3000), -) - -plt diff --git a/ITensorVisualizationBase/src/graphs.jl b/ITensorVisualizationBase/src/graphs.jl deleted file mode 100644 index 84461d4d98..0000000000 --- a/ITensorVisualizationBase/src/graphs.jl +++ /dev/null @@ -1,11 +0,0 @@ -""" - Grid - -Gride layout. -""" -struct Grid end - -(::Grid)(g) = Point.(5 .* (vertices(g) .- 1), 0) - -is_self_loop(e::AbstractEdge) = src(e) == dst(e) -any_self_loops(g::AbstractGraph) = any(is_self_loop, edges(g)) diff --git a/ITensorVisualizationBase/src/itensor_graph.jl b/ITensorVisualizationBase/src/itensor_graph.jl deleted file mode 100644 index 6a1df81424..0000000000 --- a/ITensorVisualizationBase/src/itensor_graph.jl +++ /dev/null @@ -1,113 +0,0 @@ -# -# Conversion between Graphs and ITensor networks -# - -hasuniqueinds(args...; kwargs...) = !isempty(uniqueinds(args...; kwargs...)) - -function graph_dir(inds) - dirs = dir.(inds) - if length(dirs) == 1 - return only(dirs) - end - if all(==(dirs[1]), dirs) - return dirs[1] - end - return ITensors.Out -end - -# TODO: rename graph, dispatch on QNs to DiGraph -function Graphs.SimpleDiGraph(tn::Vector{ITensor}) - nv = length(tn) - g = SimpleDiGraph(nv) - for v1 in 1:nv, v2 in (v1 + 1):nv - indsᵛ¹ᵛ² = commoninds(tn[v1], tn[v2]) - if !isempty(commoninds(tn[v1], tn[v2])) - e = v1 => v2 - if graph_dir(indsᵛ¹ᵛ²) == ITensors.In - e = reverse(e) - end - add_edge!(g, e) - end - end - for v in vertices(g) - if hasuniqueinds(tn[v], tn[all_neighbors(g, v)]...) - # Add a self-loop - add_edge!(g, v => v) - end - end - return g -end - -# TODO: rename indsgraph, dispatch on QNs to DiGraph -function MetaGraphs.MetaDiGraph(tn::Vector{ITensor}) - sg = SimpleDiGraph(tn) - mg = MetaDiGraph(sg) - for e in edges(mg) - indsₑ = if is_self_loop(e) - v = src(e) - # For self edges, the vertex itself is included as - # a neighbor so we must exclude it. - uniqueinds(tn[v], tn[setdiff(all_neighbors(mg, v), v)]...) - else - commoninds(tn[src(e)], tn[dst(e)]) - end - set_prop!(mg, e, :inds, indsₑ) - end - return mg -end - -default_linkspaces() = 1 -default_sitespaces() = 1 - -default(x, x_default) = x -default(x::Nothing, x_default) = x_default - -function itensornetwork( - g::AbstractGraph; linkspaces=default_linkspaces(), sitespaces=nothing -) - N = nv(g) - if !isnothing(sitespaces) && !any_self_loops(g) - g = copy(g) - for v in vertices(g) - add_edge!(g, v => v) - end - end - sitespaces = default(sitespaces, default_sitespaces()) - # TODO: Specialize to Index{typeof(linkspaces)} - inds_network = [Index[] for _ in 1:N] - for e in edges(g) - if !is_self_loop(e) - lₑ = Index(linkspaces; tags="l=$(src(e))↔$(dst(e))") - push!(inds_network[src(e)], lₑ) - push!(inds_network[dst(e)], dag(lₑ)) - else - sₑ = Index(sitespaces; tags="s=$(src(e))") - push!(inds_network[src(e)], sₑ) - end - end - tn = Vector{ITensor}(undef, N) - for n in 1:N - tn[n] = ITensor(inds_network[n]) - end - return tn -end - -sites(g::Tuple{String,<:Tuple}) = g[2] -sites(g::Tuple{String,<:Tuple,<:NamedTuple}) = g[2] -sites(g::Tuple{String,Int}) = g[2] -sites(g::Tuple{String,Vararg{Int}}) = Base.tail(g) -sites(g::Tuple{String,Int,<:NamedTuple}) = g[2] - -# Functionality for turning a list of gates into an ITensor -# network. -function circuit_network(gates, s::Vector{<:Index}) - s = copy(s) - U = ITensor[] - for g in gates - push!(U, op(g, s)) - for n in sites(g) - s[n] = s[n]' - end - end - return U, s -end diff --git a/ITensorVisualizationBase/src/layered_layout.jl b/ITensorVisualizationBase/src/layered_layout.jl deleted file mode 100644 index 05bb134fee..0000000000 --- a/ITensorVisualizationBase/src/layered_layout.jl +++ /dev/null @@ -1,9 +0,0 @@ -# Use like this: -# -# using LayeredLayouts -# layout(g) = layered_layout(solve_positions(Zarate(), g)) -# -function layered_layout(pos) - xs, ys, _ = pos - return Point.(zip(xs, ys)) -end diff --git a/ITensorVisualizationBase/src/visualize.jl b/ITensorVisualizationBase/src/visualize.jl deleted file mode 100644 index 4d0838290b..0000000000 --- a/ITensorVisualizationBase/src/visualize.jl +++ /dev/null @@ -1,245 +0,0 @@ -# -# Contraction sequence -# - -# Tools for contracting a network with a sequence -function _contract(label1::String, label2::String) - return string("(", label1, "*", label2, ")") -end - -function _contract(tensor1::ITensor, tensor2::ITensor) - indsR = noncommoninds(tensor1, tensor2) - return isempty(indsR) ? ITensor() : ITensor(indsR) -end - -sequence_traversal(sequence) = reverse(collect(StatelessBFS(sequence))) - -function contract_dict(tensors, sequence, traversal=sequence_traversal(sequence)) - net_tensors = Dict() - traversal = reverse(collect(StatelessBFS(sequence))) - for net in traversal - if net isa Int - net_tensors[net] = tensors[net] - else # net isa Vector - net_tensors[net] = _contract(net_tensors[net[1]], net_tensors[net[2]]) - end - end - return net_tensors -end - -# Return all of the contractions involved in the sequence. -function contraction_sequence( - tensors, - sequence, - traversal=sequence_traversal(sequence), - contract_dict=contract_dict(tensors, sequence, traversal), -) - all_tensors = Any[] - tensors_1 = Vector{Union{Nothing,eltype(tensors)}}(tensors) - net_position = Dict() - N = length(tensors) - n = N + 1 - for net in traversal - if net isa Int - net_position[net] = net - else - net_position[net] = n - n += 1 - end - if !isa(net, Int) - for n in net - tensors_1[net_position[n]] = nothing - end - push!(tensors_1, contract_dict[net]) - push!(all_tensors, copy(tensors_1)) - end - end - return convert.(Vector{eltype(tensors)}, filter.(!isnothing, all_tensors)) -end - -# -# Convert a tree to a graph -# - -struct Tree - x::Any -end -function Base.getindex(tree::Tree, indices) - node = tree.x - for idx in indices - node = children(node)[idx] - end - return node -end - -tree_to_graph(tr) = tree_to_graph(Tree(tr)) - -function tree_to_graph(tr::Tree) - g = SimpleDiGraph() - labels = Any[] - walk_tree!(g, labels, tr) - return (g, labels) -end - -function walk_tree!(g, labels, tr::Tree) - add_vertex!(g) - top_vertex = vertices(g)[end] - push!(labels, tr.x) - for i in 1:length(tr.x) - if isa(tr[i], Vector) - child = walk_tree!(g, labels, Tree(tr[i])) - add_edge!(g, child, top_vertex) - else - add_vertex!(g) - n = vertices(g)[end] - add_edge!(g, n, top_vertex) - push!(labels, tr[i]) - end - end - return top_vertex -end - -# Visualization function interface. Ultimately calls a beckend. - -function visualize(g::AbstractGraph, sequence=nothing; backend=get_backend(), kwargs...) - # TODO: do something with the sequence (show sequence, add labels indicating sequence, etc.) - return visualize(Backend(backend), g; kwargs...) -end - -function visualize(tn::Vector{ITensor}, sequence=nothing; kwargs...) - return visualize(MetaDiGraph(tn), sequence; kwargs...) -end - -function visualize(tn::Tuple{Vector{ITensor}}, args...; kwargs...) - return visualize(only(tn), args...; kwargs...) -end -visualize(ψ::MPS, args...; kwargs...) = visualize(data(ψ), args...; kwargs...) -function visualize(tn::Tuple{ITensor,Vararg{ITensor}}, args...; kwargs...) - return visualize(collect(tn), args...; kwargs...) -end -function visualize(t1::ITensor, tn_tail::ITensor...; kwargs...) - return visualize([t1, tn_tail...]; kwargs...) -end - -# Special case single ITensor -function visualize(t::ITensor, sequence=nothing; vertex_labels_prefix, kwargs...) - tn = [t] - vertex_labels = [vertex_labels_prefix] - return visualize(MetaDiGraph(tn), sequence; vertex_labels=vertex_labels, kwargs...) -end - -# Special case single ITensor -function visualize(tn::Tuple{ITensor}, args...; kwargs...) - return visualize(only(tn), args...; kwargs...) -end - -function visualize!(fig, g::AbstractGraph; backend=get_backend(), kwargs...) - return visualize!(Backend(backend), fig, g; kwargs...) -end - -function visualize!(fig, tn::Vector{ITensor}, sequence=nothing; kwargs...) - return visualize!(fig, MetaDiGraph(tn); kwargs...) -end -visualize!(fig, ψ::MPS, sequence=nothing; kwargs...) = visualize!(fig, data(ψ); kwargs...) -function visualize!(fig, tn::Tuple{Vararg{ITensor}}, sequence=nothing; kwargs...) - return visualize!(fig, collect(tn); kwargs...) -end -visualize!(fig, tn::ITensor...; kwargs...) = visualize!(fig, collect(tn); kwargs...) - -function visualize!(fig, tn::Tuple{Vector{ITensor}}, sequence=nothing; kwargs...) - return visualize!(fig, tn[1], sequence; kwargs...) -end -function visualize!( - fig, f::Function, tn::Tuple{Vararg{ITensor}}, sequence=nothing; kwargs... -) - return visualize!(fig, tn, sequence; kwargs...) -end - -# Macro outputs a 1-tuple of the function arguments -function visualize(f::Union{Function,Type}, tn::Tuple{T}, sequence; kwargs...) where {T} - # TODO: specialize on the function type. Also accept a general collection. - return visualize(only(tn), sequence; kwargs...) -end - -# Macro outputs a tuple of ITensors to visualize -function visualize(f::Union{Function,Type}, tn::Tuple{Vararg{ITensor}}, sequence; kwargs...) - # TODO: specialize on the function type. Also accept a general collection. - return visualize(tn, sequence; kwargs...) -end - -function visualize!(fig, f::Union{Function,Type}, As...; kwargs...) - # TODO: specialize of the function type. Also accept a general collection. - return visualize!(fig, As...; kwargs...) -end - -function _visualize_sequence!(fig, tn, sequence, n; kwargs...) - return error("Not implemented") -end - -function sequence_labels(sequence, all_sequences, vertex_labels) - traversal = sequence_traversal(sequence) - labels_dict = contract_dict(vertex_labels, sequence, traversal) - all_labels = [labels_dict[s] for s in all_sequences] - return all_labels -end - -function _graphplot(backend::Backend, graph; all_labels) - return error("Not implemented for backend $backend.") -end - -function visualize_sequence(sequence, vertex_labels) - graph, all_sequences = tree_to_graph(sequence) - all_labels = sequence_labels(sequence, all_sequences, vertex_labels) - fig = _graphplot(Backend"Makie"(), graph; all_labels=all_labels) - return fig -end - -function default_sequence(tn::Vector{ITensor}) - N = length(tn) - return foldl((x, y) -> [x, y], 1:N) -end - -function visualize_sequence( - f::Union{Function,Type}, tn::Vector{ITensor}, sequence::Nothing; kwargs... -) - return visualize_sequence(f, tn, default_sequence(tn); kwargs...) -end - -function visualize_sequence( - f::Union{Function,Type}, tn::Vector{ITensor}, sequence=default_sequence(tn); kwargs... -) - N = length(tn) - - # TODO: clean this up a bit - vertex_labels_prefix = get( - kwargs, - :vertex_labels_prefix, - default_vertex_labels_prefix(Backend("Makie"), MetaDiGraph(tn)), - ) - vertex_labels = get( - kwargs, - :vertex_labels, - default_vertex_labels(Backend(""), MetaDiGraph(tn), vertex_labels_prefix), - ) - - fig = visualize_sequence(sequence, vertex_labels) - - visualize!(fig[1, 2], tn; vertex_labels=vertex_labels, kwargs...) - - traversal = sequence_traversal(sequence) - labels_sequence = contraction_sequence(vertex_labels, sequence, traversal) - - tn_sequence = contraction_sequence(tn, sequence, traversal) - - for n in 1:length(tn_sequence) - visualize!(fig[1, n + 2], tn_sequence[n]; vertex_labels=labels_sequence[n], kwargs...) - end - - return fig -end - -function visualize_sequence( - f::Union{Function,Type}, tn::Tuple{Vector{ITensor}}, sequence; kwargs... -) - return visualize_sequence(f, tn[1], sequence; kwargs...) -end diff --git a/ITensorVisualizationBase/test/Project.toml b/ITensorVisualizationBase/test/Project.toml deleted file mode 100644 index e8f5256f3b..0000000000 --- a/ITensorVisualizationBase/test/Project.toml +++ /dev/null @@ -1,7 +0,0 @@ -[deps] -GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LayeredLayouts = "f4a74d36-062a-4d48-97cd-1356bad1de4e" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/ITensorVisualizationBase/test/runtests.jl b/ITensorVisualizationBase/test/runtests.jl deleted file mode 100644 index 715d7ac85c..0000000000 --- a/ITensorVisualizationBase/test/runtests.jl +++ /dev/null @@ -1,14 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Test - -starts_and_ends_with(file, st, en) = startswith(file, st) && endswith(file, en) -starts_and_ends_with(st, en) = file -> starts_and_ends_with(file, st, en) - -test_path = joinpath(@__DIR__) -test_files = filter(starts_and_ends_with("test_", ".jl"), readdir(test_path)) -@testset "ITensorVisualizationBase.jl" for file in test_files - file_path = joinpath(test_path, file) - println("Running test $(file_path)") - include(file_path) -end diff --git a/ITensorVisualizationBase/test/test_basics.jl b/ITensorVisualizationBase/test/test_basics.jl deleted file mode 100644 index 7530dda710..0000000000 --- a/ITensorVisualizationBase/test/test_basics.jl +++ /dev/null @@ -1,51 +0,0 @@ -using ITensors -using ITensorVisualizationBase -using Test - -@testset "Basic tests without any backend" begin - N = 10 - s(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") - l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") - h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") - s⃗ = [s(n) for n in 1:N] - l⃗ = [l(n) for n in 1:(N - 1)] - h⃗ = [h(n) for n in 1:(N - 1)] - - # Add some more indices between two of the tensors - x = Index([QN("Sz", 0) => 2]; tags="X") - y = Index([QN("Sz", 0) => 2]; tags="Y") - - n = 2 - ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) - hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) - hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) - ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) - ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - - tn = [ELn0, ψn1n2, hn1, hn2, ERn2] - - R = @visualize ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize ELn0 * ψn1n2 * hn1 - R2 = @visualize R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - tn2 = @visualize tn - T = @visualize ELn0 - - @test R ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - @test R1 ≈ ELn0 * ψn1n2 * hn1 - @test R2 ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - @test all(tn .== tn2) - @test T == ELn0 - - R = @visualize figR ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize figR1 ELn0 * ψn1n2 * hn1 - R2 = @visualize figR2 R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - T = @visualize figT T - - fig_tn = @visualize_noeval tn - - @test isnothing(figR) - @test isnothing(figR1) - @test isnothing(figR2) - @test isnothing(fig_tn) - @test isnothing(figT) -end diff --git a/ITensorVisualizationBase/test/test_examples.jl b/ITensorVisualizationBase/test/test_examples.jl deleted file mode 100644 index a406959f02..0000000000 --- a/ITensorVisualizationBase/test/test_examples.jl +++ /dev/null @@ -1,15 +0,0 @@ -using Test - -@testset "Examples" begin - examples_path = joinpath(@__DIR__, "..", "examples") - example_files = filter(starts_and_ends_with("ex_", ".jl"), readdir(examples_path)) - for file in example_files - file_path = joinpath(examples_path, file) - println("Testing file $(file_path)") - empty!(ARGS) - push!(ARGS, "false") - res = include(file_path) - @test isnothing(res) || all(isnothing, res) - empty!(ARGS) - end -end From 406fe9506cbf96bd83d8b9dd2c6a8cf2ea64d79d Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 11:34:13 -0400 Subject: [PATCH 05/10] [ITensorUnicodePlots] Move to separate repository (#1419) --- .../06_ITensorUnicodePlots_bug_report.md | 60 ------ .../06_ITensorUnicodePlots_feature_request.md | 24 --- .../generate_issue_templates.jl | 10 +- .github/workflows/CompatHelper.yml | 2 +- .gitignore | 2 - ITensorUnicodePlots/.JuliaFormatter.toml | 2 - ITensorUnicodePlots/LICENSE | 201 ------------------ ITensorUnicodePlots/NEWS.md | 35 --- ITensorUnicodePlots/Project.toml | 28 --- .../examples/ex_2d_tensor_network_layered.jl | 10 - ITensorUnicodePlots/examples/ex_dmrg.jl | 34 --- .../examples/ex_grid_layout.jl | 13 -- .../examples/ex_itensor_graph_unicode.jl | 9 - ITensorUnicodePlots/examples/ex_qn_mps.jl | 13 -- .../examples/ex_quantum_circuit.jl | 33 --- .../examples/notest_ex_qft_circuit.jl | 22 -- .../src/ITensorUnicodePlots.jl | 148 ------------- ITensorUnicodePlots/test/Project.toml | 8 - ITensorUnicodePlots/test/references/R.png | Bin 64463 -> 0 bytes ITensorUnicodePlots/test/references/R.txt | 22 -- ITensorUnicodePlots/test/references/R1.png | Bin 46335 -> 0 bytes ITensorUnicodePlots/test/references/R1.txt | 22 -- ITensorUnicodePlots/test/references/R2.png | Bin 42975 -> 0 bytes ITensorUnicodePlots/test/references/R2.txt | 22 -- .../test/references/R_tags.txt | 22 -- ITensorUnicodePlots/test/references/T.txt | 22 -- ITensorUnicodePlots/test/references/grid.png | Bin 135131 -> 0 bytes ITensorUnicodePlots/test/references/tn.png | Bin 62930 -> 0 bytes ITensorUnicodePlots/test/references/tn.txt | 22 -- ITensorUnicodePlots/test/runtests.jl | 14 -- ITensorUnicodePlots/test/test_basics.jl | 60 ------ ITensorUnicodePlots/test/test_examples.jl | 14 -- 32 files changed, 3 insertions(+), 871 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_feature_request.md delete mode 100644 ITensorUnicodePlots/.JuliaFormatter.toml delete mode 100644 ITensorUnicodePlots/LICENSE delete mode 100644 ITensorUnicodePlots/NEWS.md delete mode 100644 ITensorUnicodePlots/Project.toml delete mode 100644 ITensorUnicodePlots/examples/ex_2d_tensor_network_layered.jl delete mode 100644 ITensorUnicodePlots/examples/ex_dmrg.jl delete mode 100644 ITensorUnicodePlots/examples/ex_grid_layout.jl delete mode 100644 ITensorUnicodePlots/examples/ex_itensor_graph_unicode.jl delete mode 100644 ITensorUnicodePlots/examples/ex_qn_mps.jl delete mode 100644 ITensorUnicodePlots/examples/ex_quantum_circuit.jl delete mode 100644 ITensorUnicodePlots/examples/notest_ex_qft_circuit.jl delete mode 100644 ITensorUnicodePlots/src/ITensorUnicodePlots.jl delete mode 100644 ITensorUnicodePlots/test/Project.toml delete mode 100644 ITensorUnicodePlots/test/references/R.png delete mode 100644 ITensorUnicodePlots/test/references/R.txt delete mode 100644 ITensorUnicodePlots/test/references/R1.png delete mode 100644 ITensorUnicodePlots/test/references/R1.txt delete mode 100644 ITensorUnicodePlots/test/references/R2.png delete mode 100644 ITensorUnicodePlots/test/references/R2.txt delete mode 100644 ITensorUnicodePlots/test/references/R_tags.txt delete mode 100644 ITensorUnicodePlots/test/references/T.txt delete mode 100644 ITensorUnicodePlots/test/references/grid.png delete mode 100644 ITensorUnicodePlots/test/references/tn.png delete mode 100644 ITensorUnicodePlots/test/references/tn.txt delete mode 100644 ITensorUnicodePlots/test/runtests.jl delete mode 100644 ITensorUnicodePlots/test/test_basics.jl delete mode 100644 ITensorUnicodePlots/test/test_examples.jl diff --git a/.github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_bug_report.md b/.github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_bug_report.md deleted file mode 100644 index 1da5724dd9..0000000000 --- a/.github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_bug_report.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: ITensorUnicodePlots.jl bug report -about: Create a bug report to help us improve ITensorUnicodePlots.jl -title: "[ITensorUnicodePlots] [BUG] YOUR SHORT DESCRIPTION OF THE BUG HERE" -labels: ["ITensorUnicodePlots", "bug"] -assignees: '' - ---- - -**Description of bug** - -Please give a brief description of the bug or unexpected behavior here. - -**Minimal code demonstrating the bug or unexpected behavior** - -If applicable, provide a minimal code that can be run to demonstrate the bug or unexpected behavior. - -If you are unable to construct a minimal code that demonstrates the bug or unexpected behavior, provide detailed steps for how to reproduce the behavior you are seeing. - -
Minimal runnable code

- -```julia -[YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Expected output or behavior** - -Describe what you expected to happen. - -If you provided a minimal code that can be run to demonstrate the bug or unexpected behavior, describe what you expected the output would be. - - -**Actual output or behavior** - -Describe what actually happened. - -If you provided a minimal code that demonstrates the bug or unexpected behavior, provide the output you get from that code. If the code leads to an error or warning, include the full error or warning below. - -
Output of minimal runnable code

- -```julia -[OUTPUT OF YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Version information** - - - Output from `versioninfo()`: -```julia -julia> versioninfo() -[YOUR OUTPUT HERE] -``` - - Output from `using Pkg; Pkg.status("ITensors")`: -```julia -julia> using Pkg; Pkg.status("ITensors") -[YOUR OUTPUT HERE] -``` diff --git a/.github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_feature_request.md b/.github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_feature_request.md deleted file mode 100644 index 61fd9aa80a..0000000000 --- a/.github/ISSUE_TEMPLATE/06_ITensorUnicodePlots_feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: ITensorUnicodePlots.jl feature request -about: Suggest an idea for ITensorUnicodePlots.jl -title: "[ITensorUnicodePlots] [ENHANCEMENT] YOUR SHORT DESCRIPTION OF THE FEATURE REQUEST HERE" -labels: ["ITensorUnicodePlots", "enhancement"] -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl index 6fb91c9288..d0c70a8e1b 100644 --- a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl +++ b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl @@ -2,16 +2,10 @@ using FileUtils template_package_name = "PACKAGE" -package_names = [ - "ITensors", "NDTensors", "ITensorUnicodePlots", "ITensorMakie", "ITensorGLMakie" -] +package_names = ["ITensors", "NDTensors", "ITensorMakie", "ITensorGLMakie"] package_ordering = Dict([ - "ITensors" => 1, - "NDTensors" => 2, - "ITensorUnicodePlots" => 3, - "ITensorMakie" => 4, - "ITensorGLMakie" => 5, + "ITensors" => 1, "NDTensors" => 2, "ITensorMakie" => 3, "ITensorGLMakie" => 4 ]) function bug_report_file(package_name::String) diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index 49713602ee..a8134a5d08 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -12,4 +12,4 @@ jobs: - name: CompatHelper.main() env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "ITensorMakie", "ITensorUnicodePlots", "NDTensors"])' + run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "ITensorMakie", "NDTensors"])' diff --git a/.gitignore b/.gitignore index e63c617aef..2d86401d22 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,6 @@ benchmark/mult benchmark/*.json docs/Manifest.toml docs/build/ -ITensorUnicodePlots/Manifest.toml -ITensorUnicodePlots/test/Manifest.toml ITensorMakie/Manifest.toml ITensorMakie/test/Manifest.toml ITensorGLMakie/Manifest.toml diff --git a/ITensorUnicodePlots/.JuliaFormatter.toml b/ITensorUnicodePlots/.JuliaFormatter.toml deleted file mode 100644 index 08f664cdb9..0000000000 --- a/ITensorUnicodePlots/.JuliaFormatter.toml +++ /dev/null @@ -1,2 +0,0 @@ -style = "blue" -indent = 2 diff --git a/ITensorUnicodePlots/LICENSE b/ITensorUnicodePlots/LICENSE deleted file mode 100644 index 555297e50a..0000000000 --- a/ITensorUnicodePlots/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 The Simons Foundation, Inc. - All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/ITensorUnicodePlots/NEWS.md b/ITensorUnicodePlots/NEWS.md deleted file mode 100644 index d741131e01..0000000000 --- a/ITensorUnicodePlots/NEWS.md +++ /dev/null @@ -1,35 +0,0 @@ -This file is a (mostly) comprehensive list of changes made in each release of ITensorUnicodePlots.jl. For a completely comprehensive but more verbose list, see the [commit history on Github](https://github.com/ITensor/ITensors.jl/commits/main/ITensorUnicodePlots). - -While we are in v0.x of the package, we will follow the convention that updating from v0.x.y to v0.x.(y+1) (for example v0.1.15 to v0.1.16) should not break your code, unless you are using internal/undocumented features of the code, while updating from `v0.x.y` to `v0.(x+1).y` might break your code, though we will try to add deprecation warnings when possible, such as for simple cases where the name of a function changes. - -Note that as of Julia v1.5, in order to see deprecation warnings you will need to start Julia with `julia --depwarn=yes` (previously they were on by default). Please run your code like this before upgrading between minor versions of the code (for example from v0.1.41 to v0.2.0). - -After we release v1 of the package, we will start following [semantic versioning](https://semver.org). - -ITensorUnicodePlots v0.1.3 Release Notes -======================================== - -Bugs - -Enhancements - -- Update compats (#1031) - -ITensorUnicodePlots v0.1.2 Release Notes -======================================== - -Bugs - -Enhancements - -- Drop explicit dependency on ITensors - -ITensorUnicodePlots v0.1.1 Release Notes -======================================== - -- Remove newlines from unicode visualization (#819) - -ITensorUnicodePlots v0.1.0 Release Notes -======================================== - -- Register ITensorUnicodePlots package, code in ITensors.jl repository diff --git a/ITensorUnicodePlots/Project.toml b/ITensorUnicodePlots/Project.toml deleted file mode 100644 index 14b2d5ea48..0000000000 --- a/ITensorUnicodePlots/Project.toml +++ /dev/null @@ -1,28 +0,0 @@ -name = "ITensorUnicodePlots" -uuid = "73163f41-4a9e-479f-8353-73bf94dbd758" -authors = ["Matthew Fishman "] -version = "0.1.3" - -[deps] -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensorVisualizationBase = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -Reexport = "189a3867-3050-52da-a836-e630ba90ab69" -Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" - -[compat] -Graphs = "1.4.1" -ITensorVisualizationBase = "0.1.5" -NetworkLayout = "0.4.3" -Reexport = "1.2.2" -Statistics = "1" -UnicodePlots = "2.5.0, 3" -julia = "1.6" - -[extras] -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[targets] -test = ["Test"] diff --git a/ITensorUnicodePlots/examples/ex_2d_tensor_network_layered.jl b/ITensorUnicodePlots/examples/ex_2d_tensor_network_layered.jl deleted file mode 100644 index 25f39b6ace..0000000000 --- a/ITensorUnicodePlots/examples/ex_2d_tensor_network_layered.jl +++ /dev/null @@ -1,10 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using Graphs -using LayeredLayouts - -tn = itensornetwork(grid((4, 4)); linkspaces=3) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true layout = layout - -fig diff --git a/ITensorUnicodePlots/examples/ex_dmrg.jl b/ITensorUnicodePlots/examples/ex_dmrg.jl deleted file mode 100644 index 5ca72b129f..0000000000 --- a/ITensorUnicodePlots/examples/ex_dmrg.jl +++ /dev/null @@ -1,34 +0,0 @@ -using ITensors -using ITensorUnicodePlots - -N = 10 -sites(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") -l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") -h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") -s⃗ = [sites(n) for n in 1:N] -l⃗ = [l(n) for n in 1:(N - 1)] -h⃗ = [h(n) for n in 1:(N - 1)] - -# Add some more indices between two of the tensors -x = Index([QN("Sz", 0) => 2]; tags="X") -y = Index([QN("Sz", 0) => 2]; tags="Y") - -n = 2 -ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) -hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) -hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) -ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) -ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - -edge_labels = (; plevs=true) - -R = @visualize fig1 ELn0 * ψn1n2 * hn1 * hn2 * ERn2 edge_labels = edge_labels vertex_size = - 50 -@show R ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - -# Split it up into multiple contractions -R1 = @visualize fig2 ELn0 * ψn1n2 * hn1 edge_labels = edge_labels vertex_size = 50 -R2 = @visualize fig3 R1 * hn2 * ERn2 edge_labels = edge_labels vertex_size = 50 -@show R2 ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - -fig1, fig2, fig3 diff --git a/ITensorUnicodePlots/examples/ex_grid_layout.jl b/ITensorUnicodePlots/examples/ex_grid_layout.jl deleted file mode 100644 index 79fe9447d5..0000000000 --- a/ITensorUnicodePlots/examples/ex_grid_layout.jl +++ /dev/null @@ -1,13 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using Graphs -using GeometryBasics -using NetworkLayout - -N = 10 -g = grid((N,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn siteinds_direction = Point(1, -0.5) layout = SquareGrid(; cols=1) width = - 20 height = 50 - -fig diff --git a/ITensorUnicodePlots/examples/ex_itensor_graph_unicode.jl b/ITensorUnicodePlots/examples/ex_itensor_graph_unicode.jl deleted file mode 100644 index 7eb0dceee8..0000000000 --- a/ITensorUnicodePlots/examples/ex_itensor_graph_unicode.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using Graphs - -g = grid((5,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn - -fig diff --git a/ITensorUnicodePlots/examples/ex_qn_mps.jl b/ITensorUnicodePlots/examples/ex_qn_mps.jl deleted file mode 100644 index 11a3b59b92..0000000000 --- a/ITensorUnicodePlots/examples/ex_qn_mps.jl +++ /dev/null @@ -1,13 +0,0 @@ -using ITensors -using ITensorUnicodePlots - -s = siteinds("S=1/2", 5; conserve_qns=true) -ψ = randomMPS(s, n -> isodd(n) ? "↑" : "↓"; linkdims=2) -ψ = orthogonalize(ψ, 2) -ψdag = prime(linkinds, dag(ψ)) -tn = [ψ..., ψdag...] - -edge_labels = (; plevs=true) -@visualize fig tn edge_labels = edge_labels edge_textsize = 20 width = 100 - -fig diff --git a/ITensorUnicodePlots/examples/ex_quantum_circuit.jl b/ITensorUnicodePlots/examples/ex_quantum_circuit.jl deleted file mode 100644 index 4182f7c914..0000000000 --- a/ITensorUnicodePlots/examples/ex_quantum_circuit.jl +++ /dev/null @@ -1,33 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using Graphs -using LayeredLayouts - -N = 6 -layers = 6 -ndelete = 0 - -s = siteinds("Qubit", N) -layer(N, start) = [("CX", i, i + 1) for i in start:2:(N - 1)] -layer(N) = append!(layer(N, 1), layer(N, 2)) -layer_N = layer(N) -gates = [] -for _ in 1:layers - append!(gates, layer_N) -end - -for _ in 1:ndelete - deleteat!(gates, rand(eachindex(gates))) -end - -U, s̃ = circuit_network(gates, s) -ψ = prod(MPS(s)) -ψ̃ = prod(MPS(s̃)) -tn = [ψ, U..., ψ̃] - -edge_labels = (; plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels layout = layout width = 90 height = - 40 - -fig diff --git a/ITensorUnicodePlots/examples/notest_ex_qft_circuit.jl b/ITensorUnicodePlots/examples/notest_ex_qft_circuit.jl deleted file mode 100644 index 865b7e6fe6..0000000000 --- a/ITensorUnicodePlots/examples/notest_ex_qft_circuit.jl +++ /dev/null @@ -1,22 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using Graphs -using LayeredLayouts -using PastaQ: qft - -N = 4 -gates = qft(N) - -s = siteinds("Qubit", N) - -U, s̃ = circuit_network(gates, s) -ψ = MPS(s) -ψ̃ = MPS(s̃) -tn = [ψ..., U..., ψ̃...] - -edge_labels = (; tags=true, plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels edge_textsize = 20 layout = - layout width = 100 height = 50 - -fig diff --git a/ITensorUnicodePlots/src/ITensorUnicodePlots.jl b/ITensorUnicodePlots/src/ITensorUnicodePlots.jl deleted file mode 100644 index f6cbc4f5db..0000000000 --- a/ITensorUnicodePlots/src/ITensorUnicodePlots.jl +++ /dev/null @@ -1,148 +0,0 @@ -module ITensorUnicodePlots - -using Graphs -using NetworkLayout -using Reexport -using Statistics -@reexport using ITensorVisualizationBase - -using ITensorVisualizationBase: - @Backend_str, - default_vertex_labels, - default_vertex_labels_prefix, - default_vertex_size, - default_vertex_textsize, - default_edge_textsize, - default_edge_widths, - default_edge_labels, - default_arrow_show, - default_arrow_size, - default_siteinds_direction, - is_self_loop - -using UnicodePlots: UnicodePlots - -import ITensorVisualizationBase: visualize, default_newlines - -function __init__() - return ITensorVisualizationBase.set_backend!(Backend"UnicodePlots"()) -end - -function plot(::Backend"UnicodePlots"; xlim, ylim, width, height) - plot = UnicodePlots.lineplot( - [0.0], - [0.0]; - border=:none, - labels=false, - grid=false, - xlim=xlim, - ylim=ylim, - width=width, - height=height, - ) - return plot -end - -function draw_edge!(b::Backend"UnicodePlots", plot, v1, v2; color) - UnicodePlots.lineplot!(plot, [v1[1], v2[1]], [v1[2], v2[2]]; color=color) - return plot -end - -function annotate!(::Backend"UnicodePlots", plot, x, y, str) - UnicodePlots.annotate!(plot, x, y, str) - return plot -end - -# Don't use new lines by default, it messes up the formatting -default_newlines(::Backend"UnicodePlots") = false - -function visualize( - b::Backend"UnicodePlots", - g::AbstractGraph; - interactive=false, # TODO: change to `default_interactive(b)` - ndims=2, # TODO: change to `default_ndims(b)` - layout=Spring(; dim=ndims), # TODO: change to `default_layout(b, ndims)` - - # vertex - vertex_labels_prefix=default_vertex_labels_prefix(b, g), - vertex_labels=default_vertex_labels(b, g, vertex_labels_prefix), - vertex_size=default_vertex_size(b, g), - vertex_textsize=default_vertex_textsize(b, g), - - # edge - edge_textsize=default_edge_textsize(b), - edge_widths=default_edge_widths(b, g), - edge_labels=default_edge_labels(b, g), - - # arrow - arrow_show=default_arrow_show(b, g), - arrow_size=default_arrow_size(b, g), - - # siteinds direction - siteinds_direction=default_siteinds_direction(b, g), - width=50, - height=20, -) - edge_color = :blue # TODO: make into keyword argument - - edge_labels = ITensorVisualizationBase.edge_labels(b, edge_labels, g) - - node_pos = layout(g) - edge_pos = [node_pos[src(edge)] => node_pos[dst(edge)] for edge in edges(g)] - xmin = minimum(first.(node_pos)) - xmax = maximum(first.(node_pos)) - ymin = minimum(last.(node_pos)) - ymax = maximum(last.(node_pos)) - - #vertex_size = vertex_size * (xmax - xmin) - - xscale = 0.1 * (xmax - xmin) - yscale = max(0.3 * (ymax - ymin), 0.1 * xscale) - xlim = [xmin - xscale, xmax + xscale] - ylim = [ymin - yscale, ymax + yscale] - - site_vertex_shift = siteinds_direction - - #site_vertex_shift = -Point(0, 0.2 * abs(ylim[2] - ylim[1])) - #site_vertex_shift = -Point(0, 0.001 * (xmax - xmin)) - - # Initialize the plot - plt = plot(b; xlim=xlim, ylim=ylim, width=width, height=height) - - # Add edges and nodes - for (e_pos, e) in zip(edge_pos, edges(g)) - if is_self_loop(e) - draw_edge!(b, plt, e_pos[1], e_pos[1] + site_vertex_shift; color=edge_color) - else - draw_edge!(b, plt, e_pos[1], e_pos[2]; color=edge_color) - end - end - - # Add edge labels and node labels - for (n, e) in enumerate(edges(g)) - e_pos = edge_pos[n] - edge_label = edge_labels[n] - if is_self_loop(e) - @assert e_pos[1] == e_pos[2] - str_pos = e_pos[1] + 0.5 * site_vertex_shift - annotate!(b, plt, str_pos..., edge_label) - else - annotate!(b, plt, mean(e_pos)..., edge_label) - end - end - if length(vertex_labels) ≠ nv(g) - throw( - DimensionMismatch("Number of vertex labels must equal the number of vertices. Vertex - labels $(vertex_labels) of length $(length(vertex_labels)) does not - equal the number of vertices $(nv(g)).") - ) - end - for v in vertices(g) - x, y = node_pos[v] - node_label = vertex_labels[v] - annotate!(b, plt, x, y, node_label) - end - return plt -end - -end diff --git a/ITensorUnicodePlots/test/Project.toml b/ITensorUnicodePlots/test/Project.toml deleted file mode 100644 index 7362f55e92..0000000000 --- a/ITensorUnicodePlots/test/Project.toml +++ /dev/null @@ -1,8 +0,0 @@ -[deps] -GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LayeredLayouts = "f4a74d36-062a-4d48-97cd-1356bad1de4e" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -ReferenceTests = "324d217c-45ce-50fc-942e-d289b448e8cf" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/ITensorUnicodePlots/test/references/R.png b/ITensorUnicodePlots/test/references/R.png deleted file mode 100644 index 0b5f829f2c5e1520ef69ca63084d32e2a6ac3b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64463 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 YO56}=_$RsPEi{jKxOyF|I1rNj4@-g~2><{9 diff --git a/ITensorUnicodePlots/test/references/R.txt b/ITensorUnicodePlots/test/references/R.txt deleted file mode 100644 index fe65a0915a..0000000000 --- a/ITensorUnicodePlots/test/references/R.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ERn2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⡇⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊(20)'⠀⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀20⠊⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀10⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣉hn2⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠜⠀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤2⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠀⢀⠔⢹⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ψn1n2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔(2)'⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀10⠔⠁⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⢄⡀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⡠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣑hn1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⢀⣀⣀⣀⣀⡠⠤⠤10⠤⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠁⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀ELn0⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀(2)'⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀(20)'⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorUnicodePlots/test/references/R1.png b/ITensorUnicodePlots/test/references/R1.png deleted file mode 100644 index 42e8defb8ae77d79dc64c1e5ab3fabde6cbba558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46335 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 z 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 DJ}2i$ diff --git a/ITensorUnicodePlots/test/references/R1.txt b/ITensorUnicodePlots/test/references/R1.txt deleted file mode 100644 index c536db9979..0000000000 --- a/ITensorUnicodePlots/test/references/R1.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀ELn0⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⣷⠀⠀⠉⠉⠑⠒⠒⠤⠤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠤⠤10⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀(20)'⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠒⠢⠤⠤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠒⠒⠢⠤hn1⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠁⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀20⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀(2)'⊗10⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ψn1n2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorUnicodePlots/test/references/R2.png b/ITensorUnicodePlots/test/references/R2.png deleted file mode 100644 index 69f5e8bcf5caee3554663f48a11ab671d19a9b5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42975 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 z 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ⅈK{FY`0z@ks-2{!x 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%0DAZTb)-4SY!h3Q z;ZP?fflyV=wn&5d1sD54qM|G=s0c8$SpW*UetaKf`lVOK zaQBAAT@TTd^T(}7b@fu~Vv2cRp-B8#U9J24`7@9>>gvGnikAWp*lR*BvUFFr9v12_ zV6Cn${&}XDM{ys=ug${zwEhoE02!3YOmFtBVC6coUf#nQ?u zqRV0&)Q1lq^aJS?!{()j$Mp2H1|r1o#^bX22=oKP8r$=^)pGjT2VN;jA_De-O$i4Z zckZQp+A*`=e&sGVwzZ6D8=f?*Q1<9H2N$#m0T^y_@{+}_wI*mvIn6f}TG7c_K8Wc!b=2 zGv3s@6vcU3>h)=zf8#XAjlIsR?>;buZcMvNUy-v{KT-giN+)JQ~(68)%FLnj!ryH0uW@b<{08Ch}8k8kl3yYEVu zcH>$PTlABGKZ<5sz

KSF)?FS#8cTn;OmB3HHKQ4@ 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 diff --git a/ITensorUnicodePlots/test/references/tn.png b/ITensorUnicodePlots/test/references/tn.png deleted file mode 100644 index 07ece15c9306e5ca04ba89292c9188d6e9e24168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62930 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%0AV_3fCpV^|u3TjKA?@G~z^(f^3t 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 PZDa6s^>bP0l+XkK&=Ds| diff --git a/ITensorUnicodePlots/test/references/tn.txt b/ITensorUnicodePlots/test/references/tn.txt deleted file mode 100644 index 11b56f4640..0000000000 --- a/ITensorUnicodePlots/test/references/tn.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀tn₅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⡇⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊(20)'⠀⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀20⠊⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀10⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣉tn₄⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠜⠀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤2⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠀⢀⠔⢹⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀tn₂⣉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔(2)'⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀10⠔⠁⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⢄⡀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⡠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣑tn₃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⢀⣀⣀⣀⣀⡠⠤⠤10⠤⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠁⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀tn₁⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀(2)'⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀(20)'⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorUnicodePlots/test/runtests.jl b/ITensorUnicodePlots/test/runtests.jl deleted file mode 100644 index bfce2bffaa..0000000000 --- a/ITensorUnicodePlots/test/runtests.jl +++ /dev/null @@ -1,14 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using Test - -starts_and_ends_with(file, st, en) = startswith(file, st) && endswith(file, en) -starts_and_ends_with(st, en) = file -> starts_and_ends_with(file, st, en) - -test_path = joinpath(@__DIR__) -test_files = filter(starts_and_ends_with("test_", ".jl"), readdir(test_path)) -@testset "ITensorUnicodePlots.jl" for file in test_files - file_path = joinpath(test_path, file) - println("Running test $(file_path)") - include(file_path) -end diff --git a/ITensorUnicodePlots/test/test_basics.jl b/ITensorUnicodePlots/test/test_basics.jl deleted file mode 100644 index 40d03008d2..0000000000 --- a/ITensorUnicodePlots/test/test_basics.jl +++ /dev/null @@ -1,60 +0,0 @@ -using ITensors -using ITensorUnicodePlots -using ReferenceTests -using Test - -@testset "Basic test for UnicodePlots backend" begin - extension = "txt" - - N = 10 - s(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") - l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") - h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") - s⃗ = [s(n) for n in 1:N] - l⃗ = [l(n) for n in 1:(N - 1)] - h⃗ = [h(n) for n in 1:(N - 1)] - - # Add some more indices between two of the tensors - x = Index([QN("Sz", 0) => 2]; tags="X") - y = Index([QN("Sz", 0) => 2]; tags="Y") - - n = 2 - ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) - hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) - hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) - ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) - ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - - tn = [ELn0, ψn1n2, hn1, hn2, ERn2] - - R = @visualize ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize ELn0 * ψn1n2 * hn1 - R2 = @visualize R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - tn2 = @visualize tn - T = @visualize ELn0 - - @test R ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - @test R1 ≈ ELn0 * ψn1n2 * hn1 - @test R2 ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - @test all(tn .== tn2) - @test T == ELn0 - - R = @visualize figR ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R_tags = @visualize figR_tags ELn0 * ψn1n2 * hn1 * hn2 * ERn2 edge_labels = (tags=true,) - R1 = @visualize figR1 ELn0 * ψn1n2 * hn1 - R2 = @visualize figR2 R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - T = @visualize figT ELn0 - - fig_tn = @visualize_noeval tn - - by = isequal - - @test_reference "references/R.$extension" figR by = by - @test_reference "references/R_tags.$extension" figR_tags by = by - @test_reference "references/R1.$extension" figR1 by = by - @test_reference "references/R2.$extension" figR2 by = by - @test_reference "references/tn.$extension" fig_tn by = by - @test_reference "references/T.$extension" figT by = by - - @test_throws DimensionMismatch @visualize fig R1 * hn2 * ERn2 vertex_labels = ["T1", "T2"] -end diff --git a/ITensorUnicodePlots/test/test_examples.jl b/ITensorUnicodePlots/test/test_examples.jl deleted file mode 100644 index 8335f08bdc..0000000000 --- a/ITensorUnicodePlots/test/test_examples.jl +++ /dev/null @@ -1,14 +0,0 @@ -using Test - -@testset "Examples" begin - examples_path = joinpath(@__DIR__, "..", "examples") - example_files = filter(starts_and_ends_with("ex_", ".jl"), readdir(examples_path)) - for file in example_files - file_path = joinpath(examples_path, file) - println("Testing file $(file_path)") - empty!(ARGS) - push!(ARGS, "false") - @test !isnothing(include(file_path)) - empty!(ARGS) - end -end From 259db6900f0ae40329539f2bbd4b8f0122df38fa Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 11:34:38 -0400 Subject: [PATCH 06/10] [ITensors] Bump to v0.5.6 [no ci] --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 762b5136e9..1e27044b8a 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ITensors" uuid = "9136182c-28ba-11e9-034c-db9fb085ebd5" authors = ["Matthew Fishman ", "Miles Stoudenmire "] -version = "0.5.5" +version = "0.5.6" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" From 7f1194c9cda4ade2ae1dc5d0223eb42570687c3c Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 11:37:23 -0400 Subject: [PATCH 07/10] [ITensorMakie] Move to separate repository (#1420) --- .../07_ITensorMakie_bug_report.md | 60 ------ .../07_ITensorMakie_feature_request.md | 24 --- .../generate_issue_templates.jl | 6 +- .github/workflows/CompatHelper.yml | 2 +- .../workflows/test_itensorglmakie_ubuntu.yml | 2 +- .gitignore | 2 - ITensorMakie/.JuliaFormatter.toml | 2 - ITensorMakie/LICENSE | 201 ------------------ ITensorMakie/NEWS.md | 44 ---- ITensorMakie/Project.toml | 21 -- ITensorMakie/src/ITensorMakie.jl | 174 --------------- ITensorMakie/test/Project.toml | 10 - ITensorMakie/test/references/R.png | Bin 64463 -> 0 bytes ITensorMakie/test/references/R.txt | 22 -- ITensorMakie/test/references/R1.png | Bin 46335 -> 0 bytes ITensorMakie/test/references/R1.txt | 22 -- ITensorMakie/test/references/R2.png | Bin 42975 -> 0 bytes ITensorMakie/test/references/R2.txt | 22 -- ITensorMakie/test/references/grid.png | Bin 135131 -> 0 bytes ITensorMakie/test/references/tn.png | Bin 62930 -> 0 bytes ITensorMakie/test/references/tn.txt | 22 -- ITensorMakie/test/runtests.jl | 14 -- ITensorMakie/test/test_basics.jl | 54 ----- 23 files changed, 4 insertions(+), 700 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/07_ITensorMakie_bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/07_ITensorMakie_feature_request.md delete mode 100644 ITensorMakie/.JuliaFormatter.toml delete mode 100644 ITensorMakie/LICENSE delete mode 100644 ITensorMakie/NEWS.md delete mode 100644 ITensorMakie/Project.toml delete mode 100644 ITensorMakie/src/ITensorMakie.jl delete mode 100644 ITensorMakie/test/Project.toml delete mode 100644 ITensorMakie/test/references/R.png delete mode 100644 ITensorMakie/test/references/R.txt delete mode 100644 ITensorMakie/test/references/R1.png delete mode 100644 ITensorMakie/test/references/R1.txt delete mode 100644 ITensorMakie/test/references/R2.png delete mode 100644 ITensorMakie/test/references/R2.txt delete mode 100644 ITensorMakie/test/references/grid.png delete mode 100644 ITensorMakie/test/references/tn.png delete mode 100644 ITensorMakie/test/references/tn.txt delete mode 100644 ITensorMakie/test/runtests.jl delete mode 100644 ITensorMakie/test/test_basics.jl diff --git a/.github/ISSUE_TEMPLATE/07_ITensorMakie_bug_report.md b/.github/ISSUE_TEMPLATE/07_ITensorMakie_bug_report.md deleted file mode 100644 index d2a4508988..0000000000 --- a/.github/ISSUE_TEMPLATE/07_ITensorMakie_bug_report.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: ITensorMakie.jl bug report -about: Create a bug report to help us improve ITensorMakie.jl -title: "[ITensorMakie] [BUG] YOUR SHORT DESCRIPTION OF THE BUG HERE" -labels: ["ITensorMakie", "bug"] -assignees: '' - ---- - -**Description of bug** - -Please give a brief description of the bug or unexpected behavior here. - -**Minimal code demonstrating the bug or unexpected behavior** - -If applicable, provide a minimal code that can be run to demonstrate the bug or unexpected behavior. - -If you are unable to construct a minimal code that demonstrates the bug or unexpected behavior, provide detailed steps for how to reproduce the behavior you are seeing. - -

Minimal runnable code

- -```julia -[YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Expected output or behavior** - -Describe what you expected to happen. - -If you provided a minimal code that can be run to demonstrate the bug or unexpected behavior, describe what you expected the output would be. - - -**Actual output or behavior** - -Describe what actually happened. - -If you provided a minimal code that demonstrates the bug or unexpected behavior, provide the output you get from that code. If the code leads to an error or warning, include the full error or warning below. - -
Output of minimal runnable code

- -```julia -[OUTPUT OF YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Version information** - - - Output from `versioninfo()`: -```julia -julia> versioninfo() -[YOUR OUTPUT HERE] -``` - - Output from `using Pkg; Pkg.status("ITensors")`: -```julia -julia> using Pkg; Pkg.status("ITensors") -[YOUR OUTPUT HERE] -``` diff --git a/.github/ISSUE_TEMPLATE/07_ITensorMakie_feature_request.md b/.github/ISSUE_TEMPLATE/07_ITensorMakie_feature_request.md deleted file mode 100644 index 8590b1f694..0000000000 --- a/.github/ISSUE_TEMPLATE/07_ITensorMakie_feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: ITensorMakie.jl feature request -about: Suggest an idea for ITensorMakie.jl -title: "[ITensorMakie] [ENHANCEMENT] YOUR SHORT DESCRIPTION OF THE FEATURE REQUEST HERE" -labels: ["ITensorMakie", "enhancement"] -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl index d0c70a8e1b..045308f103 100644 --- a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl +++ b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl @@ -2,11 +2,9 @@ using FileUtils template_package_name = "PACKAGE" -package_names = ["ITensors", "NDTensors", "ITensorMakie", "ITensorGLMakie"] +package_names = ["ITensors", "NDTensors", "ITensorGLMakie"] -package_ordering = Dict([ - "ITensors" => 1, "NDTensors" => 2, "ITensorMakie" => 3, "ITensorGLMakie" => 4 -]) +package_ordering = Dict(["ITensors" => 1, "NDTensors" => 2, "ITensorGLMakie" => 3]) function bug_report_file(package_name::String) return "$(package_name)_bug_report.md" diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index a8134a5d08..3fb72b9971 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -12,4 +12,4 @@ jobs: - name: CompatHelper.main() env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "ITensorMakie", "NDTensors"])' + run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "NDTensors"])' \ No newline at end of file diff --git a/.github/workflows/test_itensorglmakie_ubuntu.yml b/.github/workflows/test_itensorglmakie_ubuntu.yml index bd51e2ae4e..09c5058888 100644 --- a/.github/workflows/test_itensorglmakie_ubuntu.yml +++ b/.github/workflows/test_itensorglmakie_ubuntu.yml @@ -46,4 +46,4 @@ jobs: - run: sudo apt-get update && sudo apt-get install -y xorg-dev mesa-utils xvfb libgl1 freeglut3-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev - name: Install Julia dependencies and run tests run: | - JULIA_REFERENCETESTS_UPDATE=true DISPLAY=:0 xvfb-run -s '-screen 0 1024x768x24' julia --depwarn=yes -e 'using Pkg; Pkg.activate(temp=true); Pkg.develop(path="./NDTensors"); Pkg.develop(path="."); Pkg.develop(path="./ITensorMakie"); Pkg.develop(path="./ITensorGLMakie"); Pkg.test("ITensorGLMakie")' + JULIA_REFERENCETESTS_UPDATE=true DISPLAY=:0 xvfb-run -s '-screen 0 1024x768x24' julia --depwarn=yes -e 'using Pkg; Pkg.activate(temp=true); Pkg.develop(path="./NDTensors"); Pkg.develop(path="."); Pkg.develop(path="./ITensorGLMakie"); Pkg.test("ITensorGLMakie")' diff --git a/.gitignore b/.gitignore index 2d86401d22..07b862bd33 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,6 @@ benchmark/mult benchmark/*.json docs/Manifest.toml docs/build/ -ITensorMakie/Manifest.toml -ITensorMakie/test/Manifest.toml ITensorGLMakie/Manifest.toml ITensorGLMakie/test/Manifest.toml NDTensors/Manifest.toml diff --git a/ITensorMakie/.JuliaFormatter.toml b/ITensorMakie/.JuliaFormatter.toml deleted file mode 100644 index 08f664cdb9..0000000000 --- a/ITensorMakie/.JuliaFormatter.toml +++ /dev/null @@ -1,2 +0,0 @@ -style = "blue" -indent = 2 diff --git a/ITensorMakie/LICENSE b/ITensorMakie/LICENSE deleted file mode 100644 index 555297e50a..0000000000 --- a/ITensorMakie/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 The Simons Foundation, Inc. - All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/ITensorMakie/NEWS.md b/ITensorMakie/NEWS.md deleted file mode 100644 index 98867f07a2..0000000000 --- a/ITensorMakie/NEWS.md +++ /dev/null @@ -1,44 +0,0 @@ -This file is a (mostly) comprehensive list of changes made in each release of ITensorMakie.jl. For a completely comprehensive but more verbose list, see the [commit history on Github](https://github.com/ITensor/ITensors.jl/commits/main/ITensorMakie). - -While we are in v0.x of the package, we will follow the convention that updating from v0.x.y to v0.x.(y+1) (for example v0.1.15 to v0.1.16) should not break your code, unless you are using internal/undocumented features of the code, while updating from `v0.x.y` to `v0.(x+1).y` might break your code, though we will try to add deprecation warnings when possible, such as for simple cases where the name of a function changes. - -Note that as of Julia v1.5, in order to see deprecation warnings you will need to start Julia with `julia --depwarn=yes` (previously they were on by default). Please run your code like this before upgrading between minor versions of the code (for example from v0.1.41 to v0.2.0). - -After we release v1 of the package, we will start following [semantic versioning](https://semver.org). - - -ITensorMakie v0.1.3 Release Notes -================================= - -Bugs: - -Enhancements: - -- Bump GraphMakie compat to 0.5 (#1032) - -ITensorMakie v0.1.2 Release Notes -================================= - -Bugs: - -Enhancements: - -- Update compats (#1031) - -ITensorMakie v0.1.1 Release Notes -================================= - -Bugs: - -Enhancements: - -- Disable rotating edge labels with edge (#832) - -ITensorMakie v0.1.0 Release Notes -================================= - -Bugs: - -Enhancements: - -- Register ITensorMakie package, code in ITensors.jl repository diff --git a/ITensorMakie/Project.toml b/ITensorMakie/Project.toml deleted file mode 100644 index 17018b71fe..0000000000 --- a/ITensorMakie/Project.toml +++ /dev/null @@ -1,21 +0,0 @@ -name = "ITensorMakie" -uuid = "72ca75eb-df6f-4d6b-80c5-d5eab17be3f9" -authors = ["Matthew Fishman "] -version = "0.1.3" - -[deps] -Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" -GraphMakie = "1ecd5474-83a3-4783-bb4f-06765db800d2" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensorVisualizationBase = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -Reexport = "189a3867-3050-52da-a836-e630ba90ab69" - -[compat] -Colors = "0.12.8" -GraphMakie = "0.3.0, 0.4, 0.5" -Graphs = "1.4.1" -ITensorVisualizationBase = "0.1.5" -NetworkLayout = "0.4.3" -Reexport = "1.2.2" -julia = "1.6" diff --git a/ITensorMakie/src/ITensorMakie.jl b/ITensorMakie/src/ITensorMakie.jl deleted file mode 100644 index 31cf6d5148..0000000000 --- a/ITensorMakie/src/ITensorMakie.jl +++ /dev/null @@ -1,174 +0,0 @@ -module ITensorMakie - -using Colors -using Graphs -using NetworkLayout -using Reexport -using GraphMakie -@reexport using ITensorVisualizationBase - -using GraphMakie.Makie: - Makie, - Figure, - contents, - hidedecorations!, - hidespines!, - deregister_interaction!, - register_interaction! - -using ITensorVisualizationBase: - @Backend_str, - default_vertex_labels, - default_vertex_labels_prefix, - default_vertex_size, - default_vertex_textsize, - default_edge_textsize, - default_edge_widths, - default_edge_labels, - default_arrow_show, - default_arrow_size, - default_siteinds_direction, - is_self_loop, - _ndims - -import ITensorVisualizationBase: visualize, visualize!, _graphplot - -function __init__() - return ITensorVisualizationBase.set_backend!(Backend"Makie"()) -end - -fill_number(a::AbstractVector, n::Integer) = a -fill_number(x::Number, n::Integer) = fill(x, n) - -function visualize(b::Backend"Makie", g::AbstractGraph; kwargs...) - f = Figure() - visualize!(b, f[1, 1], g; kwargs...) - return f -end - -function visualize!(b::Backend"Makie", f::Figure, g::AbstractGraph; kwargs...) - visualize!(b, f[1, 1], g; kwargs...) - return f -end - -function visualize!( - b::Backend"Makie", - f::Makie.GridPosition, - g::AbstractGraph; - interactive=true, - ndims=2, - layout=Spring(; dim=ndims), - - # vertex - vertex_labels_prefix=default_vertex_labels_prefix(b, g), - vertex_labels=default_vertex_labels(b, g, vertex_labels_prefix), - vertex_size=default_vertex_size(b, g), - vertex_textsize=default_vertex_textsize(b, g), - - # edge - edge_textsize=default_edge_textsize(b), - edge_widths=default_edge_widths(b, g), - edge_labels=default_edge_labels(b, g), - - # arrow - arrow_show=default_arrow_show(b, g), - arrow_size=default_arrow_size(b, g), - siteinds_direction=default_siteinds_direction(b, g), -) - if ismissing(Makie.current_backend()) - error( - """ - You have not loaded a backend. Please load one (`using GLMakie` or `using CairoMakie`) - before trying to visualize a graph. -""" - ) - end - - edge_labels = ITensorVisualizationBase.edge_labels(b, edge_labels, g) - - if length(vertex_labels) ≠ nv(g) - throw( - DimensionMismatch( - "$(length(vertex_labels)) vertex labels $(vertex_labels) were specified - but there are $(nv(g)) tensors in the diagram, please specify the - correct number of labels." - ), - ) - end - - graphplot_kwargs = (; - layout=layout, - - # vertex - node_size=fill_number(vertex_size, nv(g)), - node_color=colorant"lightblue1", # TODO: store in vertex, make a default - node_marker='●', # TODO: allow other options, like '◼' - node_attr=(; strokecolor=:black, strokewidth=3), - - # vertex labels - nlabels=vertex_labels, - nlabels_textsize=vertex_textsize, - nlabels_color=colorant"black", - nlabels_align=(:center, :center), - - # edge - edge_width=edge_widths, - edge_color=colorant"black", - - # edge labels - elabels=edge_labels, - elabels_textsize=edge_textsize, - elabels_color=colorant"red", - - # self-edge - selfedge_width=1e-5, # Small enough so you can't see the loop, big enough for site label to show up - selfedge_direction=siteinds_direction, - selfedge_size=3, - - # arrow - arrow_show=arrow_show, - arrow_size=arrow_size, - arrow_shift=0.49, - ) - - overwrite_axis = false - if isempty(contents(f)) - axis_plot = graphplot(f, g; graphplot_kwargs...) - else - @warn "Visualizing a graph in the same axis as an existing graph. This - feature is experimental and some features like interactivity might now work" - overwrite_axis = true - graphplot!(f, g; graphplot_kwargs...) - end - - # Set rotation of edge labels to 0. - axis_plot.plot.elabels_rotation[] = zeros(ne(g)) - - if !overwrite_axis && (_ndims(layout) == 2) - hidedecorations!(axis_plot.axis) - # This would hide the box around the plot - # TODO: make this optional - #hidespines!(axis_plot.axis) - if interactive - deregister_interaction!(axis_plot.axis, :rectanglezoom) - register_interaction!(axis_plot.axis, :nhover, NodeHoverHighlight(axis_plot.plot)) - register_interaction!(axis_plot.axis, :ehover, EdgeHoverHighlight(axis_plot.plot)) - register_interaction!(axis_plot.axis, :ndrag, NodeDrag(axis_plot.plot)) - register_interaction!(axis_plot.axis, :edrag, EdgeDrag(axis_plot.plot)) - end - end - return f -end - -# For use in sequence visualization. -# TODO: Make this more generalizable to other backends. -function _graphplot(::Backend"Makie", graph; all_labels) - fig, ax, plt = graphplot( - reverse(graph); arrow_show=false, nlabels=all_labels, layout=Buchheim() - ) - hidedecorations!(ax) - #hidespines!(ax) - return fig -end - -end diff --git a/ITensorMakie/test/Project.toml b/ITensorMakie/test/Project.toml deleted file mode 100644 index 8c33cc0e18..0000000000 --- a/ITensorMakie/test/Project.toml +++ /dev/null @@ -1,10 +0,0 @@ -[deps] -GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" -GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LayeredLayouts = "f4a74d36-062a-4d48-97cd-1356bad1de4e" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -ReferenceTests = "324d217c-45ce-50fc-942e-d289b448e8cf" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/ITensorMakie/test/references/R.png b/ITensorMakie/test/references/R.png deleted file mode 100644 index 0b5f829f2c5e1520ef69ca63084d32e2a6ac3b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64463 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 YO56}=_$RsPEi{jKxOyF|I1rNj4@-g~2><{9 diff --git a/ITensorMakie/test/references/R.txt b/ITensorMakie/test/references/R.txt deleted file mode 100644 index bf88cd6f00..0000000000 --- a/ITensorMakie/test/references/R.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ERn2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⡇⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀20⠀⠀⠀⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀20⠊⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀10⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣉hn2⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠜⠀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤2⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠀⢀⠔⢹⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ψn1n2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⠀2⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀10⠔⠁⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⢄⡀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⡠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣑hn1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⢀⣀⣀⣀⣀⡠⠤⠤10⠤⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠁⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀ELn0⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorMakie/test/references/R1.png b/ITensorMakie/test/references/R1.png deleted file mode 100644 index 42e8defb8ae77d79dc64c1e5ab3fabde6cbba558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46335 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 z 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 DJ}2i$ diff --git a/ITensorMakie/test/references/R1.txt b/ITensorMakie/test/references/R1.txt deleted file mode 100644 index 4ac7548305..0000000000 --- a/ITensorMakie/test/references/R1.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀ELn0⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⣷⠀⠀⠉⠉⠑⠒⠒⠤⠤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠤⠤10⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀20⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠒⠢⠤⠤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠒⠒⠢⠤hn1⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠁⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀20⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀2⊗10⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ψn1n2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorMakie/test/references/R2.png b/ITensorMakie/test/references/R2.png deleted file mode 100644 index 69f5e8bcf5caee3554663f48a11ab671d19a9b5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42975 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 z z($YOz21+lGj)*CIeJQbV$;8J^Q@#VnwFyj z&P~L44#g~z%*@OPub)=;15NwQ!O01CT_z}aF}@s)jXv(J|Mqadwzl26b5%daiqzEf z;lr}2UYNZpzX}y|a>2%=@ivY!Jz#V_D>2v+*2Or=x?z z4XjS&ZlI1cBmvLCeIIyA=HYvnx9SqH-WD^A_>Qhz7V=;WQ>%`v7Mk}Ymxx#O3mya0 zjr|KOQn#oLWm>8K`pP!LkADHN_drK)3u{42(;}M6fbttCnh%hm#Y8IECLY!A7>FswxXX-m6GL5joq9Q*=B#1k3IrFi&W{x$L(enR(e@)8@)#=Q@p@N*URL-$(vgD zq4%~A<>reZJ@Ds$oM6CqSF&<)=4WOAC=ZCp9(uO8ybKb>ZKs7eZxz`wla^%kj9o=X z=e;DGBta)5@u;t_2YD&NBhE55CZ7Z+anceEfnJEvP*KTq$*YnTvlx1M{j3r08KrP_ zMMRM~c`q;jbt<*75aYg{pPR2oI*{wQ`h_zAsClyU^bDmc-FcEtjtf7%Sq1gGPK%uC z4Yanhdj9-5SCBMu&Kn<8R&Sa&YX72-t0lOi`-`I9vtwW&MJ(ztMNkyVH2)iMpuk&&Zk!AMq?yQY6ysielf zJ>*{^D6VU2K6&o3JRxOyOxtb~Hk0?8A6^i#BGYl%9zp%!0Z0?gniPL3rm~yAEu4XJ6mh>FJ}#j$xCM(>p84A}pNSoJ8EeVJ-CA-O|y= z2xbk~fWolz-WCVPsnvyVCCpO(2n;E=7#d!RMUb#kw|-{l4KozH3t3h35qW}>R%D?2 zZ9DAP#eWlcRNfRZZKM8Cwkdq~KA(*+{v4(oDmwUO1AYC;(^1c!0b2vGccTq89dJ0v zKCp8Lt4^_~S`u=k#}f3DmrFci)!be9E8ctmUyUH8eZ# z7mk16%e~QXaOEVN1hNpQ*az*i)sfP+wYO6=9^CZ_;Vb)r10Xj1`~a4iTU%qoJf6su zyZK(anPCSB8tVNe?57WUfk3pKC|zGWR(IN6C*z$*EC-@&Edztt_ctadCk2lkD>qwQ zd|$VNloYhwMbgu!oa*0&`q>vEpzammSy)6K95t-*g&M(Dce-PTH-T(=@M;EB6se$)c=yYpDM6mDM z*EutNP_V6()lg0Sz(JC(E-0DC#{M-+%E~SOnk9C27|x$rGB?*H&JvF=DZ_ir;pZS8 zlwHRvCmp$i{t%$R&}xdXU!UZKsPzcOhXp-CfVa872Xq(S(c$#$T#ws&)C1ju%7BRg z{}WNiD%+}k(2m6FH<8i@Uxa>3bu;9iZ_?A#QMVX}<~6^5F)=c7|Glijj~fMEfNH9b z8+%a>BBS_72k!m*U+3oTl~hkT!NGxkJBJk%6xcj`3AtSk*w04r`dzK9+g@$H_kO)` z^V6S=ft)Vm zVEAMnuE`Ig0(&It0dapn+#k1s6d))vQd?gBzAnUPmz|te-dyy7T{57_OJi5p8p>NI z?~C0dxSok`j5s2SRYgEO2A$6)N^0s4$GvnBu$?=14zeChw6AZti1{1hFzX-GJ)61> z;|ZyvX4Wk~w2e|QGcyC1jnCh>!3K9wUSK^6EF3RP{lksH_Xf0iex;?Z|JbaHiwht) z030zl&!+AM7<&)vAHBsM>mo_#;OK`C8P7qSu3eA%{Dix}Vy{nE3z&bxyZ`%*;UE5f zW10ZceA#bpZHEpWx}~rGJS0T#TZ!{By78E!?a}?6M~|wisUbQ^%F3ES%aA;-15ddG z1&IhmA5j=^^N$t?WE44t#p;Wr2A|RG6eaYe#o9Zf5s1aa9DI3YV2l_XSKTl)T)?vc zFh@AjyBXkD(eIx=#0Fp+HFEi;$X+FROZIQ-vYlR!2&TA}(GcI~N)n7#Ij`a9G$r_{kUA zX=zDG)ipI}+RYB1#u;Byf}Xj(yE-hY`OsHoc7A><6q`429m;ZEt%6x_t5W_<@6*e@ zca#Fdggh6Z5mx*wME7ssUP@2|rTw=|gh<~Z%z>h=txf&x&dEX+hoRRPLI8fCSSjfG zMEl0aOC07#l9QAF-ulqmbDwFRF3b`yc<9dy{zINADmJyWYz2AtG${#)P&#?9!OW4z(vxIVaPM%}85EJo;u&Of@U7-&ezE?n@4j%EjpFS9|VLvw>& z5DP0TOhZQ}t#wp4G$JCRw6v6%GedgeFx~g5rKN?iaeBq^U;`besgLMXmd1-Ven$(^ z*;+X>REutYe2i%gKW)FOoQUW`WxD>-FcKbUb2fw$babe{2ZZ1!d0kt(tGjzggKpQ2X&r@l zQyk0)K-Qh-)-Hi_L)HLEmV-mVznSW)=4K&YUfve24Y|uR1GR8DuxR%7Cuoy7fx4(DB&?yKk97gnBW8zKCOZSfQ=c%zX&63PS?anO1_lP;m|$_X zx^IdD*#kBBU->-+9ylO96(E^#^vq zv)=rMwr7T4USv2eS|AEW;~3;z{~0R{Sos52xJ4se@!9qeV zCL1Nr3~huTX?`u~wry$Z+5d~T$NaMCQ$k+K$HPO^k;utG5r&-%`o?f1|1j_U{mred|1j^!2zKw@y}>+i%0=EmRwEPLY&-)(gCe)v1>%Hu&?DFhwx~WC zjf#!!2i9R1DZs^5mM$m0co1v7=YuC+0C6Odx#SK)4$tTp_vXz_2*cxEhJ}F>m5IIP z->ZLA4R8?Y1OGr(0f14j zSYpJbx0T|k`e`&AMnsPKcLp!?hyzrEm()1$^!^itv+<3ncnNj*XO z8=>ghapT4fz&=3i|KSKf&<4MJd6>)%x}v4I(I~VXN6&gP1{u{S_0VvhfTZcQ{6D_^ zXK(LBK1BW&VkV}hKnyTQ|1-TiHpUF)2_|8Ki(z7BHm9YfqXTrGrjcv9INeW77LHb= zvqe_{T0-6W)CURy9D6~Zotta+J@X=eh@-vzgD0cXa&mHNYA=BRz={$SVMT~tiB^PF z0g)jH7YnAn|1f~&&A_T4x~mBj?nX5f_OQ#mRYQMgqg%F7-}pAwTWO08LAQJ>aji?9 zh>%qQs{$XS`y8UpuU~Nx%-^H)Y6HlBCLN1N0LwHl4%}WOh#bf{VV}wwY|%c?o;ChS zBDJ)bz0k185SS%Owm0o(4`3q$G)YQIO5AAd;fmDMP6`SV8e#VEEO12#Lt#Cj3*6ne zNK(Sdu(IMjj0!Bq45HLVQ5xMu^7iU~3r~8bWQ#{U=XfBR<-or15`XrMOOQ zt?Y|KbUvLO9Yk>hF*AKUZ0QjPdhqsKomo{>JtTT-4{qAnSoJPJ!Pl2`90YK z{sD90k4|+KenVCTBO_2A{i2LUZtCTQqW}nvAkbLp>A9YL!d+nPW-9`RRpu(Z$(Yy#WN?3UBo;_SdPGW->Mm*|igmFa3jwQj*k0h6L>sC<_5pbfZ zth`lRLa0u_&V8rt-S%>0V`J=>kZGV&a_%EX=#8-x}mDP zHsIlR>uvi)E8Tpx5vV_U^a!7YsR%ZV&b8;6hLw?qX45&B5H>P^4}dc_!Y54qzxY3A zXH-sC{$ZN_e$foP=$5|&act78o*a3EYvGQ{e}ZaN)rZ8O`V+WK7W+P$KlG@QQcy%h&5RR@ zP!Qwl=|!`V3D(rtAA!L2&@*!;@X&C$e7H3nCkw^V6PIEehy_1tS-0-p+bM}H0U$E! zR!KIJbRz-?lA2-X1YZfzA76%E~xBkTn50ptUb zoEs^F9t$)Ah%}f*?h(rUStUyFcl6&xhs`GnukmyUh5w#a1PdSlsT$F>baE0ERu6^9 zDJa4Ob=`<$pT`pvUiltDh=H|boL!KbN?i`Zx)|n5jA1l$->Kh)FaW_mF#$awAyN9j zL*0Q>05}$dh@r6|Rz}CZpO#pZ^6lFTylap&=am-(i&ZSu*RS`Zkb|8aCI4`DaC-0G zpM7!5z(B};x({-yja?mN2oWWR1YeoA>RY+s7hEs^vB~U^0wqdKzM{uxp=qb+6Ph$2 zwEuls$WH%eEr5${uok%6->e1Hf(Dq_KyPni?>0;yP7Jwmkn97Ny;)w57b<_;d{3*V zBE&9^c65;EM*)^!?c%{772)fsVOxkLj`uMT!Sxv3gj>= zo}=?>Zfd&oJ(C0R=ll1Y^hy4_FYxPs-WQq3#{1sAEB4>_eTe}4@AuW>ty2Blb0RJK z$8!>!Vu3cluXzgY4_h#I&|@NSMC9lqBUy+X9rBM07f342Gcq#%iv`0I)6nTt&dkkS zg{&SZ&97e`IQ;~^vmMUrq<=YUJ%u3IIotL7vT1us!a3+3Rj7q#9eDa;)8Y)K9%zze zbPrLC1C9mz356SBH+n)_Sdddw2UqtqRU(nQ8hZRwM+Xy8K1!g|zoU_U<1DgS+(7Wx z>~JF%G}0+1VN<5HFv9F@>wY2Y?vK79B?gdfn;@#9TM z1^zgWOCQ~Q?f38Bk6w<_mo5#Bj=I-F2PQ2I{N?%w_5+_s_90Vp*U}IcZfWh^i;=u% zV`E`6H?@#!drx0&JHh>IcYEXY@Q`-9xRTfeg`FgXl$sjW;@suv1)IWxd;yK@TlH@| zOHBDGD}w)TVy;N6H&L9szr1edIJrs1y7;&2%BpAGNwT9C&I(>UuKDB4*}p2%ezpC! zP72HC+sjs)nQ2t*)t1+l`Q_cw+^(Dx<97p=CzRhDj1#e(V0xI@deW6&>{pB2k;>N7 zR@!xjQR3_9Xg%=dWps2)vexqF?(RwZv6SJumF&E?m!yPDXdM@`TXTIUcCs+<-u3;f z#KES@o_D-5rSb~u*Q|bj?I}LBVAei;ettp6dAdHa|7D;{N7iyihV4}ctB$vY-mH@1$Bd`m-n`~1Yc8yUwlNW{X!!(Y7kR%AZ|$^RyTF(dmK zaxyY{F$XJ2$qK+S2P0aK$C+N}qi}W1EK0tjG$JgLCMWH1t##e+_V+fmQBo^@}%Ra|5?5&7oLhsy!}VWPtc-cg~)^(S8yWUtOu zS|Ff<3kEm}2!>au#0jD_#Gi?g_;nIne+!pmE|i}0%A=;p+O2M_u( z3XP-|PMFs3H(Chx`z}+W95gf&7Tawu7bcTNW<;OT_>+>%S9*vk=&nxJ@7ZVP6ajG}=ut2eeQ6;r_u<<(tZb%Z*cm!yz9(q6GhNtfRxSxo=%XW5l z0IBd0coc-eNW3Ft;|T;;GRZQ9VzXcC!@1R6j@BjB{egXxGljqFI=6P(>sV=?`u zMF=%x{n24JTf?jC%f5R%`CGr$N4KPDE$5c5Wt)zvPun2{fr_9CxL8${D)!fbnlOY? zN@CvSG)R3|S)*VL&!0D8-jPsg1alC|SVL&o#!dygE|2Na)jFvKmJb*86|k^#ieJxl z@u&^0%9~H<<;;~CIlWd}Pik+U6)#q5-B@vQX76$8G@d#{PMMH#Aq?{M^~GJYiArBP z`Q|KM9zfju{HgHQaCrz7fDg*XUndYIZjhwq3Ja&%28`=CuO-B6^?NfObvnhm)x>I^ zp;SG>afeHeLa(<}+*n7>Ts00WHea&d{dutId@f-KJz`xrtH$Ts;={WQl!Ed?Wi z`^2pv7DO5{(wb(b7EB;$e<9OOj`?6cv1Lbz=rZl)t6|wML>A_%zS*sgGrk+YSJ@Ym z-0tN(_q|fbdHxeK+WpMsf68W-EDga$V4v9V!N_2>q-x}jqrpKUTK~+Awg&k4j4E=7 ziLkuT}(Cu$SJ$ntMDk?^q5*purdMFjuk#V=W#ZThP zOYv-jI~`)VzOxxt^El27h$69S-zZ2aNtuX!zIk)58K|}~S`r|*9;}Vny=zyfuo(;T zD+0k^m&9yt?6Z(9<-P--h6fkEJ`Z8!)O=-`cvf?HTcqPuj(F$vjQ{C-%Y1t^?aqey zGwbJ`_olx4Eq(v7W0wCNGSr98h07ZLPeb;hyqpiqozQ&DO+{2u^{9iY1AJD@wnJj= zBbiD4n{M*w{aU+R=g%Dc(<0xCigB_zmtoG`WYibQJ2G(&sLKIT;zrQ%0dM(xq|ETI zcHM8hD7#5Za zGE02}gS+1|V}X}8TZ%@YveOiLr$0^+UJ2qN1GUYBAC&a(tMfXR+G8%~pFA08%Ch{` z{_d_m-I3he&dcSy$5~ItB)_xzY*{BRF?^U+hErZq@g34?S{`N8z#PONtuD>|JxB-u ziD((}8d+KYfB>_mw@=G^b`l6Dj<|(<&oi0uJ^YMADBx~{la_#ej7^Bn?)IF{HYFaN z$fJwF8fJcXJLF516%;by(GaJCPK96BH#D5+DlXixC2DF@*b<_TKej{+L$+)oC6uY% zAQ6~ZP+8YjRz7sNzvYzMzT<&XEG6e9kdmDJ5S}*h0Z%gu?Q!xikrYHk&TYFrb$>0JxLtw?cGg7Qx8uFETgZl4}w$# zZwz`QgtCc`WL2Hj)d3NBu&+jQ8PQRwM5ipRI@7Ig~hB1G-i0~{+mj^T)xRiKhs zLwIk9X#V})*xdLCgj!N|JF48-whxPm7Vp=!=3ZA=1*1{rpl?(%=hV3E@ZGTDiFRmity04rbr! z%sH#+81aUApKu>*ZS(e%t1IWq*+(QV1P49;)izr`(3~_s@x4D;iKpP=ozWPIl`UJW zx%rEh1hS&+`hEo95Q=U_8|`T4Q@Jt_hCX`u@HVP~|Lla=rWl2c^?hjw1eS6#ZN17! zXGfc{=T`Mm{0kJ64TsxGbjS3JRzFM2SU=Y=l?mcywyuv_w`gQu7-X$=zS;DnCP^hI zBzTEYMpnR3W#as9+Y(@9z^qF#Fe(zl{mNr*t*RL-r<5MuX}c1iYTz9c%p7RdRH4M9|EaPvzH(Ay&ZMN` z^m5&LD_cQ=zj5Q@&o?VY0((m{R&=7Yx<(I0yi0Ah(GXlboZDV(yO5fmF1U#xznlL3 zsk{#L>;p2_ZWpIN*{UEKHX`iXkjCI0z4}qBM02HLt+UXI`@@@152*{|?S+Q@(-Yhs zraDCL$Wlkv^*ZLw&6>oZz)+k)wNqWLw9xsK?WIHwiF5G>UYV+1N&4pOxR9)qRq!_X z^w(jmWPC>(jCwW4r@FM@0P~@RY{$_7ob*E1@=AB*V#tW1YH$EjtC+x_Zyu9}5D0I# z`~EQCWo1u`_b-a1UYRB2DZYIDzQqtT~R78e2y)Yh_% zvA#pg$hs<0y3by`xL6(F?`*QvS6#4>KV~NIyOp}h$h=T%Uu$ac9y%HtWzGu(LKBJP zBz3UC$#B`rQq+UNA$v|5lMW^0&>o5?`=5RZa-2F-gBp=e{A_}k;;WUEwG~ylHb#o* zNr-oPKRnu4r1T3L10Y{TE3V3Vwljt`)2_}ZmLGXD%Sxy@SSUVrd2O)l?>^2D|4iAc z?`zK0eH=n2-xGt&RsO!ec(AC|ui1dy?$cJ2KM={g?>pYWKp~O#)Lg{ccRI6Saw}D5 zL)@>RrR2?7i3PH zVV1jd)8fv}%wOqi%l(PFx>F-C@%w#$2)#J~V>B)@shr2renmQ6x}~pn+UGR56$yyj z>0DEM7I$@@Bst+e;|DVB=$uB)&Xi^B5W>l7#g@&}FDL|_8MYS>EYBrnacJ3(>1<|_ z#QX1*oIK>b)G4C(S^sjk({JrBo*|#IoY$N8CR+5~-?W+VYCzCUc(`eQiBZ;o#)-Ab zmX+_V)cGghO)X9<+B@17pR|pONnfIQG}eY2hnB;)=LK6<)#P@$w%2&?U{+skHr(57 zRdTvHQ9zRJHKSzp3`Te~$S^Xn zZ%~B?)hBpNF3HKGgTfE#U6v#2#E$5WRZ93a}c0ygp%B+ve+5OX$v7~7F5^6E@W7FjwSDZ4{$}eHg8|mNk zP?cm%jLr-?t$rMwC|y+duHCzK`0l&Y=PTZLrq#Jzyw*FpJ1B?OTT2DR)2_PJdWPQ(i_9O)VYQtIK0aOR=oL?$NnH8{Bmx7o*({Dj58Ss= zBM7x#sAbk$TIrv9NfCNTC$YQLKbfPh%XQFJrsSzrzjbSXYafkkFAr|W%WjuT@P0Yl z8b3eYHCJEgLg3Y%a#)$`Qb-Q*+&x5kh}ar?a&oUG0wsaMlb_W5a-3Fe-<6(Q#@o!eEkHPS9yM!a;_aQ!_Vy>RRFOzWz|xKdD`kAVGv z=Wqm$bU>UCP)_zc+dn1Lb+XR2)_H7h*=%2gBbOnZ4AD+%pY;}YA0Ki{N;UeLcz4WU z&YGKi2XhCOvYEJ(Sv}Y`Zwtj(+0KIA_4zyNCB^5B@s4GzJ~a1y&q!2OJrLGf7?h|B z7aM%}D1b%Wic6T&aNxP&Em`|RiNlLpsY{lc-hWla9ohfXZ}Yj)lUp|Pv9dDv+vH1A z%%C;-=_13yfc6t<%i^P>brOrZV~otSyBHlRS9`baV5Fy|<0cT+9{S!lzToL8ZZ&u} z!F?N_(_FSu-IcZ+`)4uC8Yk+))`}8IJUy^q<~%g9TypQpuCb!EPtwW#p+ z++*I{cD}E=f9Q?`JeaC$`jSb$)?mDuZvs$F0;eY~tKsrpte4 zudQxj-qen++|e_&BiW@udiFg z_tl!GsGlH98Z~nwCERZn+$`(a*cxwiLACLrPuiG8Ms_26f$NkVl8o<(bbS8w_0_QFVLYs?%_&LWROg0XYZvcfO5VM^WKujEShA{&n7mb` zzP?~u+K(xr!p}NKN%3|wxARg$$&$25>qyzAprFHo@>fHL5|f%rOGAZr{7P?j3w~DsBxmd97Lc2G~#ktcdtH7$hr(C^AHOtVXQ#3XP0!OQ9a`NX;L$1pH<@3ebyr}$|-wxzM|SU8{m3-Ons~)VgGr>!ko1gLyUCzrs&3W ztAtt!9rW~3Qx4ur`E{gOy+pGyZn($0zc*Uvb4_z}Kw_Ti{{8CdXF_yRqcko3LWLT? zWvCY_V-zWuZ%rSU0y;+{P*-&Czfvj&ygu~xY@Ha2Ag|fycR9+rZ#{fSvUIk` zTRr1kP(!2jV*k=h1Ebm7eCjc=GIL9#`&XBSNd{^f*#mAj9#Wc~0>;lh_B~pwaCSJ} zVadpEU;KkD)|%8fN#hcq#)xW9kHY|i^Fl;Ra=mT0(W*nX2`7PYztKQHq&A}Y?b967 z=JC$9T)87hmSSzY6gc9q)E>QEY6DJ;-bnh3fW?Zg2{6!YS9hX#@b?S#$ey~3VeV4 zya!7S>M%v@n(*pOb#TJ9-U{Pp>B^NgBqUy!!YZ*5%&hijZp%0y#3*#_f``k1h0(gp zSZ9*-kt5_}Uo%2aDBXTb%|zB+TAK4bO=r7CwzS;o*V4NW4TYM_e$xv*e%X3-#L%01 z`298^(U61lJphD>fp@;g2)!h9MzmF&p4B= zHO5I_ei{(qqO2HG?%i*Za7{nPznXq=S!SB&@b-qZzb?;ZX7x{`IZi0e3>dd7%Y=+X z2Q;Nc4b+7gB)GaduVip**}eYRYdsjD{_aw@OOjI3p54)}*jD4%rDngL=jIMfOEWFi zB0{Nz+WYk{+p}fZrAB_7J;}r6q|XJmTu%PUxl%@#GAvVBhnF_rrizKtjCjW z#_-^KwVxbun7ZgZ{b*_KnZa;Youbi@yx2nc%1Tq5Ut4Z#tIlYcS)aw>{bxBbLBCX; zr#!i1W8O;bAg)A)=wntt?q9o(0g+zlO4?`k-1%HAy^>M=xssB^J}cwTdrmSrtl2xS z<+~iUh>5h9l#S6y=TYJH! z#5DgRt822faCh=H)}{<5YEqIRPSaffq#{jw`^29uu8T776L0#u4BQ*?KQ-H|vb5%? zWZWui+jThpy2Q+sLTu4#;(NzksqYP_9#bB~QE)PIBSi1z%Mg*{wwa1GRYgZBmWF+H zw$Vbwir3Y(If0#(HD9wWOR7>yI~8%u$86(%T;uI&qo~9^bR&lCxk)+_&g;c4nHI52 zbB!ixheg#T4)ZDDAGC~#yI+VZ!BtFKa2zu3Id@SC$#ogEWPE(OJiFxW_nVbQ+EwJl zIK0nSDkTMvG(RgXB`5D_&(#o(WS4@^KP4FF2@vjwri{HPq)iQh#4hFktFtf{8MDju;$Y(2C-20#rC+{W@?>rp_u)65?(ue*RlqiQ z^XBa8Lcv7I7n8Jzz`*HxDb`M5n>*8{Arq03f z_)&dQTB5TfjP~2-q2ph|6Qs2YZdXuxdJO4nx)#&%rhon{*_>ec2`5zr^Myfy0htUS z%3&Ra*B5;h4{%}iMq5<~TG`IKi);6^G>AwXR0%TE8c>r57(|*L_ipEpZMY*)~c~`t&K5RHxN5sHuBZ zbo|6E`l5f{3|Z3y1qA7xMIkL~+N{;;ayL13i)CGcfeiC#r>)SP7mpt+mX<`iYLB%g zyi=^4oHRc)!!tBdv9pWXI<}an{U_IZ7=_FNG+6P1jW)YYP=oh;mI$D^)hn zU_61+!GbjhW|IkRKjx(K-iiod^eT;isWMk*9(T%vi$1 znf6%MO9C>5ou+)NJ61!h`QF&T9gEk4M z>rLpv1lcFi6J2MBIJLUG;MyOgGLNCT{xmRf7aiRpd`Zs0YWy8e>VZ}tq`#;UD#o{L zr3Aorf7>z9c(hd@9%*Sip&bzpNj)@)SVMM#(Uv1P=b07#p?^>HTJHkqe(LsDuxbRm z6VaA@=)M9vw$OH>#q9Fct3*r{_cl`PkTfNE1QiO3V5?eSA@;>j)O=q-G=?V!=Obltg;X2gwW{BHK?0`9fy^%EAK z|E33OXtX&A*dUQBu6q_4xi;T!25FzSw>ReORos#3)3AH!z9-sqiL2F^jXmJF)sTFA z<6%q>V^tOV$p~2tVAGX?eVZ5$-k!R7xniuv9J|Xvol0zk~zmIJQ^qTD}V(`}xMWglm=l4x@ZRciu`* zP2tn?2)mdJ^g{W9~~}Pqg0(U1~mLYA(^5 zj4I#lOqAZfot&~MgTL^KS<&mjT?V(1w5bKx9>PT2XWY*tLrNNG^Lufu-gWU(%Rmh` z&-K_m5oQ(5a9$bH+{~&)9=abKgYI{qChjZmJ^~s3iX?>i6%VJU6$#dv62VQ?lxaDflzz z<&=ho=V3{&*sg}fDW~*JZOo&xO-@6@JIi?ER`{-hC1d7jMT=HU=<|@#JUo_p1_Ij8 znO4C>48Sf<$OMslOKMPKLc(<<2%?d@sx7>|MmU$}hx5qE6}3~Pb#<{Xs}XU7A4hPa z22{1&DH`!EtIs3&^k(~>!MQbaE9g8A z3esZTr*VqoB9F@FRuwt%gm%;GbDDvL7b%((V}IU63a8Vap@&Ldr>}P#z9|u z2EV+t{79=p*_m@S$hcMc=9^k^;<5{%QC6Ps8}FpSl;4uNkT=pi8W9EA@Y~%@Xn)fFyA?&>=xuIoLEm_Qn_b=G3u?2{W~prgHD7XSYUF zY*5J{BVF)|b)Br{(@XxE=gKmCD=Xu5wU~WwD*9LZOutTiAR5W;yiRU`R)xXg*3X|| zDjk}adt~G5U2!xQ>fVe|LfoEv$NoaW`NzR53PD&HhSix(Ng+sl099zw6HUaeEt_^< zk~hn>AZT<;*VmRsBah}fMz8U3at=O~!nd}?$i=+B_C~QTb42oD^T^k;&P&L)PDU&h zZ+w5V-X6w8*$Bm0`#Zl%e*FT+JVKwEnd!WghVseP52Z2L*JKhLL-=#MY@^`EtcXG< z_6-NQbLXqyb{{K~q@Og+Pxd5~dyh7aJ(E6n?vPxlKF7f!O+likxm4^h=diX&tUb3L zDX^XBdVPLd1Uqr5vLu*x7DP)0;Gp5RvI>_jRpCTe-s*;vH;Ja4fK${?T8}iLWJ5dt zCz_s5e9MTgW!|_iEhD3-MPC)_ABSU5GSZDIr(lEOjw8g|-GGSjB}zX~^JQgW3MJ%U ze_e>UzHvL=g9r8hdPsw_f*UWty&hkS6MFb?I|JhFzC(I=3|~!7=3NcOV_5@-84M*l zIYWx=+Zj$;=%X}8mJ3&CdaHn&X>NE?JAA_)CnrN*pE#oBx;h8l=`>;EW+?yQ;^VuE zwlj&6IJDNZcuu)Gvu_j80~otOLxApRGB}(g!ap7Z09C>?CGl%QXVEGHHO}Y=teqgg6A8>aGdtS1D>Ixp{Ex?tb+>w)pNKN&dTPHBaWfG zB_xZ62%Au&lHy;01`DD#zqtPX6$vS6Y+M`;l*~;;pA%8zCN6vW4QCsRwk^=(ETN^^ zLBtq5sMBB}B8smh(d^}ljEqL6{^fi3CJ_+!*>Ai}C{8%wQ%z?>wcg>wmm@2QpN-p2 zPR@w)qahmWf4cFhS7-?Y$r8w6JlGbT2`)z*_y04b^Z)h5Q>6m?j8DEoo#P9UE#+Ub7FZxBU&;+fj!$O zI#sLrjVHW^v}D<^d7;qVP&(ePpM#7R7ZU-S*mgI|jWpF?6$ToN2oo3brMc(uxmw83 zKbSwLZ+hzcutk4UVzc=Evq&A=PxKEMk0{>lN+zY)!w5#C=n>7mHeZFTTO-XT4I|9~ zrOT#v-eZ(DfIYh*)s!yW?865g*EhshLB0 znxE;bky9y2KR&?TTwM6rXKta?o{Hs3+5Z0ISKpaL5u<3xyvIJ zClCbmNWKjvr9BS@oCxS*ua08aiOqzvW%^AgF7xuw4|nTqqvqnhVmUDMnFrTZIlB4R zz1Oo}0wfZPG_y@iKJU?T&c?-+CC>)d(GLw~eyWw$Izp!?BK{c1Umu zDTSTL=N;XY>u4_j)oxV>ni;3z*bw;UEazpL%efsEGEiCneL1n}Oi6#HMN}@Jz-?`^ ze1~nPbt_!C6b|pZ_oK`qaA`qBIXEVpYG2Fue9PI_=UdM2_>`&00Zlm$;UE?{j!gE9 zEd`)Df`(m^jBsBLXt+Mw%NJWAzofRSPlDr$)*B75%D&P#G#-ye2jaY#aaqT{=I z!|U^*f@h^jFNa(Txs((mFvp6LcYi-WpdPMPl4aY~f>DEBVmI~k!-sRs*-$llv%37= zB~kiT)OuxgHGt{lHF^0PzS}7%c#_feNn7DHw`qdvI;3kyu*1NzNPX{jTj0$h&U41G z#!H^%4a^)I%9k&fmzDjf@Pn*)U*E*Ugv|t0B&9i5*XvOzi>`V^v${dDLRXy$^niE_ zGV%6GT&vfWY{r}9rl+5W#P>e(^<_G72RZ&EwPe}lJnXNC_)gl6YeocPzeQmmE&}~( zI7xNpwd>c3eH(F+h&LD|sF(0N;zA0S;m?o3hKzly@$g7@sq4n9Y%qQP25JZ#Q52z! z{>HNE=+2BS5QHAqg=|}Fh<00+VI8b%BnGn2G>9}|@?rFwIBPPKd&<2_(Ru@rp6GUr z#Cb1DY}?uuWFoW?umd!9L+e88T{sqf52_pgco%NoY7~DE%ZMQWwmye%p-}bDB8ne+ z0G$Zj2(wxWsH?BL8#sIrcap=RbXsb!gdy-~m-}bVpTBMh+&=_#iVCE-i~_E{ zuKM!A5O{Hytg^1|T8O`Z)04}OZdwCOTzkG=iw5rB`qc^yMMh>eVAZdm#xiFe@REYB zFD@nnx48dm1rE*tH(3Ek$w4xDr#AsxLf3$ILd)CLM1%rY-`Xb}U;w)CZcl^p1z;Wo z1_$uW6z@=A3;_>v2Nn?v^@3*V=pCd-guh zUFV(;$1gfzKFEKJ@xJe`#*9)`mPJD*MutEjX!3GW>JSJFB?JPkiwF(Af`^Mo5B`F+ z6ju_5Kx*Sr?oHvqYbaNBSqVthchX((g7USTx)KE9LkEEby@f!2gD(Z`Kp^fM5Xhbh z1R{_Qfe<)-Xi*aaZ-vN9iEDa69dsl3DIxSCtUfhwAGLp1q8^ECzm9D8#8g)}El5$; z)7Mh7nPzCP)v+GaEa1gRlJg##bGKn!o=rt3AUb_>Z^x_5a^`>+Jpp#)Lh#z`;^28s+<^Gh4gM z7KT#g3Paw#b`i*cQr2z1Wp0p`Dp}q7CD(HEa`h{+tbTRcs+%HaogzOr-Rhi`_*T!v zq!4-?L-l5>{UpAkvu61NDLUG$oFnuy}$2BS1=bly- zNEUy3@LUPFnn1u7Az+!Uw~9$s*jw^E{kD7Uup;1kdMz`<9D2D&gi6SZy4V<6oQM|@ zY8=oV<0_Dt6DJ0dph{7|gw?Ge0Ly&&+wMnGRIxRrGPxzu4+@#%ja%Z!W&drJtoxJ4 zc9c1XJ{=Ymd}acktOg??SAig{ku;tPqYTKt`}n^2)KJ%!1ZB_|LMH`ma1BRWq_A&| z9Z|p?8ZXI>UkYoCa`t#72`+MtE_)Do8lF>l$$jl=NM62MzwNYiuui*t%XMj-0BQZI~V?t6$yYK0gif$dOv$IL`?H_T_S&=AjRgEMd8At@)h1~x?!EO|`WN4D~b1fQp>{?cufFjKW!wf<-v z*kHxAXJ4iJ@dGYaALEor=;Iy?hPHyVP7DNnku&6yNc8L8iP8F;odnNVA;N_sSAJ1l zGrJl5i9XnF+bPI`pP^t_VE~t}8^Qvs{;Iv0b&OQdhLgzgXS;Eso&4X&3q{z#aCq^} z!aQMwDsAHypS9;L5+Z#5l<7F-^e4Dvr2V`7>`YjnrJslUv;57=T- znu0LRmd3KEAFVum3dG2rlUyAmcH5cs?c-};BkihQd|_|Ek+tg7MJZoJ$I@m|KN|%j zs=eQnD9d<#%$C8i_jMNs-(QaslM+#aB~{CD(yXhA(R8BLBvLbTpmMS5gXs0InUOLX z*F+~)UAVDGw#vk^-qvGV8frM|iO{S$<%4BslPMLNU##q!O@xmb=d$Q*_hvWk<(&}{ z;^^}4OLgCj>pWM`sf=P#&@MwCSnG|jO<_fv-QRNRvXF#tAg0F3*_dU0M-pLzxwbZ6 z19f`p^~u%p9bs_BbLUlvcJ)9Ilu2z)%%Aha?|%kMsMi0IO0Z-`z0}HJVXq+}TaQ55 zrP<_dh13)3ySe5sJOnv8cP*N1FcMKX6H$I^Jr z4m`x@4tl;$Q+hGtqPv6k)KR$aCR0B_@~nUVuGE+AX)wVPx?H5EPL`^ohelXIf;@@7B2${+;T25;x}QLe zXauN~Iz3Q!r~+hi*kiR;Sd)_prhSNggBuurBH`%$1F>?-14++r#sa&xL;JsyfrGn` zS>XKG_#C219LvOn&mT#f)cqXaiH}rB$Kdv>y>B~8_@mm{wy?m1$7(g2+8~+WIVQLmOk~}%?81*+SQ{}@*KpTeztbi-wEQ$Tbwpc z4&NVkjrZfiZA|vZRPN2dm#^Ns%~Ee>uWVm>3%N1Sz8^+Hr{7v8%UWR2DlLc}aF)Y< zWv4G7df5Fy^_<}I;U!y89ghu6`ioyv+01Dd^;Z?!%rfDhmUv`$RLDbS&ED z-kWe%>R0I#9CX|@&`^ePv`1aI->|Ql?;ⅈK{FY`0z@ks-2{!x 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%0DAZTb)-4SY!h3Q z;ZP?fflyV=wn&5d1sD54qM|G=s0c8$SpW*UetaKf`lVOK zaQBAAT@TTd^T(}7b@fu~Vv2cRp-B8#U9J24`7@9>>gvGnikAWp*lR*BvUFFr9v12_ zV6Cn${&}XDM{ys=ug${zwEhoE02!3YOmFtBVC6coUf#nQ?u zqRV0&)Q1lq^aJS?!{()j$Mp2H1|r1o#^bX22=oKP8r$=^)pGjT2VN;jA_De-O$i4Z zckZQp+A*`=e&sGVwzZ6D8=f?*Q1<9H2N$#m0T^y_@{+}_wI*mvIn6f}TG7c_K8Wc!b=2 zGv3s@6vcU3>h)=zf8#XAjlIsR?>;buZcMvNUy-v{KT-giN+)JQ~(68)%FLnj!ryH0uW@b<{08Ch}8k8kl3yYEVu zcH>$PTlABGKZ<5sz

KSF)?FS#8cTn;OmB3HHKQ4@ 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 diff --git a/ITensorMakie/test/references/tn.png b/ITensorMakie/test/references/tn.png deleted file mode 100644 index 07ece15c9306e5ca04ba89292c9188d6e9e24168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62930 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%0AV_3fCpV^|u3TjKA?@G~z^(f^3t zE_eSUjFYDYo7DP-d~svLbFH7gMBD3RcYb|pS(a}*uLj#mCyz&aY z5g(FCvC!SR^>lCH`~3X;_wV0TpIKRnxNhr9NJxmMM26-*vn&^7bL)?y$G-1>{Mr>E z7!&Wo$Uf3PK3)@Sg^{pbK_S3bq$4{v?9bW%?RR_T+w`Qdn!Zv)@h?7y-5scVwJ8$b zR~WLl#ZY}tACE##yeUgpyU?4z5 z;KJ=<>6*r&(~iK?qiGJjt#Tdl1~hByEyH>bsFSVp(*r2By}iBT?U@!48)j)48GxRX z(^KcoaWy&u->712B<#^@>FS>S-f0XD41{)1n+G+>sPuu?`KN}XqoWraF3r$DrB3kc zp7&uSOj|0mCC?5{W7ab>GZ7Akjl%Amm@HXw-nD)gw|;wiOb(ZtkfR$>bd}=a;ZX}a zk=-?s*4Nj6@nUl%|M9YeP%Jk$w^p$sJ4u*4GrR$r@F{qxsRfwqXXDG zQEmU!*qB~}&vw=e8V)Kt&X0rB6H`%i=N=_SJW5`d_NLAAuU$U+DiSZxrGE}=Jmy$k zF-?ezlOpaa4Qgc!PvqZN+8i7hD5OUS3^QVFz~4C;GiEI0B#!1d~ud)mmo)OOx|rm zc~etUZSC=75!cktrlu!fUtJr@R;em4mnL51=^q>BBG|P}643;t%4Do4wE94{K-)e& z?bRMd|E~=^*U->#aM*|UO}iZ}Hwb@*h6Jo9mlhWnx3*>qba;Y{CEFzkkRP_=23-*t z1YAN&N(#OvRKR;4^WGoL0Xp$lPqjTfJb)1t6%}Qxq(nqS%mQy%Y>Q0$WotT;`W5d38q4t-Z2?Ke9`%+gYY_nHg-rlBx)hl@_OW;g^iPqcO3-6L46CN5K zJ_Cph%tk08U=Xf40YLj{TSSBRZ>+$3=H}+s*4703_{{)7m~?RpuAAc}Pn!J`1#Iud zH8fmQ+b?FRq!?z%;1X0U?70;Zpa1y-_x9Apq&G!^GfpAx7n}ij@3z)fmz`OI+k}VE z`Nzk}UTJs&+Ak#@FMJPM?n)@uDO-U$P#uBynXv~>b$(Y^{Q-o7WX9OoWH_4Hpmwn*6Ws-eE&I;4<|gWv$b_4 znD*uF@$uO3Fxu(8^73+zUuy#uR%6(t9MZC~@a}WRfu%D&CHkejg5dP&TwdcUJp&Vb)YZG$+ZJ;q$%j>c@F2O zm6`SAJ<7(D;~Ua2h7yO90|*Q(gN2nfK;6aV2>K%|`WL75n}i`A$J^G%#whn1sNg8? z_q6x+UMSHsF=6EW94nT9)_47u%ySD1KaI!EKZoB7+NY~BE6U4X5Bn|~Nz>EU7p!h< zJP##^MR>7xg~m>%Dg$zII}X(ufzcJ}v?V{q5Vg z_GO2hpQD9(s;a70HZzhJ*SfpA(Qzr3*4N!P$M2SCCnY7F{~TdumcRY>*RNkUn3Q2I z>(EPk5JrO2;v3cX8s1-{!o1J!To4-cau@R*zX&|tim#uI$pi@|Cv!X;YPFMd= zr1-P2vlqgxbc06t^3NIFCG(drUuQN0@kFNuT`jD zvwyfTrm6`GzSDU5681w_SeWiok%EFkSy}miPjh%!SnbO{!f@n0c7HVQFL$|aPfuj4 z&;r@s+$_k*K)sho26&Szj1wT_NI-rq$gfsJ`sQ=1#Wl6f$-vDQRKjTZ_ytDzva)OI zX;|lbZM11=X(lDwj4@JiWn~AE5*OoT<|+WuK=ALJ{Qk{!`!>{QiioQ+OWeKn?_s2R zl`kghJzZgq9^6y|zNMt7C@B|*oL@AV?p{w6$k10MSm{CSN>7T!mx*lcelO^NMozwa z+;+6}xkT#EnJR6>;=A#Qw$CE()DnOy!$V3UM`kfE_-@D&G(K&y-G5R`0N)q9+ z+0>Ol#*ZT}U+s*o^g)t(e}8|pK&Q;>6m(9bdzyv16=vP zU41=1tvDM=7(R{Y$x06;b6k8pjgZ4_IEtd8(_mDcW}H2<_M^#_7@J}h^dJ=ZrD ztLAo>uJtB0Pn2nwTzQn8E`P&|En<=I#tr1kCJCWxLg7G1P8RcYftgFHfk9VS7uvI{ zy?u?_o(W71AH_VO{Rg;CL(6UUzY3oNXmtZC5SrmA02O^o5b~&8_d}SOF}p6JJ2*Ts z@o&siL!F;ro2BM7GFg$=QVv&gB6?5YC zQX~*g(KjHGt*wS%oa8wY?%!c$wSvPkFfagzi7-SO`Z5m}7lNKP?C+-r`30ax(8|i7 ztE+Q8LCoeq!0t{AmXD!}p=ZWyi@eW)0itp>%oxzT0Wfb9Uegc~6hymvwWg-#E)ME` zkJaF(j_Df5U>x$d@7|G7Q+w|(bqo%wGcPYKZBACO($hCjOz1$rS|4f~93-R-TokO) z@3l`-WQFLie$Zr!C=wDM&fg@Gl8u37# z@Mx=LB!9f-#$sCrHxwu-6_wZil6;Pdjtew4$CYjiq%PzxyER$Cr1*}G2n*DVZzg*K z8M1Q?-q@Mx>FG;LOR!NDmLqwfLqO+_kB?`-A`JPIn(Dh)T~{Ysqi?9H8kLgLXRmK# zQ>4$)*Vo6%#unRQYCG4kEXW}tVZ;~%M4ptG*q-XKzJ7P<3s_PaP)uHob43+X{6&Lg z;pTzsvXKkJcg`o#<+crGx^rOiS_UxgOQg~?SB*-US37kmzgp+xf2m!dPj6$1l+!6$R z#KF-K^>h;1t|OyT@M-X~mFLIrnwn?0SPKd^O^`D%^bfW8l(3og+|#A_q>hG>p(ns= z`Re#*KZ^Gm9Y4wAq913@<S187oIvgoCwz8`a!GIE%+`353u z8@D8A`##RMz@Y#2-vIyq{WVP}%16*9crD&WM_ zq|t|lezqj`@}i4=GH`P^$IlmW9+$_|Ro5DqwiZWmOKi@#1%?37lvp6s>vwtfv{X8#_0 zr@g%iU!tiU)2FlZ>-lL^*TAQ1U!45%78Vv>zkUsr0t8dcJVhlXCf0ZF-uXsF0wlkU zvEQN~Lod`@JhEOHni=Y?rzBjd0@$(ZkCqq9rQ7C z1O;BzDteX4aM3wKZ8e%Yz1Vib%Fd345zyE6H84sJs%Odcwe<5zB79nt7WAAV!Nvb% z0j8@_tgX+_SQQm_BS7-w)GdF0u+oDZ*+=p;^P8F^L1Lzf#JI=u@MiNDXYFbN9i0=- z8#mrig)l0qHi~PLNX9TKX%%SCudXH}Cx>IfJa}<&!KzizKQx4Ts)anppf3Qq@HQ1U-ekp2;Fup|I8TVa{`G5rDvFyZGpLem zf`TXgY4=sXFYZBi1@UdF+yeEU_&xb+SxPNuhsvn`)F5o-I%lU z!|;vC-q7HZlD?RJT`g#8D#;Q2p4{W;+mB{g}h(nilkurZdQA5NkD8DVJHKhWHjpxrw3Wn);nia`O2dz89}Q zbDjUX!Of$li)Cf?nN3mYFI_k7cpFYBKtfC`r3uphN^deNVaSOWjPID=zrPOuZrhla z6nM4LHaHCX!t_~S6oIIBXuI6zxSz#PfAw7=vY=~NSYLcDU+U{qv1H}stTp+e2IJG( zj1?sp7Z+z|XCwL5KQxL8Lbn`ioony#)4-y^ciu?9`RiAI`JIcK?Ck8YSMZCf-?`po zXPZOYsjnBqJbi9E`(rhQKF+_dZ7|c$zPZ*-6o)dXU2bW4{@k6{28ZF+tqeE~_G3j` zHLm!y{ji>3h}605T~Sca{RLtya;km(dKVbj-d;&X#WOPWrF^6DkDWwvD&Or2NPfLL6+b`40JFO0`N|J7!ICOm)s+}A4;h~w)o zrlzS$@gz>pdykK|0Y1FOVf;r<$Uye}{jcO$juuS7fQpVs)n3Ymc}heT%&w=}+fU%< z_k`?R)Bdh0cWg|@E-AZdsS;raM-WOIikvT2i1Z-bFa%a2Kn4VwTvAdpR%Ea!h^GL+ zb+%PC2V>a?=p@l{!*Ak%D3c?$Dh( z>s50vYrRgnkrEfo`b0#-FgOwHhuF;cYrjdNilvmGnez@l{^E$iP2Tzb{ru(YNMPLl z>FLHzh#!cHMznLE)6-J~S&&5<7c_a8r9hbl0YdIJAv4eg7H)0_AoB*bF2q=YAVYvg zOlNc*j#oMd0BceOAKI1kvHZvHgls$;OGVMySuwC%Wkzd8Aj;kM(pEFS2Dabfv_F%iUkV`LruS!@`M|Ry+{f zP4Z0$x3Ej*XobB9@DY^Wb3cPt3m%0@i69?e#plli3UC9kr|>NR6(X!aPzhnWL^)+a zs#_IN3VSDaJ153}H1;OVGb%peFt`$x53*~#i`i=La8eQgBe+Lh%MM=Su5;c3AS=?} z4?>ngluANOz{Xhg`w)kEk2ERNy2mfY2M1MqyK#Cx%opoc$+!vLAbVG3mv$6{dnIB6 z#|ga%b>5fmRzO&!xv1D49yWFukREq;cWNOAX*QDVPoGT9&F|+H6tKa}04EB@1{m?D zrfMyQvgj`D02id$v9NX_!Vpq%I0Tm^;ql6OV{>uAN#P;Ni`4^HagW$vYu8y?Cnkh= zdCQ^G(@7irI=oIBDS=BHfiJJpHdD(yR>Siqe2*TNg6vD}(?1@F@4o!~RNCluZo7!p zzLp+bHf-cJfSe2Bk2pw;@CUR3Gc(56C5Kan|4UMunAkh@it=GZj`7z7Bf5Hepfh=S z|BMB-jE#WgdWrRNr;xk*1yviu)-T1+lUs+7B~K}lU&LiIN2iPtQ|;D!9P{2({bXUF zF+1Pwwd*OUf*nvX(#wgipv;CXe)ixadbx67)MAYZv{l?Z zxBOgABJ(BbE^b{T&MYo&1cLH`&&r?R(BpziM~B(m3j5Zry0P~>a`I9&U!3Qc(7e69 z+H)TXI$YAV< zx-W_<;v8!l?X9X%R#w&xMnwd@rWDK7wzQ-;;#sT9m(WBUa4DX2lWFVB-?y3l_EC)4 z+{Aw%!`aD+ghT&bbhQ2Uv`~oj&6o~Vc|OZwG9I%x#l<^dZ)BvWgAN^=kbsd1oCpkz zTe1=G;c!shJv?BTAo%3*6o_9+fl^nz^-Aw@T|IftIZ5Pky*?hS%gXBNSe?5gfjV(_ zPg-{Hv_4GDjUK0jQc_V0YBsGnYd;rk3ydPa-itjrxIgm+LBad{vuOumwA{DFJsA1K zLjhV3cfsd)6f_OMd_o24<19Vh6lL0Ad%V3)`4a^1;=l6G`?-oPvaqSd4@{Z zCacV|6q|>#b$fdcZDyw{tto+GlEd1>FsY!^Ykr%gfV00OPbKJE<7oWi%_R#*E55{! z{b#X`&fnJt`iH*-i@N)7O{ppCQKF!zIyg9B;o{=r<0r`7K0%wDoCE-cI+pOc@B)p< z%j+C;SEQ7S8`$11=j!STlID*ebOe}^dE`ih1>N#woheC74_rOXCfIL&=$$Z6Lkmqc z0d+Bv&kFrs9%h%xujfg^VD0X;;J=fgjgMzOKDqny{Q6X7T2eS}Jeyw@$vp@y-rMsL0|j+LrSYJG394UA%vuwj%ypat zLW9;)RYf4pV^9@iV~H>@{zr)X;=JMSrG~`mLcs{IP_VCEtFfEE!qVE_{v4PE-4f4_ zgS+-OVQ|=<5%i&PcmG@|lOhgGzmosLQ2yFzaa#(b3VLL4Ul(`O@48iMRe9QGZI z2)F+a%h;^v15&qOK(?~Oj-DO^7@|XoSq&S!uEEd=1OB}C+40U?rL`WxJ~<{Dmq2ih z5To*|A`TXYyVnyqGxVn_*M=~RUIXF>2M6cpZvX{J&&UA!kqDMALyi7R9pjDBLijPb zeBkx5b@_W4B5zTt$f&UaB!Ad^`Aqd32dGyN<3SbPBbAYnK|w)*+Z`HtklDVhU54&M zAwl!u!$~^Y6~?S z;kNtZ)2B}$o`Zx8syg%X$_hA>j0_B5G=Og+AW#L|&R2usZ`TBAy#iJcNC}XsoS$IA z0B=rAq$Hvcu<7Q)X|s0=2KpTkfQp&B!eJz%P6$&#nkH+V8;Yaju3L^-L17`($JYOP zvrsZfZ#FJAmP*)Z4Q34&7Z=zy01?~aoa=HUNKu)V6}ka%b>P;jnQ3WvpZBK}H_dYw>Tg1h| z*~R1GDbua61Sw837o;4pGU56b1<}ycb$AMN0`#ir;sCbl-28?$PJXxa;_+Fgo(+tS zZo{U7;t$Rf?Ts4%?jNC==BWjUZ{E5kCMpUNq_FeP+XR@Zf9xa;)z*_`Bb7f2x}Qm( zeJ{&)baZeiHR}4LUKh|;+RB&}&u2L<;`FmWHwF^SiyntKAiD zo)^67zwnevdHdXZV}8lIMrh(hk309*VHat!QA731)4@^ae3W+|^s0ZK;8JmyXBbeT zvZILqRVB&)o8$Rjy6KC83cYU#+Nu`}?Cbz^sr|)960)+g1p6w+*5M9jW_EUxl8DgI z-IKco1u&la_?!J-)-B)$kowfvV!dr;0i}>ltmg&L<5P z^EpG?=^q}n9RFm|BkXK7QfO=TEVD2lYZnP2F>v$^E0WgEj}wM4(kgyiY9}OZeh%k?D9+2x{WW-Ea`K*( ztgJcscSzOGha~=cijxy^UbTQ%@mLIk^$N-)3Zxp~CFkc}%)}%la8xrteR5jsZ|>_W zh9ZMtQp@V$Z6;1H$8V)Se3q9R{NP+vx@_rt99s`oCR=Qsp=QRF!@}>ITfb=`YS! z78Z9jCMG68r#Rf1OED%pF9ZX?%E}6s(bLUMP(&nvV4vaL`}aWT#)pOu04%^{gB=9V z(EqLUO?ed+3Hya_K!xjxKM2_Na^d7@muQeAR{N}cE8$EL3-Es*nECwM+L73AT|R4u z{(UEtlj!!#bk+T$P8rr+OJWo5@jaf;9I1DQ)tHNR! zQ-brp!Bt-*03ql}k&xiyBhEYVYDh^jdh+B6)QlPmA2Bo@A)9GI@UJmX9RLKuk~Ax2JkDv;R#efy~niRPm6Xj#V%rcayU!Ty19hwsQG#t)Bp ziwtOKA9gk67_V;Qin#8Gc%65=TH9R?!^Xzip7}D-7~ItqopJvj>2Mj>gTG!9t(Lxi z9SlrhI6(@5EDuaRNPbZf5Iiw4@edss8Ul~;J!pZ@oiXW0Aio;~y(S}L5o}Ob*6C{d zfJH%O$Pqr7D18Q*l}*SZLPpZXWprS`@2p+uHjS9L+2^(8gH?o^=xl7NyRvwI;!plp zAGCQbM}1c6BDQDmh}`5a)<=J`y0UviHd1;sbbGRaJ%9x%q>BH5nFSfXghM7Te@&yp zW=0r<$hNlNw#BrsWI-imWgF8qJOI0|G$?Ue%C*4yjf6iD5#l}IRGLR-3Z^Cnp4 zGmu*V9RM7+8#iuvao=eRv?W!c;(xs;h)|yK#7h*fHO{tqLY9-b?8=UDS(jrl_HpC> z%Nnok7p*NA-bo@4q_;@ie=YNthg(#n3D7Zr>mFobTf;z< zp|(EEd`ruyV&aZ791Iv!cMGyiKsA8ILLf_Zr1V)A2%~?qOc1;s>jnECMsygXAP)(v zA}=ow#UA)pkx?Z3zp=VXi=iOc<140A{4(3x$V=emtMDJQF5Qs8Ou5e5@083nRA*M$ zWPhtu;bB0Q5khNk2UA&3dunb)CY%$zs-dzOw)3CVL}L##AeoPY78TVx@C7$6oX@Q z_yhmA3P*wxh4{D5&O9Rl^S=>h6oB+fpeZ1ELerFri;fd340YAm-#EJ-TP+<~x%WR*)BiG}zA8ju z^kFge?jyr`ee!dw-i@(GOiG~HD zu^cNBGyaN}ruy#f+nW$1r4o7zp`6UGU%vv&q7`<^@&0`Tmb_xd7 z{Wx#{fcwC-WAp6U)q9xkw2vMQ`JrMQZH#g9@oBP=fXLD4bxNo}7_tQW0xLFMZV>~B zQB_r?@kn5)O$gD=#)hGIVfbi{U?kw<`{j2{J_e$WU#fF<+sGfC9j(uN4q_0;#fGg! zQe(hyNTe9Nd?~KMXEA6B8Jhrf+`)c$YT?y6yMe(B%*hZ&I_Q4S^G_uOCBq+7(lH{F zQd zzI!)%Q7{KAKWr>4V86H8t0XyOrBGm^*2eTh1O;*NU8Rr9PD`6#TLT+>RV_mXY~bzL z`rp71VGIq)&i6SwQA6M+Ry-eQ!5xXr*y%SDshX?ya6kAN_b5xrO05x39G?7Xuaaho z1IwC+mlqkDP=!>bfX#F@pc#ZEP?z$L&-fy!@0;B0O_DNW1P+si^7LuB6^4(Gn}@%# zq#Qg*@-+X)&Q3~H6ag5*5Dv}N$g?#)KeHeqnymdo`A#qGY=Ezfir@V#>Fx!X@KwaD zqwGdse=LFl;>BZF=T-vI0k9xfmY1b8A!uXRjzZ1_HoJRlh^y(|GD-R!b0giflda8V+cDuX9>^mC4fzFtfQ{<$? z?iCz)_H^?5+l6%R4vbbjlKH2|Tir6{ey`1jhl~4XF;XH`;qhZvh$}&S+8YuRk`2^Z zSiW0+cIs8?1_iXr7-hHKXCs}WjZb=ToG=&=wSxbd8Nni9XMR7R;d`i5#f-`4np zxhA^Ht*KqUe0ZkNa+l1D2%cyxo`l5J;{xpx(0f7bkko`SeR(n;4A*OAY3c7J;wJiQ z2cMIZjC}s`#{n3Gi*46$1SD|U@BjOpmB~VpzK^CT1bDOt#Wn1C0tYfmVy^;RUKNYD z?n}3ZJ?0-JIbnunG%5}w(GhxV$VzP8ubPY8mfB55EsQbWpV zw|`sM`3il?kN##N=5ZH?d(Yrm8(qdY{udLvdXMo_uv>N~U0i0bH{ktHP7yO-Tn~zb z@phl@ZPzkrg^(M1T%_;E0x40bbMMPP#~|cfrT59q50kK``gJJP&J^V^4JmSnmQ#Ef zvwGbrNLagZIK%|^^?c*!JWt+CIYWLLeVp9UjuP3@dh3s;APIOmgT(am5u~hw@?foc zV159<8M+4DQawaKQYiSPA)T~zV~I4uu+|Ahate?7kliYkd$!KQ{>X0s+Yg45IvlG} z>%qEZ+62yz$`9G2J0Z-<0<+rEh6C8-(EZldp4aH(X@U-b3&(i2UIgHy>!WF{8N@=EJVq@Rwj`0?&-LOp0 z&7MmyoPm!s6ZLwRXq039!nYH~^HbgS<^AgF>ZqtF*pqvZt{H{C?*qI3H~-aG;&vB& zF`ETxq@SvCAjpG_k>95??shOnvc(P18yM+k9oSu1A=cpq3O(W%%NYOYLkz#Z)4D2A`m!Tqmj=W-3CvF zf-j0DK4s2MVF+!{)`{D8yRsD8ES(b*J)rLs{SzkXz|C;A@WbM12_5D_U^Uv^TT^cI zTZ4PCi`mLa?RAOvEX&nBmc$QGE@>4QW8!iN)R|N50z=b?@81sy2qoSf?jolsj%a=Y z3gsF2mdHqy>{T>09CGeYFzQ=YP{8$)U^kpx!NB)VC!mcq>yaclO)U1A_a&sI3+^3y zSU5zvGspAHoE~GxrH@+dt3Yb|h@<&#k|`F0(vUyhJ4Kl~0unSSQT)U(3HOVIR$R); z0wc%sUHYo2@a)>RF4u*~f=*Lk)Vy|~7RSXeR^`@ac)IHVO`8Xr8_YkoGd7}mkfVSn zCv1^Xq6MD?cdt{1(ZUu~RE&j#J}H9Oxc=GyWC7e;59+42T!fSHf?LeWbPBb?zMJqT zDiLN3ymR2dMMfgO61VJzs`B=5v0XfvN0~?YC>x>F*qcS(I#mo$^umRsRp}8uK(Mte z1b(K&ylKn*Ccc7FKuPJH-NM>+(a>i)6*79&+EKGZG0$`m>2%`-qvZ#yia{@`rf_{% zPs^B8-UzvybXOTY&e6}D`@yMK^+HWDyY=A41AB;vWXMK}+xiZ?sRyU)yzM+O9lQ_=0$UZB*SuOF7BNzs zgt1dA|LWewbu?qhpTS;&6w#oZeczBx+c)~wo@CF5cjD9v46j|I=`cn6M3R+*Ta2rw z3bpdTo7{Z}S+u*s%}=-#6bZ{FUX*CRAPjDqcM_hlsiMPd56rTNehYN z8mP&TzjlL>nK|^zo?*Jh7v*GOFi5hQ^FV?CwH6--=Nr%FY`9dw4~H~6^AMv^~bSvEn17d*5MuNCdP zMfxF2Cmx;?aH!D-dZ)nxlVgQ$VceR-+M!3XG^^S}4VF0d+}N&V?)Pt=>3qmq<k$wgI&lYq%Z2e3hAW)=>7t-63A=};mxt0A~K{NF^MW2dZs_OccKn3sNPnwYz z!By5tJnN+QkN)V56+2rDSsD+m>^&l6MaP(5hg2;$jDU?7XV{S@I>;~^2S<_Odu})i zkPfy6h6_Ft%m(o2$S};Vuz;GyhRKV9=d>0UYg42X6aALp5PuDfj=P#qti`IxXllNA z;cfb?d5)G{*VpZqwAzyUEIcAYg$H<2Hc_CJuVVsBP(y};o-y$J?Ykbcuy1B%@MAc0 z4mD^}1P`tYJ^x@vCc_v5lnJza^;}UgF+M^l&aSkv4QIka>5PG#5z9D*%qTmmwo*2w zAvc;#g#`bl?QkoGJ+ICn?`r40^T0*fz~O?2L*=tm+1uIHQ5fQZSA=oSu-*>I;!U!x zpj)SlVV}_V+344x$?v6_{42~idPHL{W@huB{@yHLL+~mc|2~`2O_4c^%kxc;QFChM zrf2VZrD3(dei5FZ6;8Y5QseSsLW9TY@xpXq@=d+2=U9=Y+H4@Ifqx4VLQ@8a!!XvK z9c|^0ZAcL`fy4mN?tQwy4AWU3kg55vfqYh@n?MU;O!fBm-s`XTd>zufKIGOkbmNxn zLKmlTNs~?R(6uVc^w+`Yc+z1cbcV6ap`v}TnAt-XRa4gdi4TxC%NVmK4+mGrq(T?I zHDlu{NM%!%xazJ(6djPx9ApgCTA$-FGZ9N%XJ4PntpUr5FZ#bc>XoyH6yPN57HZ{c z!1$G>`aerb^kDvwd0|IosGJUyR3)V#aP`1G@rYD~Mxy-bMzn#CBoU>wOU`c#N(6UA zh6Q?L>XHIOwkm?ix73&~>J~d+V4S_Pg!O$jqJ0^nS3GyxP@X%(bKkcA8d7I7_R~eC zKf5CYa+W^RpB=mV;f$j_n2+0M)ogIi-A}97;8YHsYp|~$F*&U>NIZ~uL$i0t#n*PT z4WP{D;&c_%3SlZd(L6{UBD>Q_9`OS;I?Ry9#!E<2e{tQx3u&1@d8A%y+5tkktc*-N zr_o0TVPo$3v|mo55n0WpKLo31z_6nh@o%ROO{c@OshV1Mn*4j%D|F#8rimB)?-g5_ z?#iUYaUP99R^V6}nK$6}ko-9`%O#BR`#l zp;)7HG*~j#b5)rIBLF&hl^ziVdNobmCspO$os8=WzMQ1AzUyd-yRVozP)W&E?sfR# zeU;6X{^s32SdCL{k${j4^=|bd1+|eG}27I6I=2Ya^q7T-GgynEf zM+_4(zvh@BbBIl9mj5`|5Fa1k4Oyy&hP%IBWi!PpoQFMwap@S*cK|E8>@e})71c5E z0_eP1qFd-vJ2P)rtoG#K{9*WW!^B&z=r#;Tb^S2*AM##d0+F%L(+8FB_ z8oGhDM^>XR?y%Gj0ow5w{Gy#txZp|3=QD2^s2?WS7*^SU1K{oDwX1rt;#P&}|HGx$ zfFr>Gjww{xzcu;WP7=TUU6ZOQcFZdd#$-XybRrg)9BR~ahu58;sSg4l43{~+tsA17 z9&1O%6w{#{pUI51!;AHNy5O|)0XEvlM*D3IzqiZLI|hnESn?T+N_*+r1ZeanwShab zf2xsps#|}NaJ5Te)as2uj#q|OOhRGG?s5|k)1%5Fy&EqDcz70-Jv@YIG;`H6Z5vJ* zZ{GCJvLN{O2%d4P0!s#r;jc08++LpLJ{nR<#+t6HK|YHJE|OLuMR=7jl1S8o&D3HX zqs>NA_U$?E2Svt!<|p0XZ{JPq0k7Y(V)6z5|C>p`Q$+wgg<7P{s*<+`V9(PBo+J01 zKA}q}0`?p(p=LPOfby+(qixZ6Ic`sBds`C8!FFLHf;l#CKT~1h0TA#jc3}&BG1-db z0u;Upkvp7WTIia^VFDaE9y2@U>=XlHXJ6NceU5h64TKa|m#w?MU|drgf~Vo|J-+Qiebv@@irMQ5R&$0*KI6l_3PgF`hQr_P- zuj-ZQe3wKz5>0Fcu}wec=i=gfJyc3K($fpitjpM9_h*|InnBx=d98JVuensppi3c= zi-XtI4fTNNyFZ@)bQj9H&lpr96JIGym^Dz8Z+UEaEU;LuJ&@b#)IPpzALfhs2;eE4-LbDj9Qf?a>8WM_BrK6|k1rr#& z*tr_ZqW36~ppv_9oTCqr1vsdQp&`L0n0=V6yKwlhVU8 z2o?H&&L#$~yl!b`{!@AkT>yWTPxkDXC86Qsk54&;&sB7_e~y>!&H1{!DX>7de5hB( z)>_UtOK3Kic}B)!M!U}uQgbNzvYdITuAjNI`s-Mw*935{YqVKn>s#-rUAlmwJ4WzU z5bxYML~~Uv3U&Vfe8C=<-3Eu)vPpIR_WOLCSKAyP_s<|VPI%3!%0!8H8M1?yiuBq# zfgyapDJRZqk@;EgFFwl8ZAw}*6P&h5B*CdKY2vt3t^F4JZI8LXBq zI&h@s*~LNnp&7-2=Z_seKDuir5iFE;)2c`S(pwNJQjhHT`3=bp5+BQIq9+DuKvOUZ z{N`1O6Zy(Po;TLds zUYlAUG1eQhQ;+SmXfavxuL<6i9SCf2Ev+Z|IP)^^%DW+7$v6AA2H6eAzY|xgrsAZU zyL`ObWkE1mkt}bxY~?^F(pK17W_$c*w-X0d(tjSk&=(eZAin2;@g}P4wExvwDIUMd zww*+)I^D{tx+AgG*N9@1u93pwRtNci;~v;m9eQPKsX918+xqxit{Uf?im{`*Mt8!9 z!Xk2M6Lmo6QZ&!a%cWLQpfj4&vj0}f+V}I$w0OklBX{UBJWiJSu@=pFkq*%}$J?V3 zB@yH!O2r1>dL?88KW(9orea?6T zHqonciMYqltffCa0&aU$ZKc7j9Kra%BGKQcih?EI6jU6=f*2%`y)YSa#Fpp+k|6B5t#zL4BZf$qEi+}P3 zB@B}(4T8+%%P*sTdchoQ+?zRtK33c%&(&4_(6zFp{-%Z z;VvBBzn>mTyx2xpiVp7uly=2@+c_NAmZIN>FH0Mi}tmL>mB zBvj>ZpNGs;CoL>IoS9caOj#MM6hec6N2N8U%?I`LlwdL7m7;#R%-S;6B!Y$e(f6GO zYyO6Yn~Kua*G-ODblrHd#Zi%$d`-bqzo>(r$U!>tufF;0*l~m+!?;kg`z+i*wEi>= zy`cU+*p`&4aC$aqoi~npj!nmiovIGq*WwYwp~+zUCb~8{SeS=6w!bvy{F#gps@0v|IEWk^NEeuSlH2W;M2j)OF#N5z2}=k z*46#^)U2jP!!{xpE`JUw9p>*Vr`5P=UPSxr`#}>T>;oGvPPJU^ew@F9{K|pzKgDg> zR+0{AoOGCU+cn;7TjjO#xh4Ab#1Oh5lYYM=Ntg>Bzr9YN!J0 zgi32^)y>VG7yzSJVcE2aT(g?5y#F~4Fi;ze{kC#Jgbd9I#6uaxxiJn&3+G=(slN=I zqtCQ=eDNuwy_DVYb*^dep>W@W>Ls>Mxiy?DpWJ!uc=nTgwTKkm*z+>4kH&gmpSZ>b zljIT;*`E0oyUv%y=fvRrC?;m{UZ||*Ze}j8FO=w+G{kBp)^x}UT#Ur^lC;c@E z*U%`EK#U2cBbkO`3Hr}%e*E}R(&>b+hE(YC1kFui^nXfnlxH~M^|Am%1tAakiMi?A zAruqw(a~qY0R;yE?-MBrY&IaUn1u>f0!r8lju^^H;CDGu>{d&^1qH**7cp)4p`Est7Rid@di0Up>32D;kh@?kf8D^zqhri>OZM^IdmPWm zq^h*qEBdax+&emFOx*fCWuM&Cv?i_J#-`fV=JS6R)g=?8;w+-5HLC;N2A-c^8KWk9 z!mD6J*@;6;t`7W4Mk5^j7+juo5q+VO!6hRHOJ-N66X!-J;<(`Hi_P= ze)M7g3^Jh0le^pTwUX*dMW5)^e*<~_sE2Z@bfN))iiDipcm5A@qW}K~LYYb+d^UTM z3O}Z?JAU6jT)%ras=2$wHt@qkJIJaK{_y^(G(VI%n*d3}>9~$dG}E2mh4*ieAQ6_! zAZg+?UA&LKPv;)rzJPTfm*E!9OA$;P6_>c$vl{1k2cCPZ#y8G89$uxsae-+|`)^+( zXj^S4k$%_rUj8Piw`Opwfq|f_+BD&#^uT<-s7b-@W9Qw@SRXxeT7DygO`?doB*eW_ zC@M?GNY(4h$%v!LqkFGrwfu|MqlN%pzYW>fL7vB3j++q~cblBS-*bQ}7;rx69Q=Q( z;2dL+?VY#bCM0T;N;Iph`?LSK68WYQ?DTQtmbam{YLFC(viI_m7cc`BgUn3=ZzK}% zMBah^tA^P$BnGD)9Yqqs49A5*tA%T~CUcsS!F}+>c(VJ8JA3vW99g+nn*Frs_~3MF zh5Q0ZRV^?~;tpyA1_7)LIM&Y|NAo@ou+a!E;Gt4ZhhNPmbs*K(0Hd z`gYxWdF<7xEV|&yJ<>_kSBF}wjy3#P7WC9F?U} z?Fnks@RPG#UQm5N6nz?g3rHil^9q^-uxWS&1#7$~k9^89FN7F|d-GX7O}u?K>;2b9yM7d>?VWgBH|+E0!Zw?`@4BiCuV>-u-COf^ zc+;*vT;;O-xMu3QmTIMC|m`X*W|ctIC|s zYTQyWCTL4Z5t?1QnjKN|ZSh!L(94-;3v~GlMs>y$rfF&|yIP;eB%e9LH}JxD;$>y{ z?yl?U(Xd<{!|8f$ny=Ba=wW*T1BZh6=aX;>K}pTOYCO z1`{n{Ja7iZCE4rSJ3)=-;^6`Oi0b$-dn16p#^z?Q%ub+NM-xEuaKckTlRV27wR&Ou z`cLol7k@;L9?x`#0> z^UNksSB6g1rylR^dYis?y*+qem79&h0p=Y29``R6Xu`#9^2oyW1e3CrP9&LAIF0V8 ze~Z$QVpFZG_fvD+QTH##@|C=EA-}~~^zPBwl7z5I(W{?HaUYwqYI0oeL5dig|(!;JMEh{Mmz0#>}D zvi8Stcfz71FffqNQ0M`90m=C&Np2i{b4!j^7(HkoQE_qR5(z|S#;|K_!LP2~q-Eh( z4jigp*>(T4;{dtGpRWly^NyNYU1f>!CAslO7yr1j&i?x4;Iz8fHjOi(Yt)cU5uNyD zuaM}oOTRNhUa$}GVdh$`JWind|=z-7Ps4RK+;VYlMmDVdp=X*vJb80W%I5;ko zsumA)Gx~Fd+NI4{BdMVf+uuO92%~Yxcwyuq#5fY2`89Uwh4wE z*zMZS%4V|o$81;bK!uNR22u8B_{$nG0D`iNoB8=?W@eZ|h#WBf0!#*m*=4wJelms$ z5CrM%YQGQV7>_>b6t8%ep#9aHnP+9;p~?~ym&^$gQaVuyEY}7)V*stL+VGu zDKK#+1G-aQFKi+GcRZFKzPQXlQvh~@2WsyC}Ad54=8o) z3CZdP z=92WB>b|;fi}`O3X^NnUPupLI39&r-;dqGeUGIbsqru(r35yoHayiD<*A6X|5wD0O zOKaWeM8k)SbRj}Ep`dBD;g$di1Qg$r18F#L?QhVWW1f7S7Tv}^Z4){shW=-l51W5J zQ9rZAs)kIJ#auLcW+{yMKU{z>yFA{vlmvcd-AN(O(<{6<%{HM$*1;Iv3^jw{H9(s` zYo8vbrsv`p7^Dv}&b}JAQgC_tX$xgn>X!0iTUtZ$2fPL*LU{K*xT#!7cXstOX_MEr zMQ=WF?s7yrB;AUiF{HR6VOC7>Dz())OwzpG+oeOaug3Cf^p5yrG5g8FD5A*?^LqX? zACls>WUTyBeQ7oBNQb|_HXDI`?ev)I+D2Z8F6H$-=euMWC|ELFo_rhNx!P=p{GCMpCA;kfKEs# zO_0>yuXWj`2Esn2Ojmj{4|wo5;v@RsoK)= z+$VPnW9D?F3*5Ck4j*?y8+k&9l_gTdiI?T0tDyu=S3-Ze=Qz!6ndZ*y5q~P$ts)dm zyg}o$f_uSiM-zj|rL{Ddmn>r!Y#yM->@6^3XfQa5KPX7=)Ia(->{S;z-|8vv(uaL5 z!?#6`Zl)sFsA^X>CiYhhCdrb+3`B#RT_#RHVRkgaFn<=R5W2C{Nw2z-wI531S7k0K z(D#JFdot_trI;-d1!i-OJh4sG44m6UMQtiP$Sc|55CLfg2Kh@re^UGd@Z~#Na%_m` zy4x7omU_6|bhG_J&!KtQcjjef_QiFoT5jZYSZj)&g9eM4sW zEA-ti(d}!>XC0w^$DO{b;B1VC@yRISD)X{ar$u~>nV&3m-VEQ7Y0mpc z5BMoMwukFehY)uR*2I5&Jf}fa+8;yKIz}FaOl$dw%F{DRo?3MC>H@4cW*2l{-5~Bm zGms9nvDmWo<*0`c?cpvE47bQTv;bM98cVRp3)!CB=C@Y+B5JpbKz|KF({%J$bBy&v zik0>pN)#K<88eLAloQ{kXrbtS61cHm1H&FrjDfX4Kn8;`#(E*aEHTvv*^X&e&hUq_ zI=Yz`&+{o?*=|7K4F7-ttunRdZ~Z)qR_zbFRP=zU#M)1Wlp}AFf*(lX$-ggdJbSX# z^78MQa?CzqEWleyMMd=ssTe9SDC2}|cK>a{kkioEf>3Hy=ChZlxiaN#X#XB}+sfse zEzB)Pzn`eQrf^{!ia561BUQe0-{8VRat}&KpvD{`cRNsfS7a3^u!$Ui=zX358b_@8H&SdlL`$q z9;Nj0r*GWKw*u*h&m)h#gC0s8jcQWVy5t2-Cg$egcg+KxAVarf_0(mdJM{OA`E+~<(m-oS!VHuTXA1tAQ0w^P zZ@@uTTlusZGlfsyc6NE@Oc251u~tW3BM=&@4&+nmYO;IIiKOWjHh%k$1Ow*(_w_N}5j6-JT)2o~K&{mHeFfP)@9Gh3sRmq{{8Vr$)F+%Yr z9p7M3O;K>30?z|tg2wE3GAY0FbeF#$p4K%=Qu`bs&ml?OyH2(7sNEc>|Cjhqq3gDpgfgt2csz1NWR$eqigK+#@gg z^vBWp+pCEsF&jr5`#z?xF1>kEK{+xl*sPF$oZ%>R4+RqH8BtKp`BnNdP}2w5%`!5E!fvLI zI+@Aj{>eHDRo3Rw-#_M-hCP&IFDgFsA#WX9NkzZ+?%u(gKa0sdF1n<50p>fjv>+{! z##ynX)KrW@hBPjKHIZU6Q#|^@85|8f&oZlX2`)WHQ&me(Hg&gh$*gsk_viVy2I${v z3am@Ye!e2hd{2u~8VO7-toKobX58y??jP&|A?gyq2P$EOl zYX@I|X2HM*z0-5UUP_?lvu>RYvW`pQ?tZW-gjhB3j5>l+PL5k$z-4!uusqvl(UGra zQpdw>o*Nc&rsdh}gDn};7LRY-%!2!8`iKI|5vM>Kf;3STEx(tzVTJ}o05!{F(Lq6E z1a|^557!{NKWrxg{RlRLO{d@x3SnwDN^`((+F7^cZnBL%mjB^qS-JM+)#hQ}v+4m~ zQ-bKtW*tvkEA0cjwO{c8wPEFIgbCYCA9`m0Y~y_Bh}T~2Nax#k!3Qh`OdVCAp!RZb zbd-j$2J;ta65^twT>8qKk-~>m)0&G>wj@nJEt0J9Vf8w zp%bgINok%=S;^(*Cj;Ojg$-m(SrIFRHqB>;O>1a)w_0NCBgK6=+hgw`2w zNBO;w?4UzgTb(X}o{e}2=A;OAFcN^pMZ^yAZ!@KS_4n8RtQH@Cx@~6QW0GIdi`aDI z%G1Zqi)*L1RSfR9Y`g2iY|xt+6*38n4UegU-GWrhquXyu9rFU09LjPi!KUE{0LkFF zQcIyx|MiCsU@E6yUUh~J9D>2HX)3J_3IRQj4JKun_e{U* zFERD6764V~!&49QpADO?>G*w1NxEffSkhQ%`0!*Mf-yvRj!^f*dyr&@K*E+#X9=sR zt-~P+wvPvqz;P#b^D@~a#4x%J#pp)Q_S!z|pCi-FbTJE9NdT1-+s;>HeXidxHWbM55hoHnoCtx_8c$n%*V${M8bHJ-7hEA z!fWqr>FjT6AJ!?__%55ZJ%a z{1G<9adQ?yJ+y^v00SF-W?BIg9CTbSNE7pWTs{Ry=%=Y(vie9byp@K9UDtE;*S%QD z+e}+_Wom_f#?-u8`Tg%Z`6`Odfn156)1upKV|n?PCJdj4)Jx{{xR4xLL7M?{45qSP zU^K!@y~Pu-3xGPTgD9|hegTQ#9CBJP1@){wdX5y;tCilRUfaQy)D{qM>ZVIo9=&-q z!*GO0hxO);@xqc3pDcZjhK7s_z8-uOlye%6qM)CDdZl-`@l3j~9BX+Bb>^=F=j#B!>%QNYty|%2pQ3K3; zwG*wxk$RRnAAC%NZJew<+>9+bV7w#Pto-Ua$`ejLXA7x=`(t>my+v1y%Z9F)2oD-} zI1Ipwn4ga?W-{~hhl-^2o&t;M;q2clUAd3se_S3cJX;x+pu8k#x|rQWBI5BGd`>l~ zD&KkNF7fNKoE|VEy_9_=QwN?Li+VXNeDf9N?q*zk69Si-JknC#He$sl^J9o^$L@V_1Ord7;duA(^Fhm$Hgqi(d@$v3`Y-lNe8$YEWx_-I^i1tON$0s z#x%jhnWGUs>&hNZugjcI9S9irs{|7LyWmVBTh8mUsqQECgETMdPCMvxq($`GwO4q2 zZAeQkyqtP|?i-JuH)SiA8NW0|h1=K^GSm8e8W&3-({$ zU53kMf(l4w_w~s^=gGHgYcm#%t>*bgkFk?S^R(nLyZHT`BQm{Tox&TlsfK1`c@FcG ze?L*mpvdVAmiFZ~1O!yVMB)3bnjC}0JrSrrNk1|Ob-_t|cgL_;BQXot&0YvVT zlw@EtVn1pC)20t_I);A{oOmr-IxW# z6SmYE*GHW_q}1X9!5UbuM<;R;XWjHlB~>%T{8R{ z!L*2;g=JQif&$p~eGPK>wGMz_*(&4ILodyB|Bz<(ey0wyb^>?g=~h`kDaW^0IwP|W zc>WR-D6nKb)%>!Zg+0ugm<9v^6PY#Jz&~MNLSI5;r)A_e%+lFJSYbptRmja44z}^p zWW}BEDTv2t3+il=F4yXbgbgdNn4qao)4eOfq4qZcDXX6MWlD=~Vb}So!SW@pORw1_UmGs7 zz`E+6Ze$Eb+%_+|aBSp^A>0<-#eIp{`OZ;yUI z0c-D66;`$ofqfk>_61y;W4y4>yyzw6_3Lzu4cfxOd1eeM=f}#2J8INZj^Ov&1~v{o zht(v%G76IU$*uBiM-|R6KXq%YF_plfT>pbPewmdlBi)#Psgyu(nfQezc*uP7g9ga& z`;`dVw7Ra%>Kid}{H3lui!-5(AtJgR4|pgjJM<d=bIm=z*ZQ181Ys6iNcXcIa6^ zuh3bq2Z+U%B?j3V3oO5w05R1A7gFGZ67jOYVyT?8ZSJcZVPYR{wIh&|<-`fPw=Rh@S>)NZEQKg_F zf85@YO{;&acC)hrsl6()8ntDIJ7}r*jw5Le*MxC6kqw-_TQ@YE9Mj=bkNdp@1ZJb& z0m(PdnunS8(PPgg=?CU~s*&0ecr>DiG@z@9w3vtxe0XsWenjc1<+%e5&EtXen>6+4 zbXZkcZZ{5A0UVK5Z6`^t)YLAc%Ev+JfqIYRO1RzNHq~|8Qbf}_L|c*$7z>cLAm+;f z9)rL1S(2MaNXYEn6(>{HST(o7FQ;w}`j5J-Uavo}_+!v}?aOFCI{4?_5L#jG_PV*f zt^9GK9Oyz=F z2lGj^>yXcl-`&%!y?F;*gkQZvrP5n$H=uMVJc=Ejz zilZ*kd%35kjBoA4-P~SX4M7}gL?03HP4H$g+WLuFH~2KEr1ByyAAox&o=xhVJ6EkC zVB`JEGI-_57a0J^_>((YDSUPqEg(ZRp0d1s4&5{k-WCNXjV^^DcKQzS3W=PM!dvv; zdrF^2bMd*U?dl)#P}bF?(&)UEG9IA%%j@=aIfbzDgNBA3B>dm!3yDaNPzap7%Sk~? zgzly1D=eruUgpHg!*dKBI=k>Muqn|*qMq{Y( zFE68I$&#R>24iJ;R2Mj3kh!Ve$JE(2U``jCAV_g$IFl?cb8q`*w8Qk!R#q_BzQm{gJy>-st%gLcwNIas%B-?8HiiBh1SAOXEUfFpD1 z#8BcE)F1&Q^Y_jyUDP^C@PZJ??r}jiJdFQ#bQls!V8QM(P%*b7J-`dXa}qNenpPM@ zwp_n+rxKG8@ZAyAcF4;=0&8J?eVv$vcZ%xX$>^3$e6uHCfoa{Vn;#xg^DCe1kzn5$ zl_v(j;lRK$r{GJ!XQxZxlP1q2&{w&cnHG1V==ki?0fDInr(pqF=GvL2#hJWg5EB#- zFNmlKwB4;6tu1qQ8sLUw>8u?i5B7|8R>(Q=o~Y6iiOL#uL#2vqNaCp@=aU>Zko_S5 z6y{3MU-)kG1p#lUJj1m`Rtlx(E;s}+{=ju7Z<=-mvsZ%dx68I9l zu2`2QTq7i8MMp8`Wa$*0IQ!$ox9{VJB5rNnn`IEiku0g@`u=dSX=Ieb;Og$IrXLMjtau7o$XaI0gpc$l- zgPS5)i2!*KD=6pOWo2cT*XG+{_=PPl>2RRCdDGmtA%e@ z55#9=1}~AP#}`N_CGWg_Es*H$4XqEp!S=zGun`W2HGDF93yZcG#>y>w zJXYkTZD|Z!9S`UmOl~Y#e7&O5+GO1~4<9T;O15MZ{fcr2E4psK<<==Nf0lvR@O{Y(vcJhX!H>t|&f7*t>81?AO zms)U4=C2z)`HJmBpU6IbVPQzk>FJ$%au~kNoGo{I?)CN7++fuJCGG5=B_~#1`rW&I zUSm_i6Na7la^!r(6clFF@{0G{!SdbEj9QwjuTNGs=q|5vUIlk=apohoM~^ysBZA5C zb=`*ncC@FeSeTmn0DXd+8_Yi8HMHBzY-e8nu`3%gw3gz8jAzP}{JKWnaCpI#0tQ^v zWA!?rLPL}wDE;H8^W@1B!YKy_c5d!3-@g}QLDSfC?2N$@B5WZ_#kLFV0=aX?|M%j# zGXLdSyMTZI7niTFze`O`#pZ;J;^MeK2RD?u1iqLGrL_ev&Yf^$yq2IF?LVIt{Cv}< z&YL@ysxEL)kfYQr-_zaG={flp@<$edjK(tO46(JUuhYPH zP+ClfVfDaZmE|+`sj0j?4M`pzOUsdFK{;3M$nrx*Msqm2`1mkijA+p~xm}iX!;I+x z*;`7UFDd`bOhVcmLzhqD)drfOeFqT$yEV}82=9jnUR&Ea0R5;Yg@z3Hn41R%24G~> z+q(y@&pUUL7Kq`Li1hUI+_`fHxDj^4;qbzO^nF)Xee24qmW_aIK(PA8m7AL{{Hm=D zHZ&rSpY&f_4r$uI`fj^$L_Phcx*OZC-O!@lM+{mf!aMJ$SDCC_9gDig0oskM&yFc- zu~S{0-B-*Nn54M^)b8FjG!DrV<5S*N=_79Q>HSWny`wLw%V1b?gRP*@$SC;FZ_jmA zRGuG7g@#1o1PI0c>$*BS^u#Jp-I!cmtr^9}YrKLtMr!0c_QF#L5Ubtek3wn=3Up(( zBJA{-qH?pcdcuq?SR?3+5j(tM^F~Ha!sUoLf^zK7ej`)$>*(Lt!Ja@N4GUYirV^ap z+}^geVe`o+Ou7(`NVY_-uHYxliJ0WR9N?3a)6>&1V*Nf87O7lI8Ao=UgQF%z@m$g^ zcIB~E--brv?bMBpPIdNnUriralJoOd>-g_=8*UnJK3SSk#I$c;cdxb?hkJ@4-R|8O zW6q6tmI!ut8=8f6<+2LI6zKu-L9Ql#$ME`z^Vptu>-+HDKLx?i@T``Bi4? zS;Thg>d`%V+?m4=S^faFP*CRyeE(inSm<@^*v^N%N(>GoW>^t)7F~gmng^c6um`RQ zN?-Snk8-N3`RqwRARHFQ$Fs2taV!+Zoa5m1j*XGPJ#7E@_U#)ye>BkINs3^qiD`zH zpP%BcT{mys2vNElew*|28%-y%x2g3Lt$BGtx4H!z8!yYr>5{!}HJEINi`PYr6=y}v z%v#>=*P@8y)AZeKWypT$5aF7~pPv740oW+coasuF;N;3JjOMo2b5U%a&kJ;3?rkt z&?Oj~U^HqaE_rG|iRcgTP7h+WsA!;1gH^)pA#HfTWn~=$F&CE%EwN+JbvRC@M#o9a ziMJ&FzMKm?mKb?YeTC5i(jyr|=B${mjcK&c)b-sBaBX!#$&-SK$w|{lR^dvaq_uTNxr~jLSVPfq`1pr0 zT)Q3|K|3&z@qlsPK95S`PpTb9ghVJXXF};}8HtK^bY#JZ-NwF!pr@BnYIMi$)9ix- z@gA!RR*c+ar%tW0aB#rZ9h>^*MT>13BUy!p?p*$JEBN6PXV&h4xnr7kn3#Oa&hu4f25JQ`Qq#>9Ua}5u3VPLc!uakdCs}T#kX(XU}e~= z)>e`gklv|NLYmaV2OG_li$?^B@ZA&BV%>km>h61K$BW`1jc8^;I3HWs# z84Z>@B_tUgXljHtCe{^Xmo8!NmAE*}u6LcecAcDwDKFpdH9K;r1ikI0uq1AusgNHv z&He8O7{kd8X%$9~!KUN^<4%knBPcx`9kCilBk1uNY!h*No3)4%$g|Mtj zaO2ATDYSnruU-W&i=mP!k7=JgbNaNdjt<&ghA=Hv*jOC1vcmWt#@tt-rxYx~H1uuq zp7yr38Dx2MLI>jbM(2nGR{F3>T~zqk&4;BDV9!AsGAD%u5tYRqu9=MWFF-_=ZX`TG z!pFA_E0CyuKKhyF)G42i1j*$;=lS+h`1-mIGjHCEW*94H2tr#aFJE?Q96h-npmz}K zEhNp+C?_RlY~`k553}(2M0fWtnYCkSRG3zo9Ya{fr7egIzrKb|%0mtwYzLQQ0Tz9I zp`jv@gV|8^UU~VSsAs;Asi;(edlj^7N&2?=85u&NqK*iB0Q|#~@YS%f(EsAa^HcAr z8*(+x%zEJITvs;=BQ(T*EU5{c9U<>y=j7b4qXR}s9CRrkKl)=K7uFCtf&NXBx6sUV z-%2?5`=>!yI1R4|2ZvGs_v$LPPwDG_q2pvY+nd#xr7J6^8O^#?mMHr+O;?K|AfVPU z+stIM=+UOSP}oxwm7cmcd+*+JYE)~M_~kv*rQcb$>Uh!NG)`x;$6vRWUfxHR`M}l6 z+nXmnUeP+3Z0SdKLO4yD!3lnAY2GbZ(DBb#&%{WU1XjQ>_ z|8MKQeV1V81hYHL6-isXGxGBEx_nGbHuvRI(nm$T*rGJs&$H{Ev9ZUJ^w0UxAMv(< zVYxf1t2>^n*o?i}j6M$j;yKjk&zFsP;M6}pb3HL)EdU+qmOTJC{AONuWG3yRy|^eO z$$&K%XD!y^KRa4ifp^i}o1JireRZ)hhR4G@G=*>5_PO{gT3AhjQdX(!fyTLONxdAS1>*y zZR3Ktx9a>4H&@pyN!YjWCRL@ku~8R8n}!`=S#Q3M4i1BKSp3iY|Mw@yq&Rhr2sbG| zSyyCqJt?#$D*YKDS9I05tVYiOFLYqx-T6r>Trk6_ymbo!I2_Alx_joz#Z6|%;}OzE zNAvQ4CFK=rNB{IfVyC3UmtPC;nTgt{vlmtqu(Bf18y$~+t>4{?bxSKN*qre$2R-eE zm?~dqr<0wXk=#W^w#}W)jj~Q|O|1tH1~*d7xux#)b|j%|`T024PVm~9`SuNg9^w-2 z@Zcn1>u{J3S+2m<*z*ez1hkohN%(;$}LHYHgIP zC{$pw{T%$XzNz;`{op*qIHR?-b^Eq$*gPjBDkj#_(Lrcv4x`Z|!*7S{g_agYNoHlG zKax2RNc0a7CbZi>{)o1XftfiCPSwe6G@6l}-Q8FS?dRpCj0Mfuu8N0;WwITg!|9?M zUov2gEY>?L9MOANUVeaqnYOM@PhabTGEvpR;p7Kd%VU~+$+4VLoL980pI!OnaPQto z6O$~X6%UVHpMsL|%MJp27^ktZQ)freq_LrfjBZa{ebTM`nSa*CJ~w_p*JMe|r=hFF{0Rapxeao=zy%(;Y&}iis6lm$-VH`d@14j#|h(>#8ko2&i zx#2(r4g#`6mH+&Ge0$}Rf&vLh4waQx!HXblMFjZvjSox}I4Tl!B0QD&u#Irnu3fga z!|<%a&Q#0=kwn*Sg5(6ZIv`uVGkqL8U0pj|#&qbyh|(q|Wi74sOT*gQloaGmF~P}O z9y}m$Md(JO-HYau^ANH^lhm46=a?NB=u!DaNk#^vx~H6gwI`cMa6;2+VaR5Ky5T_9k<3vcWh936@^X`#EEbmht0e`;*5}Td{*9Nv_VG}mX_dytfV{w!)SPc_y+`3qxiAHx|{89 z-gG?PLC@g1rUaY=qv$h7%e?%W9-SVUdw7Z#UNwcw*o~24A%jS9#K;6u-sSAvFY&u~ zHM-c?*pP=ezE}OY%&Xje@}s<|8D94B@|W+}WX?Fz?cHl?G5&75ETb5`h`+x-mTiFc z!2RJvq!|1nzKm z3aOpL{yYp$u}1>UBf=&hGc7;-a32|cf*y~M4U5o;iQN|$U12p%XqXlk6SD+71l!zB zJMe?v_4I%#C9Z3gXKUywpBNDxeQ1B5_OzD^*B&f$@S|uK-q@X>5=sC1dbOgG{wb+raIAbr>@OMZ(3M+#KOT@$ljj{%X7~?ABn>D0t`*X=urK zYvh=l8`IfdeNN8T%?%2>4pFWfn3(K()6EW=LokfsJ?d_a7)le=jd{^Y9oU z9doO4J3FKL!R|;QGK1SEmpy)c+jO^SVOr@TCu-ToYr?3HB3Zu(WfGd>MiXskn+2VO zg@d;nWE4bU)f|3TVa65L){RLFwn^hoshxvVE%I;t zM(8{kxW#uCZ6*Z0)_-UT4vlt12=N?H9DI5!OryXs>5N0WUsDsPp%HZZHm9g%zi^a+c#yM@BRic4vmgG2fO(+3OVF7-C2l^m1O7kt{sRa#Hg{W>*gx3;Jss{C!cWNDG0u=X9mQaFscovLLyfon0x+-v{24IcdOH!N+{Mnee zKX_nmYb(gkj%&VYEPH?G@-~FYKa2hDssb$MxWn^{i^G#p5jQn9o*SyJEGuKTM{+|U zjhuksK@&pU48(9VJG&1IimUemQAD7?%m5qJ&inZZVDl0d(=`~eJDkQID+>#7rg3#m zuW+8Idf7l#AE6CM7$uppF_?~$7PYcYnfI8KmF!fw^5eS!1waDRWQ?fC=0Die zqx)AN*>da=M$%PMs=y;CL7hN;Qm5lS)HN7(0q;Ps54-*}Y!1gEYQUfYM5DTw6sa%A zg;lm}+Jr{1r^l(MT*lgZ^Evf<_fEPpo;nrD_@jTRH6;a0TYQXp9tw`+7aU<` z3JWI3hQsG7k-hNMd5Fm*xO^zG%60*t1XO{+BxiKkkt}B`R2y}5nxyuG^mV348K}~0 zdjp)%GuyypLG1xcd!YA1_i>togM+bx4y#%5T{MLV;3SfC=SWv&bh<`tBJh*izdyXu z{?+T(un0kIkL`xQxBmGRMgBin7rK5PR_VmTd-q^!DWHBC1C4p`RY5(u(>|$v58LQ5 z+63GWF4P@m-vaC_LHR5kSFhPT_$(}T3sx_o`_i}K-Fo0LP zt3D9mu@ti-4i66b7PL_kl-u{g^(pByA0=ZNGch(ZTYwKYBFvaSJl4T8LN_D?q@lUD z_dG`Cm<9oT(J%wXeY3iH4bKtdH54!ak8fa_0)*}Vo~E3zwr+|SEFn!(bh@wtFHlnA z<@1YqCCz6&&Yvf_BcMf9K6Lzee{U~W!`TYtX&h{XCuE(@IFv4Uy4VQ{0&wKp49x(2 z_$nSrQ@zS1hAr*fV1$f}5KzRUb0aj+#Zrd^Y!(`c1d&d z+lXp_FfrZ1+948-A!S8%;DBr2m1r(RFix4KySqI+H8sdq7qllAzJ2sYVF{AZZsj*X zgpn{BBuD30ATl`y01&E>&NvV*%FEAtcswjFmZr;^N1Yu5+fYP8o($rNT} z0w?-)NqxKKBRK*2Unl)h=>E2TOuiSk^>DQZO*cJh5v== zD|FGO$Btd~3uh4&;N?|5{hA%)5YQ)Z)j~CdEU~8wjwGFO`uh6lym7H`X2~@J?qPQv z1qB6`p+O4^SqZrAng7d}VE66>(wJb&ma-eyF(r6co9K6=*zZXjcb^w13yJ_$>v9ifAnZObap^fgN1A;nZ~-V-MtGr zt)EW}D)Xc2e-yAt^6q_2f}jeDTI?*qA;GW;8RA=ic}YbD_c?q6EZ0iEbxXnTn9>5(%&bHA&bqwP}od_H< zcTC4go{;yf&r6%Ui5rERLYNqZYFE_|gP%Rya>kAnsok((!6 za|;p|*2e+8!LxyTyJqOJ-U(2}p(?>K1R}=o7`ov_K0vOxF3DiY{EfDv_C8*EtY8hc zO=C{R8BHCse5*s@oCpR4H-WAq)}*JmPtFS)V^ITg8it7gT5(?xmMd}0iRVDG!3Hu( zDJdNltPDT`60-RUm;v2o{MD;?O~QRs!!;XtLTEFkF}4pOo^>J!@(aW#CM9uWQ^wqw zu1`2q$7V|^r}3Jop!DEWzBrZSwsTGdvREAOA47kzT?jn@sscQ-8;BJUwgDADM+8ke z&J4gJVG#n|+ep`eicYL&hN}4=hDJ#N3Q4STTmM>E(h-M+C&9twkz6OaKf@Lgv0D{R z;q|gkTQL+wpg?cI!YxZiHFq0Gf(TFZm?)DUGP*aJ{XYbL*Y_YTAZ znC6ij&M-{DMZwShat|QJ^6Kj4m5D^c-2D75Sy{3F_&MmpMkb(wE!v4osqQwQag4_bTzu&2W3t4yvLeeNhGRY4r_Y}i6%;h?RaUOx z24h&UMbXv6!y^fGHnvGdH)_#3xwu@oc#)*J1PKWrQz(tJY5|7aGlNxdan53bWul*- z4N$6U!rD-W@?pAfcI;Rsem;%_?lp(K!|BtAJed2aICTj5TthcAF{v$frCK#6MuVV3 z3soMpta$hW%06PC`{3l`-3HUu%Ub9Fp960k^Z-{ZZWb568aOsF;R{L};DNE>tqz96 zZ%T+(W^?x*jm?cCK*Q84NRuHdi=Cb0;?%UH*#E=cTSsNJzU`tf9a177C7^&(0!kw- zAs|S12m;b2C5@z{w1Tt(k^<5QC?F*zAl)J*-F@yC*E+v%f8*O{|9k$}W2~{3OL*To z=QE$@&g;G|CUc8i*0u)@+9Z?pw?4X5MgEHgc$5k&eVv6R4}A72IplBfVQ^!>)B+$D z@cU@ZoZq3_3Wp2k{)fiL@$Nt#2=ysYY6PEppeu{>sa#w+oyln&JV-|VB@nqm?=ym} z3x!`uA|ObC&g}@yw>UW58HLCNro=@6U<@kiFuDq`2RW|L? zej1yjxH?vLPjr39--9t+DdcJ_;5!%ldz^O2^Ea;q5njv8VCu=<;00lLV}PVUB8BRQ zumLnIz$so}Tmpj+vo$o7&B58ZxlHWrwlIMPK?M<*ho!l>InWvgE{9M1$LqO;E$a(a^Gw2#6fTCkqI;SEY?qlof*r($Oz?IXi%&!EF?k*k(%oL-+~A5*QyWz zftDIz{$?=X(i;Rg&V`FpEde6x{&{8PfO}@fC z`iD!38K>@ge0)4Kg&=)oL0V==p2OrQ13<1p3GH-l-6t)lQ?rhk zL%FX|v$C(EGW1GaB|b(K23~!Ar^c0B+6rddI|7(bj&!as!Yr?%j(d_3ntv0PpopnxqMkkt@#;@ zyf0gR;^c0Y*Q*bo{0vGG&`5D|c80DTV6O;hgkHaW>-nqgGL#-KXDA&cwt=~Uz60P0 zAvW)ZF1xKh$McObjs}K;C{RQuQdU;2bav$7rTSoF{w{qmg7vol)!rr_?Ms2q@uZJJ zL8R?qXvWJU@+qwe`S0#7DioT2@4^0a_jZmV)j#tL{EKyYd3gs12Vg~!y_*#1ibMY& z#F$tiU80*Lv8ic3 zX(a%<0q9)YP$eb9+&@3HJ^ul%sVNb5uY@82hl*zKM^2cYKibEF9E0xcCBz4{wYC2K zFv-{o=@#JF40UuudBLZF?^SsC5D)}!!@@eD4*F|;esgb=GKtsj(TTgay^R8oB<7oN z`>n0j(-Ee5nxjR|(3TiwM_owhhQkM$} zeI2M04U=evaJ10iv*7L9h1Jy*Hjvap^#WqyH*Y9l4qn3FEefJ(2v=Znpp=Xz1cjum26*)M2I?5^Y#{C|vYr*VTFctuO)Y9atkstHJTQS+QSD zK=0lXari|fiHS$S`(*8;KI_&4)(_J>_V3<#5L7M-j2nl~?Y!N2r*JtxnUd-et*F_Z zfrByAbDWf`1#~Sfq5$0ZrzQG)`{w8p$eST)pt_RY7Zl*VaO>%%o79Be92pT25f#M& z+Oo(NF&z5tB%XYD5pGZr?ah=S45xm1Ze;PYiodEVJsUG$!)Q_Ib@F}HE33>*>4PI> z_RfJ-aU^WoFCePO$V5#_0&~S>o>GAS`(d;;*pfAnK@7mcaa=?epCw zZST_-4uaX@&EeFk$=Y329a&PlNV5jy(%nP$3N91$^<(pWr|Tpy7`WvK~MK1K|dQ$zV#L0D*Q#k9}xzQUv@E zpc|k$GEXBaeaXTC(0t>~FAvT<*z~YPXpM~copD!j0s(89c_URsN`)94w;#%=yyCaF z0=b2ONt9okGCtsd?~ebU1Iw=q+dcmTmXm#b4sEZlb1Tf1Z&H|9$sMt2$^;o9!pq9i zN~T#;#G5u~z;SXx6b#w36MAA8+5EiQ5s9TG zQRQQl$ZJiLpP85ejtMPB01xVvXiaYd*v@85Nd=XIqrd?F$rB}#(9n+#^goNFyo5 z0gB>6?J@`~KK#?Ugt!i}ENKuC1wQOPx=AWX-eH(jyTSVu0KnI!0gg2>Axy6q2A%BPscK%LJbF_x~Z9&CZ75Yydnz2e2XoJOuIG1E^#7MOIX}JbpY4 z;{<~P0}!zZQ#N~u(GfwE20*P7m*JWOT50Z(!i@u4Qv;mav5dl&nUO6GoI&4y%+p4*W1;*l-3tDR?+C;12$8eQcl^ z!48xN*>I}^3kB6j5PpS70wA&wB|71uS<8==G4T^2f}6B!Z2LK722D}V+J zAO;$0YGMyzFF}(5_-A03Z{mLco}LfDy;liA91Q`fG^w3KSE=|ibFnEXAb7yUJV-9N zgN_OmE%;Q>K;Lp?Vm8`%TvY{yH%}1~5;3A?UAScQKQ%N+^NX*QFE7wnxP1^+1kuW6?C7+t*&qS;=_$IxcXv(CW@|>10-U3zTy5_SEB@#m5Ipg? zISTL(JZx-`%pHQS6ZhmdCpu3B9|mm*2U&LGL{nO_c#X9ZBw{a_->&;<}jlglJk@Q1WV z5e^|#t-8C{pwf#3((SE+6ufvc1m^InVP-i36mwfzOd;5YFxx!GkK@2`W+6(B7O_Ei zyu}5y8e=5f&U(LnoKLsjFXzPbvHzki&4q5w-?m+L_D$?rG)aHA1vz_((ZfTsG3FG+ql#qdeuDcQ8bv*k=d%W)Dk^2LH zF94f5yf=V8K(P#(=_&u`SX$g&BKX+f zKHJ>cbaXDQsJLKsH3F}5A5aAV6ox)oFd;3VWP3mx;V-5Lk`drjbyLN|hZgrIZeYSe z!y=-Im{)wR6&F=}A-7J~8 z+1c!nTyxiB_b);SHeQdt%=LMm+S$)D=W{-``t=){-7__osd-7G=qoRgZ`~dYXgsu0 zzBM;P%K?Tah>Zcr0`qXI^Yiba`d$eG@J4ok#ADM&eexunmJnu4$cTxj?ZxW2)YWtI z(G>10U#2F2O7{O({0hjcBfLA+hAMb;_A{F9*-th^jQT(IBu<^{I4yYhO$_s}qAh&q zS^j|b0y(2FDMAxf35N)d5>kCJ9NKfSvB(}f1cDn0J8Li|kdbk)%BQB;G)4RJCHWoH zRbj7CXzFG@qJ_?(8z1EOYt%&sQZ~1_d5nx-h|c!yBZw*Vjv@TtZ^(M?c5 z0ErqX{4v-v+rq>qsX`2M0AZJI&>KC)3Y7>8!aO-*Ez(B|!yqIiN?|0Kg~~E-CWZn) z0M0{$Zy1Lrh^9u_(@82T<59#T?nM`D1 zU3RvZoYn=-Q7HE}4DM12XPi%8Pwbwzi`1c_B>Sl=102%G9mj*L=`ca(0QC+;Jdm_O zRDhh>sJ+e_=DgB75U}GE7uPsKQBgrIOz9~CQ`WQSI&ROuwBty&;si1=iyP3CmMJUw zE?b&g(bJPJ{l| zwj;q)v{y0FDSxi{?#GAc1<6d;ahwVrdV0fHzpK$Ul<03#HtRxtD=s=3W*^_g#x}uZ zKeXYXHw0wYF#6eQT(Z&qQA zDg!Y_huleF1(~M^KXsj?3oppaDusx65mDf9aeW-A^0*4)fX$NBBH`=x_ti*%Hj#po z5^x?LJJ-ISE`2~85nL1LwI-Q-@;N9Y-IfmD71(UK)Py2!=iiI((whrS(C3N)0Hteo0I>Fo;%Dz76 z#=zJPlyd0A6!4Rh8fT`Z0wf9yBESmC)AN%3{%!ugI4YNkU~t*;-A09#I1Ue62Bc46`l=Cj&a639VtVR$b2%{!ANrj~qXHi}hh=<>AA4O1y?N3fCKiNz( zMeLcGgmW(Azd%lqO`-=GL7RY>f&y9H{r%f41fo`uY)!gr8VZoGNm@t8SF!h50j!pC zgCnXdxi5#%#I)~)5#6m|vWSS>eE(2fgJ0h%1_sgt<4K#fwKJYRA|bnRkBW!qRXi{` zrmj@l4Q;p~*uFjbCD)nG#hxO964bW>5D?a2*Y{!KqWB7hGVclZ))WudIs^51!P52i z(iy;rR39*IAvs>Azo7kt;e@`+N?#UMNYu*$wjlf_fMWo(yKg)^iL$PFFyDMIhp?HM z#rVLUgbd;iKD$g!jD18;>B5-;{lRh5~m|AEH)Un>pqs%J2wK`fi zvt_u@k*eXWu8c13X>LwboKaHZ0A~`);ZVgRy5Ii^1|y&o_%|35afi!ZCrZ!5<+wqT z`H2K_#@xKw>L9!?-6?4_D8*UW4=vz69vaIB^i;ek*^UHj!#3u|<#45?>adHI`qrKQvMy~81`QBcLo z$p&z25shz}%JA89RNsRbn>tV{Y5CTKYI*bP&hCCm3NNH;0u z(`f#|JMWo181~C1BXf!5PP{bTo)!FvCjRHpU^^@8$|4oW1UkKrdlB=gz#2bF)3Z{k z%~#5gPK1p+grF8W-`3XF(D{ZQ5?wa3Q6UMnW--qsHMQR5_A7M(rFV6(1E)7P^hhvx zscy5dii0m3`hs|juxG4V#1mjNg?~bFo%+-U2fmf9P1PT+eoJ|hT_q-|sLbq^dH4bC zcqbgwh3`+Noh=Lh`NHYFN=r9&%cN12yQRycf{UCw5-N&{^+B!qOsrS#;)P|35z&%R zN@4*FFDE-2l2D`$IbLFCiqLaMP_qsU#DKtGL>pFe_ZN;qKz3i*EuHwpx$0qSB@&&F zBd=o7#GPoGI8pu5;f!QgVBT;pcXrF-cB(;+BBOTa32stt?7!Wvb+%Q&nqa<-da1xS zG(bFuTjjnirEhtD{%dR&ru2~XQcO%#Oyl&-OegGIr>52Vg%siX?Q^_KRn4Zajp}>) zKdM{(Vpjhk=ji@B+RH(j>F+1jxW4b|MWvae|2X@q^ZT^_meU>TuZ; zUB#7~4K@>Ota5VFWZnJ@vZV!x-dP8HNvWvD_-quv2Rp;e`|BQi?sb#b#wuxr9r-CE zByM#&##;`;grxS3d$p2gHBH96ZN#`85J?((?LsN%DHIQ{JbfT1w>(k14~oqI#=*(d zQ@q81lN6+yW6w@@DNo&>C`7u%<#zXSGfsd+n|dCJ8mW_dSnFJ$IX6h2N@R%9P46Fj ziKGp!?79i9dFrtz>MryhI(avU0&9wMiPpn@?zb6o6PT1|^u#z>k8%7r6N?){q_RYd zj^3%Yu#j5n#l|H?ZfCX3ML!_-(eMO9X&w+{@M8%@10Q?Gm6)Jj`-KDdy!I<@T~ zMAK?mI&y8$YS7j}b;V`X?t^NXdyHj*eKjDLU^H21fBYFV?ZR8<_){2UZ|hc2^H{1u zdV-IM7IJ1%c^_Ny29$arm&sMZFztA}ZwpmQ#S{q@;jSh;wsaw$6dZ z6Y?^gL}ZSN9V z)u*0Ke;U{cU-LTNr{&Le8I-#zB`t9ZjBXtD2eZ&$fZ?+suDIK}d)@cesrl_6!-!_? z!3daKP;H8krtdZ>|7tGDfSPz|li!5mscB`FvsK-}jk5!^e9gJNu}wpbLJ9UViXnY0 z7HVz=NzlYp9|4M!TW?*u0fOt8{PklJwJ7X^pg^D z+*jEa#OWv{<|J1^qfRewv*&xH)n*EncYX1~DkG~}kzS6$n~p(y8VQ3QfD0nx*mV`7 z8Hh-EP%#!8W%pkM7K`ro1V_?{1PGND=&2Tarvydh>8Y{`(03-h%@d3bY{%1QSlp); zbzg4FKxj%qp@EPRuonrQ@He7`81K& zqO=)Asos>gb-&Iuo{xM)=}fq;>5rMKjOHW&I!)%>l+ca%@|ccjo0t!HJ|U5Lh& z26X?r=U|uniP6C>Z<=|)00Pn63irRnFvu#CTn~`VS+*7gZRoaGmCT*bbL*i2_m`O4 zeK8+Y5sjF32BZ3|ik_R7YME$9Gqf+;&k8lqIS3?XwkgTQ|do^?o z7aj4=)TE6#B$V0@)#2;ax5vvbT4`Q8o-8Ua;z>WLRn$Lsxxey*$1*4G!{br`djg7s zC`_?qtpV4Q#c2JpiUR%ZFUeuv6Ezr(TkqG|4UcS*Yj++cL;15H`$3gC=vu8p@o?(- zLds*#5UzoIO^#c)a-ib_V`XaL6E0&mkg0(}fH{!605tR`KtkX@axnpVW?X8d)pZ5| z5}cF{>{wPj>Vf*m(3^Z7918+n>U?T%7!(I?1=?rc^MbqOZYMb$BI*ITV+B$gBU}8UAR`#nVvJZe z93zsHdevx3*1yp*nszgsa?wwbKN?r|QM@m;APGvVKjCw&`gr8h&Tm zY2fd2e$XXj$EJ69=7C7y@N#WAmTw*BGW`*-Inqv`mkyYNt~Al}_lX8atCdssK`>JT zBN%v8yafP(N;mGY=AH7|pFmn?IO=DcQ9gic&4S2(qQ=E$A}^j2yU|vrNDQ$u)U@8( z9t&f&W?UT!Qu!JOqA>x%wBLRfLRk=my*cW|c9*fyKY9y;4jd&9Zsi0f(i_3>Qq5n3 zCK%OS2%z>g&;RA5gT1>r>2sU>xNq4y0X-feeIaV1t_});plMR{Z1JsP4n1vhw`Dm@ z+g*qa_nE7aNF|u+(Z#+h{-9|G>wmApdW%}*l}`O#cF95aA(7p)r&K>Zop&0&6~Yn= zlyH3ejH_*??X_bVw54gZH3TOG?$U&P;KlNN_vw=gDT|%Ku?+(`n`XIm8jdQ9fhyL* zYU7$=M!s^{&5%$!zs`12Y~j6M{ZWdau>_y0Y`wyXEw&oFUMQiiN2%+sv09OmUuiv- zF_l-j&~^4Fi;(;F*>`%v+xlDI{%BsE?5)aRoACrOCz#+825*5JWC5?TWTIWa`He~@ zf^rZD9i^1T-dVwr2#iPoZyZ*7`IxZ%=IpzcuqYiiX6dYnh5PK4K!|;h8{enq)MebA z^-R7!1~i0YZ_fA=LLF-F&zH2)GUzDYRCvKKv;5vd2bNj##*95bC}*Ogq;-RE)PyZq z+Y1HQd$jPULD>0F1IELIu~P95*mH^|C3fgn?K6o{~o zSc7h;x;hwgIIe=)2@V3XVzFjEK2Q538hTuJqEbH0v(BN$=V`qMPurGbIf1FZ!rQnM z@TJ%EKtIyvQXzPA#|+eIlV;9=X{=#8oU)o>K-Lm0TLQLAEz z3W=ZQDrI~HU;<1xq`i5Ali3ewdQj&|HT3TP8SQY5qOsE*+wMD#&Nf4R;uwXecE>5mc zg@;GBQhv=tRDZpO(7=5S!WJ-Mt`h>&jrCrt>u;?2DC~J@qMicDHO!ix05zEdW>^c1 zvLr(L7v^>R7OguHIRGwF1)b6~bPWXiG=n`cKgwHl&zq`&Eb2OdG)@;s%OAv*5`S}- zpH=FM^U!tSYqc)di5hJxGhY3dzy)0T5G+Pi_l3+C(#XO-2cKB6ce_U!W^s!)(GM)*hfHu^O{jd{=zGZSzMqv7j zV_%mg4$WSUXBqwDQrx;dn8RvI$=&f-S-I-kc*W9&-zj3$bug+KaC6;N=!C8Jl|AJjDL zdMkib1I$puergUJWPtC0&b+!hMqf2PIHvX(#<7NDTQa(ta}U}YC2T4_kx~oQ2udE9 z`uPDf4#4~*%a0`syz{wAC>T=xpFqj)r6h37bCU0@)CpcJ$VF5KVUKO4%)&qC5H}Eh z1-w;@F_V1^1I~320t6w|iu9Vyn8v*i-AO?_q7qBFkKvU$mCNa5xmWU))=1QN#j*?tSBfW8?mkRb!52h4}CN5KL_NQ0H( zB*#NX^=_ET-(LLB0<_Kno3cU5)H)$LDi|ITT&b)+Ew*e6O56knS)?ll70ACLohkYY zZLM&Ks0lo1@&^H8019%+T_F60oxy~==u{dYf`<8d|Jx0Pe(!^wIY<2D45Dpnk&VgB zAw(RTYK3itB^^r=IRgpjn%_-49J|sEly{0@7y* z8Whm%@?0sbMACo*1RDk~;(;J+;W|x}OjaM*h=Id@BN3XYd$bVP{e12uf?NPhe+X2F zUrJ^vEA%T(lSo~b`0EX!Mvr{$pj&ka3eUk{kjI?zx~+MsBBcGlfPfW)Y`VO?SO3kC z_j0u3mHR0}S3j-s4QOZL;pVSeX{;X4xgvy*@IO*wgoNJoYZjQfw6ostah#xluwD6C zHZ(z)$GlWU+`)Y?c3Sp(axgz@O6>zLdU-U@ZCcE=4pdc?bk2WWD$qbq_CiApUK%1ZOa<^dfXPry=EYyIfzcCyf$x;{ zh**{DfMRF11-R9Ved;Du^zS|eH~VkgviwI-h6YY++mo^pFlmF9zye`h0@QX{eM|wb z;4!pzSH{-cgK4la(Kv+mdXlKp+bT z1*nUI2jzf&58lEy(mq4V1=AitugwO?JK*E0BHDBt&uTKIlZ|2P1bI#nPwz4dYst*Z zQvh-7YtNDK7t;4HsUfY-e|21_q+aoIW|7J6=k)s%UgqcZgYsl9NjnI-3{HWPr$h3O zPA>W0XntM$tsT+{c0Wmew;#fm8;Hf5B1a|~5jDWc6qR(aU1_*J{^{%>15MlXEF1fB zm^47Cfg_C*=bNth*)Ce_`QA&JD^)@*w0monXeB*R*k;Q)Q+u-PKL@P0o;9;Wq`950c ztKJ3?a91eG%Z=qZOw_zSTW8;8Xi;B9#|t~mqHCin zN8hw>uQ;h+-^9vBw6SY1e@jI(krFp@RIR*MZ&>}OtnzAWW?#&R_Opf0aY=9SSehYm zzX*Qb0b1!I_<^#E5NK|uw9ak1IeY8F_6lwSUrrVVwFL>;gn3|v0;^XJM&Pf$qx0XJ zjgY<`kjX?Rmz$a*$hJBL&(w94G;$2+9b{q#)EBrck1<|8>_7 z!OgE611-+;e3<)%BLcX0h}Oi_eAzJPH*->t)>Z~(2xvTwj9Ncv zJcjHV))1V3if~fKCh#&dA5H%_aoO0gdS-x7sx-0otCHg#IfJ>(dbR>?@*XYR^roBV#Rj?X5EmQ7O(+ueR%a>E*T^FEw9#8%*oT*>8cC5|M2Ig)Mj|$if!+#XHel z0DB{dENJ}QKmWDjGq+ilZNa4VPXGk+zl*Th6&CoBrxz5*Q!WIP;c+jdFS#iLiAve# zPS{`;8(4`C4Dm4U1Ka}wkbVeRiS(8E_^gDU_9gp!IQ4O_)*GRnF-m^ct<7k}(7%<~ z<^3CCWi+H+9U^OppZWM=F^|q3r*5WAo+}Mw+Ww}x#Q=5SYewesxofAD1+**M?xNb| z%aH_?nfxzXjA6U~rx^JelG}@**Hz@g9Id?g@)#mr$r~5NND?;L7!z&Y3vE+t-hAX~ z9unAcfR_~9bRpRZzI_nrUf=~?)E3w}V;HVya4UEKi@;_BH^@r@q`h*&B^l06%@2lj zpUUoF!mc{IKW+B>LPd7_KA%bIiu$j`uw|vc9o;|9Tq5Mq<|Oo;n9VnWe#(#+PHoApow{PcBZX7T4yqVbE(U|3p9&MdkgqUB|LKLcbzUAgMli?`(o)J0kzXzWF>R=Cm6hle!jw|&@meiX zJ}>iY>y0>z*l&rM)4=DsYeK08`juU)UF zva3^$fox1eA^~%6(bAQzp-j^?YOLIN>7JE_7q83c{fK*eDylzTnIHcw_Ild=-Sz5c zO#RN}v2HI@@xuacB7J9c_MbRWc5^)|2yW{=S6!W(?7e+cqRYakz5t~$v% z{rIH+(I~f7co=C^EBJh9e*{Wgv_FpFO(V_c_#yb(i_{BpE={QVq1Hg8@KQ3fFZZv# zX)k39;9P8A z9Wb?kMko7Yf>8Lb#kjs~9*(3Yy)Gjy61LdsO$A2nZ-M>X_&H$#_xm1jli}pM z1T%DEd5_HtI(%Py$gZ6cQ@~VZ($3gv7SHs2vGL5V;plFjg+$CNnf_1UtzJrkv4@=V zqKcgVEDc%ogc1-`f{r{z8m4Hm(c$M%_>s=~-{#~0L>$A;P>2IrTsAT|<-nni=}#mP z!_fO2JGcpIwNfH3wO%l#NiQAFWLPg05*jBM-{Dnf+|pUh_L|qox^dm`csJ3i;jC17 zyTNstud2hjD@HD{RqAEX3oPFAy1iJ_ViD1%6_@*(4a%{%o{CJ>iR(+D_6^ES8?TO6 zU#htqpFb->E$TEq6w%akHe}`Iu6D-bcs-GP0&t4u6U%sgRPS`%8`M0C;pYSE4Q8tDl0RI1C z)92?|4*nZBKDm%AzX;_ExXAG&u(cD!UseDEGKkUOKpo7kdOo3cttKC&k|D{AVawiZ zT1T?h(i4i-xt(<;WqX|uCQkY6n!20)v=Me6viVUUS*{aV5cAdKn_>T_^y7h-pBqjq z947Jz6TQziWnkb`v-IJ}F^%^-%}RE~vdfa1Jbq#2&*!8URX`dl&_0F#?DSTrh|e)T zVw?62roN-J*$RzU`O2qt5$y^SfaUzYoqD`MGW7CE3`6xJ>K+!=wMl_XR=n0P3sfGo#=^jD-O{7E6_zvbJZNuoa9Y-DKm zT|7fD#*_`{Sm~_Gl2UKb2iP=^1{0q~rEwp&FGV$Mc8t5Rx$JCYRQHIye456sJ3t96 zai5DEM<%jEdEO802^p#cBK#pC6lg7jAB+3B+AH zd_L;tC@#5>O1Ahmwg@^N5Fy~GyWE_Uh$~Vn?+IXbKHJ;J!g8WL>U|PnYmJq1qdE23 z7^3+}-%y(SC;ch$F1sZY&ZK(ny~zTPb)AD|(KR2_mm`^|z1*tJq{Sa> zN^|+`%<`}KW?M+d;^1Wd6C6Ig`A5A_-G0#Y!uZo}!F5PUqm{Qi8hVlDWz))m?fRK6<*B@@YfYh&f~i~CO#Z`&cC zO`{e~P>S5%wv>%E)cB%ADfP5m$A&iEpb2IkKVQUBD93FL7LOeDkE+T< ziB%ePCE5w`eU_}oohmx`XqvNDMa0;l?%O?MulKBrhd1TF77HPkDgx{DpXzjkbQY0B zf~nFSh*DMtK5)TszW*0QW`2rx+hAuxfkDN#uWia{^y19itvy=)s;BFdx089jkCt-a zv0=Ir^dKnSX!BV9{NDC}L$_2iMxBQRl94-pUu9w#bXD$dDF;AHx$gmajg{`?z`L%( z2G8>4F;dzYRDIQaGAGEc|9E+Lz#aX+A)Vi%P+KXWS8R~CF)Nwym%*%XaFAUGo`aH2_Qm1jKfXR7#Pcd6GJk@O;Vr=D3ZjOx9Bj^mf0ybZT$YJ8ET01 zjkDO+Sb5Dxj1D%{pO3kVPMw~|3+{I1k@|iy`6|`Rtrr3nLc}Z65!>9aglh-A*#I% zr(`Y)L8*|t>Uk(ky5)ihoS4DrfbD5v7q^vf_z25^BC9*tM6gi$n5b9tom?sg&7crs z)o_$~+SXp0IgR>(*CRIB?#mK*kw~ub@hpxlX5Di4v^-V&naK6SRb-_wNq^Sk1nujlLbz$MTp)XDphB_xD*ZQRrv=h#{?<$XD6x+ zJ+*e7?oZoGnZ`3SrZv+F5b2}VJb4}t>oi>-s+u8_O;8TGHd^7( zmG=l`e0VQ`Bp>(U9p0ZNR%12HUMn9u-I^QSC*%0TZT-+}P=~3R*XP)jn-ZhD< zckHd1-LGc%jc(Xm*jfy^#7wO1x{(Q;TTdj9-b!STl2}?GT|ckb)BZa8`I0A0iCqeNh!ZpEL-)?=V*xJ}f!kVa4PHHLA+ZDZZ1$+Cr%(Z0RI?41bz z>4!W1M;^j!@1LbLY?r*jEDM#Gi=wUf-kUi_VaUmjAQzE9g;z(aP0Et~L}q8PL?%XB z-vg#Hi>At+mUpLssu(67a83hNZSm)zjQiJRs~pjZGaf~)Z5w*dB+}L!mOl1AZQ!vR z_d?)e^~{_;qw%7n#zk@48F^#MrE+oK(O*EAtw769ZO}7LNI*iY}kCYIHErd)?U250A}=Z2zI?v@d*e=f6Qqr~7`i4Ux-sG&jLgR|}@ z7^iZaaG~mmZz5%Ur9?rnl7GptVd?01gYCrDhzxC&Vk-4{^Y?;fXCf_v&^ocWxI!7GoEE}f=XgKl=#7?(j{g)pDOF=YoC2i_L6Cb zJiQFh*J5*ea<}$>R-K^cMEX=b?vCA`x-=nt?&j3-4hJeDNF&p-x7N}Y4f|G_p2nMe zWTff`I=jCPX-9p-pE;4w?p}MF!L_c|w0$2Ye#xYnk5*SE#YA?Rt@liQzI#fW=5ulx zp`DPHd_FpT&z;f~2lU_;@8~-kH`7O=Rmb;UK z?drvgqUjyhKQmFIvnO-c9-V|gP2#o^`Q44;owg1?KHA(%_Q0oce==lXx_qvnL85ne zKjV~2^xW-B!BZFO5j_2{pEhQ7oV6N(cab|RKZ*2phQ<4aL(J+R!dBHsUmlCi(Af*T zA$e}!Qv|}msqQ_(>-C#8*%rkOJF`^V2FpKvdUq>b*i;t;l|G_8!qRf ziK35^QU|$=WG+XO`IwOl8_)6srVc^o=Z<-AIzW-|p(zJ-mC(%T26TUNfgccpAts|4 zOou?pKW>o7o5N;|0I2UMR^72HE7PCS#(-Al%{AI7s zHEO?2r9O8&YM?pYjS@C2I5M6uCG;^kKJ9A?wzrjz{ouGusgPtiwVeIa$7(#+#Ip1i z^T)c`SVH*CKXgunJc@&|YGTpJX4 zCZ8{ubjh6|5F{tElHzJ96kJb>bSnvJ0LJ~vybl#ae!2s|nD}`bmP+M6hBN%VGBzMc zB%l%W>=E9FUW7t_y8NR@Y242pAzuj}7%-_FeAjld^L0L`yoZ{q;PWjLM2XfPphyQs zv*#elCsS_YF|o7M+b%MdA00v#l?V-Fp*?b6NQ^q>1%UyOw4s6bBLPTNCBp!IAwb3x z#IC15uzwv98Kcb@d##qY;GX9J=hgs-X)2U`Ltbq59RT5BP;;c*>Z((p`A*p*5rGYm zG;cBPeN$=u0c&DyqPJZP_Z2ESg8r-l*|)P9CBabig`=PQidnn#7iavIQ6?bp11o zqEEz+!-o0Jjrw?>HJA|kxeEOsz3wUIpm=Q30#g_e{s|PJqaXvAuQ2iF0aKk&HhIxa z_y^O4{t)`;LEB1bB>eqmYCX=a30v(c3ZJ0r4f6lDz^# zx6c870qAB85)92q1Q=}P>py`5CehIQIovG2DDsw(A7r}tpadH|{S%-Ef$_fP=Su2G zA`CcTp~UbCZm^64oPrNXNZ=zgJ{B;Ig{-Z=$3ez_q_)842lRCme74kQF?o4FeFvp# zxhof++d0}<;=Go7}!tzE4EVwOz%e|`o$D3~C<B3A#L-gZmz*K$(Gk( z^ZGFEkoQ*I5p?-;{zIO%!q#RaZ&3HyZy4?t+QJ5DZ2-~=Q_^~4!!5SNBY*#S3GU2!!w-AxJrSJjeBI=M(Rv~+`n_Gpn#5GPH`^K}9=>8wIK-rIt zjEM9J@&*zY2bh2TdVK2sD~bQ|>Zo6?+r@ID2f0xT2pmkK{aT))1tpK%;fuf4x;fn) zK?Sq$ZNRXa>I2I0A)&&^Yla#3e#-GnK0iRKwr#jpX7ThHSNT8D7($TegfN+&wRXQX<3=*$;N#mQYz$a=76|lFOZXgj`Qh1ArjCj zfe(pez^UfOj}i`gnu_vq#PZtm_8|8g`ygPa27MMgfPDcfJKprLsCErFjxd!=kPgGC zrl6nz0L0_2Q(iOnZUB>m$aoV8hyu!fGXQGCE?QPIrz|bgWa*gltam@&n<*c9wE(av z7z;M2cHiA^jaqN51b}UD>N**xK z)5sM0W39iioe%_#NuhQztVV1}Kj(ueaevJB+1W30`H{Xt@IDN)gAYc|oD0FN0p!!h zq}o4|956QmB)Bbe4pPd{Achu?bQYA?uVTy|L;Ik&zPf9jH~b-NK`8_5lnv8xY6+`(Yqc09MEKNso0Y z8qtrqHReuBNjxzO7KpvoCINuC7sG1Ov3OrRt`Shy0bSv6g$-4=bU*jWdw^B}yM}M> z!NrpVfB*jdpEa(shhjOb@}-baM&xFEM#XPG4RaY4z^ZbI8yKwy2GssNZwWxz2W%_Q zYb3myshA>&6c7A+ly(v!G}wWu4$$VpSg?Tz83@$qSc;H0bEX1(WkBh1Q}J!cwkm8= zhys0c$&qK`$Z)M{E)po{EJ2dvz<%qAwe*HMIkRR)tf#j|SY*G-83~d0)%;7j-ha|N_ z#aM4df#Db^{oHf?IxpdPH&0DGUnAF$cHzl_BAa0(txv#ESPWy|I~>~@9JmdrX)<$h zJ%eX~VD4M>V4?0laLr;Vm)uf%1+t#c7L2m0}+xM)6_71us=npa35xR&Rn6YGGtg{hRYRq0$R{N1mTC8kQAzGCzYdUK1^g`p+tg?3Is6^Q$p?PqrJ~hQL-F( zh?*(tk8q@4&MP8zj)ReCuEs68FHY8gV``3a%rIe zTyOl_w|L+_aKkgx^#njP*>XV4J1;chHYl5ne){sWa44`T!uNKg^4qoQh3Va|j~n|R zWjQ=KX@A_<=r>${ElM=9+-h@g45WzR%#WCunGpa@95gfd^#L1G>$HS=;|C52x%Ri| zFZ_vjO?zwkvL8nK1^LqQhkAM+7nHguZ_gf2li(7epp`-W^?X2OH5ubLy# z|LObpoGj(rz!)jVyN*&f zHV%PBg{xW*>9WfxAaA2H(Z;--B0eoA;7$UJ7_pCDS$!uT_uv43XUdx;iSr9L5Omi& z5?bDXMNE^6^XFEG@tsDb}r5Adwkr{S|pv111B|THpO4rGMHS6+VKD{Pe zkbbRFCHvOq@hRZwMoTfO1H?v3k&guXa~_){?lET-h|U7?m~d_2!=HfuuDpa zU+ziz=we1Mw{qDh*4bVg$*31t% zOuZ;+)0*}C%lZP>UB|!9b9McX6DB72hf)>!#E$i=2!z-Sc~=||JOIivwJCUrR^;S4 zdyZ^jp`fEABjZu-V1Bt<3603WdwIF{(kEx&&1nIpncU^#>@0BqJ|*Rkce^X$7GbFBG6Ue;h>OEFnc6xStcIGV$ z^f&m)yv$_%i@7J>JbafBi1glYv+re3M;m-v%B^D7At?FV)2L={nljJjqe)@;Y%lTD1dtP4HExnH8op1*gg|cDV(NP?q{E>zr>nXG8jt+p@fbRn44OnSJ*P_WD=>HJ0 z0AZJ{X>nnnBH6(~L8k}a4G07Rx6AySR)U&bHI_6R0?0J#KZt!M99UG3-WlNlHO&;gOOm$NQ~3! zfQ~>+8%blR8yK7^q-KMTEISD<4g%3Q7LHr^;RADuBJfXZ(wb;%a8s7s=)$*5nyHxs zcO6V?eEzIY`w1u>|9*Q9*Ou=Ch946Xkk#9K4mQ>9Gasn1K|vtgQlqgzBLHR=P40f! z&n+${3~qwEWWto5{0P4bl)IoR@VTk9;O9?`u?pnQzzeUtPJ|7}YZ%FMg(1&x-=yJt zNO0(ThGB*W$l&0j@A6bQe~_H$NQyIL$&2|E}uz-~6??;N3UK zUlaL%raIFHxZgkSaw0J17{Voej|1E4z(D(;>A5s$mKt6&a2SnG_!oO}>fh;?zxG-I PZDa6s^>bP0l+XkK&=Ds| diff --git a/ITensorMakie/test/references/tn.txt b/ITensorMakie/test/references/tn.txt deleted file mode 100644 index 863ad1c718..0000000000 --- a/ITensorMakie/test/references/tn.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀tn₅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⡇⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀20⠀⠀⠀⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀20⠊⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀10⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣉tn₄⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠜⠀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤2⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠀⢀⠔⢹⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀tn₂⣉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⠀2⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀10⠔⠁⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⢄⡀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⡠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣑tn₃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⢀⣀⣀⣀⣀⡠⠤⠤10⠤⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠁⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀tn₁⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorMakie/test/runtests.jl b/ITensorMakie/test/runtests.jl deleted file mode 100644 index 251cc6cfa8..0000000000 --- a/ITensorMakie/test/runtests.jl +++ /dev/null @@ -1,14 +0,0 @@ -using ITensors -using ITensorMakie -using Test - -starts_and_ends_with(file, st, en) = startswith(file, st) && endswith(file, en) -starts_and_ends_with(st, en) = file -> starts_and_ends_with(file, st, en) - -test_path = joinpath(@__DIR__) -test_files = filter(starts_and_ends_with("test_", ".jl"), readdir(test_path)) -@testset "ITensorMakie.jl" for file in test_files - file_path = joinpath(test_path, file) - println("Running test $(file_path)") - include(file_path) -end diff --git a/ITensorMakie/test/test_basics.jl b/ITensorMakie/test/test_basics.jl deleted file mode 100644 index 7fa11c6f3b..0000000000 --- a/ITensorMakie/test/test_basics.jl +++ /dev/null @@ -1,54 +0,0 @@ -using ITensors -using ITensorMakie -using GLMakie -using ReferenceTests -using Test - -@testset "Basic test for ITensorMakie" begin - extension = "png" - - N = 10 - s(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") - l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") - h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") - s⃗ = [s(n) for n in 1:N] - l⃗ = [l(n) for n in 1:(N - 1)] - h⃗ = [h(n) for n in 1:(N - 1)] - - # Add some more indices between two of the tensors - x = Index([QN("Sz", 0) => 2]; tags="X") - y = Index([QN("Sz", 0) => 2]; tags="Y") - - n = 2 - ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) - hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) - hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) - ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) - ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - - tn = [ELn0, ψn1n2, hn1, hn2, ERn2] - - R = @visualize figR ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize figR1 ELn0 * ψn1n2 * hn1 - R2 = @visualize figR2 R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - - fig_tn = @visualize_noeval tn - - by = extension == "png" ? psnr_equality(0.5) : isequal - - @test_reference "references/R.$extension" figR by = by - @test_reference "references/R1.$extension" figR1 by = by - @test_reference "references/R2.$extension" figR2 by = by - @test_reference "references/tn.$extension" fig_tn by = by - - R = @visualize fig_grid ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize! fig_grid[1, 2] ELn0 * ψn1n2 * hn1 - R2 = @visualize! fig_grid[2, 1] R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - @visualize_noeval! fig_grid[2, 2] tn - - # XXX: Broken, passes locally but fails on CI with: - # Warning: test fails because PSNR -0.6602330207824707 < 1 - #@test_reference "references/grid.$extension" fig_grid by=by - - @test_throws DimensionMismatch @visualize fig R1 * hn2 * ERn2 vertex_labels = ["T1", "T2"] -end From 246074608a8a4475db4094b43d62a3259dcce10f Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 11:37:50 -0400 Subject: [PATCH 08/10] [ITensors] Bump to v0.5.7 [no ci] --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1e27044b8a..c35ae71c53 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ITensors" uuid = "9136182c-28ba-11e9-034c-db9fb085ebd5" authors = ["Matthew Fishman ", "Miles Stoudenmire "] -version = "0.5.6" +version = "0.5.7" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" From fd27d4a4e5111406b102ed8b9415d167c8092ae2 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 11:41:44 -0400 Subject: [PATCH 09/10] [ITensorGLMakie] Move to separate repository (#1421) --- .../08_ITensorGLMakie_bug_report.md | 60 ------ .../08_ITensorGLMakie_feature_request.md | 24 --- .../generate_issue_templates.jl | 4 +- .github/workflows/CompatHelper.yml | 2 +- .../workflows/test_itensorglmakie_ubuntu.yml | 49 ----- .gitignore | 2 - ITensorGLMakie/.JuliaFormatter.toml | 2 - ITensorGLMakie/LICENSE | 201 ------------------ ITensorGLMakie/NEWS.md | 25 --- ITensorGLMakie/Project.toml | 15 -- .../examples/ex_2d_tensor_network_layered.jl | 10 - .../examples/ex_contraction_sequence.jl | 20 -- ITensorGLMakie/examples/ex_dmrg.jl | 34 --- ITensorGLMakie/examples/ex_grid_layout.jl | 12 -- .../examples/ex_itensor_graph_makie.jl | 9 - ITensorGLMakie/examples/ex_qn_mps.jl | 13 -- ITensorGLMakie/examples/ex_quantum_circuit.jl | 32 --- ITensorGLMakie/examples/ex_visualize_3d.jl | 9 - .../examples/notest_ex_2d_circuit.jl | 28 --- .../examples/notest_ex_qft_circuit.jl | 24 --- ITensorGLMakie/src/ITensorGLMakie.jl | 8 - ITensorGLMakie/test/Project.toml | 11 - ITensorGLMakie/test/references/R.png | Bin 84980 -> 0 bytes ITensorGLMakie/test/references/R.txt | 22 -- ITensorGLMakie/test/references/R1.png | Bin 62365 -> 0 bytes ITensorGLMakie/test/references/R1.txt | 22 -- ITensorGLMakie/test/references/R2.png | Bin 59787 -> 0 bytes ITensorGLMakie/test/references/R2.txt | 22 -- ITensorGLMakie/test/references/T.png | Bin 59774 -> 0 bytes ITensorGLMakie/test/references/grid.png | Bin 135131 -> 0 bytes ITensorGLMakie/test/references/tn.png | Bin 83749 -> 0 bytes ITensorGLMakie/test/references/tn.txt | 22 -- ITensorGLMakie/test/runtests.jl | 14 -- ITensorGLMakie/test/test_basics.jl | 60 ------ ITensorGLMakie/test/test_examples.jl | 14 -- 35 files changed, 3 insertions(+), 767 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/08_ITensorGLMakie_bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/08_ITensorGLMakie_feature_request.md delete mode 100644 .github/workflows/test_itensorglmakie_ubuntu.yml delete mode 100644 ITensorGLMakie/.JuliaFormatter.toml delete mode 100644 ITensorGLMakie/LICENSE delete mode 100644 ITensorGLMakie/NEWS.md delete mode 100644 ITensorGLMakie/Project.toml delete mode 100644 ITensorGLMakie/examples/ex_2d_tensor_network_layered.jl delete mode 100644 ITensorGLMakie/examples/ex_contraction_sequence.jl delete mode 100644 ITensorGLMakie/examples/ex_dmrg.jl delete mode 100644 ITensorGLMakie/examples/ex_grid_layout.jl delete mode 100644 ITensorGLMakie/examples/ex_itensor_graph_makie.jl delete mode 100644 ITensorGLMakie/examples/ex_qn_mps.jl delete mode 100644 ITensorGLMakie/examples/ex_quantum_circuit.jl delete mode 100644 ITensorGLMakie/examples/ex_visualize_3d.jl delete mode 100644 ITensorGLMakie/examples/notest_ex_2d_circuit.jl delete mode 100644 ITensorGLMakie/examples/notest_ex_qft_circuit.jl delete mode 100644 ITensorGLMakie/src/ITensorGLMakie.jl delete mode 100644 ITensorGLMakie/test/Project.toml delete mode 100644 ITensorGLMakie/test/references/R.png delete mode 100644 ITensorGLMakie/test/references/R.txt delete mode 100644 ITensorGLMakie/test/references/R1.png delete mode 100644 ITensorGLMakie/test/references/R1.txt delete mode 100644 ITensorGLMakie/test/references/R2.png delete mode 100644 ITensorGLMakie/test/references/R2.txt delete mode 100644 ITensorGLMakie/test/references/T.png delete mode 100644 ITensorGLMakie/test/references/grid.png delete mode 100644 ITensorGLMakie/test/references/tn.png delete mode 100644 ITensorGLMakie/test/references/tn.txt delete mode 100644 ITensorGLMakie/test/runtests.jl delete mode 100644 ITensorGLMakie/test/test_basics.jl delete mode 100644 ITensorGLMakie/test/test_examples.jl diff --git a/.github/ISSUE_TEMPLATE/08_ITensorGLMakie_bug_report.md b/.github/ISSUE_TEMPLATE/08_ITensorGLMakie_bug_report.md deleted file mode 100644 index 4405ece1ad..0000000000 --- a/.github/ISSUE_TEMPLATE/08_ITensorGLMakie_bug_report.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -name: ITensorGLMakie.jl bug report -about: Create a bug report to help us improve ITensorGLMakie.jl -title: "[ITensorGLMakie] [BUG] YOUR SHORT DESCRIPTION OF THE BUG HERE" -labels: ["ITensorGLMakie", "bug"] -assignees: '' - ---- - -**Description of bug** - -Please give a brief description of the bug or unexpected behavior here. - -**Minimal code demonstrating the bug or unexpected behavior** - -If applicable, provide a minimal code that can be run to demonstrate the bug or unexpected behavior. - -If you are unable to construct a minimal code that demonstrates the bug or unexpected behavior, provide detailed steps for how to reproduce the behavior you are seeing. - -

Minimal runnable code

- -```julia -[YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Expected output or behavior** - -Describe what you expected to happen. - -If you provided a minimal code that can be run to demonstrate the bug or unexpected behavior, describe what you expected the output would be. - - -**Actual output or behavior** - -Describe what actually happened. - -If you provided a minimal code that demonstrates the bug or unexpected behavior, provide the output you get from that code. If the code leads to an error or warning, include the full error or warning below. - -
Output of minimal runnable code

- -```julia -[OUTPUT OF YOUR MINIMAL RUNNABLE CODE HERE] -``` -

- - -**Version information** - - - Output from `versioninfo()`: -```julia -julia> versioninfo() -[YOUR OUTPUT HERE] -``` - - Output from `using Pkg; Pkg.status("ITensors")`: -```julia -julia> using Pkg; Pkg.status("ITensors") -[YOUR OUTPUT HERE] -``` diff --git a/.github/ISSUE_TEMPLATE/08_ITensorGLMakie_feature_request.md b/.github/ISSUE_TEMPLATE/08_ITensorGLMakie_feature_request.md deleted file mode 100644 index a97fa92829..0000000000 --- a/.github/ISSUE_TEMPLATE/08_ITensorGLMakie_feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: ITensorGLMakie.jl feature request -about: Suggest an idea for ITensorGLMakie.jl -title: "[ITensorGLMakie] [ENHANCEMENT] YOUR SHORT DESCRIPTION OF THE FEATURE REQUEST HERE" -labels: ["ITensorGLMakie", "enhancement"] -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl index 045308f103..aaaa985ff5 100644 --- a/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl +++ b/.github/ISSUE_TEMPLATE/generate_issue_templates/generate_issue_templates.jl @@ -2,9 +2,9 @@ using FileUtils template_package_name = "PACKAGE" -package_names = ["ITensors", "NDTensors", "ITensorGLMakie"] +package_names = ["ITensors", "NDTensors"] -package_ordering = Dict(["ITensors" => 1, "NDTensors" => 2, "ITensorGLMakie" => 3]) +package_ordering = Dict(["ITensors" => 1, "NDTensors" => 2]) function bug_report_file(package_name::String) return "$(package_name)_bug_report.md" diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index 3fb72b9971..2a47aec48e 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -12,4 +12,4 @@ jobs: - name: CompatHelper.main() env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "ITensorGLMakie", "NDTensors"])' \ No newline at end of file + run: julia -e 'using CompatHelper; CompatHelper.main(; subdirs=["", "NDTensors"])' diff --git a/.github/workflows/test_itensorglmakie_ubuntu.yml b/.github/workflows/test_itensorglmakie_ubuntu.yml deleted file mode 100644 index 09c5058888..0000000000 --- a/.github/workflows/test_itensorglmakie_ubuntu.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: Run ITensorGLMakie tests (Ubuntu) - -on: - push: - branches: - - main - tags: '*' - pull_request: - -jobs: - test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ matrix.threads }} thread(s) - runs-on: ${{ matrix.os }} - env: - JULIA_NUM_THREADS: ${{ matrix.threads }} - strategy: - matrix: - version: - - '1.6' - - '1' - os: - - ubuntu-20.04 - threads: - - '1' - arch: - - x64 - exclude: - # MacOS not available on x86 - - {os: 'macOS-latest', arch: 'x86'} - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - - uses: actions/cache@v1 - env: - cache-name: cache-artifacts - with: - path: ~/.julia/artifacts - key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} - restore-keys: | - ${{ runner.os }}-test-${{ env.cache-name }}- - ${{ runner.os }}-test- - ${{ runner.os }}- - - run: sudo apt-get update && sudo apt-get install -y xorg-dev mesa-utils xvfb libgl1 freeglut3-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev - - name: Install Julia dependencies and run tests - run: | - JULIA_REFERENCETESTS_UPDATE=true DISPLAY=:0 xvfb-run -s '-screen 0 1024x768x24' julia --depwarn=yes -e 'using Pkg; Pkg.activate(temp=true); Pkg.develop(path="./NDTensors"); Pkg.develop(path="."); Pkg.develop(path="./ITensorGLMakie"); Pkg.test("ITensorGLMakie")' diff --git a/.gitignore b/.gitignore index 07b862bd33..0036a0b19d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,6 @@ benchmark/mult benchmark/*.json docs/Manifest.toml docs/build/ -ITensorGLMakie/Manifest.toml -ITensorGLMakie/test/Manifest.toml NDTensors/Manifest.toml NDTensors/test/Manifest.toml precompile/tmp diff --git a/ITensorGLMakie/.JuliaFormatter.toml b/ITensorGLMakie/.JuliaFormatter.toml deleted file mode 100644 index 08f664cdb9..0000000000 --- a/ITensorGLMakie/.JuliaFormatter.toml +++ /dev/null @@ -1,2 +0,0 @@ -style = "blue" -indent = 2 diff --git a/ITensorGLMakie/LICENSE b/ITensorGLMakie/LICENSE deleted file mode 100644 index 555297e50a..0000000000 --- a/ITensorGLMakie/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 The Simons Foundation, Inc. - All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/ITensorGLMakie/NEWS.md b/ITensorGLMakie/NEWS.md deleted file mode 100644 index 3c5d0dab23..0000000000 --- a/ITensorGLMakie/NEWS.md +++ /dev/null @@ -1,25 +0,0 @@ -This file is a (mostly) comprehensive list of changes made in each release of ITensorGLMakie.jl. For a completely comprehensive but more verbose list, see the [commit history on Github](https://github.com/ITensor/ITensors.jl/commits/main/ITensorGLMakie). - -While we are in v0.x of the package, we will follow the convention that updating from v0.x.y to v0.x.(y+1) (for example v0.1.15 to v0.1.16) should not break your code, unless you are using internal/undocumented features of the code, while updating from `v0.x.y` to `v0.(x+1).y` might break your code, though we will try to add deprecation warnings when possible, such as for simple cases where the name of a function changes. - -Note that as of Julia v1.5, in order to see deprecation warnings you will need to start Julia with `julia --depwarn=yes` (previously they were on by default). Please run your code like this before upgrading between minor versions of the code (for example from v0.1.41 to v0.2.0). - -After we release v1 of the package, we will start following [semantic versioning](https://semver.org). - -ITensorGLMakie v0.1.1 Release Notes -=================================== - -Bugs: - -Enhancements: - -- Update compats (#1031) - -ITensorGLMakie v0.1.0 Release Notes -=================================== - -Bugs: - -Enhancements: - -- Register ITensorGLMakie package, code in ITensors.jl repository diff --git a/ITensorGLMakie/Project.toml b/ITensorGLMakie/Project.toml deleted file mode 100644 index 2bd15e9a10..0000000000 --- a/ITensorGLMakie/Project.toml +++ /dev/null @@ -1,15 +0,0 @@ -name = "ITensorGLMakie" -uuid = "3f718f31-6db8-4f43-a433-67cb5c73363e" -authors = ["Matthew Fishman "] -version = "0.1.2" - -[deps] -GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" -ITensorMakie = "72ca75eb-df6f-4d6b-80c5-d5eab17be3f9" -Reexport = "189a3867-3050-52da-a836-e630ba90ab69" - -[compat] -GLMakie = "0.9" -ITensorMakie = "0.1.2" -Reexport = "1.2.2" -julia = "1.6" diff --git a/ITensorGLMakie/examples/ex_2d_tensor_network_layered.jl b/ITensorGLMakie/examples/ex_2d_tensor_network_layered.jl deleted file mode 100644 index 09ad91f093..0000000000 --- a/ITensorGLMakie/examples/ex_2d_tensor_network_layered.jl +++ /dev/null @@ -1,10 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs -using LayeredLayouts - -tn = itensornetwork(grid((4, 4)); linkspaces=3) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true layout = layout - -fig diff --git a/ITensorGLMakie/examples/ex_contraction_sequence.jl b/ITensorGLMakie/examples/ex_contraction_sequence.jl deleted file mode 100644 index 60835e3434..0000000000 --- a/ITensorGLMakie/examples/ex_contraction_sequence.jl +++ /dev/null @@ -1,20 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs - -using ITensors.ContractionSequenceOptimization: optimal_contraction_sequence - -N = 5 -g = Graph(N) -g_edges = [2 => 3, 1 => 4, 1 => 5, 4 => 5] -for e in g_edges - add_edge!(g, e) -end - -A = itensornetwork(g; linkspaces=5) -sequence = optimal_contraction_sequence(A) -edge_labels = (; tags=true) -R = @visualize_sequence fig ITensors.contract(A; sequence=sequence) edge_labels = - edge_labels - -fig diff --git a/ITensorGLMakie/examples/ex_dmrg.jl b/ITensorGLMakie/examples/ex_dmrg.jl deleted file mode 100644 index 64be720c06..0000000000 --- a/ITensorGLMakie/examples/ex_dmrg.jl +++ /dev/null @@ -1,34 +0,0 @@ -using ITensors -using ITensorGLMakie - -N = 10 -sites(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") -l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") -h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") -s⃗ = [sites(n) for n in 1:N] -l⃗ = [l(n) for n in 1:(N - 1)] -h⃗ = [h(n) for n in 1:(N - 1)] - -# Add some more indices between two of the tensors -x = Index([QN("Sz", 0) => 2]; tags="X") -y = Index([QN("Sz", 0) => 2]; tags="Y") - -n = 2 -ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) -hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) -hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) -ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) -ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - -edge_labels = (; plevs=true) - -R = @visualize fig1 ELn0 * ψn1n2 * hn1 * hn2 * ERn2 edge_labels = edge_labels vertex_size = - 50 -@show R ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - -# Split it up into multiple contractions -R1 = @visualize fig2 ELn0 * ψn1n2 * hn1 edge_labels = edge_labels vertex_size = 50 -R2 = @visualize fig3 R1 * hn2 * ERn2 edge_labels = edge_labels vertex_size = 50 -@show R2 ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - -fig1, fig2, fig3 diff --git a/ITensorGLMakie/examples/ex_grid_layout.jl b/ITensorGLMakie/examples/ex_grid_layout.jl deleted file mode 100644 index be01952885..0000000000 --- a/ITensorGLMakie/examples/ex_grid_layout.jl +++ /dev/null @@ -1,12 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs -using GeometryBasics -using NetworkLayout - -N = 10 -g = grid((N,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn siteinds_direction = Point(1, -0.5) layout = SquareGrid(; cols=1) - -fig diff --git a/ITensorGLMakie/examples/ex_itensor_graph_makie.jl b/ITensorGLMakie/examples/ex_itensor_graph_makie.jl deleted file mode 100644 index 671f161344..0000000000 --- a/ITensorGLMakie/examples/ex_itensor_graph_makie.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs - -g = grid((5,)) -tn = itensornetwork(g; linkspaces=10, sitespaces=2) -@visualize fig tn - -fig diff --git a/ITensorGLMakie/examples/ex_qn_mps.jl b/ITensorGLMakie/examples/ex_qn_mps.jl deleted file mode 100644 index f4c1b1ba80..0000000000 --- a/ITensorGLMakie/examples/ex_qn_mps.jl +++ /dev/null @@ -1,13 +0,0 @@ -using ITensors -using ITensorGLMakie - -s = siteinds("S=1/2", 5; conserve_qns=true) -ψ = randomMPS(s, n -> isodd(n) ? "↑" : "↓"; linkdims=2) -orthogonalize!(ψ, 2) -ψdag = prime(linkinds, dag(ψ)) -tn = [ψ..., ψdag...] - -edge_labels = (; plevs=true, qns=true) -@visualize fig tn edge_labels = edge_labels edge_textsize = 20 - -fig diff --git a/ITensorGLMakie/examples/ex_quantum_circuit.jl b/ITensorGLMakie/examples/ex_quantum_circuit.jl deleted file mode 100644 index 87fecf9875..0000000000 --- a/ITensorGLMakie/examples/ex_quantum_circuit.jl +++ /dev/null @@ -1,32 +0,0 @@ -using ITensors -using ITensorGLMakie -using LayeredLayouts -using Graphs - -N = 10 -layers = 10 -ndelete = 0 - -s = siteinds("Qubit", N) -layer(N, start) = [("CX", i, i + 1) for i in start:2:(N - 1)] -layer(N) = append!(layer(N, 1), layer(N, 2)) -layer_N = layer(N) -gates = [] -for _ in 1:layers - append!(gates, layer_N) -end - -for _ in 1:ndelete - deleteat!(gates, rand(eachindex(gates))) -end - -U, s̃ = circuit_network(gates, s) -ψ = prod(MPS(s)) -ψ̃ = prod(MPS(s̃)) -tn = [ψ, U..., ψ̃] - -edge_labels = (; plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels layout = layout - -fig diff --git a/ITensorGLMakie/examples/ex_visualize_3d.jl b/ITensorGLMakie/examples/ex_visualize_3d.jl deleted file mode 100644 index a4e0bdf627..0000000000 --- a/ITensorGLMakie/examples/ex_visualize_3d.jl +++ /dev/null @@ -1,9 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs - -tn = itensornetwork(grid((3, 3, 3))) -edge_labels = (; dims=false) -@visualize fig tn ndims = 3 edge_labels = edge_labels vertex_size = 400 - -fig diff --git a/ITensorGLMakie/examples/notest_ex_2d_circuit.jl b/ITensorGLMakie/examples/notest_ex_2d_circuit.jl deleted file mode 100644 index 562cba6c48..0000000000 --- a/ITensorGLMakie/examples/notest_ex_2d_circuit.jl +++ /dev/null @@ -1,28 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs -using PastaQ: randomcircuit -using LayeredLayouts - -Nx, Ny = 3, 3 -N = Nx * Ny -# TODO: change to (Nx, Ny) with PastaQ v0.0.16 -gates = randomcircuit( - Nx, Ny; depth=4, twoqubitgates="CX", onequbitgates="Rn", layered=false, rotated=false -) - -s = siteinds("Qubit", N) - -U, s̃ = circuit_network(gates, s) -ψ = MPS(s) -ψ̃ = MPS(s̃) -tn = [prod(ψ), U..., prod(ψ̃)] - -edge_labels = (; plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels layout = layout edge_textsize = - 20 -@visualize! fig[2, 1] tn ndims = 3 arrow_show = true edge_labels = edge_labels edge_textsize = - 10 - -fig diff --git a/ITensorGLMakie/examples/notest_ex_qft_circuit.jl b/ITensorGLMakie/examples/notest_ex_qft_circuit.jl deleted file mode 100644 index a627acee60..0000000000 --- a/ITensorGLMakie/examples/notest_ex_qft_circuit.jl +++ /dev/null @@ -1,24 +0,0 @@ -using ITensors -using ITensorGLMakie -using Graphs -using PastaQ: qft -using LayeredLayouts - -N = 4 -gates = qft(N) - -s = siteinds("Qubit", N) - -U, s̃ = circuit_network(gates, s) -ψ = MPS(s) -ψ̃ = MPS(s̃) -tn = [ψ..., U..., ψ̃...] - -edge_labels = (; tags=true, plevs=true) -layout(g) = layered_layout(solve_positions(Zarate(), g)) -@visualize fig tn arrow_show = true edge_labels = edge_labels edge_textsize = 20 layout = - layout -edge_labels = (; plevs=true) -@visualize! fig[1, 2] tn ndims = 3 edge_labels = edge_labels edge_textsize = 20 - -fig diff --git a/ITensorGLMakie/src/ITensorGLMakie.jl b/ITensorGLMakie/src/ITensorGLMakie.jl deleted file mode 100644 index 22b90ca9b6..0000000000 --- a/ITensorGLMakie/src/ITensorGLMakie.jl +++ /dev/null @@ -1,8 +0,0 @@ -module ITensorGLMakie - -using Reexport -using GLMakie - -@reexport using ITensorMakie - -end # module diff --git a/ITensorGLMakie/test/Project.toml b/ITensorGLMakie/test/Project.toml deleted file mode 100644 index 8bc48ec53b..0000000000 --- a/ITensorGLMakie/test/Project.toml +++ /dev/null @@ -1,11 +0,0 @@ -[deps] -GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" -ITensorGLMakie = "3f718f31-6db8-4f43-a433-67cb5c73363e" -ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" -LayeredLayouts = "f4a74d36-062a-4d48-97cd-1356bad1de4e" -NDTensors = "23ae76d9-e61a-49c4-8f12-3f1a16adf9cf" -NetworkLayout = "46757867-2c16-5918-afeb-47bfcb05e46a" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -ReferenceTests = "324d217c-45ce-50fc-942e-d289b448e8cf" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/ITensorGLMakie/test/references/R.png b/ITensorGLMakie/test/references/R.png deleted file mode 100644 index f5ad7660d36cdc59220f0fb484682adea4b31478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84980 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 diff --git a/ITensorGLMakie/test/references/R.txt b/ITensorGLMakie/test/references/R.txt deleted file mode 100644 index bf88cd6f00..0000000000 --- a/ITensorGLMakie/test/references/R.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ERn2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⡇⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀20⠀⠀⠀⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀20⠊⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀10⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣉hn2⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠜⠀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤2⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠀⢀⠔⢹⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ψn1n2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⠀2⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀10⠔⠁⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⢄⡀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⡠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣑hn1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⢀⣀⣀⣀⣀⡠⠤⠤10⠤⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠁⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀ELn0⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorGLMakie/test/references/R1.png b/ITensorGLMakie/test/references/R1.png deleted file mode 100644 index 354701a82f2c09e5c4cc741be4c42aecf89b9374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62365 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 W;+(a51ycTje-vbtrSm0?pZ*VOT7iK8 diff --git a/ITensorGLMakie/test/references/R1.txt b/ITensorGLMakie/test/references/R1.txt deleted file mode 100644 index 4ac7548305..0000000000 --- a/ITensorGLMakie/test/references/R1.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀ELn0⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⣷⠀⠀⠉⠉⠑⠒⠒⠤⠤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠤⠤10⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀20⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠒⠢⠤⠤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠒⠒⠢⠤hn1⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠁⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀20⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀2⊗10⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ψn1n2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorGLMakie/test/references/R2.png b/ITensorGLMakie/test/references/R2.png deleted file mode 100644 index e88d9af38027b9915f72095887f49ae898a2dfec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59787 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νP}8h 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 Bb-@4t diff --git a/ITensorGLMakie/test/references/R2.txt b/ITensorGLMakie/test/references/R2.txt deleted file mode 100644 index 30dabf0db8..0000000000 --- a/ITensorGLMakie/test/references/R2.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀T1⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⣷⠀⠀⠉⠉⠑⠒⠒⠤⠤⢄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠤⠤20⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀20⊗2⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠒⠒⠢⠤⠤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⢱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠒⠒⠢⠤T3⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠁⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠒⠉⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀2⊗10⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀20⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔10⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡆⢀⡠⠔⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀T2⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorGLMakie/test/references/T.png b/ITensorGLMakie/test/references/T.png deleted file mode 100644 index 2b0604227a71016d092e11efcd6c407e54c0be93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59774 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 Qvsuc<%GUDioRuN}26b2>)&Kwi diff --git a/ITensorGLMakie/test/references/grid.png b/ITensorGLMakie/test/references/grid.png deleted file mode 100644 index 2e52dbfd91ebabd42e0c71f8b46687b2eb9977cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135131 zcmc$`WmwhGx-UBE?(URs0qJh(mIjgT?v$1WDQPKb5b16a=@My>?v^@3*V=pCd-guh zUFV(;$1gfzKFEKJ@xJe`#*9)`mPJD*MutEjX!3GW>JSJFB?JPkiwF(Af`^Mo5B`F+ z6ju_5Kx*Sr?oHvqYbaNBSqVthchX((g7USTx)KE9LkEEby@f!2gD(Z`Kp^fM5Xhbh z1R{_Qfe<)-Xi*aaZ-vN9iEDa69dsl3DIxSCtUfhwAGLp1q8^ECzm9D8#8g)}El5$; z)7Mh7nPzCP)v+GaEa1gRlJg##bGKn!o=rt3AUb_>Z^x_5a^`>+Jpp#)Lh#z`;^28s+<^Gh4gM z7KT#g3Paw#b`i*cQr2z1Wp0p`Dp}q7CD(HEa`h{+tbTRcs+%HaogzOr-Rhi`_*T!v zq!4-?L-l5>{UpAkvu61NDLUG$oFnuy}$2BS1=bly- zNEUy3@LUPFnn1u7Az+!Uw~9$s*jw^E{kD7Uup;1kdMz`<9D2D&gi6SZy4V<6oQM|@ zY8=oV<0_Dt6DJ0dph{7|gw?Ge0Ly&&+wMnGRIxRrGPxzu4+@#%ja%Z!W&drJtoxJ4 zc9c1XJ{=Ymd}acktOg??SAig{ku;tPqYTKt`}n^2)KJ%!1ZB_|LMH`ma1BRWq_A&| z9Z|p?8ZXI>UkYoCa`t#72`+MtE_)Do8lF>l$$jl=NM62MzwNYiuui*t%XMj-0BQZI~V?t6$yYK0gif$dOv$IL`?H_T_S&=AjRgEMd8At@)h1~x?!EO|`WN4D~b1fQp>{?cufFjKW!wf<-v z*kHxAXJ4iJ@dGYaALEor=;Iy?hPHyVP7DNnku&6yNc8L8iP8F;odnNVA;N_sSAJ1l zGrJl5i9XnF+bPI`pP^t_VE~t}8^Qvs{;Iv0b&OQdhLgzgXS;Eso&4X&3q{z#aCq^} z!aQMwDsAHypS9;L5+Z#5l<7F-^e4Dvr2V`7>`YjnrJslUv;57=T- znu0LRmd3KEAFVum3dG2rlUyAmcH5cs?c-};BkihQd|_|Ek+tg7MJZoJ$I@m|KN|%j zs=eQnD9d<#%$C8i_jMNs-(QaslM+#aB~{CD(yXhA(R8BLBvLbTpmMS5gXs0InUOLX z*F+~)UAVDGw#vk^-qvGV8frM|iO{S$<%4BslPMLNU##q!O@xmb=d$Q*_hvWk<(&}{ z;^^}4OLgCj>pWM`sf=P#&@MwCSnG|jO<_fv-QRNRvXF#tAg0F3*_dU0M-pLzxwbZ6 z19f`p^~u%p9bs_BbLUlvcJ)9Ilu2z)%%Aha?|%kMsMi0IO0Z-`z0}HJVXq+}TaQ55 zrP<_dh13)3ySe5sJOnv8cP*N1FcMKX6H$I^Jr z4m`x@4tl;$Q+hGtqPv6k)KR$aCR0B_@~nUVuGE+AX)wVPx?H5EPL`^ohelXIf;@@7B2${+;T25;x}QLe zXauN~Iz3Q!r~+hi*kiR;Sd)_prhSNggBuurBH`%$1F>?-14++r#sa&xL;JsyfrGn` zS>XKG_#C219LvOn&mT#f)cqXaiH}rB$Kdv>y>B~8_@mm{wy?m1$7(g2+8~+WIVQLmOk~}%?81*+SQ{}@*KpTeztbi-wEQ$Tbwpc z4&NVkjrZfiZA|vZRPN2dm#^Ns%~Ee>uWVm>3%N1Sz8^+Hr{7v8%UWR2DlLc}aF)Y< zWv4G7df5Fy^_<}I;U!y89ghu6`ioyv+01Dd^;Z?!%rfDhmUv`$RLDbS&ED z-kWe%>R0I#9CX|@&`^ePv`1aI->|Ql?;ⅈK{FY`0z@ks-2{!x zJ>7bEhZjf7(*JtYrnY5zMn*_3FS3DtUhpz28 z(g%Lvao_pSKhpV_G)Um&-Ina@adhk4AL%`^|Jep3eC@Q59)lvKOie$3f*MDQfvL{Q z;B0iicsfNwI+{wuEwKRNCz3m1hNSbg%O{pxxJM%~aY)HWAdU=1iAFLM-m7>>PRRX9 z#EKXe3d{#Eo2%i_g5W7JkrHEEBd)0g-F2lBC$|z%B4%8!#zjIX*S~5>X>(6z$1T~u zkJqdDq-EoymCtKZRn>vqa_-7X04i-bLOa%{>>MeM+1NT4^&*NZJ%p zfprk1Jc!@dik(XupOu_kgOHsC7r83?xqnxhh7GU1w2OBq*^fJ|Cvw~E01eKLV5usI z3Fn@_Q9N$}ra0zMAC-Iq+x%)kL$QJ_5w96R$RtcB6RmwXz|(&4K;?qL)Kr zNu{b#W3>1ij1e&C2%9c7y3MO0{Y(i}IsE*eHBijOo%nD9=k-3i@td3S5PxCShjf{8 z<}Nqhea*l@6Lc$^ZGx*qfe&30A=fSv$KlX(+i!5+y)W;~R&4ex@d7(XMTp3f#eLO% zSuPwA8_Q^foBDr0vPscwaty2NrbyzdS&6+rzn5~(Q8ZNPX;bx9St`GYztI#8eaxDBp<%i$T z2!q9fAiv*{uADAi-$Fyx;mCj7vY8d9%hy%Ji*9+i^Uhj$Yni8`OxEc-bB%^A;Q3%h zScenc2Z0Uli2%%e=6{UaFIvM7fA~i%;^3h zHbO)QB_C;sB$(TucVHTIFIJ{dy$lyQOo|!{5tddyBsI_~^Xk?QIv5g&jo4)(2473agy+(` z)^#WYUx^P5mBYx2rXnp9((l8@rdtvCJZXekyNWuNq>(a=HHY(#6S^V4LWwVMIb zJ?sAV=uNVv&r88-uxD61-TIYV?g?%`%4qYyZZ1Y*~DwGy`tk&eU78 zDD{_AF|CabA*cI^G_D;vL)+)l)QO688ceCgu`=Z|>bONyyA08jyKZ`w+LhYOsS3>o zZ1^$WLgW#>P|WOYM#rD6r!rqS8r54UnQwXYnu)`QL8~*m;Gj|yO2HRl!vlU1rP;0? ze=AFg5ZJLPml}vI(wR{FSOoAyjT8f%2?Ipml z3rJxS5MiH-o!QF8)$UL&CcK=w#Wg3&P;Hc8$QUjnC2o%fZPZVLmba)9R1C-!f$@}R zjbq1`x2ztm3ub7rp(dEH;?~m&&5A6TkzNMq!G3*zW>5ktdfEt_31`-hYUHX@0*+EB zWdgxyl8>GK7ZcEhaekvmv#Jq$*V@ip#|*?WXm?DW9KW}wp+02^h#%ZPggr^*qzjSL^^5I$igg>Jy6 zLyIk6q#h=buU__9kF|fC^Rr&1OrcttCU|b@L_}EVB-+#Bz4_XW7b||xO?%#kB4D6X zh_u-+ei<_1?cER$uiN&ex(`v}JNr@dZqxVU@fw*CPf3`}a#4lq~FXOG`D#dz8|5uz& z3O0hHm58~RNJJ^=;9l`%`LK{C^`fzCA?Ne2Z>oFgG)ofyOu6f5_@wGTlGi>P zp(J23)XmCyz>g)V^3ID$n9}1G);wE(nCq0GnQbsXuVd zlJ!9xy{DV(rrz?I&06NoNw6Uf#s*D9X@XOArnkWrCb6~GQWQ(5)D zcpUy{^*j~>*ahLdZ$ z6sicj0y+v_{o9w^z=gZsx?`1lpP~KJ)#{I}OJIBpDF@WJPWeEnYn$ZvzX`~mtQ>Kcir-Ov@Uz-D8jO3+DG>H)Yo-uzq++q-)U6R%uT(DSS>RIu?-g&YNs z$(#x^irk>{_v&vgbDcVu27$^Sq2idZ#tc&EqbqyOuWt*C8|@Fq9aS}Jv4_MkY2zaf z5TQxg2q?Rp<}0|B?%Hx#Uv@}(*!yBRtTW7+nHrr^`Ab$ikPNUHVAr(B2eF z`Y1+;8PgAnpiI+-n>afEwJL7Wgw?c7gG7FULJ@Uhz>V_pKQcVL+^ z5S!_$db?%P&XwxUKv|svQm$d#uj0m|UG4err3kMKF z#Uo~r#TXJb9e=jj^cEYCW4!8XR484jXi$F{oR7wSv0EYSg`Y3?PVu_h7^=`O%!a zi*awt=Q=!&KF^#;6``Sj@+#Woq~Hf*sgH zD{f-2hZ9!Z8H(VQMLifd)pI1M@QDQ7CgY#{Lm7~QD786UNeMHmyV)u$o=)UzcHzOvjP@|)-_SowoOetw9Cgim> z1}$U(vO1du>@42ywXUP3n^hR|%M+^E3i0rCLT+1lZ75ekX;I7XjVKn%*WT?WCpY&u zGD>^A_G+K~p1Et9GU6$p!3~A2Bp;2J=#mRJ`QEOtEeXa`2*^!Q`Rnb?tB5{Y^fXbu z9=O^+&y`?;I|~8qQ<^Y#XNhF{yEv2d)1%b{v((Rh(j!3J>z z8VxpD91ey8##P?XT>V<5q&oRrj|!E)>=R;&4O?h5PLWe%bV}cm{&=v2)G=rk`IIru zoEqedt#0PSKsFWLOr$e_O2c3Bp^8|?Vk-p3J;fpO}r_Z=Rk&dr2e; z6sHRm>(&ayl3e<+Z|#MxTpd4J?@~+ZWsch1uGe>;TPmvf-y?c=|0%GJ2Ykyh3F>YP z(L8@&p_wnNE$+SaxvOVyJ_trQEY+C8T=?|$ufg^8%P^-fWzD$UcXfO@#@LAJW0?Oo z?5RxgfF~AOJc>t61%T%GMFvd-#EI{NO)4|hF=7ZNM~cET7sNlSH+SfSHECazwklX5|qHov8>VfKak7jrn$N7ztyZ}Z05@}I%7%xv{%GPSY#+H zF+xmM{BnNM$?Z_Za4`TY$>U6WIjk_rg~TMFm;DK}KCKSpR2W3TASC2lYxvzz>B0?! z>0dAJPu)#V7Xu zdOL4($}k^y_+#(<7V>#NeTb^dY-`|R^{PA96Pm%eNUupR>|Q46V|xCKO`;?vrksk3 zr$9D1iDtEgu`)1{W1t1lB@dg`&fD>(jci@|gmzP&Q4^xJ5Xlr`@t=4J<*PEJDu5}h zS2=6N{r{Z8|8s{p)8A6gp0t_fbKk=yJWLE*WKA2vS@tP^v-oAQiEs1bsFj2G^m48# zkfKnQru_G1trHdCamYasrKivC+g&+J+313heASEH8+o2Z`r#gAs@&3o818-1CYzY6 zP6u7#>;0&ItWnDQ@WJ@ReD!CWnjaD0v&%-H-#mDJ5RJE<;&5Y7NbNDE3OZ_ks&^h` z$}CnnUc%F7C5O{(8ELkj;ewE&ml$MB0#U>B_@{NUI7Z%a*Yz!Juuja#)>lF-EUclp zV(Z+ow45A=#>GnQ@&!9y;#l}l@i7iURDeV5c=ao_TbGVJTKz>Rl%|GIM0?kqJ{A{K z3x-hM_;u*AydO3P(4m)!MJV{NN#*j*hDSO@5@kiByFfwl! z-~xhWh}dw_4fEyxbaZ62vj2tC#@-gIPbYnRq>OljYybLY)*RH^L0t0r5}p0`tT;G0 z%vztMl4x}+SneI>u5z`ZC=m;^M(`Qr{!xQ(6cthbQ0jlb3|Zd)XBj5Q(Sil}UtA<>z8yK@C)|B;ItPrKObA#8pTM(nZzoUcLBD z?@*EQo`MLz+}yZ0JW>x>0-S9d|Rhd zZ>Cr&i_Ng5Z*UMLOrl2jo&F%kJs@U5U$T>!^MD$9VJDH+1KCCV>j=#KU+DJJ+=Em*!OCpP!=$>ob>deHK!AV zd`vv1JPEiOWI`3no81$v7>hAT*Y-I*yOCPal0GFOuF#*OB3~|jdp6%mF&Mvb_9lfr z-g56J(NgQ{Erp%SbPlMO?^oe2yh;YAopbLVI{K&R)5;cgiL?me#&)x_s&j?W#BlHv zf3K1g#*+){H94)dxbJ83+GnPuOny?xg zY+a%CkL~m3C5MP!(+0g!i+TW12vL2&3V?R>Unb%W5qiYGCL*w+{_^R6PQ?E0^Hb>W zIl_zWzSj?T*BC@xAElzOP4G;DF@ zVqR&AJ4hfl>u8|~{}m|s%l*0I`C1wg5fMhlGWY%2#Kc6C_OdFn``Z(CQ5dVNbj@-z z?>3@8MWe~2^{=AYa#=X^`2U_=e~Si4zsJU4eRG6;WnzghzY88Cf>Vb~PON)1^*fOQ z4Z3UNyoBX0U$bzQp{vQH)=0{Xx>%{VH$u0ac&W88z+XtioEC`M2ozn11JQV;Mr46u zk|sl|-R1bK99i$mx5v~52A*9IMTTtdJ!X?=vm&TAcw{#}FQ%|xbXjU~N5CNeym&a2 zl9SWnxY7aWj&_;)GfqxUDyn?VGIf)7(~5YCZ`pkK@33+MztbbtK$2+tLGMclT{*t? z5>hUivZ&7(wMZT|=ODcBX$Qb_{}MD)a1>bZvqpcpG`AT!auD{7I6pl;K*7K(e&DOM zo+^Gb@_q)$B;o31n*TiV3A9MFwl13o{o?JukX0wX6_%&kKaV`$WYRu7IZ2ti{!8iL zN7z)!+I69o+GpDci&3$pAtq|*P}$tZ(U2RH(LaJ*$E1# zIu{s6v-Zn2i}B^q0Z+fAUCUqC7?sL#;-acJ807GKz!FY%W|QDl`Q9Bi;$UM3JY3F! zojzP{7i48c%LwUSB^sD4dI`QG;CW;KkY*BXw+{^LLq~4f_g4Q0;-Fy3@YzqQ=oJKA zuZPU*{u33twl1MZ^x8CJj#?B>Sb?=c4ed7JCI;ouZ|2NL3MSAtkX~W~gNk=IH#du3 zra@C8hKy|k+MA(RtjPpGAVBL33WIqJ3gt7OW^7Uwo+S_WnQ`Wh(IY}vq)9q@qU|g_ zU%iI8xzBPOY214Y9gi|g!u$-bn^NSF&~~n8tA_%d|3(KwF4$D&4UAyOvM&Y+@9M!T zQh~S58yxn;Ir4?#Bk$8+U|^81KKiFHNBjih4|sH?9H9jh*SCZC^1e>T-Ld5>vBW}a z5u>E&QFEZ;?bBaubT0`)M2JN`Im{@S$k8TgSL*TD&K`WrcuvA=H~+||AQnT1D-=aXMTvX- zJwYu7Y(P1v)%|8sADnMVh#GD?R|U>0kPwxojKcfPsMAKYm{R{k zNFcPy_Id6t1Uf^z z&)O`j`Kn94YS&iCAW)~ubwbBvS2{{H5L8aR@~jmz-(DTAU7F3ZXjaF4q!rTe6Z$n8 zx`Gh{*F3dV3sBWhr=HYwqRcy9an(7VfVA?v?mNDUllP!U0uE7>G2MYgqPcTk`^r6 zt9lEY2I7h*X-^gM$Fq%K6BfM&Iyr1T&;Q5*=#@k7KLb+iw>$=9{-2$Jo$|?aUe+Pq zd0D0$gb6V5gE+`xpw9ADOJ{6iWhB*7;>0<*|4f^tk*&Ye29%!mQ9!HD>j9k&D5-w@ zqnl-Vp+v$bc!Qc{MFO@w{TD)B5Of4#ACoQ!E-P{?+5W8QB<;tN*9%(W!Z;KjXP2ol@p!_kHcm;_fDw-(Fz?m+a(% zs3wbbaIu-Z%rm8UM!8d2+A3tvNrU8AjGD~wo+YooLJVQ(_1ez%^f>z29PsdaV=&%V zh}^tx!7hu}{ztQ`WwwBOi`(ubIB`2WRyB_iLd^lzXRE=yF+^RZ)g2CM)#$p_i%rfO zN6YOoZ8$OgV5(4J-uQ`>Ozr+}fjl4vGNp25DE<@Voxs1ufE|n_l8%r7Wgr+F%^Vwu z#HQ<*w`q<_8i{~GiETQ|(ssv&2u;+}%V~k?CeU_GZbgiOpZAi$9M}Sn56*YI+STC` zk)F%lpR}yzF#}x=2)RmUfJuiQEVf#b8}J*zqiTcZ5EiS<0Iv<3p2cH3!}_nuIU+5A zW7g%oxRo=I>fTi2F99N@6p#=~ZTp{k&DcoO zRnPgJtakTCV6Ypt@o{q20*LzNYYOoB*n@$hW5o?C9&~w@LGd$3@OS;_A48IG&%-u4ki9U2|pT`pFM-i zkjNkR9;kaWg8h$i(eC38luSi#C7>f^7C!`tDov5c(*rQnZbZ?$>lQ9S1^CAG-I7D& z)GjJ4G+i`+U#)+mv`HK;LS zP9EmA_(s^d5>L>z^$X_A!HQq*eazecmTtzE!=$CA7N1L$%f zmSkxCd$!FK)FM#8na?+AMT9e|)jmpo(R{x5*gcJiDQUDn2isgCAFRu8m=D5(NK)&i~;ENg3PO&Fv?;Ld;H zvuWF{519h%T(>g^rpnNI;ZFFCrfHjEna=m>3}N@d-?@K8o`n^5it&1cc*)gcYWX_& zLX}(*F!~ligKl=+4(X=kYBs21M%|3aUn8AddC{loq8D|LG61Qjok z2cFzJ@2LZJ(HBDUFqEmoI*!Y;9r7^Hw}s}zNnipTPZSPT8Me+=8wXzO zOk7;JZI&M`wT^w@PcC3+JB4?*xm?>}-*XR;B`1%%$47<>%oKLN&cwrTT!Cyn9hF-StXMa~KlmU|SX4jgNLK@o=*hFB{XnoR*qLpvcqm_>)!j-1_FC6*rpa}oV zkv&?M{whL8^-e37S1)ZX@IIcBozd#r5M&ebQxS zB(BY7a#l&4pXg!vbA*6=Yhp;+Ncn7@b2(k?ri6$tTvrGj3a}>M9rX0{fZj6!`VgS) zKp9m17o%kyLiv$K(TcvhH@7n(fI!aJsGitX0U2(k3mp!8j z)8+c+$Ua6*1yb}$lfD^L2-qqy12)iq1~&$W@}|V|yJA$!^3>ND%WzRaukpFu15?bX zGk|O%s(&58KL6jlC4VZIEJAGmw|m@!$K#0ehBnI$de_%m*FatFPTwc-SOK@FPrBL6 znCr(1jhV+eB6ZgNNieM*LET%Y1AaVPz2Y!4*i=TKOJ<~}&jWo2V99tw&UL_9ZV-BU zdrK5EChIL#+Vr?hJc^B*on4Nz>LfA{_tYeGwIXd-2Uv-!+HaWT$$6oVSbS4*4Hqc)-NpC&!>`e&}GaM`BK>q zF1p+6BTZ6~x4^*Z@~QluD=PZtE3P?qOh4dHii(PMQ^iVPBAr%CW4;XnZZw!635I`Z zHCx(Ge^6ZSNOajA?w;+L+8rvIK^{L4dk*JA@tLLYU zA3uKl_JQ9O{LbhRFbjCh+II6brtLnL*od%RP|`i0V>+{@ifkLPa{b(Hdzwu+np_?~ zq@Hh2+yDGLs=tJyQ(C~P9s)M4-zyva;jny8g~GVe?(}efE}_hR`y*0vN0n+DB0_bD zD#IU!1PW-`XTOq6&|}rHOt*IZ{`MTu!dRW5LyQj{Uf#O}VT-fX4X;?eOzA=&$Jtvk z9_oBa^I{lME|jZt+I@8xu;?lIhjdEVj51EPnr2?&PjdVJnooQ_7>64j=UuMy$tnWzSGXA(erLrl>s(9b5c5u;bG@{3~^eNl5q)iT=>z|1HtOheG{#5H4sKyAnsy z4g`}rtE~Aq^E+d<+6;sANNsk(kS2paCGhe+i@c(ukjDYxSt&r|uD`xTMMw9Pub;sM z@cWscHPu?iQAp#PVugLxsno7gXs8*o3VWZ#Fzr_h`z~m1<1^u?br~bZk)eR^ud`cM z{A8>k5uP_k)5ESM$_}$%9!@x4?`xN{fCE6^Pt*IJ?ZfqHN$&S_fy=?Im8pEyuf3ZY z#&J-p3`{NBp#yK2bfTEFB?@L+pg$)~o`zAI=UK;(3>U&E7cQrqoqTU#CQ#08bNX%G zvKXrv7SkU~{FJI)wzED1JTD%KZuYYjxh5ZlQin+}}ioiC&eCMhRf$k2_Xn}fJ z7qk~D@NBWLf)D;Cnt&R#=A>Jx4Gb=BVqhNT0OtM=C0VZ$s7Qw%pk;$;MGz3)yY{aP z1<2?p52q*;0r$qH;h##ftXhh8IUXZV8hZ|cYLT{m85?P}YS*#g?Fiero14L~3(wwt zi$BgIKF~@qP$GpPShP8iqBo*Y9_Qj1Lk6Us7VNC8t>>zZJH5|;fwBJm1ONHS zTCW&o&;c#>aO-i0p!rY&pxpPYE>xYii|_3-dHDU-r|%stpX&TyQepxDb6X`>DDXEe zA;7M*sm^jq5U8MHNm#4anP}2Y+yYhP#Yrm1y@Nwadf!hcX* z>(hR8YKl4*NL7r@Ol-RoPv-n=cHX*(BHIsa^F4>7~77+%%U z>M}A8QQ}L|!9>7>{EZu!lxluTPbV}dK!tBNsvg;@TRi+nDkD~={f}b$S4#zg`Cnrn zq~qcTH?Hpz3AmMfiST2d@$(ZcfTn_p$TVHG@4^Rh>Q_e}mNvTaUk+Mf$BY8+uRFPG zGioG(rP5+J#CP3$XyqnDj$x}Pa2t}SM4{+(dF^F~l_A0ZddT;t6{yOOedZwx?@;@r zsmikjPfrJ%TcUfX4Etq5W)r%|U3uM&P2;=5=b?8{U5YT@YmPp57^T z*)G;N?8Ccjuzq<>uX4Ct>wkS!Sr$(of`uGr;6dUdo@73O{Vc1&VUCKk)+X%CCJM8< zYqpY5l$?N#5?2DA93z#fdrRVSkHLV@z@a}H@6SAL^>hUImjDwVe_+kY;b)Utt(i1> zL}=Q<><0bDpnt8;umlGmsj^x8ax4z^>+)%A#u+bDTI0OPcUn>d?@L$Otj8Wb0|l?n zTX=lGIKbC<4t@bg0BEj$(%4eB1)NiZft()GLoss>2X|X(hgrP$0grZF#|XVyIY&w= zvTWSATIEK)eN{`uGu0H88p*Iw@bXD82?$?Ige?uSSqBa58l}h`c)N-dYd)|1kxY9OCB?!gb3AP+S-7Nq&tAwb+&~ zI>ay-eD==`zFc&dDAp$!qxjjT&63=BG-0{@^;w!SDH2?0QTgl+_iACyj;=X!OdMKF zT)*f5Fz-R~*{L-#Uk}cy}hoej$ni-Rhfb(B7%xUpt{4RU*6DE{mq3~juA9m8y2S)X! z1_!h&bQ!DUOcly7UHH9tLd5-UpA{!sH{xR zWiH2n+hZ&*FQ38Zy#6(nc@ao@0J{Q-6a^q=*hkEE=eeBgW$#6chM*z}S zF)I0c7%oGp{@LsiUhBpDx$e;s{D(S!6eGIk1mkL#Tc6aCcp`y56W5>q34Uw$x4xdo z4hGlBBc>Q(5;yD;Ech?%C%CH2%hbXD#c22`Aub8&h7_6~kImpFSw*DT@3s!ex-_`R zthzOnA|f3Ci<-3SfsV$Mx{fA01xWI9%k@=pulAeXiNc#TgwIyNa4480G57zL6YxJ1 zeM=ClG?D7V??=f3+5Wq^>i1Q8G)r3oo?a`{7{7;7K7G9;4#q--^?0hOP;ZyP`R(qy za0qUVfb90=xuv0~r^Teo;xiYxKNq#M=`xE!tn2RPR3cwBVdTN=`-k@4aOdP?(Yby7 za0!Tda6Y&FrB7gQj1ACNfL=vSLv!ka8I&@{OirXN#8qKf=rdBZ9_s6XMVizVIKlmp z>)8@`(T(863jDObs66W-b3y@J$4;~`=((!3{pwmcc2yUuP;czaM&38#jMT&iPJ-$YG{{Yb+4R7EF+o zkl+M{15nDTG+bQHDqhutGgP8o-fh;daDDvx-s}DZ#!tjtl|l6rZi<4CU!?7v*c2$y zhu@~X@C>+K8UMY32fP@r3^0asOie(X0=#O_%T}fbSzbw&m^Tmm7F%vWc59d{Gj-tgSSXtXv0}RNuL-a1UsG>3!WB4<1*HH9D+b} zs7{2(!XdX3jRpf|SNZn&+IB9dHMSKo7m;>_*kGL3CnI6tnx#R+ zJSUk6{~bhjTngOjnUI7qC`1tSZk@JbkmpZ^1*^3?$4E%81AJQ@crRD1Nt0|)xyygy znxT#cl6s&0TCc0LR*dfs&86&2!(?Lq+-!sc*A77W%F`z4H#$h)`9V;-2D@Z~Ac&Cq z;LtAR%~1evfFX}uAqL?k5h72Z-E@iUA7b|ql!*@?1QUC6cxN8#Rhj0_6vANK+L56_ zTjW4&w<=RA&=KVn6k1%ikaNO%*WQr{UR~@?MWBQJ29R=u|Q=_(`AZ#|7LLaMolf zG1Eb099SJTGoRq__h&E>F^Qs>bwCuAPFV_sK0#hVFSQPa22Gdm=mABtRt$`k;^s9TBRE=y_b={MwvJqxc&r&SKBKK2JVG z6Oua6@_^Ar3S2nA?Euniv>YP`mqQeR34;52cd`fx2`MTnDwSD>P9EFa)UC7^bzA9^d1|RmG^o(sbDr(NqRQ zw8P#z)90y}EU>WBP)La_p&Mu3kJmZuce;EZIQ^ckAC%J}Fri~X-Ce8QHFeP9tCdpJ zy1JA!FbdBO4ops(IZRDX>ekJG#i!rcWmZO~IBwO@9Qc@#kPviDn<)4DazBE&G!Jt4 zgX%dB`^jxh4J0jQ-Au?gJPF(G$J=R5QX$0W&+lOv8Tp){$8y9i=Q+H5H!8_RV3j0g zSq5y;$&eLZ!YHvr=fFgq8h5UVf?(wZxRsDhrv!WeA+x^7*Mo7=GBQ9CO)Fr~{QCX- zGU#GbQc^&e{|(Bo#oZP#Elnk*36%FNXe;eFLAHki#?^~98@n)}of_4^G^(iqiL9Y5 zmmLs|1$sC<0>a(hU2oSaMX~}FZV2tE11*xRZCj`UTp6waK0YS$X&9v(woi(7C_4@g zJUsjJ7lVx}>)kN#hPN%c9&%EjXhLT6V0=CfDJn0CF(O+Uig5F1SYtXm zR8%8L%=tzPB&3~bq#!w3VgMS!HUasO&A3BR4fj#m$;qiR;6e4dGan-Qz)&K1n;q|? z+3V2S*J}sw$c6JXsf9>sWP6s#j*IdjL_~5b5kP||)hBS&(he7WdK(u8w>RBwONe@L zFnq8qe7!RvSSZ`b%(w>A9$X#73}G{b2G^JzmQJwg=}W+#UK}o7|7>;zS*Z@M(*jK< z>1SaQSa^8ur|Z(j#w$jkNOmR)0aEvpSFrfLnb-@#q~#Cn)%MM$B-A8{A4EYxiHVA8 z_B<0jxPQG`Ok#-jh_V7))4 zGzaMJQT=AqibCY*u=CshBMb1h(Pj=E8wmvNr%Jr8P{BE3r^bpS>qY4e&u0Qi zts7>C+Zq}Nrwvd3$HkH1hs5Al^$;s4_;GAN$C^CQUJr;BLM2D(WMpMUgok?^FFybz z1(K6swtpWPk$hIEO;X(m&>V0KuJ>j}R#tL{&6&8TD~P6wik?9%SoDlK?OzbK(K|XG zgA_toSQulf!VV*DG)2G-6$8W2;vxzB6GqvLN$rWz*AY+#^L20v&j?ZZ__~IX{6x;q z65fZuOmn*B67cBzeOao7GIMc2bafD{yfI+4Olk}rUEt!LW06cNuQt8A64yW?40kLA zu_ITpG7r(=%wWk+L-W-9w#Dns(H~fPe&=qvFWb@j7I{?6gcoa z7-+cfhmYw>a^in){2ay^zCKEkFY=*P-a6`yt>0w^p#IE$~8RlxM;69DqhXLMAV zy3N)qt$u(2-p(lee3xn-evqK2su~m>jus{&EZ{$Ofb01A-Gd4CCwTAL_)xg_&?{!%GSsiB)P;#385GiYHpV@!cJU&QR*rqwk66o3AU z^OarxJfRONeEp1$f9Rt7K!j;e9$jKN4`<`iW7}bgF-^~#qM}k>YwO|I@-#<-_BNlj z#)0Bu<4Y0_x6M)rI|g}jaNr)`-G7omz*v#U7i)+mdOk2TglJq z0YO@3X0!r`(AfbVl|UtFa`M#uaCdWS`GGI^18M2ZIF)=;lSvQkJ2Dh5WcLsR9^5Dg1>jTJgnQUVKU`lWwU!%mtBHVN2`@r|?@!cPIhAnx&5=XW`08>Fx z@m*|eY<#?mk`gN$TR3@Ww_Amwj<&kNS=;JWuFj7Obm9ecK zt-}}{qKphr3Qlr%(>h(HR=+Tefw$tLs#TL8TK(L&3gBu3jrw0!93Hek!0g}M>M!sU zX6T>AD)ISIU2rQ%d&{e-1vnV}O7=xM^>i2z9vOjCRoA>Yk0%Lybbg(zZErDVJYT2A zk=x(p8yy`DE|Dz!alV;CD1rIpe7UCu_{s}z@G&H`w6MliA4q>TL6N<9(bTf;FB}+m z=Cb4ETgbHdMLa*~`)YTdbz5(|s6-`v7m09-mc=iy7cYa)m6Z)=D?mfqqeASFbR5qU z2Ne+=8QJ7At00e-@l+V`I7RW@T$h)BWl7|W(h0_JamM+Yu;Ddne8LBd{8@D3yjfF17a>n|JwIc11MYE&fz(4WgNk2JX{^;SaU$1_OQb2=#cGwcAHTYtD zvNEpgXS6xTsj?wY=2?#=Ts-;5pYLuTcJe>!M?nhMrQDk_XG*2Z!$x$zAR?P2!hRBG zO9KlMf;SL6E`HcLr7FR5Wmv3@#f7N!_EN1O6}0$zB^YZCqmGr zaz*?>JNTo*KHlFZC1KmjZqt`tL)FY5;I~Tw<=`VI zLPEwng#XNa2IO)b@Pkj*POfCKctJqH|98-6`1gf+M2raKm5!71(C_!Rg#6gPS9zwA zH#d1qNJ#UwFaqtqh1MGP~&A{I|OoFLw-=W)EXN$~ACmv}>>V)4*d zZSyz#KWe07plHZf+Q{8m*5`x$A^wMxVIHxxFtV|RHBR}hm3Yg$e?E5u^znAzM)k73 z^0u}%i?JNgvW+2ZY;0pW!oB6tFfhIsJHhNaim0>I5z3+Pgu=v6LCySpq?(#}pK%?T z*av?$mzD;7Z*s1w=@PVCLC-)HF!qNdAh2D%JMN?qa4R)n8${sX;W?ZtQ2_($AItsW zH}})tE)Hbx2Hpda3^~-3nN7xs9Gzky3Pa~VIp`r`$II!@5ky38US1y|BKLfh&$G5$ ziVlLbG4kL|Ost-RsN4Tw>n)&y%%Xo$O1itd1f)UfP6cU@E@`Ag1!)kF2I-a-0i{7Y zMCmR`3F!tE;ce%C?_KZR^;j%s&5Qxx`OZ0e|7yRwLgeFvy)vAAwMlh#1ri23L08Y7 z_fLEom{G9E7&)={DavIhzyYCk_mLW(E$$5qXeuNmBp4VNSXo)&>%DsbjOAl;k$&s! z>|9tdVoX3mMSbz&MTVillG>w2La&3ps)YO`mxcT2J!D}RApw!$1xzE?d^YB{iEE78 z=d}E-R=1t%h-%8H$aH}&mIq_Sj^9aXM8j}Jnp|e8R{tRGEwr6qeqqY={!2LC#1zeZ zBn$?Pe?k=KGmkhDnO|P)iP#QP2LuFcPnGL(va+I9WdOBTQ^VJ$(bR;FCFjP6g7n@P z!^7hm`QpOWT~-y7+oWqS9f}&V3=n@c`Vxo+1)*ahr$(1U&*T3muiM6IoO$~W8XAvD zvmgftCf%F<^*U$)6~5_7{Jw}VHLtipk?F_-k?iQN12K7dSbH8$&h9X*MmJ=~={$9s z+JDBXZqT{>lW7#&>u_*!{V!7h6lS!9gg`==AGHS+k9}mprR~|919?9esi}Yi@x`8u z6W92}u^t8nY^P4cQ>7?A#%>|>iY+Kz&>#Lk3l{RI%(T_7cfJ=ZZ|mo}*iB}y zmystu#Unpv=A@0K#&c$siF&hh5DSle?#WaL8Tu$Zzf&P4B`y82u@R;Z&l%bTWHa^@Oz?dQlcEHLVU6V@-%tc0`2VpS zV+1o%3>8@8Scyd4MW)|(?o5sH33OjBcYi@YtahPuch8&nK;!4Hd6${FXL6F5Zs3&v z7nIWoSIWUJvFWfv8dOz+hM{>IV}(0gPf|-sby;;{H*eZ1dNDM%FtY^V88$OU1H1UfF(qUsuQcrSo-7*|_C)cj+@q}5SY!}Q1M>YcZNS?& zNYrzB&UZ%%BEeOdA=oLFoNCpNyN!1n@-|crjN};kgoOU?R8+m?F^j!#Czt`MDJ2Dk7-|uBa4V^+tMgtJ)EHFP z$}6KU1$74E$^`a@q>z{v>jW1Z@#o`f7q3)Q@%lX&&W%vlA~dXnqX9C(kPtoDF-0kH zjE#?qk6ex0akJgl;ic)4U2G1My6M>XrmPzL2sL}n63j9}m~?rirR+jN=OAB%y#^Q< z1qFqB6SeM&d(-gnF!)gjBbn*x^Pr!#v9UpsS;^+=>8jB#=E=OjYrmP4mZT)6enn}9 z%Ze>oHMrGV7>+09v-SW%0PEWws(|w4dMcU3t7Q4N^(I}LjV~r|ZT5~53%ZWJi+vKv zr52~QaIx{*983p~hJupPx-PTI#muq;c8BBqcY967Nm)*D zY}YzR_eR5?i@&)E%*aFuoF33GW04(^-M|0dFwFGx(X;+ICJ_oz85z4N%-q4b<$#DB zqY#AFiKNLNBvxoI?>jXgrK0;)Z#@_BsWSWgQbP2PMTTlwwVOMJ!$O%`$uk5rp(w?W zD_;DJLNzsWkok8{RZ{6?Z_x ztic{C6O)(;2(+K1XWAp)^eg;xbr+mn@8DVW(}Ond~teqCXybS=^L^_A-5 z9X{qxm3nc;4httNEDUQUBvjYfNUm$nOI}}J4`N}w|4vC$Q&ad?kl{=zA`~jdE?$2x zPb?@H;!G8`o1UNkMrVc&t5;ay-din$%#-ztCNQaDp{ueb8##036Fqv@C+CL43px`4 z0j`au>}@Pff4LXu2MaFy;|d_F?5!9a9ApJJ2rL8w0s^hjI>gk~c_}KQLKDOKD9zm3 zI+SPZcs)&oi1?0+3ltVLvc5R9 zq{zo|WkuY7-B1Iw3zN!{IB#OLG-X2i(7uhl;16)EI%{cY^lK|C5|T+QYgiizKeVSA zZ{N@NFV&2t?wqY*zZVu;!uIN#U??M>L@lv13ADQ*IKonxVinCCtw9GO+`xr|#-vlU~^ zZ6ju87rGaym?PgYTibSz5r}e-ka7iTVQ_NFD+1vFp0^RHg!sVcr*M95+ieRzdoyEK z2Tq~ICgkj7;=$aw_O$fQ8M1pu1v1ER&}0b8oWuU#+uIZKIq2!@>+9`hVPS!DRf{-` zBP~6Bs?z8_J-swz!qxBJqGDpFzT(%~>Tio5wlDCy&E}o(&qaQhiZO1A?6h2e*b&;f zrByusC|!8JD}5Pp^71^l?pd^dh_s*Sht46geet92th)iGubaJp%09ah5bErx@bmZI z8cd(4(C0~H*1VIivAwzZHX#AAV|lq9y5K89llIseD~8nWCE6D6&H)TM;5h^Yu6`Fh z5#UXS+`f(AURf_-Dja9>KoO;` zE2Hw7#rSu+wj5$FUn$&uxgodTf_*V^_IEvhU-bGccMjto(x=LCN2os+IeVn0_RFtL zHos#TXi|63t|=>jfzAWaYpjp}O$!FS4?V-#?A(1=D2N$-`wOpM2ZkUQKkf&3{8+<3 z0599if9Cy= zf;<6t=1^Hb{^uh(70Idyw34q-Wb)>tuueWrOxTTjb3e10uJ?_UHT|GjHY-k>*?rG9 z<6N94wR>Z(soBF>OfrEO2F-y7b+ zMLYEVEeOca`VJ-t(Vd)~O>}fZ9W>a9|6J_1fC1t)0TUp$gF{0W5Vz-#iHdB=H|xYp zPLHmmt%@0rtMCXL9jUVu8Z{g$S@uw!D90Imf}nTIkJ5v&$f~_Kot!jiMsltGcyFVi zW#z36nKT6yMkBscSDNc4E!W)VZvIo@IRN)8T-L`PMy7GufQ2~hTo2Mki z@bh2YkD0EtaEKxk^-(-mE*b|51lWSp($e5-Z7l>`gmXX=DHvDpqJvH&!d1$-gk?hxLJy%en%UBGDE_Qqoia&g{irKNR@ z;31=S^rIcVO$w0-!KcGxV}qcZ9EncrH68~cI4Fu98Z_d!|3z)0R*IA5>RbN3LH4dV zn3>Oo_R6m{rR*-)O~J_KiU{7zQ=9ij5gXt597#iETlbEw;JR!TuXT#lEIiU9B{gU! z7L0-IDWO_)GLXauZnsz{W&p-gSBKU-&z{mn4nH&{B_$$4$=p0op3#0ZFDN7gIdiCw zZCZTPSiH1Rq5s7hq&Fju=*buIaf{W&|zQ6DM?3pB7j9|&2bb>w{ z3e(-G3VnE5#>U2Zg;SQlJ+mZnvPU&$XU!LciAnOS@q2sOxfSj2zSGjtG4I31rU)Lf z0keF{CG9V>^fNo&38FBRjp>s4?&N*Hcs8zOY-Lr)y6)tq96}XaZSA z2pI(*$F&6#4|`1>%oJZDaH5s;RFI7*?JbuUy`{O1>9j7uj7vPwNgmLUOHN@BrxwMb zH1EZ%p7U)OeDsDII*e^>8cavWZ9Z~rsIgnydwP06hXquadOCj*X!UqYi)}}aCLRL- zDgNqBs!3xY^lDb9o5Och3OE38k)%C1c>N|cmCW>QVsK}Og;hvzGy!caA~HTnm~I8| zPfpIqxN~z52`ZW`R_Lg&6Gq>$1sE}OD%1DQ4r1Kap%OPXIYv@r5~F%~x%TH!)8I9v zJ$P}#dqI*Lr=ES}!yff@Xy~)gp(#8~C#OAtr$2rA1l)Q#6dgJhdiMeXZu9c!rKF_p z-@l))@p|O7jQQqd+422nSrTsIn>!n3Z~X<_j}7ySa2$ByIOa=vn{nUPd+Zbm+*dpo zJEKHG-CtZ%C0c#Nj=SbGiVEIz3z1@IY9cmKD=55JxI}CKKubt^1e2;iFXma$3HBj$Z91pu@{%RRbTc z>Dt;_aDaTp6s^=NaSjd#aFh|Tse5{Ogmj9H3PRmfpa8uAu1eP&MV(_vL40y($zx5! zs5@BTGweV}%Uo9@<5?SJaD4#FHZXvXxw;nI&h;d?OO~Cu`csH}aM43PZ?0FrF=)iP zrb!R0pV55$*kNOJVja)CG&F>hkdP)$!KMzcnbXpn7w0QGn01sQB8@M}_$fT0;6#R(?#&zQCgWHR@Jrd++S1X{!HJBIuK_kEC^m!Xk9hdjY69kK z3bkAMFI|>@pN}F2DN~C&CUh(k3Xu?@=FW!g)cz?ElX&YNyUR%M!S z>G|{T%ViD{v~H$(-)R{eR)AI#n3PpIf1RRZbRK+%*1@H^z8)S`t1@#J86zBcfZhP^ zxxIJT9zpLr%A~@ZZvF|xg!F+L=n3eGioC+%kr)nBu*Rn&?018J_)yP=pVGwzioZYv z6tqIr(*5sZ>Erk46y+yy%>bC$n>fTA!YMHr{zI8#iG2OW5)GxwWWYNB3qUc-iGF+6Gt3cX?5+ZYHV^UZD*dLTuF1B3}3 z$%Tb*^%Dg@3g#U^%TQG@9#`?S7c>pA9wN#2$1oZ`hlkq4wPSi{(vxyy!BCK zcpRQ57gx0}UpNkOL`XYa9_J3?zJU`Z2`OQFPADiVLM$we?srgv5Rs1-T;d^q%lyE2 z?|XEU$8k5_r~|O!=>o?{snNpDAR&a9gM(OTnOQUbon@-P8Hspk_&;L(eW`S~1mVS% zMqdUHLlDWxd|v`whlB`-aR?-j3=g+~ugS^D2_!@inQ?M*!X70{0=*#An68@@u{l$y5QIvKE3xHr(3giSeJ)P;?(f+ke4v(5w!lM`@L-3N}Vq&hH{<hTd6fOHjHHUDx)0KVHA`$->=@KT`3XS< zO~}#&Gb1q&N|<0yg^yyk6xFBv={i-lwK}Xx5Y>1m1o?Aqt!HXr-_>h)FQAO5Dq!Cq z`L;#3bmsr*;4^F0(wEH>4Y}EcLJPSp$(Tx`vCm>qp1dzbm%4ouLzR#oN%rEh@Ar9i zeIJ#drBwuhJg!=9?=m7D?0-#B}eECvLObm)n_z#?%oFID$nW;8#^^jYr zPZPq5p;}jS5=O=A`#CY%^qi>9vAY|Y=i8wCE6GP{tLq`&`=cLONO=@>h!d0e?C?zi zI)}F9VTB%m-%U-`HJwJ;k}+2Oc>=G*#U+mUGZde3kB^VGij;R*cYVV$H66`oPfn46 z;w#_2IWKSJ=IG+3J6)x+cT{2T|syvxffla_ivcjW)01^5S8 zqYV9}lK=a>@bM-0<>6wR-@#zWAC*t~l@-e$s0OT8lg8Ld5XcTgV7V1POusj&Cr8Na z{wZoL7}BdaB*&jd^BX7X>M5IoCMW6eA*2kYs>nukcBJtEz(a|np4E|jmmb|O2u!lZ z+)5;{U|rqaanvG=3CiKv6yspfho^UK5vTq zAMf8kDrWOfd9T%E8kVE__+JoOSSlPphl*bPh$oJuG#KFPw^7Ish5(L87FvF;E(NL%QEiKj+ABg00sH@YfXb?w5!AY1WWTswExGprVKQQ(b+iOiF8E ziG+)vqf6N#235>w%(S=-bDj{q0?Wxm%A2zmXwD|ni*YDKj`V6L_sXsbX zzjkSP$%-$Lbxj*TTAP;HP)mJ=6nfYUV zJ?Rd}S0DlO)l}tKf22MSqN{gx|CYkUSh zdxiURZGAl{DG3V`(=MZL0UyQU>C=tXRRVHy_5@{0K|9bGbl7}44)drHmb%$>`KI^b z`qfWHg!b#k2o(sh=#Z&guK4e`g-{GQZd1PgpW_yq+=-+%8P=qfp9AOMV1ewAiYdd& zw;;7+1o5y6Ym$Ah9lgxklz{J^jXj;4Qx zMP?Pks)AQiXcAruB9crgvd6n4Mi&9?izO=27~f{b1n=GB=)vlSuZ!8_6aA|nGx%~X{G&;JFbS-#GNjP(IB^*DDarFgcbuB!#wtjEcz69F`L?EcS zT}2N^Eow#^`IdTCrMVPk5EGNe8u?5iUGL?EwCyB2Itoz3EG#|cx(Y`1i{zrUZCXE- zCu%D=JJ(l*ii+S^7Q{*H2||XR)j{aS(h1werPdA-g}AwW>HZ^AmRfvxfVveHz5w~t z+}s?5$LaF&^MkneZF_rwhDLmDZf<5~rUrY@EvYu5&s4!3wakVqQ72i$lfR24bEj-E zUT#%FPAAwSHkE2L-;W-T3F^jsOC4XQ@9$0%lZtmsbwO*Z$)2P{yNH(8R@I*5g6|+~ zyKK%QbqgE1J7BKPX~2?+o5~O*sHh4uC30xiHeFva&FF)qd4Xw$RuJ4RJHU{|y?Fyh zy0nG{pHzr~5OTC}a4`Jew3x4cXYVDp)>#YNAwI>5d3;5E6Elo%!G! zP`CI!KlSp5o4=oA+`%%=two(;<*Q^*TfYVK)^}G=Bpq-`u{^d4jP8T9;)k_e9Z)FJ z2$Vv>(OCZy?Gw-sdn(NWT3TKjs7BF^65qOE-ZGFz@9*s;CM9Y9gxXmxLl6TCE2L9N zUni7^EsqEv0T4Hp!k}Ebf`X&nDmaftRaySSdmSAIv$1S#p;LeQ&2`V9Oi#?`bn`Fq zot1u22CC&AK+MDX`uf_MrL{H0;PDH%9nu0lQ&u**>aJOW3$SmdFwnWOTf?O}|Cb8N z#@ZTmqdE|*3V`pQt1HMq3JeSc-7d&52vCA`y=ZxKE1 zL-Y(-yoai4jyf|m-`=ivAZ|kuWUq~ax)x1BNl8gS;I=b)w-qm=*k!lUpeDH2k^m)t zst}}3=)v?ViD1j0bAqkAehh3S;Dli>;4Z&Lg`;|s2pt6?UA}F&KcI%Q+?-cAvB&Y* zQqS9a@dGRCA$5)vgczP{>orak!?{W}tf)9$_09koA|WnCRHm>*bVGp7Km*bIs31C$ zt`%?kQ1kgmH_yI@==hZ{&Of<%GAI+KP}U!It-2o*l4een%IOEwA0q`R(lqNOr>;k9 zv`a#gNG3Yclr+A4aPD$ha`Lb=xhu)7(DM^(AD>HL##2*MabZ?v*eSNBOnO_D#s4LwY3^{vRU}>j9K>_g{Y+D13z-xk(2Rp)JnsR zUuQqH%@tn!o;YkrgH)Bu%1Xf6_t)2ner(V7_JwC>Vks#>*XZSFV6-0g5885Xx&~Pq zz*P)iX;$PRaxo$_xJh#T<7rpWoOfbbavdby|r9j6ETA@yR(wq`e&vs z<+9v7Nvb~1hV70MFPMmuR&4IIUbCpz?NUB5e5h+^^^lX+4E=M|2|un(3K=Q!)|R+> zQvjRf#pb!=_&A{szfeQk@qTb8GTMAP<*Edq#gV;ywiwpu`L>`dW%ekoKgg@YZ3rbm3q;aN}9wG-EQvg?w+2+(Y^5QaFJ3` zP(+@~zmS!HSd|H@UHFBNrp_>3r6hy+zOu%L2i6tqo>A8_-6vZZxC6x6wXeKl*BHU@ zaH+5r!}8}3O5^)IX`HEw#AGLGLz+TFSlB)Geep#+`!_%og#?>eB`(X)Gz}2f-mB{u6hfhMF3J=w4s8 z7{#RQY=1y3W@l#`8yf*w29cWP|C>yr2b!Y4zkhBny?=f6mJi9bq0acT-AxY$5v~ID zT)o@h?nz>VqTXKH015Al8LLsN8rZRM%qrVsf|Xi2rOB$ToopKX-Y2yO*6bFFF%?-n8-f8xi=75|Z$QRu*ZzSA;U5vL#d=#kO+PF(7h zp#AE^yE~>EckQ?D+P_xCJ@BGl++7I>H^!yK;~+stdIY&@RUbcoY{uh4YeNf0#Ne%b zNCrSF0!Z4M-PZe{tknGZC4osTQ>p9p*3}zL zE>6BXogWY&9)Jt8D#}Vh-*3wO|1)8~91vLptk|H_bmTc(zJ3jvtr8e|7 zhW0g{xrO6$z*ny2;(N}u$-U{zk6z6^(=+Tskk(9=mcIBIQq`{by}49XkM!cOKVJ^S z{KmK$s7V-9RG(`oG_j^qfbJe{-aprso(xhLk!T4oL4CvxB&7mSB32 z7DFi_oY}n!amA3-1fUcw(Bz~}>pM_6fuce2rOXjzv5+8=IO|%@~sM zYl%fKE_{hHW2Pz+5`sLo;&Wn2I6;KFGp$fpw>$f@|406znIX^_% z?apXwAOu73?8}!|zq>~8{z<%om91@U(af<%G3<~Bt$EYbGNeboedFZf0@<$$W*E{7 z)gpIrHiBXehf*-GGXfO6^L3;4OVlRKE8m$3_vS)03&9*y?>zQ_=Ea4)6W5g=7(u?0 z$jh$`(`=s|IM;dYhI?!&z9EN@wPOyE_;CF%8z;mPkgf$@dL<<#0N?(5G9XXRN=bnv zNR2zB(HqcF?C;+jJ3TrA`4yuIA?jg|6+dO8*nL+zT48rzw{&pXduyV?7+j)WfTWXSs2m(8|zO%C$0g4=})zha0 zVm=N5zgRlI?WW}}Yu6d-m9@4Se<=Ac>i)k(YeBU_LK%E!mH)}({jdK7m2Pz+^d*t< z|JAkmv}RD#&`SFGE;hQsFV_OCNH{J{v+JrXP>!HFE&x^q`eK*4k1RI|*r?>#+dno| zD|;+~^opec9LfLBXc3ktyin)L*MA$u+X`fF{v^nCn&JF--2-e443D6SW_hTg6FLJq z#5BTGdU~Zs4f%Cm0jTRWdMya(^ypTVq`NaAy-;f+{JuO40QMN-e)GU8I}TTpu*=fm z`my;@&~&Ao4XXjyU?v(XQ9y+*XO={C7?#@^J3t--N#?xL_@fRo6Qebsx+lv(B}=Ui zY}U!?sqJ7|{+OMHv!L2H>yOM5Ix+OdM(zcRD|XO5!LH#+8`xEjjGK{)m->?+Mp+cAAvBOOBY=V1X`P(m|HkRrLFJY1X_uztGg4w9J*oq9IJ5+UgOY zy~jNyT53|zFhmecVmZYUx3!Y^J@duV+@WbvlKaE|z(|qrYis*ssJ@R+sAQ=f7{77AwQ8G4($cpq`Fr%YK-r3TUUB)_*8Iaq5y$+bgf~4vHSFdvx`T{8^5K>y2 zj3Idg@+Pps^?xM>2$2i>y?YX#+xX>RC7cJ}Cpr!e2|CJ^4~S&vDS>;625Bw0)d#wf zEA$Hk0yKy>hq}S7Bh1O9ITJ5Q@Y1JW(QKfZXltoa2)q2}wkE7)MtE!jfx}FAIt5&* zFT=0>fU_@>)g%4*@qG|7!X08HE@3KF7H%`eKNs}qo;%F==&ay6prXoz;!71=rVjJ9 zKLNNgKVpD!2(dJyKfhB|8s=v#eh09mSiLu24#rPC&Xp|;(mhxbC^f<6`j(K=8o+b8}SFzm~Wat?aXIf#5<9(aOpFb-f zwi*~48eC2NI_*?Y7^9^<_Sib%;*w`fkcRY(|L=mHspp8N!&7Xxa&i*48BBxQT|`7A zpLOMUoRb3c%3>y?ko zA|}20Q3DuDcc${}w_%9llTScLpdyPp2&q0y$c&!U0pcYTW#`5pMA}>#^$2-7Yhn8f z1hlvkQd0l2TGg^eb&IrQKsENy(kUY&LrY7`du3}!$*CvJ5f+KDIfy8;qPDStkA9?g zb8~cwrY6UYrVvD*rx92H3POEA5UZ-IT>;&>0ybI?a39d%LIVU*zCr>5K%AhONdl3I zm{FXsM95rT$u3nT2ldr5HxoLcv@_l9Kz4?S2*J;ZcVU&$R7+@T6FwhIo;<%wP6;6j zT)D`OKJgGJRL7dBtX-&~c)?G1Ys-*7^5Q~wejbti%RrmgJ<1od3A5k7o3Il{o%N(- z5l6-2P@$*q4Ri#>^v4}aLDR_q>8iEFGMYX{dRy0U;(=xliVKFcu z2r4N2r4q6%E>?FOWBjs6eR&|m-UAA!F@h9STxwr9gO83}bs#!z8uB6`2WMo})%*xA zOC$tb64-P%0Wf@5dN{Hh?db3@T|#1NB4=D(YrdC-Q&Ufo**fQAqMI#^txFe0!e^x~ zQSU$6r-n1`k1y?(Z9RYGa(U(B!tK@6?Uplwrl@!&_mqW@h=BUds0JuwRFXzfgAp=g ze3+S!7(7M&p`?HcnvC1Hqu=V&955m9U^KL~VJI5@FPD6o9}sZx5Zg6V9-kQ9o}9eg z&Y^us`QD4n!t$b!xJlb9I~Fe-bj>os^#kv!4``)JII={Eoj^TqJXA&~{lLBqF^{#p zxw84_D8aD~37EWLt z`S9U`rznkC-$H|(=Q)Sso4{bC`IVKx4<^TJcY=dmcS*Cdj$}4BUEMm5*OgVf{{C_G zR{WzJ$w$g%BKiG$WpVTGw2{8ti`)VMa(sIuc@#=bc5thCiq7}MrzoUyQ;d&iR~ZK- z6E_;e-(QUS^{X8t2=?~(X=rJ0HixJLMV_C$%g+7|s!)cLnw?!3B;za2&e=UdbbhX^ z*4rJ?=z+Gn`sHh|G(vDkp3If4uehnV_eC@rkEr(^J13`+mR4|FepOXFyrqyQAoD{i z3N@iByfO4$Rw93fMwuXMw63O>v5`qkoIHML`CHtKgygpg2(qYn4UVM{n-l&^Sf67r zU1#=_Vea`Hx7EyN^;g8cbI;e}f=XgBcXpw&S2E1#`17uafH+h!C&&ELacm})pPz3}=e??gz_o4mz4f42FIeZOmx#c!sny7JSonUrW z&6h7;%c>Gx%-ZtayF7S4!11~^hIvd`i;zY%k4DsM zNAT6P@7=q11ugkIt%JKe|G?%E223&xiwt5h(RFoo_h)OmzkXGPIa7>u8z)cUx>H0( zv)t8#R&u5a;&Jd26M6ZA-(XA9sw9GO6z~-Aor2F1DmH-DfK#L!0Fm0v%*@xXn2fh3 zg0KCMmHjYX0%uq^`?&PdP3WdGXE@mKJ`t@OxR~xb8`hDy3h;*h4Rq|sLo|A=8by-D^pIaPdx*XljQ0ApdNc|?W*6>%4!TLX#iy5KN49U!h3!crl4T4CU5;T ze=G!?cV zGA8;`oEuXMXFBb=(KFd?ND0Dc`&g{t2^`K2X%e~l8i1oCD69%H zM+zoG?3+h&68G;*=+?+72__}|&M-2n$eWi@RV2L)U%Lsp5??xC@p$gyG5Au<_v--X zcieY+df14yfhV;(wetD!z>0!Ll%BG{GaE>Pldh=9SLqQpi1@C3;U|X8`*ld6aNZCd zB~Rms4Q%=ytI|ePauJp%)`Mw5Y2?%rm`qGu27#OW{6|L&va-@MNEEt*^?3Myzi< zgyBjOFGnd!NCZz#x~3~jE4tr5fomiP(Xc>c^tC!#N|Z1ODJks(*A9^IiiuH4+gr3n z6_aKUIIXzn-Z6>({CuFt9!1`8q6mwc8cxHD{cZ@Y_|(m2X={7m|M!{Mt6vKA_|m2C z-#hik(!729HX|d$F26V^Hzk#hf`$mvGiE3Hi&%O^(kZ5NrW`}z9%8W4NGMv!l$@~zAfBQB(zTUJ1AM<=L zRt>Y<0Rbbwfx_O_`&qF@>G$7wIvSeY{p|M!T}rFapb2BpiBG!2fU5n-&=hfBTUYay z_f~O*(#0H(*O=+Y9X0Fi%(lM+SS5mT2RTU17dw}$i9h~#E`U`uDKW8hA%hfMSs6$d z@aWcPC~>ky85j@+fh7&hp}o=22vnrTrKFTD%$I2P3aR3urq<96`}=2g6;VY+aP73l z7H|54f(1hcCy$aTEhCfL6))+%;3!PV&>@=<4=goWJRcdN>^0cq?VlB4COzJeYK%u?8Q_xhv z*wbH_P{U^@Sj+w3!EAs3zsH6YgrKHnSr{IZxgGEWK_zi_Yh_hI1ypQ5U(H~jnK0$XskpXy{t9vUd6$;na0P<8z>zp6EZ3Z3kcRX z$kl<{31CZzN)!?jvI_%gTyb%6Sy@?KT^%etRNz@zpkG;n!46}hlrb04_}S_aUoL}C z6Go(sw25T7-p-=qRRxB$d`3GT-*LiT`D(E|sIQ{C@svsYGuIzndUoPks)i53JDn1_ zzXV`R-z%T3>#~(-Tf|vhcj4MS;l2JRcDZ}WKX&_Z(XXznTkdxsEQQ7+H^ib%BGk^> zVbi>p8XFHT=lJ+BJ{!lwL);Jj-aY6~_^jwzQ5_w1bXONexQxQ3K&GI`%BuV@B%fiv z%;^5vPFRO@>+=vY9&^WNMTl_U(J(*{4tz_>#RX6YF>!oKSUi4cctHWuw^XV)>c~q1 z6h8Bgz+WDl52!_g(eOq~eO!P-$HD381t$ggaa+iuqJUh@#mfez7C>;huezXB(z37x zEw|GmIxQXyvNF2=w zT<_98C{{Hf_(7lF~IH&?As}AT(_oK2xMdcE2yXEfug_NW3x^u)E^X z)C`KkyirwCQ*&@|@bvVAQ{LLz8fX!F`@4oRMOsh|f&1+}P)qOMgROsRauPt#3@|UG zzI|Ij0$E%YdX*VsKHM_+_`jZw(w|VUe;rVDe~_}VfiaeVg$F);yvBfDsSO3ez@3v5 zx~%XsTH*OxC6{1&dif&FI_#L_Nui^**cYfYo@c!*%nb5C@aq@`==;>>z5BpW@*a~R zSh{^|{Vx2aFaZwt!vRVd5<{?TjSmG@yqzrOm)BxJPk!3lV28JT;5JNrt9X0!z!x9H zvNwL90dDjES5GiUntsM74%IFJXH-w`7(2_InW{p~8>VedVI*M7Ek z_`k5<84PlpsO3t%z(4-s=B3%DaQKS!^B;*;Z~NZR1gouk2O^%#Oa1s(_7t9oGNap` zf&hB%;z{f_c@cBq+{%?Y*w1+Ejv}SVk`UR-Da+`7{uEYMV5lTmSdc$8*JWs`Kq5;> zojyz|%zRfmY5rtf%r*|Obn1|qhb;u}XEtzb+&oJ&?wx~+oG z93OT2bLn#nd3LN^gmhwjB8)8n6)T#v^Yw2|V`B}y@b!L+XR#v@-JM@k?9^2;7wSPH zJvjy7%>xmzde-J^vw;+IE7$EtoP*PC4FyDOVuF-5!;r%PMNeCBFcN?={(mkue*DOz z@b~xU;i-aDA!QX68D-TsHPH3#4GxxEh7{&VnMisqVlFf7*a+j>M|O6!K95i69FZz4 zMdvXqXr<0YlEDW=<|P9v)NH@tdtYE zz+MEYATV$W2M6qZLxY1q+?(v~WDZS_jqwQxeENrUSC7ujz?sr#7Ww*hM}(cD9)r#C|5WkmTu_HUnif5 zUD-@w=+*t_P0Ip>PlFth&^;RX6ihn#VXFI-1>urTBJ1~MKiU(+t_dPZ$uu#t@o^YD z72xU_S}%-=r9F~0FgnT`aD^X%7oy%@t_wSqZevrerzbBVpP|wCx^oo2GG7BGJPzlg zM*>VkYMG;>feO*) zR>&eEwfS;rpe*6Da^1$4mD4oAxqH{(iNy)zKJp4F2r#RFerE(~2}tSsS4)s%LmU;; z)=;MH)2CsV0}o&4KJf6KPaf#JkG#y>e*Jv$^@f;#%NZ3?aG>(TBvyEFAUIOQL%ML4 zNK;cY9WwcxoZi=#zwmc<9$f!}Z~0L9#h}@&^AWm&gxs|W^;E1)IZX>LxiB~DS>MmX zn|@qmblm3S?)|)?UE$%=lfl}tO z%+Jn(d>sBKL<49-Iq+CcPR`Fy+>lp5U;$!(Af<->#H2vx$LaRgXu$eO5kg{NS6$0_ zpZ?)fdG^rX^9zMIoce21oW||3d{!&_F>{~t%cB&vw4f=Yq|{ufrvOJ?HGT{fa!n$V zs^;{?kI~{H6a{Pona9+j4`xIlJdBP}P{W}--wAsQqb8kWl8N7yK<~=Rde!xoyZ3v` z>o@X#;(C=`F75fwf|Oa=d?2I20yhRO8Z(B1LMxAy)bhv(grfNavTUblW)=WG;)8<& zpf|4You7uC-rNA=BI&c|db426Gh=b8|6y0irr=!xhh*kS7PhkEiqYg}v1T77Ipl3m zKheK1`diAsepx-Y{DdDpefENK>+h$OZhAjV9aOoA`De|~@AvZ^Z21MW_zS`C>h~re zc^_;SFOON72u>a2thqPAlLnQBg@pxR3xF^vC@3(itjVDVYiMafS6mC!Vtu_ZAD^ba zzAZ2Ll`nkLP~G{OL1Y{*t$1lg1y;f#2@Yd!ggu#@J;mI|@qbn58Kr=Vv0jjB(FMhU zYSGxy`2hGJ*9Hm^eh?Fj?e65^Bql!a#)gik2g7ML@b4cBM=TEy*9QP6xU{SJ|4!~( zcPrC@T!Ox@DfH;I+72Av2cSYLtyCz4HT!{rgHsEGT0)ob<)N|1kV%B`hGIY~hBSNk z{+uYS>aWlrow}15!=v)=umc3s%M0?@)YSogFk?h#=aAJTxEIg-986B2{R5CcfjJWH zzV6=Mr!Z6t;9|QZ>dcLX5q$+U=lQeZRy5y?66NA( z%YL<)?AgzbiF1D9@n>hFHEZuiqM4@Mb?)gX0%n`m|MW1h3t$EQ|9Tj>QHqL+{_A0= z0cMd0Ww%OVD9q`DOKsuf)9B=6V)-@~0O4p+c-_8EhO~Gi_`3f6DC5HB^<90ZIs53m zY->7fsR=QEEpZ&cs>`1f|D3sLxHMUTB6K#2$eP_aww*RRs|J?(3$X0C^{1qJwI5g;ap5!y#9 zi2MRzvzR{i1&Z(^ga+(^I`-G;7BlR#kWO+The-%n0=48Z-!`%3-e?dh525}CgI5<{ z7!Yi6e`Slgk9vKrU6NDu6s#jmO6*+L(oN2#{l&H2mEM81#W4OTB+$6c=KEXSc3HcP z*w5dU9$Nwrajg?G__={j<7eJ0r$g>%Cg0N-)Y*_e#CXxluQ+OIYbRx7P}0!QzxeViZ|ctIuRo%2%W#tR{_yBfQYcjkW;{<6bm`5 z)v>X-hKZ?4Oe!j~vw0LZO&-jz`nOI~?-@!4$C9+ z#+L43TpbR>)3dvqBT9Dclr;vUGZC%g?(Xpki21Q&V}*f4R{_M5bQ>GK5we|V1K-y1 zm?H!3M1)itt^PpaCTnYhI-!v1>sOc^=6$FLqZh0CC(FFNyr!n6;E0Bh8Mr~9n;IG! z0plnH5rQU%lZS^*g>ZM^QM-ThpMV;ECKAEsUm z*j#x<^swTlThW`pL2r`J{M%ivQk~k!ojGklx5s*3t*n^MyzlmT zEWNh<8GAekw;RGUwIbUXq{B z0B#51RiQ2u7Z-=v2Ogfs^!Rxs(DtFCq5|*)4;kOL`qMvs*~5>xa000Ltd(o?jiULNJI92T1@UckE>(oO}>WHUQIspc}=; z!5J$p$DFBJ??43by;)R{5#94=FrO9gGit&Ahp@kn>N5M{zu^zv-3`*+(ny!Ih=P(z zE1=TdDS|Xe3P=fvfOH9nlyo-;NOuY1vz_nnzMnsyXWh4JW}I=>8rNLcb9SJEY9(^8N}l5}Z1*#yk@v)k|U1YNnPd%nx5t4nik3gnk=!{VSte3=d-$I zI(&~Gg0ri|G4r7Ua=;b_!5J26dkP<56379N2Z6y86A*k<{YE7ZfPL0*>;S6g!iLhI zH%`{gmtMAx?8v#J*Ni#)4jLg15j_nNzMQFEacRN*2RIG|_**Zz>zj)kQ?OvtvOhictqx!U5eYX(Xzw=pWteZk9{weH%Ai;tV3m0_|Wv#8*Qu>s+ zr=ER*2~yamLC=AA0`wCYL~luik(IAs6~NjLE-)zo!gn@e;@nYSmw#Dp^sHO!(5Boo(Lj(?+cFg;7LjnHWn5q zH+L|hdOVf_$ds?(qj~WHM1G8S11j5)-k$CWMp8iA^6yONQBnf`7N$Vm#c9PQEmxFI zw$NU@sOA-;SX+Zu7#bRQ@qT2g-R&s3uci*0ZEs(05wtlhtda!0s+Y?iZ3ogW;rg-X z=rZ!gxT_H}80ZFoK#dy6U!>0gcOSSOgC`(Dfr_7fva&8UB07Om?2UXp0vV~bgzE@e zXtwJ(`Kbo&w6ug~_tA!xuR)QHd5ZM1 zhAV1I!ho8A+gBt^oWeCHDoR6Lz4+rtCGKA?4Gj%mfINds@W+oI;a?^tCUTHsw}7is z+{9%5eyQQ<{vyMzTLYk<`yv(Dpr2wiyuS@jjQaU6HLx6f-_*))aP)e3l0bvq{xMdiXTAe9L&D62&0_v zfx~}|n~Q5j5kk9RY7K7a2|!YNZdCuWZ@#gpNRIjW^Sb)>ak6jUYzsdN0UWzu^Pw^L zYdN@A|8c}IgAnTA_+Zy=TcDQc}2wv|am@EJm0gk%R(DFEB-@fidNIO8{he*v-7WyrM&I14XLZU zmTlxmj^DqJATOVPDl>u-q!O_IV z#`fR#cMagh|CieO0jORV7Z)!33v{<`?dQqohr+_DahP1+*x2~_bLokJp&{_2CP4I; zl%&?uCo#2ky{+L*Wp;9#y=~H_a?vhGq5Xke+s2~g3Jnbry7^9`-PxCU#Qz`>-riTB z#)2;&atI*CJ%I%)7pBwTAHe0+F*D-@Bi4#xxWnV)T~{outiXVVw?@JlQ0Jm9m#fPN zD`Lz5D!4&tKAb^AqTp_hK8(00CJn2Z(2>GcHnjOKJm5+(LeHc*fss~i1e22B88`_g zMMQ=o2D@i#f6b8L;X%)cM$b<=gwzf>MgHB9^# zc0x=T>=Y5LaXC4uuBkCdOuSFJ#+r)Dh4l6gQQTCex0AsyVZ@K}Cs&#WEF7fQvkz(0 zhF_6~-to=II+}6n{(_{9qI$9)trIx7v9Y!W!0~YS5gOX;aR^h@;oYmbWDs=$&}8UD z0WoE6?lJffVZoc>!Oze?i-@R}3s%Evbl-my6N9Gv@L|Lmlll>qdhjbPUZ-5Jg$gHG z6_lh)K2tB=>W!ME7?hAC5TjX%s*qc0-uAv-hL%(G@w3;iF?y&RWRY3&{o@dB!~Y+o z%Rm(d9bW|))BA@w2cBmj3I+_{f?Vt9=%}4H%%}u`rXt3QiYVy@h{HBD>gR=T^}0Ki zK-BK1y10URWVGMtBy~}-AM*2m?(S+4qPCDyhsF_6Bn(doOiVcca!ks|@Hr66 z{{8#6=w0%Lx;nX^6`f69ResZ!2yBhs@>hQ32|t&%87oFN3r}aQW9hM%3a5p=l$1C% zDi7UZYXfmuRY@r%G!&3rg#`t$cyh?#%z|nHY6_?;zr zFVHvVY8)s+;PW5Chdw%(#w2|%oS{u+9G8&rYR78!vM~EYECY)9TE^z=T2gi6`L|ZC zQ={+tv5|x`?$?QLqHf75-M!lfI{VI4C3I0v0Un2s4=K8#a9Z()zG1kt2dTp=EC2HI zZolJYVv;W$b#QPP?$<(`o~}48@EFyPa0ruZ41zSq!~_V{w?q&J^NuDl=}`XVOH2X` zIU3o=uT^HHU*=nwWGc9drfQB&=2ernUI%>=X!1Y`l%sXVXbRwxV;BmFE9UI%f`)w@ zVShG3{LlI3MRXji8IE~rvj$r7st?GlolRk&&!^qq@_aysy>GwG7{{F zQZQTzpA^$k%+e9swqe=NV-Ey)VJj?cqbeeE|K#+TzKY$Md3*LdX)(8>Z{2hG3Gk2e zKYRdMI?%A8V+$b~|4H-)Tu`BngSo;O{)9j-2-8+j`Z=o_<P^F~*Twe$8>J(s&;Ke}g356B7 zYZzWOG)XV_r)>+{xKWA|Lb>jSTVV?DkK+x z(YYI~ro|f2wXooDaw_Nz`CT!lO>K2Afa3~S<-6~7A?J5wRM5A<_{EFyU<`0aUwFXm zZ6<7QN-cCugJ1bFC9vAQ#5Nb_3AYHLh6*{4oRr$=P*9LRd(`-H1oa&M<%sP)ki6X7 z+@Q6ZstXgd|4$mYl2VJWNQB5Mcua6s=lm;v)Z<}2C_=go=pWu-KLQg$HB8oSEH4XM zd_{#L3X?Z|BQqh%)%N_y&g+xYSJKHh>xGUJcxI0m`lfbqHk!0GP?z=ueK!YjY*7Q< z%qt&)M<3eChX)6BJfsv9unRL97#Vp2hZia*m=l-Hjx_{Qm^Qp6xIK;_z`OGp_s$)# zyUab_nTzBz$tjJ#!-T2JVS94MYjgQh+gAq50Hyify+aIdZzvRo5AAe^g4uNt&Pd4S zauFI`W5qDhytcNCg5J-|UD~z}pX3KgsVD8oaV+Arb&XHGBsw}&& zFNmQ1nxjTlj?VRPC0ML{q6!V@nHYs!9^+~?Q|R60$pJ41m>wJH^ZT$JIdt*4w{+r2;}1ems2m zYkM0mWQs~ZTSL*`vVjR`w$=&mW?H?yy^wyGsoi}A7MECtJ1zcyZ(w`RLxTbm&Iw?d zj(+`$JP*-5oQWY^mrJ{(YXuKE@d)kM1!O zVj>7p+bt_K`*}%8$xcsCBuk2W)jp>gV9WB}yO)}d3}M3{qCiGOC(vjBv2S8%80Pk= zww3{c#9&>#s92n9r9(AeiqLDAzglvzTKo0!(-Q{^zlE&l?`%B1)T&YmONxp-{`__Y zF$!)h@K+5D4J#{FW7v7&#;m2O`M=iU|6LR-Da}?dzW%?w05^HIghY_g3GOU)EiGkX znCFIK1ojQB3m-pS-60rmh3hsiA?8p}S=lb+wS*Bc@WDqwF3z*w-l1weK-%bavoo8q z-SYcY4{`+Wrd(?N1eiMRC)2^ThpkU&+=*_$V#jF@}e6dU>XZBd1)mm~t85$6|* zh8$BHN|vf}=C64vY3av!;+W#dX8|%Hdvo&4T%xZIh8FF&E8e}cV{gVq#mqUGdYflU z7Thzo{cNhXbu`YRgQtPI?{n7y)!6trQVuLW47d(Mkt&>~8Q~+PO)G<*i^TWDR#VWY z?5U{hyx+<7^ZAn6>FM)qY2lqBYH*0dN&pMt(OMt4sQyi`p~`b`a)OF(Y-D8g=+V2> zR8WV7DRCnrd@$hg{+kv8eBnV0tO3|_;PQz_Rdpo7`UYiT_%(S@tta0Bde z-LZ66>gtzE<#cOS1;=x$gT_rC7cUqJ#zhXM6F02qC0hIkKe!U6i#$0?9(ebYwev8x zr?>YFwWvJ=Ee&SLG(xNp)XqRAIeefN|G3$!rlA1>jPnkEfYYQ9iWj*ii0YHgndA&i>93|i;1nNeEd#b}UQ;7bDt`od{Q^HX$nYTiYek18QnUgTXbnP9^qErTv*EQ*C*RIfGdB zghI+q`(aL0S(sEJgc&86probMjAxl?2OJ+{liXT-6Tj7PFZ>U}_SY|aBbScJfvGQI z@Xu(3MxL*q0^pX-} zT|K=Q;3Nk43Dm6b(by6sV3rJm!GQLkz=(NG_J;Dw#ur|ACk`n*sGn?BXQU?i27g=K zr?`?gKqtvIP&9eI(k!=#R~k>U!c^_kk=%u|9ywZk;R3!aC`0qg%c05qHZ3jE?f=9= z07e3?JO?SSUki8$@I98(z)t43QPU90&o95aM9M)?31G`XJi|~6Y{UG7?9nE%#I8%_xsuCc4x_k?CVGkq@#m7>5>hjq)A1CS%@L}^_N!P9_v5I&KW_(`I!1@x!%{4 zSJv~>w%1T_dD=PJ4PGTg6b_F6Y@Orehg0Tn4S$=SMtW{&yI=?UGfGK$L%RitNE{p- za#!$w4-{>hTZ@U`DPDAih9Xq7GHw+YMODNH4D$C3a&vw!U4L7WJ|j`gi8V|F!Y%CB z3+!xc;A61^^8$>NK?B6xoDs@TLR2_lABaRCKnVf!i)}9a43t_iF?U$kkVa8fQK5rX<`(r{4>;QK_(fkuolF~^s~c!Pv?AuJheVQz6RBc)MhhbrAg zP}JRxrozd(fUmvs@&zq5ky7TBNOBEtI#J5~xV;>#Ho{-3@uIAuXq@Vi7CQV{;_+v{ zfx$tcL)YrDRo8bB$!%D+_kR9un<~sh!?5qk;UN}2zKSppc_|!jprk^gGQ$d>32kjL z-#Yc~=DZ`^vK&RpCaq{`$!Fx}=g!M|#Qq~$q|DW;_#KC32u265St_BkjVWKv=?Rs4tSZHhG|5wSw6!gi7h=4#_cOG#_ zl`nt7)CHhs=`Nm21q6(;BWq_i- z^AxK-5wf)dDq2YwTaY`TIJ!`SPA6C-q`XdwK=7ZLs22v${m&lgjp)bsAFYjkdy`2; zhquH-h%17iZ{v|8_CV!9T3C^xJH=zk7eCC^Q42&Ups2p47PoFnUL#l$I{GM9apIpf zp#2&}ccw3koilWT2(>-=-dOy-vCo^+uTDY|KXoH@Gol%lyc4v4vb3J z7l7u4E7kubTVrEmxM~p+5qUD;E!M&n?%#;TKc|k(j|_Pn1FrG*b_>{ZKr95o^>4t3 z__?gzS(TUp#FCp%Qxrg<*2CHWzmuN?3pdBU)S=Ya5M6^j}q74wc(qV11`m#50ch|N69? zAnnq4{vopR7i(A4mAmU)b5dF+R*s?S-+?V&A1w9i*!=jC>A2yrW(<})E$-HfO%^EUy!s6f3^m~H7lA=3kO|;=1z)A{y?Y(Y&QOvZ$ObXO zFOiXwG9GDhmX@eT`6IQ>OuXT(2+;|d)Xh$LYkJ?*+ICvY3yp|S+qS)E$&~gy8Y#GYK?&~zBra&7 z>FVmX70MM7;?I|P&0#nE<$1Qcl|-<=fF74Yn4LjL5Wvj)w)~w)L**MHo;KjG9YP^crcEM;{%=00@cd1%8$573E`xCnIt-%Xt^V%fAlA=3}~oVnFU!TOfpq| zx$cv>tg&C}2<`jv$BV=kP^8Hf75gAW0;y{Fb!Fwh+s6Fd9E>(1 z$fFC&%d@~+dM+U;`G!`4_|{_j+;vdHj4=Ycwo zox46`k>hY5OT1@jS5&bvVSo}Bmuy$GVO`i%QdXX|VspY;pN1qQtZllGtomeMlkw8Clsm?sAf9$s_VM{;f&%c~SXWtaQzb%gKn@ zNfOKVRl*}?ENmsE#R^JF`K}^9-T&I|&!!ciHc-{qe+fyRaD)Jxsk`vod%et^hFOgH z*IL>Vemg~fd!Ag@*CTrSG_phHyop~D?0zU&c+ua};Po`V%&o)N`n!R7);M@z;T|#T? z@MaMonK5bjChLh{GI?@u-*vXZ*fquPx9;W+)^wxTW&tZ8SZg#Z z@1(CZGH#t(h2aJhW+b3JE>37L=+V6fbBXv zgWW}iB#1FFG4Vk5#fw82m4HFj2pq_jl zCkzZxFLtdXBJr+XBxii?-KNl+e6zDLG2!uX&Sm4ehh41PFeRnf)?P{{(?V*9N=y9n zOIjm|>!c!#^S$5MpJ{{?GI%}Lh8A|lCZBP>scFueom1xdf*R7vTHq3+IfNUkB3!wb zOh_`XYnGjsga_5m?coEuN3DLo`ufB(-4hcNAO%f*vH)`Vz>9iwp~FalB2sQe-%>5m z?o3Z5WsX4*4}5@Z$^11M2WN;4jnzt+`&|nP?e6Zb)V6J9-`%&FG1s)t;zJ`r`7E-< zFx3Fe1Tm1Tvf&=n3!?}+nUdqJ{{A4X%liHX@jsW<%1Y#Ot<5PUhQB{LKH0n=q(W0J zc$3bbB^#m}E8mekaA~x^sn}I;%tE{(7mv7D*%?{*b2P`6c;>crS8e5^KnjY zWZGbf6|(H2LvP6E&m*A=rnuOFY*4_%2!)KtfjOA)(>G^oN^5It-@T)W?)rKK!s=lQ z%;>>H7|yN5oct7iCIdtLcv^~;dV3OtY&HY2bNTrvJwj}p7Aspj#TEB!bW>Anul4PG zl+u)@$Y{||pUO*%BfXr@tvZj#*-`p;elI-{8JoOQ_p-fh?sw3>n+yrgs-ui)YlLj& za}#B|p1CsbAxZK_$O_U(SpR$W&Di+(vS3x4i5c90<`P_4u9*Y~NwHHkUG{Lv$b9tU zH5=+%zSO_}cpeuxeu@VVTq1u7x&l;ooBu>qO+i84-9=7rE{?vw$~4f2JG(nxQ3H0} zPZkwffO2T!TeTgy94sv_x*-=QJ9`nfRroRNNXjIcsZBymK>;JxU`myyuP7-gfo2QL zBxqq{W5Wcc=jI42bUi6R2VrN2CPcMT0W$Q>6SK3;3=Bx2j{IRbIuT9aiyVN||B6yP zTP1-`G|o^DKUdN<<~qsd){dL0aMy#qySFe4sY7Up@8{2IykWG$z=0~sUYubZq^!{!OZ_t%?s z)lE#Zx~S(wy4wL%(o-KTPy&OA{n0|PO-<5C8sI92I_IfS z8Zh#4(StjdBch|>&Iz|m>X>hqm9`?(|Isx_u~|7eH-V`EZ7=Y4_{cISz`FsnScCU@ zd0N^uWZeP-666wa>HaM4ZI_K=?y%SEcVA3QU$ln|pPrsZTkA{?jqNzjdG0SX!&VEkMGC?o8$r^? zlW(srDj(X0W@XW*A08czOiqS>uZ`?nl+PRO9x%IAnvcumaD`+q>BaeC*pq7Wr3Tl9 z+B_Y`qtjgiCL`80ur|}0)=I;`%fA=%(z^RYXDSCKJP|oKIkZH4QqJ}lA$s_UPd>EE zK};DltrPe*Q1-x{>%}H9$dTar{uYxndN_!Miixk{EU>qzs({SJb?_#hxbCq4rLCgd z?WQJ3j3dXn^B4EQ12v6XfRJ-VSv}k^pkZbNOp16rrHX%S8-ssAAFqPym=R;Hjvtth9jN2qugL;Yt<}87WV~ zOarYDdU@OC^ae*mbVR(0x0IhoOR0D0efM~cE(!~gHqWyC+|YaTNSc(J(og#@qPy{P zso;QsL?$n9Zvg7#YJr>&1jxY+6v%!$Jva#X?yjO?SRPz1n=a7#keF6m&r$onCzUMF z4>J2d4!v%QqE?SjDqy{cb5K3Yo@ywsD)zKAKn)m)CyszVPGs1=4xk9Z7k^lbi~O^y zs?l*;At&t(oqXYH!uLLy$niME_Sb(DJ!7n<@gA?GMNL~JPt@U)InsjOgYdURVYu=x zB5wO((Kv7ucJIMnK87jPD~MQ8jiGk^d*chpXUI_UiAP@YX9Uinp zHA6$U9~lzR{0h`%zt@*oN2$+T~ zTfaUDb&KheXxR@HJN{Lsr}p++ySp;h{gmMGy9WQ16$p(-M=!aO8X$-Y#=9eY{B1=f z7gXa}P9ZBy~AHeg4YM!UR!{l9G@&)a+$(?kMez4zOoYTSaBG>p#Oq zcPRi}xIQ-a$%RuTM&Ujg3~h#@wOG>P1K(%5r-xHo`WgZ~p^JSN48{pC-Uw_yNY9>z zLl#6Lp!b=W(6zxF%D*5^7&=CiyN|IdwzMd5o-r%0;a(aL6c{=$Lqe)o>8fp`Ew(XM z{BD14XX+y-8*bO$o+0TYQZmAxSx;HFKU3LwFU%Pmj-`PI7jJB|T}^G}M<0;WupEpY z>tjB2%up!)(S)hREiL<~?N9iAMhgG;XS16|{Q{oOn3%}>RPyn>=zf*%8*d(^{8(%8 za9myDNH!8c_kH^GCxw}hUV#Q#;+uXRFiR^(lLI9OV>^KnLUXy$oAGf08F&!5Yt-ts z-1*kgFNvMUxLDg8SJ=UU=F`KElkX4w1OgUpM`*NgDX$|L5%dGggs6c8>(`gZuy??; zE=%uw-kTFDLbRcaQ6h8VA&tCETn@FP>pxd9+Y?< z^3Tl>)BQTHw6)=21MM#z4M}eACf9C1`z>PqP&;p(4T2vNbZ_mRu06QpE65?neY|kW zUDl|4Vmtd8_6*pa3)p~ix4TP*-38tJy2pGE3kruB#VAym>mI8WKwgFyI?CrN3lSh% zYoZ6WHOdissIw$f$An#HeAM_+&T)(VxL&0o&S(~sRo_Sa>ULSCm}5w3?BdV0?F?z( zA7&Cb!jNV5zlZ&XlIkai!MQ#?1pNK^T3;nGJzX1LzVXzCDn=!h2z7aLb$e@Xd7FVy zKQAmhHuedtgJ6nEJv6x_av_t;IV^rz+;a-oBcd*4eE#dQWFHXWpLQOkN1A+}9O}vN$0>5g%tsR-KZ*I7A==lpc1~>ZOCl#W`y%H-E{dL-YNHCsimf@BY&2ZyvMp zKHr_qBJ^LMB7$V`c$vGtuW!+2n9R8R{&@GCzDBX+QRIck9q{ggF`S(5F&r@R2|XeD z%$T=QSuog+U>{VR=YTNa=&+RTNnU1_D*pZYbg1cW3@(CBJy_0;=Ny7<$cx z?mOSZPv(&ObiZS3t>rr^A*EsK;DwW}reX9Kfxev~Wv`pp^XsnH-JJ2<6rzswDsRQ} z9`QHn2qxHY2xaYFK6!OiQ~Jn#ck|c?BT+9H9S_hWXcMhM)Q87|Ffw3g$FbFglb^pd zCCFo{sg?D55+aO&-_VVJ&B}}-=49DN?sLidK?_BFh4%sjwXMISuhA=*?H$E{ug`{| zT+9rDo{fEXw)(8UB~#wDgQj}Bp9E9a-Z&mYgh5r{CSL~q;eqfn`JKyB;kE41JB zD)T;7+?=cTvRk+qB=fANN4ig;MU7Y0KSr8Lw@};YcPa<#CSK3u9(LKyQsh0H^_%^n zy-eJW98COhX2K{4h2Mp*uKHF~=&>PBhRw#3xOwMy zxX5@&NyMQp{Oe5eKnft-{n*(tx(HF32r;3g2G<#=$XxeJfWMiMkpX|d16tSf=gPO< zPPPZ9N{*9KMr@A0tFar+U_5|(*ta)m=A)I&5XErw&}g|JgEmpARN0Umn-Ga9*kA_o@(jz2P3oMPWM%yz^943Gd8Xpb)y?25BxlcS{6FFPA{4CO z?T5*&FGV{%bo6&8D}Ff6-TL?PY<%7pO@0@|sAd0k`aA6&oBOkQeYT}so(8vFdn>Dd zZ!ZnzzN zK0e4uY`uw6jTLyswzG3^x#5A61<(`k8y452itUx;>zDTKD_waQNY7HwgM%AweilV$ zV#E;k@tCW`p(>9O<8WWo^(=q?_#A=!H@v6E2VeLBgMXQE+5J+aDam?DJoMDJv?D*d z@VcfN8(xXiHgyWNX|}(NugxpXQx37tYKgJ{I@6Sx?yKp4CXQ~>RkTry{zI; zdR6aAeYI3lumJc4tL5$|#QZ*%$^plQn-T7nZ)%!5SP&C0e{0qu)rX0c_D^dKAe<3pr0Tr}evg>ZZTfe_G}Pw-URqXCJP6XOw0 zq$b;7U!%+V)5bw|{0yPe$&`d2JF^lpY?jwSWUj_vNFrD{g4hXfZ%^DU)w?GWqkt-3 zy-Am+$61hUD6s0xL4#5FoxfE${X6L>fg1mZFFjkcbklalYjhKyeJ+G zC!n)rCs~aVz1mEgW4va1G)*=RQV-U~?g9pM1Z|Z4cqxMhZ>jR5 zMCKqyYX6BRYuEL-9Xy$T?@oT<XXe=fJ&*IA+~@_y-MiqqeJ57wUJ*U~5Tgz` zKL@j!9)fzp0+YzB`vWw?T2aw0M_6zv1FA*f`oekd;6uKGsjeE-xCExszWP~*n(IHg zNbho_;{?2~N3KNm-ykuVXD^bBvLln{E%nDL60L(MYL2H7X>C_zas^|bBlDwFIPVF;E-xj zS~sj}c{K1lhWUz>;ZB`b`<#@RlWk4Zd{?IYG8hb)IKolK9iE_?DBUZ+-}g9cDK!o;pV;#17ft|5~xp4N_~XY^J{8k+8#bB26yld*xX-b^->2?`u@& zPCXfq^_J&beCVyU-ie|`cl{P4?TxUYM3{J~)@}>8iRRPO4v`@T@uQR_GcY@-}Yek1;#igN~(9G!n%L_0!G0%L)%7&P#aX6^8`Tgl;k_)C8AfLx%; z)kPsRzh_XU$r}Ta7Fv*9hymY3Yp$-!p6NmdyB40~G1UOYQfB;=#CSCA(xa-q1y^pv z{%jocz1RDWrmbhQz4x^Zg_FV=nC+WHsL)VAW{U<{lfEt?#Aqu7UY%Pw zLB5+)en~}bW35habK{HFif7X{aY^q|ROOQRH~3zioG5f1?|fUsDbz;%n&Ix%|Bms$ z@8(x`OyrjZBoC)&zFex>mrS4BGL2SMfREE)^GKoe1LyW?ExK33%KeeiQE0OM*{*1n z1w&95WTZj83}Hq*;^LIb#Rhe*I6xnTWfH)mCzsb=d{5k$8q#C;9#75Yu{gehq41Elt*P^)tH{@tD^o#|l8WfM2$A;8N_+X2FW_LkObOEG zc&+?y-adac=Yw*<*QDm{=JvOIHichWvnA_t2dgJ{y>p*T-O7VEEy1CgZNQDaGgHd* zTDj$`DH~F$bU`6AAHE!$de-fP;s;gijM*na$AaM}#F z#cxw#B&n~ACVXGoLwsr$MH#9T7`WwoTz3F67h3|Bzbc`UhsOm(+)29p0-p0B0r0C9 z86H%?XYu_lB;=r@fJzia_PqxXzz~o9jE9!)P{VyMCqM}q2PaXfq8mWgQ$!*$wM@i; z-NFAJ9c9dtvo5Vx$2{HMUY#$Em=nZWPfT2dCz2K!a4fB&;A3RRIZP&)8`h}sCRX&@ z6d!+!HP?Jy@SL?-yEJ|yj}$ZLBiVwjyF!L`X|wA_mhZrpc~aqY)r-Hf0jJ3APYQ^Y z?I0LO0ZEpD7|XQhD>6So((W+e<9pnjZ*aSE{Q5Aj{gdl%$dBcTzfpuF}_^yloN<>WwGi)%+iVJw5I{rJnjl_U#qlFXA66RTY|M}R>L zu3pkrnA0F383n~1MBJv4ub}`9L`H&{PMhrIf&*ult&sL$0OddsRgOFa6Vc*_C|rYZ zhCL+0fz28j({;Yc%!BLZmSdL~q+i@WIOy)|ET@Nzgo^xqO_#%5AfTh28!Hq->S~=< zL0FTH#HTwTDAW$L(9JRA^)cqlx`QE%!Ee^Ytdb|sn{rQ@-i)zdL#NLtS>u)G8+udZ zx0K2eET3TsoqnXX-CYuwc;C_SZc% z7K}3S6Y#%fF)h|-y$-cFAa63El|0`et92Ymd!p({J54eph)gyz9HPZlK-?BmJlge` z8k+c|90ukS^erf@f0Y?Y9UoRouieb2{wm@0BE^8P{A>#FpEK`R#c-G*}V^p zqGXHyvC7f9k}T@lFh{~jc(OBHr4mC8vuB7{j9fyrL=D>-xckRPU_!l>iGMda#|o;5 zi@ScZE30~KJy@>WD&&xgVK_@_ML(ZY!M^Q;Sq#MrR%8uk0rhBpTiadA?lR z*-}16)OmZlZw}$ZgLL6Ac&2c7o8C;@@At)FvHZE{R0H&2dLnoVOZ?Z=7) zAtW2zX3?+-s2GxujOa27fcWE&i4UPiu;#GQlKEAutc#3D@bNi%r>W46j+~EJ=H?Cv z&iBFG4T*&B38}H;l{Nuj2e#%Duy}Swk-=EbF1QN;q4CsGu+x%Mw=~yKkxN;9YaC*G zV0bo52AUma{&@5RXa-z9e`WYgm4IzDHM>gkUX(JS!VG0;*UZS)Dp>!@ZfxmpH-XWt z1jq658`f`T;!S@WMIVI_bM_y7u4;+doAEz7nX0eaGi~G{ynFOnNQ^gi)c@!;eRgcu zql6jgy*5gFIsg5gbQhgOF#+}A{_JuGa4jw`flgF%|HG0wsj6O_#-Z2d<^_)Y((YK% z&K;k*&d@tQ8s7P=8hrgW(b1iEYuI7zT}uC`y$GTuOR!Ia1rgoFMTbq6)j#a|tC}H8 zTHDk4YT}HSCU`rP2Jk5+1sX~3^YSq8sKJIF<8LJZstZyKdc{~i7Vto)Du?U^Es*i) z6!d_eGDG@mBgjJF3A+7wP_5X_%VlJUbqvJ;N<&6ODrKVb_C%SK>sIy4wO+{J1i~2j z%T>;HF40o@FmlFkF{7}NBx-Pw!Vr0v$U=SBp)ha=M~hi9Tp;xN(bpn z$ndEi4<6bHrfOn)$|4*dJ&Ia???OMX4(Rq{H(FPh^Tdrcp1*sg&D#&MXR4b0W`FqP z5?bSSWXx2}i;26O%&{haapSCY?5Ce_9}SX-k#wzk^`c`o_X7DY&8#ZHo{fxuxmdbw zJj#T(>kg&Yxr&!0WQjP^rHce=gsz|>tFdt83^Vc*+`i4BUD|c`>Uh7>_-0idvu=P*3uoR zju}$->aC|@UKLuX=o!FMQhiN1{Lx4lGJ2{1eR1E{AaVp3B}nc?M>u3BLR|Z!+J6FY zY*;9o>F3Wu1+3I!-vExStx~8B90VpNP?BA_!J_9Ui;2AYZF$y7o{%FCCdmpN=Vt_@ zW}_^4Dom>C+;-8zS8?SE6|1a=Y;(rHn#%>F{~EV1Tir!8_fdI1oRl`eunW zNG_TjLUSQ+s#*XS1s#ne3SB_ zj#Go^ZMZn9qap)KAV52OV{mybbVXnPAU==zsZf)sj`yqtP6|G(zQS?7teaD@*0L1X zGLY4pU98tH^bl(C*NZ{Q#PoRod(y<&cvnZgnC$tk~Jc|{pQc--AdyEmSE!-cGtGV;C@kb@(Xa_pK&$-|7QhU$g0WFWqW zQkM2#b;z&Ik}65YtP=2E*Uit*Zx~!`I26PjPeoP=`ZceWi#xePLoN1AA?v!?`|yO5 z1N-I%@&?O{0|&cR-&jxvx93c5yZ!@Y>J=MEXw(ebqQ>zLsuoLlUy6HP=EP-2m+Ic? z@yp^H98e(w6%bp=lJw{!EoNAc&l##yEMvyJG=k&jW&O+gqzHnE#$%BFK`U>ps|yJa zPbk#Md%!R4i(N_Cmz=9g(1acyY(K6WVBvhswlyZ73nl@8z=Lozy?$gx3L%eskb%9g zP~m9e#-{RYwt9JGGvV;qf9KD@vvRf91Y8@3!K|ZfoJYq<{TH5onK@jbG+N0oGs_cp z<`h@$o3zH?h_4;aKdO26<>TI}AlL-KzMe>?{@&^?e6Sg`EG*_HwoUpT;*hK|>!haB z{reR7I?58_5F`jmzQ-Hw0+2B+$EAF{o+<(sxTTkeA7)flWX)Qn%?cAxF6H>*P<|p$ z%iV5scg8G#RQqD|!w*q=LJu--?vw3sHZA9KzA^iUM(wjSKC)aaVHU4d@=PlxH(elR z!s>$nK-~dG{IXseatB-E<}@un=ofby-nNgSmb2d?Nu-YDXH+K+#SB6K$B5Iy}2Jl4XoZ% zi2V>0M1ZD!0#!9+dxJSCn#kS9#PTY^dk%I64BwoEq3JlTPUYASSQLlB8Z?{0$p_A2@Wwq#`&v_90LHUh&p`j z!NNwPr9B|ezh5#(DRtIuR0Y7kTf`RN?z!+N?FfG->M&8LlMR&vr1V^)$OC6*Z|{PT zGE5NCiGt-FJ_z08N&?S*uI|s)sK>T@+U z9wLa*HVS2;(J)UX#*Lod_qNkIib_zO)YAyFr!0Z`n7A+<%xBu!9;~C2Y5ZcT4L)LF zAt9K}@;><$2pM%3g4os1aby|x--Krl%+!S#;%#w|MP;{S@{r!8KBdyoC+*GDE|_b% zC@iC~L_!Unc>Kk(AVf8|%QA^5G*+XNf@IHB`jzG4UjAK*H<>bvx$5Ezud9SXZt{`d zn`;Mjj4*nIK@C^>ZE%0aC%o9D{`&QR;1&_}ZKaMd4h^oZNAVgCTJOF!`ul^+od?p2n3#?jIEy`ND>>KO+*^&=9CRjfPOP zU&vt0giMO2X^wWkHu$+wLnWEKa;W#_XjFf7cQQ;8C{&IQZD zf`gwH-v&Yp{%QIH1Ij(nPVlUP$b@RAMOjJ729O>|m2+KSHMYaja-kM3NK?p-d$&fx zEOsxwc-%flC2!pR)T_DO9JKVcH;f>IE5aE1x2MqkppE+4-BvVe-TEEX+`_7>faB9b z*=t;%)1;*Z8N|yR_Mv-)iVDb;t`1R})(#HbL2#?MttYtt=+vty0QTw38yL?KF{V9wrgOL!(CzSt#9Lgfh>;mtFJW9 zZea?6^1;x>77`NhlfL~7p`2TnF514KmB^->hCmd1w#rY`!j3!ORplU-Oj2O1k&}Q2Is1VB2_<^Ku*u z{+;?CHq96K<)P=17OAu0?t_`qdwXT?5RYY=Z$F= z7C9?q)z8sH)qM6@j-RsBG2H$t(y^w7NTG)B0#OT_b*fdJTpIkK23b1Up!|8 zIqDEJk|I6TX{PFf?dpN|IT-2fUH<&!Jh;iWib)5TZgx z8LnVxa776ZJ`ZCVYIzZCqWb3i*U*`#*G%rb6o0mq@Yd|U!pXPmTI2SWrS(IQzT@G%BgQ!7WQXT z)3>+66Ao09_E{e^Oxn>4QRAYK-L|3eRwaFJEBSH^6}`fIV zpP^aJ+gga4=lO0%v+v54W*O9H8N<&RE6jmTsa41-AjMd$r6^-6l)M~jDml>U$ zrg!?b$UsgGfl;s4LB$aiyx0}1whMkgQ5I|n=OiA@N(}@g4cm@wpBk4L<_!Z1vLJ1a zr%)y_NdF^r7zdap_J5N7_={9b*_9cVb%+Aa*l9v z#=PNUtag*LeNNiGtjp_lCOXUpk?OKlQNln*yWU zd;`>jyv8|mn4v`v2&_#5?!P?x07)lqxNRODB3UvtKYnnyBb93d2IG&_aD1AX&X~Oj zgnmmm+1PCVFp)Z?`=wV!&r7(>%aK*cnk`;uzwkG{!Xz{;GjDY8uK%BpT6gKgQKP%O z97ua@4I0BZ#=LhX&-fgD0uP3Ff8O){;$+tROl8N=#>uQH)5PJy$JE0b{j5O>>~W3I zP^|(BVL$t+O75s4!@`C1u4AMO3HKk9^(YIe%`zXf6jjju{?ggm!42kt850-wmoFYS z8Adfx(1Q*rf3@+<#scNWBS9=QE-6ez~cIVlpcPz)TL}K?WcE9^j@727wQoK5V z{+dONnCzW=sl*p2F~lQpZ=DA=K07B~`Grru6LOFW+(X80)4#P`VxU|4;(+l-R@X`w zFsi}@zyc6MBeo8x!X3EugQxE>Q0;Qg>6_1Ri{h2~lkPorO~fZDCP#OL$EP!{ve8@H zbo#U3Mq{D2us2rr`@Ngb-Hq>P)V#8}sw%LmJGQafN`1VR@?(M=cA$OCP$BBeRRvP; z3k^%tW2e1VX{vcg@q;f@=*P%}kS;X*Di;L#~*1U6z~^rNVRBA zes^G;srpU?%Gn9xJ`tgYl0mz0)K;V<<@f2U{@#}}H8`H0sp5JPPr@EE62iWegx#jh zUD_k&BL5TrpOG#z zEbB@YwDbCtp6&0rzZ+xb*FI4OsKA#jTn|)iIeJZ;ot?qYNCCiWp`(+N*O8I!7|Muo zUulw+)i;@q0^5yFu{*OUOGneADT7%bIJj6oI%a;;lDX!dZSas|B>w)9g*=%yDk#mg zaP<2zu13AIFfa33d-FT>!dP031|OnOafs=$$d08IZHNlzRuAa1Y*r-gEqc9-1a{n5CbUkg;S2&d+&YO!dN=JUVzKd)*hZHb|w3qh4ef{9;&fn z35;cs4`30r#{GR7938!Kwu^z9i&8B_1x5Vs3~(bICcyvHm$KT;04ZK`0CKqlehGko zTM?0wt?lf*#tzVV%eys!y;y%dR=^#-{wJf(DnY(Nj1qT4n^wwwg%WNts0vJGEJP7q zEa51^P|c3n9e=J8wI{pz(fjST*TJV7K|!QFK3bTcfd;ECA3fV*o$sd4QP(Rv3|#NC zrG*7NhpanVHJ_`Tj*JE;ny*Muk%T=ReGv;@UtW~WzmY!v2 z@P0v1&G98XV0gG)mg-D!TLVjPD2ugal4-Z$>)Wqc?mQ}u8Og6&d_WXBHXt#Ez_BHcO z+a6uo<|cwNOph}Ol=HzuYQ8=C-3FKKkuvX?oDv}<0(hX!xw?GST=%`~dl&FZO?<9b zQf^l09?nnqZA=s#zfvU-q{iL7!V5E6uVSC3vSV7-Qr4%!Hkz7}^z>M)ciU8+A$g#V z=*Nr~(fj`}_ts%mb=})2N+YEp9nzr!(hX87NOwqxQqtWa-3kKI(hUM4AT1>=ZUN~o z>25d!-{1Rv=Z|xp>zwn~d9LT$D(t=2T64`c=NR|6$9;1nMd~;$9EUF4GTmWYK-v)( zz7)gan7P77d8|w*j{rx~f#q8$H^HEkH})z0FU{M;cfgMAfBc)mGWjWRW&MmkGRVbq zVEg+RgCaa2&X4`kM#snJn>r^mRL)8#33xm7`JHGF{t66ymdVfGOc!w9_=So@S$FW| zJ;si~%8Z{;>Twovm1xB@cK2`zWaS4 z55mXz0l&v&ic}U&8f@FIW_ORTDHQcAZ|}i{|DQ%DG5g(bh%uh^{hLRxKot$TJQI3y z%#$Ec22~+wO{NsEM=67lf{vCJumtrI9iDSd0Q+rMJ_kgWBRQ8CaDf(k@KWa7AnPvQ zgBM7Z@3Wfdx2Hc1Nn|~~QBERECHf9#5EvtSKtDG#DlkD|m@{6|Az?=2?%Lz++HVb& zZxjx_=}@RQdguV2(2yJ1{U$cRrsn*3jcMD!F5ezeX4Eljd$aX#R>YVz-acLdCRh5* zyP0n|1Dn%vhs^EYbMGKksdRB*E8c6K4y9KiXeHTqCp1#;qB0?r&jJVAf0wPtmhhiR zk*M_`{(4ft?10DT-({N+O56R5U}w)S&$eKyFciJ0JIsC-J681uXu+4`-&-w)igmBf z3kY`JX!33R;rV2)t0r6>P0jDNg5=wOyFs$(cwP+Tn}mI$paS30icH-<)8Y@Z2I+Be zfj$J3lp6~R0nu2-oJ+z3kRwZfbkw zg{9^Q`ez@KD(ldDJ-xivP|%*{s6gb+6H9m}R7wIAB?cDl&6AdF`9aIV_#K$SQ&UIZ z;TI5yg#PcDW<8j)Ik{KIO&SNSNX3bK%gGj1P`b^3x{F9FJ~k)n?NCgTibc7+ zMTiCR)g)-#AmVNGIuI{U_U%lsz<;>_aje&PDA9xFH;^2FzBTa!$exLqKfE_MAalLN zoe=Ev@;M`2FVsIC$Ar}jpQqCD1xwlo&^`*wSINQZ)qxhSrZdyy1<=6~@jS+FhpG(p zNCRp8^!V6UU26Wb&Sd7PwRYX<`cBsJS1XGN9~4&HAOWhT&9U}dNSVRdWyABY>SkbA+ppoMPU2Uh@~=sP?qPf+#R=;D zk|$B1W?~#p8{tmb3o(MIfMBXM=IBVBsjbTF>X@ph>MFuvorBS zoq#*8?(VoG9FPx(A2>6s(SyJb<%F=x)^uP0)5@TF*3Rq`UhiH&@b{musJ;l`&L_Gad6?bqLhpJ+@sKKoC7Yp40fngES}^^u&47_saJxHo-SbQZ-i4P;W&G z2+I7vy|))067o^ZM>K5b@Ng56ho|*G~iy2wqO!(9-D;p@)6JljO58`ssnBHCx!PRq%!zq_Z3k%4Y_dQvmpfY8?QqVPW~vgWNj9o+^~J4i`Hw zRIL=Uv`gB7!i6g>P~(w1Rp;MC5Y}c$f&@Bx{DN5|_l3}X#WQ3T*a(QrPOQc>eI6v2 zAuL=yA0KQpUKe>xto&)eV7cuM-A9^esLz(55rqo(4w^p=GqV{;q`?qCvTqm{SXtG+ z6wpRAdyppb>_xTZqhLuV>b=OH-Drz)CvzuHo2yYI&j=f}#0eG##}GcVUd=2Oll_zx`Cio*tWxq#a*DT_w`H^MVMO~Diad#$ zzZJ;*osYk*rBCufrTFc}7Mj@jk~*&wiOulk__+0RNsDI>OSWB3Ruwm=zF~fH?;8^i zYh$7p6T5M6C;lPW)-w~r76XJ$fPpVDZoa6?^zjJ@mZbk~ z5QNj3D-Uu{Sg4TO4i4tOASVor`S=`a93TO{Zw@_EdC2mu9cVN(AyG2pUyn5p*0LX_!pm`ZcIxr*1xy{7!QNjcrF}zM~D=K#V zZlK&&u4L4gF3|w};D^ARW??ah<0>d99OIv#pMP`N67{+C{CK@(f!-r956%amUHMnJV24r=2h?qT7V)|2qv_Wp?_zUP2LOFG~?q|01N~1B;c(rA`{nlov z|5+@XK@$I2-e0Ra+rXFg)PgzZ6T>)_j1kH#caaK*iW{5}@r6`u$H#-*BCvwCwY5Px zeG_a9U|#|%a1lh5Q1Z21y@Q4$;V#%ZFVB(ql`Qi1F;j^~-Rqus2wzhKov?f%EQhX2 z(G;MbT7e%ebj&t4`yr>Mq(BrYia}0Ze|=kL(FsBJ(}WRpr$G1(yo$QI@UaH-@Mvk3 zYB{B7f$rsiu3P=GkBmZ?KRuVr51IMKv$@HP?b|9Qrc`59$i7+OMRk>Qq7OmIqSz&` zFmLTLt1}pv%++xD5G*o6{ZGHHd@ea!!DJhwa5zJE05zPr zZcJ-Vbr5=4pzyKiIvtbn1bvCU2rLI zd-u^=6A^hXAe(x0xY2`+TnSB|b>F_tweIZgtxYwYK?wy!B0)QE0$dHEoEN3_`7oa(vlr$923dDOrgdUpJpur3fm%E73N+_x}j}YVH9-{}f zw1tA-fqJ3gq#%WG2sz(&J2A6G57GK`G=p6K@4~zB>0)?hXv{m_%Ev1ly!Q00zWj++;aacu=EEr${0A31I<@Z}Z6t>B%hPztyWVcl1>6RZ5MrRHo(W2|Doa zL=ez39Nu2|ad-E#2@Y0ByV>X+Hn!tnY2SqE^JX$?Z-PD ziH018y(INtyhYG(-l|}R>8#Jpq@`1%Iie2FTx4#SyCpf=?IqnsIxj*)J3H|OzDta_ zmSHn=z06f_rJVFF)Kyzs@FZ3B5J5qfnfZ%M*6;>v@bFi=qnI&)UpH^d=BfipcYu?6 zQV}}UwuX;|_+o)-@BAlw%jAps*i&)4?a)kf_uu)-&<`5R1z<8r z&ySsxe3#%VZ(&Anj#sJXeJ!cp7!xr){X(wEj$Gpm^{{Yaq-|7*t3r^PXo)J_jIyS} zQ=xkO+7vS|^Y75xA=!4s2XymjYK9lJj_fD7*Kl|hIXA`C!3Uzq@9lb6>EFc ze_ur~gYDDPJAQs3dKOIuo}3F^H7YqSivLIog zRQD^1ucG*(f|ZVcyE`4xO?}4%g-M~WO&>o{oSh{F$dhxXiJ*Q`E-FnC^H@CB{ty*j z_v9#lCFF;`pJhZxaBw)1&z2(pmKe?50ptQp?Q={tgF@B8y{c-Ru`Uxv)#cKZAl4c>!cU3{gK)1kuQGT!A*Z7yn2H}{2=@+|bjbTKd1jV@#V7GKQ_ z^Rc1UB8`UA*~ny&;5_+OhhdI&B?5aF1l=I7hu&=sc^ED(ERBuwxQ#9;BxSH=*?)wBD7U15nWSO?Co!Y&vx9xZx(PCV^X|# z$7qoDi!~7V%l*=+sl+-$3Cw;Xp)U2e2f&s*Gw%;LYy>Hgmn%&r%R2GIkn&MOd_Bam zrr5El{m;KJ-8b<`NRGuZ{F{=#hNgMVz5m1Tm)UtQrFw}aGVkYz1G=ew9 zhifc=l7a#@WUVsCOJQ2tcQN2K1LRE?n-4Ot=r5@~wr}7&wTOA2Uo@QEgceiV=SNih zvUX*?Oyo)96CT;jQHP$p<|5ijN%7{1<}8`<54j#XWas7-B<9xI&lwIFPaI#C?V0*u zb1UJmpVaHyG!{VL#AGm@*wMI+qPweWaG+azo9m=AIa?fSxjnLB#Xu3ho!Y@(LhJn6fW3d=af*9oVs#+||7aNn_mzfIMy<>?9N5+R)8Wg}wy zKP9I<_v8WM^|`h^Zw z6=gK+nH6P6!OJ~r_d|M-)SGT@v#VVOQZn}2_Z*g|PP&+g`<9kfRK7ybF9acQA<{B3 z09K8wD*vgC)vi3Jh*F#pBfLjLLnA17>R&x2=)O)ebL+}tJpN#}*LL^=`e%PyCX2b6jkKaOT+^1*cq*V?#-~PIIy+kdtRk<>mfVyq+E|X~7fuJ#4~7 z&y>Y%p!0w(CWf;{0&;rj&xat{=WL_8EaL{4%QM&xP;uiV9IO=>r2o-^vkT$8!*+@m zsPbK5b3$;d-PFaq>F#F~)H1CL_0D+t+Y%o{Tqf+EK>xQ!sb1F*oFePL(PMts+QN|3 zak8h^*B-vGq;gMvF;3HLa_sQ?t)+DDznCI+2=2K#?&C?b=M=o_U|f!fiK*#bb!@yi z9N%iXx&&JYTdv1$6WoyjC~RFn?$P%mezA>DAOf6>c=we#& zwKkXE_PBMl_QB`|PZ4bZbF8D_3uq!wFz`07(qVZDNdUxBw)Oq0JAd+wk+7rY3>pyzG^e3BglXcMv2%Lc408@0?tnT*qHYmLt z0u#382CMX!*B2w>yv6DJ>w6pS2i0mN(mUnLuc*fxR~uH@x2DP|tF67x2GaI4hJK0% z;J?;_nBbcAYB9u$#R;sqpFfoX@H54!s6MbqClLF{l`-A(eY3Z3d9)DAUi{+hu*Dzk zhu`xb?eYjPi2c!OUG0#w)r>b*WvN~M1kX{>+E;c^Ahn-QKdIu?rEV6Z*jTY@^ryd7 zwU53Q_s)x1YFF7_R=;U%?i=r1jvEDNoN|4w0ET7UQE(EJB0(7dD!;WVli!@6K`IJg zLN78J@1d@W=UadOCr@M)lDI=N$5B9sZ{T@)=@+w>NM)8xJPof)SG89YfqS7lc8JT1 zSIx!d4QM!ToNN+yXRF=NQB(+%5bs^*{=82e*I+j|1@#=gVV9NdtNLRV*SIh&i4a}M zWL_)i@BH?%9jlZZij1E>a|GbeF_Li@g3Z|;P_3l~q4(`NMV;V?qa_C$%rt~Vn^)0b2I2ee73ngu3onq7vwnj#G~F-wk1I$SVc8Pi3) zHjlFEs%<8}9QN#g;byDLdvla`DUu_P=tvVprD-dX%tOGlTB_eLW>ICYohs-AwB1O2 zi3vTR=fLU$X>?`?-)r!#S`_3_L^M#xd znt&SAD$qj(!W0DRdc06T_%|o!a@Ro3^LjWa_{Ei>n<592IYRWfHT9O4-n15$zx}hk z$F9~2^gU0$rSf-SW zjQ8cqvPRKeFi@p_^b$n^Lz(RD+qaPNFg^b$o^f(|ssP3Xc?e|+HS35$RjcWR!$Wy% zpN%H=v|9WokF6={#_6xdYqhSLscL{+#a|$e&RhFYMFEdr1*Qr5|I^T)R4>)gMiHcpR?J{{03wu;R5`SX>ys1mS&Y zWjI(x%k;DlSVUg`o)x}@%6)}KTA5jcRRRN!ais?a0&ZK^iR$>1$L=8i2MqAAWcWA+ zO`BN4s3nz<^ZN15d{^fyPME)}VG?$#x352W{Dhp}cE)3?p&EkQ(%+!k8V?WjO|^jQ zPhJl8n(XB(XTjG=QUOC5SG+c@rPSKI>BY&$s45`UMlF z4R%OdP>A}^2RZ-eThXz>G<7gj8pQc-LQmZ!T&Zlte@^uZsd7}9bu3m0$* z7YeS2Nh0KB4%{BNw0}bjKl<+gW@`Pvc|#3W1A-KThL@a}{Us-;dB8U+W3WnuG=0_? ztpj%=s;S0{XBa0JE@M?$_OErSb2Zt?c&>-LhVd>}V5pT?30XFZq*b z`+a6|UJg^-SSGI5SneY5);4vRAeRfa@8UbA8fuPDD37-P#C%x5z@?hZLa%d%X6WqP z-8tAIIi0RA^FMFTd<=v1NwbVaHTS{UN)}p1M%J`fLhtjXzWLR>@^QC4`EM?H(zggv zVJv8=uTMo-IA1$9k{lBkjY5#phm*{0{ZW6~>qARUF71Y--Ngbu(*Jp@l)lqnTO6-5 zPE*_@XcuVfP^smF<4TFbWq;p0>O{n*P^2ha4{;I90m7;GbPEeJ@SevoxdZS~mEmVG zh^}DjxlHB>5B8zL>$^cHC5@r{^wA^F9aJ_-A^W4r{Oe1RdJOX1|NqG)LAVx}FUvapbQmZ&NGk zQ3wdQdJx=^Fk=prpkZLVLoTO)%Sdqd{!4CJDNK+f69SYER{xr>fcSf#m(y5B3xEGz zu;Qo}IB7i%ZNHG4rB>@LVqXS7 zKS_NL9QB-g&UId}kcAVoH$v>1%x(S_A5~WN<(>(AV<)wMS5ohDZX9(6{*Q+nq+CHl zTiMxQ{AP@9;ME@gkU~gC2F+Q>UBraz_U#Cg$LXT^tRuGP{5JJ1#0F3U;U(ACS1W_0 zuPPCpRF2CSzYRyga_Q?i?-mk~W@(MT^q%X?h(^c1CtQBcy-yKA$;?;&Gnwca$Jp z2JR33=!v4KHcg9_1Fn~DCVdhicMxC95wPaEfKHcO`~z*^@urJUTYWwD-RU&-B-O_?hE@Sk^GDS?$f^~Hj1?>)5Sd-XDuDKbRvk)Uei7uiM zPy?+8Z5rS^Gj%`SKLCN3l-bq8Pq%$JEz+V$goK;X`}O>auqSXHrhYvll^ z4V6Sl58T^K&@%h2icKov${+SU9abLWC$w~3U8FH_2aG9i^-8&IsOnticmEjIpR$I% zm1_^@sG;w{=9lk{$iodf zK{8@>oFCn%C=pBwKO04?lX7$DnbIR8t8%kZ%#!@YxUDCymCZ2hc)}#KNVrUX=HbP$ z?&Jw=8g3ivd%nNAB(6&(2YGd`Qw7q+CV?>)_w%bdOD=eY1)Rt(terS^4U>6cu-MKKoJ%*(UP8hen=N+XAik zx$Ke9k2 z@CmiF^0BJnJw>s;qiN%+3QN*|17SY)#T;TEP|^uW9K z_F%ku`)RL$fNf%{ag{8zC(#w&B8iD4kr>J^A;_w;7%BwGW;VH=Zk;BN>S}$1@|W$P zFGC>)On2Vlfq`p&2AD%cM@Nrv<5bg!EaTY_@Vxym7XXYQK?6%V45z@NhDbYf~M_C zI4%Zy^{j*M#S2s5;!?Fq=Vh75WBvY2b6+ziwl$PMtq_Ei@EMk_L*GVEH(6OMYmH-6 z@0N!`$+w7YyZV<{leo<}&3@hssJYEcE_M+RUdFCo_-?waY4`gr{!~~(vYv3caVjf2 zuK!5?g&-9f8$eVxWqKByTg|e##?X#^ikNEg@$;Q`zW|w{MB!o$h1Bouh}aoJEVWwBgnz3OjQfX=ApQr_pf6P@ zVT}_MC$3kx8W2F-o{z4XutVp06Ei(g+tvw-)_lh!=Lc^_Dy+!m;%%qBYO-@VEeMM= zc#d`pZwxe}bC691&J&Kkr}Nyu%{EjxSV~DlbKYgK_?tyfE$$sYmRiA`gcKn#Nrj`H z52&)}Yur~9f&QH^&S|sf3UYMpMR6Yp_3G<65}Dr({$Rkwd}RW={)BJopZ7%1-|!)I)B8L|3uKH1jHHPJ#1q3x!s?V0Rit4hGbRlu%)Ga>?8cq87y~) zpsQC3;|6Q{Q^fI6)5)$}^G-AJBi*lHP^z!Mq^+%&-2N7yPZ>5waHZvgm?Ufk?lt!H z!mt*f_)Luu=nK0mSzl}h4Cv`$r(PZ)Ad?;cS|hxTRM;JIo1Wp3E5}1!SpC@~gT1E< z)tCBH$vko7Kk=+*+NSxWsTbL<4u$`Cdii~o{(ktIN-YSsp5>4<>|)u}`^l{h*CKL9 zb-ykMnvp>Uob@DH|38x~a2O~|(4J1y=G4>2z#2AGWJfCe(KL;wY2j6Wdgm7nE7bsNS~e^qDOjPpk^HGeF^@B6DDRVatZg?%}X3AWvT2d=5V;AOA( z%^fTzm5Vo{p;<8HFf6wXomB8+(_grgiYxs%BxVE-4RyMvgJE65F#vCnZ{Eb8JN>f( zbD7%Hw+9)I!-Y*>f5Ei!eXOK+U(#UBBXZuEmmDyQTs<5Z*tciEI_1X)7XDOj3n@qL zyR7fhTf`0TCH%1@WM+$!1HK9>4fyhgyG+f_2A7ZK8>D|EDb(z=U=Z{7YZlk5sCX(z z_aNdNKq>kM*iZ|v0i{KLNr_x`s}r#9UQe^p=e8VS z5;AC`qsPZH_Lsu`XizR-Vnlj#fW$#d+9m^n>uk2s6vzuxETF>4gG&0B8YFEe! ziC_U>~=I6q)*U4tro)1I*s0AGOSGlm^yib9%K{D?v4Vw8~UmdN=$C4QK8 z3A-r%oFJ@TM-+(M*(s8WZR^1(u!RcPZI}5P~aETk^c5cT;K*3kn zZcOn*7H}!;gU843!j|}t(ZiGl*32wYF{&b-`}FiiV_#%J0S8BrGLqb(i@gbYc~3T` zB4NSgc{2wY;7zqKHhzA74h~zW2jSC5CqVvu{FB3P2jcaW^bBNX%fAApSDe&@b>LTfGbo_xre_2T~%PFh=*kU;)bWO zKy{FN>??y{64u>gT|r6$#?NjJC4I^1b+$AUFIR1Ni||B$6qRL;%>QZ>xv#-tJ0lRj z*lFOMi0ZwKV~Ng$8X9V}uEohU-%u}VIewU--*BuONp8&fKEC7hKzIj5kkai%P4nht z&F=!q#cm9m3ANImRF|pR<&)*Di(NTXPA|`2`tAjKdrO2ese)gudibV4zm_}vYL(vJ z0iqEb%jrJ2*w~)Hxz?_Y2|&?<&iAq>A<1t*YZf>a*M_*Pw6wJD(3gon0vU|HH>rG< zk>r$5x@;VCw)N!7v_ZAyC_!h`!N8B>ws9fuhgRn;{y5~k3o&103tnf!_b@YyhmB*IjxKkuwFNaxbnfyo+`r$u`dd;kJ2qIMv&PPH;;G3} z#@Ut+r^p4j&kA@*wbtFB(YC5yd$?W~n?Y=eXl4bl7s-421#S2RWtVTLI zYj|SVe$PK*3mq4wtgol*dz4K1T#*}A=CnvEHA)6M^H|uz7oMCzjGj&yXg3dOP(`KN z9A;)#fkvd)I^3yXF@bB3A2p zHav=)cs!BAkFP-QUc=PX0|jM2BHAV;?Gncmt)Q_{5sc80@!rL}&0}J3e0s7A(BE|p z6p*R5HmO~6NL8Y#MDR27+4Nr>T3YhzDWpJE2`if!9=m8U1@DZE2L}DeJKlig2uB3J zSY16^?mIiYII1ktu*xiWTFvzCv5pebFXjztZH{b`_q;S&Xg?>0@^JdyVw>eVPAxbNYJ`X8LPAP^3}7P_h| zhO@=>^?#Qsddtu`EJMCV?bF)`3cL6e&nr##*E%<<=>lqEx}7-4NO`eAJZJJ-te_M4 zOU<$W`cc7SgDM#vPw!CQ4@qbq|bXevcS;J2teM#gK&5Bm)?`Mv}GkeawS5}a$+ z`@t+0M#+u{H!;Sgyc&LLC7N5D&6rvx3t8r5)`|FiSF4j%Zw_DuTw`IC&X7beRG@lEI zMJq+B1lt6JaE&`1#7_$>N`VU4XTl}%fdNnScm@tXKR3r5 z22KXm7DHGxQeCPnxKL@_7%mxy8YjyaC?tVXWB_w3u$dD+e*Ba51TTQu_%BGTz^ws` zBNa2?!_T#a3Z~-z=fgl<{vLp7;JFhxWRYVFs4Xb=dco(vx3;Ex9cqK3Zve9gOhaIt zdx7*LRvsu71FK91!%j7yFc$VYIAJSro+Olb`t%2!>+Q_mBJD~>i4V`5{{AKf2pX~} zW)yJK38wbe%0mEB%Ayt)3O9h;{1@B+U|gRFfjn|CkY6P}xTU3~VJK_B$bk{u()Yky z=cxcRf4#oaw!TaiPtfNb1j{Yps@ciIh(lm10|;qkfqK#Kr^o)V;I{BU=^~1pPeGY5 z0G}^hc4u(a5vn(!D(vL$E~q&Ij9ZAO0b8640t$mOoOgM7x!#NA{!}2XghTB~g+&8g zch)Cr_rmVpuL+x(nYkWLKs1Aac>rW}m*HYC2SpTp4Bz=7$WZY&-@P*g#bTJfdjG=IA zY+S1XnEN>NeB#gLsa4Zd}MrmMw}MI#iL*!3?}R|Ag>JBe;G5Z&xUSu!jzNSPnN%mFLs{_L?$)|Pc@Qi@)QNr{2C$O;s0twrUHM>!!bn0X8sGaYgrWo&2= zPVF+)>3)Wu01N<;se{Fl%U1bi54*Vbd0#wh-+s9Qj2J z0<|pb>DerzUiXW(@~pbUjjf->kLH%b!;Q~ffBpJ#p8-0zz?qQ`RK62dN1~f@%(Y6g zb21P{|EZ3AAPrVbJ#p@{nCbTrQm=0yeXZrXCWP!S36M2Wf9l?!Y)l!&yUK-X){h@< zZq^$PuQkWChi_UAYdxOO<0XIgtR^7fXZ~#*GNndgDk=)m-duSK!M1Ya2(rKgVi9*+ z9#YZ=FS-lWQ}`b{^R~2rvfevLwj%H)KH#JmpGqOPKRHa_a93pS=D3m_I>n{tu{r(C z#iV%dxni3SBNEG%%mA%Z|85Q`bh zNA~$bJ8>dcaPM;}pA=pz3|vOYWk^L+VXXyp!4;gGHH_>w)N)Vr1voIkW}^UeXJ@(J zj0}xBz0he*l~BLYdqZ%ldhN`rD-<)>M{Km-o3gDh8!?!F8{$R-!+T{79X3rneS8!` z9UYOtY6?bo%gN)iAWY_+{gsR3k4|vsd$d@EBg=CC&JQ}R2cX6Z15@aL`3&7>6y0&f zvB{^skgz>e5}i{;m363ao|>e$?~X>@V*uy|(gaTynTqt&c2gb?(a1*2+Wk43>^L%T zQ$TQ+$|zH%?8;7d^c9n?3N>Et{urnOdZ+E|{8PtC9IudO(;Yx5Ltrx)w`VdgVPTb_Nxv=GDv{?8XclxT8w^U9k zj;xVURYqrQxR0Egl20b@UiUj+B(}k|XV2-&!if|4@DjrACi3D`CW=*Av}ZpPKA}g) z+ifQXl?fQmv{bS6=8~5s-v|f0rg7QQFLcJwJZv2T`NEL6<>(E&|cGID{<1De;h5`7sr+&_-H?rMg4C;uv-54;5gUO)#u2yIpRASMb-@s zLOy?*Toj`wXE!pQe4uPP|IVOZ^y?dso7cfzkZvALH)*x8O za@q>YkMdrKiyIn>x3dzW>sl*VJ4fXTc=cU6CvU9p&}oyBUbfII7OG`^3{WeL8fQN{ zbg~%1Qg&CfF8$0p^u17RKFH0Le2ur>Ypb8SKUFj?$^78(NbX$Uo52c zlRCz#YE};RR~~z-7sB(|8C~fk<}6eQ1>Fxp6m|1I{Vv2ywof~n@v$~~2V2KSN)+T2 zesg<|9rsN=Bu8o}j4#uuw3u}FXdK5FYjVfqKi^Z-)%1yp!8gcpK5lY9D$}VJZEtDv zlvZRfn@CA9INTf*fBb=vOnjyvwLOok{7m;92zdB<+)l1@v5XMb#~-Hlgh=-$#1LY1=BozwL7tk zHR{F6a(S8;$o|zOC+jQh9wn=*MN0#`+7F!TF3xz;ZO&hv$jONoXq3_L^_qd;6i&E^ z*WVSJ;B|#Q$-H~Aq1_LA5IwiRA&}zVdCf;xIhjyPcs(H04mGm%L1LXZVbVd@3qAa|QQepYB~^{O(3) zPns@?Dqm(|tM!$|>Y0t$*$>lO(^Pxunvsl^h*e>4LxZnFVaYd#$S0QO*PhI-?7Q1g zQ{UsFYb`MU^zZEM7t8WYL{W&0an}=NI_Bi={-CSB5@m}duQa^z`0;|%r7)AiyVOXz z26sJqYc{qd8EZBP47*#q`<%9k!Fj}*72_MNX&>!9k`HT~$b@&pkCrdKIXqbpHLkL; zc{$KG*>EyGkM7+eKe+ltbT1~lj5=_B)~Z;&?6Q0sH&xi1dopQbaoHdC?&@OfH$>Jz z>n0^71%)Veb*X}oNWct1Kkh%^69o885Kv@Gpkig4zcQWAM7)3Rhc9tHf1K1iE3a#t zI5@)2QG8w-+muI7k3^Gw6xGzw^$Q}Gu*q^{E8D?CqUr~g6^6dNx6$lOYUxNJH&M^Tqf5o*qn~c zT&8zOo_f2B*xBhpZ3MMq{MoaXc1wsYFGKeW|1NIyr4yol9=GSo^X~y3+2YtNTGrr- zX=Vt8v(Tp%$1sJ**XN*NFClCVcE4ga<1$o&sr?89qO%jshuPs2UY4Vvq6P*8Kr40d zzgKirRP6^u5M7IjiBW?W0v;ZaK}J5r#&UrkwZ~>{9ZzwwPGgHE+$0@y5kvt7K5_K;XLI`TTXW$zl)85=g})W=CSI zY^u&<%G}SNsECTa;DE;~IYm)=j?)RP{ib3IrXq2F*AV9}vkI8XAJVVTkT$ zT|>i9?JplC_W|ka-`zt2LcSqX>WHjEXTtKu(PX`Mr7WzzKx6Xrt~4xNPJ3s{D+j6F8sEtgbe&Y=WKTOz^Lg^$q7qh zf|F2*u-T~Efxyk3bj)d$XC@=BKC%&7?2|?9_6tucg$_vxHELM{4STwUz2;m#$sUkR zrBT7EYv0q|*VWOtYO6#D1qj4LHnynyEMb|2h1J#7>FMdCmS43V{O{QSf4jWA1gRP` zZkPbzu5@V%YN!s7+^{$7|B9aWJ}YhViE~=}$z7;sG$njpl2^Oy0W?-&SMl3xX|6(=t&8gLW z_OZ82>RbHRAkUzxe)p+@?C%r>sOB*57h?UfcVMQKR{qQLCR8_0@L+Rg*kd3*a#mg^ zK)qC!=1)bXLq+8c>MUht{G6wYOBLgm>1?j|8ANfPhSedZ@H-l|+)_k#BI9ew(zU_r zG^%Fke1TMtJ!Re%N=P7&u(Sq4-RtBA_G~wIcj%2hJ~=@}L4jW7PoF-4-z}sz|9J)Z zmGJhtt*x!)l4ix)iF>)9Zm20kwm8B=ZCg2iv z(`qar9IQooKlX)GJn?sUR`8}to4UblHtJzAocM{5w#J+FRn>CfRh=x*H3RXmwEqPf z9<|#D<;L4{Py9^RQOj2*_Pg`~0w3-_X%Aa*Bup)9DKeSd77<(L-(B-d*;n%y@XgF0 z{d}AGO&0NMT`u(@KypaC}A;)TzX1ONPn`c zBr43j2SE+y&t^oA_+tuO56|_)0pkAFK19!F=T+K?AhC;^fhO__y$XuR7QYLGMD5oD z|5WZ+L)u;dOIASvbijdMA8)cef;%h}vD)hlFsGo?Uqa1aYX@llEoR(FeM=w~+1%U= zqlsT_SPg$bS*vn%eQoUx2Z@^cqDB^T_x9#wUa{^-n3yNBTxBKopQfuzG@N}jWS=7I z7xndkGcBigv9m?VC)*b2r^-ZbAIf}SP>3`xCteyzKblIm$%d4qaxY9NE+ZR)xp(iqjcdh8$A80;lhmNK7>rTt3(LoyUvXx10T1o9MfLEmMNL( zTX~AEXQ$GQ{36Bn>R3!Wz0c$kz8&&O_hjQ_G4u86HnVK%=ZOtzsMQb5erC!?21Wkp zymLo3BPUhNW3$(M#^7j*_^tpE9|(UdI6H3!;dovggrq3ePes$m# zZDL~L?EH1oI`5dDBI1;a`)U4feC?_4V$`tQQU7gelxS(VCZ;iXZS=Z#9nO}C)} z$&E1pB$xWyIteJA>)+S3U&3Y+aW~`y@X2_2Zpzc4|6IFld1+y0X?ArqxAldU(3Eb2 z5uIFnVPlICBqpWb<5T0PT-Z+53#Reb&#Ym4Oy)CB;@bRv!V;~Jw)1N*`rM;?eycTJCLOGu?5pbgq=wyP;YLlWwrE({;Irb@o#>jUsRE1& zGKn9=dDWZ0H|7#mlX45Fs9F~9AD^C8uTEqQdA&F&l%;YxT$#81I%8F!*Q!!06FGeKmxFtEq9xsD?6dXB*;a=^&AX(S^Yl)tG`_uqy>e5y zVGQ&fp8OC*to3|+1oXGsTF*mLAl$r%hJFf>ZggsBhGZlNL}WiBn25TpsBRINWTBNa z`;#hiYMWy*i}NFI{Kr!^u49s-K)!sUDc?+ou?;cHDU6Tj7e$(-A#g{kY30YOoVY$A zR+D(G+tNKfSAGSGc>MViN-5+za|6oHXgJ$Dpi_tFv*gvxSMs|LG;j!=dwYBL_xBeT z7T_kh!ZT9iS`Gbz@DC7pgudqM)}h zOtPM=0qsuc$jAr=T8M}T35RdA7$aL$5)Vs2k~(YR1+t22OtsDVSGnH=R8yiKtUwTH zYvL=a+4K%oW%Z4JphRe1l$A~$nieV3_cl_t+qyWf=A9don>@0~0kA1h_t z)XYPyVp~J_pkAc0DC=A&0s{6R&iL>l1W_!&)}DIU|FGpD82^F&B>Q@b)3MUrUvxv zV!L$*&{weQm;=xGw$~a(U9bK=G86}#((4U`&Av!PY_EPZLp?z-X~m2XRlc>o)!#JD z=-gF`)Ntg>VtN@VpQDnDJDDMetJvw>{fFNU4sJbEe1w^=wz2sLkFU0RJU%+1@!)R{ zhTSA5r&bkK0%YgIk@Y~dVQ)12!|~O6vH1oXw&5rzR_Ao*&vJ(Z^`7|kOQW+|gCh;| zv7m~Lvog_vzCP4%hwCM(_&IWmM2;^9`rD5A4S&}#D>i&LAc+LL1bpguP=awExpCei zvPD+o%NishBkPXimWOeG?G-Wu7(lQUg~xrz+U|Pyh0Pa!1fh#Y5f2kn=c=R1b9i@c zPEJmHM~6K_s=_kt%=7ccoQdZb7Y~W#J_GLf6cn`JRY~dHzlin!yj)=D>+6H;?lJUi z*y*;${rdG%^!U@kVAgfO*Tnp^HOTYeZaC4-Y92KI_XVX>S5GUvqJL3G+wH5D$Ln$V zmMODiZn)MZ-Fu$8lwvUKj$wgHR%e!~wT%apgkJS6;*iMp9A&!QB8|xQ@YO;8i!)#e zuOi&e?fwogZZUJ19f!cUnI(O7xX@Hj`kH~=)7^Xgs*6@U55bd99K~$KT1}SB<8ZLc z;G4;ux>=WSlLZS;q^&)?{*Y{KxZHv1XevA!uU%f5P?4{4R4+pUwRFKz(80k0W*MXx zvG89^%-rPM#N7Nm0RaL01GY#o@PM+0C2w-BIUzwFB5?z37^Fnq8>S37NFrq_N1+6U zPeMYnPBcffK!lHP$eZlt<%NUhUs$*>2ok@V23|0Y#vd_?q%-mkd0!C2N zRsZ>k<5s`?|MlYvR|Svg|F_50-(ONf0-9m2U;jO}*Nu4I7w)BO0KNl@9;yc(yIo8$ zU?qsvANLQBQ25f_CQ+mEG2ya5US@cQ!d`1EB}g_lrLQ06;> zaH8Hc`KwFt;5nPNoCKN>(XA0evwbQ7>+e44Ub}#1pf~DHf4h3xO<(uWWj^n|?X3c> z6G-@uHYV#{b;X=*H8nxy$ZG7%BNA*VFD%B#yy?@cHKekR7CDH}pVfKmU%STUeU+N- zP0Je(MR~dZ`zLW{2h8|@yaBKO&!5Pwku{b85cI%<(gZXrMhovg1vc{S*B>Vf8XiGW z+;jltxye<+wD#}qDJl%*LsV1{>LBO+>?MSb`|~pms{70hpql`@Bz!(60jMchM%(XN z5NSUBCOt2cNChqO%F&Nj0e=9*4kX(5|(A4JtR#R5f01 z`~=c!C>Pnw34Af%aG5Sf{kFe3zIzySUh-2(PeoP0Ckpjrcwj1b5`iIY+_DNoEL24*P|+JmHo@ z?P`6fNYl(L|9|h1wB2YpL=Uf4R-et^z*8I;A(9^1_(@7*jTt6!vv+GsvE6;aX$z6*-Tq#Q?`ii!k#Xh4Nl(T* zv7@zwo>-se#X)oKfvl*?C)U5_>HwO}I%*O2ZQA-?y&wc@ zn3UQ#WrTe8xAZPOkr|YJuj4-o6t~4>DTsxP>mNgqM!3APKVuCs6WnXtk)yf$M^mh< zK>WtS?eLQ!rnv9Cn*WepM_KOTcNg7N!02U*tgZ9*bil7vek81C(>A>qFRg{EXFx_A zPQp@c$caOV7YZ9)@I--r3I2zyf&ySQZJRzh8lU4rQIw0Z-`$&gdQOJkl~S%Xhurx~ zg#SI(hRfo?K2CTzNV45bOt7$8TTs^)cXoCl8zYAz6g)ZsLMa%t<)eZJqQScATn{d3 z{cGUNoUOr{*aw;0rMizaG{BbFCZ${CNsZwXg6qIOFlqT#N`#g+eTN5GVziiq zH*Z7uG@Gt$Pt2I7vTRuq)3t;o%#sB`#z|a6;d|u@M8T0k8mxy02Qr#` zs;PrkO(x}Io8xvhV1LSr0RQTncP$&^YNT_0FZ%_a>9UDg{-}@3z4z*!p_1Se_pqNx9)a=~NsPR<-%UxGC zkefeHVzL>-=zj|w08tPBl>3^Z#S_=!V8~L`EE`SSFW);{x(u_eeH%l6+TqZk7$4%7 zQZL!!GjkDk%!`aie^2~oH37}++#J*xYEsg~l$6gt=YL=e4n>iCSV>(y6D*<~S}rHy z;X|MQ>J=7O5^jNeg!HDaM!lWyFCw`_hT%gIr1*f(baY&&r#z{kEGXfi5yKIQ57x)4 zr0^Cm(G`7(l8iSzUL02WcApQPdq>X-~;PRye_$p~CzKm;tcq25WSrar+VdQ>O10{45Zy>il(s+j^)+A|iY9 z@pjVlzpi5bi?2ONSfUEBP=>QvKLFVa*ckw7PQw$0Wq6rUz4RC#&f4ngwe|$+33%1P zWeD63i%JSL@T%3?)jf4?L2Qtt(nxBQ3O}9V+Bk?y4*zEr_H`^)zht!6{TJXzUoUE>bB=7Se4g4E4nQ}*8NmE5z!N>xE^fthqgzVWc z0@}VrcFclW`D_<$vBn0=cK7xkgMNQa$(rxAj%Vt4G_PJ0b#}L_6@Z0AgF6HzKVOhn zBf!IO6fD$2PZyD4kZkgF^elifU;FaF>J3`va5;q4!8HSHV2aQZ~_0DUdc$CECF2E|J)UAP8_C-2_919lKRm2?KIMoh4hz8ME$S76$qT&X~wKo&*qdiy@5 zO~!1GGzMUazEfr9p;JXgc;_OFv?Z6^+-AB~XkQ~0Pq zy&z9a3+6J0MPB9ON>_G8Vs1Gi4|%qbu?BvJ`Nr+3@|Bi5rp?~}>Fd7%`oxtKX`w*? zbq`Qd)(CS7uu9>f02JJ)g%i?DpgTD{L_~H0Q0FbaFgO@JXhnh+@O53j zyXjsJ337F8c(Hy9_H|b>*AVv_sew+6$DYDubt@uYH7*6Gl+5maW8s!u^SxRE;p>&ukMr<@{*qBu$HGvXdWi|M%)`1?Zlh}B9ox!RN(%X@E ze10<}O5bR)%ImeEIW-s{e4ra5f6Q=)e_kS2?S)yzcpM9)@-kJHC_8@nqBQbO%3b?-hO{ZOukv663tzX zt@Z1jyh5v>7NvNQWO43hKObe%w0LL^Kpdw@BSqH>cXtOMn!))JcKfOS$=;w5J&?hO z1~Mu#GwCC8Y`@v_!*5=yo0^maO(FC<;6*F+<(~<(RuLanG%WZi@W>)Vu4@dRDm5+q ze@rAb-xL?K$M%33-p#l#V{QFXTMTiEofehQXzzQ_5QOEhUdZ^))gcpT8n5Vcm0j26 z8GC45@TqTdUdPks>}jp_wZ-I{*DT8+(2EeM0+5EqVF0@v8nK96h5g!ZHQ>F)L52XO z0bFjt#=O3!HQ%JBeg_Rah*CvhE)&F>Gt%RDM66NtHOgrrHL80T^Uvw>pF#f1P>&Pz zMITS+gWo^oUi@LPN0*FW&8eYo-WZEiCH88-slaDmI$#cp2iCcXWV|Jq4FRuC#AQRHK#dlj=P?-Q z#staUY=e6of-WFR0it_Kb=eb@>y5Y)djEH052Fm67Cx#b69+yj_}BBa#X%S>t5{gFDm7@5#CHCYeA+XLdH z%k(RyizjjlfzlX5C-&L2#TT5_hMlan6XgBYcZR6{4r+v&>t2bT|J?87?p7(Gn+bT& z+W0h7bRthigj_Y1Y1jwHzlXeY_uKb7A1MReb3yd?xI1cdq8LKsfrUg28r{b{6nknu ze`c(~*%xM%lc_8XY35v~`S(r=$3M4@2i+g0%6`V~@=*AipkAIXa_{Km1~}YlAR0`n z$e!JjxZ!BDSNrFeIsYwwGKl(aN3);B3iKbt1lC~$Fix{s9UOL{aQ1X}%gaK}sz;U! z*fFgy{=W`b15z+LA#lLp7(S7IQ9{=rD%CDl2agqIw0uH(dUTFryo;05l5;&uKx;>b z%*{9eX<#p`1al}i_kV*ZS)`b#=!ti8YASW=ATt(mcN_yQ|FX=ZHLt`jug6t} z2MFF8BP(7CL8G!H2cc#~JeGpxikU)PeC>i|Qa-Bb`g(|UE52|4Dil9k7os`QkWEb? zztxm31j@7k@IV1UfDQ$WMRK}h=@%MbzG#fXjXb&9<_>x~MR#Iw%mTk!=k25)%jMI2 zA^h>tu(K-_5mUH(o6&1Ofz8fO5Bt?<#qh!^%G&4gMiB5o~^oARD!Q1R{ zulf}`cgpO^q!wwjHKcEb%a-bxG`;5i=x(IH!kkG!XIO83FQXc79`USZb+*xYXK}|h zlAHn`L-0fw3-R)0L7L#_*A*dXQ@=qVvtVR2Qcgcv*7ai$Y(Z7IAVuqyaxi$cpVJSa1 zw>sF?BXHo;d+{0?=Md>UEf}%?<(F`f;dbzNDA=U%3q#IHBcQ8#dU|xREJRpRIBFZoLqj@d;t}fCRDAUJToLYO}`>5uks?F5rtI%Y*8wFgo zsl2O2J9%mI^-hEPLFY@7l`|yPLv(*8k}TW_=BWt@W1-c9E0*Q%MWBE8bjjDwFp*-?@{yjK|UdL-&dOtj_o1C*msTU)H>-!%bABF2%W=lv zV|KpFjPcQQYLz=b{2(?oP#5P-)(U)lD5v*d{v0dY7QH&kC}TFR&3eyuSq)nQxvA2bC%`9x*-McAfzHjUa;8K7W+sQy|HKru9-tD>KQ-5#}vdR`|@^EWli3vze6Da2$iiuU%PBxzt(PT zK6v5&OS?w?JR`T?UzQRS2-MLVz5BY4cD@&wwk)y*lyML{1WRK-{BvYd>pUZ{;49)c zl*UOt$;+3XaAea~9gfs@mWb;xnd3P})S~?GP&Z`-9@lxD0?2JI`xq_)8-vqV%X|Zf-Kt%+@ApW&5Lc@PJ&-4kSk)s@NBZXzz}$b4K?$ zTg;;qZ7tG%cMp@0zCDI%X&IV~FP3#~_|yV7d5P~?0|KB{ZVvwqY>?oLfO`zs4Isj0 zPxNyB|EUU2?(XXcr~mSf0Gd40!~X2HiQ@m^e$ZUrJS%pkdvaeJ#LJh5NZTfHr_HAG z*!+%Vij-x{)(>pqx$#Q`Q@~D(Ka03$&N$=p#O&f*73ML=$)A3MN5@shMlh*s;RTg& zOow-Q#0_GQ;dWK&bHI%JPQ?AWmKL$e$Y2njXC_!AeDfS`;OW2esTiy zY@IW9Yw}9Cbqq^9lR<;YQjsdmwjVziX&S)j5nm>IgrSz!uhEwgG>rui@kjP za(!zJSIK$@j>@{rtME(T_V*ZV_l@<@<^iligur#{4n`cX7JBS_T~O^7wphZ zG!Ct{(u9TXZ{lUF{L=oUYtxj%c+}|Ak1dwBBVCC*MN6QYaM!d{L(C`sVDG9X zvPgi-REwPy$x_|DF$|$Qo!KEG4j1c7a>O^oA9NuTt3R~ zNa@~Qw%U8A zJjr`|jDL1}GQ{$9aU74$#$mYlfw!B;f(%B=!FgT9# zJ>yLVP67ZnCMFsGp8!X;M9=~H%N$iW%19yqG!o>9h>kBL`<7*BgDSe-!{~#AHu*uj z`Wj{apR)HsptgbJ5k9!-GQ@p60b_xkKD5Mn`T15)o*0zsBGz_x#6fHd;)q0cJpu>WR;SI;Y}NC^ zFWT$zNq;|Xd}*Eocs_r#|IRvhL0TB9Qv7pK@m`A?3`jh9s{W%t)|SvwvK3-|Q85VU zj93bJQ+8-WB`o=b#g&mf-j9hGqeoa$tL^#SPigh_!XqOx~9lb;Y$~#IZCpwJ*+(`pHYl zaA^kQb7yQIi%-keBjLwgG4adywqwpF7GzSbU^MGGZ8RCkM?+K_KIGd}RVm^t{O>(EF!EvSSj6 zBa`ll-#`n<@j%ITKlML%fBu!9IxTJ9Ukf`C$1Ra<=_Tm-QypF>+k%Ajb-GVq&pIT9 zz^XerIT=vx@~K=8c#l_*B?2qPU*Mx#+u{Di-G*+o%%GE`=Eu*|)sFLHfIHWFS2(WE z#gv@}%zqCnl_v__XhnKDgE6Lv8(!=o195tD%xMh=d}8eRx5fiZVk>yi(EM|tNWi%E z6I5qlkJyL-WQBMp0DIw=RpXiFtD=6+ZfX~FmK$JW#xp(kJbHSAc7>jJ=Lci=)5rC7 zI6jvl%~!DBwwtluYr?fAeD?jKC&L&iW@o|6<*!Moxdt&}KE;3K>-*=W%&t#WX~dMv zM(4avHu~236=G@X-#O1)vS!&*`7!Dv*c&xvgXE)w!063{v#=!T&F+>ov4^IlWGe(c zg33NFDG3uZC10;Z|JwK)hVA7EwY1ju5C)}zjA+f=z1ma(=r167e5$Na6Sd_sRNSY+ zO8|qQvq;;KjZP^Z+{V>*@#Qo{G2v%Kbn!$1Wq<-tI9=^uAYO&(H^GpT*h8wxEh+Tp} z!5S!O;$GcWHN0j>L}&(O-lt@xhDis<<;D$aW+6yLVXtN4PI&D3!9-!E%ACI=W*AmC z2%Pu%IqLLL6an;p!62+P22~=T-8gGX{{8|`fIz3cGG*%b3*=Mqr2>osSo}VnzKvB+ zn*?NC7xij)Fn&`1`$_ElZ0f1XM|}@mZ|=-*zdldA`Z-d+8*aR|tXeOqB^&OAZZ zATFz<&`LHve z@XOrhtk?iIm{=XwH)tI^RMGhicZxVvzq8u)Eq5uj{LO%Tv3Qlq(0pW3Wchn48NDvZ zAL61Zi51W#HqHa0dc zt}?|7zpK_`B9a8K3U=_>C zh_f3#W5Y)s4KWl<6d2`UIfdYp%6$8F-uw4iBcN*q8%Z8G2#EE0u{2TJ$CWXd7=Jif zkz&JIj6b6_v`S*3dE~25LeMs&Ooh{}Q2d~Tv7S&SB>~KE*+6pre=(6$+y9}vf?uuy z!mpMMZ_z{|ELJY>k!>VJQMZjmO<0ua->UnrcS|NkzP)#|#(?8(-h-qJaCU?%Z0_E@ z0wm#L*Nzz4>{jV4lq+YH6G}fJ|EY)B(joAp8{dpu>@YtxvWf}5D zc?~dvYY`-Pg}^QhMql7PFP0V^hL(rnFMRaHr)f?VFSa$JZ?5H@M~zs~Es*)yC~OYT zG4G+7*&1vpmu%m-_1N!}tu&|Z9GLsOsq@88wM_dXk-FpWzpv@*!IQ?Dc zL+zHG?O{@&2HE7Bn~-?my4Bjd>4)_{_shW7=$2m#RD=vXJVd*h4qbf@V$)C=`iF!+ z`5b)2UN8}RVb{LpL9R!TmS%#QI!Gtzm<6jMd3kxEDoTHv6ATK1Iuu>A8;&S~{_&uv zjFP=6RrI7rIyYbxiwqY9xz4DO-H?-6#eWnlur*d9=K;B>I+HYTNxaC8cb2vuLRdW} z42q`*>yT@dSzl;4I7~Q00WUf(bT3S$AKWQuq z<6ZL~KBpC_qxaXN%v6eeJN0Tyk%(!Yg|G$b4N-^|2S{`eH^%@-SI7ps;Wf@=Sfk89 zv?xbOiBtys=mC}4=IEzWfX4qk@!oK$cw7n56DX*RM6E;LsRIH8-3gMD3$-!T)cz8{ z5>b&Dq8TuEGYixW)H6RKu}zfFPUa*I+KJUzD=057z50{Bw0h|2AvzDp2KZnWL8f&g zdqAtr#oApSsu5&N4PI~r-yY4yROSpqu6@4r_4fNbsp1g*s4NCPyI{75dvCvfC8Cc_ z6)-2K29jHAWMH6Ve3mW5{E%^K6v9FSf|t{#YKno=j^w3@raA`tS$gpMh8w%~+4ny^ z^nPC~c@ZBCOMCyO#_r}dcqs{jKN^ei^aOyF|x>%#AK!UG| zm>LpeG+1Ttym=eC;MY@TT<3~wbuVLmDZr!&lBHyCHr@?|X!D8}?mfZSS*(p;tWY~z z)yfq#LG!#SV7vTsW277pHLU5x53d6jWpuGqaGk&>1$;-aruBip;p6If@mvHX_qDM4 zgi8y^BJkSErK~^VQHx&;?8_p#wo^r2y|kS%%w{cRee)caM%3coCs2HV(7On1GjeVd z8rTs~QAMo38~o9+K1_)8zBM~Aupn3A{PavZ528ulax1(OT8g0Z%MK`SWY*A{iH{>Y$z{#O5D9rO~m zDe~FZVrRn|Hb%zmYmvH>6ReMK#$k0;jSRe@x3ZtBAOpqT!xqzu_5yj@Hx>xxrk%Nl z>v9Pr3+tP=Z$H_L<^Vv{(9n=O0^8_6b4?;hg#`Mp!lk;n5)z6`ke^d!)mG-~Q(_wX zz1HbUR7)#s3Q~D4&l!}^Fxof$S`%0nof#4Bn=MP=aK<|FW2s5=hj{PMK%r*K4Y2Xr zu$}D4ZRtti(5Njx z1ELJL7CD&1QB!{h8X_!U8V4Lijyc{5(fU`bB-^qJoQ)R-eT|kbTL1Bb-}___x*SlD z1LQ0%4c`~!P@rLkNP~PHkF;YIB{9G;cONEdplOArkG^_TYer5S$o3G-MRIb@3np&f zy`i3&n1gju6We}qtjN}wmC{Jwno+FD}% zqfHE>sop)&9FflGm+ zV)^bomToCIjb?SVm5UECoXdLg8~5k8Pas}S69+%Gx11e;=pK7We&_oNvI>u{yx#yH zU>)={QBhI-0?!j5;rK8P)k}ncI;d9W_50}tJd@Tn+>2seb#YI}sSjONRpHr`5vngw z-|h;y+5H^Rlv25CmeKFM6Ybr<|CbiZ(8CL{?sMO_+Zoe-)R#Unf_K1BwiEEne&9d9{-$E8(jnC2wY5u=kZvM8X^RRHo%*C7IeE#JyLyFFCvNiK0Yp#i;OCM=H?|c+Uimw|nZy zpr-=S_A?(;zkj}89639O)rg7_WDXcV7)W^SEh3w!L!%8Y78)u0r>q1@Id%`z#PN$s z@q*%SVlmxrE3-EMKilOJ6a3HsyR$}`;f|vgW8ZHr0@P8 zqLeF4Ah3VjovB)fJJv%DU_3bCAaMI$^OT&Ly7;la7s)3So9UkkR++v8fvr9M?FxZC zD?VUzRa8_240P6NxWd782kgCJlZ3?PkME7!iRubIcmBxlgh;r!DEP44cXOoCMGsEy zcE>7siz*Up=V$413i>ocdd$ZsW)zS=lIbUZv{eDTSa9S#cT1Cq1&HB%chPZ=8*nS& znqJSe@$vB~DW32IfJ0C`frCjF$!2<6F{xlk`%8JoWz`dV^~MnSXCm1i7UjI~x8qr+ zhFK-EX?^qai9RvxN3K-(CaJm!?pKFJ2LD6*|S~QMN6i>I%yFKX#s8y6M zA|VBqyT~@^f%t}{DEc^^?wenw$`#5@P8?Vxa0m$J2R+k0|Nnmpk;f>Z|wP5^HXJuktDgbtW-()F$4W=s|SUCuMr z*gY}Xj|5zPLS#yzPMt4pPmKAByr?%8KXn4jEoO{zsNYP1V-hz7$mi!h?x%EbO;pT4 zq{~{rW;RMjkq&mTo(xw{kv32W_V*#G?k|CI-f!5p!4X$fQUadGZ&--o!FtE6$^hL0 z8!6O$$4GF2_Y(^=;Ytpl=!9I)3T(BthBCTe^qrichlNhyVITeBWH~%s_Izbj54#;z zc^@DVpRaD_h6!*P*SXz&_~#JYUo_Ef?qk>XTh17pQRknlMVWj!>mLnRvw=nm);k%Z zFNt9bF$!M(U^WkaKaJP$9DD;EJ?t!)>%$#oTDNsdUd3y%W=(Z)2~uZw4`X<>MF8wIamPhTsDD~o@uN1fjO6ZD z3B^gs!S`cJ#tYHK=^!x)l*KSM4L}Kit=C)wYabQ|sy-<@7covaF8N+R_sJT0-RD3i zbG|@xGrb~Ws{#Ko%)Yl>55!)gq;!`Uz{+yLj}Vr!VR4zU7v2=n;K6qP=}lIw^1Y24 zTt@!J#kz$W$ioMFtx=RVb5!W)?xOFi>ce7P@&x>kckd|O_w@%jVJM1)4&e!Q`3+(6>KgGMY62k>FOfkk4v zfWti41!=rdWIEd_E{Ar10*v&NRYJ-CyZ#qfYOL^`oz12i1Uy9Fycxv`4M;ENHrcv( zSz<~k0#%s?lsSm?9pj&~*dp1lFDLXOXJ^4*4NjGHr9SZHfSc8aPsz&!J@MVUPQcX! zHc5YfKfAX0qWL#YBzy8Cz$Ojs`TxBM>1;=^X&E6B{7tNXgqTgOyy6q zu|70cVII_LDXj_I3Mvsddl)E?bqY14m=m%KD=I4Bd9JJ^rbUI|n(H<21C@???=ZNS z9S_5X&m+zxc7Mg3r*)^Fn=x^jRJS}-4YQ%lSTkFi((LNu6z)%UV17R$itK{M8{C~l z|2ynoKfX|>|Av`mH&?+gcD|G=o$d0Nq8k`AF2W(waoc-)OC7)*op15WG^aqoO8J8d zvsCT#jY)i~dwf*-rHjsO>$g}ieSJM@S|!2%{OXc1>G86x1_IEMNZhn}k|sJ4cZ+?C z_xZ~XJ+Y4=aW2ph$`ox_P}0@{{iE7;E6B?%G^IB&IeB*%FCjJ63mAao`W2SF_o0M+#-0LTU8|85?rg)C~VTpV~EVL=^IPL{l#Jsm?` z=pCVLjH066pst7QoX1mOt^$d6P{MY!{=C2u>*;6;1D3ZA>l&XSDFZp^Bs=&iU`yAb)HNb+or)-jTYkHkYxT{gD%L$Z&h@8E^LiH4-_a@5q_WdcO_##~q zm+Wo5y)g2sWFD7D<5JaM(10)xii1y=n zQ}=(>Dk=fzaZ3lhy#!WvVs_^4KBJ1E?O5)DcY{E02t*l3j}&@g#u8_C<&72M5pv=I z-FMkT_VLn4X(%uxk-)n_oT9T3&?0FR_}AH!eZzL7yfLjxxrkMbr0XFo1QnDo)7*5@aVz~rw55s9EL4LI;L>^d$Y z!Spf{b$Je^pMXGc7zV$>Y78`qz5moqfe4Hq}^L?wv^VC;jbnw5O+lF5;mEwnjohNE50M@kB^Tv3A+>gA>3I_~n6Q zNlRNBOxH5f)1Ot%XozwpJp%3&tdb|;7oq0@=_+Zstj9An9-GD1Jc;2U?V`6=e7SC8 zUq04IFCFgwQOu?rZ}}VN(}1k_-b9)epzEbK* zao3H{$=(II5{N!*BCn;}`)kK%iC!-6<5Ej`nuAE|ykSWMEbHswK&z zdpNTBs5#9lEQ3{3cotw^&m?+>Jfjb~<1N)NL(9x0J_&r!T3e*q{`M>cb#= zWyRSI>y^(G^`!83cp@cw(kMLPK^$q+f?vNgU5$!RkmpF~3C z?tKFB?}I#e#Kb(lqP+L^RXhaYy^ZC=A)cLG{1LkTuq+CP^mSZ7sz6*KB-%CVNFhUH zrXiIjuTgW<7sbXeJ(#3yi)XHu*1+fA%$nMUo1fdX8S0KVP!C{}-PqVrTTuAFxd5Vw zSO%;j9YeSkp+Nw4^;D5|0rc=dVe=sO>~?)r34vtnNuSCd8J8;^j0}k_9hSdw_!L8N zf9v{T+fCxrR+-hC{^If0C+$d8ebjK8oN5rJJO1eo^x zCOzRKipqh;6CXCdqVGlvoB9d-BJi*1R;|0K{ss+IzCd>+Q$8C}41vsm0>f}53W%5i9kVhx)iQ9TwRl5K$2R_gjEQ%rQn+R7M>?em2j=XCy|n`DHKf#78X5ESUesU-8K7KG7xoGU=X{r(0l_yoIhoEXo!zQ7C8aNpiYl_Cd;%j z%VmjVp~E94A;Au$5cjT=WN1}jxrK^~0fD97;=1MXidgfU^z@<~ON&RG#yBaVbFBf3 z`+M`EiFXE=N&L55rD375ZBEhsx;!YT%Yy666fy(W*TK0tySvm!oCd46Vp2DQG~@Qe+BD??TCi z1wP>`^LJpc0EslfwE%|;2p+r7&fag&pX&kV5ui2*+IkKnF_?2gZDR)Slfc&VaSjg4 zizs?)HHzXl{clySd}ml6C51HE?%&WV@J}R9EE1) zr{JNxbLCAwoh><-(e@UoZ6)JOIoxPVQii_9GO(OGLN8Yy9|=B)*q9jkJ8od03BpUd z*s%4rb%>R5Jm<$k(JshQrM|!n4Vb_Y;isk_SnG$NcDE;eVCmebe!Q~~CNtx&?D33n zXZFIpwZJZ9KqKof*XP?bDejwBUDY$S-0w>=#A80qgkIG-uKX;jAA*x|b`A_39n;}ZrfQSN&rkGsv* z)p+oJ21~=z@y4yi9~cFGvMb$-&YBwjRo3RbZ4;!|GR_K~G{JzUQ?K6ytBbe69X%b# zgoQ#M3@U^#Um%*y!rA#Z>==Qie{gW1DH_k@Ud+S`-bpYu%BV(ne3RZu%?Vmuc>D8^YP?oqFJx+U~)@pU23l(DSP7$W5*XoMd``Y z7ad_Oy8D5Kk@ttSfiS5BMm&LR#Mm%)zWCvve}g8f*+)|@uRVqq=6ygol^uC>OZ;mE zT&|?>soN(=_xC*xv5t2;#z?@5wG@Mh4W>sTmnu2prg`3`Rvq8ygvU`}m-uqBb=({rdF_PSq77##za;@3rpRZ_?kU z9rnis88w@244@lnzu36=-urNCrmETRs)V9-ydGEV^P$uwkK0iEz?;?1LR=a4Cl;SF z7&9@85X9IS5okr4Z;Wu+L>dF^Y3U|2!;HmyYD#0Q<4)^zr4fltt~^AJs6rB zd}hD@q33w4`=Y|}B#It85NYx2z;0NZSox*%K=X1tlaFdV8@S3ewcow{>5qNi1Pj+lOP|zs`vHdx2>^lob(< zZ8h9IWg65KI3y9-Cb>Nc8Z@o&r&EiY;Q|)Cqb(AXr83GmYMI?#k)WvIW@netBIcW& zGq(sN1i`}E`g+0p_kdJ&c0(?mmjJM<^R%+9Xb5@$;{X0#1WfFPhljhmy1snDItog! z@9i}muE9QJ_fGM1^ztz1J#dPg#Nv3Cbx=-rWIZt2)PQ_~#_u3u&ml!rNKb*dZ@$#` z1pQ^?nAQ)SJ_1_t$;u+!4AHiUVra8rbM8%fdH(qLd9_3Al)k<`aMZ(x*H=j5GBaC1 z>j6EN+wsxd1ERB$n@So8eU6RIfPVB?OmTV)3?9DVxEpEd`=dW+!@p|TC^Es^PC&4C zDBJ%Q_VgM=;y2{2ei(;ELwz+Y^9|@GBa6NFHS*vEr#*G{w>b$1u2jLVbpdPL2Ljih zQT84-$N)hNY6F(quz~{6C@m=|Od#9#42m{Xx9)y2E?FDaorRvpmv9}#-)7~KPoxv8 z@D@tp4^a~vEh3pL4eDO&hXgoPG?amqkQ=ucl3)!r{SCeZZXo`&q1qg7W5#!eF(7cj z!2`^^b8>URx8q|~6;KxKBj9qC>YcfH%C z@bC;Jt?=S^hf0?_P<+)0+S_3l&%wFRh7mLhuIt`*@3m~l2UAT^&&bF)Ark@OIBRO| zOA&e85~rtEwPCg7g@b=h!c}}AV@O3n-~H-_qoaSlkT_9F{)AnPa$ewDX~v$gTRi;t z`R>Ww|I{oVS;~DQ@qz439rin1-)g)~iZgt)a~zh$G)^pG)&|NcWN)k%Wcq@LD^rK9 z>*@73X8V;1zJ48S?6%D@z-<*`7;d8QMYG{knazv-YgvVl!pgZ-R2UF9nK7O`;o*@~ z1&HWqd-@apojZV$Rar4IAU$~^=z?|Q#>n1rPldS$At@;-{C?FsK3njGt(R8MpD%=07m{}8md5Rahq64PA){hxUtcQi8%3TVqzjp)W3f_ zQwHIeViMAQJFn>slU>BOu^F{HDtq$ck;|rm$#0t7uy&R*xYj`S3{8q*gWEG59fazb zhY|>X;i>}@^#F2d=`0u=e*f0UGnL?Ygkf#HF)mb8ogNp|3u%WQ5vC(1Ib9lGuH>Ikug-;w zG_g0Xl>Hhxtz*Jj+q#X5TrvGKBYTBHg=~vHUdokHba^_1)~?2L=As^8u8CYl8y*S@ z3A*z?QbnEREf!lkL}=n*1*mW{E(_xtcY$3jfKAu8J@8)Kcb`9d7VQ_2cbiXI8k8!f zT1B|H6UV!H-@ZRcR@qEoAr60^lOqi()#^Ue+aGkZZ%@QO1^Ee(K$CbV@P^4sv*gD3 z#B&y6cgT|xL!&Y({C;UQ(&J=`2Qpj_;qYXEV98<9C!R1)`Xod5{+kSySLPA#l<~uK)8ipk9l94Sn|y9(MOIPP%h(WDl& ztsKnH4!8@FI82+}_EC_$KG`>(^cRIM{N0$zP7Qb>y-O5_*S>I5(+~2s|*q!+s$LsXH$Mk6Yu2Q7b)Q>X9s8fl<0IAN^AV33B9h1^>P>wC=hGDx_Z)9R%0DAZTb)-4SY!h3Q z;ZP?fflyV=wn&5d1sD54qM|G=s0c8$SpW*UetaKf`lVOK zaQBAAT@TTd^T(}7b@fu~Vv2cRp-B8#U9J24`7@9>>gvGnikAWp*lR*BvUFFr9v12_ zV6Cn${&}XDM{ys=ug${zwEhoE02!3YOmFtBVC6coUf#nQ?u zqRV0&)Q1lq^aJS?!{()j$Mp2H1|r1o#^bX22=oKP8r$=^)pGjT2VN;jA_De-O$i4Z zckZQp+A*`=e&sGVwzZ6D8=f?*Q1<9H2N$#m0T^y_@{+}_wI*mvIn6f}TG7c_K8Wc!b=2 zGv3s@6vcU3>h)=zf8#XAjlIsR?>;buZcMvNUy-v{KT-giN+)JQ~(68)%FLnj!ryH0uW@b<{08Ch}8k8kl3yYEVu zcH>$PTlABGKZ<5sz

KSF)?FS#8cTn;OmB3HHKQ4@ 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 diff --git a/ITensorGLMakie/test/references/tn.png b/ITensorGLMakie/test/references/tn.png deleted file mode 100644 index 276cc6b9dfdb1407484fcab85ef85507aaad8e89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83749 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 diff --git a/ITensorGLMakie/test/references/tn.txt b/ITensorGLMakie/test/references/tn.txt deleted file mode 100644 index 863ad1c718..0000000000 --- a/ITensorGLMakie/test/references/tn.txt +++ /dev/null @@ -1,22 +0,0 @@ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀tn₅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⡇⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀20⠀⠀⠀⠑⠢⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀20⠊⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀10⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣉tn₄⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠜⠀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠤2⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠀⢀⠔⢹⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀tn₂⣉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⠀2⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⠀⠀⠉⠢⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀10⠔⠁⠀⠀⠀⢸⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀2⊗2⊗2⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠒⢄⡀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⡠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣑tn₃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⢀⣀⣀⣀⣀⡠⠤⠤10⠤⠒⠒⠒⠒⠒⠉⠉⠉⠉⠉⠁⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀tn₁⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀20⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ \ No newline at end of file diff --git a/ITensorGLMakie/test/runtests.jl b/ITensorGLMakie/test/runtests.jl deleted file mode 100644 index 61e7704fca..0000000000 --- a/ITensorGLMakie/test/runtests.jl +++ /dev/null @@ -1,14 +0,0 @@ -using ITensors -using ITensorGLMakie -using Test - -starts_and_ends_with(file, st, en) = startswith(file, st) && endswith(file, en) -starts_and_ends_with(st, en) = file -> starts_and_ends_with(file, st, en) - -test_path = joinpath(@__DIR__) -test_files = filter(starts_and_ends_with("test_", ".jl"), readdir(test_path)) -@testset "ITensorGLMakie.jl" for file in test_files - file_path = joinpath(test_path, file) - println("Running test $(file_path)") - include(file_path) -end diff --git a/ITensorGLMakie/test/test_basics.jl b/ITensorGLMakie/test/test_basics.jl deleted file mode 100644 index 36f639b895..0000000000 --- a/ITensorGLMakie/test/test_basics.jl +++ /dev/null @@ -1,60 +0,0 @@ -using ITensors -using ITensorGLMakie -using ReferenceTests -using Test - -@testset "Basic test for ITensorGLMakie" begin - extension = "png" - - N = 10 - s(n) = Index([QN("Sz", 0) => 1, QN("Sz", 1) => 1]; tags="S=1/2,Site,n=$n") - l(n) = Index([QN("Sz", 0) => 10, QN("Sz", 1) => 10]; tags="Link,l=$n") - h(n) = Index([QN("Sz", 0) => 5, QN("Sz", 1) => 5]; tags="ham,Link,l=$n") - s⃗ = [s(n) for n in 1:N] - l⃗ = [l(n) for n in 1:(N - 1)] - h⃗ = [h(n) for n in 1:(N - 1)] - - # Add some more indices between two of the tensors - x = Index([QN("Sz", 0) => 2]; tags="X") - y = Index([QN("Sz", 0) => 2]; tags="Y") - - n = 2 - ψn1n2 = randomITensor(l⃗[n - 1], s⃗[n], s⃗[n + 1], l⃗[n + 1], dag(x), dag(y)) - hn1 = randomITensor(dag(h⃗[n - 1]), s⃗[n]', dag(s⃗[n]), h⃗[n], x, y) - hn2 = randomITensor(dag(h⃗[n]), s⃗[n + 1]', dag(s⃗[n + 1]), h⃗[n + 1]) - ELn0 = randomITensor(l⃗[n - 1]', h⃗[n - 1], dag(l⃗[n - 1])) - ERn2 = randomITensor(l⃗[n + 1]', dag(h⃗[n + 1]), dag(l⃗[n + 1])) - - tn = [ELn0, ψn1n2, hn1, hn2, ERn2] - - R = @visualize figR ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize figR1 ELn0 * ψn1n2 * hn1 - R2 = @visualize figR2 R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - T = @visualize figT ELn0 - - @test R ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - @test R1 ≈ ELn0 * ψn1n2 * hn1 - @test R2 ≈ ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - @test T == ELn0 - - fig_tn = @visualize_noeval tn - - by = extension == "png" ? psnr_equality(0.5) : isequal - - @test_reference "references/R.$extension" figR by = by - @test_reference "references/R1.$extension" figR1 by = by - @test_reference "references/R2.$extension" figR2 by = by - @test_reference "references/tn.$extension" fig_tn by = by - @test_reference "references/T.$extension" figT by = by - - R = @visualize fig_grid ELn0 * ψn1n2 * hn1 * hn2 * ERn2 - R1 = @visualize! fig_grid[1, 2] ELn0 * ψn1n2 * hn1 - R2 = @visualize! fig_grid[2, 1] R1 * hn2 * ERn2 vertex_labels = ["T1", "T2", "T3"] - @visualize_noeval! fig_grid[2, 2] tn - - # XXX: Broken, passes locally but fails on CI with: - # Warning: test fails because PSNR -0.6602330207824707 < 1 - #@test_reference "references/grid.$extension" fig_grid by=by - - @test_throws DimensionMismatch @visualize fig R1 * hn2 * ERn2 vertex_labels = ["T1", "T2"] -end diff --git a/ITensorGLMakie/test/test_examples.jl b/ITensorGLMakie/test/test_examples.jl deleted file mode 100644 index 8335f08bdc..0000000000 --- a/ITensorGLMakie/test/test_examples.jl +++ /dev/null @@ -1,14 +0,0 @@ -using Test - -@testset "Examples" begin - examples_path = joinpath(@__DIR__, "..", "examples") - example_files = filter(starts_and_ends_with("ex_", ".jl"), readdir(examples_path)) - for file in example_files - file_path = joinpath(examples_path, file) - println("Testing file $(file_path)") - empty!(ARGS) - push!(ARGS, "false") - @test !isnothing(include(file_path)) - empty!(ARGS) - end -end From 2bfc55b4c2d912381c0108e0b79f3622630edc0a Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Wed, 8 May 2024 11:42:11 -0400 Subject: [PATCH 10/10] [ITensors] Bump to v0.5.8 [no ci] --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index c35ae71c53..d8378678ae 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ITensors" uuid = "9136182c-28ba-11e9-034c-db9fb085ebd5" authors = ["Matthew Fishman ", "Miles Stoudenmire "] -version = "0.5.7" +version = "0.5.8" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"