namespace alps {
template<typename T> class AbstractSimpleObservable;
class ALPS_TEMPL_DECL SimpleObservableEvaluator;
template<typename T> bool error_underflow(T mean, T error);
template<typename T>
bool error_underflow(std::complex< T > mean, std::complex< T > error);
}
namespace alps {
enum error_convergence { CONVERGED, MAYBE_CONVERGED, NOT_CONVERGED };
std::string convergence_to_text(int c);
}
namespace alps {
namespace alea {
template<typename T> class mcdata;
template<typename T>
std::ostream & operator<<(std::ostream & out, mcdata< T > const & obs);
ALPS_ALEA_MCDATA_IMPLEMENT_OPERATION(operator+, +);
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(atan,
abs(1./(1.+rhs.mean()*rhs.mean())*rhs.error()));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(asinh,
abs(1./sqrt(rhs.mean()*rhs.mean()+1.)*rhs.error()));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(acosh,
abs(1./sqrt(rhs.mean()*rhs.mean()-1.)*rhs.error()));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(atanh,
abs(1./(1.-rhs.mean()*rhs.mean())*rhs.error()));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(abs, rhs. error);
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(sq, abs(2.*rhs.mean()*rhs.error()));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(cb,
abs(3.*sq(rhs.mean())*rhs.error()));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(sqrt,
abs(rhs.error()/(2.*sqrt(rhs.mean()))));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(cbrt,
abs(rhs.error()/(3.*sq(pow(rhs.mean(), 1./3)))));
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(exp, exp(rhs.mean())*rhs.error());
ALPS_ALEA_MCDATA_IMPLEMENT_FUNCTION(log, abs(rhs.error()/rhs.mean()));
}
}
namespace alps {
ALPS_DECL double nan();
ALPS_DECL double inf();
ALPS_DECL double ninf();
}
namespace alps {
template<typename T = double, typename SIGN = double>
class RecordableObservable;
}
namespace alps {
template<typename OBS, typename SIGN = double>
class AbstractSignedObservable;
template<typename OBS, typename SIGN = double> class SignedObservable;
template<typename OBS>
boost::shared_ptr< Observable >
make_observable(const OBS & obs, bool issigned = false);
template<typename OBS, typename SIGN>
boost::shared_ptr< Observable >
make_observable(const OBS & obs, const std::string & s, SIGN,
bool issigned = true);
}
namespace alps {
template<typename T = double> class SimpleBinning;
}
namespace alps {
template<typename T> class SimpleObservableData;
double text_to_double(const std::string & val);
}
template<typename T>
std::ostream & operator<<(std::ostream & o, const std::valarray< T > &);
namespace alps {
template<typename T, typename BINNING> class SimpleObservable;
}
OBSERVABLE_FUNCTION(F)
namespace alps {
struct ObservableNamingHelper;
template<typename T> class SimpleObservableEvaluator;
typedef SimpleObservableEvaluator< double > RealObsevaluator;
typedef SimpleObservableEvaluator< int32_t > IntObsevaluator;
typedef SimpleObservableEvaluator< std::complex< double > > ComplexObsevaluator;
template<typename T, typename U>
alps::SimpleObservableEvaluator< T >
operator+(alps::SimpleObservableEvaluator< T > const & x,
const alps::SimpleObservableEvaluator< U > & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator+(alps::SimpleObservableEvaluator< T > const & x, const Y & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator+(const Y & y, alps::SimpleObservableEvaluator< T > const & x);
template<typename T, typename U>
alps::SimpleObservableEvaluator< T >
operator-(const alps::SimpleObservableEvaluator< T > & x,
const alps::SimpleObservableEvaluator< U > & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator-(alps::SimpleObservableEvaluator< T > const & x, const Y & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator-(const Y & y, alps::SimpleObservableEvaluator< T > const & x);
template<typename T, typename U>
alps::SimpleObservableEvaluator< T >
operator*(const alps::SimpleObservableEvaluator< T > & x,
const alps::SimpleObservableEvaluator< U > & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator*(alps::SimpleObservableEvaluator< T > const & x, const Y & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator*(const Y & y, alps::SimpleObservableEvaluator< T > const & x);
template<typename T>
alps::SimpleObservableEvaluator< std::valarray< T > >
operator*(alps::SimpleObservableEvaluator< std::valarray< T > > const & x,
const alps::SimpleObservableEvaluator< T > & y);
template<typename T>
alps::SimpleObservableEvaluator< std::valarray< T > >
operator*(const alps::SimpleObservableEvaluator< T > & y,
alps::SimpleObservableEvaluator< std::valarray< T > > const & x);
template<typename T, typename U>
alps::SimpleObservableEvaluator< T >
operator/(const alps::SimpleObservableEvaluator< T > & x,
const alps::SimpleObservableEvaluator< U > & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator/(alps::SimpleObservableEvaluator< T > const & x, const Y & y);
template<typename T, typename Y>
alps::SimpleObservableEvaluator< T >
operator/(const Y & x, alps::SimpleObservableEvaluator< T > const & y);
template<typename T>
alps::SimpleObservableEvaluator< T >
pow(const alps::SimpleObservableEvaluator< T > & x, double p);
template<typename T>
alps::SimpleObservableEvaluator< T >
pow(const alps::SimpleObservableEvaluator< T > & x, int p);
}