# xio: pretty printing

Defined in `xtensor/io/xio.hpp`

This file defines functions for pretty printing xexpressions. It defines appropriate overloads for the `<<` operator for std::ostreams and xexpressions.

    #include <xtensor/io/xio.hpp>
    #include <xtensor/containers/xarray.hpp>

    int main()
    {
        xt::xarray<double> a = {{1,2,3}, {4,5,6}};
        std::cout << a << std::endl;
        return 0;
    }

Will print

    {{ 1., 2., 3.},
     { 4., 5., 6.}}

With the following functions, the global print options can be set:

inline void xt::print_options::set_line_width(int line_width)

  Sets the line width.

  After line_width chars, a new line is added.

  Parameters:

    line_width – The line width

inline void xt::print_options::set_threshold(int threshold)

  Sets the threshold after which summarization is triggered (default: 1000).

  Parameters:

    threshold – The number of elements in the xexpression that triggers summarization in the output

inline void xt::print_options::set_edge_items(int edge_items)

  Sets the number of edge items.

  If the summarization is triggered, this value defines how many items of each dimension are printed.

  Parameters:

    edge_items – The number of edge items

inline void xt::print_options::set_precision(int precision)

  Sets the precision for printing floating point values.

  Parameters:

    precision – The number of digits for floating point output

On can also locally overwrite the print options with io manipulators:

class line_width

  io manipulator used to set the width of the lines when printing an expression.

      using po = xt::print_options;
      xt::xarray<double> a = {{1, 2, 3}, {4, 5, 6}};
      std::cout << po::line_width(100) << a << std::endl;

class threshold

  io manipulator used to set the threshold after which summarization is triggered.

      using po = xt::print_options;
      xt::xarray<double> a = xt::rand::randn<double>({2000, 500});
      std::cout << po::threshold(50) << a << std::endl;

class edge_items

  io manipulator used to set the number of egde items if the summarization is triggered.

      using po = xt::print_options;
      xt::xarray<double> a = xt::rand::randn<double>({2000, 500});
      std::cout << po::edge_items(5) << a << std::endl;

class precision

  io manipulator used to set the precision of the floating point values when printing an expression.

      using po = xt::print_options;
      xt::xarray<double> a = xt::rand::randn<double>({2000, 500});
      std::cout << po::precision(5) << a << std::endl;