# ArrayFire Python Wrapper

## Introduction

ArrayFire is a high performance scientific computing library with an easy to use API.

    >>> # Monte Carlo estimation of pi
    >>> def calc_pi_device(samples):
            # Simple, array based API
            # Generate uniformly distributed random numers
            x = af.randu(samples)
            y = af.randu(samples)
            # Supports Just In Time Compilation
            # The following line generates a single kernel
            within_unit_circle = (x * x + y * y) < 1
            # Intuitive function names
            return 4 * af.count(within_unit_circle) / samples

Programs written using ArrayFire are portable across CUDA, OpenCL and CPU devices.

The default backend is chosen in the following order of preference based on the available libraries:

> 1. CUDA
> 2. OpenCL
> 3. CPU

The backend can be chosen at the beginning of the program by using the following function

    >>> af.backend.set(name)

where name is one of ‘cuda’, ‘opencl’ or ‘cpu’.

The functionality provided by ArrayFire spans the following domains:

> 1. Vector Algorithms
> 2. Image Processing
> 3. Signal Processing
> 4. Computer Vision
> 5. Linear Algebra
> 6. Statistics

Submodules

`arrayfire.algorithm` | Vector algorithms (sum, min, sort, etc).
`arrayfire.arith` | Math functions (sin, sqrt, exp, etc).
`arrayfire.array` | Array class and helper functions.
`arrayfire.base` | Implementation of BaseArray class.
`arrayfire.bcast` | Function to perform broadcasting operations.
`arrayfire.blas` | BLAS functions (matmul, dot, etc)
`arrayfire.cuda` | Functions specific to CUDA backend.
`arrayfire.data` | Functions to create and manipulate arrays.
`arrayfire.device` | Functions to handle the available devices in the backend.
`arrayfire.features` | Features class used for Computer Vision algorithms.
`arrayfire.graphics` | Graphics functions (plot, image, etc).
`arrayfire.image` | Image processing functions.
`arrayfire.index` | Index and Seq classes used in indexing operations.
`arrayfire.interop` | Interop with other python packages.
`arrayfire.lapack` | Dense Linear Algebra functions (solve, inverse, etc).
`arrayfire.library` | Module containing enums and other constants.
`arrayfire.opencl` | Functions specific to OpenCL backend.
`arrayfire.signal` | Signal processing functions (fft, convolve, etc).
`arrayfire.statistics` | Statistical algorithms (mean, var, stdev, etc).
`arrayfire.timer` | Functions to time arrayfire.
`arrayfire.util` | Utility functions to help with Array metadata.
`arrayfire.vision` | Computer vision functions (FAST, ORB, etc)