25typedef Eigen::Array<bool,Eigen::Dynamic,1>
ArrayXb;
26using Eigen::ArrayBase;
46 template<Brush::NodeType N>
49 template<
typename T1,
typename... Tn>
50 inline auto operator()(
const T1& t1, Tn... tn) {
return t1; }
56 template<
typename T1,
typename T2>
65 template<
typename T1,
typename T2>
66 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1 - t2; }
72 template<
typename T1,
typename T2>
73 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1 * t2 ;}
79 template<
typename T1,
typename T2>
80 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1 / t2 ; }
88 template<
typename T1,
typename T2,
typename... Tn>
89 inline auto operator()(
const T1& t1,
const T2& t2, Tn... tn) {
return fmin(t1, t2, tn ...); }
92 inline auto operator()(
const T& t) {
return t.rowwise().minCoeff(); }
102 template<
typename T1,
typename T2,
typename... Tn>
103 inline auto operator()(
const T1& t1,
const T2& t2, Tn... tn) {
return fmax(t1, t2, tn ...); }
106 inline auto operator()(
const T& t) {
return t.rowwise().maxCoeff(); }
118 inline auto operator()(
const T& t) {
return t.rowwise().mean(); }
132 template<
typename Derived>
133 typename Derived::Scalar
median( Eigen::DenseBase<Derived>& d ){
134 auto r { d.reshaped() };
135 std::sort( r.begin(), r.end() );
136 return r.size() % 2 == 0 ?
137 r.segment( (r.size()-2)/2, 2 ).mean() :
141 template<
typename Derived>
142 typename Derived::Scalar
median(
const Eigen::DenseBase<Derived>& d ){
143 typename Derived::PlainObject m { d.replicate(1,1) };
147 template<
typename Derived,
typename T=Derived::Scalar>
149 Eigen::Array<T,-1,1> tmp(t.rows());
150 std::transform(t.rowwise().begin(), t.rowwise().end(),
152 [&](
const auto& i){return this->median(i);}
165 inline auto operator()(
const T& t) {
return t.rowwise().prod(); }
176 inline auto operator()(
const T& t) {
return t.rowwise().sum(); }
179 return (t.rowwise().count().cast <
float> ());
224 for (
int i = 0; i < t.rows(); ++i)
225 t.row(i).maxCoeff(&idx(i));
233 template<
typename T1,
typename T2>
234 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1.pow(t2); }
248 inline auto operator()(
const T& t) {
return float(1.0) / (float(1.0) + (-t).exp()) ; }
367 inline auto operator()(
const T& t) {
return t.abs().sqrt(); }
380 template<
typename T1,
typename T2>
381 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1.before(t2); }
387 template<
typename T1,
typename T2>
388 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1.after(t2); }
394 template<
typename T1,
typename T2>
395 inline auto operator()(
const T1& t1,
const T2& t2) {
return t1.during(t2); }
408 constexpr auto Stack = [](
auto m,
auto... ms) {
409 return ((Array<T,-1,-1>(m.rows(),1+
sizeof...(ms))<<m),...,ms).finished();
415 template <
typename T>
416 inline auto softmax(
const ArrayBase<T> &t)
const
420 using Scalar =
typename T::Scalar;
421 Array<Scalar, Dynamic, Dynamic> shifted = t;
422 shifted.colwise() -= shifted.rowwise().maxCoeff();
423 auto exponentiated = shifted.exp();
424 return (exponentiated.colwise() /
425 exponentiated.rowwise().sum()).eval();
428 template <
typename T>
435 template<
typename T,
typename ...Ts>
436 requires(
sizeof...(Ts) > 0)
437 inline auto operator()(
const ArrayBase<T>& first,
438 const ArrayBase<Ts>& ...inputs)
440 using Scalar =
typename T::Scalar;
441 Array<Scalar, Dynamic, Dynamic> logits(first.rows(),
442 1 +
sizeof...(inputs));
443 logits.col(0) = first;
445 ((logits.col(column++) = inputs), ...);
455 inline auto operator()(
const ArrayBase<T>& t1,
const ArrayBase<T>& t2) {
460 template<
typename T>
requires same_as<typename T::Scalar, bJet>
461 inline auto operator()(
const ArrayBase<T>& t1,
const ArrayBase<T>& t2) {
465 for (
int i = 0; i < t1.size(); ++i) {
466 result(i).a = t1(i).a && t2(i).a;
467 result(i).v.setZero();
478 inline auto operator()(
const ArrayBase<T>& t1,
const ArrayBase<T>& t2) {
482 template<
typename T>
requires same_as<typename T::Scalar, bJet>
483 inline auto operator()(
const ArrayBase<T>& t1,
const ArrayBase<T>& t2) {
486 for (
int i = 0; i < t1.size(); ++i) {
487 result(i).a = t1(i).a || t2(i).a;
488 result(i).v.setZero();
503 template<
typename T>
requires same_as<typename T::Scalar, bJet>
506 for (
int i = 0; i < t.size(); ++i) {
507 result(i).a = !t(i).a;
508 result(i).v.setZero();
520 template<
typename T1,
typename T2>
521 inline auto operator()(
const ArrayBase<T1>& t1,
const ArrayBase<T2>& t2)
const {
526 template<
typename T1,
typename T2>
requires same_as<typename T1::Scalar, fJet>
527 inline auto operator()(
const ArrayBase<T1>& t1,
const ArrayBase<T2>& t2)
const {
529 for (
int i = 0; i < t1.size(); ++i) {
530 result(i).a = t1(i).a >= t2(i).a;
531 result(i).v.setZero();
541 template<
typename T1,
typename T2>
542 inline auto operator()(
const ArrayBase<T1>& t1,
const ArrayBase<T2>& t2)
const {
547 template<
typename T1,
typename T2>
requires same_as<typename T1::Scalar, iJet>
548 inline auto operator()(
const ArrayBase<T1>& t1,
const ArrayBase<T2>& t2)
const {
550 for (
int i = 0; i < t1.size(); ++i) {
551 result(i).a = t1(i).a == t2(i).a;
552 result(i).v.setZero();
Eigen::Array< bool, Eigen::Dynamic, 1 > ArrayXb
TimeSeries< float > TimeSeriesf
namespace containing various utility functions
< nsga2 selection operator for getting the front
constexpr auto Stack
Stacks Eigen arrays into a 2d-array, where each array is a column.
Eigen::Array< bool, Eigen::Dynamic, Eigen::Dynamic > ArrayXXb
Eigen::Array< int, Eigen::Dynamic, 1 > ArrayXi
Eigen::Array< bJet, Eigen::Dynamic, 1 > ArrayXbJet
Stores time series data and implements operators over it.
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const ArrayBase< T > &t1, const ArrayBase< T > &t2)
auto operator()(const ArrayBase< T > &t1, const ArrayBase< T > &t2)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(ArrayXXb t)
auto operator()(const TimeSeries< T > &t)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const ArrayBase< T1 > &t1, const ArrayBase< T2 > &t2) const
auto operator()(const ArrayBase< T1 > &t1, const ArrayBase< T2 > &t2) const
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const ArrayBase< T1 > &t1, const ArrayBase< T2 > &t2) const
auto operator()(const ArrayBase< T1 > &t1, const ArrayBase< T2 > &t2) const
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T1 &t1, const T2 &t2, Tn... tn)
auto operator()(const T &t)
auto operator()(const TimeSeries< T > &t)
auto operator()(const T &t)
auto operator()(const TimeSeries< T > &t)
auto operator()(const T &t)
auto operator()(const TimeSeries< T > &t)
auto operator()(const T1 &t1, const T2 &t2, Tn... tn)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const ArrayBase< T > &t)
auto operator()(const ArrayBase< T > &t)
auto operator()(const T &t)
auto operator()(const ArrayBase< T > &t1, const ArrayBase< T > &t2)
auto operator()(const ArrayBase< T > &t1, const ArrayBase< T > &t2)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const TimeSeries< T > &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const ArrayBase< T > &t)
auto softmax(const ArrayBase< T > &t) const
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T1 &t1, const T2 &t2)
auto operator()(const TimeSeries< T > &t)
auto operator()(const T &t)
auto operator()(ArrayXXb t)
auto operator()(const T &t)
auto operator()(const T &t)
auto operator()(const T1 &t1, Tn... tn)