Algorithm Catalog & Compatibility Matrix

View Source

This document maps all algorithms implemented in YogEx and shows their implementation status in Zog, including native performance notes and future roadmap details.


1. Pathfinding

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
DijkstraYog.Pathfinding.DijkstraSingle-source shortest path (non-negative weights)ImplementedNative Zig via Zog.Pathfinding.dijkstra/3.
A*Yog.Pathfinding.AStarHeuristic-guided shortest pathImplementedNative Zig via Zog.Pathfinding.astar/6. Supports Euclidean, Manhattan, and Chebyshev heuristics.
Bellman-FordYog.Pathfinding.BellmanFordShortest path with negative weights, cycle detectionImplementedNative Zig via Zog.Pathfinding.bellman_ford/3.
Floyd-WarshallYog.Pathfinding.FloydWarshallAll-pairs shortest pathsImplementedNative Zig via Zog.Pathfinding.floyd_warshall/1.
Johnson'sYog.Pathfinding.JohnsonAll-pairs shortest paths in sparse graphsImplementedNative Zig via Zog.Pathfinding.johnsons/1.
Bidirectional DijkstraYog.Pathfinding.BidirectionalFaster single-pair shortest pathMissingWIP/Roadmap — planned for a future native pathfinding update.
Bidirectional BFSYog.Pathfinding.BidirectionalUnweighted shortest pathMissingWIP/Roadmap — planned for a future native pathfinding update.
Yen's K-ShortestYog.Pathfinding.Yenk shortest loopless pathsMissingDeferred — low priority, can be implemented if there is demand.
Widest PathYog.PathfindingMaximum bottleneck capacity pathMissingDeferred — low priority.
Unweighted SSSPYog.PathfindingBFS shortest path (no heap)MissingDeliberately Omitted — standard Dijkstra handles this efficiently; separate unweighted SSSP is unneeded.
Brandes SSSPYog.Pathfinding.BrandesSingle-source dependency accumulationMissingOmitted — internally used within Betweenness Centrality, not exposed as a public API.
Chinese PostmanYog.Pathfinding.ChinesePostmanShortest route visiting every edgeMissingDeferred — complex to implement natively; low priority.
LCA (Binary Lifting)Yog.Pathfinding.LCALowest common ancestor in treesMissingDeferred — low priority.
Path UtilitiesYog.Pathfinding.PathPath reconstruction and manipulationMissingOmitted — path reconstruction is handled internally in Zig before returning to Elixir.
Distance MatrixYog.Pathfinding.MatrixMatrix-based distance operationsMissingDeliberately Omitted — flat array conversions are handled at the NIF boundary.
All-Pairs UnweightedYog.PathfindingParallel BFS all-pairs shortest pathsMissingDeferred — Floyd-Warshall and Johnson's are sufficient for now.

2. Flow & Cuts

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Edmonds-KarpYog.Flow.MaxFlowMaximum flow (BFS augmenting paths)ImplementedNative Zig via Zog.Flow.max_flow/4 (default).
Dinic'sYog.Flow.MaxFlowMaximum flow (blocking flow)MissingDeliberately Omitted — Zog implements Push-Relabel instead, which is generally faster.
Push-RelabelN/A (Zog exclusive)High-performance max flow (preflow-push)ImplementedNative Zig via Zog.Flow.max_flow/4 with [algorithm: :push_relabel].
Successive Shortest PathYog.Flow.SuccessiveShortestPathMin-cost max-flowMissingWIP/Roadmap — planned for future network flow releases.
Stoer-WagnerYog.Flow.MinCutGlobal minimum cutImplementedNative Zig via Zog.Flow.global_min_cut/1.

3. Spanning Tree

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Kruskal'sYog.MSTMST via edge sortingImplementedNative Zig via Zog.MST.kruskal/1.
Prim'sYog.MSTMST via vertex growingMissingDeliberately Omitted — Kruskal's is sufficient for MST; Prim's offers no major advantage here.
Borůvka'sYog.MSTParallel MSTMissingWon't Have — Kruskal's is sufficient.
Edmonds'Yog.MSTMinimum Spanning Arborescence (Directed)MissingDeferred — low priority.
Wilson'sYog.MSTUniform Spanning Tree (Probabilistic)MissingWon't Have — outside project scope.
Max Spanning TreeYog.MSTMaximum weight treeMissingDeferred — can be achieved by negating weights and using Kruskal's.

