TiledArray  0.7.0
blk_tsr_expr.h
Go to the documentation of this file.
1 /*
2  * This file is a part of TiledArray.
3  * Copyright (C) 2015 Virginia Tech
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * Justus Calvin
19  * Department of Chemistry, Virginia Tech
20  *
21  * blk_tsr_expr.h
22  * May 20, 2015
23  *
24  */
25 
26 #ifndef TILEDARRAY_EXPRESSIONS_BLK_TSR_EXPR_H__INCLUDED
27 #define TILEDARRAY_EXPRESSIONS_BLK_TSR_EXPR_H__INCLUDED
28 
30 #include "blk_tsr_engine.h"
31 
32 namespace TiledArray {
33  namespace expressions {
34 
35  // Forward declaration
36  template <typename, bool> class TsrExpr;
37  template <typename, bool> class BlkTsrExpr;
38  template <typename, typename> class ScalBlkTsrExpr;
39 
40  template <typename Array>
41  using ConjBlkTsrExpr =
43 
44  template <typename Array, typename Scalar>
45  using ScalConjBlkTsrExpr =
47 
52 
53  template <typename> struct is_aliased;
54  template <typename Array, bool Alias>
55  struct is_aliased<BlkTsrExpr<Array, Alias> > :
56  public std::integral_constant<bool, Alias> { };
57 
58  template <typename Array, bool Alias>
59  struct ExprTrait<BlkTsrExpr<Array, Alias> > {
60  typedef Array array_type;
61  typedef Array& reference;
62  typedef numeric_t<Array> numeric_type;
63  typedef scalar_t<Array> scalar_type;
66  };
67 
68  template <typename Array, bool Alias>
69  struct ExprTrait<BlkTsrExpr<const Array, Alias> > {
70  typedef Array array_type;
71  typedef const Array& reference;
72  typedef numeric_t<Array> numeric_type;
73  typedef scalar_t<Array> scalar_type;
76  };
77 
78  template <typename Array, typename Scalar>
79  struct ExprTrait<ScalBlkTsrExpr<Array, Scalar> > {
80  typedef Array array_type;
81  typedef const Array& reference;
84  typedef numeric_t<Array> numeric_type;
85  typedef Scalar scalar_type;
86  };
87 
88  template <typename Array, typename Scalar>
89  struct ExprTrait<ScalBlkTsrExpr<const Array, Scalar> > {
90  typedef Array array_type;
91  typedef const Array& reference;
94  typedef numeric_t<Array> numeric_type;
95  typedef Scalar scalar_type;
96  };
97 
99 
101  template <typename Derived>
102  class BlkTsrExprBase : public Expr<Derived> {
103  public:
110 
111  protected:
112 
114  std::string vars_;
115  std::vector<std::size_t> lower_bound_;
116  std::vector<std::size_t> upper_bound_;
117 
118  void check_valid() const {
119  const unsigned int rank = array_.trange().tiles_range().rank();
120  // Check the dimension of the lower block bound
122  if(TiledArray::get_default_world().rank() == 0) {
124  "The size lower bound of the block is not equal to rank of " \
125  "the array: " \
126  << "\n array rank = " << array_.trange().tiles_range().rank() \
127  << "\n lower bound = " << lower_bound_ );
128 
129  TA_EXCEPTION("The size lower bound of the block is not equal to " \
130  "rank of the array.");
131  }
132  }
133 
134  // Check the dimension of the upper block bound
136  if(TiledArray::get_default_world().rank() == 0) {
138  "The size upper bound of the block is not equal to rank of " \
139  "the array: " \
140  << "\n array rank = " << rank \
141  << "\n upper bound = " << upper_bound_ );
142 
143  TA_EXCEPTION("The size upper bound of the block is not equal to " \
144  "rank of the array.");
145  }
146  }
147 
148  const bool lower_bound_check =
149  std::equal(std::begin(lower_bound_), std::end(lower_bound_),
150  array_.trange().tiles_range().lobound_data(),
151  [] (std::size_t l, std::size_t r) { return l >= r; });
152  const bool upper_bound_check =
153  std::equal(std::begin(upper_bound_), std::end(upper_bound_),
154  array_.trange().tiles_range().upbound_data(),
155  [] (std::size_t l, std::size_t r) { return l <= r; });
156  if(! (lower_bound_check && upper_bound_check)) {
157  if(TiledArray::get_default_world().rank() == 0) {
159  "The block range is not a sub-block of the array range: " \
160  << "\n array range = " << array_.trange().tiles_range() \
161  << "\n block range = [ " << lower_bound_ << " , " << upper_bound_ << " )");
162  }
163 
164  TA_EXCEPTION("The block range is not a sub-block of the array range.");
165  }
166 
167  const bool lower_upper_bound_check =
168  std::equal(std::begin(lower_bound_), std::end(lower_bound_),
169  std::begin(upper_bound_),
170  [] (std::size_t l, std::size_t r) { return l < r; });
171  if(! lower_upper_bound_check) {
172  if(TiledArray::get_default_world().rank() == 0) {
174  "The block lower bound is not less than the upper bound: " \
175  << "\n lower bound = " << lower_bound_ \
176  << "\n upper bound = " << upper_bound_);
177  }
178 
179  TA_EXCEPTION("The block lower bound is not less than the upper bound.");
180  }
181  }
182 
183  public:
184 
185  // Compiler generated functions
186  BlkTsrExprBase(const BlkTsrExprBase_&) = default;
187  BlkTsrExprBase(BlkTsrExprBase_&&) = default;
188  ~BlkTsrExprBase() = default;
189  BlkTsrExprBase_& operator=(const BlkTsrExprBase_&) = delete;
191 
193 
199  template <typename Index>
200  BlkTsrExprBase(reference array, const std::string& vars,
201  const Index& lower_bound, const Index& upper_bound) :
202  Expr_(), array_(array), vars_(vars),
203  lower_bound_(std::begin(lower_bound), std::end(lower_bound)),
204  upper_bound_(std::begin(upper_bound), std::end(upper_bound))
205  {
206 #ifndef NDEBUG
207  check_valid();
208 #endif // NDEBUG
209  }
210 
212 
214  reference array() const { return array_; }
215 
217 
219  const std::string& vars() const { return vars_; }
220 
222 
224  const std::vector<std::size_t>& lower_bound() const { return lower_bound_; }
225 
227 
229  const std::vector<std::size_t>& upper_bound() const { return upper_bound_; }
230 
231  }; // class BlkTsrExprBase
232 
234 
238  template <typename Array, bool Alias>
239  class BlkTsrExpr : public BlkTsrExprBase<BlkTsrExpr<Array, Alias> > {
240  public:
250 
251  // Compiler generated functions
252  BlkTsrExpr() = delete;
253  BlkTsrExpr(const BlkTsrExpr_&) = default;
254  BlkTsrExpr(BlkTsrExpr_&&) = default;
255  ~BlkTsrExpr() = default;
256 
258 
264  template <typename Index>
265  BlkTsrExpr(reference array, const std::string& vars,
266  const Index& lower_bound, const Index& upper_bound) :
268  { }
269 
271 
274  other.eval_to(*this);
276  }
277 
279 
282  other.eval_to(*this);
284  }
285 
287 
290  template <typename D>
291  reference operator=(const Expr<D>& other) {
293  "no_alias() expressions are not allowed on the right-hand side of "
294  "the assignment operator.");
295  other.derived().eval_to(*this);
297  }
298 
300 
303  template <typename D>
304  reference operator+=(const Expr<D>& other) {
306  "no_alias() expressions are not allowed on the right-hand side of "
307  "the assignment operator.");
308  return operator=(AddExpr<BlkTsrExpr_, D>(*this, other.derived()));
309  }
310 
312 
315  template <typename D>
316  reference operator-=(const Expr<D>& other) {
318  "no_alias() expressions are not allowed on the right-hand side of "
319  "the assignment operator.");
320  return operator=(SubtExpr<BlkTsrExpr_, D>(*this, other.derived()));
321  }
322 
324 
327  template <typename D>
328  reference operator*=(const Expr<D>& other) {
330  "no_alias() expressions are not allowed on the right-hand side of "
331  "the assignment operator.");
332  return operator=(MultExpr<BlkTsrExpr_, D>(*this, other.derived()));
333  }
334 
336 
339  no_alias() const {
342  }
343 
344 
346 
352  }
353 
354  }; // class BlkTsrExpr
355 
357 
359  template <typename Array>
360  class BlkTsrExpr<const Array, true> :
361  public BlkTsrExprBase<BlkTsrExpr<const Array, true> >
362  {
363  public:
373 
374  // Compiler generated functions
375  BlkTsrExpr() = delete;
376  BlkTsrExpr(const BlkTsrExpr_&) = default;
377  BlkTsrExpr(BlkTsrExpr_&&) = default;
378  ~BlkTsrExpr() = default;
379  BlkTsrExpr_& operator=(const BlkTsrExpr_&) = delete;
380  BlkTsrExpr_& operator=(BlkTsrExpr_&&) = delete;
381 
382 
384 
390  template <typename Index>
391  BlkTsrExpr(reference array, const std::string& vars,
392  const Index& lower_bound, const Index& upper_bound) :
394  { }
395 
396 
398 
404  }
405 
406  }; // class BlkTsrExpr<const Array>
407 
409 
412  template <typename Array, typename Scalar>
413  class ScalBlkTsrExpr : public BlkTsrExprBase<ScalBlkTsrExpr<Array, Scalar> > {
414  public:
426 
427  private:
428 
429  scalar_type factor_;
430 
431  public:
432 
433  // Compiler generated functions
434  ScalBlkTsrExpr() = delete;
435  ScalBlkTsrExpr(const ScalBlkTsrExpr_&) = default;
436  ScalBlkTsrExpr(ScalBlkTsrExpr_&&) = default;
437  ~ScalBlkTsrExpr() = default;
438  ScalBlkTsrExpr_& operator=(const ScalBlkTsrExpr_&) = delete;
440 
441 
443 
450  template <typename Index>
451  ScalBlkTsrExpr(reference array, const std::string& vars,
452  const scalar_type factor,
453  const Index& lower_bound, const Index& upper_bound) :
455  { }
456 
458 
460  scalar_type factor() const { return factor_; }
461 
462  }; // class ScalBlkTsrExpr
463 
465 
472  template <typename Array, typename Scalar, bool Alias,
473  typename std::enable_if<
475  >::type* = nullptr>
476  inline ScalBlkTsrExpr<typename std::remove_const<Array>::type, Scalar>
477  operator*(const BlkTsrExpr<Array, Alias>& expr, const Scalar& factor) {
479  expr.array(), expr.vars(), factor, expr.lower_bound(),
480  expr.upper_bound());
481  }
482 
484 
491  template <typename Array, typename Scalar, bool Alias,
492  typename std::enable_if<
494  >::type* = nullptr>
495  inline ScalBlkTsrExpr<typename std::remove_const<Array>::type, Scalar>
496  operator*(const Scalar& factor, const BlkTsrExpr<Array, Alias>& expr) {
498  expr.array(), expr.vars(), factor, expr.lower_bound(),
499  expr.upper_bound());
500  }
501 
503 
510  template <typename Array, typename Scalar1, typename Scalar2,
511  typename std::enable_if<
513  >::type* = nullptr>
514  inline ScalBlkTsrExpr<Array, mult_t<Scalar1, Scalar2> >
515  operator*(const ScalBlkTsrExpr<Array, Scalar1>& expr, const Scalar2& factor) {
517  expr.vars(), expr.factor() * factor, expr.lower_bound(),
518  expr.upper_bound());
519  }
520 
522 
529  template <typename Array, typename Scalar1, typename Scalar2,
530  typename std::enable_if<
532  >::type * = nullptr>
533  inline ScalBlkTsrExpr<Array, mult_t<Scalar2, Scalar1> >
534  operator*(const Scalar1& factor, const ScalBlkTsrExpr<Array, Scalar2>& expr) {
536  expr.vars(), expr.factor() * factor, expr.lower_bound(),
537  expr.upper_bound());
538  }
539 
541 
545  template <typename Array>
546  inline ScalBlkTsrExpr<typename std::remove_const<Array>::type,
547  typename ExprTrait<BlkTsrExpr<Array, true> >::numeric_type>
549  typedef typename ExprTrait<BlkTsrExpr<Array, true> >::numeric_type
550  numeric_type;
552  numeric_type>(expr.array(), expr.vars(), -1, expr.lower_bound(),
553  expr.upper_bound());
554  }
555 
557 
562  template <typename Array, typename Scalar>
563  inline ScalBlkTsrExpr<Array, Scalar>
565  return ScalBlkTsrExpr<Array, Scalar>(expr.array(), expr.vars(),
566  -expr.factor(), expr.lower_bound(), expr.upper_bound());
567  }
568 
569 
571 
576  template <typename Array, bool Alias>
577  inline ConjBlkTsrExpr<typename std::remove_const<Array>::type>
580  expr.array(), expr.vars(), conj_op(), expr.lower_bound(),
581  expr.upper_bound());
582  }
583 
585 
589  template <typename Array>
590  inline BlkTsrExpr<const Array, true>
592  return BlkTsrExpr<const Array, true>(expr.array(), expr.vars(),
593  expr.lower_bound(), expr.upper_bound());
594  }
595 
597 
602  template <typename Array, typename Scalar>
603  inline ScalConjBlkTsrExpr<Array, Scalar>
605  return ScalConjBlkTsrExpr<Array, Scalar>(expr.array(), expr.vars(),
606  conj_op(TiledArray::detail::conj(expr.factor())),
607  expr.lower_bound(), expr.upper_bound());
608  }
609 
611 
616  template <typename Array, typename Scalar>
617  inline ScalBlkTsrExpr<Array, Scalar>
619  return ScalBlkTsrExpr<Array, Scalar>(expr.array(), expr.vars(),
620  TiledArray::detail::conj(expr.factor().factor()),
621  expr.lower_bound(), expr.upper_bound());
622  }
623 
625 
631  template <typename Array, typename Scalar,
632  typename std::enable_if<
634  >::type* = nullptr>
635  inline ScalConjBlkTsrExpr<Array, Scalar>
636  operator*(const ConjBlkTsrExpr<const Array>& expr, const Scalar& factor) {
637  return ScalConjBlkTsrExpr<Array, Scalar>(expr.array(), expr.vars(),
638  conj_op(factor), expr.lower_bound(), expr.upper_bound());
639  }
640 
642 
648  template <typename Array, typename Scalar,
649  typename std::enable_if<
651  >::type* = nullptr>
652  inline ScalConjBlkTsrExpr<Array, Scalar>
653  operator*(const Scalar& factor, const ConjBlkTsrExpr<Array>& expr) {
654  return ScalConjBlkTsrExpr<Array, Scalar>(expr.array(), expr.vars(),
655  conj_op(factor), expr.lower_bound(), expr.upper_bound());
656  }
657 
659 
665  template <typename Array, typename Scalar1, typename Scalar2,
666  typename std::enable_if<
668  >::type* = nullptr>
669  inline ScalConjBlkTsrExpr<Array, mult_t<Scalar1, Scalar2> >
670  operator*(const ScalConjBlkTsrExpr<Array, Scalar1>& expr, const Scalar2& factor) {
672  expr.vars(), conj_op(expr.factor().factor() * factor),
673  expr.lower_bound(), expr.upper_bound());
674  }
675 
677 
683  template <typename Array, typename Scalar1, typename Scalar2,
684  typename std::enable_if<
686  >::type* = nullptr>
687  inline ScalConjBlkTsrExpr<Array, mult_t<Scalar2, Scalar1> >
688  operator*(const Scalar1& factor, const ScalConjBlkTsrExpr<Array, Scalar2>& expr) {
690  expr.vars(), conj_op(expr.factor().factor() * factor),
691  expr.lower_bound(), expr.upper_bound());
692  }
693 
695 
699  template <typename Array>
700  inline ScalConjBlkTsrExpr<Array,
701  typename ExprTrait<ConjBlkTsrExpr<Array> >::numeric_type>
703  typedef typename ExprTrait<ConjBlkTsrExpr<Array> >::numeric_type
704  numeric_type;
705  return ScalConjBlkTsrExpr<Array, numeric_type>(expr.array(), expr.vars(),
706  conj_op<numeric_type>(-1), expr.lower_bound(), expr.upper_bound());
707  }
708 
710 
715  template <typename Array, typename Scalar>
716  inline ScalConjBlkTsrExpr<Array, Scalar>
718  return ScalConjBlkTsrExpr<Array, Scalar>(expr.array(), expr.vars(),
719  conj_op(-expr.factor().factor()), expr.lower_bound(),
720  expr.upper_bound());
721  }
722 
723 
724  } // namespace expressions
725 } // namespace TiledArray
726 
727 #endif // TILEDARRAY_EXPRESSIONS_BLK_TSR_EXPR_H__INCLUDED
ExprTrait< BlkTsrExpr_ >::array_type array_type
The array type.
Definition: blk_tsr_expr.h:246
Scaled tensor block expression engine.
BlkTsrExprBase(const BlkTsrExprBase_ &)=default
ExprTrait< BlkTsrExpr_ >::engine_type engine_type
Expression engine type.
Definition: blk_tsr_expr.h:244
ExprTrait< BlkTsrExpr_ >::reference reference
The array reference type.
Definition: blk_tsr_expr.h:248
numeric_t< Array > numeric_type
Array base numeric type.
Definition: blk_tsr_expr.h:62
ConjBlkTsrExpr< array_type > conj() const
Conjugated block tensor expression factory.
Definition: blk_tsr_expr.h:400
const std::vector< std::size_t > & upper_bound() const
Upper bound accessor.
Definition: blk_tsr_expr.h:229
ConjBlkTsrExpr< array_type > conj() const
Conjugated block tensor expression factory.
Definition: blk_tsr_expr.h:348
Tensor expression engine.
BlkTsrExprBase< ScalBlkTsrExpr_ > BlkTsrExprBase_
Block expresion base type.
Definition: blk_tsr_expr.h:416
STL namespace.
ExprTrait< ScalBlkTsrExpr_ >::reference reference
The array reference type.
Definition: blk_tsr_expr.h:422
scalar_t< Array > scalar_type
Array base scalar type.
Definition: blk_tsr_expr.h:63
scalar_type factor() const
Scaling factor accessor.
Definition: blk_tsr_expr.h:460
std::enable_if< TiledArray::detail::is_numeric< Scalar >::value, ScalAddExpr< Left, Right, Scalar > >::type operator*(const AddExpr< Left, Right > &expr, const Scalar &factor)
Scaled-addition expression factor.
Definition: add_expr.h:198
BlkTsrExprBase(reference array, const std::string &vars, const Index &lower_bound, const Index &upper_bound)
Block expression constructor.
Definition: blk_tsr_expr.h:200
BlkTsrEngine< Array, typename Array::eval_type, Alias > engine_type
Expression engine type.
Definition: blk_tsr_expr.h:75
Addition expression.
Definition: add_engine.h:37
decltype(std::declval< Scalar1 >() *std::declval< Scalar2 >()) mult_t
Definition: type_traits.h:748
ExprTrait< ScalBlkTsrExpr_ >::engine_type engine_type
Expression engine type.
Definition: blk_tsr_expr.h:418
BlkTsrEngine< Array, typename Array::eval_type, Alias > engine_type
Expression engine type.
Definition: blk_tsr_expr.h:65
Multiplication expression.
Definition: cont_engine.h:38
typename TiledArray::detail::numeric_type< T >::type numeric_t
Definition: type_traits.h:525
BlkTsrExpr(reference array, const std::string &vars, const Index &lower_bound, const Index &upper_bound)
Block expression constructor.
Definition: blk_tsr_expr.h:265
std::string vars_
The tensor variable list.
Definition: blk_tsr_expr.h:114
numeric_t< Array > numeric_type
Array base numeric type.
Definition: blk_tsr_expr.h:72
ExprTrait< BlkTsrExpr_ >::reference reference
The array reference type.
Definition: blk_tsr_expr.h:371
ExprTrait< Derived >::array_type array_type
The array type.
Definition: blk_tsr_expr.h:106
ScalBlkTsrExpr_ & operator=(const ScalBlkTsrExpr_ &)=delete
constexpr std::size_t size(T(&)[N])
Array size accessor.
Definition: utility.h:47
std::vector< std::size_t > upper_bound_
Upper bound of the tile block.
Definition: blk_tsr_expr.h:116
ExprTrait< Derived >::reference reference
The array reference type.
Definition: blk_tsr_expr.h:108
BlkTsrExpr< Array, Alias > BlkTsrExpr_
This class type.
Definition: blk_tsr_expr.h:241
ExprTrait< ScalBlkTsrExpr_ >::scalar_type scalar_type
Scalar type.
Definition: blk_tsr_expr.h:424
const std::vector< std::size_t > & lower_bound() const
Lower bound accessor.
Definition: blk_tsr_expr.h:224
Forward declarations.
Definition: clone.h:32
ScalBlkTsrExpr(reference array, const std::string &vars, const scalar_type factor, const Index &lower_bound, const Index &upper_bound)
Block expression constructor.
Definition: blk_tsr_expr.h:451
reference operator=(const Expr< D > &other)
Expression assignment operator.
Definition: blk_tsr_expr.h:291
BlkTsrExpr(reference array, const std::string &vars, const Index &lower_bound, const Index &upper_bound)
Block expression constructor.
Definition: blk_tsr_expr.h:391
reference operator+=(const Expr< D > &other)
Expression plus-assignment operator.
Definition: blk_tsr_expr.h:304
reference operator*=(const Expr< D > &other)
Expression multiply-assignment operator.
Definition: blk_tsr_expr.h:328
typename TiledArray::detail::scalar_type< T >::type scalar_t
Definition: type_traits.h:555
ExprTrait< BlkTsrExpr_ >::engine_type engine_type
Expression engine type.
Definition: blk_tsr_expr.h:367
BlkTsrExpr< const Array, true > BlkTsrExpr_
This class type.
Definition: blk_tsr_expr.h:364
BlkTsrExpr< Array, false > no_alias() const
Flag this tensor expression for a non-aliasing assignment.
Definition: blk_tsr_expr.h:339
Base class for expression evaluation.
Definition: expr.h:81
derived_type & derived()
Cast this object to it&#39;s derived type.
Definition: expr.h:273
ConjAddExpr< Left, Right > conj(const AddExpr< Left, Right > &expr)
Conjugated addition expression factory.
Definition: add_expr.h:292
void eval_to(TsrExpr< A, Alias > &tsr) const
Evaluate this object and assign it to tsr.
Definition: expr.h:287
reference operator=(BlkTsrExpr_ &&other)
Expression assignment operator.
Definition: blk_tsr_expr.h:281
ScalAddExpr< Left, Right, typename ExprTrait< AddExpr< Left, Right > >::numeric_type > operator-(const AddExpr< Left, Right > &expr)
Negated addition expression factor.
Definition: add_expr.h:266
reference array_
The array that this expression.
Definition: blk_tsr_expr.h:113
std::vector< std::size_t > lower_bound_
Lower bound of the tile block.
Definition: blk_tsr_expr.h:115
BlkTsrExprBase< BlkTsrExpr_ > BlkTsrExprBase_
Block expression base type.
Definition: blk_tsr_expr.h:366
TILEDARRAY_FORCE_INLINE R conj(const R r)
Wrapper function for std::conj
Definition: complex.h:44
reference operator-=(const Expr< D > &other)
Expression minus-assignment operator.
Definition: blk_tsr_expr.h:316
ExprTrait< BlkTsrExpr_ >::array_type array_type
The array type.
Definition: blk_tsr_expr.h:369
reference operator=(const BlkTsrExpr_ &other)
Expression assignment operator.
Definition: blk_tsr_expr.h:273
ExprTrait< ScalBlkTsrExpr_ >::array_type array_type
The array type.
Definition: blk_tsr_expr.h:420
Subtraction expression.
Definition: subt_engine.h:37
ScalBlkTsrExpr< Array, TiledArray::detail::ComplexConjugate< Scalar > > ScalConjBlkTsrExpr
Definition: blk_tsr_expr.h:46
ComplexConjugate< S > conj_op(const S factor)
ComplexConjugate operator factory function.
Definition: complex.h:181
const std::string & vars() const
Tensor variable string accessor.
Definition: blk_tsr_expr.h:219
#define TA_EXCEPTION(m)
Definition: error.h:72
reference array() const
Array accessor.
Definition: blk_tsr_expr.h:214
ScalBlkTsrEngine< Array, Scalar, typename Array::eval_type > engine_type
Expression engine type.
Definition: blk_tsr_expr.h:93
BlkTsrExprBase< BlkTsrExpr_ > BlkTsrExprBase_
Block expression base type.
Definition: blk_tsr_expr.h:243
ScalBlkTsrExpr< Array, Scalar > ScalBlkTsrExpr_
This class type.
Definition: blk_tsr_expr.h:415
numeric_t< Array > numeric_type
Array base numeric type.
Definition: blk_tsr_expr.h:84
BlkTsrExprBase< Derived > BlkTsrExprBase_
This class type.
Definition: blk_tsr_expr.h:104
Expr< Derived > Expr_
Unary base class type.
Definition: blk_tsr_expr.h:105
ScalBlkTsrEngine< Array, Scalar, typename Array::eval_type > engine_type
Expression engine type.
Definition: blk_tsr_expr.h:83
#define TA_USER_ERROR_MESSAGE(m)
Definition: error.h:118
ScalBlkTsrExpr< Array, TiledArray::detail::ComplexConjugate< void > > ConjBlkTsrExpr
Definition: blk_tsr_expr.h:42
DistArray< Tile, Policy > Array
BlkTsrExprBase_ & operator=(const BlkTsrExprBase_ &)=delete