Alternating Conditional Expectation Algorithm

## Project description

This project provides a wrapper program of Python for ACE algorithm implementation of Fortran.

## Install Binary Distribution

Currently, only 64-bit binary distribution is provided. Run pip install ace_cream to install the binary distribution.

Platform py3.5 py3.6 py2.7
Windows T T T
MacOS   T T
Linux T T T

## How to build

You need numpy and fortran compiler to build from source.

### Windows

• Install Visual C++ toolchain.
• Install MinGW-w64 and add {install_dir}\mingw64\bin path to environment variable (make gfortran accessible from command line).
• (for conda environment) Add {install_dir}\Anaconda3\Scripts to environment variable (make f2py accessible from command line).

### Mac

You can use package manager to install gfortran (included within gnu compiler collection). For example, with Homebrew you can use

```brew install gcc
```

### Ubuntu

To install gfortran, use the default package manager:

```sudo apt-get install gfortran
```

Run python setup.py install from command line at the project root directory.

## How to use

```import numpy as np
from ace_cream import ace_cream
# discrete case, binary symmetric channel with crossover probability 0.1
x = np.random.choice([0,1], size=N_SIZE)
n = np.random.choice([0,1], size=N_SIZE, p=[0.9, 0.1])
y = np.mod(x + n, 2)
# set both x(cat=0) and y(cat=-1) as categorical type
tx, ty = ace_cream(x, y, cat=[-1,0])

# continuous case
x = np.random.uniform(0, np.pi, 200)
y = np.exp(np.sin(x)+np.random.normal(size=200)/2)
tx, ty = ace_cream(x, y)
```

## Result image

## change log

1. v0.1 initial commit
2. v0.2 modify to relative import in __init__.py
3. v0.3 add support for multiple columns of x and other directions of transformation
4. v0.4 add f_mapping function and unittests for this function

## Project details 0.4.post11 0.4.post10 0.4.post9 0.4.post6

This version 0.4.post5 0.4.post4 0.4.post3 0.4.post2