Go to the documentation of this file.
10 #ifndef EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
11 #define EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
23 template<
typename NewDimensions,
typename XprType>
30 typedef typename XprType::Nested
Nested;
33 static const int Layout = XprTraits::Layout;
37 template<
typename NewDimensions,
typename XprType>
43 template<
typename NewDimensions,
typename XprType>
53 template<
typename NewDimensions,
typename XprType>
83 template<
typename NewDimensions,
typename ArgType,
typename Device>
110 #if defined(EIGEN_HAS_INDEX_LIST)
111 (NumOutputDims == 2 && internal::index_statically_eq<NewDimensions>(0, 1)) ? OneByN
112 : (NumOutputDims == 2 && internal::index_statically_eq<NewDimensions>(1, 1)) ?
NByOne
126 NumInputDims > 0 && NumOutputDims > 0,
146 : m_impl(op.expression(), device), m_dimensions(op.
dimensions())
155 #ifdef EIGEN_USE_THREADS
156 template <
typename EvalSubExprsCallback>
159 m_impl.evalSubExprsIfNeededAsync(
data, std::move(done));
164 return m_impl.evalSubExprsIfNeeded(
data);
172 return m_impl.coeff(index);
175 template<
int LoadMode>
178 return m_impl.template packet<LoadMode>(index);
182 return m_impl.costPerCoeff(vectorized);
192 struct BlockIteratorState {
201 bool =
false)
const {
204 (kind == OneByN &&
desc.dimensions()[0] == 1) ||
205 (kind ==
NByOne &&
desc.dimensions()[1] == 1));
207 if (kind == OneByN || kind ==
NByOne) {
211 m_impl.data() +
desc.offset(),
desc.dimensions());
226 #ifdef EIGEN_USE_SYCL
239 template<
typename NewDimensions,
typename ArgType,
typename Device>
241 :
public TensorEvaluator<const TensorReshapingOp<NewDimensions, ArgType>, Device>
274 return this->m_impl.coeffRef(index);
280 this->m_impl.template writePacket<StoreMode>(index,
x);
283 template <
typename TensorBlock>
286 assert(this->m_impl.data() !=
NULL);
290 Scalar, TensorEvaluator::NumOutputDims, TensorBlockExpr,
Index>
293 TensorBlockAssign::Run(
294 TensorBlockAssign::target(
desc.dimensions(),
295 internal::strides<Layout>(
this->dimensions()),
296 this->m_impl.data(),
desc.offset()),
310 template<
typename StartIndices,
typename Sizes,
typename XprType>
320 static const int Layout = XprTraits::Layout;
324 template<
typename StartIndices,
typename Sizes,
typename XprType>
330 template<
typename StartIndices,
typename Sizes,
typename XprType>
340 template<
typename StartIndices,
typename Sizes,
typename XprType>
374 template <
typename Index,
typename Device,
bool BlockAccess>
struct MemcpyTriggerForSlicing {
377 const bool prefer_block_evaluation = BlockAccess && total > 32*1024;
378 return !prefer_block_evaluation && contiguous >
threshold_;
388 template <
typename Index,
bool BlockAccess>
struct MemcpyTriggerForSlicing<
Index, GpuDevice, BlockAccess> {
396 #ifdef EIGEN_USE_SYCL
397 template <
typename Index,
bool BlockAccess>
struct MemcpyTriggerForSlicing<
Index,
Eigen::SyclDevice, BlockAccess> {
406 template<
typename StartIndices,
typename Sizes,
typename ArgType,
typename Device>
447 : m_impl(op.expression(), device),
m_device(device), m_dimensions(op.
sizes()), m_offsets(op.startIndices())
449 m_is_identity =
true;
453 if (m_impl.dimensions()[
i] != op.
sizes()[
i] ||
455 m_is_identity =
false;
460 if (NumDims == 0)
return;
465 m_inputStrides[0] = 1;
466 for (
int i = 1;
i < NumDims; ++
i) {
467 m_inputStrides[
i] = m_inputStrides[
i-1] * input_dims[
i-1];
471 m_outputStrides[0] = 1;
472 for (
int i = 1;
i < NumDims; ++
i) {
473 m_outputStrides[
i] = m_outputStrides[
i-1] * output_dims[
i-1];
477 m_inputStrides[NumDims-1] = 1;
478 for (
int i = NumDims - 2;
i >= 0; --
i) {
479 m_inputStrides[
i] = m_inputStrides[
i+1] * input_dims[
i+1];
483 m_outputStrides[NumDims-1] = 1;
484 for (
int i = NumDims - 2;
i >= 0; --
i) {
485 m_outputStrides[
i] = m_outputStrides[
i+1] * output_dims[
i+1];
494 m_impl.evalSubExprsIfNeeded(
NULL);
496 &&
data && m_impl.data()) {
497 Index contiguous_values = 1;
499 for (
int i = 0;
i < NumDims; ++
i) {
506 for (
int i = NumDims-1;
i >= 0; --
i) {
514 const MemcpyTriggerForSlicing<Index, Device, BlockAccess> trigger(
m_device);
527 #ifdef EIGEN_USE_THREADS
528 template <
typename EvalSubExprsCallback>
531 m_impl.evalSubExprsIfNeededAsync(
nullptr, [done](
bool) { done(
true); });
533 #endif // EIGEN_USE_THREADS
542 return m_impl.coeff(index);
544 return m_impl.coeff(srcCoeff(index));
548 template<
int LoadMode>
556 return m_impl.template packet<LoadMode>(index);
559 Index inputIndices[] = {0, 0};
563 for (
int i = NumDims - 1;
i > 0; --
i) {
566 inputIndices[0] += (idx0 + m_offsets[
i]) * m_inputStrides[
i];
567 inputIndices[1] += (idx1 + m_offsets[
i]) * m_inputStrides[
i];
568 indices[0] -= idx0 * m_outputStrides[
i];
569 indices[1] -= idx1 * m_outputStrides[
i];
571 inputIndices[0] += (
indices[0] + m_offsets[0]);
572 inputIndices[1] += (
indices[1] + m_offsets[0]);
575 for (
int i = 0;
i < NumDims - 1; ++
i) {
578 inputIndices[0] += (idx0 + m_offsets[
i]) * m_inputStrides[
i];
579 inputIndices[1] += (idx1 + m_offsets[
i]) * m_inputStrides[
i];
580 indices[0] -= idx0 * m_outputStrides[
i];
581 indices[1] -= idx1 * m_outputStrides[
i];
583 inputIndices[0] += (
indices[0] + m_offsets[NumDims-1]);
584 inputIndices[1] += (
indices[1] + m_offsets[NumDims-1]);
586 if (inputIndices[1] - inputIndices[0] == packetSize - 1) {
592 values[0] = m_impl.coeff(inputIndices[0]);
593 values[packetSize-1] = m_impl.coeff(inputIndices[1]);
595 for (
int i = 1;
i < packetSize-1; ++
i) {
604 return m_impl.costPerCoeff(vectorized) +
TensorOpCost(0, 0, m_is_identity ? 1 : NumDims);
609 const size_t target_size =
m_device.lastLevelCacheSize();
611 internal::TensorBlockResourceRequirements::skewed<Scalar>(target_size),
612 m_impl.getResourceRequirements());
617 bool =
false)
const {
629 for (
int i = 0;
i < NumDims; ++
i) {
630 if (m_dimensions[
i] != m_impl.dimensions()[
i]) {
631 offset += m_offsets[
i] * m_inputStrides[
i];
632 for (
int j =
i+1;
j < NumDims; ++
j) {
633 if (m_dimensions[
j] > 1) {
636 offset += m_offsets[
j] * m_inputStrides[
j];
642 for (
int i = NumDims - 1;
i >= 0; --
i) {
643 if (m_dimensions[
i] != m_impl.dimensions()[
i]) {
644 offset += m_offsets[
i] * m_inputStrides[
i];
645 for (
int j =
i-1;
j >= 0; --
j) {
646 if (m_dimensions[
j] > 1) {
649 offset += m_offsets[
j] * m_inputStrides[
j];
659 #ifdef EIGEN_USE_SYCL
669 Index inputIndex = 0;
672 for (
int i = NumDims - 1;
i > 0; --
i) {
673 const Index idx = index / m_fastOutputStrides[
i];
674 inputIndex += (idx + m_offsets[
i]) * m_inputStrides[
i];
675 index -= idx * m_outputStrides[
i];
677 inputIndex += (index + m_offsets[0]);
680 for (
int i = 0;
i < NumDims - 1; ++
i) {
681 const Index idx = index / m_fastOutputStrides[
i];
682 inputIndex += (idx + m_offsets[
i]) * m_inputStrides[
i];
683 index -= idx * m_outputStrides[
i];
685 inputIndex += (index + m_offsets[NumDims-1]);
702 template<
typename StartIndices,
typename Sizes,
typename ArgType,
typename Device>
704 :
public TensorEvaluator<const TensorSlicingOp<StartIndices, Sizes, ArgType>, Device>
739 if (this->m_is_identity) {
740 return this->m_impl.coeffRef(index);
742 return this->m_impl.coeffRef(this->srcCoeff(index));
749 if (this->m_is_identity) {
750 this->m_impl.template writePacket<StoreMode>(index,
x);
755 Index inputIndices[] = {0, 0};
759 for (
int i = NumDims - 1;
i > 0; --
i) {
760 const Index idx0 =
indices[0] / this->m_fastOutputStrides[
i];
761 const Index idx1 =
indices[1] / this->m_fastOutputStrides[
i];
762 inputIndices[0] += (idx0 + this->m_offsets[
i]) * this->m_inputStrides[
i];
763 inputIndices[1] += (idx1 + this->m_offsets[
i]) * this->m_inputStrides[
i];
764 indices[0] -= idx0 * this->m_outputStrides[
i];
765 indices[1] -= idx1 * this->m_outputStrides[
i];
767 inputIndices[0] += (
indices[0] + this->m_offsets[0]);
768 inputIndices[1] += (
indices[1] + this->m_offsets[0]);
771 for (
int i = 0;
i < NumDims - 1; ++
i) {
772 const Index idx0 =
indices[0] / this->m_fastOutputStrides[
i];
773 const Index idx1 =
indices[1] / this->m_fastOutputStrides[
i];
774 inputIndices[0] += (idx0 + this->m_offsets[
i]) * this->m_inputStrides[
i];
775 inputIndices[1] += (idx1 + this->m_offsets[
i]) * this->m_inputStrides[
i];
776 indices[0] -= idx0 * this->m_outputStrides[
i];
777 indices[1] -= idx1 * this->m_outputStrides[
i];
779 inputIndices[0] += (
indices[0] + this->m_offsets[NumDims-1]);
780 inputIndices[1] += (
indices[1] + this->m_offsets[NumDims-1]);
782 if (inputIndices[1] - inputIndices[0] == packetSize - 1) {
783 this->m_impl.template writePacket<StoreMode>(inputIndices[0],
x);
787 internal::pstore<CoeffReturnType, PacketReturnType>(
values,
x);
788 this->m_impl.coeffRef(inputIndices[0]) =
values[0];
789 this->m_impl.coeffRef(inputIndices[1]) =
values[packetSize-1];
791 for (
int i = 1;
i < packetSize-1; ++
i) {
797 template<
typename TensorBlock>
801 this->m_impl.writeBlock(arg_desc,
block);
806 template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
816 static const int Layout = XprTraits::Layout;
820 template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
826 template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
835 template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename XprType>
873 template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename ArgType,
typename Device>
902 : m_impl(op.expression(), device),
910 if (m_strides[
i] > 0) {
911 startIndicesClamped[
i] =
913 stopIndicesClamped[
i] =
917 startIndicesClamped[
i] =
919 stopIndicesClamped[
i] =
922 m_startIndices[
i] = startIndicesClamped[
i];
926 const InputDimensions& input_dims = m_impl.
dimensions();
929 m_is_identity =
true;
930 for (
int i = 0;
i < NumDims;
i++) {
931 Index interval = stopIndicesClamped[
i] - startIndicesClamped[
i];
932 if (interval == 0 || ((interval < 0) != (m_strides[
i] < 0))) {
936 (interval / m_strides[
i]) + (interval % m_strides[
i] != 0 ? 1 : 0);
939 if (m_strides[
i] != 1 || interval != m_impl.dimensions()[
i]) {
940 m_is_identity =
false;
944 Strides output_dims = m_dimensions;
947 m_inputStrides[0] = m_strides[0];
948 m_offsets[0] = startIndicesClamped[0];
949 Index previousDimProduct = 1;
950 for (
int i = 1;
i < NumDims; ++
i) {
951 previousDimProduct *= input_dims[
i-1];
952 m_inputStrides[
i] = previousDimProduct * m_strides[
i];
953 m_offsets[
i] = startIndicesClamped[
i] * previousDimProduct;
957 m_outputStrides[0] = 1;
958 for (
int i = 1;
i < NumDims; ++
i) {
959 m_outputStrides[
i] = m_outputStrides[
i-1] * output_dims[
i-1];
963 m_inputStrides[NumDims-1] = m_strides[NumDims-1];
964 m_offsets[NumDims-1] = startIndicesClamped[NumDims-1];
965 Index previousDimProduct = 1;
966 for (
int i = NumDims - 2;
i >= 0; --
i) {
967 previousDimProduct *= input_dims[
i+1];
968 m_inputStrides[
i] = previousDimProduct * m_strides[
i];
969 m_offsets[
i] = startIndicesClamped[
i] * previousDimProduct;
972 m_outputStrides[NumDims-1] = 1;
973 for (
int i = NumDims - 2;
i >= 0; --
i) {
974 m_outputStrides[
i] = m_outputStrides[
i+1] * output_dims[
i+1];
984 m_impl.evalSubExprsIfNeeded(
NULL);
995 return m_impl.coeff(index);
997 return m_impl.coeff(srcCoeff(index));
1002 return m_impl.costPerCoeff(vectorized) +
TensorOpCost(0, 0, m_is_identity ? 1 : NumDims);
1008 #ifdef EIGEN_USE_SYCL
1017 Index inputIndex = 0;
1020 for (
int i = NumDims - 1;
i >= 0; --
i) {
1021 const Index idx = index / m_fastOutputStrides[
i];
1022 inputIndex += idx * m_inputStrides[
i] + m_offsets[
i];
1023 index -= idx * m_outputStrides[
i];
1027 for (
int i = 0;
i < NumDims; ++
i) {
1028 const Index idx = index / m_fastOutputStrides[
i];
1029 inputIndex += idx * m_inputStrides[
i] + m_offsets[
i];
1030 index -= idx * m_outputStrides[
i];
1037 #ifndef SYCL_DEVICE_ONLY
1057 template<
typename StartIndices,
typename StopIndices,
typename Str
ides,
typename ArgType,
typename Device>
1059 :
public TensorEvaluator<const TensorStridingSlicingOp<StartIndices, StopIndices, Strides, ArgType>, Device>
1091 if (this->m_is_identity) {
1092 return this->m_impl.coeffRef(index);
1094 return this->m_impl.coeffRef(this->srcCoeff(index));
1102 #endif // EIGEN_CXX11_TENSOR_TENSOR_MORPHING_H
EIGEN_DEVICE_FUNC const EIGEN_STRONG_INLINE Dimensions & dimensions() const
Eigen::internal::traits< TensorSlicingOp >::StorageKind StorageKind
#define EIGEN_DEVICE_FUNC
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writePacket(Index index, const PacketReturnType &x)
EIGEN_STRONG_INLINE void cleanup()
Namespace containing all symbols from the Eigen library.
static EIGEN_STRONG_INLINE TensorMaterializedBlock materialize(const Scalar *data, const DataDimensions &data_dims, TensorBlockDesc &desc, TensorBlockScratch &scratch)
Eigen::internal::traits< TensorReshapingOp >::Index Index
const EIGEN_DEVICE_FUNC internal::remove_all< typename XprType::Nested >::type & expression() const
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
Eigen::internal::traits< TensorSlicingOp >::Scalar Scalar
CleanedUpDerType< DerType >::type() max(const AutoDiffScalar< DerType > &x, const T &y)
EIGEN_ALWAYS_INLINE DSizes< IndexType, NumDims > strides(const DSizes< IndexType, NumDims > &dimensions)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
TensorReshapingOp< NewDimensions, ArgType > XprType
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
EIGEN_STRONG_INLINE void cleanup()
Generic expression where a coefficient-wise binary operator is applied to two expressions.
array< Index, NumDims > m_inputStrides
TensorEvaluator< const TensorSlicingOp< StartIndices, Sizes, ArgType >, Device > Base
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType data)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
internal::remove_const< Scalar >::type ScalarNoConst
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
array< Index, NumDims > m_inputStrides
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
internal::TensorMaterializedBlock< ScalarNoConst, NumCoords, Layout, Index > TensorBlock
XprTraits::StorageKind StorageKind
StorageMemory< CoeffReturnType, Device > Storage
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
const StartIndices m_indices
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const
TensorEvaluator< const ArgType, Device >::TensorBlock TensorBlock
XprTraits::PointerType PointerType
std::vector< Array2i > sizes
TensorEvaluator< ArgType, Device > m_impl
XprType::CoeffReturnType CoeffReturnType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Storage::Type data() const
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > type
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements merge(const TensorBlockResourceRequirements &lhs, const TensorBlockResourceRequirements &rhs)
const EIGEN_DEVICE_FUNC NewDimensions & dimensions() const
Eigen::internal::nested< TensorSlicingOp >::type Nested
remove_reference< Nested >::type _Nested
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorStridingSlicingOp(const XprType &expr, const StartIndices &startIndices, const StopIndices &stopIndices, const Strides &strides)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorReshapingOp(const XprType &expr, const NewDimensions &dims)
XprTraits::PointerType PointerType
internal::traits< TensorStridingSlicingOp >::StorageKind StorageKind
const StopIndices m_stopIndices
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
array< internal::TensorIntDivisor< Index >, NumDims > m_fastOutputStrides
const EIGEN_DEVICE_FUNC internal::remove_all< typename XprType::Nested >::type & expression() const
XprTraits::PointerType PointerType
StorageMemory< CoeffReturnType, Device > Storage
Eigen::internal::traits< TensorReshapingOp >::StorageKind StorageKind
const EIGEN_DEVICE_FUNC internal::remove_all< typename XprType::Nested >::type & expression() const
traits< XprType > XprTraits
PacketType< CoeffReturnType, Device >::type PacketReturnType
const EIGEN_DEVICE_FUNC StartIndices & strides() const
const EIGEN_DEVICE_FUNC StartIndices & startIndices() const
TensorStridingSlicingOp< StartIndices, StopIndices, Strides, ArgType > XprType
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
const Device EIGEN_DEVICE_REF m_device
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
EIGEN_DEVICE_FUNC const EIGEN_STRONG_INLINE Dimensions & dimensions() const
XprType::CoeffReturnType CoeffReturnType
Eigen::IndexList< Index, Eigen::type2index< 1 > > NByOne(Index n)
PacketType< CoeffReturnType, Device >::type PacketReturnType
remove_reference< Nested >::type _Nested
const StartIndices m_offsets
internal::remove_const< typename XprType::CoeffReturnType >::type CoeffReturnType
internal::traits< TensorStridingSlicingOp >::Index Index
const EIGEN_DEVICE_FUNC TensorEvaluator< ArgType, Device > & impl() const
EIGEN_STRONG_INLINE void cleanup()
XprType::CoeffReturnType CoeffReturnType
internal::TensorBlockDescriptor< NumDims, Index > TensorBlockDesc
const typedef TensorReshapingOp< NewDimensions, XprType > EIGEN_DEVICE_REF type
internal::enable_if< internal::valid_indexed_view_overload< RowIndices, ColIndices >::value &&internal::traits< typename EIGEN_INDEXED_VIEW_METHOD_TYPE< RowIndices, ColIndices >::type >::ReturnAsIndexedView, typename EIGEN_INDEXED_VIEW_METHOD_TYPE< RowIndices, ColIndices >::type >::type operator()(const RowIndices &rowIndices, const ColIndices &colIndices) EIGEN_INDEXED_VIEW_METHOD_CONST
Eigen::internal::traits< TensorSlicingOp >::Index Index
TensorEvaluator< const TensorStridingSlicingOp< StartIndices, StopIndices, Strides, ArgType >, Device > Base
TensorBase< TensorSlicingOp< StartIndices, Sizes, XprType > > Base
XprTraits::StorageKind StorageKind
internal::TensorBlockScratchAllocator< Device > TensorBlockScratch
EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType data)
EIGEN_DEVICE_FUNC EvaluatorPointerType data() const
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
TensorBase< TensorReshapingOp< NewDimensions, XprType >, WriteAccessors > Base
internal::remove_const< Scalar >::type ScalarNoConst
internal::TensorMaterializedBlock< ScalarNoConst, NumOutputDims, Layout, Index > TensorBlock
XprType::CoeffReturnType CoeffReturnType
#define EIGEN_STRONG_INLINE
#define EIGEN_UNROLL_LOOP
traits< XprType > XprTraits
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
TensorReshapingOp< NewDimensions, XprType > type
Storage::Type EvaluatorPointerType
array< Index, NumDims > m_outputStrides
internal::remove_const< Scalar >::type ScalarNoConst
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writeBlock(const TensorBlockDesc &desc, const TensorBlock &block)
StorageMemory< CoeffReturnType, Device > Storage
PacketType< CoeffReturnType, Device >::type PacketReturnType
const StartIndices m_startIndices
PacketType< CoeffReturnType, Device >::type PacketReturnType
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
internal::remove_const< Scalar >::type ScalarNoConst
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
internal::TensorBlockDescriptor< NumOutputDims, Index > TensorBlockDesc
XprType::CoeffReturnType CoeffReturnType
const Device EIGEN_DEVICE_REF m_device
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index srcCoeff(Index index) const
internal::TensorBlockDescriptor< TensorEvaluator::NumOutputDims, Index > TensorBlockDesc
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes< Indices... > &)
const Device EIGEN_DEVICE_REF m_device
Storage::Type EvaluatorPointerType
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate offset
TensorSlicingOp< StartIndices, Sizes, ArgType > XprType
const EIGEN_DEVICE_FUNC StartIndices & startIndices() const
XprType::CoeffReturnType CoeffReturnType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType & coeffRef(Index index)
EIGEN_DEVICE_FUNC const EIGEN_STRONG_INLINE Dimensions & dimensions() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
const EIGEN_DEVICE_FUNC StartIndices & stopIndices() const
bool HasDestinationBuffer() const
DSizes< Index, NumDims > m_dimensions
#define EIGEN_TENSOR_INHERIT_ASSIGNMENT_OPERATORS(Derived)
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
DSizes< Index, NumDims > m_offsets
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
const typedef TensorSlicingOp< StartIndices, Sizes, XprType > EIGEN_DEVICE_REF type
XprType::CoeffReturnType CoeffReturnType
Storage::Type EvaluatorPointerType
Storage::Type EvaluatorPointerType
traits< XprType > XprTraits
StorageMemory< typename internal::remove_const< CoeffReturnType >::type, Device > ConstCastStorage
internal::TensorBlockNotImplemented TensorBlock
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::TensorBlockResourceRequirements getResourceRequirements() const
DSizes< Index, NumDims > m_startIndices
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const
TensorEvaluator< const TensorReshapingOp< NewDimensions, ArgType >, Device > Base
PacketType< CoeffReturnType, Device >::type PacketReturnType
TensorSlicingOp< StartIndices, Sizes, XprType > type
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index srcCoeff(Index index) const
const EIGEN_DEVICE_FUNC Sizes & sizes() const
EIGEN_DEVICE_FUNC const EIGEN_STRONG_INLINE Dimensions & dimensions() const
A cost model used to limit the number of threads used for evaluating tensor expression.
Eigen::internal::nested< TensorReshapingOp >::type Nested
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writeBlock(const TensorBlockDesc &desc, const TensorBlock &block)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorSlicingOp(const XprType &expr, const StartIndices &indices, const Sizes &sizes)
TensorBase< TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > > Base
const XprType & expr() const
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
internal::traits< TensorStridingSlicingOp >::Scalar Scalar
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
CleanedUpDerType< DerType >::type() min(const AutoDiffScalar< DerType > &x, const T &y)
TensorEvaluator< ArgType, Device > m_impl
const NewDimensions m_dims
TensorSlicingOp< StartIndices, Sizes, ArgType > XprType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writePacket(Index index, const PacketReturnType &x)
TensorEvaluator< ArgType, Device > m_impl
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock block(TensorBlockDesc &desc, TensorBlockScratch &scratch, bool=false) const
array< Index, NumDims > m_outputStrides
internal::TensorBlockNotImplemented TensorBlock
array< internal::TensorIntDivisor< Index >, NumDims > m_fastOutputStrides
NewDimensions m_dimensions
const typedef TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > EIGEN_DEVICE_REF type
XprType::CoeffReturnType CoeffReturnType
TensorReshapingOp< NewDimensions, ArgType > XprType
XprTraits::StorageKind StorageKind
PacketType< CoeffReturnType, Device >::type PacketReturnType
EIGEN_DEVICE_FUNC Storage::Type data() const
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T * constCast(const T *data)
Eigen::internal::traits< TensorReshapingOp >::Scalar Scalar
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index clamp(Index value, Index min, Index max)
EIGEN_STRONG_INLINE TensorEvaluator(const XprType &op, const Device &device)
StorageMemory< typename internal::remove_const< CoeffReturnType >::type, Device > ConstCastStorage
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlockResourceRequirements any()
TensorStridingSlicingOp< StartIndices, StopIndices, Strides, ArgType > XprType
internal::nested< TensorStridingSlicingOp >::type Nested
remove_reference< Nested >::type _Nested
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Storage::Type data() const
gtsam
Author(s):
autogenerated on Sat Nov 16 2024 04:06:19