$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r57587 - in sandbox/statistics/distribution_toolkit: boost/statistics/detail/distribution_toolkit/distributions/location_scale boost/statistics/detail/distribution_toolkit/distributions/wrapper boost/statistics/detail/distribution_toolkit/fwd_math boost/statistics/detail/distribution_toolkit/meta libs/statistics/detail/distribution_toolkit/doc libs/statistics/detail/distribution_toolkit/example libs/statistics/detail/distribution_toolkit/test
From: erwann.rogard_at_[hidden]
Date: 2009-11-11 19:35:10
Author: e_r
Date: 2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
New Revision: 57587
URL: http://svn.boost.org/trac/boost/changeset/57587
Log:
m/a
Added:
   sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/range.hpp   (contents, props changed)
   sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/support.hpp   (contents, props changed)
   sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/meta/result_of_support.hpp   (contents, props changed)
Text files modified: 
   sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/location_scale/location_scale.hpp |   110 +++++++++++++++++---------------------- 
   sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/wrapper/wrapper.hpp               |    32 +++++-----                              
   sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/include.hpp                            |     2                                         
   sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/doc/readme.txt                                   |     9 +++                                     
   sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/example/distribution_function.cpp                |    26 +++++++++                               
   sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/test/functions.cpp                               |     1                                         
   6 files changed, 103 insertions(+), 77 deletions(-)
Modified: sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/location_scale/location_scale.hpp
==============================================================================
--- sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/location_scale/location_scale.hpp	(original)
+++ sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/location_scale/location_scale.hpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -9,6 +9,7 @@
 #ifndef BOOST_STATISTICS_DETAIL_DISTRIBUTION_TOOLKIT_LOCATION_SCALE_LOCATION_SCALE_HPP_ER_2009
 #define BOOST_STATISTICS_DETAIL_DISTRIBUTION_TOOLKIT_LOCATION_SCALE_LOCATION_SCALE_HPP_ER_2009
 #include <vector>
+#include <string>
 #include <algorithm>
 #include <iterator>
 #include <boost/mpl/assert.hpp>
@@ -18,7 +19,10 @@
 #include <boost/statistics/detail/distribution_common/meta/inherit_policy.hpp>
 #include <boost/statistics/detail/distribution_toolkit/meta/is_scalar_distribution.hpp>
 #include <boost/statistics/detail/distribution_common/meta/value.hpp>
