[Scipy-svn] r2284 - in trunk/Lib/sandbox/pyem: . pyem

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Oct 12 09:48:56 EDT 2006


Author: cdavid
Date: 2006-10-12 08:48:48 -0500 (Thu, 12 Oct 2006)
New Revision: 2284

Added:
   trunk/Lib/sandbox/pyem/example.py
   trunk/Lib/sandbox/pyem/pyem/setup.py
Removed:
   trunk/Lib/sandbox/pyem/MANIFEST.in
   trunk/Lib/sandbox/pyem/setup.py
Modified:
   trunk/Lib/sandbox/pyem/Changelog
   trunk/Lib/sandbox/pyem/LICENSE.txt
   trunk/Lib/sandbox/pyem/pyem/online_em.py
Log:
[pyem @ david at ar.media.kyoto-u.ac.jp-20061012121917-e17bd9b64f23f8ea]
Change of layout for inclusion in scipy
David Cournapeau <david at ar.media.kyoto-u.ac.jp> | 2006-10-12 21:19:17 +0900 (Thu, 12 Oct 2006)

Modified: trunk/Lib/sandbox/pyem/Changelog
===================================================================
--- trunk/Lib/sandbox/pyem/Changelog	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/Changelog	2006-10-12 13:48:48 UTC (rev 2284)
@@ -1,3 +1,10 @@
+pyem (0.5.3) Thu, 12 Oct 2006 21:08:21 +0900
+
+	* Change the layout and setup.py for inclusion to scipy.
+	* Initial script for online em.
+
+-- David Cournapeau <david at ar.media.kyoto-u.ac.jp> 
+
 pyem (0.5.3) Tue, 03 Oct 2006 18:28:13 +0900
 
 	* Update tests so that they work within the numpy test framework

Modified: trunk/Lib/sandbox/pyem/LICENSE.txt
===================================================================
--- trunk/Lib/sandbox/pyem/LICENSE.txt	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/LICENSE.txt	2006-10-12 13:48:48 UTC (rev 2284)
@@ -1,29 +1,3 @@
-Copyright (c) 2001, 2002 Enthought, Inc.
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  a. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-  b. 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.
-  c. Neither the name of the Enthought nor the names of its contributors
-     may be used to endorse or promote products derived from this software
-     without specific prior 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 REGENTS OR 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.
-
+Author: David Cournapeau <david at ar.media.kyoto-u.ac.jp>
+Copyright: 2006
+License: BSD-style license. See LICENSE.txt in the scipy source directory.

Deleted: trunk/Lib/sandbox/pyem/MANIFEST.in
===================================================================
--- trunk/Lib/sandbox/pyem/MANIFEST.in	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/MANIFEST.in	2006-10-12 13:48:48 UTC (rev 2284)
@@ -1,6 +0,0 @@
-include pyem/src/c_numpy.pxd
-include pyem/src/c_python.pxd
-include Changelog
-include TODO
-include LICENSE.txt
-#exclude pyem/_c_densities.py

