Skip to content

ITensor/DiagonalArrays.jl

Folders and files

NameName
Last commit message
Last commit date
Apr 10, 2025
Nov 27, 2024
Mar 27, 2025
Mar 27, 2025
Mar 7, 2025
Apr 11, 2025
Nov 27, 2024
Nov 27, 2024
Apr 14, 2025
Mar 27, 2025
Apr 11, 2025
Mar 27, 2025

Repository files navigation

DiagonalArrays.jl

Stable Dev Build Status Coverage Code Style: Blue Aqua

A n-dimensional diagonal array type in Julia.

Support

Flatiron Center for Computational Quantum Physics logo.

DiagonalArrays.jl is supported by the Flatiron Institute, a division of the Simons Foundation.

Installation instructions

This package resides in the ITensor/ITensorRegistry local registry. In order to install, simply add that registry through your package manager. This step is only required once.

julia> using Pkg: Pkg

julia> Pkg.Registry.add(url="https://github.com/ITensor/ITensorRegistry")

or:

julia> Pkg.Registry.add(url="git@github.com:ITensor/ITensorRegistry.git")

if you want to use SSH credentials, which can make it so you don't have to enter your Github ursername and password when registering packages.

Then, the package can be added as usual through the package manager:

julia> Pkg.add("DiagonalArrays")

Examples

using DiagonalArrays:
  DiagonalArray, DiagonalMatrix, DiagIndex, DiagIndices, diaglength, isdiagindex
using Test: @test

function main()
  d = DiagonalMatrix([1.0, 2.0, 3.0])
  @test eltype(d) == Float64
  @test diaglength(d) == 3
  @test size(d) == (3, 3)
  @test d[1, 1] == 1
  @test d[2, 2] == 2
  @test d[3, 3] == 3
  @test d[1, 2] == 0

  d = DiagonalArray([1.0, 2.0, 3.0], 3, 4, 5)
  @test eltype(d) == Float64
  @test diaglength(d) == 3
  @test d[1, 1, 1] == 1
  @test d[2, 2, 2] == 2
  @test d[3, 3, 3] == 3
  @test d[1, 2, 1] == 0

  d[2, 2, 2] = 22
  @test d[2, 2, 2] == 22

  d_r = reshape(d, 3, 20)
  @test size(d_r) == (3, 20)
  @test all(I -> d_r[I] == d[I], LinearIndices(d))

  @test length(d[DiagIndices(:)]) == 3
  @test Array(d) == d
  @test d[DiagIndex(2)] == d[2, 2, 2]

  d[DiagIndex(2)] = 222
  @test d[2, 2, 2] == 222

  a = randn(3, 4, 5)
  new_diag = randn(3)
  a[DiagIndices(:)] = new_diag
  d[DiagIndices(:)] = a[DiagIndices(:)]

  @test a[DiagIndices(:)] == new_diag
  @test d[DiagIndices(:)] == new_diag

  permuted_d = permutedims(d, (3, 2, 1))
  @test permuted_d isa DiagonalArray
  @test permuted_d[DiagIndices(:)] == d[DiagIndices(:)]
  @test size(d) == (3, 4, 5)
  @test size(permuted_d) == (5, 4, 3)
  for I in eachindex(d)
    if !isdiagindex(d, I)
      @test iszero(d[I])
    else
      @test !iszero(d[I])
    end
  end

  mapped_d = map(x -> 2x, d)
  @test mapped_d isa DiagonalArray
  @test mapped_d == map(x -> 2x, Array(d))

  return nothing
end

main()

This page was generated using Literate.jl.