Package: matrepr
MatReprMake every matrix beautiful.MatRepr formats matrices and tensors to HTML, string, and LaTeX, with Jupyter integration.
SeeJupyter notebook for examples.Brief examples:frommatreprimportmdisplay,mprintmprint(A)orto_str(A):<1000×1000, 212345 'float64' elements, coo>
      0       1       2       3       4       5        6       7
  ┌                                                                      ┐
0 │                                 0.3876                           ... │
1 │ 0.5801  0.5085          0.8927                           0.629   ... │
2 │                                                                  ... │
3 │                 0.7142                                           ... │
4 │                                         0.8631                   ... │
5 │ 0.7863  0.1298  0.9918   0.71                            0.3444  ... │
6 │                 0.9481                          0.9609           ... │
7 │                                                 0.09361  0.1679  ... │
8 │                                 0.4023                           ... │
  │   :       :       :       :       :       :        :       :     ... │
  └                                                                      ┘mdisplay(A)orto_html(A):Supports:SciPy- sparse matrices and arrays likecsr_matrixandcoo_arrayNumPy-ndarray(demo)PyTorch- dense and sparsetorch.Tensor(demo)TensorFlow-tf.Tensorandtf.SparseTensor(demo)Python-graphblas-gb.Matrixandgb.Vector(demo)PyData/Sparse-COO,DOK,GCXS(demo)list,tuple, including multi-dimensional and raggedFeatures:Jupyter extension to format matrices in cell outputs.Configurable float precision or format string.Toggle row and column indices or set your own labels.Nested sub-matrices of any supported type, including mixing packages.Toggle matrix description or set your own title.String output can optionally autodetect terminal width.Methods to directly display a matrix (mprint,mdisplayfor Jupyter)Methods to convert to string (to_html,to_latex,to_str).Configurable per method call or set defaults withmatrepr.params.A__repr__monkey patch to format matrices in the Python shell.Fast.Install:pipinstallmatreprorcondainstallmatreprMore ExamplesHTMLmdisplay(A),to_html(A)or simplyAwith Jupyter extension%load_ext matreprLaTeXmdisplay(A, 'latex'),to_latex(A)or simplyAwith Jupyter extension%load_ext matrepr.latexJupyter ExtensionMatRepr's Jupyter extension registers withJupyter's formatterto format supported matrices with MatRepr. Simply:%load_ext matreprOr if you prefer LaTeX:%load_ext matrepr.latexExample:Methodsto_str(A): FormatAas a text string.to_html(A): FormatAas a plain or notebook-styled HTML table. Returns a string.to_latex(A): FormatAas a LaTeX matrix. Returns a string.mprint(A): printAas a string to stdout.mdisplay(A): Displays the output ofto_html,to_latex, orto_strin Jupyter.Note:For Spy plots seeMatSpy.ArgumentsAll methods take the same arguments. Apart from the matrix itself:title: string label. IfTrue, then a matrix description is auto generated that contains matrix shape, number and type of nonzeros, etc.indices: Whether to show matrix indices.max_rows,max_rows: size of table. Matrices larger than this are truncated with ellipses.precision: floating-point precisionnum_after_dots: How many rows/columns to show from the end of the matrix if the entire matrix does not fit.fill_value: Value to fill empty cells.Overriding defaultsmatrepr.paramscontains the default values for all arguments.For example, to always disable the title, disable indices, and only show the top-left part of the matrix:matrepr.params.title=Falsematrepr.params.indices=Falsematrepr.params.num_after_dots=0Interactive Python: Monkey Patching__repr__The interactive Python REPL does not have a nice way to register a formatter.We can monkey patch a__repl__method into supported matrix classes for a similar effect.This is implemented in thematrepr.patchmodule. Simply import the patch you want:import matrepr.patch.scipyimport matrepr.patch.graphblasimport matrepr.patch.sparseExample:>>> a = scipy.sparse.random(4, 4, density=0.5)
>>> a
<4x4 sparse matrix of type '<class 'numpy.float64'>'
	with 8 stored elements in COOrdinate format>
>>> import matrepr.patch.scipy
>>> a
<4×4, 8 'float64' elements, coo>
      0       1        2        3
  ┌                                  ┐
0 │ 0.6536          0.008388  0.6564 │
1 │                                  │
2 │         0.2987   0.8098          │
3 │ 0.1064  0.9613   0.7477          │
  └                                  ┘Edge CasesMatRepr gracefully handles:multiple elements with the same coordinates (i.e. duplicates)nested matricescomplex valuesstring values (including multiline)LaTeX scientific notation as $\times 10^{power}$Seedemo-edgecases notebookfor more.How does it work?Each package that MatRepr supports implements two classes:Driver: Declares what types are supported and supplies an adapter.get_supported_types: This declares what types are supported, as strings to avoid unnecessary imports.adapt(A): Returns aMatrixAdapterfor a matrix that this driver supports.Implement any of theseMatrixAdapterclasses:MatrixAdapterRow: for structs able to efficiently read a selected row.MatrixAdapterCol: for structs able to efficiently read a selected column.MatrixAdapterCoo: for structs able to extract a portion of the matrix as tuples.Seematrepr.adaptersmodule for details.You may usematspy.register_driverto register a Driver for your own matrix class.