4. Matching

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Hopcroft-KarpYog.MatchingMaximum bipartite matchingMissingWIP/Roadmap — matching algorithms are planned for v0.3.0.
HungarianYog.MatchingWeighted bipartite matchingMissingWIP/Roadmap — planned for v0.3.0.
BlossomYog.MatchingMaximum matching in general graphsMissingWIP/Roadmap — planned for v0.3.0.

5. Connectivity & Components

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Tarjan's SCCYog.ConnectivityStrongly connected componentsImplementedNative Zig via Zog.Connectivity.strongly_connected_components/1.
Kosaraju's SCCYog.ConnectivityStrongly connected components (two-pass)MissingDeliberately Omitted — Tarjan's SCC is faster and already implemented.
Connected ComponentsYog.ConnectivityUndirected connected componentsMissingDeliberately Omitted — can be resolved via SCC on undirected graphs.
Weakly Connected ComponentsYog.Connectivity.ComponentsDirected components ignoring directionMissingDeferred — low priority.
Tarjan's BridgesYog.Connectivity.AnalysisBridge edgesImplementedNative Zig via Zog.Connectivity.analyze/1.
Tarjan's ArticulationYog.Connectivity.AnalysisArticulation pointsImplementedNative Zig via Zog.Connectivity.analyze/1.
K-CoreYog.Connectivity.KCoreCore decompositionImplementedNative Zig via Zog.Connectivity.core_numbers/1 and Zog.Connectivity.detect/2.
Reachability ExactYog.Connectivity.ReachabilityAncestor/descendant countingMissingDeferred — low priority.
Reachability HLLYog.Connectivity.ReachabilityHyperLogLog reachability estimationMissingWon't Have — unneeded, HLL estimation is less critical given native memory limits.

6. Centrality Measures

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Degree CentralityYog.CentralitySimple connectivity importanceMissingDeliberately Omitted — trivial to query directly in Elixir from graph nodes/edges.
Closeness CentralityYog.CentralityDistance-based importanceImplementedNative Zig via Zog.Centrality.closeness_f64/1.
Harmonic CentralityYog.CentralityDistance-based (handles infinite)ImplementedNative Zig via Zog.Centrality.harmonic_centrality_f64/1.
Betweenness CentralityYog.CentralityBridge/gatekeeper detectionImplementedNative Zig via Zog.Centrality.betweenness_unweighted/1 and Zog.Centrality.betweenness_f64/1.
PageRankYog.CentralityLink-quality importanceImplementedNative Zig via Zog.Centrality.pagerank/2.
HITSYog.CentralityHub and authority scoresMissingDeferred — low priority.
Eigenvector CentralityYog.CentralityInfluence from neighborsImplementedNative Zig via Zog.Centrality.eigenvector/2.
Katz CentralityYog.CentralityAttenuated influence propagationImplementedNative Zig via Zog.Centrality.katz/2.
Alpha CentralityYog.CentralityExternal influence modelImplementedNative Zig via Zog.Centrality.alpha_centrality/2.

7. Community Detection

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
LouvainYog.Community.LouvainModularity optimizationImplementedNative Zig via Zog.Community.louvain/2.
LeidenYog.Community.LeidenQuality-guaranteed communitiesImplementedNative Zig via Zog.Community.leiden/2 and Zog.Community.leiden_hierarchical/2.
Label PropagationYog.Community.LabelPropagationVery large graphs, speedImplementedNative Zig via Zog.Community.label_propagation/2.
WalktrapYog.Community.WalktrapRandom-walk communitiesMissingDeferred — low priority.
InfomapYog.Community.InfomapInformation-theoreticMissingDeferred — low priority.
Girvan-NewmanYog.Community.GirvanNewmanHierarchical edge betweennessMissingDeferred — high complexity O(E²V); unfeasible for larger graphs.
Clique PercolationYog.Community.CliquePercolationOverlapping communitiesMissingDeferred — low priority.
Fluid CommunitiesYog.Community.FluidCommunitiesExact k partitionsMissingDeferred — low priority.
Local CommunityYog.Community.LocalCommunitySeed expansionMissingDeferred — low priority.

