From bf83b27892c4ef012cf8f65dd63408ec9059f32e Mon Sep 17 00:00:00 2001 From: Michael Hanke Date: Tue, 21 Oct 2008 11:05:11 +0200 Subject: [PATCH] RF: Uniformize extension handling. Extensions are now named after the lib they are building, e.g. SMLR build smlrc.so and is therefore named 'smlrc' not 'smlr' and is now located in 'mvpa/clfs/libsmlrc'. --- Makefile | 10 ++++----- Makefile.win | 10 +++++---- mvpa/base/externals.py | 2 +- mvpa/clfs/libridgetrain/__init__.py | 21 +++++++++++++++++++ mvpa/clfs/{ => libridgetrain}/ridgetrain.f | 0 mvpa/clfs/{libsmlr => libsmlrc}/__init__.py | 6 +++--- .../{libsmlr => libsmlrc}/ctypes_helper.py | 0 mvpa/clfs/{libsmlr => libsmlrc}/smlr.c | 0 mvpa/clfs/{libsvm => libsvmc}/.gitignore | 0 mvpa/clfs/{libsvm => libsvmc}/__init__.py | 6 +++--- mvpa/clfs/{libsvm => libsvmc}/_svm.py | 4 ++-- mvpa/clfs/{libsvm => libsvmc}/sens.py | 0 mvpa/clfs/{libsvm => libsvmc}/svm.py | 4 ++-- mvpa/clfs/{libsvm => libsvmc}/svmc.i | 1 + mvpa/clfs/ridge.py | 7 +++---- mvpa/clfs/smlr.py | 2 +- mvpa/clfs/svm.py | 6 +++--- mvpa/clfs/warehouse.py | 2 +- setup.py | 12 +++++------ tests/test_svm.py | 2 +- 20 files changed, 59 insertions(+), 36 deletions(-) create mode 100644 mvpa/clfs/libridgetrain/__init__.py rename mvpa/clfs/{ => libridgetrain}/ridgetrain.f (100%) rename mvpa/clfs/{libsmlr => libsmlrc}/__init__.py (92%) rename mvpa/clfs/{libsmlr => libsmlrc}/ctypes_helper.py (100%) rename mvpa/clfs/{libsmlr => libsmlrc}/smlr.c (100%) rename mvpa/clfs/{libsvm => libsvmc}/.gitignore (100%) rename mvpa/clfs/{libsvm => libsvmc}/__init__.py (81%) rename mvpa/clfs/{libsvm => libsvmc}/_svm.py (99%) rename mvpa/clfs/{libsvm => libsvmc}/sens.py (100%) rename mvpa/clfs/{libsvm => libsvmc}/svm.py (99%) rename mvpa/clfs/{libsvm => libsvmc}/svmc.i (99%) diff --git a/Makefile b/Makefile index 757c5a0b40..711881fc7d 100644 --- a/Makefile +++ b/Makefile @@ -44,11 +44,11 @@ build-stamp: 3rd python setup.py build_ext python setup.py build_py # to overcome the issue of not-installed svmc.so - for ext in svm smlr; do \ - ln -sf ../../../build/lib.linux-$(ARCH)-$(PYVER)/mvpa/clfs/lib$$ext/$${ext}c.so \ - mvpa/clfs/lib$$ext/; \ - ln -sf ../../../build/lib.linux-$(ARCH)-$(PYVER)/mvpa/clfs/lib$$ext/$${ext}c.so \ - mvpa/clfs/lib$$ext/$${ext}c.dylib; \ + for ext in _svmc smlrc ridgetrain; do \ + ln -sf ../../../build/lib.linux-$(ARCH)-$(PYVER)/mvpa/clfs/lib$${ext#_*}/$${ext}.so \ + mvpa/clfs/lib$${ext#_*}/; \ + ln -sf ../../../build/lib.linux-$(ARCH)-$(PYVER)/mvpa/clfs/lib$${ext#_*}/$${ext}.so \ + mvpa/clfs/lib$${ext#_*}/$${ext}.dylib; \ done touch $@ diff --git a/Makefile.win b/Makefile.win index 35d7101fd3..ebdef186c7 100644 --- a/Makefile.win +++ b/Makefile.win @@ -29,10 +29,12 @@ installer: 3rd build configure-inplace-use: - copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libsmlr\\smlrc.pyd \ - mvpa\\clfs\\libsmlr - copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libsvm\\svmc.pyd \ - mvpa\\clfs\\libsvm + copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libsmlrc\\smlrc.pyd \ + mvpa\\clfs\\libsmlrc + copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libsvmc\\_svmc.pyd \ + mvpa\\clfs\\libsvmc + copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libridgetrain\\ridgetrain.pyd \ + mvpa\\clfs\\libridgetrain # # Cleaning diff --git a/mvpa/base/externals.py b/mvpa/base/externals.py index b36c8d3e77..dd165bba9b 100644 --- a/mvpa/base/externals.py +++ b/mvpa/base/externals.py @@ -80,7 +80,7 @@ def __check_weave(): # contains list of available (optional) external classifier extensions -_KNOWN = {'libsvm':'import mvpa.clfs.libsvm._svm as __; x=__.convert2SVMNode', +_KNOWN = {'libsvm':'import mvpa.clfs.libsvmc._svm as __; x=__.convert2SVMNode', 'nifti':'from nifti import NiftiImage as __', 'ctypes':'import ctypes as __', 'shogun':'import shogun as __', diff --git a/mvpa/clfs/libridgetrain/__init__.py b/mvpa/clfs/libridgetrain/__init__.py new file mode 100644 index 0000000000..78b37e8095 --- /dev/null +++ b/mvpa/clfs/libridgetrain/__init__.py @@ -0,0 +1,21 @@ +#emacs: -*- mode: python-mode; py-indent-offset: 4; indent-tabs-mode: nil -*- +#ex: set sts=4 ts=4 sw=4 et: +### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## +# +# See COPYING file distributed along with the PyMVPA package for the +# copyright and license terms. +# +### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## +"""Import helper for Fortran extension ridgetrain.""" + +__docformat__ = 'restructuredtext' + + +if __debug__: + from mvpa.base import debug + debug('INIT', 'mvpa.clfs.libridgetrain') + +from mvpa.clfs.libridgetrain.ridgetrain import ridgetrain + +if __debug__: + debug('INIT', 'mvpa.clfs.libridgetrain end') diff --git a/mvpa/clfs/ridgetrain.f b/mvpa/clfs/libridgetrain/ridgetrain.f similarity index 100% rename from mvpa/clfs/ridgetrain.f rename to mvpa/clfs/libridgetrain/ridgetrain.f diff --git a/mvpa/clfs/libsmlr/__init__.py b/mvpa/clfs/libsmlrc/__init__.py similarity index 92% rename from mvpa/clfs/libsmlr/__init__.py rename to mvpa/clfs/libsmlrc/__init__.py index baa1f5df09..ed532d13b7 100644 --- a/mvpa/clfs/libsmlr/__init__.py +++ b/mvpa/clfs/libsmlrc/__init__.py @@ -10,14 +10,14 @@ if __debug__: from mvpa.base import debug - debug('INIT', 'mvpa.clfs.libsmlr') + debug('INIT', 'mvpa.clfs.libsmlrc') import numpy as N import ctypes as C import os import sys -from mvpa.clfs.libsmlr.ctypes_helper import extend_args, c_darray +from mvpa.clfs.libsmlrc.ctypes_helper import extend_args, c_darray # connect to library that's in this directory if sys.platform == 'win32': @@ -54,5 +54,5 @@ def stepwise_regression(*args): return func(*arglist) if __debug__: - debug('INIT', 'mvpa.clfs.libsmlr end') + debug('INIT', 'mvpa.clfs.libsmlrc end') diff --git a/mvpa/clfs/libsmlr/ctypes_helper.py b/mvpa/clfs/libsmlrc/ctypes_helper.py similarity index 100% rename from mvpa/clfs/libsmlr/ctypes_helper.py rename to mvpa/clfs/libsmlrc/ctypes_helper.py diff --git a/mvpa/clfs/libsmlr/smlr.c b/mvpa/clfs/libsmlrc/smlr.c similarity index 100% rename from mvpa/clfs/libsmlr/smlr.c rename to mvpa/clfs/libsmlrc/smlr.c diff --git a/mvpa/clfs/libsvm/.gitignore b/mvpa/clfs/libsvmc/.gitignore similarity index 100% rename from mvpa/clfs/libsvm/.gitignore rename to mvpa/clfs/libsvmc/.gitignore diff --git a/mvpa/clfs/libsvm/__init__.py b/mvpa/clfs/libsvmc/__init__.py similarity index 81% rename from mvpa/clfs/libsvm/__init__.py rename to mvpa/clfs/libsvmc/__init__.py index c18aa04f1f..c9f1981d18 100644 --- a/mvpa/clfs/libsvm/__init__.py +++ b/mvpa/clfs/libsvmc/__init__.py @@ -12,9 +12,9 @@ if __debug__: from mvpa.base import debug - debug('INIT', 'mvpa.clfs.libsvm') + debug('INIT', 'mvpa.clfs.libsvmc') -from mvpa.clfs.libsvm.svm import SVM +from mvpa.clfs.libsvmc.svm import SVM if __debug__: - debug('INIT', 'mvpa.clfs.libsvm end') + debug('INIT', 'mvpa.clfs.libsvmc end') diff --git a/mvpa/clfs/libsvm/_svm.py b/mvpa/clfs/libsvmc/_svm.py similarity index 99% rename from mvpa/clfs/libsvm/_svm.py rename to mvpa/clfs/libsvmc/_svm.py index 7572c03a82..a5422c5fe0 100644 --- a/mvpa/clfs/libsvm/_svm.py +++ b/mvpa/clfs/libsvmc/_svm.py @@ -16,8 +16,8 @@ import numpy as N -from mvpa.clfs.libsvm import svmc -from mvpa.clfs.libsvm.svmc import C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, \ +from mvpa.clfs.libsvmc import _svmc as svmc +from mvpa.clfs.libsvmc._svmc import C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, \ NU_SVR, LINEAR, POLY, RBF, SIGMOID, \ PRECOMPUTED diff --git a/mvpa/clfs/libsvm/sens.py b/mvpa/clfs/libsvmc/sens.py similarity index 100% rename from mvpa/clfs/libsvm/sens.py rename to mvpa/clfs/libsvmc/sens.py diff --git a/mvpa/clfs/libsvm/svm.py b/mvpa/clfs/libsvmc/svm.py similarity index 99% rename from mvpa/clfs/libsvm/svm.py rename to mvpa/clfs/libsvmc/svm.py index d643c8fac1..ca4a8df79c 100644 --- a/mvpa/clfs/libsvm/svm.py +++ b/mvpa/clfs/libsvmc/svm.py @@ -22,14 +22,14 @@ from mvpa.clfs._svmbase import _SVM from mvpa.measures.base import Sensitivity -import _svm as svm +from mvpa.clfs.libsvmc import _svm as svm from sens import * if __debug__: from mvpa.base import debug # we better expose those since they are mentioned in docstrings -from svmc import \ +from mvpa.clfs.libsvmc._svmc import \ C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, \ NU_SVR, LINEAR, POLY, RBF, SIGMOID, \ PRECOMPUTED diff --git a/mvpa/clfs/libsvm/svmc.i b/mvpa/clfs/libsvmc/svmc.i similarity index 99% rename from mvpa/clfs/libsvm/svmc.i rename to mvpa/clfs/libsvmc/svmc.i index d49410959f..2b50c85e61 100644 --- a/mvpa/clfs/libsvm/svmc.i +++ b/mvpa/clfs/libsvmc/svmc.i @@ -1,3 +1,4 @@ +//-*-c++-*- %module svmc %{ #include "svm.h" diff --git a/mvpa/clfs/ridge.py b/mvpa/clfs/ridge.py index 8756a9722b..446e5254ff 100644 --- a/mvpa/clfs/ridge.py +++ b/mvpa/clfs/ridge.py @@ -15,8 +15,7 @@ from scipy.linalg import lstsq from mvpa.clfs.base import Classifier - -import ridgetrain +from mvpa.clfs.libridgetrain import ridgetrain class RidgeReg(Classifier): """Ridge regression `Classifier`. @@ -76,7 +75,7 @@ def _train(self, data): """Train the classifier using `data` (`Dataset`). """ - if self.implementation == "direct": + if self.__implementation == "direct": # create matrices to solve with additional penalty term # determine the lambda matrix if self.__lm is None: @@ -102,7 +101,7 @@ def _train(self, data): Lambda = self.__lm # We can directly run the training routine self.w = N.random.randn(data.nfeatures+1) - self.w = ridgetrain.ridgetrain(data.samples,\ + self.w = ridgetrain(data.samples,\ data.labels, self.w, Lambda, self.__stopcrit) else: raise ValueError, "Unknown implementation '%s'" \ diff --git a/mvpa/clfs/smlr.py b/mvpa/clfs/smlr.py index c9b4009cbf..fe5fb9373e 100644 --- a/mvpa/clfs/smlr.py +++ b/mvpa/clfs/smlr.py @@ -23,7 +23,7 @@ _DEFAULT_IMPLEMENTATION = "Python" if externals.exists('ctypes'): # Uber-fast C-version of the stepwise regression - from mvpa.clfs.libsmlr import stepwise_regression as _cStepwiseRegression + from mvpa.clfs.libsmlrc import stepwise_regression as _cStepwiseRegression _DEFAULT_IMPLEMENTATION = "C" else: _cStepwiseRegression = None diff --git a/mvpa/clfs/svm.py b/mvpa/clfs/svm.py index 8d9cff190f..ae3cfd2dba 100644 --- a/mvpa/clfs/svm.py +++ b/mvpa/clfs/svm.py @@ -43,14 +43,14 @@ if externals.exists('libsvm'): # By default for now we want simply to import all SVMs from libsvm - from mvpa.clfs import libsvm - _NuSVM = libsvm.SVM + from mvpa.clfs import libsvmc + _NuSVM = libsvmc.SVM if default_backend == 'libsvm' or SVM is None: if __debug__ and default_backend != 'libsvm' and SVM is None: debug('SVM', 'Default SVM backend %s was not found, so using libsvm' % default_backend) - SVM = libsvm.SVM + SVM = libsvmc.SVM #from mvpa.clfs.libsvm.svm import * if SVM is None: diff --git a/mvpa/clfs/warehouse.py b/mvpa/clfs/warehouse.py index fb102a7c75..e195afdee4 100644 --- a/mvpa/clfs/warehouse.py +++ b/mvpa/clfs/warehouse.py @@ -165,7 +165,7 @@ def items(self): clfs['smlr'][0].descr) ] if externals.exists('libsvm'): - from mvpa.clfs import libsvm + from mvpa.clfs import libsvmc as libsvm clfs._known_tags.union_update(libsvm.SVM._KNOWN_IMPLEMENTATIONS.keys()) clfs += [libsvm.SVM(descr="libsvm.LinSVM(C=def)", probability=1), libsvm.SVM( diff --git a/setup.py b/setup.py index 4a6e91a0f4..967da0d772 100755 --- a/setup.py +++ b/setup.py @@ -25,8 +25,8 @@ # define the extension modules libsvmc_ext = Extension( - 'mvpa.clfs.libsvm.svmc', - sources = [ 'mvpa/clfs/libsvm/svmc.i' ], + 'mvpa.clfs.libsvmc._svmc', + sources = [ 'mvpa/clfs/libsvmc/svmc.i' ], include_dirs = [ '/usr/include/libsvm-2.0/libsvm', numpy_headers ], libraries = [ 'svm' ], language = 'c++', @@ -36,8 +36,8 @@ '-I' + numpy_headers ] ) smlrc_ext = Extension( - 'mvpa.clfs.libsmlr.smlrc', - sources = [ 'mvpa/clfs/libsmlr/smlr.c' ], + 'mvpa.clfs.libsmlrc.smlrc', + sources = [ 'mvpa/clfs/libsmlrc/smlr.c' ], libraries = ['m'], # extra_compile_args = ['-O0'], extra_link_args = extra_link_args, @@ -79,8 +79,8 @@ 'mvpa.mappers', 'mvpa.clfs', 'mvpa.clfs.sg', - 'mvpa.clfs.libsvm', - 'mvpa.clfs.libsmlr', + 'mvpa.clfs.libsvmc', + 'mvpa.clfs.libsmlrc', 'mvpa.algorithms', 'mvpa.measures', 'mvpa.featsel', diff --git a/tests/test_svm.py b/tests/test_svm.py index 36140026a2..26de6b1bd0 100644 --- a/tests/test_svm.py +++ b/tests/test_svm.py @@ -160,7 +160,7 @@ def testSillyness(self): self.failUnlessRaises(TypeError, SVM, C=1.0, nu=2.3) if externals.exists('libsvm'): - self.failUnlessRaises(TypeError, libsvm.SVM, C=1.0, nu=2.3) + self.failUnlessRaises(TypeError, libsvmc.SVM, C=1.0, nu=2.3) self.failUnlessRaises(TypeError, LinearNuSVMC, C=2.3) self.failUnlessRaises(TypeError, LinearCSVMC, nu=2.3)