11     namespace implementation_details{
 
   15         using is_rank = std::enable_if_t<std::is_same<T, row_vector_t<T>>::value, 
int>;
 
   18         using is_vector_rank = std::enable_if_t<std::is_same<T, std::vector<row_vector_t<typename T::value_type>>>::value, 
int>;
 
   21         using is_arrow = std::enable_if_t<std::is_same<T, arrow_t<T>>::value, 
int>;
 
   24         using is_chains = std::enable_if_t<std::is_same<T, chains_t<T>>::value, 
int>;
 
   27         using is_junction = std::enable_if_t<std::is_same<T, junction_t<T>>::value, 
int>;
 
   29         template<
typename T, 
bool>
 
   33         struct optional_base<T, 0> {};
 
   36         struct optional_base<T, 1> { T _optional; };
 
   42     template<
typename _output_t, 
typename _optional_t = 
void> 
 
   43     class Tensor : implementation_details::optional_base<_optional_t, !std::is_same<_optional_t, void>::value> {
 
   66         template<
typename _input_t>
 
   67         Tensor(
const _input_t& A, 
const _input_t& B, 
int i= -1);
 
   70         static constexpr 
bool optional_exists = !std::is_same<_optional_t, void>::value;
 
   76         template<
typename _input_t, 
typename implementation_details::is_rank<_input_t> = 0>
 
   77         void tensor(
const _input_t&, 
const _input_t&, 
int = -1);
 
   81         template<
typename _input_t, 
typename implementation_details::is_vector_rank<_input_t> = 0, 
typename S = _output_t, 
typename implementation_details::is_rank<S> = 0>
 
   82         void tensor(
const _input_t&, 
const _input_t&, 
int = -1);
 
   86         template<
typename _input_t, 
typename T = _output_t, 
typename S = _output_t, 
typename implementation_details::is_vector_rank<T> = 0, 
typename implementation_details::is_vector_rank<S> = 0>
 
   87         void tensor(
const _input_t&, 
const _input_t&, 
int = -1);
 
   91         template<
typename _input_t, 
typename T = _output_t, 
typename implementation_details::is_arrow<T> = 0>
 
   92         void tensor(
const _input_t&, 
const _input_t&, 
int = -1);
 
   96         template<
typename _input_t, 
typename T = _output_t, 
typename implementation_details::is_chains<T> = 0>
 
   97         void tensor(
const _input_t&, 
const _input_t&, 
int = -1);
 
  101         template<
typename _input_t, 
typename T = _output_t, 
typename implementation_details::is_junction<T> = 0>
 
  102         void tensor(
const _input_t&, 
const _input_t&, 
int = -1);
 
  106 #include "impl/Box.ipp" 
Contains the classes mackey::Arrow, mackey::Chains and mackey::Junction.
Contains the class mackey::ChangeBasis.
Contains general functions and vector overloads independent of everything else.
Tensor product of chain complexes and more.
Definition: Box.hpp:43
const _output_t & tensor() const
Returns the tensor product.
auto & optional()
Returns the optional parameter (detailed rank)
_output_t & tensor()
Returns the tensor product.
const auto & optional() const
Returns the optional parameter (detailed rank)
Tensor(const _input_t &A, const _input_t &B, int i=-1)
Constructor that tensors A,B and optionally at given location only.
Everything in this library is under this namespace.
Definition: Box.hpp:9