8. Community Metrics

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
TransitivityYog.Community.MetricsGlobal clustering coefficientMissingDeferred — average clustering coefficient is usually sufficient.
Local Clustering CoefficientYog.CommunityPer-node clustering coefficientImplementedNative Zig via Zog.Metrics.local_clustering_coefficient/1.
Average Clustering CoefficientYog.CommunityGlobal average clusteringImplementedNative Zig via Zog.Metrics.average_clustering_coefficient/1.
Triangle CountYog.CommunityGlobal or per-node trianglesImplementedNative Zig via Zog.Metrics.triangle_count/1.
Community DensityYog.CommunityPer-community edge densityImplementedNative Zig via Zog.Metrics.density/1.
ModularityYog.CommunityPartition quality scoreImplementedNative Zig via Zog.Community.modularity/2.

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
BFSYog.TraversalBreadth-first explorationMissingDeliberately Omitted — BFS traversal is done internally in Zig; not exposed as a public API.
DFSYog.TraversalDepth-first explorationMissingDeliberately Omitted — DFS traversal is done internally in Zig; not exposed as a public API.
Topological SortYog.TraversalDAG vertex orderingMissingWIP/Roadmap — planned for a future DAG-focused release.
Find PathYog.TraversalAny path between nodesMissingDeliberately Omitted — shortest path algorithms (Dijkstra/BFS) handle path finding.
Implicit SearchYog.Traversal.ImplicitOn-demand graph traversalMissingWon't Have — FGL/lazy evaluation concepts do not fit Zog's memory model.
Kahn's AlgorithmYog.Traversal.SortTopological sort (BFS-based)MissingWIP/Roadmap — planned for a future DAG release.
Lexicographical TopSortYog.Traversal.SortDeterministic topological orderingMissingWon't Have — low priority.
Best-First WalkYog.Traversal.WalkPriority-guided traversalMissingWon't Have — low priority.
Random WalkYog.Traversal.WalkStochastic path explorationMissingDeferred — low priority.
BFS PathYog.Traversal.WalkBFS shortest path between nodesMissingDeliberately Omitted — Dijkstra handles shortest paths.

10. Graph Transformations

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
TransposeYog.TransformReverse edge directionsMissingDeliberately Omitted — transpose logic is handled at graph build time.
SubgraphYog.TransformInduced subgraph by node IDsMissingWIP/Roadmap — planned for v0.3.0.
Ego GraphYog.Transformk-hop neighborhood subgraphMissingDeferred — low priority.
Transitive ClosureYog.TransformReachability matrixMissingDeferred — high memory footprint, low priority.
Transitive ReductionYog.TransformMinimal equivalent DAGMissingDeferred — low priority.
Quotient GraphYog.TransformPartition-based contractionMissingWon't Have — low priority.
ContractYog.TransformMerge two nodesMissingDeferred — low priority.
Filter NodesYog.TransformPredicate-based subgraphMissingDeferred — low priority.
Filter EdgesYog.TransformPredicate-based edge removalMissingDeferred — low priority.