Added: trunk/Lib/sandbox/pyem/example.py
===================================================================
--- trunk/Lib/sandbox/pyem/example.py	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/example.py	2006-10-12 13:48:48 UTC (rev 2284)
@@ -0,0 +1,107 @@
+#! /usr/bin/env python
+
+# Example of use of pyem toolbox. Feel free to change parameters
+# such as dimension, number of components, mode of covariance.
+#
+# You can also try less trivial things such as adding outliers, sampling
+# a mixture with full covariance and estimating it with a mixture with diagonal
+# gaussians (replace the mode of the learned model lgm)
+#
+# Later, I hope to add functions for number of component estimation using eg BIC
+
+import numpy as N
+from numpy.random import seed
+
+from scipy.sandbox.pyem import GM, GMM, EM
+import copy
+
+seed(1)
+#+++++++++++++++++++++++++++++
+# Meta parameters of the model
+#   - k: Number of components
+#   - d: dimension of each Gaussian
+#   - mode: Mode of covariance matrix: full or diag (string)
+#   - nframes: number of frames (frame = one data point = one
+#   row of d elements)
+k       = 2 
+d       = 2
+mode    = 'diag'
+nframes = 1e3
+
+#+++++++++++++++++++++++++++++++++++++++++++
+# Create an artificial GMM model, samples it
+#+++++++++++++++++++++++++++++++++++++++++++
+w, mu, va   = GM.gen_param(d, k, mode, spread = 1.5)
+gm          = GM.fromvalues(w, mu, va)
+
+# Sample nframes frames  from the model
+data    = gm.sample(nframes)
+
+#++++++++++++++++++++++++
+# Learn the model with EM
+#++++++++++++++++++++++++
+
+# Init the model
+lgm = GM(d, k, mode)
+gmm = GMM(lgm, 'kmean')
+gmm.init(data)
+
+# Keep a copy for drawing later
+gm0 = copy.copy(lgm)
+
+# The actual EM, with likelihood computation. The treshold
+# is compared to the (linearly appromixated) derivative of the likelihood
+em      = EM()
+like    = em.train(data, gmm, maxiter = 30, thresh = 1e-8)
+
+#+++++++++++++++
+# Draw the model
+#+++++++++++++++
+import pylab as P
+P.subplot(2, 1, 1)
+
+level   = 0.8
+if not d == 1:
+    P.plot(data[:, 0], data[:, 1], '.', label = '_nolegend_')
+
+    # h keeps the handles of the plot, so that you can modify 
+    # its parameters like label or color
+    h   = gm.plot(level = level)
+    [i.set_color('g') for i in h]
+    h[0].set_label('true confidence ellipsoides')
+
+    # Initial confidence ellipses as found by kmean
+    h   = gm0.plot(level = level)
+    [i.set_color('k') for i in h]
+    h[0].set_label('kmean confidence ellipsoides')
+
+    # Values found by EM
+    h   = lgm.plot(level = level)
+    [i.set_color('r') for i in h]
+    h[0].set_label('kmean confidence ellipsoides')
+
+    P.legend(loc = 0)
+else:
+    # The 1d plotting function is quite elaborate: the confidence
+    # interval are represented by filled areas, the pdf of the mixture and
+    # the pdf of each component is drawn (optional)
+    h   = gm.plot1d(level = level)
+    [i.set_color('g') for i in h['pdf']]
+    h['pdf'][0].set_label('true pdf')
+
+    h0  = gm0.plot1d(level = level)
+    [i.set_color('k') for i in h0['pdf']]
+    h0['pdf'][0].set_label('initial pdf')
+
+    hl  = lgm.plot1d(fill = 1, level = level)
+    [i.set_color('r') for i in hl['pdf']]
+    hl['pdf'][0].set_label('pdf found by EM')
+
+    P.legend(loc = 0)
+
+P.subplot(2, 1, 2)
+P.plot(like)
+P.title('log likelihood')
+
+P.show()
+P.save('2d diag.png')

Modified: trunk/Lib/sandbox/pyem/pyem/online_em.py
===================================================================
--- trunk/Lib/sandbox/pyem/pyem/online_em.py	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/pyem/online_em.py	2006-10-12 13:48:48 UTC (rev 2284)
@@ -1,5 +1,5 @@
 # /usr/bin/python
-# Last Change: Fri Oct 06 08:00 PM 2006 J
+# Last Change: Thu Oct 12 09:00 PM 2006 J
 
 #---------------------------------------------
 # This is not meant to be used yet !!!! I am 
@@ -211,11 +211,16 @@
         nu[i]	= 1./(1 + lamb[i] / nu[i-1])
 
     gamma   = N.zeros((nframes, k))
+    agamma  = []
+    apw     = []
+    apmu    = []
+    apva    = []
+    print "========== Online Manual ==========="
     for e in range(emiter):
-        print "online manual:"
-        print pw
-        print pmu
-        print pva
+        print "online manual: estep %d, printing p* state " % e
+        apw.append(pw.copy())
+        apmu.append(pmu.copy())
+        apva.append(pva.copy())
         for t in range(nframes):
             gamma[t]    = multiple_gauss_den(data[t:t+1, :], pmu, pva)[0]
             gamma[t]    *= pw
