# `Yog.IO.MatrixMarket`
[🔗](https://github.com/code-shoily/yog_ex/blob/v0.97.0/lib/yog/io/matrix_market.ex#L1)

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) or `array` (dense) - Currently `coordinate` is primary.
- **Field**: `real`, `integer`, `pattern`, or `complex`.
- **Symmetry**: `general`, `symmetric`, `skew-symmetric`, or `hermitian`.

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")
    true

## Default Configurations

Default behavior:
- Node data: Ignored during serialization (Matrix Market only stores matrix values)
- Edge weights: Converted to float or integer

# `default_options`

Returns default Matrix Market serialization options.

- `weight_formatter` - Function to convert edge weights to strings (default: `&Yog.Utils.safe_string/1`)
- `edge_formatter`: `Yog.Utils.safe_string/1`
- `node_formatter`: `Yog.Utils.safe_string/1`

# `options_with`

Creates Matrix Market options with custom configurations.

# `parse`

Parses a Matrix Market string into a graph.

**Time Complexity:** O(V + E)

## Parameters

- `input`: Matrix Market format string
- `g_type`: `:directed` or `:undirected` (overrides symmetry if needed, but usually respects it)

## Returns

- `{:ok, {:matrix_market_result, graph, warnings}}` on success
- `{:error, reason}` on parsing failure

# `parse_with`

Parses a Matrix Market string with custom parsers.

# `read`

Reads a graph from a Matrix Market file.

# `read_with`

Reads a graph from a Matrix Market file with custom parsers.

# `serialize`

Serializes a graph to Matrix Market coordinate format.

**Time Complexity:** O(V + E)

## 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

# `serialize_with`

Serializes a graph to Matrix Market format with custom options.

# `write`

Writes a graph to a Matrix Market file.

# `write_with`

Writes a graph to a Matrix Market file with custom options.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
