Source code for coffee.backend.backend

#!/usr/bin/env python
# encoding: utf-8

"""
Methods that wrap common computations.
"""

[docs] class Backend: def __init__(self): self.backend_name = None self.backend = None
[docs] def set_backend(self, backend_name="numpy"): self.backend_name = backend_name self.backend = self.get_backend(backend_name) # Set constants self.pi = self.backend.pi # Return backend instance return self.backend
[docs] def get_backend(self, backend_name): """ Returns an instance of the specified backend class. This function creates and returns an instance of the backend class specified by the `backend_name` argument. Currently supported backends are "numpy" and others can be added as needed. Args: backend_name (str, optional): The name of the backend for which an instance is to be created. Defaults to "numpy". Raises: ValueError: If the specified `backend_name` is not supported. Returns: object: An instance of the specified backend class. """ backends = { "numpy": NumpyBackend, # Add other backends here as needed } if backend_name not in backends: raise ValueError(f"Unsupported backend: {backend_name}") return backends[backend_name]()
[docs] def abs(self, *args, **kwargs): return self.backend.abs(*args, **kwargs)
[docs] def absolute(self, *args, **kwargs): return self.backend.absolute(*args, **kwargs)
[docs] def any(self, *args, **kwargs): return self.backend.any(*args, **kwargs)
[docs] def apply_along_axis(self, *args, **kwargs): return self.backend.apply_along_axis(*args, **kwargs)
[docs] def apply_over_axes(self, *args, **kwargs): return self.backend.apply_over_axes(*args, **kwargs)
[docs] def arange(self, *args, **kwargs): return self.backend.arange(*args, **kwargs)
[docs] def around(self, *args, **kwargs): return self.backend.around(*args, **kwargs)
[docs] def array(self, *args, **kwargs): return self.backend.array(*args, **kwargs)
[docs] def array_equal(self, *args, **kwargs): return self.backend.array_equal(*args, **kwargs)
[docs] def asarray(self, *args, **kwargs): return self.backend.asarray(*args, **kwargs)
[docs] def atleast_1d(self, *args, **kwargs): return self.backend.atleast_1d(*args, **kwargs)
[docs] def atleast_2d(self, *args, **kwargs): return self.backend.atleast_2d(*args, **kwargs)
[docs] def convolve(self, *args, **kwargs): return self.backend.convolve(*args, **kwargs)
[docs] def copy(self, *args, **kwargs): return self.backend.copy(*args, **kwargs)
[docs] def cos(self, *args, **kwargs): return self.backend.cos(*args, **kwargs)
[docs] def diag(self, *args, **kwargs): return self.backend.diag(*args, **kwargs)
[docs] def dot(self, *args, **kwargs): return self.backend.dot(*args, **kwargs)
[docs] def dtype(self, *args, **kwargs): return self.backend.dtype(*args, **kwargs)
[docs] def empty(self, *args, **kwargs): return self.backend.empty(*args, **kwargs)
[docs] def empty_like(self, *args, **kwargs): return self.backend.empty_like(*args, **kwargs)
[docs] def exp(self, *args, **kwargs): return self.backend.exp(*args, **kwargs)
[docs] def fromiter(self, *args, **kwargs): return self.backend.fromiter(*args, **kwargs)
[docs] def lib_stride_tricks_as_strided(self, *args, **kwargs): return self.backend.lib_stride_tricks_as_strided(*args, **kwargs)
[docs] def linspace(self, *args, **kwargs): return self.backend.linspace(*args, **kwargs)
[docs] def log(self, *args, **kwargs): return self.backend.log(*args, **kwargs)
[docs] def log2(self, *args, **kwargs): return self.backend.log2(*args, **kwargs)
[docs] def mat(self, *args, **kwargs): return self.backend.mat(*args, **kwargs)
[docs] def max(self, *args, **kwargs): return self.backend.max(*args, **kwargs)
[docs] def meshgrid(self, *args, **kwargs): return self.backend.meshgrid(*args, **kwargs)
[docs] def min(self, *args, **kwargs): return self.backend.min(*args, **kwargs)
[docs] def ndarray(self, *args, **kwargs): return self.backend.ndarray(*args, **kwargs)
[docs] def nonzero(self, *args, **kwargs): return self.backend.nonzero(*args, **kwargs)
[docs] def ones(self, *args, **kwargs): return self.backend.ones(*args, **kwargs)
[docs] def ones_like(self, *args, **kwargs): return self.backend.ones_like(*args, **kwargs)
[docs] def power(self, *args, **kwargs): return self.backend.power(*args, **kwargs)
[docs] def real(self, *args, **kwargs): return self.backend.real(*args, **kwargs)
[docs] def reshape(self, *args, **kwargs): return self.backend.reshape(*args, **kwargs)
[docs] def savetxt(self, *args, **kwargs): return self.backend.savetxt(*args, **kwargs)
[docs] def set_printoptions(self, *args, **kwargs): return self.backend.set_printoptions(*args, **kwargs)
[docs] def sin(self, *args, **kwargs): return self.backend.sin(*args, **kwargs)
[docs] def sqrt(self, *args, **kwargs): return self.backend.sqrt(*args, **kwargs)
[docs] def squeeze(self, *args, **kwargs): return self.backend.squeeze(*args, **kwargs)
[docs] def sum(self, *args, **kwargs): return self.backend.sum(*args, **kwargs)
[docs] def tan(self, *args, **kwargs): return self.backend.tan(*args, **kwargs)
[docs] def union1d(self, *args, **kwargs): return self.backend.union1d(*args, **kwargs)
[docs] def vectorize(self, *args, **kwargs): return self.backend.vectorize(*args, **kwargs)
[docs] def where(self, *args, **kwargs): return self.backend.where(*args, **kwargs)
[docs] def zeros(self, *args, **kwargs): return self.backend.zeros(*args, **kwargs)
[docs] def zeros_like(self, *args, **kwargs): return self.backend.zeros_like(*args, **kwargs)
[docs] class BackendBase: def __init__(self): pass
# ################################################################################ # # NumPy implementation # ################################################################################
[docs] class NumpyBackend(BackendBase): def __init__(self): # print("Initialising Numpy Backend") try: import numpy as np except ImportError: raise ImportError( "NumPy library is not installed. Please install NumPy to use this function." ) self.np = np # Constants self.pi = np.pi # Datatypes self.float64 = np.float64 self.complex128 = np.complex128 # Array class self.ndarray = np.ndarray # Misc self.index_exp = np.index_exp
[docs] def abs(self, *args, **kwargs): return self.np.abs(*args, **kwargs)
[docs] def absolute(self, *args, **kwargs): return self.np.absolute(*args, **kwargs)
[docs] def any(self, *args, **kwargs): return self.np.any(*args, **kwargs)
[docs] def apply_along_axis(self, *args, **kwargs): return self.np.apply_along_axis(*args, **kwargs)
[docs] def apply_over_axes(self, *args, **kwargs): return self.np.apply_over_axes(*args, **kwargs)
[docs] def arange(self, *args, **kwargs): return self.np.arange(*args, **kwargs)
[docs] def around(self, *args, **kwargs): return self.np.around(*args, **kwargs)
[docs] def array(self, *args, **kwargs): return self.np.array(*args, **kwargs)
[docs] def array_equal(self, *args, **kwargs): return self.np.array_equal(*args, **kwargs)
[docs] def asarray(self, *args, **kwargs): return self.np.asarray(*args, **kwargs)
[docs] def atleast_1d(self, *args, **kwargs): return self.np.atleast_1d(*args, **kwargs)
[docs] def atleast_2d(self, *args, **kwargs): return self.np.atleast_2d(*args, **kwargs)
[docs] def convolve(self, *args, **kwargs): return self.np.convolve(*args, **kwargs)
[docs] def copy(self, *args, **kwargs): return self.np.copy(*args, **kwargs)
[docs] def cos(self, *args, **kwargs): return self.np.cos(*args, **kwargs)
[docs] def diag(self, *args, **kwargs): return self.np.diag(*args, **kwargs)
[docs] def dot(self, *args, **kwargs): return self.np.dot(*args, **kwargs)
[docs] def dtype(self, *args, **kwargs): return self.np.dtype(*args, **kwargs)
[docs] def empty(self, *args, **kwargs): return self.np.empty(*args, **kwargs)
[docs] def empty_like(self, *args, **kwargs): return self.np.empty_like(*args, **kwargs)
[docs] def exp(self, *args, **kwargs): return self.np.exp(*args, **kwargs)
[docs] def fromiter(self, *args, **kwargs): return self.np.fromiter(*args, **kwargs)
def lib_stride_tricks_as_strided(self, *args, **kwargs): return self.np.lib_stride_tricks_as_strided(*args, **kwargs)
[docs] def linspace(self, *args, **kwargs): return self.np.linspace(*args, **kwargs)
[docs] def log(self, *args, **kwargs): return self.np.log(*args, **kwargs)
[docs] def log2(self, *args, **kwargs): return self.np.log2(*args, **kwargs)
[docs] def mat(self, *args, **kwargs): return self.np.mat(*args, **kwargs)
[docs] def max(self, *args, **kwargs): return self.np.max(*args, **kwargs)
[docs] def meshgrid(self, *args, **kwargs): return self.np.meshgrid(*args, **kwargs)
[docs] def min(self, *args, **kwargs): return self.np.min(*args, **kwargs)
[docs] def ndarray(self, *args, **kwargs): return self.np.ndarray(*args, **kwargs)
[docs] def nonzero(self, *args, **kwargs): return self.np.nonzero(*args, **kwargs)
[docs] def ones(self, *args, **kwargs): return self.np.ones(*args, **kwargs)
[docs] def ones_like(self, *args, **kwargs): return self.np.ones_like(*args, **kwargs)
[docs] def power(self, *args, **kwargs): return self.np.power(*args, **kwargs)
[docs] def real(self, *args, **kwargs): return self.np.real(*args, **kwargs)
[docs] def reshape(self, *args, **kwargs): return self.np.reshape(*args, **kwargs)
[docs] def savetxt(self, *args, **kwargs): return self.np.savetxt(*args, **kwargs)
[docs] def set_printoptions(self, *args, **kwargs): return self.np.set_printoptions(*args, **kwargs)
[docs] def sin(self, *args, **kwargs): return self.np.sin(*args, **kwargs)
[docs] def sqrt(self, *args, **kwargs): return self.np.sqrt(*args, **kwargs)
[docs] def squeeze(self, *args, **kwargs): return self.np.squeeze(*args, **kwargs)
[docs] def sum(self, *args, **kwargs): return self.np.sum(*args, **kwargs)
[docs] def tan(self, *args, **kwargs): return self.np.tan(*args, **kwargs)
[docs] def union1d(self, *args, **kwargs): return self.np.union1d(*args, **kwargs)
[docs] def vectorize(self, *args, **kwargs): return self.np.vectorize(*args, **kwargs)
[docs] def where(self, *args, **kwargs): return self.np.where(*args, **kwargs)
[docs] def zeros(self, *args, **kwargs): return self.np.zeros(*args, **kwargs)
[docs] def zeros_like(self, *args, **kwargs): return self.np.zeros_like(*args, **kwargs)
[docs] def lib_stride_tricks_as_strided(self, x, shape=None, strides=None, writeable=True): return self.np.lib.stride_tricks.as_strided( x, shape=shape, strides=strides, writeable=writeable )