11. Graph Properties

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Bipartite CheckYog.Property.Bipartite2-colorability testMissingWIP/Roadmap — planned for v0.3.0.
Bipartite PartitionYog.Property.BipartiteTwo-color assignmentMissingWIP/Roadmap — planned for v0.3.0.
Max Bipartite MatchingYog.Property.BipartiteMaximum matchingMissingWIP/Roadmap — planned for v0.3.0.
Stable MarriageYog.Property.BipartiteGale-Shapley stable matchingMissingWon't Have — outside core graph project scope.
Acyclicity TestYog.Property.CyclicityCycle detectionMissingWIP/Roadmap — planned for a future DAG release.
Eulerian CircuitYog.Property.EulerianEulerian cycle existenceMissingDeferred — low priority.
Eulerian PathYog.Property.EulerianEulerian path existenceMissingDeferred — low priority.
Bron-KerboschYog.Property.CliqueAll maximal cliquesImplementedNative Zig via Zog.Property.all_maximal_cliques/1.
Max CliqueYog.Property.CliqueLargest cliqueImplementedZog.Property.max_clique/1 (filtered from Bron-Kerbosch).
Complete GraphYog.Property.StructureKₙ detectionMissingDeferred — low priority.
Tree CheckYog.Property.StructureTree verificationMissingDeferred — low priority.
Forest CheckYog.Property.StructureDisjoint treesMissingDeferred — low priority.
Branching CheckYog.Property.StructureDirected forestMissingDeferred — low priority.
Planarity TestYog.Property.StructureExact LR-test planarityMissingWon't Have — highly complex; outside core project scope.
Planar EmbeddingYog.Property.StructureCombinatorial embeddingMissingWon't Have — outside core project scope.
Kuratowski WitnessYog.Property.StructureNon-planar subgraphMissingWon't Have — outside core project scope.
Chordality TestYog.Property.StructureChordal graph verificationMissingWon't Have — outside core project scope.
Graph ColoringYog.Property.ColoringGreedy and exact coloringImplementedNative Zig via Zog.Property.coloring_dsatur/1 and Zog.Property.coloring_exact/2.
Tree DecompositionYog.Property.TreeDecompositionValidity check/constructionMissingWon't Have — outside core project scope.
IsomorphismYog.PropertyWeisfeiler-Lehman equalityMissingDeferred — low priority.
Graph HashYog.PropertyStructural fingerprintMissingDeferred — low priority.

12. DAG Algorithms

Note: Dedicated DAG optimizations are planned for future releases. Standard graph pathfinding handles basic cases for now.

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Longest PathYog.DAG.AlgorithmCritical path in weighted DAGMissingDeferred — low priority.
Shortest PathYog.DAG.AlgorithmShortest path in DAGMissingDeliberately Omitted — standard pathfinding handles this.
Transitive ClosureYog.TransformReachability matrixMissingDeferred — low priority.
Transitive ReductionYog.TransformMinimal equivalent DAGMissingDeferred — low priority.
LCAYog.Pathfinding.LCALowest common ancestorsMissingDeferred — low priority.
Topological GenerationsYog.DAGLayer-by-layer orderingMissingDeferred — low priority.
SourcesYog.DAGIn-degree 0 nodesMissingDeferred — low priority.
SinksYog.DAGOut-degree 0 nodesMissingDeferred — low priority.
AncestorsYog.DAGAll ancestors of a nodeMissingDeferred — low priority.
DescendantsYog.DAGAll descendants of a nodeMissingDeferred — low priority.
Single-Source DistancesYog.DAGSSSP in DAGMissingDeliberately Omitted — standard pathfinding handles this.
Path CountYog.DAGNumber of distinct pathsMissingDeferred — low priority.

13. Graph Operations

Note: Standard graph operations are generally left to Elixir to process or build via SoA structures rather than native Zig conversions.

Algorithm / OpYogEx ModulePurposeZog StatusNotes / Details
UnionYog.OperationGraph unionMissingDeliberately Omitted — easily done in Elixir during SoA compilation.
IntersectionYog.OperationGraph intersectionMissingDeliberately Omitted — easily done in Elixir.
DifferenceYog.OperationGraph differenceMissingDeliberately Omitted — easily done in Elixir.
Symmetric DifferenceYog.OperationXOR of graphsMissingDeliberately Omitted — easily done in Elixir.
Cartesian ProductYog.OperationGraph productMissingDeferred — low priority.
Power GraphYog.Operationk-th powerMissingDeferred — low priority.
Line GraphYog.OperationEdge-to-vertex dualMissingDeferred — low priority.
TransposeYog.OperationReverse all edgesMissingDeliberately Omitted — easily done in Elixir/SoA.
IsomorphismYog.OperationGraph equalityMissingDeferred — low priority.
SubgraphYog.OperationInduced subgraphMissingWIP/Roadmap — planned for v0.3.0.
Subgraph CheckYog.OperationSubgraph relationshipMissingDeferred — low priority.
Graph CompositionYog.OperationRelational graph compositionMissingWon't Have — outside project scope.
Graph ComplementYog.OperationInverse edge setMissingDeferred — low priority.
Disjoint UnionYog.OperationUnion with re-indexingMissingDeliberately Omitted — easily done in Elixir.
Map NodesYog.OperationTransform node dataMissingDeliberately Omitted — nodes are arbitrarily labeled in Elixir.
Map EdgesYog.OperationTransform edge weightsMissingDeliberately Omitted — easily mapped in Elixir.
Filter NodesYog.OperationFilter-based node removalMissingDeferred — low priority.
Filter EdgesYog.OperationFilter-based edge removalMissingDeferred — low priority.
Relabel NodesYog.OperationRename node IDsMissingDeliberately Omitted — labels are managed in Elixir.

