Wide (partial Khatri-Rao) sparse matrix product

## Project description

wide-product implements a partial, column-wise Khatri-Rao product. It is fast, and works on sparse matrices.

It can be useful for engineering of cross-features for machine learning.

## Definition

For a pair of scalars (~ one by one matrices), the wide product is multiplication:

```wide_product ( [[a]], [[b]] ) == [[a * b]]
```

Where matrices are constructed by vertical stacking, the product is row-wise:

```wide_product ( vstack((A, B)), vstack((C, D)) ) ==
vstack((wide_product(A, C),
wide_product(B, D)))
```

Where matrices are constructed by horizontal stacking, the product contains all the products of the subcomponents up to permutation of columns:

```wide_product ( hstack((A, B)), hstack((C, D)) ) ==
hstack((wide_product(A, C),
wide_product(A, D),
wide_product(B, C),
wide_product(B, D)))
```

## Installation

```pip install wide-product
```

## Development

To build the module:

```python setup.py build
```

To test:

```PYTHONPATH=\$(echo build/lib*):. py.test
```

To install:

```pip install .
```