mpi4py
======

.. automodule:: mpi4py
   :synopsis: The MPI for Python package.


Runtime configuration options
-----------------------------

.. data:: mpi4py.rc

   This object has attributes exposing runtime configuration options that
   become effective at import time of the :mod:`~mpi4py.MPI` module.

.. rubric:: Attributes Summary

.. table::
   :widths: grid

   ==============  ========================================================
   `initialize`    Automatic MPI initialization at import
   `threads`       Request initialization with thread support
   `thread_level`  Level of thread support to request
   `finalize`      Automatic MPI finalization at exit
   `fast_reduce`   Use tree-based reductions for objects
   `recv_mprobe`   Use matched probes to receive objects
   `irecv_bufsz`   Default buffer size in bytes for :meth:`~MPI.Comm.irecv`
   `errors`        Error handling policy
   ==============  ========================================================

.. rubric:: Attributes Documentation

.. attribute:: mpi4py.rc.initialize

   Automatic MPI initialization at import.

   :type: :class:`bool`
   :default: :obj:`True`

   .. seealso:: :envvar:`MPI4PY_RC_INITIALIZE`

.. attribute:: mpi4py.rc.threads

   Request initialization with thread support.

   :type: :class:`bool`
   :default: :obj:`True`

   .. seealso:: :envvar:`MPI4PY_RC_THREADS`

.. attribute:: mpi4py.rc.thread_level

   Level of thread support to request.

   :type: :class:`str`
   :default: ``"multiple"``
   :choices: ``"multiple"``, ``"serialized"``, ``"funneled"``, ``"single"``

   .. seealso:: :envvar:`MPI4PY_RC_THREAD_LEVEL`

.. attribute:: mpi4py.rc.finalize

   Automatic MPI finalization at exit.

   If set to :obj:`None`, the value of :attr:`mpi4py.rc.initialize` is used.

   :type: :obj:`None` or :class:`bool`
   :default: :obj:`None`

   .. seealso:: :envvar:`MPI4PY_RC_FINALIZE`

.. attribute:: mpi4py.rc.fast_reduce

   Use tree-based reductions for objects.

   :type: :class:`bool`
   :default: :obj:`True`

   .. seealso:: :envvar:`MPI4PY_RC_FAST_REDUCE`

.. attribute:: mpi4py.rc.recv_mprobe

   Use matched probes to receive objects.

   :type: :class:`bool`
   :default: :obj:`True`

   .. seealso:: :envvar:`MPI4PY_RC_RECV_MPROBE`

.. attribute:: mpi4py.rc.irecv_bufsz

   Default buffer size in bytes for :meth:`~MPI.Comm.irecv`.

   :type: :class:`int`
   :default: ``32768``

   .. seealso:: :envvar:`MPI4PY_RC_IRECV_BUFSZ`
   .. versionadded:: 4.0.0

.. attribute:: mpi4py.rc.errors

   Error handling policy.

   :type: :class:`str`
   :default: ``"exception"``
   :choices: ``"exception"``, ``"default"``, ``"abort"``, ``"fatal"``

   .. seealso:: :envvar:`MPI4PY_RC_ERRORS`


.. rubric:: Example

MPI for Python features automatic initialization and finalization of the MPI
execution environment. By using the `mpi4py.rc` object, MPI initialization and
finalization can be handled programmatically::

  import mpi4py
  mpi4py.rc.initialize = False  # do not initialize MPI automatically
  mpi4py.rc.finalize = False    # do not finalize MPI automatically

  from mpi4py import MPI # import the 'MPI' module

  MPI.Init()      # manual initialization of the MPI environment
  ...             # your finest code here ...
  MPI.Finalize()  # manual finalization of the MPI environment


Environment variables
---------------------

The following environment variables override the corresponding attributes of
the :data:`mpi4py.rc` and :data:`MPI.pickle` objects at import time of the
:mod:`~mpi4py.MPI` module.