-//#include <boost/math/policies/policy.hpp>
+#include <boost/statistics/detail/distribution_common/meta/policy.hpp>
+#include <boost/math/policies/policy.hpp> // probably not needed
+#include <boost/math/distributions/detail/common_error_handling.hpp>
+#include <boost/math/policies/error_handling.hpp>
 
 namespace boost{
 namespace statistics{
@@ -35,91 +39,75 @@
     //
     // TODO: range and support
     template<typename Z>
-    class location_scale_distribution 
-        : public distribution::common::meta::inherit_policy<Z>{
+    class location_scale_distribution{
+    	typedef std::string str_;
+        static const str_ fun;
+        
         public:
 
         typedef Z distribution_type;
 
-        BOOST_MPL_ASSERT((
-            meta::is_scalar_distribution<Z>
-        ));
+        BOOST_MPL_ASSERT(( meta::is_scalar_distribution<Z> ));
 
         typedef typename distribution::common::meta::value<
             distribution_type
         >::type value_type;
 
-        location_scale_distribution();
+        typedef typename distribution::common::meta::policy<
+            distribution_type
+        >::type policy_type;
+
+        location_scale_distribution():mu_(0),sigma_(1),z_(){}
         location_scale_distribution(
             value_type mu,
             value_type sigma,
             const Z& z
-        );
+        ):mu_(mu),sigma_(sigma),z_(z){
+        	static const char* str 
+            	= (fun + "<%1%>::location_scale_distribution").c_str();
+            
+            // TODO at present %1% is replaced by value_type. Write a function
+            // that is implemented in terms of check_scale but actually puts
+            // Z in its place
+            
+        	value_type result;
+       	 	boost::math::detail::check_location(
+            	str, mu, &result, policy_type());
+       	 	boost::math::detail::check_scale(
+            	str, sigma, &result, policy_type());
+    	}        
 
-        location_scale_distribution(const location_scale_distribution& that);
+        location_scale_distribution(const location_scale_distribution& that)
+        :mu_(that.mu_),sigma_(that.sigma_),z_(that.z_){}
         
         location_scale_distribution&
-        operator=(const location_scale_distribution& that);
+        operator=(const location_scale_distribution& that){
+        	if(&that!=this){
+            	mu_ = that.mu_;
+            	sigma_ = that.sigma_;
+            	z_ = that.z_;
+       	 	}
+        	return *this;
+    	}
         
-        value_type mu()const;
-        value_type sigma()const;
-
-        const Z& z()const;
+        value_type mu()const{ return this->mu_; }
+        value_type sigma()const{ return this->sigma_; }
+        const Z& z()const{ return this->z_; }
 
         private:
-            value_type mu_;
-            value_type sigma_;
-            Z z_;
+        value_type mu_;
+        value_type sigma_;
+        Z z_;
     };
-
-    // Implementation // 
-
     template<typename Z>
-    location_scale_distribution<Z>::location_scale_distribution()
-    :mu_(0),sigma_(1),z_(){}
-    
-    template<typename Z>
-    location_scale_distribution<Z>::location_scale_distribution(
-        value_type mu,
-        value_type sigma,
-        const Z& z
-    ):mu_(mu),sigma_(sigma),z_(z){}
+    const std::string location_scale_distribution<Z>::fun 
+    	= "distribution::toolkit::location_scale_distribution";
 
-    template<typename Z>
-    location_scale_distribution<Z>::location_scale_distribution(
-        const location_scale_distribution& that
-    ):mu_(that.mu_),sigma_(that.sigma_),z_(that.z_){}
 
-    template<typename Z>
-    location_scale_distribution<Z>&
-    location_scale_distribution<Z>::operator=(
-        const location_scale_distribution& that
-    ){
-        if(&that!=this){
-            mu_ = that.mu_;
-            sigma_ = that.sigma_;
-            z_ = that.z_;
-        }
-        return *this;
-    }
-
-    template<typename Z>
-    typename location_scale_distribution<Z>::value_type 
-    location_scale_distribution<Z>::mu()const{ return this->mu_; }
-
-    template<typename Z>
-    typename location_scale_distribution<Z>::value_type 
-    location_scale_distribution<Z>::sigma()const{ return this->sigma_; }
-
-    template<typename Z>
-    const Z&
-    location_scale_distribution<Z>::z()const{ return this->z_; }
-
-
-}// distribution
 }// toolkit
-
+}// distribution
 }// detail
 }// statistics
 }// boost
+
 #endif 
Modified: sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/wrapper/wrapper.hpp
==============================================================================
--- sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/wrapper/wrapper.hpp	(original)
+++ sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/distributions/wrapper/wrapper.hpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -14,8 +14,8 @@
 #include <boost/mpl/not.hpp>
 #include <boost/statistics/detail/distribution_common/meta/inherit_policy.hpp>
 #include <boost/statistics/detail/distribution_common/meta/value.hpp>
