Codebase list eagerpy / 1d03deef-e9d6-4994-81d8-32d1c8c6d413/v0.23.0
1d03deef-e9d6-4994-81d8-32d1c8c6d413/v0.23.0

Tree @1d03deef-e9d6-4994-81d8-32d1c8c6d413/v0.23.0 (Download .tar.gz)

.. image:: https://badge.fury.io/py/eagerpy.svg
    :target: https://badge.fury.io/py/eagerpy

.. image:: https://codecov.io/gh/jonasrauber/eagerpy/branch/master/graph/badge.svg
  :target: https://codecov.io/gh/jonasrauber/eagerpy

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/ambv/black


=======
EagerPy
=======

EagerPy is a thin wrapper around **PyTorch**, **TensorFlow Eager**, **JAX** and
**NumPy** that unifies their interface and thus allows writing code that
works natively across all of them.

Learn more about in the `documentation <https://jonasrauber.github.io/eagerpy/>`_.

**EagerPy is now in active use** to develop `Foolbox Native <https://github.com/jonasrauber/foolbox-native>`_.

Installation
------------

.. code-block:: bash

   pip install eagerpy


Example
-------

.. code-block:: python

   import eagerpy as ep

   import torch
   x = torch.tensor([1., 2., 3.])
   x = ep.PyTorchTensor(x)

   import tensorflow as tf
   x = tf.constant([1., 2., 3.])
   x = ep.TensorFlowTensor(x)

   import jax.numpy as np
   x = np.array([1., 2., 3.])
   x = ep.JAXTensor(x)

   import numpy as np
   x = np.array([1., 2., 3.])
   x = ep.NumPyTensor(x)

   # In all cases, the resulting EagerPy tensor provides the same
   # interface. This makes it possible to write code that works natively
   # independent of the underlying framework.

   # EagerPy tensors provide a lot of functionality through methods, e.g.
   x.sum()
   x.sqrt()
   x.clip(0, 1)

   # but EagerPy also provides them as functions, e.g.
   ep.sum(x)
   ep.sqrt(x)
   ep.clip(x, 0, 1)
   ep.uniform(x, (3, 3), low=-1., high=1.)  # x is needed to infer the framework


Compatibility
-------------

We currently test with the following versions:

* PyTorch 1.3.1
* TensorFlow 2.0.0
* JAX 0.1.57
* NumPy 1.18.1