14. Multigraph

Note: Zog currently only supports simple directed or undirected graphs. Multigraphs are planned for the v0.5.0 release.

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Eulerian CircuitYog.Multi.EulerianHierholzer with edge IDsMissingWIP/Roadmap — planned for v0.5.0.
Eulerian PathYog.Multi.EulerianOpen Eulerian walkMissingWIP/Roadmap — planned for v0.5.0.
BFSYog.Multi.TraversalEdge-ID aware BFSMissingWIP/Roadmap — planned for v0.5.0.
DFSYog.Multi.TraversalEdge-ID aware DFSMissingWIP/Roadmap — planned for v0.5.0.
Fold WalkYog.Multi.TraversalStateful traversalMissingWIP/Roadmap — planned for v0.5.0.
Cycle CheckYog.MultiMultigraph cycle detectionMissingWIP/Roadmap — planned for v0.5.0.
Topological SortYog.MultiMultigraph topological orderingMissingWIP/Roadmap — planned for v0.5.0.
To Simple GraphYog.MultiCollapse parallel edgesMissingWIP/Roadmap — planned for v0.5.0.

15. Health Metrics

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
DiameterYog.HealthLongest shortest pathMissingWIP/Roadmap — planned for a future metrics update.
RadiusYog.HealthMinimum eccentricityMissingWIP/Roadmap — planned for a future metrics update.
EccentricityYog.HealthMax distance from nodeMissingWIP/Roadmap — planned for a future metrics update.
AssortativityYog.HealthDegree correlationImplementedNative Zig via Zog.Metrics.assortativity/1.
APLYog.HealthAverage path lengthMissingWIP/Roadmap — planned for a future metrics update.
Global EfficiencyYog.HealthInverse mean distanceMissingDeferred — low priority.
Local EfficiencyYog.HealthNeighborhood efficiencyMissingDeferred — low priority.

16. Random Graph Generation

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Erdős-Rényi (GNP)Yog.Generator.RandomFixed probability per edgeImplementedNatively generated via Zog.Generator.erdos_renyi/3 (using linear-time Batagelj-Brandes).
Erdős-Rényi (GNM)Yog.Generator.RandomFixed number of edgesMissingDeferred — GNP is sufficient for most random graph generation.
Barabási-AlbertYog.Generator.RandomPreferential attachmentImplementedNatively generated via Zog.Generator.barabasi_albert/3.
Watts-StrogatzYog.Generator.RandomSmall-world networksImplementedNatively generated via Zog.Generator.watts_strogatz/4.
Random TreeYog.Generator.RandomUniform random treeMissingDeferred — low priority.
Random RegularYog.Generator.RandomFixed-degree random graphMissingDeferred — low priority.
SBMYog.Generator.RandomStochastic Block ModelMissingDeferred — low priority.
DCSBMYog.Generator.RandomDegree-Corrected SBMMissingDeferred — low priority.
HSBMYog.Generator.RandomHierarchical SBMMissingDeferred — low priority.
Configuration ModelYog.Generator.RandomGiven degree sequenceMissingDeferred — low priority.
Power Law GraphYog.Generator.RandomScale-free networkMissingDeferred — low priority.
KroneckerYog.Generator.RandomRecursive matrix productMissingWon't Have — outside core scope.
R-MATYog.Generator.RandomRecursive matrix modelMissingWon't Have — outside core scope.
GeometricYog.Generator.RandomDistance-threshold graphMissingDeferred — low priority.
WaxmanYog.Generator.RandomProbabilistic distance graphMissingDeferred — low priority.

