[ANN] TypedMatrices.jl v1.2.0 - Package for Numerical Computation: Enhanced Matrix Search, Properties, Group Management, and Usability

Hi everyone,

I’m happy to announce the release of TypedMatrices.jl v1.2.0! :tada:

This version marks a feature-complete and stable milestone, ready for use in research, teaching, and numerical software development.

Overview

TypedMatrices.jl provides a collection of matrix types that integrate seamlessly with Julia’s LinearAlgebra module. Each matrix type is a subtype of AbstractMatrix and is designed to be stored and computed efficiently. This package aims to cater to a variety of use cases: anywhere special matrices with known properties are needed.

For more information, you can check our previous announcement, our GitHub repository, or the package’s documentation.

If you’ve used TypedMatrices.jl in your research, workflows, or teaching, I’d love to hear your feedback and suggestions for future versions!

Getting Started

Try TypedMatrices.jl with the Getting Started guide.

Here is a rundown of the basic features.

  • Browse available test matrices

    julia> matrix_list = list_matrices()
    63-element Vector{Type{<:AbstractMatrix}}:
    Hilbert
    Pei
    Wathen
    Moler
    Golub
    Rohess
    Redheff
    Toeplitz
    Chow
    Cycol
    ⋮
    Ipjfact
    Lehmer
    Companion
    InverseHilbert
    Riemann
    Dramadah
    RIS
    Randjorth
    Smoke
    
  • Generate a given test matrix

    julia> h = Hilbert(5)
    5×5 Hilbert{Rational{Int64}}:
    1    1//2  1//3  1//4  1//5
    1//2  1//3  1//4  1//5  1//6
    1//3  1//4  1//5  1//6  1//7
    1//4  1//5  1//6  1//7  1//8
    1//5  1//6  1//7  1//8  1//9
    
  • List all supported properties

    julia> list_properties()
    37-element Vector{Property}:
    Property(:positive)
    Property(:correlation)
    Property(:random)
    Property(:regprob)
    Property(:sparse)
    Property(:totnonneg)
    Property(:inverse)
    Property(:nilpotent)
    Property(:indefinite)
    Property(:tridiagonal)
    ⋮
    Property(:normal)
    Property(:rectangular)
    Property(:posdef)
    Property(:diagdom)
    Property(:eigen)
    Property(:hessenberg)
    Property(:unimodular)
    Property(:singval)
    Property(:toeplitz)
    
  • List all properties that a test matrix satisfies

    julia> properties(Hilbert)
    6-element Vector{Property}:
    Property(:symmetric)
    Property(:inverse)
    Property(:hankel)
    Property(:illcond)
    Property(:posdef)
    Property(:totpos)
    
  • Run an algorithm on all matrices satisfying a given list of properties

    julia> function sum_elements(A::AbstractMatrix)
            return sum(A)
        end
    sum_elements (generic function with 1 method)
    
    julia> test_algorithm(
            sum_elements,
            [1, 2, 3, 4],
            props=[
                Property(:symmetric), Property(:posdef),
                Property(:eigen), Property(:inverse)
            ],
            ignore_errors=true
        )
    10-element Vector{Any}:
    (Minij, 1, 1)
    (Minij, 2, 5)
    (Minij, 3, 14)
    (Minij, 4, 30)
    (Pascal, 1, 1)
    (Pascal, 2, 5)
    (Pascal, 3, 19)
    (Pascal, 4, 69)
    (Poisson, 1, 4)
    (Poisson, 4, 8)
    
9 Likes