Matrix Market (.mtx) format serialization support.
Provides functions to serialize and deserialize graphs in the Matrix Market exchange format, a common format for sharing sparse and dense matrices in scientific computing and graph theory.
Format Overview
Matrix Market files start with a header:
%%MatrixMarket matrix <format> <field> <symmetry>
- Format:
coordinate(sparse) orarray(dense) - Currentlycoordinateis primary. - Field:
real,integer,pattern, orcomplex. - Symmetry:
general,symmetric,skew-symmetric, orhermitian.
For graph representation:
- Rows and Columns represent nodes.
- Matrix indices are 1-based.
- Symmetric matrices are often used for undirected graphs.
Example
iex> graph = Yog.directed()
...> |> Yog.add_node(1, nil)
...> |> Yog.add_node(2, nil)
...> |> Yog.add_edge_ensure(from: 1, to: 2, with: 5.0)
iex>
iex> mtx_string = Yog.IO.MatrixMarket.serialize(graph)
iex> String.contains?(mtx_string, "%%MatrixMarket matrix coordinate real general")
true
iex> String.contains?(mtx_string, "1 2 5.0")
trueDefault Configurations
Default behavior:
- Node data: Ignored during serialization (Matrix Market only stores matrix values)
- Edge weights: Converted to float or integer
Summary
Functions
Returns default Matrix Market serialization options.
Creates Matrix Market options with custom configurations.
Parses a Matrix Market string into a graph.
Parses a Matrix Market string with custom node and edge parsers.
Reads a graph from a Matrix Market file.
Reads a graph from a Matrix Market file with custom parsers.
Serializes a graph to Matrix Market coordinate format.
Serializes a graph to Matrix Market format with custom options.
Writes a graph to a Matrix Market file.
Writes a graph to a Matrix Market file with custom options.
Functions
@spec default_options() :: tuple()
Returns default Matrix Market serialization options.
weight_formatter- Function to convert edge weights to strings (default:&Yog.Utils.to_weight_label/1)edge_formatter:Yog.Utils.safe_string/1node_formatter:Yog.Utils.safe_string/1
Creates Matrix Market options with custom configurations.
Raises ArgumentError if weight_formatter is not an arity-1 function or opts is invalid.
@spec parse(String.t(), atom() | nil) :: {:ok, {:matrix_market_result, Yog.graph(), list()}} | {:error, term()}
Parses a Matrix Market string into a graph.
Raises ArgumentError if input is not a binary string or g_type is invalid.
Time complexity: $\mathcal{O}(V + E)$ where $V$ is node count and $E$ is edge count.
Parameters
input: Matrix Market format stringg_type::directedor:undirected(overrides header symmetry if provided)
Returns
{:ok, {:matrix_market_result, graph, warnings}}on success{:error, reason}on parsing failure
@spec parse_with(String.t(), atom() | nil, (any() -> any()), (any() -> any())) :: {:ok, {:matrix_market_result, Yog.graph(), list()}} | {:error, term()}
Parses a Matrix Market string with custom node and edge parsers.
Raises ArgumentError if input is not a binary string or parsers/g_type are invalid.
Time complexity: $\mathcal{O}(V + E)$ where $V$ is node count and $E$ is edge count.
@spec read(String.t(), atom() | nil) :: {:ok, {:matrix_market_result, Yog.graph(), list()}} | {:error, term()}
Reads a graph from a Matrix Market file.
Raises ArgumentError if path is not a binary string.
@spec read_with(String.t(), atom() | nil, (any() -> any()), (any() -> any())) :: {:ok, {:matrix_market_result, Yog.graph(), list()}} | {:error, term()}
Reads a graph from a Matrix Market file with custom parsers.
Raises ArgumentError if path is not a binary string.
Serializes a graph to Matrix Market coordinate format.
Raises ArgumentError if graph is not a Yog.Graph or Yog.DAG struct.
Time complexity: $\mathcal{O}(V + E)$ where $V$ is node count and $E$ is edge count.
Example
iex> graph = Yog.directed()
...> |> Yog.add_node(1, nil)
...> |> Yog.add_node(2, nil)
...> |> Yog.add_edge_ensure(from: 1, to: 2, with: 1.5)
iex> mtx = Yog.IO.MatrixMarket.serialize(graph)
iex> String.contains?(mtx, "1 2 1.5")
true
Serializes a graph to Matrix Market format with custom options.
Raises ArgumentError if options or graph are invalid.
Time complexity: $\mathcal{O}(V + E)$ where $V$ is node count and $E$ is edge count.
Writes a graph to a Matrix Market file.
Raises ArgumentError if path is not a binary string or graph is invalid.
Writes a graph to a Matrix Market file with custom options.
Raises ArgumentError if path is not a binary string or options/graph are invalid.