diff --git a/.gitignore b/.gitignore index 2cca9ba..1eaa36e 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,5 @@ tags [._]*.un~ .DS_Store + +.vscode/ diff --git a/src/entropy_calc.jl b/src/entropy_calc.jl index b276284..e9b1807 100644 --- a/src/entropy_calc.jl +++ b/src/entropy_calc.jl @@ -45,7 +45,13 @@ function ee_region( return ee_bipartite(ψ, region[end]; ee_type, verbose, kwargs...) elseif mode == "auto" && (region == collect(region[1]:length(ψ))) verbose && println("Using bipartite calculation for region $region") - return ee_bipartite(ψ, region[1]; ee_type, verbose, kwargs...) + return ee_bipartite(ψ, region[1]-1; ee_type, verbose, kwargs...) + end + + # check if complement of the region is connected + region_C = setdiff(1:length(ψ), region) + if Set(region_C) == Set(minimum(region_C):maximum(region_C)) + region = region_C end ρ = density_matrix_region(ψ, region; mode, verbose, kwargs...) diff --git a/test/test_entropy.jl b/test/test_entropy.jl index c48fec7..0f9977b 100644 --- a/test/test_entropy.jl +++ b/test/test_entropy.jl @@ -42,4 +42,15 @@ seed!(42) end end end + + @testset "Complement region equivalence" begin + s = siteinds(2, 10) + psi = random_mps(s; linkdims=4) + + for i in 1:9 + ee_left = ee_region(psi, 1:i) + ee_right = ee_region(psi, (i + 1):10) + @test ee_left ≈ ee_right + end + end end