@@ -234,32 +239,52 @@
             #pw  = cw.copy()
             #pmu = cmu.copy()
             #pva = cva.copy()
-        print gamma[-1]
+        print "gamma[end]: " + str(gamma[-1])
         pw  = cw.copy()
         pmu = cmu.copy()
         pva = cva.copy()
+        agamma.append(gamma.copy())
 
-    print "online manual:"
-    print pw
-    print pmu
-    print pva
+    gamma2  = N.zeros((nframes, k))
+    agamma2 = []
+    apw2    = []
+    apmu2   = []
+    apva2   = []
+    print "========== Online Automatic ==========="
     for e in range(emiter):
-        print "online automatic:"
-        print ogmm2.pw
-        print ogmm2.pmu
-        print ogmm2.pva
+        print "online automatic: estep %d, printing p* state " % e
+        apw2.append(ogmm2.pw.copy())
+        apmu2.append(ogmm2.pmu.copy())
+        apva2.append(ogmm2.pva.copy())
         for t in range(nframes):
-            gamma   = ogmm2.sufficient_statistics(data[t:t+1, :], nu[t])
-            ogmm2.update_em(data[t, :], gamma, nu[t])
-        print gamma
+            gamma2[t]   = ogmm2.sufficient_statistics(data[t:t+1, :], nu[t])
+            #gamma2[t]   = multiple_gauss_den(data[t:t+1, :], ogmm2.pmu, ogmm2.pva)[0]
+            #gamma2[t]   *= ogmm2.pw
+            #gamma2[t]   /= N.sum(gamma2[t])
+            #try:
+            #    assert_array_equal(agamma, gamma2[t])
+            #except AssertionError:
+            #    print "error for estep %d, step %d" % (e, t)
+            #    print ogmm2.pw
+            #    print ogmm2.pmu
+            #    print ogmm2.pva
+            #    raise 
+            ogmm2.update_em(data[t, :], gamma2[t], nu[t])
+            #ogmm2.cw	= (1 - nu[t]) * ogmm2.cw + nu[t] * agamma
+            ## loop through each component
+            #for i in range(k):
+            #    ogmm2.cx[i]   = (1 - nu[t]) * ogmm2.cx[i] + nu[t] * data[t, :] * agamma[i]
+            #    ogmm2.cxx[i]  = (1 - nu[t]) * ogmm2.cxx[i] + nu[t] * data[t, :] ** 2 * agamma[i]
+
+            #    ogmm2.cmu[i]  = ogmm2.cx[i] / ogmm2.cw[i]
+            #    ogmm2.cva[i]  = ogmm2.cxx[i] / ogmm2.cw[i] - ogmm2.cmu[i] ** 2
+
+        print "gamma[end]: " + str(gamma2[-1])
+        agamma2.append(gamma2.copy())
         ogmm2.pw  = ogmm2.cw.copy()
         ogmm2.pmu = ogmm2.cmu.copy()
         ogmm2.pva = ogmm2.cva.copy()
 
-    print "online automatic:"
-    print ogmm2.pw
-    print ogmm2.pmu
-    print ogmm2.pva
     # #ogm.set_param(pw, pmu, pva)
     # print "weights off vs on: \n" + str(lgm.w) + "\n " + str(cw)
     # print "mean off vs on: \n" + str(lgm.mu) + "\n " + str(cmu)
@@ -267,12 +292,16 @@
     # print "weights off vs on2: \n" + str(lgm.w) + "\n " + str(ogmm2.cw)
     # print "mean off vs on2: \n" + str(lgm.mu) + "\n " + str(ogmm2.cmu)
     # print "variances off vs on2: \n" + str(lgm.va) + "\n " + str(ogmm2.cva)
