fortran-lang / stdlib

Fortran Standard Library
https://stdlib.fortran-lang.org
MIT License
1.09k stars 168 forks source link

Support for I/O of standard formats #763

Open perazz opened 10 months ago

perazz commented 10 months ago

Motivation

As linear algebra support develops, it would be useful to have simple interfaces to access test matrices to/from standard formats into the stdlib formats.

Prior Art

Additional Information

cc #749 cc #486 cc @minhqdao

jalvesz commented 10 months ago

For reference, the SciPy IO API: https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.mmwrite.html#scipy.io.mmwrite the TACO library also offers an API of the sorts for C++ and Python: http://tensor-compiler.org/docs/scientific_computing.html

ivan-pi commented 10 months ago

I've added #486 which is also relevant. I would be keen to have the SciPy .npz format supported, which is also used to pass sparse matrices.

ivan-pi commented 10 months ago

the TACO library also offers an API of the sorts for C++ and Python: http://tensor-compiler.org/docs/scientific_computing.html

The formats supported by TACO are:

ivan-pi commented 10 months ago

There is also a naive text format that MATLAB uses, described under

I've used it in the past, to quickly output a matrix and import it into MATLAB for inspection (spy) and calculating the spectral radius.

jalvesz commented 10 months ago

I've also used the same format locally to then use matplotlib's spy https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.spy.html So basically take whichever sparse format > transform to COO > dump a file <name>.dat

ivan-pi commented 10 months ago

Can we use the MatrixMarket routines from NIST (potentially, wrapped in a nicer interface)? Or should we do a clean-room design and implementation?

jalvesz commented 10 months ago

It could be good to have them for comparison, but it could be the occasion to make a clean-room design. Maybe decided on the style for the signature of IO procedures, this could already enable focusing on individual implementations that should respect the decided signature.

I had in mind something like this:

subroutine matrix_<save/load>_<format>( matrix_type , file_name , ...optionals... )
end subroutine
jvdp1 commented 10 months ago

Can we use the MatrixMarket routines from NIST (potentially, wrapped in a nicer interface)?

If their licenses permit it, I would say yes. It might be good to contact them, before using their codes (e.g., like it was done for the hash and some sort procedures).

perazz commented 10 months ago

I will ask @minhqdao if he plans to take care of this issue.

minhqdao commented 10 months ago

Thanks, @perazz, for opening this issue and all of you for your input and adding the references. I'll take care of it over the next few weeks.