mlpyをpython3.3(64bit)でビルド(windows 64bit)

#mlpyをwindows 64bit環境でビルド
[mlpy](http://mlpy.sourceforge.net/ "mlpy")のwindows用バイナリは32bit用しか提供されないので、自力でビルドします
使用環境：

* python3.3.5(64bit)
* windows7 64bit sp1
* Visual Studio 2010

#準備
必要なライブラリを入手

* numpy
* scipy
* [GSL](http://www.gnu.org/software/gsl/ GSL)

##numpy, scipyのインストール
mlpyを使おうとしているなら既にインストールされていると思います。
ない場合は、`pip install numpy scipy`でインストールしてください
##GSLのビルド
スタティックライブラリが必要になります。
私は半年以上前に別件でGSLをビルドしていたのですが、現在は状況が変わっているようです。
###以前
私がやった時は、以下のリンクを参考にしました。意外と簡単に出来ました。

* [GSL1.15をvisualC++で利用するメモ](http://www.field-and-network.jp/rihei/20120923210057.php)
* [VisualStudio2012でGSL1.16を利用するための手順](http://momose-d.cocolog-nifty.com/blog/2013/07/visualstudio201.html)

###現在
現在では、visual studioのプロジェクトへのリンクが消滅しています。
バージョンが少し古いですが、[gsl-1.15-vc10.zip](http://code.google.com/p/gsl-w32/downloads/detail?name=gsl-1.15-vc10.zip&can=2&q=)を配布しているページは見つかりました。
また、All in Oneパッケージらしきもの([gnu-gsl-for-windows](https://github.com/ahmadyan/gnu-gsl-for-windows))がありました。
どちらも利用していないので、本当に利用可能かはわかりません。
※2014/7/3追記：gnu-gsl-for-windowsは予想通り使えました。

##mlpyの修正
64bit環境用にソースコードを修正します。

### setup.pyの`"win32"`を`"win-amd64"`に変更。ただし、25行目はそのまま

before

```python:setup.py(29-41行)
#### libs
if get_platform() == "win32":
   gsl_lib = ['gsl', 'cblas']
   math_lib = []
else:
   gsl_lib = ['gsl', 'gslcblas']
   math_lib = ['m']
   
#### Extra compile args
if get_platform() == "win32":
   extra_compile_args = []
else:
   extra_compile_args = ['-Wno-strict-prototypes']
```

after

```python:setup.py(29-41行)
#### libs
if get_platform() == "win-amd64":
   gsl_lib = ['gsl', 'cblas']
   math_lib = []
else:
   gsl_lib = ['gsl', 'gslcblas']
   math_lib = ['m']
   
#### Extra compile args
if get_platform() == "win-amd64":
   extra_compile_args = []
else:
   extra_compile_args = ['-Wno-strict-prototypes']
```

### コメントの２バイト文字を修正。Θと二重引用符(”)を削除
before

```cpp:mlpy/fastcluster/fastcluster/src/fastcluster.cpp(630-632行)
    // Complexity: Θ(size)
    // Reference: Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms,
    // 3rd ed., 2009, Section 6.3 “Building a heap”
```

after
コメントを削除

### `np.int_t`を`np.int64_t`に変更
修正をしないとint型とlong long型の不一致による実行時エラーが発生して[Tutorial](http://mlpy.sourceforge.net/docs/3.5/tutorial.html)すら実行できません。
 __他にも修正が必要な個所があるかもしれませんが、今のところ発見できていません__ 
before

```cython:mlpy/libsvm/libsvm.pyx(28-32行)
# array 1D to svm node
cdef svm_node *array1d_to_node(np.ndarray[np.float64_t, ndim=1] x):
    cdef int i, k
    cdef np.ndarray[np.int_t, ndim=1] nz
    cdef svm_node *ret
```

after

```cython:mlpy/libsvm/libsvm.pyx(28-32行)
# array 1D to svm node
cdef svm_node *array1d_to_node(np.ndarray[np.float64_t, ndim=1] x):
    cdef int i, k
    cdef np.ndarray[np.int64_t, ndim=1] nz
    cdef svm_node *ret
```

before

```cython:mlpy/adatron/adatron.pyx(69-73行)
        
        cdef np.ndarray[np.int_t, ndim=1] ynew
        cdef np.ndarray[np.float_t, ndim=2] K_arr
        cdef np.ndarray[np.float_t, ndim=1] alpha_arr
        cdef double margin
```

after

```cython:mlpy/adatron/adatron.pyx(69-73行)
        
        cdef np.ndarray[np.int64_t, ndim=1] ynew
        cdef np.ndarray[np.float_t, ndim=2] K_arr
        cdef np.ndarray[np.float_t, ndim=1] alpha_arr
        cdef double margin
```

##mlpyのビルド
お待たせしました
あとは

```bat
set LIB=%LIB%;(gsl.lib,cblas.libがあるディレクトリ)
python setup.py build_ext --include-dirs=(gslのインクルードディレクトリ)
python setup.py install

もしくは(anacondaをインストールした場合)
python setup.py build_ext --include-dirs=(gslのインクルードディレクトリ) --compiler=msvc install
```

で完了です。
お疲れ様でした。