-    #assert_array_almost_equal(cw, lgm.w)
-    #assert_array_almost_equal(cmu, lgm.mu)
-    #assert_array_almost_equal(cva, lgm.va)
-    assert_array_almost_equal(ogmm2.cw, lgm.w)
-    assert_array_almost_equal(ogmm2.cmu, lgm.mu)
-    assert_array_almost_equal(ogmm2.cva, lgm.va)
+    # assert_array_almost_equal(cw, lgm.w)
+    # assert_array_almost_equal(cmu, lgm.mu)
+    # assert_array_almost_equal(cva, lgm.va)
+    assert_array_equal(ogmm2.pw, pw)
+    assert_array_equal(ogmm2.pmu, pmu)
+    assert_array_equal(ogmm2.pva, pva)
+    assert_array_equal(agamma[0], agamma2[0])
+    #assert_array_almost_equal(ogmm2.cw, lgm.w)
+    #assert_array_almost_equal(ogmm2.cmu, lgm.mu)
+    #assert_array_almost_equal(ogmm2.cva, lgm.va)
     # #+++++++++++++++
     # # Draw the model
     # #+++++++++++++++

Added: trunk/Lib/sandbox/pyem/pyem/setup.py
===================================================================
--- trunk/Lib/sandbox/pyem/pyem/setup.py	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/pyem/setup.py	2006-10-12 13:48:48 UTC (rev 2284)
@@ -0,0 +1,142 @@
+#! /usr/bin/env python
+# Last Change: Fri Oct 06 09:00 PM 2006 J
+# TODO:
+#   - check how to handle cmd line build options with distutils and use
+#   it in the building process
+
+""" pyem is a small python package to estimate Gaussian Mixtures Models
+from data, using Expectation Maximization"""
+
+from os.path import join
+from info import version as pyem_version
+
+DISTNAME    = 'pyem' 
+VERSION     = pyem_version
+DESCRIPTION ='A python module for Expectation Maximization learning of mixtures pdf',
+AUTHOR      ='David Cournapeau',
+AUTHOR_EMAIL='david at ar.media.kyoto-u.ac.jp',
+URL         ='http://ar.media.kyoto-u.ac.jp/members/david',
+
+def configuration(parent_package='',top_path=None, package_name='pyem'):
+    from numpy.distutils.misc_util import Configuration
+    config = Configuration(package_name,parent_package,top_path,
+             version     = VERSION)
+    config.add_data_dir('tests')
+    config.add_subpackage('profile_data')
+    config.add_extension('c_gden',
+                         #define_macros=[('LIBSVM_EXPORTS', None),
+                         #               ('LIBSVM_DLL', None)],
+                         sources=[join('src', 'c_gden.c')])
+
+    return config
+
+if __name__ == "__main__":
+    from numpy.distutils.core import setup
+    #setup(**configuration(top_path='').todict())
+    setup(**configuration(top_path='',
+                          package_name='scipy.sandbox.pyem').todict())
+# from distutils.core import setup, Extension
+# from pyem import version as pyem_version
+# 
+# # distutils does not update MANIFEST correctly, removes it
+# import os
+# if os.path.exists('MANIFEST'): os.remove('MANIFEST')
+# from os.path import join
+# 
+# import re
+# 
+# from numpy.distutils.misc_util import get_numpy_include_dirs
+# NUMPYINC    = get_numpy_include_dirs()[0]
+# 
+# # General variables:
+# #   - DISTNAME: name of the distributed package
+# #   - VERSION: the version reference is in pyem/__init__.py file
+# #   - other upper cased variables are the same than the corresponding 
+# #   keywords in setup call
+# DISTNAME    = 'pyem' 
+# VERSION     = pyem_version
+# DESCRIPTION ='A python module for Expectation Maximization learning of mixtures pdf',
+# AUTHOR      ='David Cournapeau',
+# AUTHOR_EMAIL='david at ar.media.kyoto-u.ac.jp',
+# URL         ='http://ar.media.kyoto-u.ac.jp/members/david',
+# 
+# # Source files for extensions
+# 
+# # Functions used to substitute values in File.
+# # Mainly use to replace config.h capabilities
+# def do_subst_in_file(sourcefile, targetfile, dict):
+#     """Replace all instances of the keys of dict with their values.
+#     For example, if dict is {'%VERSION%': '1.2345', '%BASE%': 'MyProg'},
+#     then all instances of %VERSION% in the file will be replaced with 1.2345 etc.
+#     """
+#     try:
+#         f = open(sourcefile, 'rb')
+#         contents = f.read()
+#         f.close()
+#     except:
+#         raise IOError, "Can't read source file %s"%sourcefile
+# 
+#     for (k,v) in dict.items():
+#         contents = re.sub(k, v, contents)
+#     try:
+#         f = open(targetfile, 'wb')
+#         f.write(contents)
+#         f.close()
+#     except:
+#         raise IOError, "Can't read source file %s"%sourcefile
+#     return 0 # success
+#  
+# class SetupOption:
+#     def __init__(self):
+#         self.kmean      = 'py'
+#         self.ext_modules= [Extension(join('pyem', 'c_gden'),
+#                               sources=[join('pyem', 'src', 'c_gden.c')]) ]
+#         self.cmdclass   = {}
+#         self.subsdic     = {'%KMEANIMPORT%': []}
+# 
+#     def _config_kmean(self):
+#         # Check in this order:
+#         #   - kmean in scipy.cluster,
+#         #   - custom vq with pyrex 
+#         #   - custom pure python vq
+#         #try:
+#         #    from scipy.cluster.vq import kmeans
+#         #    self.kmean  = 'scipy'
+#         #    #self.subsdic['%KMEANIMPORT%']   = scipy_kmean
+#         #except ImportError:
+#         #    try:
+#         #        from Pyrex.Distutils import build_ext
+#         #        self.kmean  = 'pyrex'
+#         #        self.ext_modules.append(Extension('pyem/c_gmm', 
+#         #            ['pyem/src/c_gmm.pyx'], include_dirs=[NUMPYINC]))
+#         #        self.cmdclass['build_ext']  = build_ext
+#         #        #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
+#         #    except ImportError:
+#         #        self.kmean  = 'py'
+#         #        #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
+#         try:
+#             from Pyrex.Distutils import build_ext
+#             self.kmean  = 'pyrex'
+#             self.ext_modules.append(Extension('pyem/c_gmm', 
+#                 ['pyem/src/c_gmm.pyx'], include_dirs=[NUMPYINC]))
+#             self.cmdclass['build_ext']  = build_ext
+#             #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
+#         except ImportError:
+#             self.kmean  = 'py'
+#             #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
+#     def setup(self):
+#         self._config_kmean()
+#         #import time
+#         #do_subst_in_file('pyem/kmean.py.in', 'pyem/kmean.py', self.subsdic)
+#         setup(name      = DISTNAME,
+#             version     = VERSION,
+#             description = DESCRIPTION,
+#             author      = AUTHOR,
+#             author_email= AUTHOR_EMAIL,
+#             url         = URL,
+#             packages    = ['pyem', 'pyem.tests', 'pyem.profile_data'],
+#             ext_modules = self.ext_modules,
+#             cmdclass    = self.cmdclass)
+# 
+# stpobj  = SetupOption()
+# stpobj.setup()

