From b85d91c3c7e338cbb6a5f98447276af15e3cb925 Mon Sep 17 00:00:00 2001 From: Fabian Pedregosa <fabian.pedregosa@inria.fr> Date: Mon, 7 Jun 2010 16:18:26 +0200 Subject: [PATCH] Initial import of LAR algorithm. This is done by binding minilearn library. It is still a work in progress. As cblas is needed by minilearn, a stripped down version of cblas is shipped in case distutils does not find a suitable cblas implementation to link with. In linux systems, having atlas installed will be more than enough to link against a decent cblas. --- scikits/learn/glm.py | 42 + scikits/learn/setup.py | 38 +- scikits/learn/src/cblas/ATL_dreftpsvLNN.c | 98 + scikits/learn/src/cblas/ATL_dreftpsvLNU.c | 98 + scikits/learn/src/cblas/ATL_dreftpsvLTN.c | 99 + scikits/learn/src/cblas/ATL_dreftpsvLTU.c | 99 + scikits/learn/src/cblas/ATL_dreftpsvUNN.c | 99 + scikits/learn/src/cblas/ATL_dreftpsvUNU.c | 99 + scikits/learn/src/cblas/ATL_dreftpsvUTN.c | 98 + scikits/learn/src/cblas/ATL_dreftpsvUTU.c | 98 + scikits/learn/src/cblas/ATL_dtpsv.c | 211 + scikits/learn/src/cblas/atlas_enum.h | 55 + scikits/learn/src/cblas/atlas_reflevel2.h | 791 ++++ scikits/learn/src/cblas/atlas_reflvl2.h | 3187 ++++++++++++++ scikits/learn/src/cblas/atlas_refmisc.h | 370 ++ scikits/learn/src/cblas/cblas.h | 596 +++ scikits/learn/src/cblas/cblas_daxpy.c | 159 + scikits/learn/src/cblas/cblas_ddot.c | 135 + scikits/learn/src/cblas/cblas_dnrm2.c | 206 + scikits/learn/src/cblas/cblas_dscal.c | 183 + scikits/learn/src/cblas/cblas_dtpsv.c | 83 + scikits/learn/src/cblas/cblas_errprn.c | 50 + scikits/learn/src/cblas/cblas_xerbla.c | 53 + scikits/learn/src/minilearn.pyx | 25 + scikits/learn/src/minilearn/lars.c | 240 ++ scikits/learn/src/minilearn/minilearn.c | 4752 +++++++++++++++++++++ scikits/learn/src/minilearn/minilearn.h | 20 + scikits/learn/src/minilearn/minilearn.pyx | 27 + scikits/learn/tests/test_glm.py | 23 + 29 files changed, 12028 insertions(+), 6 deletions(-) create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvLNN.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvLNU.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvLTN.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvLTU.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvUNN.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvUNU.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvUTN.c create mode 100644 scikits/learn/src/cblas/ATL_dreftpsvUTU.c create mode 100644 scikits/learn/src/cblas/ATL_dtpsv.c create mode 100644 scikits/learn/src/cblas/atlas_enum.h create mode 100644 scikits/learn/src/cblas/atlas_reflevel2.h create mode 100644 scikits/learn/src/cblas/atlas_reflvl2.h create mode 100644 scikits/learn/src/cblas/atlas_refmisc.h create mode 100644 scikits/learn/src/cblas/cblas.h create mode 100644 scikits/learn/src/cblas/cblas_daxpy.c create mode 100644 scikits/learn/src/cblas/cblas_ddot.c create mode 100644 scikits/learn/src/cblas/cblas_dnrm2.c create mode 100644 scikits/learn/src/cblas/cblas_dscal.c create mode 100644 scikits/learn/src/cblas/cblas_dtpsv.c create mode 100644 scikits/learn/src/cblas/cblas_errprn.c create mode 100644 scikits/learn/src/cblas/cblas_xerbla.c create mode 100644 scikits/learn/src/minilearn.pyx create mode 100644 scikits/learn/src/minilearn/lars.c create mode 100644 scikits/learn/src/minilearn/minilearn.c create mode 100644 scikits/learn/src/minilearn/minilearn.h create mode 100644 scikits/learn/src/minilearn/minilearn.pyx create mode 100644 scikits/learn/tests/test_glm.py diff --git a/scikits/learn/glm.py b/scikits/learn/glm.py index d0f3d8ea5a..051faee9f6 100644 --- a/scikits/learn/glm.py +++ b/scikits/learn/glm.py @@ -929,3 +929,45 @@ class ElasticNetPath(LinearModelPath): def __init__(self, rho=0.5, **kwargs): super(ElasticNetPath, self).__init__(**kwargs) self.rho = rho + + +class LassoLARS (object): + """ + Lasso using the LARS algorithm + + As implemented in minilearn + """ + def __init__(self): + self._cholesky = np.empty(0, dtype=np.float64) + self.coef_ = np.empty(0, dtype=np.float64) + self.ind_ = np.empty(0, dtype=np.int32) + + def fit (self, X, Y, intercept=True, niter=None, normalize=True): + """ + WARNING: Y will be overwritten + + TODO: resize (not create) arrays + """ + X = np.asanyarray(X, dtype=np.float64, order='C') + Y = np.asanyarray(Y, dtype=np.float64, order='C') + + from . import minilearn + + if niter is None: + niter = min(*X.shape) - 1 + + sum_k = niter * (niter + 1) /2 + self._cholesky = np.zeros(sum_k, dtype=np.float64) + self.coef_ = np.zeros(sum_k, dtype=np.float64) + self.ind_ = np.zeros(niter, dtype=np.int32) + + if normalize: + X = X - X.mean(0) + Y = Y - Y.mean(0) + self._norms = np.apply_along_axis (np.linalg.norm, 0, X) + X /= self._norms + + + minilearn.lars_fit_wrap(X, Y, self.coef_, self.ind_, + self._cholesky, niter) + return self diff --git a/scikits/learn/setup.py b/scikits/learn/setup.py index 0dc95ad5bf..e052e1dad4 100644 --- a/scikits/learn/setup.py +++ b/scikits/learn/setup.py @@ -50,24 +50,50 @@ def configuration(parent_package='',top_path=None): join('src', 'tron.cpp')] # we try to link agains system-wide blas - blas_info = get_info('blas_opt') + blas_info = get_info('blas_opt', 0) + blas_lib = blas_info.pop('libraries', []) + extra_compile_args = blas_info.pop('extra_compile_args', []) + if not blas_info: + config.add_library('blas', blas_sources) warnings.warn(BlasNotFoundError.__doc__) - liblinear_sources.append(blas_sources) config.add_extension('liblinear', sources=liblinear_sources, - libraries = blas_info.pop('libraries', []), + libraries = blas_lib, include_dirs=['src', - numpy.get_include(), - blas_info.pop('include_dirs', [])], + numpy.get_include()], depends=[join('src', 'linear.h'), join('src', 'tron.h'), join('src', 'blas', 'blas.h'), join('src', 'blas', 'blasp.h')], - **blas_info) + extra_compile_args=extra_compile_args) ## end liblinear module + # minilear needs cblas, fortran-compiled BLAS will not be sufficient + if not blas_info or ( + ('NO_ATLAS_INFO', 1) in blas_info.get('define_macros', [])): + config.add_library('cblas', + sources=[ + join('src', 'cblas', '*.c'), + ] + ) + + minilearn_sources = [ + join('src', 'minilearn', 'lars.c'), + join('src', 'minilearn', 'minilearn.c')] + + extra_compile_args += ['-std=c99', '-g'] + + config.add_extension('minilearn', + sources=minilearn_sources, + libraries = ['blas', 'cblas'], + include_dirs=[join('src', 'minilearn'), + join('src', 'cblas'), + numpy.get_include()], + extra_compile_args=extra_compile_args, + ) + config.add_extension('BallTree', sources=[join('src', 'BallTree.cpp')], include_dirs=[numpy.get_include()] diff --git a/scikits/learn/src/cblas/ATL_dreftpsvLNN.c b/scikits/learn/src/cblas/ATL_dreftpsvLNN.c new file mode 100644 index 0000000000..8d0e0ab06a --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvLNN.c @@ -0,0 +1,98 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvLNN +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvLNN( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasLower, AtlasNoTrans, AtlasNonUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA; +/* .. + * .. Executable Statements .. + * + */ + for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += INCX ) + { + X[jx] /= A[jaj]; t0 = X[jx]; + for( i = j+1, iaij = jaj+1, ix = jx + INCX; i < N; + i++, iaij += 1, ix += INCX ) { X[ix] -= t0 * A[iaij]; } + jaj += lda; lda -= 1; + } +/* + * End of ATL_dreftpsvLNN + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvLNU.c b/scikits/learn/src/cblas/ATL_dreftpsvLNU.c new file mode 100644 index 0000000000..01974c1c75 --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvLNU.c @@ -0,0 +1,98 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvLNU +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvLNU( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasLower, AtlasNoTrans, AtlasUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA; +/* .. + * .. Executable Statements .. + * + */ + for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += INCX ) + { + t0 = X[jx]; + for( i = j+1, iaij = jaj+1, ix = jx + INCX; + i < N; i++, iaij += 1, ix += INCX ) { X[ix] -= t0 * A[iaij]; } + jaj += lda; lda -= 1; + } +/* + * End of ATL_dreftpsvLNU + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvLTN.c b/scikits/learn/src/cblas/ATL_dreftpsvLTN.c new file mode 100644 index 0000000000..636eed9cae --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvLTN.c @@ -0,0 +1,99 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvLTN +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvLTN( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasLower, AtlasTrans, AtlasNonUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA - N + 1; +/* .. + * .. Executable Statements .. + * + */ + for( j = N-1, jaj = (LDA+1)*(N-1) - ( ((N-1)*N) >> 1 ), jx = (N-1)*INCX; + j >= 0; j--, jx -= INCX ) + { + t0 = X[jx]; + for( i = j+1, iaij = jaj+1, ix = jx + INCX; + i < N; i++, iaij += 1, ix += INCX ) { t0 -= A[iaij] * X[ix]; } + t0 /= A[jaj]; X[jx] = t0; lda += 1; jaj -= lda; + } +/* + * End of ATL_dreftpsvLTN + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvLTU.c b/scikits/learn/src/cblas/ATL_dreftpsvLTU.c new file mode 100644 index 0000000000..9d564452c8 --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvLTU.c @@ -0,0 +1,99 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvLTU +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvLTU( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasLower, AtlasTrans, AtlasUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA - N + 1; +/* .. + * .. Executable Statements .. + * + */ + for( j = N-1, jaj = (LDA+1)*(N-1) - ( ((N-1)*N) >> 1 ), jx = (N-1)*INCX; + j >= 0; j--, jx -= INCX ) + { + t0 = X[jx]; + for( i = j+1, iaij = jaj+1, ix = jx + INCX; + i < N; i++, iaij += 1, ix += INCX ) { t0 -= A[iaij] * X[ix]; } + X[jx] = t0; lda += 1; jaj -= lda; + } +/* + * End of ATL_dreftpsvLTU + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvUNN.c b/scikits/learn/src/cblas/ATL_dreftpsvUNN.c new file mode 100644 index 0000000000..af3113b68e --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvUNN.c @@ -0,0 +1,99 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvUNN +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvUNN( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasUpper, AtlasNoTrans, AtlasNonUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA + N - 1; +/* .. + * .. Executable Statements .. + * + */ + for( j = N-1, jaj = (((N-1)*(2*LDA+N-2)) >> 1), jx = (N-1)*INCX; + j >= 0; j--, jx -= INCX ) + { + X[jx] /= A[j+jaj]; t0 = X[jx]; + for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 1, ix += INCX ) + { X[ix] -= t0 * A[iaij]; } + lda -= 1; jaj -= lda; + } +/* + * End of ATL_dreftpsvUNN + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvUNU.c b/scikits/learn/src/cblas/ATL_dreftpsvUNU.c new file mode 100644 index 0000000000..b50bfbf0e4 --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvUNU.c @@ -0,0 +1,99 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvUNU +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvUNU( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasUpper, AtlasNoTrans, AtlasUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA + N - 1; +/* .. + * .. Executable Statements .. + * + */ + for( j = N-1, jaj = (((N-1)*(2*LDA+N-2)) >> 1), jx = (N-1)*INCX; + j >= 0; j--, jx -= INCX ) + { + t0 = X[jx]; + for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 1, ix += INCX ) + { X[ix] -= t0 * A[iaij]; } + lda -= 1; jaj -= lda; + } +/* + * End of ATL_dreftpsvUNU + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvUTN.c b/scikits/learn/src/cblas/ATL_dreftpsvUTN.c new file mode 100644 index 0000000000..1bac3ab098 --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvUTN.c @@ -0,0 +1,98 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvUTN +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvUTN( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasUpper, AtlasTrans, AtlasNonUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA; +/* .. + * .. Executable Statements .. + * + */ + for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += INCX ) + { + t0 = X[jx]; + for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 1, ix += INCX ) + { t0 -= A[iaij] * X[ix]; } + t0 /= A[iaij]; X[jx] = t0; jaj += lda; lda += 1; + } +/* + * End of ATL_dreftpsvUTN + */ +} diff --git a/scikits/learn/src/cblas/ATL_dreftpsvUTU.c b/scikits/learn/src/cblas/ATL_dreftpsvUTU.c new file mode 100644 index 0000000000..c70c8fec47 --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dreftpsvUTU.c @@ -0,0 +1,98 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" +#include "atlas_reflvl2.h" +#include "atlas_reflevel2.h" + +void ATL_dreftpsvUTU +( + const int N, + const double * A, + const int LDA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsvUTU( ... ) + * + * <=> + * + * ATL_dreftpsv( AtlasUpper, AtlasTrans, AtlasUnit, ... ) + * + * See ATL_dreftpsv for details. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double t0; + int i, iaij, ix, j, jaj, jx, lda = LDA; +/* .. + * .. Executable Statements .. + * + */ + for( j = 0, jaj = 0, jx = 0; j < N; j++, jx += INCX ) + { + t0 = X[jx]; + for( i = 0, iaij = jaj, ix = 0; i < j; i++, iaij += 1, ix += INCX ) + { t0 -= A[iaij] * X[ix]; } + X[jx] = t0; jaj += lda; lda += 1; + } +/* + * End of ATL_dreftpsvUTU + */ +} diff --git a/scikits/learn/src/cblas/ATL_dtpsv.c b/scikits/learn/src/cblas/ATL_dtpsv.c new file mode 100644 index 0000000000..887f33f0da --- /dev/null +++ b/scikits/learn/src/cblas/ATL_dtpsv.c @@ -0,0 +1,211 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ + +#include "atlas_refmisc.h" + +void ATL_dtpsv +( + const enum ATLAS_UPLO UPLO, + const enum ATLAS_TRANS TRANS, + const enum ATLAS_DIAG DIAG, + const int N, + const double * A, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_dreftpsv solves one of the systems of equations + * + * A * x = b, or A' * x = b, + * + * where b and x are n-element vectors and A is an n by n unit, or non- + * unit, upper or lower triangular matrix, supplied in packed form. + * + * No test for singularity or near-singularity is included in this + * routine. Such tests must be performed before calling this routine. + * + * Arguments + * ========= + * + * UPLO (input) const enum ATLAS_UPLO + * On entry, UPLO specifies whether the matrix is an upper or + * lower triangular matrix as follows: + * + * UPLO = AtlasUpper A is an upper triangular matrix. + * + * UPLO = AtlasLower A is a lower triangular matrix. + * + * Unchanged on exit. + * + * TRANS (input) const enum ATLAS_TRANS + * On entry, TRANS specifies the equations to be solved as fol- + * lows: + * + * TRANS = AtlasNoTrans A * x = b, + * + * TRANS = AtlasConj A * x = b, + * + * TRANS = AtlasTrans A' * x = b, + * + * TRANS = AtlasTrans A' * x = b. + * + * Unchanged on exit. + * + * DIAG (input) const enum ATLAS_DIAG + * On entry, DIAG specifies whether or not A is unit triangu- + * lar as follows: + * + * DIAG = AtlasUnit A is assumed to be unit triangular, + * + * DIAG = AtlasNonUnit A is not assumed to be unit trian- + * gular. + * + * Unchanged on exit. + * + * N (input) const int + * On entry, N specifies the order of the matrix A. N must be at + * least zero. Unchanged on exit. + * + * A (input) const double * + * On entry, A points to an array of size equal to or greater + * than (( n*(n+1) ) / 2) * sizeof( double ). Before entry + * with UPLO = AtlasUpper, the array A must contain the upper + * triangular matrix packed sequentially, column by column, so + * that A[ 0 ] contains a(0,0), A[ 1 ] and A[ 2 ] contain a(0,1) + * and a(1,1) respectively, and so on. Before entry with + * UPLO = AtlasLower, the array A must contain the lower tri- + * angular matrix packed sequentially, column by column, so that + * A[ 0 ] contains a(0,0), A[ 1 ] and A[ 2 ] contain a(1,0) and + * a( 2, 0 ) respectively, and so on. + * + * Note that when DIAG = AtlasUnit, the diagonal elements of A + * are not referenced, but are assumed to be unity. Unchanged + * on exit. + * + * X (input/output) double * + * On entry, X points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCX ) ) * sizeof( double ), + * that contains the vector x. Before entry, the incremented ar- + * ray X must contain the n element right-hand side vector b. On + * exit, X is overwritten with the solution vector x. + * + * INCX (input) const int + * On entry, INCX specifies the increment for the elements of X. + * INCX must not be zero. Unchanged on exit. + * + * --------------------------------------------------------------------- + */ +/* .. + * .. Executable Statements .. + * + */ + if( N == 0 ) return; + + if( UPLO == AtlasUpper ) + { + if( ( TRANS == AtlasNoTrans ) || ( TRANS == AtlasConj ) ) + { + if( DIAG == AtlasNonUnit ) + { + ATL_dreftpsvUNN( N, A, 1, X, INCX ); + } + else + { + ATL_dreftpsvUNU( N, A, 1, X, INCX ); + } + } + else + { + if( DIAG == AtlasNonUnit ) + { + ATL_dreftpsvUTN( N, A, 1, X, INCX ); + } + else + { + ATL_dreftpsvUTU( N, A, 1, X, INCX ); + } + } + } + else + { + if( ( TRANS == AtlasNoTrans ) || ( TRANS == AtlasConj ) ) + { + if( DIAG == AtlasNonUnit ) + { + ATL_dreftpsvLNN( N, A, N, X, INCX ); + } + else + { + ATL_dreftpsvLNU( N, A, N, X, INCX ); + } + } + else + { + if( DIAG == AtlasNonUnit ) + { + ATL_dreftpsvLTN( N, A, N, X, INCX ); + } + else + { + ATL_dreftpsvLTU( N, A, N, X, INCX ); + } + } + } +/* + * End of ATL_dreftpsv + */ +} diff --git a/scikits/learn/src/cblas/atlas_enum.h b/scikits/learn/src/cblas/atlas_enum.h new file mode 100644 index 0000000000..1999eefc38 --- /dev/null +++ b/scikits/learn/src/cblas/atlas_enum.h @@ -0,0 +1,55 @@ +/* + * Automatically Tuned Linear Algebra Software v3.6.0 + * (C) Copyright 1997 R. Clint Whaley + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the ATLAS group or the names of its contributers may + * not be used to endorse or promote products derived from this + * software without specific written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef ATLAS_ENUM_H + #define ATLAS_ENUM_H + + #define CBLAS_ENUM_ONLY + #include "cblas.h" + #undef CBLAS_ENUM_ONLY + + #define ATLAS_ORDER CBLAS_ORDER + #define AtlasRowMajor CblasRowMajor + #define AtlasColMajor CblasColMajor + #define ATLAS_TRANS CBLAS_TRANSPOSE + #define AtlasNoTrans CblasNoTrans + #define AtlasTrans CblasTrans + #define AtlasConjTrans CblasConjTrans + #define ATLAS_UPLO CBLAS_UPLO + #define AtlasUpper CblasUpper + #define AtlasLower CblasLower + #define ATLAS_DIAG CBLAS_DIAG + #define AtlasNonUnit CblasNonUnit + #define AtlasUnit CblasUnit + #define ATLAS_SIDE CBLAS_SIDE + #define AtlasLeft CblasLeft + #define AtlasRight CblasRight + +#endif + diff --git a/scikits/learn/src/cblas/atlas_reflevel2.h b/scikits/learn/src/cblas/atlas_reflevel2.h new file mode 100644 index 0000000000..8e82a3f3d7 --- /dev/null +++ b/scikits/learn/src/cblas/atlas_reflevel2.h @@ -0,0 +1,791 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +#ifndef ATLAS_REFLEVEL2_H +#define ATLAS_REFLEVEL2_H + +#include "atlas_enum.h" +/* + * ===================================================================== + * Prototypes for Level 2 Reference ATLAS BLAS routines + * ===================================================================== + */ +void ATL_srefgbmv +( + const enum ATLAS_TRANS, + const int, const int, + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgpmv +( + const enum ATLAS_UPLO, + const enum ATLAS_TRANS, + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgemv +( + const enum ATLAS_TRANS, + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgpr +( + const enum ATLAS_UPLO, + const int, const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefger +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefsbmv +( + const enum ATLAS_UPLO, + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefspmv +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefspr +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + float * +); + +void ATL_srefspr2 +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + const float *, const int, + float * +); + +void ATL_srefsymv +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefsyr +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_srefsyr2 +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, + float *, const int +); + +void ATL_sreftpsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, + float *, const int +); + +void ATL_sreftrmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, const int, + float *, const int +); + +void ATL_drefgbmv +( + const enum ATLAS_TRANS, + const int, const int, + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgpmv +( + const enum ATLAS_UPLO, + const enum ATLAS_TRANS, + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgemv +( + const enum ATLAS_TRANS, + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgpr +( + const enum ATLAS_UPLO, + const int, const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefger +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefsbmv +( + const enum ATLAS_UPLO, + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefspmv +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefspr +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + double * +); + +void ATL_drefspr2 +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + const double *, const int, + double * +); + +void ATL_drefsymv +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefsyr +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_drefsyr2 +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, + double *, const int +); + +void ATL_dreftpsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, + double *, const int +); + +void ATL_dreftrmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, const int, + double *, const int +); + +void ATL_crefgbmv +( + const enum ATLAS_TRANS, + const int, const int, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmv +( + const enum ATLAS_UPLO, + const enum ATLAS_TRANS, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgemv +( + const enum ATLAS_TRANS, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgprc +( + const enum ATLAS_UPLO, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefgpru +( + const enum ATLAS_UPLO, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefgerc +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefgeru +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefhbmv +( + const enum ATLAS_UPLO, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhpmv +( + const enum ATLAS_UPLO, + const int, + const float *, + const float *, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhpr +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + float * +); + +void ATL_crefhpr2 +( + const enum ATLAS_UPLO, + const int, + const float *, + const float *, const int, + const float *, const int, + float * +); + +void ATL_crefhemv +( + const enum ATLAS_UPLO, + const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefher +( + const enum ATLAS_UPLO, + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_crefher2 +( + const enum ATLAS_UPLO, + const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, + float *, const int +); + +void ATL_creftpsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, + float *, const int +); + +void ATL_creftrmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const float *, const int, + float *, const int +); + +void ATL_zrefgbmv +( + const enum ATLAS_TRANS, + const int, const int, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmv +( + const enum ATLAS_UPLO, + const enum ATLAS_TRANS, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgemv +( + const enum ATLAS_TRANS, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgprc +( + const enum ATLAS_UPLO, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefgpru +( + const enum ATLAS_UPLO, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefgerc +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefgeru +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefhbmv +( + const enum ATLAS_UPLO, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhpmv +( + const enum ATLAS_UPLO, + const int, + const double *, + const double *, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhpr +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + double * +); + +void ATL_zrefhpr2 +( + const enum ATLAS_UPLO, + const int, + const double *, + const double *, const int, + const double *, const int, + double * +); + +void ATL_zrefhemv +( + const enum ATLAS_UPLO, + const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefher +( + const enum ATLAS_UPLO, + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_zrefher2 +( + const enum ATLAS_UPLO, + const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, + double *, const int +); + +void ATL_zreftpsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, + double *, const int +); + +void ATL_zreftrmv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsv +( + const enum ATLAS_UPLO, const enum ATLAS_TRANS, const enum ATLAS_DIAG, + const int, + const double *, const int, + double *, const int +); + +#endif +/* + * End of atlas_reflevel2.h + */ diff --git a/scikits/learn/src/cblas/atlas_reflvl2.h b/scikits/learn/src/cblas/atlas_reflvl2.h new file mode 100644 index 0000000000..e64f90d26b --- /dev/null +++ b/scikits/learn/src/cblas/atlas_reflvl2.h @@ -0,0 +1,3187 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +#ifndef ATLAS_REFLVL2_H +#define ATLAS_REFLVL2_H +/* + * ===================================================================== + * Prototypes for Level 2 Reference Internal ATLAS BLAS routines + * ===================================================================== + */ +void ATL_srefgbmvN +( + const int, const int, + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgbmvT +( + const int, const int, + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgpmvUN +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgpmvUT +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgpmvLN +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgpmvLT +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgemvN +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgemvT +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefgprL +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefgprU +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefsbmvL +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefsbmvU +( + const int, const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefspmvL +( + const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefspmvU +( + const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefsprL +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_srefsprU +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_srefspr2L +( + const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefspr2U +( + const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefsymvL +( + const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefsymvU +( + const int, + const float, + const float *, const int, + const float *, const int, + const float, + float *, const int +); + +void ATL_srefsyrL +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_srefsyrU +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_srefsyr2L +( + const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_srefsyr2U +( + const int, + const float, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvLNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvLNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvLTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvLTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvUNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvUNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvUTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbmvUTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpmvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrmvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvLNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvLNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvLTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvLTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvUNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvUNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvUTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftbsvUTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftpsvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_sreftrsvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_drefgbmvN +( + const int, const int, + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgbmvT +( + const int, const int, + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgpmvUN +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgpmvUT +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgpmvLN +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgpmvLT +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgemvN +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgemvT +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefgprL +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefgprU +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefsbmvL +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefsbmvU +( + const int, const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefspmvL +( + const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefspmvU +( + const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefsprL +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_drefsprU +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_drefspr2L +( + const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefspr2U +( + const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefsymvL +( + const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefsymvU +( + const int, + const double, + const double *, const int, + const double *, const int, + const double, + double *, const int +); + +void ATL_drefsyrL +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_drefsyrU +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_drefsyr2L +( + const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_drefsyr2U +( + const int, + const double, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvLNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvLNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvLTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvLTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvUNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvUNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvUTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbmvUTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpmvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrmvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvLNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvLNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvLTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvLTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvUNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvUNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvUTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftbsvUTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftpsvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_dreftrsvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_crefgbmvN +( + const int, const int, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgbmvT +( + const int, const int, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgbmvC +( + const int, const int, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgbmvH +( + const int, const int, + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvUN +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvUT +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvUC +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvUH +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvLN +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvLT +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvLC +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgpmvLH +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgemvN +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgemvT +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgemvC +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgemvH +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefgprcL +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefgprcU +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefgpruL +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefgpruU +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefhbmvL +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhbmvU +( + const int, const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhpmvL +( + const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhpmvU +( + const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhprL +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_crefhprU +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_crefhpr2L +( + const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefhpr2U +( + const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefhemvL +( + const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefhemvU +( + const int, + const float *, + const float *, const int, + const float *, const int, + const float *, + float *, const int +); + +void ATL_crefherL +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_crefherU +( + const int, + const float, + const float *, const int, + float *, const int +); + +void ATL_crefher2L +( + const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_crefher2U +( + const int, + const float *, + const float *, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLCN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLCU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLHN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvLHU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUCN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUCU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUHN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbmvUHU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvLHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpmvUHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvLHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrmvUHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLCN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLCU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLHN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvLHU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUNN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUNU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUTN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUTU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUCN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUCU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUHN +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftbsvUHU +( + const int, const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvLHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftpsvUHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvLHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUNN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUNU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUTN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUTU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUCN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUCU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUHN +( + const int, + const float *, const int, + float *, const int +); + +void ATL_creftrsvUHU +( + const int, + const float *, const int, + float *, const int +); + +void ATL_zrefgbmvN +( + const int, const int, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgbmvT +( + const int, const int, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgbmvC +( + const int, const int, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgbmvH +( + const int, const int, + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvUN +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvUT +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvUC +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvUH +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvLN +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvLT +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvLC +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgpmvLH +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgemvN +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgemvT +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgemvC +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgemvH +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefgprcL +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefgprcU +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefgpruL +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefgpruU +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefhbmvL +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhbmvU +( + const int, const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhpmvL +( + const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhpmvU +( + const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhprL +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_zrefhprU +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_zrefhpr2L +( + const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefhpr2U +( + const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefhemvL +( + const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefhemvU +( + const int, + const double *, + const double *, const int, + const double *, const int, + const double *, + double *, const int +); + +void ATL_zrefherL +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_zrefherU +( + const int, + const double, + const double *, const int, + double *, const int +); + +void ATL_zrefher2L +( + const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zrefher2U +( + const int, + const double *, + const double *, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLCN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLCU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLHN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvLHU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUCN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUCU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUHN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbmvUHU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvLHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpmvUHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvLHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrmvUHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLCN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLCU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLHN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvLHU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUNN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUNU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUTN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUTU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUCN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUCU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUHN +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftbsvUHU +( + const int, const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvLHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftpsvUHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvLHU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUNN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUNU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUTN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUTU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUCN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUCU +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUHN +( + const int, + const double *, const int, + double *, const int +); + +void ATL_zreftrsvUHU +( + const int, + const double *, const int, + double *, const int +); + +#endif +/* + * End of atlas_reflvl2.h + */ diff --git a/scikits/learn/src/cblas/atlas_refmisc.h b/scikits/learn/src/cblas/atlas_refmisc.h new file mode 100644 index 0000000000..47d4ba980e --- /dev/null +++ b/scikits/learn/src/cblas/atlas_refmisc.h @@ -0,0 +1,370 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +#ifndef ATL_REFMISC_H +#define ATL_REFMISC_H +/* + * ===================================================================== + * Include files + * ===================================================================== + */ +#include <math.h> +#include "atlas_enum.h" +/* + * ===================================================================== + * #define macro constants + * ===================================================================== + */ +#define ATL_sNONE (-1.0f) +#define ATL_sNTWO (-2.0f) +#define ATL_sONE ( 1.0f) +#define ATL_sZERO ( 0.0f) + +#define ATL_dNONE (-1.0) +#define ATL_dNTWO (-2.0) +#define ATL_dONE ( 1.0) +#define ATL_dZERO ( 0.0) +/* + * ===================================================================== + * # macro functions + * ===================================================================== + */ +#define Msabs( a_ ) ( ( (a_) < ATL_sZERO ) ? -(a_) : (a_) ) + +#define Mszero( a_r_, a_i_ ) \ + ( ( (a_r_) == ATL_sZERO ) && ( (a_i_) == ATL_sZERO ) ) + +#define Msone( a_r_, a_i_ ) \ + ( ( (a_r_) == ATL_sONE ) && ( (a_i_) == ATL_sZERO ) ) + +#define Msscl( a_r_, a_i_, c_r_, c_i_ ) \ + { \ + register float tmp_r_, tmp_i_; \ + tmp_r_ = (a_r_) * c_r_ - (a_i_) * c_i_; \ + tmp_i_ = (a_r_) * c_i_ + (a_i_) * c_r_; \ + c_r_ = tmp_r_; \ + c_i_ = tmp_i_; \ + } +/* + * Msdiv performs complex division in real arithmetic + * a_r_ + i * a_i_ = ( a_r_ + i * a_i_ ) / ( b_r_ + i * b_i_ ); + * The algorithm is due to Robert L. Smith and can be found in D. Knuth, + * The art of Computer Programming, Vol.2, p.195 + */ +#define Msdiv( b_r_, b_i_, a_r_, a_i_ ) \ + { \ + register float c_i_, c_r_, tmp1_, tmp2_; \ + if( Msabs( b_i_ ) < Msabs( b_r_ ) ) \ + { \ + tmp1_ = (b_i_) / (b_r_); \ + tmp2_ = (b_r_) + (b_i_) * tmp1_; \ + c_r_ = ( (a_r_) + (a_i_) * tmp1_ ) / tmp2_; \ + c_i_ = ( (a_i_) - (a_r_) * tmp1_ ) / tmp2_; \ + } \ + else \ + { \ + tmp1_ = (b_r_) / (b_i_); \ + tmp2_ = (b_i_) + (b_r_) * tmp1_; \ + c_r_ = ( (a_i_) + (a_r_) * tmp1_ ) / tmp2_; \ + c_i_ = ( -(a_r_) + (a_i_) * tmp1_ ) / tmp2_; \ + } \ + a_r_ = c_r_; \ + a_i_ = c_i_; \ + } + +#define Mdabs( a_ ) ( ( (a_) < ATL_dZERO ) ? -(a_) : (a_) ) + +#define Mdzero( a_r_, a_i_ ) \ + ( ( (a_r_) == ATL_dZERO ) && ( (a_i_) == ATL_dZERO ) ) + +#define Mdone( a_r_, a_i_ ) \ + ( ( (a_r_) == ATL_dONE ) && ( (a_i_) == ATL_dZERO ) ) + +#define Mdscl( a_r_, a_i_, c_r_, c_i_ ) \ + { \ + register double tmp_r_, tmp_i_; \ + tmp_r_ = (a_r_) * c_r_ - (a_i_) * c_i_; \ + tmp_i_ = (a_r_) * c_i_ + (a_i_) * c_r_; \ + c_r_ = tmp_r_; \ + c_i_ = tmp_i_; \ + } +/* + * Mddiv performs complex division in real arithmetic + * a_r_ + i * a_i_ = ( a_r_ + i * a_i_ ) / ( b_r_ + i * b_i_ ); + * The algorithm is due to Robert L. Smith and can be found in D. Knuth, + * The art of Computer Programming, Vol.2, p.195 + */ +#define Mddiv( b_r_, b_i_, a_r_, a_i_ ) \ + { \ + register double c_i_, c_r_, tmp1_, tmp2_; \ + if( Mdabs( b_i_ ) < Mdabs( b_r_ ) ) \ + { \ + tmp1_ = (b_i_) / (b_r_); \ + tmp2_ = (b_r_) + (b_i_) * tmp1_; \ + c_r_ = ( (a_r_) + (a_i_) * tmp1_ ) / tmp2_; \ + c_i_ = ( (a_i_) - (a_r_) * tmp1_ ) / tmp2_; \ + } \ + else \ + { \ + tmp1_ = (b_r_) / (b_i_); \ + tmp2_ = (b_i_) + (b_r_) * tmp1_; \ + c_r_ = ( (a_i_) + (a_r_) * tmp1_ ) / tmp2_; \ + c_i_ = ( -(a_r_) + (a_i_) * tmp1_ ) / tmp2_; \ + } \ + a_r_ = c_r_; \ + a_i_ = c_i_; \ + } + +#define Mmin( a_, b_ ) ( ( (a_) < (b_) ) ? (a_) : (b_) ) + +#define Mmax( a_, b_ ) ( ( (a_) > (b_) ) ? (a_) : (b_) ) + +#define Mmul( a_r_, a_i_, b_r_, b_i_, c_r_, c_i_ ) \ + { \ + c_r_ = (a_r_) * (b_r_) - (a_i_) * (b_i_); \ + c_i_ = (a_r_) * (b_i_) + (a_i_) * (b_r_); \ + } + +#define Mmla( a_r_, a_i_, b_r_, b_i_, c_r_, c_i_ ) \ + { \ + c_r_ += (a_r_) * (b_r_) - (a_i_) * (b_i_); \ + c_i_ += (a_r_) * (b_i_) + (a_i_) * (b_r_); \ + } + +#define Mmls( a_r_, a_i_, b_r_, b_i_, c_r_, c_i_ ) \ + { \ + c_r_ -= (a_r_) * (b_r_) - (a_i_) * (b_i_); \ + c_i_ -= (a_r_) * (b_i_) + (a_i_) * (b_r_); \ + } + +#define Mset( a_r_, a_i_, b_r_, b_i_ ) \ + { \ + b_r_ = (a_r_); \ + b_i_ = (a_i_); \ + } + +#define Mselscal( al_, a_ ) \ + { \ + if( (al_) == ATL_sZERO ) { (a_) = ATL_sZERO; } \ + else if( (al_) != ATL_sONE ) { (a_) *= (al_); } \ + } + +#define Mdelscal( al_, a_ ) \ + { \ + if( (al_) == ATL_dZERO ) { (a_) = ATL_dZERO; } \ + else if( (al_) != ATL_dONE ) { (a_) *= (al_); } \ + } + +#define Mcelscal( al_r_, al_i_, a_r_, a_i_ ) \ + { \ + if( Mszero( (al_r_), (al_i_) ) ) \ + { (a_r_) = (a_i_) = ATL_sZERO; } \ + else if( ! Msone( (al_r_), (al_i_) ) ) \ + { Msscl( (al_r_), (al_i_), (a_r_), (a_i_) ); } \ + } + +#define Mzelscal( al_r_, al_i_, a_r_, a_i_ ) \ + { \ + if( Mdzero( (al_r_), (al_i_) ) ) \ + { (a_r_) = (a_i_) = ATL_dZERO; } \ + else if( ! Mdone( (al_r_), (al_i_) ) ) \ + { Mdscl( (al_r_), (al_i_), (a_r_), (a_i_) ); } \ + } + +#define Msvscal( n_, al_, x_, incx_ ) \ + { \ + int i_, ix_; \ + if( (al_) == ATL_sZERO ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx_) ) \ + { (x_)[ix_] = ATL_sZERO; } \ + } \ + else if( (al_) != ATL_sONE ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx_) ) \ + { (x_)[ix_] *= (al_); } \ + } \ + } + +#define Mdvscal( n_, al_, x_, incx_ ) \ + { \ + int i_, ix_; \ + if( (al_) == ATL_dZERO ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx_) ) \ + { (x_)[ix_] = ATL_dZERO; } \ + } \ + else if( (al_) != ATL_dONE ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx_) ) \ + { (x_)[ix_] *= (al_); } \ + } \ + } + +#define Mcvscal( n_, al_, x_, incx_ ) \ + { \ + int i_, ix_, incx2_ = ( 2 * (incx_) ); \ + if( Mszero( (al_)[0], (al_)[1] ) ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx2_) ) \ + { (x_)[ix_] = (x_)[ix_+1] = ATL_sZERO; } \ + } \ + else if( ! Msone( (al_)[0], (al_)[1] ) ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx2_) ) \ + { Msscl( (al_)[0], (al_)[1], (x_)[ix_], (x_)[ix_+1] ); } \ + } \ + } + +#define Mzvscal( n_, al_, x_, incx_ ) \ + { \ + int i_, ix_, incx2_ = ( 2 * (incx_) ); \ + if( Mdzero( (al_)[0], (al_)[1] ) ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx2_) ) \ + { (x_)[ix_] = (x_)[ix_+1] = ATL_dZERO; } \ + } \ + else if( ! Mdone( (al_)[0], (al_)[1] ) ) \ + { \ + for( i_ = 0, ix_ = 0; i_ < (n_); i_++, ix_ += (incx2_) ) \ + { Mdscl( (al_)[0], (al_)[1], (x_)[ix_], (x_)[ix_+1] ); } \ + } \ + } + +#define Msgescal( m_, n_, al_, a_, lda_ ) \ + { \ + int i_, iaij_, j_, jaj_; \ + if( (al_) == ATL_sZERO ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += (lda_) ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 1 ) \ + { (a_)[iaij_] = ATL_sZERO; } \ + } \ + } \ + else if( (al_) != ATL_sONE ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += (lda_) ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 1 ) \ + { (a_)[iaij_] *= (al_); } \ + } \ + } \ + } + +#define Mdgescal( m_, n_, al_, a_, lda_ ) \ + { \ + int i_, iaij_, j_, jaj_; \ + if( (al_) == ATL_dZERO ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += (lda_) ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 1 ) \ + { (a_)[iaij_] = ATL_dZERO; } \ + } \ + } \ + else if( (al_) != ATL_dONE ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += (lda_) ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 1 ) \ + { (a_)[iaij_] *= (al_); } \ + } \ + } \ + } + +#define Mcgescal( m_, n_, al_, a_, lda_ ) \ + { \ + int i_, iaij_, j_, jaj_, lda2_ = ( (lda_) << 1 ); \ + if( Mszero( (al_)[0], (al_)[1] ) ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += lda2_ ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 2 ) \ + { (a_)[iaij_] = (a_)[iaij_+1] = ATL_sZERO; } \ + } \ + } \ + else if( ! Msone( (al_)[0], (al_)[1] ) ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += lda2_ ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 2 ) \ + { \ + Msscl( (al_)[0], (al_)[1], (a_)[iaij_], (a_)[iaij_+1] ); \ + } \ + } \ + } \ + } + +#define Mzgescal( m_, n_, al_, a_, lda_ ) \ + { \ + int i_, iaij_, j_, jaj_, lda2_ = ( (lda_) << 1 ); \ + if( Mdzero( (al_)[0], (al_)[1] ) ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += lda2_ ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 2 ) \ + { (a_)[iaij_] = (a_)[iaij_+1] = ATL_dZERO; } \ + } \ + } \ + else if( ! Mdone( (al_)[0], (al_)[1] ) ) \ + { \ + for( j_ = 0, jaj_ = 0; j_ < (n_); j_++, jaj_ += lda2_ ) \ + { \ + for( i_ = 0, iaij_ = jaj_; i_ < (m_); i_++, iaij_ += 2 ) \ + { \ + Mdscl( (al_)[0], (al_)[1], (a_)[iaij_], (a_)[iaij_+1] ); \ + } \ + } \ + } \ + } + +#endif +/* + * End of atlas_refmisc.h + */ diff --git a/scikits/learn/src/cblas/cblas.h b/scikits/learn/src/cblas/cblas.h new file mode 100644 index 0000000000..4087ffb922 --- /dev/null +++ b/scikits/learn/src/cblas/cblas.h @@ -0,0 +1,596 @@ +#ifndef CBLAS_H + +#ifndef CBLAS_ENUM_DEFINED_H + #define CBLAS_ENUM_DEFINED_H + enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102 }; + enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, + AtlasConj=114}; + enum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; + enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; + enum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; +#endif + +#ifndef CBLAS_ENUM_ONLY +#define CBLAS_H +#define CBLAS_INDEX int + +int cblas_errprn(int ierr, int info, char *form, ...); + +/* + * =========================================================================== + * Prototypes for level 1 BLAS functions (complex are recast as routines) + * =========================================================================== + */ +float cblas_sdsdot(const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY); +double cblas_dsdot(const int N, const float *X, const int incX, const float *Y, + const int incY); +float cblas_sdot(const int N, const float *X, const int incX, + const float *Y, const int incY); +double cblas_ddot(const int N, const double *X, const int incX, + const double *Y, const int incY); +/* + * Functions having prefixes Z and C only + */ +void cblas_cdotu_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu); +void cblas_cdotc_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc); + +void cblas_zdotu_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu); +void cblas_zdotc_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc); + + +/* + * Functions having prefixes S D SC DZ + */ +float cblas_snrm2(const int N, const float *X, const int incX); +float cblas_sasum(const int N, const float *X, const int incX); + +double cblas_dnrm2(const int N, const double *X, const int incX); +double cblas_dasum(const int N, const double *X, const int incX); + +float cblas_scnrm2(const int N, const void *X, const int incX); +float cblas_scasum(const int N, const void *X, const int incX); + +double cblas_dznrm2(const int N, const void *X, const int incX); +double cblas_dzasum(const int N, const void *X, const int incX); + + +/* + * Functions having standard 4 prefixes (S D C Z) + */ +CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX); +CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX); +CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX); +CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX); + +/* + * =========================================================================== + * Prototypes for level 1 BLAS routines + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (s, d, c, z) + */ +void cblas_sswap(const int N, float *X, const int incX, + float *Y, const int incY); +void cblas_scopy(const int N, const float *X, const int incX, + float *Y, const int incY); +void cblas_saxpy(const int N, const float alpha, const float *X, + const int incX, float *Y, const int incY); +void catlas_saxpby(const int N, const float alpha, const float *X, + const int incX, const float beta, float *Y, const int incY); +void catlas_sset + (const int N, const float alpha, float *X, const int incX); + +void cblas_dswap(const int N, double *X, const int incX, + double *Y, const int incY); +void cblas_dcopy(const int N, const double *X, const int incX, + double *Y, const int incY); +void cblas_daxpy(const int N, const double alpha, const double *X, + const int incX, double *Y, const int incY); +void catlas_daxpby(const int N, const double alpha, const double *X, + const int incX, const double beta, double *Y, const int incY); +void catlas_dset + (const int N, const double alpha, double *X, const int incX); + +void cblas_cswap(const int N, void *X, const int incX, + void *Y, const int incY); +void cblas_ccopy(const int N, const void *X, const int incX, + void *Y, const int incY); +void cblas_caxpy(const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY); +void catlas_caxpby(const int N, const void *alpha, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void catlas_cset + (const int N, const void *alpha, void *X, const int incX); + +void cblas_zswap(const int N, void *X, const int incX, + void *Y, const int incY); +void cblas_zcopy(const int N, const void *X, const int incX, + void *Y, const int incY); +void cblas_zaxpy(const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY); +void catlas_zaxpby(const int N, const void *alpha, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void catlas_zset + (const int N, const void *alpha, void *X, const int incX); + + +/* + * Routines with S and D prefix only + */ +void cblas_srotg(float *a, float *b, float *c, float *s); +void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); +void cblas_srot(const int N, float *X, const int incX, + float *Y, const int incY, const float c, const float s); +void cblas_srotm(const int N, float *X, const int incX, + float *Y, const int incY, const float *P); + +void cblas_drotg(double *a, double *b, double *c, double *s); +void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); +void cblas_drot(const int N, double *X, const int incX, + double *Y, const int incY, const double c, const double s); +void cblas_drotm(const int N, double *X, const int incX, + double *Y, const int incY, const double *P); + + +/* + * Routines with S D C Z CS and ZD prefixes + */ +void cblas_sscal(const int N, const float alpha, float *X, const int incX); +void cblas_dscal(const int N, const double alpha, double *X, const int incX); +void cblas_cscal(const int N, const void *alpha, void *X, const int incX); +void cblas_zscal(const int N, const void *alpha, void *X, const int incX); +void cblas_csscal(const int N, const float alpha, void *X, const int incX); +void cblas_zdscal(const int N, const double alpha, void *X, const int incX); + +/* + * Extra reference routines provided by ATLAS, but not mandated by the standard + */ +void cblas_crotg(void *a, void *b, void *c, void *s); +void cblas_zrotg(void *a, void *b, void *c, void *s); +void cblas_csrot(const int N, void *X, const int incX, void *Y, const int incY, + const float c, const float s); +void cblas_zdrot(const int N, void *X, const int incX, void *Y, const int incY, + const double c, const double s); + +/* + * =========================================================================== + * Prototypes for level 2 BLAS + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (S, D, C, Z) + */ +void cblas_sgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *X, const int incX, const float beta, + float *Y, const int incY); +void cblas_sgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const float alpha, + const float *A, const int lda, const float *X, + const int incX, const float beta, float *Y, const int incY); +void cblas_strmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, + float *X, const int incX); +void cblas_stbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX); +void cblas_stpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX); +void cblas_strsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, float *X, + const int incX); +void cblas_stbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX); +void cblas_stpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX); + +void cblas_dgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY); +void cblas_dgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const double alpha, + const double *A, const int lda, const double *X, + const int incX, const double beta, double *Y, const int incY); +void cblas_dtrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, + double *X, const int incX); +void cblas_dtbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX); +void cblas_dtpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX); +void cblas_dtrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, double *X, + const int incX); +void cblas_dtbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX); +void cblas_dtpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX); + +void cblas_cgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY); +void cblas_cgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const void *alpha, + const void *A, const int lda, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void cblas_ctrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX); +void cblas_ctbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ctpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); +void cblas_ctrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX); +void cblas_ctbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ctpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); + +void cblas_zgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY); +void cblas_zgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const void *alpha, + const void *A, const int lda, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void cblas_ztrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX); +void cblas_ztbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ztpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); +void cblas_ztrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX); +void cblas_ztbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ztpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); + + +/* + * Routines with S and D prefixes only + */ +void cblas_ssymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_ssbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_sspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *Ap, + const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_sger(const enum CBLAS_ORDER Order, const int M, const int N, + const float alpha, const float *X, const int incX, + const float *Y, const int incY, float *A, const int lda); +void cblas_ssyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *A, const int lda); +void cblas_sspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *Ap); +void cblas_ssyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A, + const int lda); +void cblas_sspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A); + +void cblas_dsymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *A, + const int lda, const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dsbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const double alpha, const double *A, + const int lda, const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *Ap, + const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dger(const enum CBLAS_ORDER Order, const int M, const int N, + const double alpha, const double *X, const int incX, + const double *Y, const int incY, double *A, const int lda); +void cblas_dsyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *A, const int lda); +void cblas_dspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *Ap); +void cblas_dsyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A, + const int lda); +void cblas_dspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A); + + +/* + * Routines with C and Z prefixes only + */ +void cblas_chemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_chbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_chpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *Ap, + const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_cgeru(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_cgerc(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_cher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, const int incX, + void *A, const int lda); +void cblas_chpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, + const int incX, void *A); +void cblas_cher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_chpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *Ap); + +void cblas_zhemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zhbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zhpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *Ap, + const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zgeru(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zgerc(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, const int incX, + void *A, const int lda); +void cblas_zhpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, + const int incX, void *A); +void cblas_zher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zhpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *Ap); + +/* + * =========================================================================== + * Prototypes for level 3 BLAS + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (S, D, C, Z) + */ +void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const float alpha, const float *A, + const int lda, const float *B, const int ldb, + const float beta, float *C, const int ldc); +void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc); +void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float beta, float *C, const int ldc); +void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc); +void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb); +void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb); + +void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const double alpha, const double *A, + const int lda, const double *B, const int ldb, + const double beta, double *C, const int ldc); +void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc); +void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double beta, double *C, const int ldc); +void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc); +void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb); +void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb); + +void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc); +void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc); +void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); +void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); + +void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc); +void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc); +void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); +void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); + + +/* + * Routines with prefixes C and Z only + */ +void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const void *A, const int lda, + const float beta, void *C, const int ldc); +void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const float beta, + void *C, const int ldc); +void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const void *A, const int lda, + const double beta, void *C, const int ldc); +void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const double beta, + void *C, const int ldc); + +int cblas_errprn(int ierr, int info, char *form, ...); + +#endif /* end #ifdef CBLAS_ENUM_ONLY */ +#endif diff --git a/scikits/learn/src/cblas/cblas_daxpy.c b/scikits/learn/src/cblas/cblas_daxpy.c new file mode 100644 index 0000000000..dce744b291 --- /dev/null +++ b/scikits/learn/src/cblas/cblas_daxpy.c @@ -0,0 +1,159 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" + +void cblas_daxpy +( + const int N, + const double ALPHA, + const double * X, + const int INCX, + double * Y, + const int INCY +) +{ +/* + * Purpose + * ======= + * + * ATL_drefaxpy performs the following operation: + * + * y := y + alpha * x, + * + * where alpha is a scalar and x and y are two n-vectors. + * + * Arguments + * ========= + * + * N (input) const int + * On entry, N specifies the length of the vector x. N must be + * at least zero. Unchanged on exit. + * + * ALPHA (input) const double + * On entry, ALPHA specifies the scalar alpha. When ALPHA is + * supplied as zero, then the entries of the incremented array X + * need not be set on input. Unchanged on exit. + * + * X (input) const double * + * On entry, X points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCX ) ) * sizeof( double ), + * that contains the vector x. Unchanged on exit. + * + * INCX (input) const int + * On entry, INCX specifies the increment for the elements of X. + * INCX must not be zero. Unchanged on exit. + * + * Y (input/output) double * + * On entry, Y points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCY ) ) * sizeof( double ), + * that contains the vector y. On exit, the entries of the in- + * cremented array Y are updated with the scaled entries of the + * incremented array X. + * + * INCY (input) const int + * On entry, INCY specifies the increment for the elements of Y. + * INCY must not be zero. Unchanged on exit. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register const double alpha = ALPHA; + register double x0, x1, x2, x3, y0, y1, y2, y3; + double * StX; + register int i; + int nu; + const int incX2 = 2 * INCX, incY2 = 2 * INCY, + incX3 = 3 * INCX, incY3 = 3 * INCY, + incX4 = 4 * INCX, incY4 = 4 * INCY; +/* .. + * .. Executable Statements .. + * + */ + if( ( N > 0 ) && ( alpha != ATL_dZERO ) ) + { + if( ( nu = ( N >> 2 ) << 2 ) != 0 ) + { + StX = (double *)X + nu * INCX; + + do + { + x0 = (*X); y0 = (*Y); x1 = X[INCX ]; y1 = Y[INCY ]; + x2 = X[incX2]; y2 = Y[incY2]; x3 = X[incX3]; y3 = Y[incY3]; + + *Y = y0 + alpha * x0; Y[INCY ] = y1 + alpha * x1; + Y[incY2] = y2 + alpha * x2; Y[incY3] = y3 + alpha * x3; + + X += incX4; + Y += incY4; + + } while( X != StX ); + } + + for( i = N - nu; i != 0; i-- ) + { + x0 = (*X); + y0 = (*Y); + + *Y = y0 + alpha * x0; + + X += INCX; + Y += INCY; + } + } +/* + * End of ATL_drefaxpy + */ +} diff --git a/scikits/learn/src/cblas/cblas_ddot.c b/scikits/learn/src/cblas/cblas_ddot.c new file mode 100644 index 0000000000..7f2fd32db4 --- /dev/null +++ b/scikits/learn/src/cblas/cblas_ddot.c @@ -0,0 +1,135 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" + +double cblas_ddot +( + const int N, + const double * X, + const int INCX, + const double * Y, + const int INCY +) +{ +/* + * Purpose + * ======= + * + * ATL_drefdot returns the dot product x^T * y of two n-vectors x and y. + * + * Arguments + * ========= + * + * N (input) const int + * On entry, N specifies the length of the vector x. N must be + * at least zero. Unchanged on exit. + * + * X (input) const double * + * On entry, X points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCX ) ) * sizeof( double ), + * that contains the vector x. Unchanged on exit. + * + * INCX (input) const int + * On entry, INCX specifies the increment for the elements of X. + * INCX must not be zero. Unchanged on exit. + * + * Y (input) const double * + * On entry, Y points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCY ) ) * sizeof( double ), + * that contains the vector y. Unchanged on exit. + * + * INCY (input) const int + * On entry, INCY specifies the increment for the elements of Y. + * INCY must not be zero. Unchanged on exit. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double dot = ATL_dZERO, x0, x1, x2, x3, + y0, y1, y2, y3; + double * StX; + register int i; + int nu; + const int incX2 = 2 * INCX, incY2 = 2 * INCY, + incX3 = 3 * INCX, incY3 = 3 * INCY, + incX4 = 4 * INCX, incY4 = 4 * INCY; +/* .. + * .. Executable Statements .. + * + */ + if( N > 0 ) + { + if( ( nu = ( N >> 2 ) << 2 ) != 0 ) + { + StX = (double *)X + nu * INCX; + + do + { + x0 = (*X); y0 = (*Y); x1 = X[INCX ]; y1 = Y[INCY ]; + x2 = X[incX2]; y2 = Y[incY2]; x3 = X[incX3]; y3 = Y[incY3]; + dot += x0 * y0; dot += x1 * y1; dot += x2 * y2; dot += x3 * y3; + X += incX4; Y += incY4; + } while( X != StX ); + } + + for( i = N - nu; i != 0; i-- ) + { x0 = (*X); y0 = (*Y); dot += x0 * y0; X += INCX; Y += INCY; } + } + return( dot ); +/* + * End of ATL_drefdot + */ +} diff --git a/scikits/learn/src/cblas/cblas_dnrm2.c b/scikits/learn/src/cblas/cblas_dnrm2.c new file mode 100644 index 0000000000..113faa5585 --- /dev/null +++ b/scikits/learn/src/cblas/cblas_dnrm2.c @@ -0,0 +1,206 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" + +double cblas_dnrm2 +( + const int N, + const double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_drefnrm2 returns the 2-norm of an n-vector x. + * + * Arguments + * ========= + * + * N (input) const int + * On entry, N specifies the length of the vector x. N must be + * at least zero. Unchanged on exit. + * + * X (input) const double * + * On entry, X points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCX ) ) * sizeof( double ), + * that contains the vector x. Unchanged on exit. + * + * INCX (input) const int + * On entry, INCX specifies the increment for the elements of X. + * INCX must not be zero. Unchanged on exit. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ + register double absxi, scale = ATL_dZERO, + ssq = ATL_dONE, temp, x0, x1, x2, x3, x4, + x5, x6, x7; + double * StX = (double *)(X) + N * INCX; + register int i; + int n = (int)(N), nu; + const int incX2 = 2 * INCX, incX3 = 3 * INCX, + incX4 = 4 * INCX, incX5 = 5 * INCX, + incX6 = 6 * INCX, incX7 = 7 * INCX, + incX8 = 8 * INCX; +/* .. + * .. Executable Statements .. + * + */ + if( ( N < 1 ) || ( INCX < 1 ) ) return( ATL_dZERO ); + else if( N == 1 ) return( Mdabs( *X ) ); + + while( (X != StX) && ( *X == ATL_dZERO ) ) { X += INCX; n--; } + + if( X == StX ) return( ATL_dZERO ); + + if( ( nu = ( n >> 3 ) << 3 ) != 0 ) + { + StX = (double *)X + nu * INCX; + + do + { + x0 = (*X); x4 = X[incX4]; x1 = X[INCX ]; x5 = X[incX5]; + x2 = X[incX2]; x6 = X[incX6]; x3 = X[incX3]; x7 = X[incX7]; + + absxi = Mdabs( x0 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x4 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x1 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x5 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x2 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x6 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x3 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + absxi = Mdabs( x7 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + X += incX8; + + } while( X != StX ); + } + + for( i = n - nu; i != 0; i-- ) + { + x0 = (*X); + + absxi = Mdabs( x0 ); + if( scale < absxi ) + { + temp = scale / absxi; scale = absxi; + ssq = ATL_dONE + ssq * ( temp * temp ); + } + else { temp = absxi / scale; ssq += temp * temp; } + + X += INCX; + } + return( scale * sqrt( ssq ) ); +/* + * End of ATL_drefnrm2 + */ +} diff --git a/scikits/learn/src/cblas/cblas_dscal.c b/scikits/learn/src/cblas/cblas_dscal.c new file mode 100644 index 0000000000..8d1e33b67b --- /dev/null +++ b/scikits/learn/src/cblas/cblas_dscal.c @@ -0,0 +1,183 @@ +/* --------------------------------------------------------------------- + * + * -- Automatically Tuned Linear Algebra Software (ATLAS) + * (C) Copyright 2000 All Rights Reserved + * + * -- ATLAS routine -- Version 3.2 -- December 25, 2000 + * + * -- Suggestions, comments, bugs reports should be sent to the follo- + * wing e-mail address: atlas@cs.utk.edu + * + * Author : Antoine P. Petitet + * University of Tennessee - Innovative Computing Laboratory + * Knoxville TN, 37996-1301, USA. + * + * --------------------------------------------------------------------- + * + * -- Copyright notice and Licensing terms: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in + * the documentation and/or other materials provided with the distri- + * bution. + * 3. The name of the University, the ATLAS group, or the names of its + * contributors may not be used to endorse or promote products deri- + * ved from this software without specific written permission. + * + * -- Disclaimer: + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- + * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO- + * RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN- + * CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --------------------------------------------------------------------- + */ +/* + * Include files + */ +#include "atlas_refmisc.h" + +void cblas_dscal +( + const int N, + const double ALPHA, + double * X, + const int INCX +) +{ +/* + * Purpose + * ======= + * + * ATL_drefscal performs the following operation: + * + * x := alpha * x, + * + * where alpha is a scalar and x is an n-vector. + * + * Arguments + * ========= + * + * N (input) const int + * On entry, N specifies the length of the vector x. N must be + * at least zero. Unchanged on exit. + * + * ALPHA (input) const double + * On entry, ALPHA specifies the scalar alpha. When ALPHA is + * supplied as zero, then the entries of the incremented array X + * need not be set on input. Unchanged on exit. + * + * X (input/output) double * + * On entry, X points to the first entry to be accessed of an + * incremented array of size equal to or greater than + * ( 1 + ( n - 1 ) * abs( INCX ) ) * sizeof( double ), + * that contains the vector x. On exit, the entries of the in- + * cremented array X are mutiplied by alpha. + * + * INCX (input) const int + * On entry, INCX specifies the increment for the elements of X. + * INCX must not be zero. Unchanged on exit. + * + * --------------------------------------------------------------------- + */ +/* + * .. Local Variables .. + */ +/* .. + * .. Executable Statements .. + * + */ + register double x0, x1, x2, x3, x4, x5, x6, x7; + register const double alpha = ALPHA; + double * StX; + register int i; + int nu; + const int incX2 = 2 * INCX, incX3 = 3 * INCX, + incX4 = 4 * INCX, incX5 = 5 * INCX, + incX6 = 6 * INCX, incX7 = 7 * INCX, + incX8 = 8 * INCX; +/* .. + * .. Executable Statements .. + * + */ + if( ( N > 0 ) && ( alpha != ATL_dONE ) ) + { + if( alpha == ATL_dZERO ) + { + if( ( nu = ( N >> 3 ) << 3 ) != 0 ) + { + StX = (double *)X + nu * INCX; + + do + { + (*X) = ATL_dZERO; X[incX4] = ATL_dZERO; + X[INCX ] = ATL_dZERO; X[incX5] = ATL_dZERO; + X[incX2] = ATL_dZERO; X[incX6] = ATL_dZERO; + X[incX3] = ATL_dZERO; X[incX7] = ATL_dZERO; + + X += incX8; + + } while( X != StX ); + } + + for( i = N - nu; i != 0; i-- ) + { + *X = ATL_dZERO; + X += INCX; + } + } + else + { + if( ( nu = ( N >> 3 ) << 3 ) != 0 ) + { + StX = (double *)X + nu * INCX; + + do + { + x0 = (*X); x4 = X[incX4]; + x1 = X[INCX ]; x5 = X[incX5]; + x2 = X[incX2]; x6 = X[incX6]; + x3 = X[incX3]; x7 = X[incX7]; + + x0 *= alpha; x4 *= alpha; + x1 *= alpha; x5 *= alpha; + x2 *= alpha; x6 *= alpha; + x3 *= alpha; x7 *= alpha; + + (*X) = x0; X[incX4] = x4; + X[INCX ] = x1; X[incX5] = x5; + X[incX2] = x2; X[incX6] = x6; + X[incX3] = x3; X[incX7] = x7; + + X += incX8; + + } while( X != StX ); + } + + for( i = N - nu; i != 0; i-- ) + { + x0 = (*X); + x0 *= alpha; + *X = x0; + X += INCX; + } + } + } +/* + * End of ATL_drefscal + */ +} diff --git a/scikits/learn/src/cblas/cblas_dtpsv.c b/scikits/learn/src/cblas/cblas_dtpsv.c new file mode 100644 index 0000000000..9fb871ccee --- /dev/null +++ b/scikits/learn/src/cblas/cblas_dtpsv.c @@ -0,0 +1,83 @@ +/* + * Automatically Tuned Linear Algebra Software v3.6.0 + * (C) Copyright 1999 R. Clint Whaley + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the ATLAS group or the names of its contributers may + * not be used to endorse or promote products derived from this + * software without specific written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#define DREAL +#include "atlas_refmisc.h" +#include "cblas.h" +#ifdef ATL_USEPTHREADS + #include "atlas_ptalias2.h" +#endif +#include "atlas_reflevel2.h" + +void cblas_dtpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TA, const enum CBLAS_DIAG Diag, + const int N, const double *A, double *X, const int incX) +{ + int info = 2000; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE ta; + #define x X + +#ifndef NoCblasErrorChecks + if (Order != CblasColMajor && Order != CblasRowMajor) + info = cblas_errprn(1, info, "Order must be %d or %d, but is set to %d", + CblasRowMajor, CblasColMajor, Order); + if (Uplo != CblasUpper && Uplo != CblasLower) + info = cblas_errprn(2, info, "UPLO must be %d or %d, but is set to %d", + CblasUpper, CblasLower, Uplo); + if (TA != CblasNoTrans && TA != CblasTrans && TA != CblasConjTrans) + info = cblas_errprn(3, info, + "TransA must be %d, %d or %d, but is set to %d", + CblasNoTrans, CblasTrans, CblasConjTrans, TA); + if (Diag != CblasUnit && Diag != CblasNonUnit) + info = cblas_errprn(4, info, "DIAG must be %d or %d, but is set to %d", + CblasUnit, CblasNonUnit, Diag); + + if (N < 0) info = cblas_errprn(5, info, + "N cannot be less than zero; is set to %d.", N); + if (!incX) info = cblas_errprn(8, info, + "incX cannot be zero; is set to %d.", incX); + if (info != 2000) + { + cblas_xerbla(info, "cblas_dtpsv", ""); + return; + } +#endif + if (incX < 0) x += (1-N)*incX; + if (Order == CblasColMajor) + ATL_dtpsv(Uplo, TA, Diag, N, A, x, incX); + else + { + uplo = ( (Uplo == CblasUpper) ? CblasLower : CblasUpper ); + if (TA == CblasNoTrans) ta = CblasTrans; + else ta = CblasNoTrans; + ATL_dtpsv(uplo, ta, Diag, N, A, x, incX); + } +} diff --git a/scikits/learn/src/cblas/cblas_errprn.c b/scikits/learn/src/cblas/cblas_errprn.c new file mode 100644 index 0000000000..3aa0cbb4d5 --- /dev/null +++ b/scikits/learn/src/cblas/cblas_errprn.c @@ -0,0 +1,50 @@ +/* + * Automatically Tuned Linear Algebra Software v3.6.0 + * (C) Copyright 1999 R. Clint Whaley + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the ATLAS group or the names of its contributers may + * not be used to endorse or promote products derived from this + * software without specific written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "atlas_refmisc.h" +#ifdef ATL_USEPTHREADS + #include "atlas_ptalias3.h" +#endif +#include "cblas.h" + +#include <stdio.h> +#include <stdarg.h> +int cblas_errprn(int ierr, int info, char *form, ...) +{ + va_list argptr; + + va_start(argptr, form); +#ifdef GCCWIN + vprintf(form, argptr); +#else + vfprintf(stderr, form, argptr); +#endif + va_end(argptr); + return(Mmin(ierr,info)); +} diff --git a/scikits/learn/src/cblas/cblas_xerbla.c b/scikits/learn/src/cblas/cblas_xerbla.c new file mode 100644 index 0000000000..7b68d1cff8 --- /dev/null +++ b/scikits/learn/src/cblas/cblas_xerbla.c @@ -0,0 +1,53 @@ +/* + * Automatically Tuned Linear Algebra Software v3.6.0 + * (C) Copyright 1999 R. Clint Whaley + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the ATLAS group or the names of its contributers may + * not be used to endorse or promote products derived from this + * software without specific written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "atlas_refmisc.h" +#ifdef ATL_USEPTHREADS + #include "atlas_ptalias3.h" +#endif +#include "cblas.h" + +#include <stdio.h> +#include <stdarg.h> +void cblas_xerbla(int p, char *rout, char *form, ...) +{ + va_list argptr; + + va_start(argptr, form); +#ifdef GCCWIN + if (p) printf("Parameter %d to routine %s was incorrect\n", p, rout); + vprintf(form, argptr); +#else + if (p) + fprintf(stderr, "Parameter %d to routine %s was incorrect\n", p, rout); + vfprintf(stderr, form, argptr); +#endif + va_end(argptr); + exit(-1); +} diff --git a/scikits/learn/src/minilearn.pyx b/scikits/learn/src/minilearn.pyx new file mode 100644 index 0000000000..6c476e92e8 --- /dev/null +++ b/scikits/learn/src/minilearn.pyx @@ -0,0 +1,25 @@ +""" +Wrapper for minilearn +http://fabianp.github.com/minilearn/ +""" + +import numpy as np +cimport numpy as np + +cdef extern from "minilearn.h": + void lars_fit (int, int, double *, double *, double *, int *, double *, int) + int RowMajorStrg + +def lars_fit_wrap (np.ndarray[np.float64_t, ndim=2, mode='c'] X, + np.ndarray[np.float64_t, ndim=1, mode='c'] res, + np.ndarray[np.float64_t, ndim=1, mode='c'] beta, + np.ndarray[np.int32_t, ndim=1, mode='c'] ind, + np.ndarray[np.float64_t, ndim=1, mode='c'] chol, + np.npy_intp niter): + """ + res will be rewritten with the residual at output + """ + lars_fit (<int> X.shape[1], <int> X.shape[0], <double *> X.data, + <double *> res.data, <double *> beta.data, <int *> + ind.data, <double *> chol.data, <int> niter) + diff --git a/scikits/learn/src/minilearn/lars.c b/scikits/learn/src/minilearn/lars.c new file mode 100644 index 0000000000..3a3b2147b1 --- /dev/null +++ b/scikits/learn/src/minilearn/lars.c @@ -0,0 +1,240 @@ +/* + * Least-angle regression (LARS) is a regression algorithm for + * high-dimensional data, developed by Bradley Efron, Trevor Hastie, + * Iain Johnstone and Robert Tibshirani. + * + * The advantages of LARS are: + * + * - It is computationally just as fast as forward selection and has + * the same order of complexity as an ordinary least squares. + * + * - It produces a full piecewise linear solution path, which is + * useful in cross-validation or similar attempts to tune the model. + * + * - If two variables are almost equally correlated with the response, + * then their coefficients should increase at approximately the same + * rate. The algorithm thus behaves as intuition would expect, and + * also is more stable. + * + * - It is easily modified to produce solutions for other estimators, + * like the Lasso. We implement lasso in method lars_lasso_TODO + * + * - It is effective in contexts where p >> n (IE, when the number of + * dimensions is significantly greater than the number of points) + * + * The disadvantages of the LARS method include: + * + * - Because LARS is based upon an iterative refitting of the + * residuals, it would appear to be especially sensitive to the + * effects of noise. This problem is discussed in detail by Weisberg + * in the discussion section of the Efron et al. (2004) Annals of + * Statistics article. + * + * + * Dependencies + * ------------ + * cblas + * + * Author + * ------ + * Fabian Pedregosa <fabian.pedregosa@inria.fr>. + * + * License + * ------- + * Public Domain. + * + */ + +#include <stdlib.h> +#include <math.h> +#include <float.h> +#include <cblas.h> +#include "minilearn.h" + +/* + * Doubly linked list structure, we will use this to iterate over + * indices. + */ +struct dllist { + double *ptr; + double cov; /* current covariance */ + struct dllist *next; + struct dllist *prev; +}; + + +/* + * Fit LARS algorithm. + * + * Parameters + * ---------- + * predictors are expected to be normalized + * + * X is (features, nsamples), b is (nsamples,1) + * + * beta is the returned array with the parameters of the regression + * problem. + * + * b will be modified to store the current residual. + * + * L will hold the cholesky decomposition. + * + * TODO + * ---- + * The case when two vectors have equal correlation. + * + * Notes + * ----- + * Most iterations need only be done with indices in the active set + * (or in its complement), this limits the use of BLAS leves 2, 3. + * + * TODO + * ---- + * Consider swapping columns/vector in the problem formulation, it + * should make vector multiplication faster. + * + */ +void lars_fit(int nfeatures, int nsamples, double *X, double *res, + double *beta, int *ind, double *L, int niter) +{ + /* temp variables */ + /* TODO: pass uu by reference */ + double *uu = (double *) calloc(nsamples, sizeof(double)); + + double *v, *dir, C, temp, gamma=0, tgamma, aj, Aa = 0; + int i, k, sum_k=0; + + struct dllist *active_set, *head, *cur, *top_active; + struct dllist *pmax=NULL; /* current working variable */ + + active_set = (struct dllist *) malloc((nfeatures+1) * sizeof(struct dllist)); + + /* create index list as a circular doubly linked list */ + for (i=0; i<=nfeatures; ++i) { + active_set[i].ptr = X + i; + active_set[i].next = active_set + i + 1; + active_set[i].prev = active_set + i - 1; + } + + head = active_set + nfeatures; + head->next = active_set; + active_set->prev = head; + + /* set sentinels */ + top_active = NULL; + head->ptr = NULL; + + /* main loop, we iterate over the user-suplied number of iterations */ + for (k=0; k < niter; ++k) { + + sum_k = k * (k+1) / 2; + v = L + sum_k; + dir = beta + sum_k; + + /* + * Update residual. + */ + cblas_daxpy (nsamples, -gamma, uu, 1, res, 1); + + /* calculate covariances (c_hat), and get maximum covariance (C_hat)*/ + for (pmax=head->next, cur=head->next; cur->ptr; cur=cur->next) { + cur->cov = cblas_ddot (nsamples, cur->ptr, nfeatures, res, 1); + pmax = (fabs(cur->cov) > fabs(pmax->cov)) ? cur : pmax; + } + + /* remove it from the unused set */ + pmax->prev->next = pmax->next; + pmax->next->prev = pmax->prev; + + /* push pmax into the active set */ + pmax->prev = top_active; + top_active = pmax; + + /* + * Compute the least-squares direction of the coefficients. + */ + temp = pmax->cov; + + for (i=k, cur=top_active; cur; cur=cur->prev, --i) { + /* + * To update the cholesky decomposition, we need to compute + * + * v = Xa' * cur + * dir = Xa' * res + * + * where res is the current residual and cur is the last + * vector to enter the active set. + * + * Covariances in the active set are kept tied and decreasing. + */ + v[i] = cblas_ddot (nsamples, cur->ptr, nfeatures, + pmax->ptr, nfeatures); + + temp = copysign(temp, cur->cov); + dir[i] = temp; + } + + /* + * Compute least squares solution by the method of normal equations + * (Golub & Van Loan, 1996) + * + * Update the cholesky decomposition of (Xa * Xa') + * + * ( L 0 ) + * L -> ( ) , where L * w = v , z = ||u|| + * ( w z ) + * + * and u is the last vector added to the active set. + * + */ + cblas_dtpsv (CblasRowMajor, CblasLower, CblasTrans, CblasNonUnit, + k, L, v, 1); + + v[k] = sqrt(1 - cblas_ddot(k, v, 1, v, 1)); + + cblas_dtpsv (CblasRowMajor, CblasLower, CblasNoTrans, CblasNonUnit, + k + 1, L, dir, 1); + + cblas_dtpsv (CblasRowMajor, CblasLower, CblasTrans, CblasNonUnit, + k + 1, L, dir, 1); + + /* + * Update uu with the current direction + * uu = Xa' * dir + */ + cblas_dscal (nfeatures, 0., uu, 1); + for (i=k, cur = top_active; cur; cur = cur->prev, --i) + cblas_daxpy (nsamples, dir[i], cur->ptr, nfeatures, uu, 1); + Aa = fabs (cblas_ddot (nsamples, top_active->ptr, nfeatures, uu, 1)); + C = fabs (pmax->cov); + + /* + * Compute gamma. + */ + gamma = DBL_MAX; + for (cur = head->next; cur->ptr; cur = cur->next) { + aj = cblas_ddot (nsamples, cur->ptr, nfeatures, uu, 1); + + if (cur->cov > 0) + tgamma = (C - cur->cov) / (Aa - aj); + else + tgamma = (C + cur->cov) / (Aa + aj); + + gamma = fmin(tgamma, gamma); + } + + /* regularization for degenerate gamma = 0 case */ + gamma += DBL_EPSILON; + + /* + * Set up return values. + * TODO: we should iterate over used_indices (for Lasso variant). + */ + cblas_daxpy (k, 1./gamma, dir-k, 1, dir, 1); + cblas_dscal (k + 1, gamma, dir, 1); + ind[k] = (pmax->ptr - X); + } + + free (active_set); + free (uu); +} diff --git a/scikits/learn/src/minilearn/minilearn.c b/scikits/learn/src/minilearn/minilearn.c new file mode 100644 index 0000000000..48a6f2f623 --- /dev/null +++ b/scikits/learn/src/minilearn/minilearn.c @@ -0,0 +1,4752 @@ +/* Generated by Cython 0.12 on Tue Jun 8 15:14:04 2010 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#include "structmember.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#else +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#if PY_VERSION_HEX < 0x02040000 + #define METH_COEXIST 0 + #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) + #define PyDict_Contains(d,o) PySequence_Contains(d,o) +#endif +#if PY_VERSION_HEX < 0x02050000 + typedef int Py_ssize_t; + #define PY_SSIZE_T_MAX INT_MAX + #define PY_SSIZE_T_MIN INT_MIN + #define PY_FORMAT_SIZE_T "" + #define PyInt_FromSsize_t(z) PyInt_FromLong(z) + #define PyInt_AsSsize_t(o) PyInt_AsLong(o) + #define PyNumber_Index(o) PyNumber_Int(o) + #define PyIndex_Check(o) PyNumber_Check(o) +#endif +#if PY_VERSION_HEX < 0x02060000 + #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) + #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) + #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) + #define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, + #define PyType_Modified(t) + + typedef struct { + void *buf; + PyObject *obj; + Py_ssize_t len; + Py_ssize_t itemsize; + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; + } Py_buffer; + + #define PyBUF_SIMPLE 0 + #define PyBUF_WRITABLE 0x0001 + #define PyBUF_FORMAT 0x0004 + #define PyBUF_ND 0x0008 + #define PyBUF_STRIDES (0x0010 | PyBUF_ND) + #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) + #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) + #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) + #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#endif +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#endif +#if PY_MAJOR_VERSION >= 3 + #define Py_TPFLAGS_CHECKTYPES 0 + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyString_Type PyUnicode_Type + #define PyString_CheckExact PyUnicode_CheckExact +#else + #define PyBytes_Type PyString_Type + #define PyBytes_CheckExact PyString_CheckExact +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#else + #define _USE_MATH_DEFINES +#endif +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) +#else + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) +#endif +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_NAMESTR(n) ((char *)(n)) + #define __Pyx_DOCSTR(n) ((char *)(n)) +#else + #define __Pyx_NAMESTR(n) (n) + #define __Pyx_DOCSTR(n) (n) +#endif +#ifdef __cplusplus +#define __PYX_EXTERN_C extern "C" +#else +#define __PYX_EXTERN_C extern +#endif +#include <math.h> +#define __PYX_HAVE_API__minilearn +#include "stdlib.h" +#include "stdio.h" +#include "numpy/arrayobject.h" +#include "numpy/ufuncobject.h" +#include "minilearn.h" + +#ifdef __GNUC__ +#define INLINE __inline__ +#elif _WIN32 +#define INLINE __inline +#else +#define INLINE +#endif + +typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ + + +/* Type Conversion Predeclarations */ + +#if PY_MAJOR_VERSION < 3 +#define __Pyx_PyBytes_FromString PyString_FromString +#define __Pyx_PyBytes_FromStringAndSize PyString_FromStringAndSize +#define __Pyx_PyBytes_AsString PyString_AsString +#else +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +#define __Pyx_PyBytes_AsString PyBytes_AsString +#endif + +#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) +#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) __Pyx_PyBytes_AsString(s)) + +#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) +static INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); + +#if !defined(T_PYSSIZET) +#if PY_VERSION_HEX < 0x02050000 +#define T_PYSSIZET T_INT +#elif !defined(T_LONGLONG) +#define T_PYSSIZET \ + ((sizeof(Py_ssize_t) == sizeof(int)) ? T_INT : \ + ((sizeof(Py_ssize_t) == sizeof(long)) ? T_LONG : -1)) +#else +#define T_PYSSIZET \ + ((sizeof(Py_ssize_t) == sizeof(int)) ? T_INT : \ + ((sizeof(Py_ssize_t) == sizeof(long)) ? T_LONG : \ + ((sizeof(Py_ssize_t) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1))) +#endif +#endif + + +#if !defined(T_ULONGLONG) +#define __Pyx_T_UNSIGNED_INT(x) \ + ((sizeof(x) == sizeof(unsigned char)) ? T_UBYTE : \ + ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \ + ((sizeof(x) == sizeof(unsigned int)) ? T_UINT : \ + ((sizeof(x) == sizeof(unsigned long)) ? T_ULONG : -1)))) +#else +#define __Pyx_T_UNSIGNED_INT(x) \ + ((sizeof(x) == sizeof(unsigned char)) ? T_UBYTE : \ + ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \ + ((sizeof(x) == sizeof(unsigned int)) ? T_UINT : \ + ((sizeof(x) == sizeof(unsigned long)) ? T_ULONG : \ + ((sizeof(x) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1))))) +#endif +#if !defined(T_LONGLONG) +#define __Pyx_T_SIGNED_INT(x) \ + ((sizeof(x) == sizeof(char)) ? T_BYTE : \ + ((sizeof(x) == sizeof(short)) ? T_SHORT : \ + ((sizeof(x) == sizeof(int)) ? T_INT : \ + ((sizeof(x) == sizeof(long)) ? T_LONG : -1)))) +#else +#define __Pyx_T_SIGNED_INT(x) \ + ((sizeof(x) == sizeof(char)) ? T_BYTE : \ + ((sizeof(x) == sizeof(short)) ? T_SHORT : \ + ((sizeof(x) == sizeof(int)) ? T_INT : \ + ((sizeof(x) == sizeof(long)) ? T_LONG : \ + ((sizeof(x) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1))))) +#endif + +#define __Pyx_T_FLOATING(x) \ + ((sizeof(x) == sizeof(float)) ? T_FLOAT : \ + ((sizeof(x) == sizeof(double)) ? T_DOUBLE : -1)) + +#if !defined(T_SIZET) +#if !defined(T_ULONGLONG) +#define T_SIZET \ + ((sizeof(size_t) == sizeof(unsigned int)) ? T_UINT : \ + ((sizeof(size_t) == sizeof(unsigned long)) ? T_ULONG : -1)) +#else +#define T_SIZET \ + ((sizeof(size_t) == sizeof(unsigned int)) ? T_UINT : \ + ((sizeof(size_t) == sizeof(unsigned long)) ? T_ULONG : \ + ((sizeof(size_t) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1))) +#endif +#endif + +static INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); + +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) + + +#ifdef __GNUC__ +/* Test for GCC > 2.95 */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#else /* __GNUC__ > 2 ... */ +#define likely(x) (x) +#define unlikely(x) (x) +#endif /* __GNUC__ > 2 ... */ +#else /* __GNUC__ */ +#define likely(x) (x) +#define unlikely(x) (x) +#endif /* __GNUC__ */ + +static PyObject *__pyx_m; +static PyObject *__pyx_b; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; +static const char **__pyx_f; + + +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include <complex> + #else + #include <complex.h> + #endif +#endif + +typedef npy_int8 __pyx_t_5numpy_int8_t; + +typedef npy_int16 __pyx_t_5numpy_int16_t; + +typedef npy_int32 __pyx_t_5numpy_int32_t; + +typedef npy_int64 __pyx_t_5numpy_int64_t; + +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +typedef npy_float32 __pyx_t_5numpy_float32_t; + +typedef npy_float64 __pyx_t_5numpy_float64_t; + +typedef npy_long __pyx_t_5numpy_int_t; + +typedef npy_longlong __pyx_t_5numpy_long_t; + +typedef npy_intp __pyx_t_5numpy_intp_t; + +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +typedef npy_ulong __pyx_t_5numpy_uint_t; + +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +typedef npy_double __pyx_t_5numpy_float_t; + +typedef npy_double __pyx_t_5numpy_double_t; + +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif + +/* Type declarations */ + +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +typedef npy_cdouble __pyx_t_5numpy_complex_t; + +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif + +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct * __Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule((char *)modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); + end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; + } + #define __Pyx_RefNannySetupContext(name) void *__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + #define __Pyx_RefNannyFinishContext() __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0) +#else + #define __Pyx_RefNannySetupContext(name) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) +#endif /* CYTHON_REFNANNY */ +#define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0) +#define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0) + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, PyObject* kw_name); /*proto*/ + +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ + +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ + +/* Run-time type information about structs used with buffers */ +struct __Pyx_StructField_; + +typedef struct { + const char* name; /* for error messages only */ + struct __Pyx_StructField_* fields; + size_t size; /* sizeof(type) */ + char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject */ +} __Pyx_TypeInfo; + +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; + +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; + + +static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); + +static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ +static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ + +static INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +static INLINE void __Pyx_RaiseTooManyValuesError(void); + +static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/ +static int __Pyx_EndUnpack(PyObject *); /*proto*/ + +static INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ + +static INLINE void __Pyx_RaiseNoneNotIterableError(void); + +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/ + +static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact); /*proto*/ +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); +static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else +#define __Pyx_GetBuffer PyObject_GetBuffer +#define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + +Py_ssize_t __Pyx_zeros[] = {0, 0}; +Py_ssize_t __Pyx_minusones[] = {-1, -1}; + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif + +#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + #else + static INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + #endif +#else + static INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); +#endif + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eqf(a, b) ((a)==(b)) + #define __Pyx_c_sumf(a, b) ((a)+(b)) + #define __Pyx_c_difff(a, b) ((a)-(b)) + #define __Pyx_c_prodf(a, b) ((a)*(b)) + #define __Pyx_c_quotf(a, b) ((a)/(b)) + #define __Pyx_c_negf(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zerof(z) ((z)==(float)0) + #define __Pyx_c_conjf(z) (::std::conj(z)) + /*#define __Pyx_c_absf(z) (::std::abs(z))*/ + #else + #define __Pyx_c_is_zerof(z) ((z)==0) + #define __Pyx_c_conjf(z) (conjf(z)) + /*#define __Pyx_c_absf(z) (cabsf(z))*/ + #endif +#else + static INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); + static INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); + static INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); + static INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); + static INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); + static INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); + static INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); + static INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); + /*static INLINE float __Pyx_c_absf(__pyx_t_float_complex);*/ +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + #else + static INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + #endif +#else + static INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); +#endif + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eq(a, b) ((a)==(b)) + #define __Pyx_c_sum(a, b) ((a)+(b)) + #define __Pyx_c_diff(a, b) ((a)-(b)) + #define __Pyx_c_prod(a, b) ((a)*(b)) + #define __Pyx_c_quot(a, b) ((a)/(b)) + #define __Pyx_c_neg(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero(z) ((z)==(double)0) + #define __Pyx_c_conj(z) (::std::conj(z)) + /*#define __Pyx_c_abs(z) (::std::abs(z))*/ + #else + #define __Pyx_c_is_zero(z) ((z)==0) + #define __Pyx_c_conj(z) (conj(z)) + /*#define __Pyx_c_abs(z) (cabs(z))*/ + #endif +#else + static INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); + static INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); + static INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); + static INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); + static INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); + static INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); + static INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); + static INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); + /*static INLINE double __Pyx_c_abs(__pyx_t_double_complex);*/ +#endif + +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ + +static INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); + +static INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); + +static INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); + +static INLINE char __Pyx_PyInt_AsChar(PyObject *); + +static INLINE short __Pyx_PyInt_AsShort(PyObject *); + +static INLINE int __Pyx_PyInt_AsInt(PyObject *); + +static INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); + +static INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); + +static INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); + +static INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); + +static INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); + +static INLINE long __Pyx_PyInt_AsLong(PyObject *); + +static INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); + +static INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); + +static INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); + +static INLINE npy_intp __Pyx_PyInt_from_py_npy_intp(PyObject *); + +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, long size); /*proto*/ + +static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ + +static void __Pyx_AddTraceback(const char *funcname); /*proto*/ + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ +/* Module declarations from python_buffer */ + +/* Module declarations from python_ref */ + +/* Module declarations from stdlib */ + +/* Module declarations from stdio */ + +/* Module declarations from numpy */ + +/* Module declarations from numpy */ + +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *); /*proto*/ +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *, PyObject *); /*proto*/ +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *, PyObject *, PyObject *); /*proto*/ +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *, PyObject *, PyObject *, PyObject *); /*proto*/ +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *, PyObject *, PyObject *, PyObject *, PyObject *); /*proto*/ +static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ +static INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *, PyObject *); /*proto*/ +static INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *); /*proto*/ +/* Module declarations from minilearn */ + +__PYX_EXTERN_C int RowMajorStrg; +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t = { "numpy.float64_t", NULL, sizeof(__pyx_t_5numpy_float64_t), 'R' }; +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t = { "numpy.int32_t", NULL, sizeof(__pyx_t_5numpy_int32_t), 'I' }; +#define __Pyx_MODULE_NAME "minilearn" +int __pyx_module_is_main_minilearn = 0; + +/* Implementation of minilearn */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_RuntimeError; +static char __pyx_k_1[] = "ndarray is not C contiguous"; +static char __pyx_k_2[] = "ndarray is not Fortran contiguous"; +static char __pyx_k_3[] = "Non-native byte order not supported"; +static char __pyx_k_4[] = "unknown dtype code in numpy.pxd (%d)"; +static char __pyx_k_5[] = "Format string allocated too short, see comment in numpy.pxd"; +static char __pyx_k_6[] = "Format string allocated too short."; +static char __pyx_k_7[] = "\nWrapper for minilearn\nhttp://fabianp.github.com/minilearn/\n"; +static char __pyx_k_8[] = "lars_fit_wrap (line 15)"; +static char __pyx_k__B[] = "B"; +static char __pyx_k__H[] = "H"; +static char __pyx_k__I[] = "I"; +static char __pyx_k__L[] = "L"; +static char __pyx_k__O[] = "O"; +static char __pyx_k__Q[] = "Q"; +static char __pyx_k__X[] = "X"; +static char __pyx_k__b[] = "b"; +static char __pyx_k__d[] = "d"; +static char __pyx_k__f[] = "f"; +static char __pyx_k__g[] = "g"; +static char __pyx_k__h[] = "h"; +static char __pyx_k__i[] = "i"; +static char __pyx_k__l[] = "l"; +static char __pyx_k__q[] = "q"; +static char __pyx_k__Zd[] = "Zd"; +static char __pyx_k__Zf[] = "Zf"; +static char __pyx_k__Zg[] = "Zg"; +static char __pyx_k__np[] = "np"; +static char __pyx_k__buf[] = "buf"; +static char __pyx_k__ind[] = "ind"; +static char __pyx_k__obj[] = "obj"; +static char __pyx_k__res[] = "res"; +static char __pyx_k__base[] = "base"; +static char __pyx_k__beta[] = "beta"; +static char __pyx_k__chol[] = "chol"; +static char __pyx_k__data[] = "data"; +static char __pyx_k__ndim[] = "ndim"; +static char __pyx_k__descr[] = "descr"; +static char __pyx_k__names[] = "names"; +static char __pyx_k__niter[] = "niter"; +static char __pyx_k__numpy[] = "numpy"; +static char __pyx_k__range[] = "range"; +static char __pyx_k__shape[] = "shape"; +static char __pyx_k__fields[] = "fields"; +static char __pyx_k__format[] = "format"; +static char __pyx_k__strides[] = "strides"; +static char __pyx_k____main__[] = "__main__"; +static char __pyx_k____test__[] = "__test__"; +static char __pyx_k__itemsize[] = "itemsize"; +static char __pyx_k__readonly[] = "readonly"; +static char __pyx_k__type_num[] = "type_num"; +static char __pyx_k__byteorder[] = "byteorder"; +static char __pyx_k__ValueError[] = "ValueError"; +static char __pyx_k__suboffsets[] = "suboffsets"; +static char __pyx_k__RuntimeError[] = "RuntimeError"; +static char __pyx_k__lars_fit_wrap[] = "lars_fit_wrap"; +static PyObject *__pyx_kp_u_1; +static PyObject *__pyx_kp_u_2; +static PyObject *__pyx_kp_u_3; +static PyObject *__pyx_kp_u_4; +static PyObject *__pyx_kp_u_5; +static PyObject *__pyx_kp_u_6; +static PyObject *__pyx_kp_u_8; +static PyObject *__pyx_n_s__RuntimeError; +static PyObject *__pyx_n_s__ValueError; +static PyObject *__pyx_n_s__X; +static PyObject *__pyx_n_s____main__; +static PyObject *__pyx_n_s____test__; +static PyObject *__pyx_n_s__base; +static PyObject *__pyx_n_s__beta; +static PyObject *__pyx_n_s__buf; +static PyObject *__pyx_n_s__byteorder; +static PyObject *__pyx_n_s__chol; +static PyObject *__pyx_n_s__data; +static PyObject *__pyx_n_s__descr; +static PyObject *__pyx_n_s__fields; +static PyObject *__pyx_n_s__format; +static PyObject *__pyx_n_s__ind; +static PyObject *__pyx_n_s__itemsize; +static PyObject *__pyx_n_s__lars_fit_wrap; +static PyObject *__pyx_n_s__names; +static PyObject *__pyx_n_s__ndim; +static PyObject *__pyx_n_s__niter; +static PyObject *__pyx_n_s__np; +static PyObject *__pyx_n_s__numpy; +static PyObject *__pyx_n_s__obj; +static PyObject *__pyx_n_s__range; +static PyObject *__pyx_n_s__readonly; +static PyObject *__pyx_n_s__res; +static PyObject *__pyx_n_s__shape; +static PyObject *__pyx_n_s__strides; +static PyObject *__pyx_n_s__suboffsets; +static PyObject *__pyx_n_s__type_num; +static PyObject *__pyx_int_15; + +/* "/volatile/fabian/dev/scikit-learn/scikits/learn/src/minilearn/minilearn.pyx":15 + * + * + * def lars_fit_wrap (np.ndarray[np.float64_t, ndim=2, mode='c'] X, # <<<<<<<<<<<<<< + * np.ndarray[np.float64_t, ndim=1, mode='c'] res, + * np.ndarray[np.float64_t, ndim=1, mode='c'] beta, + */ + +static PyObject *__pyx_pf_9minilearn_lars_fit_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_9minilearn_lars_fit_wrap[] = "\n res will be rewritten with the residual at output\n "; +static PyObject *__pyx_pf_9minilearn_lars_fit_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_X = 0; + PyArrayObject *__pyx_v_res = 0; + PyArrayObject *__pyx_v_beta = 0; + PyArrayObject *__pyx_v_ind = 0; + PyArrayObject *__pyx_v_chol = 0; + npy_intp __pyx_v_niter; + Py_buffer __pyx_bstruct_res; + Py_ssize_t __pyx_bstride_0_res = 0; + Py_ssize_t __pyx_bshape_0_res = 0; + Py_buffer __pyx_bstruct_chol; + Py_ssize_t __pyx_bstride_0_chol = 0; + Py_ssize_t __pyx_bshape_0_chol = 0; + Py_buffer __pyx_bstruct_beta; + Py_ssize_t __pyx_bstride_0_beta = 0; + Py_ssize_t __pyx_bshape_0_beta = 0; + Py_buffer __pyx_bstruct_ind; + Py_ssize_t __pyx_bstride_0_ind = 0; + Py_ssize_t __pyx_bshape_0_ind = 0; + Py_buffer __pyx_bstruct_X; + Py_ssize_t __pyx_bstride_0_X = 0; + Py_ssize_t __pyx_bstride_1_X = 0; + Py_ssize_t __pyx_bshape_0_X = 0; + Py_ssize_t __pyx_bshape_1_X = 0; + PyObject *__pyx_r = NULL; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__X,&__pyx_n_s__res,&__pyx_n_s__beta,&__pyx_n_s__ind,&__pyx_n_s__chol,&__pyx_n_s__niter,0}; + __Pyx_RefNannySetupContext("lars_fit_wrap"); + __pyx_self = __pyx_self; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); + PyObject* values[6] = {0,0,0,0,0,0}; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__res); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("lars_fit_wrap", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__beta); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("lars_fit_wrap", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ind); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("lars_fit_wrap", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chol); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("lars_fit_wrap", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 5: + values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__niter); + if (likely(values[5])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("lars_fit_wrap", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "lars_fit_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + __pyx_v_X = ((PyArrayObject *)values[0]); + __pyx_v_res = ((PyArrayObject *)values[1]); + __pyx_v_beta = ((PyArrayObject *)values[2]); + __pyx_v_ind = ((PyArrayObject *)values[3]); + __pyx_v_chol = ((PyArrayObject *)values[4]); + __pyx_v_niter = __Pyx_PyInt_from_py_npy_intp(values[5]); if (unlikely((__pyx_v_niter == (npy_intp)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + __pyx_v_X = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 0)); + __pyx_v_res = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 1)); + __pyx_v_beta = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 2)); + __pyx_v_ind = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 3)); + __pyx_v_chol = ((PyArrayObject *)PyTuple_GET_ITEM(__pyx_args, 4)); + __pyx_v_niter = __Pyx_PyInt_from_py_npy_intp(PyTuple_GET_ITEM(__pyx_args, 5)); if (unlikely((__pyx_v_niter == (npy_intp)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("lars_fit_wrap", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("minilearn.lars_fit_wrap"); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_bstruct_X.buf = NULL; + __pyx_bstruct_res.buf = NULL; + __pyx_bstruct_beta.buf = NULL; + __pyx_bstruct_ind.buf = NULL; + __pyx_bstruct_chol.buf = NULL; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_5numpy_ndarray, 1, "X", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_res), __pyx_ptype_5numpy_ndarray, 1, "res", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ind), __pyx_ptype_5numpy_ndarray, 1, "ind", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chol), __pyx_ptype_5numpy_ndarray, 1, "chol", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_X, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_X = __pyx_bstruct_X.strides[0]; __pyx_bstride_1_X = __pyx_bstruct_X.strides[1]; + __pyx_bshape_0_X = __pyx_bstruct_X.shape[0]; __pyx_bshape_1_X = __pyx_bstruct_X.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_res, (PyObject*)__pyx_v_res, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_res = __pyx_bstruct_res.strides[0]; + __pyx_bshape_0_res = __pyx_bstruct_res.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_beta, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_beta = __pyx_bstruct_beta.strides[0]; + __pyx_bshape_0_beta = __pyx_bstruct_beta.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_ind, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_ind = __pyx_bstruct_ind.strides[0]; + __pyx_bshape_0_ind = __pyx_bstruct_ind.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_chol, (PyObject*)__pyx_v_chol, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_bstride_0_chol = __pyx_bstruct_chol.strides[0]; + __pyx_bshape_0_chol = __pyx_bstruct_chol.shape[0]; + + /* "/volatile/fabian/dev/scikit-learn/scikits/learn/src/minilearn/minilearn.pyx":26 + * lars_fit (<int> X.shape[1], <int> X.shape[0], <double *> X.data, + * <double *> res.data, <double *> beta.data, <int *> + * ind.data, <double *> chol.data, <int> niter) # <<<<<<<<<<<<<< + * + */ + lars_fit(((int)(__pyx_v_X->dimensions[1])), ((int)(__pyx_v_X->dimensions[0])), ((double *)__pyx_v_X->data), ((double *)__pyx_v_res->data), ((double *)__pyx_v_beta->data), ((int *)__pyx_v_ind->data), ((double *)__pyx_v_chol->data), ((int)__pyx_v_niter)); + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_res); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_chol); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_beta); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ind); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_X); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("minilearn.lars_fit_wrap"); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_res); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_chol); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_beta); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ind); + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_X); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":187 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fullfill the PEP. + */ + +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_copy_shape; + int __pyx_v_i; + int __pyx_v_ndim; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + int __pyx_v_t; + char *__pyx_v_f; + PyArray_Descr *__pyx_v_descr = 0; + int __pyx_v_offset; + int __pyx_v_hasfields; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + char *__pyx_t_9; + __Pyx_RefNannySetupContext("__getbuffer__"); + if (__pyx_v_info == NULL) return 0; + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + __Pyx_INCREF((PyObject *)__pyx_v_self); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":193 + * # of flags + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((<char*>&endian_detector)[0] != 0) + * + */ + __pyx_v_endian_detector = 1; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":194 + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 + * cdef bint little_endian = ((<char*>&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * + * ndim = PyArray_NDIM(self) + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":196 + * cdef bint little_endian = ((<char*>&endian_detector)[0] != 0) + * + * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_v_ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self)); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":198 + * ndim = PyArray_NDIM(self) + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * copy_shape = 1 + * else: + */ + __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t))); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":199 + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * copy_shape = 1 # <<<<<<<<<<<<<< + * else: + * copy_shape = 0 + */ + __pyx_v_copy_shape = 1; + goto __pyx_L5; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":201 + * copy_shape = 1 + * else: + * copy_shape = 0 # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + */ + __pyx_v_copy_shape = 0; + } + __pyx_L5:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":203 + * copy_shape = 0 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":204 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not C contiguous") + * + */ + __pyx_t_2 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_C_CONTIGUOUS)); + __pyx_t_3 = __pyx_t_2; + } else { + __pyx_t_3 = __pyx_t_1; + } + if (__pyx_t_3) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":205 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_1)); + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_kp_u_1)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_1)); + __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L6; + } + __pyx_L6:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":207 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS); + if (__pyx_t_3) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":208 + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not Fortran contiguous") + * + */ + __pyx_t_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_F_CONTIGUOUS)); + __pyx_t_2 = __pyx_t_1; + } else { + __pyx_t_2 = __pyx_t_3; + } + if (__pyx_t_2) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":209 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_2)); + PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_kp_u_2)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_2)); + __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L7; + } + __pyx_L7:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":211 + * raise ValueError(u"ndarray is not Fortran contiguous") + * + * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< + * info.ndim = ndim + * if copy_shape: + */ + __pyx_v_info->buf = PyArray_DATA(((PyArrayObject *)__pyx_v_self)); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":212 + * + * info.buf = PyArray_DATA(self) + * info.ndim = ndim # <<<<<<<<<<<<<< + * if copy_shape: + * # Allocate new buffer for strides and shape info. This is allocated + */ + __pyx_v_info->ndim = __pyx_v_ndim; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":213 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if copy_shape: # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. This is allocated + * # as one block, strides first. + */ + __pyx_t_6 = __pyx_v_copy_shape; + if (__pyx_t_6) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":216 + * # Allocate new buffer for strides and shape info. This is allocated + * # as one block, strides first. + * info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< + * info.shape = info.strides + ndim + * for i in range(ndim): + */ + __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * __pyx_v_ndim) * 2))); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":217 + * # as one block, strides first. + * info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim # <<<<<<<<<<<<<< + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + */ + __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":218 + * info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim + * for i in range(ndim): # <<<<<<<<<<<<<< + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] + */ + __pyx_t_6 = __pyx_v_ndim; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":219 + * info.shape = info.strides + ndim + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + */ + (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":220 + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< + * else: + * info.strides = <Py_ssize_t*>PyArray_STRIDES(self) + */ + (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]); + } + goto __pyx_L8; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":222 + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + * info.strides = <Py_ssize_t*>PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * info.shape = <Py_ssize_t*>PyArray_DIMS(self) + * info.suboffsets = NULL + */ + __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self))); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":223 + * else: + * info.strides = <Py_ssize_t*>PyArray_STRIDES(self) + * info.shape = <Py_ssize_t*>PyArray_DIMS(self) # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + */ + __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self))); + } + __pyx_L8:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":224 + * info.strides = <Py_ssize_t*>PyArray_STRIDES(self) + * info.shape = <Py_ssize_t*>PyArray_DIMS(self) + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) + */ + __pyx_v_info->suboffsets = NULL; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":225 + * info.shape = <Py_ssize_t*>PyArray_DIMS(self) + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< + * info.readonly = not PyArray_ISWRITEABLE(self) + * + */ + __pyx_v_info->itemsize = PyArray_ITEMSIZE(((PyArrayObject *)__pyx_v_self)); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":226 + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< + * + * cdef int t + */ + __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(((PyArrayObject *)__pyx_v_self))); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":229 + * + * cdef int t + * cdef char* f = NULL # <<<<<<<<<<<<<< + * cdef dtype descr = self.descr + * cdef list stack + */ + __pyx_v_f = NULL; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":230 + * cdef int t + * cdef char* f = NULL + * cdef dtype descr = self.descr # <<<<<<<<<<<<<< + * cdef list stack + * cdef int offset + */ + __Pyx_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_self)->descr)); + __pyx_v_descr = ((PyArrayObject *)__pyx_v_self)->descr; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":234 + * cdef int offset + * + * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< + * + * if not hasfields and not copy_shape: + */ + __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":236 + * cdef bint hasfields = PyDataType_HASFIELDS(descr) + * + * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< + * # do not call releasebuffer + * info.obj = None + */ + __pyx_t_2 = (!__pyx_v_hasfields); + if (__pyx_t_2) { + __pyx_t_3 = (!__pyx_v_copy_shape); + __pyx_t_1 = __pyx_t_3; + } else { + __pyx_t_1 = __pyx_t_2; + } + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":238 + * if not hasfields and not copy_shape: + * # do not call releasebuffer + * info.obj = None # <<<<<<<<<<<<<< + * else: + * # need to call releasebuffer + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = Py_None; + goto __pyx_L11; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":241 + * else: + * # need to call releasebuffer + * info.obj = self # <<<<<<<<<<<<<< + * + * if not hasfields: + */ + __Pyx_INCREF(__pyx_v_self); + __Pyx_GIVEREF(__pyx_v_self); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = __pyx_v_self; + } + __pyx_L11:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":243 + * info.obj = self + * + * if not hasfields: # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == '>' and little_endian) or + */ + __pyx_t_1 = (!__pyx_v_hasfields); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":244 + * + * if not hasfields: + * t = descr.type_num # <<<<<<<<<<<<<< + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): + */ + __pyx_v_t = __pyx_v_descr->type_num; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":245 + * if not hasfields: + * t = descr.type_num + * if ((descr.byteorder == '>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_1 = (__pyx_v_descr->byteorder == '>'); + if (__pyx_t_1) { + __pyx_t_2 = __pyx_v_little_endian; + } else { + __pyx_t_2 = __pyx_t_1; + } + if (!__pyx_t_2) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":246 + * t = descr.type_num + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + */ + __pyx_t_1 = (__pyx_v_descr->byteorder == '<'); + if (__pyx_t_1) { + __pyx_t_3 = (!__pyx_v_little_endian); + __pyx_t_8 = __pyx_t_3; + } else { + __pyx_t_8 = __pyx_t_1; + } + __pyx_t_1 = __pyx_t_8; + } else { + __pyx_t_1 = __pyx_t_2; + } + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":247 + * if ((descr.byteorder == '>' and little_endian) or + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_3)); + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_kp_u_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_3)); + __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L13; + } + __pyx_L13:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":248 + * (descr.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + */ + __pyx_t_1 = (__pyx_v_t == NPY_BYTE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__b; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":249 + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + */ + __pyx_t_1 = (__pyx_v_t == NPY_UBYTE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__B; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":250 + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + */ + __pyx_t_1 = (__pyx_v_t == NPY_SHORT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__h; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":251 + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + */ + __pyx_t_1 = (__pyx_v_t == NPY_USHORT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__H; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":252 + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + */ + __pyx_t_1 = (__pyx_v_t == NPY_INT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__i; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":253 + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + */ + __pyx_t_1 = (__pyx_v_t == NPY_UINT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__I; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":254 + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + */ + __pyx_t_1 = (__pyx_v_t == NPY_LONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__l; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":255 + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + */ + __pyx_t_1 = (__pyx_v_t == NPY_ULONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__L; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":256 + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + */ + __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__q; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":257 + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + */ + __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Q; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":258 + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + */ + __pyx_t_1 = (__pyx_v_t == NPY_FLOAT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__f; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":259 + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + */ + __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__d; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":260 + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + */ + __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__g; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":261 + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + */ + __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Zf; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":262 + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" + */ + __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Zd; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":263 + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f = "O" + * else: + */ + __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__Zg; + goto __pyx_L14; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":264 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_1 = (__pyx_v_t == NPY_OBJECT); + if (__pyx_t_1) { + __pyx_v_f = __pyx_k__O; + goto __pyx_L14; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":266 + * elif t == NPY_OBJECT: f = "O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * info.format = f + * return + */ + __pyx_t_5 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_4), __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_L14:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":267 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f # <<<<<<<<<<<<<< + * return + * else: + */ + __pyx_v_info->format = __pyx_v_f; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":268 + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f + * return # <<<<<<<<<<<<<< + * else: + * info.format = <char*>stdlib.malloc(_buffer_format_string_len) + */ + __pyx_r = 0; + goto __pyx_L0; + goto __pyx_L12; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":270 + * return + * else: + * info.format = <char*>stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< + * info.format[0] = '^' # Native data types, manual alignment + * offset = 0 + */ + __pyx_v_info->format = ((char *)malloc(255)); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":271 + * else: + * info.format = <char*>stdlib.malloc(_buffer_format_string_len) + * info.format[0] = '^' # Native data types, manual alignment # <<<<<<<<<<<<<< + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, + */ + (__pyx_v_info->format[0]) = '^'; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":272 + * info.format = <char*>stdlib.malloc(_buffer_format_string_len) + * info.format[0] = '^' # Native data types, manual alignment + * offset = 0 # <<<<<<<<<<<<<< + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + */ + __pyx_v_offset = 0; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":275 + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + * &offset) # <<<<<<<<<<<<<< + * f[0] = 0 # Terminate format string + * + */ + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_9; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":276 + * info.format + _buffer_format_string_len, + * &offset) + * f[0] = 0 # Terminate format string # <<<<<<<<<<<<<< + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + */ + (__pyx_v_f[0]) = 0; + } + __pyx_L12:; + + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("numpy.ndarray.__getbuffer__"); + __pyx_r = -1; + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(Py_None); + __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; + } + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_descr); + __Pyx_DECREF((PyObject *)__pyx_v_self); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":278 + * f[0] = 0 # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + */ + +static void __pyx_pf_5numpy_7ndarray___releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ +static void __pyx_pf_5numpy_7ndarray___releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + int __pyx_t_1; + __Pyx_RefNannySetupContext("__releasebuffer__"); + __Pyx_INCREF((PyObject *)__pyx_v_self); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":279 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_t_1 = PyArray_HASFIELDS(((PyArrayObject *)__pyx_v_self)); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":280 + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) + */ + free(__pyx_v_info->format); + goto __pyx_L5; + } + __pyx_L5:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":281 + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * stdlib.free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t))); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":282 + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) # <<<<<<<<<<<<<< + * # info.shape was stored after info.strides in the same block + * + */ + free(__pyx_v_info->strides); + goto __pyx_L6; + } + __pyx_L6:; + + __Pyx_DECREF((PyObject *)__pyx_v_self); + __Pyx_RefNannyFinishContext(); +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":755 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, <void*>a) + * + */ + +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1"); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":756 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, <void*>a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 756; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1"); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":758 + * return PyArray_MultiIterNew(1, <void*>a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, <void*>a, <void*>b) + * + */ + +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2"); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":759 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, <void*>a, <void*>b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2"); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":761 + * return PyArray_MultiIterNew(2, <void*>a, <void*>b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c) + * + */ + +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3"); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":762 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3"); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":764 + * return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d) + * + */ + +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4"); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":765 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4"); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":767 + * return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e) + * + */ + +static INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5"); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":768 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e) # <<<<<<<<<<<<<< + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5"); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":770 + * return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e) + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + +static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { + PyArray_Descr *__pyx_v_child; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + PyObject *__pyx_v_fields; + PyObject *__pyx_v_childname; + PyObject *__pyx_v_new_offset; + PyObject *__pyx_v_t; + char *__pyx_r; + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + char *__pyx_t_10; + __Pyx_RefNannySetupContext("_util_dtypestring"); + __Pyx_INCREF((PyObject *)__pyx_v_descr); + __pyx_v_child = ((PyArray_Descr *)Py_None); __Pyx_INCREF(Py_None); + __pyx_v_fields = ((PyObject *)Py_None); __Pyx_INCREF(Py_None); + __pyx_v_childname = Py_None; __Pyx_INCREF(Py_None); + __pyx_v_new_offset = Py_None; __Pyx_INCREF(Py_None); + __pyx_v_t = Py_None; __Pyx_INCREF(Py_None); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":777 + * cdef int delta_offset + * cdef tuple i + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((<char*>&endian_detector)[0] != 0) + * cdef tuple fields + */ + __pyx_v_endian_detector = 1; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":778 + * cdef tuple i + * cdef int endian_detector = 1 + * cdef bint little_endian = ((<char*>&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * cdef tuple fields + * + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":781 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + if (likely(((PyObject *)__pyx_v_descr->names) != Py_None)) { + __pyx_t_1 = 0; __pyx_t_2 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_2); + } else { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++; + __Pyx_DECREF(__pyx_v_childname); + __pyx_v_childname = __pyx_t_3; + __pyx_t_3 = 0; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":782 + * + * for childname in descr.names: + * fields = descr.fields[childname] # <<<<<<<<<<<<<< + * child, new_offset = fields + * + */ + __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(((PyObject *)__pyx_v_fields)); + __pyx_v_fields = ((PyObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":783 + * for childname in descr.names: + * fields = descr.fields[childname] + * child, new_offset = fields # <<<<<<<<<<<<<< + * + * if (end - f) - (new_offset - offset[0]) < 15: + */ + if (likely(((PyObject *)__pyx_v_fields) != Py_None) && likely(PyTuple_GET_SIZE(((PyObject *)__pyx_v_fields)) == 2)) { + PyObject* tuple = ((PyObject *)__pyx_v_fields); + __pyx_t_3 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_t_4); + __Pyx_DECREF(((PyObject *)__pyx_v_child)); + __pyx_v_child = ((PyArray_Descr *)__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_v_new_offset); + __pyx_v_new_offset = __pyx_t_4; + __pyx_t_4 = 0; + } else { + __Pyx_UnpackTupleError(((PyObject *)__pyx_v_fields), 2); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":785 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":786 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == '>' and little_endian) or + */ + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_5)); + PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_kp_u_5)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_5)); + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L5; + } + __pyx_L5:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":788 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == '>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_6 = (__pyx_v_child->byteorder == '>'); + if (__pyx_t_6) { + __pyx_t_7 = __pyx_v_little_endian; + } else { + __pyx_t_7 = __pyx_t_6; + } + if (!__pyx_t_7) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":789 + * + * if ((child.byteorder == '>' and little_endian) or + * (child.byteorder == '<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * # One could encode it in the format string and have Cython + */ + __pyx_t_6 = (__pyx_v_child->byteorder == '<'); + if (__pyx_t_6) { + __pyx_t_8 = (!__pyx_v_little_endian); + __pyx_t_9 = __pyx_t_8; + } else { + __pyx_t_9 = __pyx_t_6; + } + __pyx_t_6 = __pyx_t_9; + } else { + __pyx_t_6 = __pyx_t_7; + } + if (__pyx_t_6) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":790 + * if ((child.byteorder == '>' and little_endian) or + * (child.byteorder == '<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_u_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_3)); + __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L6; + } + __pyx_L6:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":800 + * + * # Output padding bytes + * while offset[0] < new_offset: # <<<<<<<<<<<<<< + * f[0] = 120 # "x"; pad byte + * f += 1 + */ + while (1) { + __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!__pyx_t_6) break; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":801 + * # Output padding bytes + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< + * f += 1 + * offset[0] += 1 + */ + (__pyx_v_f[0]) = 120; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":802 + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte + * f += 1 # <<<<<<<<<<<<<< + * offset[0] += 1 + * + */ + __pyx_v_f += 1; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":803 + * f[0] = 120 # "x"; pad byte + * f += 1 + * offset[0] += 1 # <<<<<<<<<<<<<< + * + * offset[0] += child.itemsize + */ + (__pyx_v_offset[0]) += 1; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":805 + * offset[0] += 1 + * + * offset[0] += child.itemsize # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(child): + */ + (__pyx_v_offset[0]) += __pyx_v_child->elsize; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":807 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + __pyx_t_6 = (!PyDataType_HASFIELDS(__pyx_v_child)); + if (__pyx_t_6) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":808 + * + * if not PyDataType_HASFIELDS(child): + * t = child.type_num # <<<<<<<<<<<<<< + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") + */ + __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_v_t); + __pyx_v_t = __pyx_t_3; + __pyx_t_3 = 0; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":809 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + __pyx_t_6 = ((__pyx_v_end - __pyx_v_f) < 5); + if (__pyx_t_6) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":810 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_kp_u_6)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_u_6)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_u_6)); + __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L10; + } + __pyx_L10:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":813 + * + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + */ + __pyx_t_5 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 98; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":814 + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + */ + __pyx_t_3 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 66; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":815 + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + */ + __pyx_t_5 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 104; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":816 + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + */ + __pyx_t_3 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 72; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":817 + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + */ + __pyx_t_5 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 105; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":818 + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + */ + __pyx_t_3 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 73; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":819 + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + */ + __pyx_t_5 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 108; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":820 + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + */ + __pyx_t_3 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 76; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":821 + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + */ + __pyx_t_5 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 113; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":822 + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + */ + __pyx_t_3 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 81; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":823 + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + */ + __pyx_t_5 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 102; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":824 + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + */ + __pyx_t_3 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 100; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":825 + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + */ + __pyx_t_5 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 103; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":826 + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + */ + __pyx_t_3 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 102; + __pyx_v_f += 1; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":827 + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" + */ + __pyx_t_5 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 100; + __pyx_v_f += 1; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":828 + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + */ + __pyx_t_3 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 103; + __pyx_v_f += 1; + goto __pyx_L11; + } + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":829 + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_5 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 79; + goto __pyx_L11; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":831 + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * f += 1 + * else: + */ + __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_4), __pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_L11:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":832 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * f += 1 # <<<<<<<<<<<<<< + * else: + * # Cython ignores struct boundary information ("T{...}"), + */ + __pyx_v_f += 1; + goto __pyx_L9; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":836 + * # Cython ignores struct boundary information ("T{...}"), + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< + * return f + * + */ + __pyx_t_10 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_10 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_10; + } + __pyx_L9:; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":837 + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) + * return f # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_f; + goto __pyx_L0; + + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("numpy._util_dtypestring"); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_DECREF((PyObject *)__pyx_v_child); + __Pyx_DECREF(__pyx_v_fields); + __Pyx_DECREF(__pyx_v_childname); + __Pyx_DECREF(__pyx_v_new_offset); + __Pyx_DECREF(__pyx_v_t); + __Pyx_DECREF((PyObject *)__pyx_v_descr); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":952 + * + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef PyObject* baseptr + * if base is None: + */ + +static INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + PyObject *__pyx_v_baseptr; + int __pyx_t_1; + __Pyx_RefNannySetupContext("set_array_base"); + __Pyx_INCREF((PyObject *)__pyx_v_arr); + __Pyx_INCREF(__pyx_v_base); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":954 + * cdef inline void set_array_base(ndarray arr, object base): + * cdef PyObject* baseptr + * if base is None: # <<<<<<<<<<<<<< + * baseptr = NULL + * else: + */ + __pyx_t_1 = (__pyx_v_base == Py_None); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":955 + * cdef PyObject* baseptr + * if base is None: + * baseptr = NULL # <<<<<<<<<<<<<< + * else: + * Py_INCREF(base) # important to do this before decref below! + */ + __pyx_v_baseptr = NULL; + goto __pyx_L3; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":957 + * baseptr = NULL + * else: + * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< + * baseptr = <PyObject*>base + * Py_XDECREF(arr.base) + */ + Py_INCREF(__pyx_v_base); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":958 + * else: + * Py_INCREF(base) # important to do this before decref below! + * baseptr = <PyObject*>base # <<<<<<<<<<<<<< + * Py_XDECREF(arr.base) + * arr.base = baseptr + */ + __pyx_v_baseptr = ((PyObject *)__pyx_v_base); + } + __pyx_L3:; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":959 + * Py_INCREF(base) # important to do this before decref below! + * baseptr = <PyObject*>base + * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< + * arr.base = baseptr + * + */ + Py_XDECREF(__pyx_v_arr->base); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":960 + * baseptr = <PyObject*>base + * Py_XDECREF(arr.base) + * arr.base = baseptr # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + __pyx_v_arr->base = __pyx_v_baseptr; + + __Pyx_DECREF((PyObject *)__pyx_v_arr); + __Pyx_DECREF(__pyx_v_base); + __Pyx_RefNannyFinishContext(); +} + +/* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":962 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + +static INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_r = NULL; + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base"); + __Pyx_INCREF((PyObject *)__pyx_v_arr); + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":963 + * + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: # <<<<<<<<<<<<<< + * return None + * else: + */ + __pyx_t_1 = (__pyx_v_arr->base == NULL); + if (__pyx_t_1) { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":964 + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: + * return None # <<<<<<<<<<<<<< + * else: + * return <object>arr.base + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_None); + __pyx_r = Py_None; + goto __pyx_L0; + goto __pyx_L3; + } + /*else*/ { + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":966 + * return None + * else: + * return <object>arr.base # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); + __pyx_r = ((PyObject *)__pyx_v_arr->base); + goto __pyx_L0; + } + __pyx_L3:; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __pyx_L0:; + __Pyx_DECREF((PyObject *)__pyx_v_arr); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static struct PyMethodDef __pyx_methods[] = { + {__Pyx_NAMESTR("lars_fit_wrap"), (PyCFunction)__pyx_pf_9minilearn_lars_fit_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_9minilearn_lars_fit_wrap)}, + {0, 0, 0, 0} +}; + +static void __pyx_init_filenames(void); /*proto*/ + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + __Pyx_NAMESTR("minilearn"), + __Pyx_DOCSTR(__pyx_k_7), /* m_doc */ + -1, /* m_size */ + __pyx_methods /* m_methods */, + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 1, 0, 0}, + {&__pyx_kp_u_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 1, 0, 0}, + {&__pyx_kp_u_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 1, 0, 0}, + {&__pyx_kp_u_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 1, 0, 0}, + {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0}, + {&__pyx_kp_u_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 1, 0, 0}, + {&__pyx_kp_u_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 1, 0, 0}, + {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, + {&__pyx_n_s__X, __pyx_k__X, sizeof(__pyx_k__X), 0, 0, 1, 1}, + {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, + {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, + {&__pyx_n_s__base, __pyx_k__base, sizeof(__pyx_k__base), 0, 0, 1, 1}, + {&__pyx_n_s__beta, __pyx_k__beta, sizeof(__pyx_k__beta), 0, 0, 1, 1}, + {&__pyx_n_s__buf, __pyx_k__buf, sizeof(__pyx_k__buf), 0, 0, 1, 1}, + {&__pyx_n_s__byteorder, __pyx_k__byteorder, sizeof(__pyx_k__byteorder), 0, 0, 1, 1}, + {&__pyx_n_s__chol, __pyx_k__chol, sizeof(__pyx_k__chol), 0, 0, 1, 1}, + {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, + {&__pyx_n_s__descr, __pyx_k__descr, sizeof(__pyx_k__descr), 0, 0, 1, 1}, + {&__pyx_n_s__fields, __pyx_k__fields, sizeof(__pyx_k__fields), 0, 0, 1, 1}, + {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1}, + {&__pyx_n_s__ind, __pyx_k__ind, sizeof(__pyx_k__ind), 0, 0, 1, 1}, + {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1}, + {&__pyx_n_s__lars_fit_wrap, __pyx_k__lars_fit_wrap, sizeof(__pyx_k__lars_fit_wrap), 0, 0, 1, 1}, + {&__pyx_n_s__names, __pyx_k__names, sizeof(__pyx_k__names), 0, 0, 1, 1}, + {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1}, + {&__pyx_n_s__niter, __pyx_k__niter, sizeof(__pyx_k__niter), 0, 0, 1, 1}, + {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, + {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, + {&__pyx_n_s__obj, __pyx_k__obj, sizeof(__pyx_k__obj), 0, 0, 1, 1}, + {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, + {&__pyx_n_s__readonly, __pyx_k__readonly, sizeof(__pyx_k__readonly), 0, 0, 1, 1}, + {&__pyx_n_s__res, __pyx_k__res, sizeof(__pyx_k__res), 0, 0, 1, 1}, + {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1}, + {&__pyx_n_s__strides, __pyx_k__strides, sizeof(__pyx_k__strides), 0, 0, 1, 1}, + {&__pyx_n_s__suboffsets, __pyx_k__suboffsets, sizeof(__pyx_k__suboffsets), 0, 0, 1, 1}, + {&__pyx_n_s__type_num, __pyx_k__type_num, sizeof(__pyx_k__type_num), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +static int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + return 0; + __pyx_L1_error:; + return -1; +} + +#if PY_MAJOR_VERSION < 3 +PyMODINIT_FUNC initminilearn(void); /*proto*/ +PyMODINIT_FUNC initminilearn(void) +#else +PyMODINIT_FUNC PyInit_minilearn(void); /*proto*/ +PyMODINIT_FUNC PyInit_minilearn(void) +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + #if CYTHON_REFNANNY + void* __pyx_refnanny = NULL; + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); + if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); + } + __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit_minilearn(void)", __LINE__, __FILE__); + #endif + __pyx_init_filenames(); + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if PY_MAJOR_VERSION < 3 + __pyx_empty_bytes = PyString_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4(__Pyx_NAMESTR("minilearn"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_7), 0, PYTHON_API_VERSION); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + #if PY_MAJOR_VERSION < 3 + Py_INCREF(__pyx_m); + #endif + __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); + if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + /*--- Initialize various global constants etc. ---*/ + if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_module_is_main_minilearn) { + if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + } + /*--- Builtin init code ---*/ + if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Global init code ---*/ + /*--- Function export code ---*/ + /*--- Type init code ---*/ + /*--- Type import code ---*/ + __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject)); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject)); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject)); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Function import code ---*/ + /*--- Execution code ---*/ + + /* "/volatile/fabian/dev/scikit-learn/scikits/learn/src/minilearn/minilearn.pyx":6 + * """ + * + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * + */ + __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "/volatile/fabian/dev/scikit-learn/scikits/learn/src/minilearn/minilearn.pyx":1 + * """ # <<<<<<<<<<<<<< + * Wrapper for minilearn + * http://fabianp.github.com/minilearn/ + */ + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__lars_fit_wrap); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_8), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + + /* "/usr/lib/python2.5/site-packages/Cython-0.12-py2.5-linux-i686.egg/Cython/Includes/stdlib.pxd":2 + * + * cdef extern from "stdlib.h" nogil: # <<<<<<<<<<<<<< + * void free(void *ptr) + * void *malloc(size_t size) + */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + if (__pyx_m) { + __Pyx_AddTraceback("init minilearn"); + Py_DECREF(__pyx_m); __pyx_m = 0; + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init minilearn"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if PY_MAJOR_VERSION < 3 + return; + #else + return __pyx_m; + #endif +} + +static const char *__pyx_filenames[] = { + "minilearn.pyx", + "numpy.pxd", +}; + +/* Runtime support code */ + +static void __pyx_init_filenames(void) { + __pyx_f = __pyx_filenames; +} + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AS_STRING(kw_name)); + #endif +} + +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *number, *more_or_less; + + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + number = (num_expected == 1) ? "" : "s"; + PyErr_Format(PyExc_TypeError, + #if PY_VERSION_HEX < 0x02050000 + "%s() takes %s %d positional argument%s (%d given)", + #else + "%s() takes %s %zd positional argument%s (%zd given)", + #endif + func_name, more_or_less, num_expected, number, num_found); +} + +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + } else { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) { + #else + if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) { + #endif + goto invalid_keyword_type; + } else { + for (name = first_kw_arg; *name; name++) { + #if PY_MAJOR_VERSION >= 3 + if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && + PyUnicode_Compare(**name, key) == 0) break; + #else + if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && + _PyString_Eq(**name, key)) break; + #endif + } + if (*name) { + values[name-argnames] = value; + } else { + /* unexpected keyword found */ + for (name=argnames; name != first_kw_arg; name++) { + if (**name == key) goto arg_passed_twice; + #if PY_MAJOR_VERSION >= 3 + if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && + PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice; + #else + if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && + _PyString_Eq(**name, key)) goto arg_passed_twice; + #endif + } + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + } + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, **name); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%s() got an unexpected keyword argument '%s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +static INLINE int __Pyx_IsLittleEndian(void) { + unsigned int n = 1; + return *(unsigned char*)(&n) != 0; +} + +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + int new_count, enc_count; + int is_complex; + char enc_type; + char packmode; +} __Pyx_BufFmt_Context; + +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} + +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t < '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} + +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + char msg[] = {ch, 0}; + PyErr_Format(PyExc_ValueError, "Unexpected format string character: '%s'", msg); +} + +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case 'b': return "'char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 0: return "end"; + default: return "unparseable format string"; + } +} + +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} + +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case 'c': case 'b': case 'B': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} + +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_s_long_long; +#endif + +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_s_long_long) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} + +static size_t __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': case 'b': case 'h': case 'i': case 'l': case 'q': return 'I'; + case 'B': case 'H': case 'I': case 'L': case 'Q': return 'U'; + case 'f': case 'd': case 'g': return (is_complex ? 'C' : 'R'); + case 'O': return 'O'; + case 'P': return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} + +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} + +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset; + if (ctx->enc_type == 0) return 0; + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + + if (ctx->packmode == '@' || ctx->packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->packmode == '@') { + int align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + int align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + } + + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + /* special case -- treat as struct rather than complex number */ + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %"PY_FORMAT_SIZE_T"d " + "but %"PY_FORMAT_SIZE_T"d expected", ctx->fmt_offset, offset); + return -1; + } + + ctx->fmt_offset += size; + + --ctx->enc_count; /* Consume from buffer string */ + + /* Done checking, move to next field, pushing or popping struct stack if needed */ + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; /* breaks both loops as ctx->enc_count == 0 */ + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; /* empty struct */ + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} + +static int __Pyx_BufFmt_FirstPack(__Pyx_BufFmt_Context* ctx) { + if (ctx->enc_type != 0 || ctx->packmode != '@') { + PyErr_SetString(PyExc_ValueError, "Buffer packing mode currently only allowed at beginning of format string (this is a defect)"); + return -1; + } + return 0; +} + +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case 10: + case 13: + ++ts; + break; + case '<': + if (!__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + if (__Pyx_BufFmt_FirstPack(ctx) == -1) return NULL; + ctx->packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + if (__Pyx_BufFmt_FirstPack(ctx) == -1) return NULL; + ctx->packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + if (__Pyx_BufFmt_FirstPack(ctx) == -1) return NULL; + ctx->packmode = *ts++; + break; + case 'T': /* substruct */ + { + int i; + const char* ts_after_sub; + int struct_count = ctx->new_count; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + } + break; + case '}': /* end of substruct; either repeat or move on */ + ++ts; + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } /* fall through */ + case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': + if (ctx->enc_type == *ts && got_Z == ctx->is_complex) { + /* Continue pooling same type */ + ctx->enc_count += ctx->new_count; + } else { + /* New type */ + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + } + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + default: + { + ctx->new_count = __Pyx_BufFmt_ParseNumber(&ts); + if (ctx->new_count == -1) { /* First char was not a digit */ + char msg[2] = { *ts, 0 }; + PyErr_Format(PyExc_ValueError, + "Does not understand character buffer dtype format string ('%s')", msg); + return NULL; + } + } + + } + } +} + +static INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} + +static int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack) { + if (obj == Py_None) { + __Pyx_ZeroBuffer(buf); + return 0; + } + buf->buf = NULL; + if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; + if (buf->ndim != nd) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if ((unsigned)buf->itemsize != dtype->size) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%"PY_FORMAT_SIZE_T"d byte%s) does not match size of '%s' (%"PY_FORMAT_SIZE_T"d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, + dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_ZeroBuffer(buf); + return -1; +} + +static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (info->buf == NULL) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} + +static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyThreadState *tstate = PyThreadState_GET(); + + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} + +static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { + PyThreadState *tstate = PyThreadState_GET(); + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} + + +static INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + #if PY_VERSION_HEX < 0x02050000 + "need more than %d value%s to unpack", (int)index, + #else + "need more than %zd value%s to unpack", index, + #endif + (index == 1) ? "" : "s"); +} + +static INLINE void __Pyx_RaiseTooManyValuesError(void) { + PyErr_SetString(PyExc_ValueError, "too many values to unpack"); +} + +static PyObject *__Pyx_UnpackItem(PyObject *iter, Py_ssize_t index) { + PyObject *item; + if (!(item = PyIter_Next(iter))) { + if (!PyErr_Occurred()) { + __Pyx_RaiseNeedMoreValuesError(index); + } + } + return item; +} + +static int __Pyx_EndUnpack(PyObject *iter) { + PyObject *item; + if ((item = PyIter_Next(iter))) { + Py_DECREF(item); + __Pyx_RaiseTooManyValuesError(); + return -1; + } + else if (!PyErr_Occurred()) + return 0; + else + return -1; +} + +static INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(PyObject_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +static INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(); + } +} + +static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact) +{ + if (!type) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (none_allowed && obj == Py_None) return 1; + else if (exact) { + if (Py_TYPE(obj) == type) return 1; + } + else { + if (PyObject_TypeCheck(obj, type)) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%s' has incorrect type (expected %s, got %s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + #if PY_VERSION_HEX >= 0x02060000 + if (Py_TYPE(obj)->tp_flags & Py_TPFLAGS_HAVE_NEWBUFFER) + return PyObject_GetBuffer(obj, view, flags); + #endif + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pf_5numpy_7ndarray___getbuffer__(obj, view, flags); + else { + PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name); + return -1; + } +} + +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject* obj = view->obj; + if (obj) { +if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pf_5numpy_7ndarray___releasebuffer__(obj, view); + Py_DECREF(obj); + view->obj = NULL; + } +} + +#endif + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) { + PyObject *__import__ = 0; + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + __import__ = __Pyx_GetAttrString(__pyx_b, "__import__"); + if (!__import__) + goto bad; + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + module = PyObject_CallFunctionObjArgs(__import__, + name, global_dict, empty_dict, list, NULL); +bad: + Py_XDECREF(empty_list); + Py_XDECREF(__import__); + Py_XDECREF(empty_dict); + return module; +} + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } +/* + static INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { +#if HAVE_HYPOT + return hypotf(z.real, z.imag); +#else + return sqrtf(z.real*z.real + z.imag*z.imag); +#endif + } +*/ +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } +/* + static INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { +#if HAVE_HYPOT + return hypot(z.real, z.imag); +#else + return sqrt(z.real*z.real + z.imag*z.imag); +#endif + } +*/ +#endif + +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { + PyObject *result; + result = PyObject_GetAttr(dict, name); + if (!result) + PyErr_SetObject(PyExc_NameError, name); + return result; +} + +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) { + Py_XINCREF(type); + Py_XINCREF(value); + Py_XINCREF(tb); + /* First, check the traceback argument, replacing None with NULL. */ + if (tb == Py_None) { + Py_DECREF(tb); + tb = 0; + } + else if (tb != NULL && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + /* Next, replace a missing value with None */ + if (value == NULL) { + value = Py_None; + Py_INCREF(value); + } + #if PY_VERSION_HEX < 0x02050000 + if (!PyClass_Check(type)) + #else + if (!PyType_Check(type)) + #endif + { + /* Raising an instance. The value should be a dummy. */ + if (value != Py_None) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + /* Normalize to raise <class>, <instance> */ + Py_DECREF(value); + value = type; + #if PY_VERSION_HEX < 0x02050000 + if (PyInstance_Check(type)) { + type = (PyObject*) ((PyInstanceObject*)type)->in_class; + Py_INCREF(type); + } + else { + type = 0; + PyErr_SetString(PyExc_TypeError, + "raise: exception must be an old-style class or instance"); + goto raise_error; + } + #else + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + #endif + } + + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} + +#else /* Python 3+ */ + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) { + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (!PyExceptionClass_Check(type)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + + PyErr_SetObject(type, value); + + if (tb) { + PyThreadState *tstate = PyThreadState_GET(); + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } + } + +bad: + return; +} +#endif + +static INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { + const unsigned char neg_one = (unsigned char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned char" : + "value too large to convert to unsigned char"); + } + return (unsigned char)-1; + } + return (unsigned char)val; + } + return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); +} + +static INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { + const unsigned short neg_one = (unsigned short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned short" : + "value too large to convert to unsigned short"); + } + return (unsigned short)-1; + } + return (unsigned short)val; + } + return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); +} + +static INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { + const unsigned int neg_one = (unsigned int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned int" : + "value too large to convert to unsigned int"); + } + return (unsigned int)-1; + } + return (unsigned int)val; + } + return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); +} + +static INLINE char __Pyx_PyInt_AsChar(PyObject* x) { + const char neg_one = (char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to char" : + "value too large to convert to char"); + } + return (char)-1; + } + return (char)val; + } + return (char)__Pyx_PyInt_AsLong(x); +} + +static INLINE short __Pyx_PyInt_AsShort(PyObject* x) { + const short neg_one = (short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to short" : + "value too large to convert to short"); + } + return (short)-1; + } + return (short)val; + } + return (short)__Pyx_PyInt_AsLong(x); +} + +static INLINE int __Pyx_PyInt_AsInt(PyObject* x) { + const int neg_one = (int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to int" : + "value too large to convert to int"); + } + return (int)-1; + } + return (int)val; + } + return (int)__Pyx_PyInt_AsLong(x); +} + +static INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { + const signed char neg_one = (signed char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed char" : + "value too large to convert to signed char"); + } + return (signed char)-1; + } + return (signed char)val; + } + return (signed char)__Pyx_PyInt_AsSignedLong(x); +} + +static INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { + const signed short neg_one = (signed short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed short" : + "value too large to convert to signed short"); + } + return (signed short)-1; + } + return (signed short)val; + } + return (signed short)__Pyx_PyInt_AsSignedLong(x); +} + +static INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { + const signed int neg_one = (signed int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed int" : + "value too large to convert to signed int"); + } + return (signed int)-1; + } + return (signed int)val; + } + return (signed int)__Pyx_PyInt_AsSignedLong(x); +} + +static INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { + const unsigned long neg_one = (unsigned long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long)-1; + } + return (unsigned long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long)-1; + } + return PyLong_AsUnsignedLong(x); + } else { + return PyLong_AsLong(x); + } + } else { + unsigned long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (unsigned long)-1; + val = __Pyx_PyInt_AsUnsignedLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { + const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG)-1; + } + return (unsigned PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG)-1; + } + return PyLong_AsUnsignedLongLong(x); + } else { + return PyLong_AsLongLong(x); + } + } else { + unsigned PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (unsigned PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsUnsignedLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static INLINE long __Pyx_PyInt_AsLong(PyObject* x) { + const long neg_one = (long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long)-1; + } + return (long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long)-1; + } + return PyLong_AsUnsignedLong(x); + } else { + return PyLong_AsLong(x); + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (long)-1; + val = __Pyx_PyInt_AsLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { + const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to PY_LONG_LONG"); + return (PY_LONG_LONG)-1; + } + return (PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to PY_LONG_LONG"); + return (PY_LONG_LONG)-1; + } + return PyLong_AsUnsignedLongLong(x); + } else { + return PyLong_AsLongLong(x); + } + } else { + PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { + const signed long neg_one = (signed long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed long"); + return (signed long)-1; + } + return (signed long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed long"); + return (signed long)-1; + } + return PyLong_AsUnsignedLong(x); + } else { + return PyLong_AsLong(x); + } + } else { + signed long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (signed long)-1; + val = __Pyx_PyInt_AsSignedLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { + const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed PY_LONG_LONG"); + return (signed PY_LONG_LONG)-1; + } + return (signed PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed PY_LONG_LONG"); + return (signed PY_LONG_LONG)-1; + } + return PyLong_AsUnsignedLongLong(x); + } else { + return PyLong_AsLongLong(x); + } + } else { + signed PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (signed PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsSignedLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static INLINE npy_intp __Pyx_PyInt_from_py_npy_intp(PyObject* x) { + const npy_intp neg_one = (npy_intp)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(npy_intp) == sizeof(char)) { + if (is_unsigned) + return (npy_intp)__Pyx_PyInt_AsUnsignedChar(x); + else + return (npy_intp)__Pyx_PyInt_AsSignedChar(x); + } else if (sizeof(npy_intp) == sizeof(short)) { + if (is_unsigned) + return (npy_intp)__Pyx_PyInt_AsUnsignedShort(x); + else + return (npy_intp)__Pyx_PyInt_AsSignedShort(x); + } else if (sizeof(npy_intp) == sizeof(int)) { + if (is_unsigned) + return (npy_intp)__Pyx_PyInt_AsUnsignedInt(x); + else + return (npy_intp)__Pyx_PyInt_AsSignedInt(x); + } else if (sizeof(npy_intp) == sizeof(long)) { + if (is_unsigned) + return (npy_intp)__Pyx_PyInt_AsUnsignedLong(x); + else + return (npy_intp)__Pyx_PyInt_AsSignedLong(x); + } else if (sizeof(npy_intp) == sizeof(PY_LONG_LONG)) { + if (is_unsigned) + return (npy_intp)__Pyx_PyInt_AsUnsignedLongLong(x); + else + return (npy_intp)__Pyx_PyInt_AsSignedLongLong(x); +#if 0 + } else if (sizeof(npy_intp) > sizeof(short) && + sizeof(npy_intp) < sizeof(int)) { /* __int32 ILP64 ? */ + if (is_unsigned) + return (npy_intp)__Pyx_PyInt_AsUnsignedInt(x); + else + return (npy_intp)__Pyx_PyInt_AsSignedInt(x); +#endif + } + PyErr_SetString(PyExc_TypeError, "npy_intp"); + return (npy_intp)-1; +} + +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, + long size) +{ + PyObject *py_module = 0; + PyObject *result = 0; + PyObject *py_name = 0; + + py_module = __Pyx_ImportModule(module_name); + if (!py_module) + goto bad; + #if PY_MAJOR_VERSION < 3 + py_name = PyString_FromString(class_name); + #else + py_name = PyUnicode_FromString(class_name); + #endif + if (!py_name) + goto bad; + result = PyObject_GetAttr(py_module, py_name); + Py_DECREF(py_name); + py_name = 0; + Py_DECREF(py_module); + py_module = 0; + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%s.%s is not a type object", + module_name, class_name); + goto bad; + } + if (((PyTypeObject *)result)->tp_basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%s.%s does not appear to be the correct type object", + module_name, class_name); + goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(py_module); + Py_XDECREF(result); + return 0; +} +#endif + +#ifndef __PYX_HAVE_RT_ImportModule +#define __PYX_HAVE_RT_ImportModule +static PyObject *__Pyx_ImportModule(const char *name) { + PyObject *py_name = 0; + PyObject *py_module = 0; + + #if PY_MAJOR_VERSION < 3 + py_name = PyString_FromString(name); + #else + py_name = PyUnicode_FromString(name); + #endif + if (!py_name) + goto bad; + py_module = PyImport_Import(py_name); + Py_DECREF(py_name); + return py_module; +bad: + Py_XDECREF(py_name); + return 0; +} +#endif + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" + +static void __Pyx_AddTraceback(const char *funcname) { + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + PyObject *py_globals = 0; + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(__pyx_filename); + #else + py_srcfile = PyUnicode_FromString(__pyx_filename); + #endif + if (!py_srcfile) goto bad; + if (__pyx_clineno) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_globals = PyModule_GetDict(__pyx_m); + if (!py_globals) goto bad; + py_code = PyCode_New( + 0, /*int argcount,*/ + #if PY_MAJOR_VERSION >= 3 + 0, /*int kwonlyargcount,*/ + #endif + 0, /*int nlocals,*/ + 0, /*int stacksize,*/ + 0, /*int flags,*/ + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + __pyx_lineno, /*int firstlineno,*/ + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + if (!py_code) goto bad; + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + py_globals, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = __pyx_lineno; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else /* Python 3+ has unicode identifiers */ + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +/* Type Conversion Functions */ + +static INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + if (x == Py_True) return 1; + else if ((x == Py_False) | (x == Py_None)) return 0; + else return PyObject_IsTrue(x); +} + +static INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { + PyNumberMethods *m; + const char *name = NULL; + PyObject *res = NULL; +#if PY_VERSION_HEX < 0x03000000 + if (PyInt_Check(x) || PyLong_Check(x)) +#else + if (PyLong_Check(x)) +#endif + return Py_INCREF(x), x; + m = Py_TYPE(x)->tp_as_number; +#if PY_VERSION_HEX < 0x03000000 + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = PyNumber_Long(x); + } +#else + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Long(x); + } +#endif + if (res) { +#if PY_VERSION_HEX < 0x03000000 + if (!PyInt_Check(res) && !PyLong_Check(res)) { +#else + if (!PyLong_Check(res)) { +#endif + PyErr_Format(PyExc_TypeError, + "__%s__ returned non-%s (type %.200s)", + name, name, Py_TYPE(res)->tp_name); + Py_DECREF(res); + return NULL; + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} + +static INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject* x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} + +static INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { +#if PY_VERSION_HEX < 0x02050000 + if (ival <= LONG_MAX) + return PyInt_FromLong((long)ival); + else { + unsigned char *bytes = (unsigned char *) &ival; + int one = 1; int little = (int)*(unsigned char*)&one; + return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); + } +#else + return PyInt_FromSize_t(ival); +#endif +} + +static INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { + unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); + if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { + return (size_t)-1; + } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to size_t"); + return (size_t)-1; + } + return (size_t)val; +} + + +#endif /* Py_PYTHON_H */ diff --git a/scikits/learn/src/minilearn/minilearn.h b/scikits/learn/src/minilearn/minilearn.h new file mode 100644 index 0000000000..c2edc64e36 --- /dev/null +++ b/scikits/learn/src/minilearn/minilearn.h @@ -0,0 +1,20 @@ + +#if defined(__LP64__) /* In LP64 match sizes with the 32 bit ABI */ +typedef int ml_int; +#else +typedef long int ml_int; +#endif + + + +/* lars.c */ +void lars_fit(int nfeatures, int nsamples, double *X, double *b, double *beta, int *ind, double *L, int niter); + +/* from cholesky.c */ +int cholesky_update(double *R, int ldr, int p, double *X, double *Z, int ldz, + int nz, double *Y, double *rho, double *C, double *S); + +void givens_rot(double *da, double *db, double *dc, double *ds); + +double cholesky_logdet (double *L, int n); + diff --git a/scikits/learn/src/minilearn/minilearn.pyx b/scikits/learn/src/minilearn/minilearn.pyx new file mode 100644 index 0000000000..718b215756 --- /dev/null +++ b/scikits/learn/src/minilearn/minilearn.pyx @@ -0,0 +1,27 @@ +""" +Wrapper for minilearn +http://fabianp.github.com/minilearn/ +""" + +import numpy as np +cimport numpy as np + +cdef extern int RowMajorStrg + +cdef extern from "minilearn.h": + void lars_fit (int, int, double *, double *, double *, int *, double *, int) + + +def lars_fit_wrap (np.ndarray[np.float64_t, ndim=2, mode='c'] X, + np.ndarray[np.float64_t, ndim=1, mode='c'] res, + np.ndarray[np.float64_t, ndim=1, mode='c'] beta, + np.ndarray[np.int32_t, ndim=1, mode='c'] ind, + np.ndarray[np.float64_t, ndim=1, mode='c'] chol, + np.npy_intp niter): + """ + res will be rewritten with the residual at output + """ + lars_fit (<int> X.shape[1], <int> X.shape[0], <double *> X.data, + <double *> res.data, <double *> beta.data, <int *> + ind.data, <double *> chol.data, <int> niter) + diff --git a/scikits/learn/tests/test_glm.py b/scikits/learn/tests/test_glm.py new file mode 100644 index 0000000000..fdf1389da9 --- /dev/null +++ b/scikits/learn/tests/test_glm.py @@ -0,0 +1,23 @@ +from numpy.testing import * + +from scikits.learn import glm + +X = [[1, 0, -.1], + [0, 0, 0], + [0, 1, .1]] +Y = [1, 0, -1] + +clf = glm.LassoLARS() +clf.fit(X, Y) + +def test_1(): + """ + Very simple test + """ + clf = glm.LassoLARS() + clf.fit(X, Y) + assert_array_almost_equal(clf.coef_, + [-1.4142, -1.4142, 0], decimal=4) + + + -- GitLab