17. Classic Graph Generators

GeneratorYogEx ModulePurposeZog StatusNotes / Details
Grid 2DYog.Generator.ClassicRectangular latticeImplementedNatively generated via Zog.Generator.grid_2d/3.
Others (Complete, Cycle, Path, Star, Wheel, Peterson, Crown, Hypercube, Platonic, Friendship, Book, Turán, platonic solids)Yog.Generator.ClassicClassic topology generationMissingDeferred — low priority; grid_2d is the most commonly used. Complete/Cycle/Path are easily constructed via Elixir.

18. Graph Builders

BuilderYogEx ModulePurposeZog StatusNotes / Details
Grid / ToroidalYog.BuilderLattice constructionMissingDeliberately Omitted — unneeded, handled via grid_2d generators.
Labeled / Live BuildersYog.BuilderIncremental buildingMissingOmitted — Zog utilizes the SoA struct for builder patterns.

19. Functional Graphs (FGL-style)

FeatureYogEx ModulePurposeZog StatusNotes / Details
Inductive Decomposition / Context Embedding / AlgorithmsYog.FunctionalInductive functional graph operationsMissingDeliberately Omitted — Zog is built on mutable ArrayGraph/GraphMap representations in native Zig for speed, which are fundamentally incompatible with FGL-style inductive models.

20. Rendering

FormatYogEx ModulePurposeZog StatusNotes / Details
ASCII RenderYog.Render.ASCIITerminal visualizationMissingDeferred — client-side rendering is preferred.
DOT ExportYog.Render.DOTGraphviz DOT formatMissingDeferred — easily implemented in Elixir; low priority.
Mermaid ExportYog.Render.MermaidMermaid.js diagram formatMissingDeferred — easily implemented in Elixir; low priority.

21. Data Structures

StructureYogEx ModulePurposeZog StatusNotes / Details
Pairing HeapYog.PairingHeapPriority queueMissingDeliberately Omitted — Zig's standard std.PriorityQueue is used natively; no need to expose an Elixir heap module.
Disjoint SetYog.DisjointSetUnion-FindMissingDeliberately Omitted — handled internally in native code.
HyperLogLogYog.ConnectivityCardinality estimationMissingWon't Have — unneeded.

22. Maze Generation

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Maze generation (Binary Tree, Sidewinder, backtracker, Hunt-and-Kill, Aldous-Broder, Eller's, division, Kruskal/Prim)Yog.Generator.MazeGraph-based mazesMissingWon't Have — deliberately out of scope for Zog's core graph library.

23. Approximation Algorithms

AlgorithmYogEx ModulePurposeZog StatusNotes / Details
Approximation (Diameter, Betweenness, Avg Path, Efficiency, Transitivity, Clique, Cover)Yog.ApproximateApproximate scaling algorithmsMissingDeferred — Zog runs exact algorithms natively. Approximation might be added in future scalability updates.

24. I/O & Serialization

FormatYogEx ModulePurposeZog StatusNotes / Details
EdgelistYog.IOSpace-separated edgesImplementedSupported via Zog.IO.load/2 and Zog.IO.dump/3.
CSVYog.IOComma-separated edgesImplementedSupported via Zog.IO.load/2 and Zog.IO.dump/3.
PajekYog.IO.net formatImplementedSupported via Zog.IO.dump/3 (writing only).
TGFYog.IOTrivial Graph FormatImplementedSupported via Zog.IO.load/2 and Zog.IO.dump/3.
AdjlistYog.IOAdjacency list formatImplementedSupported via Zog.IO.load/2 and Zog.IO.dump/3.
Lesser-used (GDF, GEXF, GraphML, Graph6, Sparse6, JSON, LEDA, Matrix Market, Libgraph)Yog.IOVarious serialization formatsMissingDeferred — only the most common standard formats are implemented in Zog.