.. note::

   For variables of boolean type, accepted values are ``0`` and ``1``
   (interpreted as :obj:`False` and :obj:`True`, respectively), and strings
   specifying a `YAML boolean`_ value (case-insensitive).

   .. _YAML boolean: https://yaml.org/type/bool.html

.. envvar:: MPI4PY_RC_INITIALIZE

  :type: :class:`bool`
  :default: :obj:`True`

  Whether to automatically initialize MPI at import time of the
  :mod:`mpi4py.MPI` module.

  .. seealso:: :attr:`mpi4py.rc.initialize`
  .. versionadded:: 4.0.0

.. envvar:: MPI4PY_RC_FINALIZE

  :type:  :obj:`None` | :class:`bool`
  :default: :obj:`None`
  :choices: :obj:`None`, :obj:`True`, :obj:`False`

  Whether to automatically finalize MPI at exit time of the Python process.

  .. seealso:: :attr:`mpi4py.rc.finalize`
  .. versionadded:: 4.0.0

.. envvar:: MPI4PY_RC_THREADS

  :type: :class:`bool`
  :default: :obj:`True`

  Whether to initialize MPI with thread support.

  .. seealso:: :attr:`mpi4py.rc.threads`
  .. versionadded:: 3.1.0

.. envvar:: MPI4PY_RC_THREAD_LEVEL

  :default: ``"multiple"``
  :choices: ``"single"``, ``"funneled"``,
            ``"serialized"``, ``"multiple"``

  The level of required thread support.

  .. seealso:: :attr:`mpi4py.rc.thread_level`
  .. versionadded:: 3.1.0

.. envvar:: MPI4PY_RC_FAST_REDUCE

  :type: :class:`bool`
  :default: :obj:`True`

  Whether to use tree-based reductions for objects.

  .. seealso:: :attr:`mpi4py.rc.fast_reduce`
  .. versionadded:: 3.1.0

.. envvar:: MPI4PY_RC_RECV_MPROBE

  :type: :class:`bool`
  :default: :obj:`True`

  Whether to use matched probes to receive objects.

  .. seealso:: :attr:`mpi4py.rc.recv_mprobe`

.. envvar:: MPI4PY_RC_IRECV_BUFSZ

  :type: :class:`int`
  :default: ``32768``

  Default buffer size in bytes for :meth:`~MPI.Comm.irecv`.

  .. seealso:: :attr:`mpi4py.rc.irecv_bufsz`
  .. versionadded:: 4.0.0

.. envvar:: MPI4PY_RC_ERRORS

  :default: ``"exception"``
  :choices: ``"exception"``, ``"default"``, ``"abort"``, ``"fatal"``

  Controls default MPI error handling policy.

  .. seealso:: :attr:`mpi4py.rc.errors`
  .. versionadded:: 3.1.0

.. envvar:: MPI4PY_PICKLE_PROTOCOL

  :type: :class:`int`
  :default: :data:`pickle.HIGHEST_PROTOCOL`

  Controls the default pickle protocol to use when communicating Python
  objects.

  .. seealso:: :attr:`~mpi4py.MPI.Pickle.PROTOCOL` attribute of the
               :data:`MPI.pickle` object within the :mod:`~mpi4py.MPI` module.
  .. versionadded:: 3.1.0

.. envvar:: MPI4PY_PICKLE_THRESHOLD

  :type: :class:`int`
  :default: ``262144``

  Controls the default buffer size threshold for switching from in-band to
  out-of-band buffer handling when using pickle protocol version 5 or higher.

  .. seealso:: :attr:`~mpi4py.MPI.Pickle.THRESHOLD` attribute of the
               :data:`MPI.pickle` object within the :mod:`~mpi4py.MPI` module.
  .. versionadded:: 3.1.2


Miscellaneous functions
-----------------------

.. autofunction:: mpi4py.profile

.. autofunction:: mpi4py.get_include

.. autofunction:: mpi4py.get_config


.. Local variables:
.. fill-column: 79
.. End:
