$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r59170 - in sandbox/statistics/non_parametric: boost/statistics/detail/non_parametric/empirical_distribution boost/statistics/detail/non_parametric/empirical_distribution/keyword boost/statistics/detail/non_parametric/empirical_distribution/tag libs/statistics/detail/non_parametric/doc libs/statistics/detail/non_parametric/example libs/statistics/detail/non_parametric/src
From: erwann.rogard_at_[hidden]
Date: 2010-01-20 18:18:17
Author: e_r
Date: 2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
New Revision: 59170
URL: http://svn.boost.org/trac/boost/changeset/59170
Log:
m
Text files modified: 
   sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/count.hpp          |    89 +++++++++++++++++++------------         
   sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/frequency.hpp      |    52 ++++++++++-------                       
   sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/keyword/key.hpp    |    20 ++++--                                  
   sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/ordered_sample.hpp |    47 ++++++++++-----                         
   sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/tag/key.hpp        |    24 ++++----                                
   sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/doc/readme.txt                             |     6 +                                       
   sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/frequency_int.cpp                  |    26 ++++----                                
   sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.cpp             |   113 ++++++++++++++------------------------- 
   sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.h               |     9 ++                                      
   sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/src/main.cpp                               |     4 +                                       
   10 files changed, 212 insertions(+), 178 deletions(-)
Modified: sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/count.hpp
==============================================================================
--- sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/count.hpp	(original)
+++ sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/count.hpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -8,7 +8,9 @@
 #ifndef BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_EMPIRICAL_DISTRIBUTION_COUNT_HPP_ER_2010
 #define BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_EMPIRICAL_DISTRIBUTION_COUNT_HPP_ER_2010
 #include <map>
-#include <functional>
+#include <functional> // less
+
+#include <boost/type_traits.hpp>
 
 #include <boost/mpl/placeholders.hpp>
 #include <boost/mpl/apply.hpp>
@@ -32,15 +34,22 @@
 
 namespace impl{
 
-	template<typename Int,bool Cum>
+	
+	// Count of occurences matching (or less equal than) a given value
+    //
+    // Warning : If Cum == true boost::is_float<T> affects the implementa-
+    // tion. For example, if say the samples are generated from a Poisson
+    // [Normal] distribution, T must be an integral [a float] type.
+    template<typename T,bool Cum,typename Comp = std::less<T> >
         class count : public boost::accumulators::accumulator_base{
-		typedef std::less<Int> comp_;
+		typedef Comp comp_;
                 typedef std::size_t size_;
         typedef boost::accumulators::dont_care dont_care_;
 
         public:
 
                 typedef size_ result_type;
+        typedef T sample_type;
 
                 count(dont_care_){}
 
@@ -48,11 +57,10 @@
                 
         template<typename Args>
         result_type result(const Args& args)const{
-        	Int key 
-            	= args[boost::accumulators::sample];
+        	sample_type key = args[boost::accumulators::sample];
                 typedef typename boost::mpl::bool_<Cum> is_cum_;
-            typedef statistics::detail::empirical_distribution
-            	::tag::ordered_sample tag_;
+            typedef boost::statistics::detail
+            	::empirical_distribution::tag::ordered_sample tag_;
                 return this->result_impl(
                     boost::accumulators::extract_result<tag_>(
                         args[boost::accumulators::accumulator]
@@ -64,28 +72,37 @@
 
                 private:
                 
-        template<typename Map,typename N>
+        template<typename Map>
                 result_type result_impl(
                 Map& map,
-            const N& key,
+            const sample_type& key,
             boost::mpl::bool_<false> cum
         )const{
                 return (map[key]); 
         }
 
-        template<typename Map,typename N>
+        template<typename Map>
                 result_type result_impl(
                 Map& map, 
-            const N& key,
+            const sample_type& x,
             boost::mpl::bool_<true> cum
         )const{
                 return std::for_each(
-            	boost::begin(map),
-                map.upper_bound(key),
+            	boost::const_begin(map),
+				this->bound(map,x),
                     accumulator()
             ).value; 
         }
 
+		template<typename Map>
+        typename boost::range_iterator<const Map>::type
+		bound(
+        	const Map& map,
+            const sample_type& x
+        )const{
+        	return map.upper_bound(x);
+        }
+
                 struct accumulator{
                 mutable size_ value;
                 
@@ -106,44 +123,46 @@
 namespace tag
 {
         template<bool Cum>
-    struct count
-      : boost::accumulators::depends_on<
-      	statistics::detail
+    struct count: boost::accumulators::depends_on<
+      	boost::statistics::detail
                 ::empirical_distribution::tag::ordered_sample
     >
     {
-
-// TODO compile error
-//      typedef statistics::detail::accumulator::empirical_distribution
-//      	impl::count<boost::mpl::_1,Cum> impl;
-// must explicitly have:        
-        
         struct impl{
-        	template<typename Int,typename W>
+        	template<typename T,typename W>
             struct apply{
-            	typedef statistics::detail::empirical_distribution
-                	::impl::count<Int,Cum> type;
+            	typedef boost::statistics::detail::empirical_distribution
+                	::impl::count<T,Cum> type;
             };
         };
     };
 }
+namespace result_of{
 
+	template<bool Cum,typename AccSet>
+    struct count{
+    	typedef boost::statistics::detail
+        	::empirical_distribution::tag::count<Cum> tag_;
+		 typedef typename 
+         	boost::accumulators::detail::template 
+            	extractor_result<AccSet,tag_>::type type; 
+    };
+
+}
 namespace extract
 {
 
-  	template<bool Cum,typename AccumulatorSet,typename Int>
-	typename boost::mpl::apply<
-		AccumulatorSet,
-        boost::statistics::detail
-        	::empirical_distribution::tag::count<Cum>
-    >::type::result_type
-  	count(AccumulatorSet const& acc,const Int& i)
+	// Usage : count<Cum>(acc,x)
+  	template<bool Cum,typename AccSet,typename T>
+	typename boost::statistics::detail
+    	::empirical_distribution::result_of::template count<Cum,AccSet>::type
+  	count(AccSet const& acc,const T& x)
     {
             typedef boost::statistics::detail
-        	::empirical_distribution::tag::count<Cum> the_tag;
-        return boost::accumulators::extract_result<the_tag>(
+        	::empirical_distribution::tag::count<Cum> tag_;
+        return boost::accumulators::extract_result<tag_>(
             acc,
-            (boost::accumulators::sample = i)
+            (boost::accumulators::sample = x)
         );
           }
 
Modified: sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/frequency.hpp
==============================================================================
--- sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/frequency.hpp	(original)
+++ sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/frequency.hpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -20,7 +20,7 @@
 #include <boost/accumulators/framework/parameters/sample.hpp>
 #include <boost/accumulators/framework/parameters/accumulator.hpp>
 #include <boost/accumulators/framework/depends_on.hpp>
-#include <boost/accumulators/statistics_fwd.hpp>
+#include <boost/accumulators/statistics/stats.hpp>
 #include <boost/accumulators/statistics/count.hpp>
 
 #include <boost/statistics/detail/non_parametric/empirical_distribution/count.hpp>
@@ -32,8 +32,10 @@
 
 namespace impl{
 
-	// Same as count but expressed as a percentage of the sample size
-	template<typename T,typename Int,bool Cum>
+	// Same as count but expressed as a percentage (type T1) of the sample size
+    //
+    // Warning : See empirical_distribution::impl::count.
+	template<typename T,bool Cum,typename T1>
         class frequency : public boost::accumulators::accumulator_base{
             
                 typedef std::size_t size_;
@@ -44,7 +46,8 @@
                 frequency(dont_care_){}
 
                 typedef size_ size_type;
-		typedef T result_type;
+        typedef T sample_type;  // See accumulator_set
+		typedef T1 result_type;
 
         void operator()(dont_care_)const{}
 
@@ -62,7 +65,7 @@
                         args[boost::accumulators::sample]
                     );
                         size_ n = boost::accumulators::extract_result<tag_n_>( acc );
-            return static_cast<T>(i)/static_cast<T>(n);
+            return static_cast<T1>(i)/static_cast<T1>(n);
         }
         };
     
@@ -70,43 +73,50 @@
 
 namespace tag
 {
-	template<bool Cum,typename T = double>
+	template<bool Cum,typename T1 = double>
     struct frequency
       : boost::accumulators::depends_on<
               statistics::detail::empirical_distribution::tag::count<Cum>,
         boost::accumulators::tag::count
     >
     {
-      	// typedef statistics::detail::accumulator::
-      	// 	impl::frequency<T,boost::mpl::_1,Cum> impl;
-        
         struct impl{
-        	template<typename Int,typename W>
+        	template<typename T,typename W>
             struct apply{
                         typedef statistics::detail::empirical_distribution
-                	::impl::frequency<T,Int,Cum> type;    	
+                	::impl::frequency<T,Cum,T1> type;    	
             };
         };
     };
 }
 
+namespace result_of{
+
+	template<bool Cum,typename T1,typename AccSet>
+    struct frequency{
+
+		typedef boost::statistics::detail
+        	::empirical_distribution::tag::frequency<Cum,T1> tag_;
+		typedef typename boost::accumulators
+        	::detail::template extractor_result<AccSet,tag_>::type type;
+
+	};
+}
+
 namespace extract
 {
 
-  	template<bool Cum,typename AccumulatorSet,typename Int>
-	typename boost::mpl::apply<
-		AccumulatorSet,
-        boost::statistics::detail
-        	::empirical_distribution::tag::frequency<Cum>
-    >::type::result_type
-  	frequency(AccumulatorSet const& acc,const Int& i)
+	// Usage : frequency<Cum,T1>(acc,x)
+  	template<bool Cum,typename T1,typename AccSet,typename T>
+	typename boost::statistics::detail::empirical_distribution
+    	::result_of::template frequency<Cum,T1,AccSet>::type
+  	frequency(AccSet const& acc,const T& x)
     {
-    	typedef double T;
             typedef boost::statistics::detail::empirical_distribution
-    		::tag::frequency<Cum,T> the_tag;
+    		::tag::frequency<Cum,T1> the_tag;
         return boost::accumulators::extract_result<the_tag>(
             acc,
-            (boost::accumulators::sample = i)
+            (boost::accumulators::sample = x)
         );
           }
 
Modified: sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/keyword/key.hpp
==============================================================================
--- sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/keyword/key.hpp	(original)
+++ sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/keyword/key.hpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -1,28 +1,32 @@
 ///////////////////////////////////////////////////////////////////////////////
-// statistics::accumulator::empirical_distribution::keyword::key.hpp         //
+// kolmogorov_smirnov::keyword::reference_distribution.hpp         		 	 //
 //                                                                           //
 //  Copyright 2009 Erwann Rogard. Distributed under the Boost                //
 //  Software License, Version 1.0. (See accompanying file                    //
 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)         //
 ///////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_EMPIRICAL_DISTRIBUTION_KEYWORD_KEY_HPP_2010
-#define BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_EMPIRICAL_DISTRIBUTION_KEYWORD_KEY_HPP_2010
+#ifndef BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_KOLMOGOROV_SMIRNOV_KEYWORD_REFERENCE_DISTRIBUTION_HPP_2010
+#define BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_KOLMOGOROV_SMIRNOV_KEYWORD_REFERENCE_DISTRIBUTION_HPP_2010
 #include <boost/parameter/name.hpp>
 #include <boost/parameter/keyword.hpp>
-#include <boost/statistics/detail/non_parametric/empirical_distribution/tag/key.hpp>
+#include <boost/statistics/detail/non_parametric/empirical_distribution/tag/key.hpp> // TODO rename
 
 namespace boost { 
 namespace statistics{
 namespace detail{
-namespace empirical_distribution{
+namespace kolmogorov_smirnov{
 namespace keyword{
     namespace 
     {
-        boost::parameter::keyword<tag::key>& key
-            = boost::parameter::keyword<tag::key>::get();
+        boost::parameter::keyword<
+        	kolmogorov_smirnov::tag::reference_distribution
+        >& reference_distribution
+            = boost::parameter::keyword<
+            	kolmogorov_smirnov::tag::reference_distribution
+            >::get();
     }
 }// keyword
-}// empirical_distribution
+}// kolmogorov_smirnov
 }// detail
 }// statistics
 }// boost
Modified: sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/ordered_sample.hpp
==============================================================================
--- sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/ordered_sample.hpp	(original)
+++ sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/ordered_sample.hpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -27,17 +27,20 @@
 
 namespace impl{
 
-	template<typename Int>
+	// Associates sample values (type T) with their number of occurences in the sample
+	template<typename T>
         class ordered_sample 
                     : public boost::accumulators::accumulator_base{
-		typedef std::less<Int> comp_;
+		typedef std::less<T> comp_;
                 typedef std::size_t size_;
         typedef boost::accumulators::dont_care dont_care_;
-        typedef std::map<Int,size_,comp_> map_;
+        typedef std::map<T,size_,comp_> map_;
 
         public:
-
-		typedef size_ size_type;
+		
+        // See accumulator_set for convention naming sample_type
+        typedef T 		sample_type; 
+		typedef size_ 	size_type;	 
 
                 // non-const because map::operator[](key) returns a non-const
                 typedef map_& result_type;
@@ -46,7 +49,12 @@
 
                 template<typename Args>
                 void operator()(const Args& args){
-        	++(this->freq[args[boost::accumulators::sample]]);
+        	++(this->freq[
+            		static_cast<T>(
+            			args[boost::accumulators::sample]
+                	)
+                ]
+            );
         }
                 
                 // Returns the entire distribution, represented by a map
@@ -58,7 +66,7 @@
         mutable map_ freq;
         };
     
-}
+}// impl
 
 namespace tag
 {
@@ -68,25 +76,32 @@
       typedef statistics::detail::empirical_distribution::
               impl::ordered_sample<boost::mpl::_1> impl;
     };
-}
+}// tag
+
+namespace result_of{
+
+    template<typename AccSet>
+    struct ordered_sample : boost::accumulators::detail::extractor_result<
+        AccSet,
+        boost::statistics::detail::empirical_distribution::tag::ordered_sample
+    >{};
+
+}// result_of
 
 namespace extract
 {
 
-  	template<typename AccumulatorSet>
-	typename boost::mpl::apply<
-		AccumulatorSet,
-        boost::statistics::detail::empirical_distribution
-        	::tag::ordered_sample
-    >::type::result_type
-  	ordered_sample(AccumulatorSet const& acc)
+  	template<typename AccSet>
+    typename boost::statistics::detail::empirical_distribution
+    	::result_of::template ordered_sample<AccSet>::type
+  	ordered_sample(AccSet const& acc)
     {
             typedef boost::statistics::detail::empirical_distribution
                     ::tag::ordered_sample the_tag;
         return boost::accumulators::extract_result<the_tag>(acc);
           }
 
-}
+}// extract
 
 using extract::ordered_sample;
 
Modified: sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/tag/key.hpp
==============================================================================
--- sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/tag/key.hpp	(original)
+++ sandbox/statistics/non_parametric/boost/statistics/detail/non_parametric/empirical_distribution/tag/key.hpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -1,23 +1,23 @@
-///////////////////////////////////////////////////////////////////////////////
-// statistics::accumulator::empirical_distribution::tag::key.hpp     		 //
-//                                                                           //
-//  Copyright 2009 Erwann Rogard. Distributed under the Boost                //
-//  Software License, Version 1.0. (See accompanying file                    //
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)         //
-///////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_EMPIRICAL_DISTRIBUTION_TAG_KEY_HPP_2010
-#define BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_EMPIRICAL_DISTRIBUTION_TAG_KEY_HPP_2010
+////////////////////////////////////////////////////////////////////////////////
+// kolmogorov_smirnov::tag::reference_distribution.hpp 					  	  //
+//                                                                            //
+//  Copyright 2009 Erwann Rogard. Distributed under the Boost                 //
+//  Software License, Version 1.0. (See accompanying file                     //
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)          //
+////////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_KOLMOGOROV_SMIRNOV_TAG_REFERENCE_DISTRIBUTION_HPP_2010
+#define BOOST_STATISTICS_DETAIL_NON_PARAMETRIC_KOLMOGOROV_SMIRNOV_TAG_REFERENCE_DISTRIBUTION_HPP_2010
 #include <boost/parameter/name.hpp>
 #include <boost/parameter/keyword.hpp>
 
 namespace boost { 
 namespace statistics{
 namespace detail{
-namespace empirical_distribution{
+namespace kolmogorov_smirnov{
 namespace tag{
-    struct key{};
+    struct reference_distribution{};
 }// tag
-}// empirical_distribution
+}// kolmogorov_smirnov
 }// detail
 }// statistics
 }// boost
Modified: sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/doc/readme.txt
==============================================================================
--- sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/doc/readme.txt	(original)
+++ sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/doc/readme.txt	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -29,7 +29,11 @@
 
 
 [ History] 
-
+	January 17th, 2010. 
+        - Modified non_parametric/kolmogorov_smirnov/statistic.hpp from an 
+        STL-like algorithm to a (much simplified) accumulator.
+        - Added check_convergence
+        
         January 14th, 2010. 
             - Added non_parametric/empirical_distribution
         - Modified non_parametric/kolmogorov_smirnov/statistic.hpp to allow
Modified: sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/frequency_int.cpp
==============================================================================
--- sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/frequency_int.cpp	(original)
+++ sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/frequency_int.cpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -25,31 +25,33 @@
 
         os << "-> example_frequency_int" << std::endl;
 
-	typedef int int_;
-	typedef std::vector<int_> ints_;
+	typedef int sample_;	// sample_ x = 1;
+    typedef double val_; 	// val_ p = pdf(dist,x);
+	typedef std::vector<sample_> samples_;
 
         using namespace boost::assign;
-    ints_ ints; 
+    samples_ samples; 
     const int n = 3;
     for(unsigned i = 0; i<n; i++){
             for(unsigned j = i; j<n; j++){
-	    	ints.push_back(n-i);
+	    	samples.push_back(n-i);
         }
     } // 3, 3, 3, 2, 2, 1
 
         namespace ed = boost::statistics::detail::empirical_distribution;
+//	namespace ks = boost::statistics::detail::ks;
 
-    typedef ed::tag::frequency<false> tag_freq_;
-    typedef ed::tag::frequency<true> tag_cum_freq_;
+    typedef ed::tag::frequency<false,val_> tag_freq_;
+    typedef ed::tag::frequency<true,val_> tag_cum_freq_;
     
         typedef boost::accumulators::accumulator_set<
-    	int_,
+    	sample_,
         boost::accumulators::stats<tag_freq_,tag_cum_freq_>
     > acc_;
 
         acc_ acc = std::for_each(
-    	boost::begin(ints),
-        boost::end(ints),
+    	boost::begin(samples),
+        boost::end(samples),
         acc_()
     );
 
@@ -62,9 +64,9 @@
         sum += i+1;
                 BOOST_ASSERT( ed::extract::count<true>(acc,i+1) == sum);
 
-		boost::format f("(%1%,%2%)");
-        double freq = ed::extract::frequency<false>(acc,i+1);
-        double cum_freq = ed::extract::frequency<true>(acc,i+1);
+		//boost::format f("(%1%,%2%)");
+        val_ freq = ed::extract::frequency<false,val_>(acc,i+1);
+        val_ cum_freq = ed::extract::frequency<true,val_>(acc,i+1);
         //f % freq % cum_freq;
                 //os << f << std::endl;        
         os << '(' << freq << ',' << cum_freq << ')' << std::endl;
Modified: sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.cpp
==============================================================================
--- sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.cpp	(original)
+++ sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.cpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -23,96 +23,67 @@
 
 #include <boost/math/distributions/poisson.hpp>
 #include <boost/random/poisson_distribution.hpp>
+
+#include <boost/math/distributions/normal.hpp> 
+#include <boost/random/normal_distribution.hpp> 
+
 #include <boost/random/mersenne_twister.hpp>
 #include <boost/random/variate_generator.hpp>
 
-#include <boost/statistics/detail/non_parametric/empirical_distribution/frequency.hpp>
-#include <boost/statistics/detail/non_parametric/kolmogorov_smirnov/frequency_adaptor.hpp>
-#include <boost/statistics/detail/non_parametric/kolmogorov_smirnov/statistic.hpp>
+#include <boost/statistics/detail/non_parametric/kolmogorov_smirnov/check_convergence.hpp>
 #include <libs/statistics/detail/non_parametric/example/frequency_int.h>
 
-void example_kolmogorov_smirnov(std::ostream& os)
+void example_kolmogorov_smirnov(
+	std::ostream& os,
+    double mean = 1.0,
+    std::size_t n_loops = 1,
+    std::size_t n_init = 10,
+    std::size_t n_factor = 10 // n_init *= n_factor at each loop
+)
 {
 
         os << "-> example_kolmogorov_smirnov" << std::endl;
 
-	// This example illustrates kolmogorov smirnov for a discrete distribution
-    // (hence the presence of non-negligeable combos)
+	// This example illustrates kolmogorov smirnov for both a discrete
+    // and a continuous distribution
 
-	namespace np = boost::statistics::detail::non_parametric;
+	namespace ks = boost::statistics::detail::kolmogorov_smirnov;
 
         typedef double val_;
-    typedef int int_;
-	const val_ mean = 1;
-	const int_ n = 10 * 10;
 
-	typedef boost::math::poisson_distribution<> dist_;
-    typedef boost::poisson_distribution<> random_;
+
     typedef boost::mt19937 urng_;
-    typedef boost::variate_generator<urng_&,random_> vg_;
         typedef std::vector<val_> vals_;
-	namespace ed = boost::statistics::detail::empirical_distribution;
+	typedef ks::check_convergence<val_> check_;
 
-    typedef ed::tag::frequency<false> tag_freq_;
-    typedef ed::tag::frequency<true> tag_cum_freq_;
-    
-	typedef boost::accumulators::accumulator_set<
-    	int_,
-        boost::accumulators::stats<tag_freq_,tag_cum_freq_>
-    > acc_;
-
-	typedef boost::mpl::int_<0> k_x_;
-	typedef boost::mpl::int_<1> k_cdf_;
-	typedef boost::mpl::int_<2> k_cnt_;
-
-	typedef np::kolmogorov_smirnov::statistic<val_,k_x_,k_cdf_,k_cnt_> ks_;
-    typedef np::frequency_adaptor<k_x_,k_cdf_,k_cnt_,int_,val_> adaptor_;
-    typedef adaptor_::type elem_;
-    typedef std::vector<elem_> elems_;
-    
-	urng_ urng;
-	vals_ random_sample;
-	std::generate_n(
-    	std::back_inserter(random_sample),
-        n,
-    	vg_(urng,random_(mean))
-	);        
-    
-    dist_ dist(mean);
-	elems_ adapted_sample;
+    urng_ urng;
+	check_ check;
 
+    os 	<< "(sample size,statistic) :" << std::endl;
         {
-		acc_ acc = std::for_each(
-    		boost::begin(random_sample),
-        	boost::end(random_sample),
-        	acc_()
-    	);
-		BOOST_AUTO(
-    		tmp,
-			adaptor_::call(acc,dist)
-    	);
-        // A physical copy is necessary because ks(b,e) sorts [b,e)
-		std::copy(
-        	boost::begin(tmp),
-        	boost::end(tmp),
-            std::back_inserter(adapted_sample)
-        );
-        int_ nn = 0;
-        BOOST_FOREACH(const elem_& e,adapted_sample){
-        	 nn += boost::fusion::at_key<k_cnt_>(e);
-    	}
-		BOOST_ASSERT(nn == n);
-    }
+		typedef boost::math::poisson_distribution<> dist_;
+    	typedef boost::poisson_distribution<> random_;
+    	typedef boost::variate_generator<urng_&,random_> vg_;
+        dist_ dist(mean);
+		vg_ vg(urng,random_(mean));
 
-    ks_ ks;
-	ks(boost::begin(adapted_sample),boost::end(adapted_sample));
-
-	os 
-    	<< ks_::description_header << '('
-//        << ks.description() // boost::format bug
-        << ks.count() << ','
-        << ks.value() << ')'
-        << std::endl;	    
+    	os << "poisson(" << mean << ')' << std::endl;
+    	check(n_loops,n_init,n_factor,dist,vg,os);
+    }
+	{
+		typedef boost::math::normal_distribution<> dist_;
+		typedef boost::normal_distribution<> random_;
+    	typedef boost::variate_generator<urng_&,random_> vg_;
+		const val_ sd = 1.0;
+		dist_ dist(mean,sd);
+		vg_ vg(urng,random_(mean,sd));
+    	os 	<< "normal(" << mean 
+            << ','
+            << sd
+            << ')'
+            << std::endl;
+    	check(n_loops,n_init,n_factor,dist,vg,os);
+	}
 
         os << "<-" << std::endl;
 }