Deleted: trunk/Lib/sandbox/pyem/setup.py
===================================================================
--- trunk/Lib/sandbox/pyem/setup.py	2006-10-12 13:48:34 UTC (rev 2283)
+++ trunk/Lib/sandbox/pyem/setup.py	2006-10-12 13:48:48 UTC (rev 2284)
@@ -1,113 +0,0 @@
-#! /usr/bin/env python
-# Last Change: Fri Sep 29 07:00 PM 2006 J
-# TODO:
-#   - check how to handle cmd line build options with distutils and use
-#   it in the building process
-
-""" pyem is a small python package to estimate Gaussian Mixtures Models
-from data, using Expectation Maximization"""
-from distutils.core import setup, Extension
-from pyem import version as pyem_version
-
-# distutils does not update MANIFEST correctly, removes it
-import os
-if os.path.exists('MANIFEST'): os.remove('MANIFEST')
-from os.path import join
-
-import re
-
-from numpy.distutils.misc_util import get_numpy_include_dirs
-NUMPYINC    = get_numpy_include_dirs()[0]
-
-# General variables:
-#   - DISTNAME: name of the distributed package
-#   - VERSION: the version reference is in pyem/__init__.py file
-#   - other upper cased variables are the same than the corresponding 
-#   keywords in setup call
-DISTNAME    = 'pyem' 
-VERSION     = pyem_version
-DESCRIPTION ='A python module for Expectation Maximization learning of mixtures pdf',
-AUTHOR      ='David Cournapeau',
-AUTHOR_EMAIL='david at ar.media.kyoto-u.ac.jp',
-URL         ='http://ar.media.kyoto-u.ac.jp/members/david',
-
-# Source files for extensions
-
-# Functions used to substitute values in File.
-# Mainly use to replace config.h capabilities
-def do_subst_in_file(sourcefile, targetfile, dict):
-    """Replace all instances of the keys of dict with their values.
-    For example, if dict is {'%VERSION%': '1.2345', '%BASE%': 'MyProg'},
-    then all instances of %VERSION% in the file will be replaced with 1.2345 etc.
-    """
-    try:
-        f = open(sourcefile, 'rb')
-        contents = f.read()
-        f.close()
-    except:
-        raise IOError, "Can't read source file %s"%sourcefile
-
-    for (k,v) in dict.items():
-        contents = re.sub(k, v, contents)
-    try:
-        f = open(targetfile, 'wb')
-        f.write(contents)
-        f.close()
-    except:
-        raise IOError, "Can't read source file %s"%sourcefile
-    return 0 # success
- 
-class SetupOption:
-    def __init__(self):
-        self.kmean      = 'py'
-        self.ext_modules= [Extension(join('pyem', 'c_gden'),
-                              sources=[join('pyem', 'src', 'c_gden.c')]) ]
-        self.cmdclass   = {}
-        self.subsdic     = {'%KMEANIMPORT%': []}
-
-    def _config_kmean(self):
-        # Check in this order:
-        #   - kmean in scipy.cluster,
-        #   - custom vq with pyrex 
-        #   - custom pure python vq
-        #try:
-        #    from scipy.cluster.vq import kmeans
-        #    self.kmean  = 'scipy'
-        #    #self.subsdic['%KMEANIMPORT%']   = scipy_kmean
-        #except ImportError:
-        #    try:
-        #        from Pyrex.Distutils import build_ext
-        #        self.kmean  = 'pyrex'
-        #        self.ext_modules.append(Extension('pyem/c_gmm', 
-        #            ['pyem/src/c_gmm.pyx'], include_dirs=[NUMPYINC]))
-        #        self.cmdclass['build_ext']  = build_ext
-        #        #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
-        #    except ImportError:
-        #        self.kmean  = 'py'
-        #        #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
-        try:
-            from Pyrex.Distutils import build_ext
-            self.kmean  = 'pyrex'
-            self.ext_modules.append(Extension('pyem/c_gmm', 
-                ['pyem/src/c_gmm.pyx'], include_dirs=[NUMPYINC]))
-            self.cmdclass['build_ext']  = build_ext
-            #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
-        except ImportError:
-            self.kmean  = 'py'
-            #self.subsdic['%KMEANIMPORT%']   = pyrex_kmean
-    def setup(self):
-        self._config_kmean()
-        #import time
-        #do_subst_in_file('pyem/kmean.py.in', 'pyem/kmean.py', self.subsdic)
-        setup(name      = DISTNAME,
-            version     = VERSION,
-            description = DESCRIPTION,
-            author      = AUTHOR,
-            author_email= AUTHOR_EMAIL,
-            url         = URL,
-            packages    = ['pyem', 'pyem.tests', 'pyem.profile_data'],
-            ext_modules = self.ext_modules,
-            cmdclass    = self.cmdclass)
-
-stpobj  = SetupOption()
-stpobj.setup()




More information about the Scipy-svn mailing list