:mod:`fpectl` --- Floating point exception control
==================================================

.. module:: fpectl
   :platform: Unix
   :synopsis: Provide control for floating point exception handling.
.. moduleauthor:: Lee Busby <busby1@llnl.gov>
.. sectionauthor:: Lee Busby <busby1@llnl.gov>


.. note::

   The :mod:`fpectl` module is not built by default, and its usage is discouraged
   and may be dangerous except in the hands of experts.  See also the section
   :ref:`fpectl-limitations` on limitations for more details.

.. index:: single: IEEE-754

Most computers carry out floating point operations in conformance with the
so-called IEEE-754 standard. On any real computer, some floating point
operations produce results that cannot be expressed as a normal floating point
value. For example, try ::

   >>> import math
   >>> math.exp(1000)
   inf
   >>> math.exp(1000) / math.exp(1000)
   nan

(The example above will work on many platforms. DEC Alpha may be one exception.)
"Inf" is a special, non-numeric value in IEEE-754 that stands for "infinity",
and "nan" means "not a number." Note that, other than the non-numeric results,
nothing special happened when you asked Python to carry out those calculations.
That is in fact the default behaviour prescribed in the IEEE-754 standard, and
if it works for you, stop reading now.

In some circumstances, it would be better to raise an exception and stop
processing at the point where the faulty operation was attempted. The
:mod:`fpectl` module is for use in that situation. It provides control over
floating point units from several hardware manufacturers, allowing the user to
turn on the generation of :const:`SIGFPE` whenever any of the IEEE-754
exceptions Division by Zero, Overflow, or Invalid Operation occurs. In tandem
with a pair of wrapper macros that are inserted into the C code comprising your
python system, :const:`SIGFPE` is trapped and converted into the Python
:exc:`FloatingPointError` exception.

The :mod:`fpectl` module defines the following functions and may raise the given
exception:


.. function:: turnon_sigfpe()

   Turn on the generation of :const:`SIGFPE`, and set up an appropriate signal
   handler.


.. function:: turnoff_sigfpe()

   Reset default handling of floating point exceptions.


.. exception:: FloatingPointError

   After :func:`turnon_sigfpe` has been executed, a floating point operation that
   raises one of the IEEE-754 exceptions Division by Zero, Overflow, or Invalid
   operation will in turn raise this standard Python exception.


.. _fpectl-example:

Example
-------

The following example demonstrates how to start up and test operation of the
:mod:`fpectl` module. ::

   >>> import fpectl
   >>> import fpetest
   >>> fpectl.turnon_sigfpe()
   >>> fpetest.test()
   overflow        PASS
   FloatingPointError: Overflow

   div by 0        PASS
   FloatingPointError: Division by zero
     [ more output from test elided ]
   >>> import math
   >>> math.exp(1000)
   Traceback (most recent call last):
     File "<stdin>", line 1, in ?
   FloatingPointError: in math_1


.. _fpectl-limitations:

Limitations and other considerations
------------------------------------

Setting up a given processor to trap IEEE-754 floating point errors currently
requires custom code on a per-architecture basis. You may have to modify
:mod:`fpectl` to control your particular hardware.

Conversion of an IEEE-754 exception to a Python exception requires that the
wrapper macros ``PyFPE_START_PROTECT`` and ``PyFPE_END_PROTECT`` be inserted
into your code in an appropriate fashion.  Python itself has been modified to
support the :mod:`fpectl` module, but many other codes of interest to numerical
analysts have not.

The :mod:`fpectl` module is not thread-safe.


.. seealso::

   Some files in the source distribution may be interesting in learning more about
   how this module operates. The include file :file:`Include/pyfpe.h` discusses the
   implementation of this module at some length. :file:`Modules/fpetestmodule.c`
   gives several examples of use. Many additional examples can be found in
   :file:`Objects/floatobject.c`.