\ No newline at end of file
Modified: sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.h
==============================================================================
--- sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.h	(original)
+++ sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/example/kolmogorov_smirnov.h	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -7,8 +7,15 @@
 ///////////////////////////////////////////////////////////////////////////////
 #ifndef LIBS_STATISTICS_DETAIL_NON_PARAMETRIC_KOLMOGOROV_SMIRNOV_HPP_ER_2010
 #define LIBS_STATISTICS_DETAIL_NON_PARAMETRIC_KOLMOGOROV_SMIRNOV_HPP_ER_2010
+#include <ostream>
 
-void example_kolmogorov_smirnov(std::ostream& os);
+void example_kolmogorov_smirnov(
+	std::ostream& os,
+    double poisson_mean = 1.0,
+    std::size_t n_loops = 1,
+    std::size_t n_init = 10,
+    std::size_t n_factor = 10 // n_init *= n_factor at each loop
+);
 
 #endif
 
Modified: sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/src/main.cpp
==============================================================================
--- sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/src/main.cpp	(original)
+++ sandbox/statistics/non_parametric/libs/statistics/detail/non_parametric/src/main.cpp	2010-01-20 18:18:16 EST (Wed, 20 Jan 2010)
@@ -6,7 +6,9 @@
 int main()
 {
         example_frequency_int(std::cout);
-	example_kolmogorov_smirnov(std::cout);
+	//example_kolmogorov_smirnov(std::cout,0.1,6,10,10);
+	example_kolmogorov_smirnov(std::cout,10.0,6,10,10);
+	//example_kolmogorov_smirnov(std::cout,100.0,6,10,10);
 
     return 0;
 }
\ No newline at end of file