-#include <boost/archive/text_oarchive.hpp>
-#include <boost/archive/text_iarchive.hpp>
+//#include <boost/archive/text_oarchive.hpp>
+//#include <boost/archive/text_iarchive.hpp>
 
 namespace boost{
 namespace statistics{
@@ -54,20 +54,20 @@
     
         private:
 
-        template<class A>
-        void serialize(
-            A & ar, 
-            const unsigned int version
-        )
-        {
-            BOOST_MPL_ASSERT((
-                mpl::not_<
-                    is_reference<D>
-                >
-            ));
-
-            ar & d_;
-        }
+        //template<class A>
+        //void serialize(
+        //    A & ar, 
+        //    const unsigned int version
+        //)
+        //{
+        //    BOOST_MPL_ASSERT((
+        //        mpl::not_<
+        //            is_reference<D>
+        //        >
+        //    ));
+		//
+        //    ar & d_;
+        //}
         
         typename call_traits<D>::value_type d_;
     };
Modified: sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/include.hpp
==============================================================================
--- sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/include.hpp	(original)
+++ sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/include.hpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -13,6 +13,8 @@
 #include <boost/statistics/detail/distribution_toolkit/fwd_math/pdf.hpp>
 #include <boost/statistics/detail/distribution_toolkit/fwd_math/quantile.hpp>
 #include <boost/statistics/detail/distribution_toolkit/fwd_math/mean.hpp>
+#include <boost/statistics/detail/distribution_toolkit/fwd_math/range.hpp>
+#include <boost/statistics/detail/distribution_toolkit/fwd_math/support.hpp>
 #include <boost/statistics/detail/distribution_toolkit/fwd_math/variance.hpp>
 
 #endif
\ No newline at end of file
Added: sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/range.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/range.hpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -0,0 +1,33 @@
+//////////////////////////////////////////////////////////////////////////////////
+// distribution::toolkit::fwd_math::range.hpp                                 	//
+//                                                                              //
+//  (C) Copyright 2009 Erwann Rogard                                            //
+//  Use, modification and distribution are subject to 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_DISTRIBUTION_TOOLKIT_FWD_MATH_RANGE_HPP_ER_2009
+#define BOOST_DISTRIBUTION_TOOLKIT_FWD_MATH_RANGE_HPP_ER_2009
+#include <boost/utility/enable_if.hpp>
+#include <boost/statistics/detail/distribution_toolkit/meta/is_math_distribution.hpp>
+#include <boost/statistics/detail/distribution_common/meta/result_of_support.hpp>
+
+namespace boost{
+namespace statistics{
+namespace detail{
+
+template<typename D>
+typename lazy_enable_if<
+	distribution::toolkit::meta::is_math_distribution<D>,
+    distribution::toolkit::meta::result_of_support<D>
+>
+range(const D& dist)
+{
+	return boost::math::range(dist);	
+}
+
+}// detail
+}// statistics
+}// boost
+
+#endif
\ No newline at end of file
Added: sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/support.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/fwd_math/support.hpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -0,0 +1,33 @@
+//////////////////////////////////////////////////////////////////////////////////
+// distribution::toolkit::fwd_math::support.hpp                                 //
+//                                                                              //
+//  (C) Copyright 2009 Erwann Rogard                                            //
+//  Use, modification and distribution are subject to 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_DISTRIBUTION_TOOLKIT_FWD_MATH_SUPPORT_HPP_ER_2009
+#define BOOST_DISTRIBUTION_TOOLKIT_FWD_MATH_SUPPORT_HPP_ER_2009
+#include <boost/utility/enable_if.hpp>
+#include <boost/statistics/detail/distribution_toolkit/meta/is_math_distribution.hpp>
+#include <boost/statistics/detail/distribution_common/meta/result_of_support.hpp>
+
+namespace boost{
+namespace statistics{
+namespace detail{
+
+template<typename D>
+typename lazy_enable_if<
+	distribution::toolkit::meta::is_math_distribution<D>,
+    distribution::toolkit::meta::result_of_support<D>
+>
+support(const D& dist)
+{
+	return boost::math::support(dist);	
+}
+
+}// detail
+}// statistics
+}// boost
+
+#endif
\ No newline at end of file
Added: sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/meta/result_of_support.hpp
==============================================================================
--- (empty file)
+++ sandbox/statistics/distribution_toolkit/boost/statistics/detail/distribution_toolkit/meta/result_of_support.hpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////////
+// distribution::toolkit::meta::result_of_support.hpp              			    //
+//                                                                              //
+//  (C) Copyright 2009 Erwann Rogard                                            //
+//  Use, modification and distribution are subject to 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_DISTRIBUTION_TOOLKIT_META_RESULT_OF_SUPPORT_HPP_ER_2009
+#define BOOST_DISTRIBUTION_TOOLKIT_META_RESULT_OF_SUPPORT_HPP_ER_2009
+#include <utility>
+#include <boost/statistics/detail/distribution_common/meta/value.hpp>
+
+namespace boost{
+namespace statistics{
+namespace detail{
+namespace distribution{
+namespace common{
+namespace meta{
+
+	template<typename D>
+    struct result_of_support
+    {
+    	typedef typename distribution::common::meta::value<D>::type val_;
+        typedef std::pair<val_,val_> type;
+    }
+
+}// meta
+}// toolkit
+}// distribution
+}// detail
+}// statistics
+}// boost
+
+#endif
\ No newline at end of file
Modified: sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/doc/readme.txt
==============================================================================
--- sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/doc/readme.txt	(original)
+++ sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/doc/readme.txt	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -63,6 +63,9 @@
     Decouples the function, such as pdf, from the distribution D:
         fun_wrap::cdf_<D>::instance
 
+	Note : distribution_common has functors (in the making) that achieve the 
+    same goal that are easier to use 
+
 /fwd_math 
 /iterator
 /map_pdf
@@ -88,6 +91,8 @@
 
 [ History ]
 
+Nov 6 2009 : Added error-handling policy to location_scale
+
 Oct 11 2009 : 
     removed /data. use instead sandbox/non_parametric/statistic
     added   /test
@@ -107,3 +112,7 @@
 Sep 16 2009 : deleted /algorithm and added /iterator
 July 2009   : First version
 
+[ TODO ]
+
+- range and support for location_scale
+- other distributions
\ No newline at end of file
Modified: sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/example/distribution_function.cpp
==============================================================================
--- sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/example/distribution_function.cpp	(original)
+++ sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/example/distribution_function.cpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -12,6 +12,9 @@
 #include <numeric>
 #include <cmath>
 #include <string>
+#include <stdexcept>
+#include <limits>
+
 #include <boost/mpl/apply.hpp>
 #include <boost/bind.hpp>
 #include <boost/function.hpp>
@@ -22,6 +25,8 @@
 #include <boost/random/normal_distribution.hpp>
 #include <boost/random/variate_generator.hpp>
 
+#include <boost/statistics/detail/distribution_common/functor/log_unnormalized_pdf.hpp>
+
 #include <boost/statistics/detail/distribution_toolkit/meta/include.hpp>
 #include <boost/statistics/detail/distribution_toolkit/distributions/students_t/include.hpp>
 #include <boost/statistics/detail/distribution_toolkit/distributions/location_scale/include.hpp>
@@ -43,6 +48,7 @@
         using namespace math;
         using namespace statistics::detail;
         namespace st = statistics::detail;
+        namespace co = distribution::common;
         namespace tk = distribution::toolkit;
         namespace tk_it = tk::iterator;
 
@@ -53,6 +59,7 @@
         typedef math::students_t_distribution<val_>             stud_;
         typedef tk::location_scale_distribution<stud_>          ls_stud_;
         typedef boost::variate_generator<urng_&,rnd_>           vg_;
+        typedef boost::numeric::bounds<val_> 					bounds_;
 
         // Constants
         const unsigned df   = 10;
@@ -67,6 +74,21 @@
         stud_ stud(df);
         ls_stud_ ls_stud(mu, sigma, stud);
 
+		out << "testing error handling : " << std::endl;
+
+        try{   
+        	static const val_ inf = std::numeric_limits<val_>::infinity();
+			ls_stud_ ls_stud(inf,sigma,stud);
+        }catch(std::exception& e){
+        	out << e.what() << std::endl;
+		}
+
+		try{
+			ls_stud_(mu,-1.0,stud);
+        }catch(std::exception& e){
+        	out << e.what() << std::endl;
+        }
+
         struct float_{
             
             static bool equal(const val_& a, const val_& b){
@@ -90,6 +112,10 @@
                 )
             );
         }
+        {   // Create a delegate for log_unnormalized_pdf
+			typedef co::functor::log_unnormalized_pdf<ls_stud_> ftor_;		
+			ftor_ ftor(ls_stud);
+        }
         {   // make_distribution_function_iterator + fun_wrap
             // Arbitrary random sample
             typedef std::vector<val_>                               vals_;
Modified: sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/test/functions.cpp
==============================================================================
--- sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/test/functions.cpp	(original)
+++ sandbox/statistics/distribution_toolkit/libs/statistics/detail/distribution_toolkit/test/functions.cpp	2009-11-11 19:35:08 EST (Wed, 11 Nov 2009)
@@ -9,6 +9,7 @@
 #ifndef LIBS_STATISTICS_DETAIL_DISTRIBUTION_TOOLKIT_TEST_FUNCTIONS_H_ER_2009
 #define LIBS_STATISTICS_DETAIL_DISTRIBUTION_TOOLKIT_TEST_FUNCTIONS_H_ER_2009
 #include <ostream>
+
 #include <boost/concept/assert.hpp>
 
 #include <boost/statistics/detail/distribution_toolkit/distributions/chi_squared/include.hpp>