From cffea9cd7a7a6cd54f4f4cf0a5f1103bf1c50ac1 Mon Sep 17 00:00:00 2001 From: Bita Hasheminezhad Date: Thu, 18 Jul 2019 15:51:37 -0500 Subject: [PATCH 1/3] Modifying assertion condition in the index function of DynamicArray --- blaze_tensor/math/dense/DynamicArray.h | 2 +- blaze_tensor/math/views/QuatSlice.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/blaze_tensor/math/dense/DynamicArray.h b/blaze_tensor/math/dense/DynamicArray.h index 02fd2ff..4a94ae8 100644 --- a/blaze_tensor/math/dense/DynamicArray.h +++ b/blaze_tensor/math/dense/DynamicArray.h @@ -2506,7 +2506,7 @@ inline size_t DynamicArray::index( Dims... dims ) const noexcept size_t idx = 0UL; for( size_t i = N - 1; i > 1; --i ) { - BLAZE_USER_ASSERT(indices[N - i] < dims_[i], "Invalid access index" ); + BLAZE_USER_ASSERT(indices[N - i - 1] < dims_[i], "Invalid access index" ); idx = (idx + indices[N - i - 1]) * dims_[i - 1]; } diff --git a/blaze_tensor/math/views/QuatSlice.h b/blaze_tensor/math/views/QuatSlice.h index 69645a7..4e565a1 100644 --- a/blaze_tensor/math/views/QuatSlice.h +++ b/blaze_tensor/math/views/QuatSlice.h @@ -1223,7 +1223,7 @@ inline bool tryAssign( const QuatSlice& lhs, BLAZE_INTERNAL_ASSERT( j <= lhs.columns(), "Invalid column access index" ); BLAZE_INTERNAL_ASSERT( j + (~rhs).columns() <= lhs.columns(), "Invalid columns range size" ); - return tryAssign( lhs.operand(), ~rhs, lhs.quat(), k, i, j ); + return true; } /*! \endcond */ //************************************************************************************************* @@ -1257,7 +1257,7 @@ inline bool tryAddAssign( const QuatSlice& lhs, BLAZE_INTERNAL_ASSERT( j <= lhs.columns(), "Invalid column access index" ); BLAZE_INTERNAL_ASSERT( j + (~rhs).columns() <= lhs.columns(), "Invalid columns range size" ); - return tryAddAssign( lhs.operand(), ~rhs, lhs.quat(), k, i, j ); + return true; } /*! \endcond */ //************************************************************************************************* @@ -1291,7 +1291,7 @@ inline bool trySubAssign( const QuatSlice& lhs, BLAZE_INTERNAL_ASSERT( j <= lhs.columns(), "Invalid column access index" ); BLAZE_INTERNAL_ASSERT( j + (~rhs).columns() <= lhs.columns(), "Invalid columns range size" ); - return trySubAssign( lhs.operand(), ~rhs, lhs.quat(), k, i, j ); + return true; } /*! \endcond */ //************************************************************************************************* @@ -1325,7 +1325,7 @@ inline bool tryMultAssign( const QuatSlice& lhs, BLAZE_INTERNAL_ASSERT( j <= lhs.columns(), "Invalid column access index" ); BLAZE_INTERNAL_ASSERT( j + (~rhs).columns() <= lhs.columns(), "Invalid columns range size" ); - return tryMultAssign( lhs.operand(), ~rhs, lhs.quat(), k, i, j ); + return true; } /*! \endcond */ //************************************************************************************************* @@ -1359,7 +1359,7 @@ inline bool tryDivAssign( const QuatSlice& lhs, BLAZE_INTERNAL_ASSERT( j <= lhs.columns(), "Invalid column access index" ); BLAZE_INTERNAL_ASSERT( j + (~rhs).columns() <= lhs.columns(), "Invalid columns range size" ); - return tryDivAssign( lhs.operand(), ~rhs, lhs.quat(), k, i, j ); + return true; } /*! \endcond */ //************************************************************************************************* From 3a4c45796c0f60414260cbcdc0aa2bf3b821cdfb Mon Sep 17 00:00:00 2001 From: Bita Hasheminezhad Date: Wed, 24 Jul 2019 14:03:50 -0500 Subject: [PATCH 2/3] Updating num_dimensions to a variable --- blaze_tensor/math/Array.h | 2 +- blaze_tensor/math/dense/CustomArray.h | 3 +- blaze_tensor/math/dense/CustomTensor.h | 1 - blaze_tensor/math/dense/DenseArray.h | 10 +++--- blaze_tensor/math/dense/DynamicArray.h | 5 ++- blaze_tensor/math/dense/DynamicTensor.h | 35 ++++++++++--------- .../math/expressions/DArrDArrEqualExpr.h | 2 +- .../math/expressions/DArrDArrMapExpr.h | 8 ++--- blaze_tensor/math/expressions/DArrMapExpr.h | 6 ++-- blaze_tensor/math/expressions/DArrNormExpr.h | 2 +- .../math/expressions/DArrReduceExpr.h | 8 ++--- .../math/expressions/DArrScalarDivExpr.h | 6 ++-- .../math/expressions/DArrScalarMultExpr.h | 6 ++-- 13 files changed, 47 insertions(+), 47 deletions(-) diff --git a/blaze_tensor/math/Array.h b/blaze_tensor/math/Array.h index bc7670b..2a354f8 100644 --- a/blaze_tensor/math/Array.h +++ b/blaze_tensor/math/Array.h @@ -140,7 +140,7 @@ inline std::ostream& operator<<( std::ostream& os, const Array& m ) ArrayForEachGrouped( tmp.dimensions(), - [&]( std::array< size_t, MT::num_dimensions() > const& dims ) { + [&]( std::array< size_t, MT::num_dimensions > const& dims ) { os << std::setw( 12 ) << tmp( dims ) << " "; }, [&]( size_t ) { os << "("; }, diff --git a/blaze_tensor/math/dense/CustomArray.h b/blaze_tensor/math/dense/CustomArray.h index 4373aa7..540cc76 100644 --- a/blaze_tensor/math/dense/CustomArray.h +++ b/blaze_tensor/math/dense/CustomArray.h @@ -414,6 +414,8 @@ class CustomArray static constexpr bool smpAssignable = !IsSMPAssignable_v; //********************************************************************************************** + static constexpr size_t num_dimensions = N; // Dimensionality of the array + //**Constructors******************************************************************************** /*!\name Constructors */ //@{ @@ -530,7 +532,6 @@ class CustomArray //**Utility functions*************************************************************************** /*!\name Utility functions */ //@{ - inline static constexpr size_t num_dimensions() noexcept { return N; } inline constexpr std::array< size_t, N > const& dimensions() const noexcept; inline size_t quats() const noexcept; inline size_t pages() const noexcept; diff --git a/blaze_tensor/math/dense/CustomTensor.h b/blaze_tensor/math/dense/CustomTensor.h index 696916d..8b6cad6 100644 --- a/blaze_tensor/math/dense/CustomTensor.h +++ b/blaze_tensor/math/dense/CustomTensor.h @@ -3010,7 +3010,6 @@ inline void swap( CustomTensor& a, CustomTensor& b - //================================================================================================= // // HASCONSTDATAACCESS SPECIALIZATIONS diff --git a/blaze_tensor/math/dense/DenseArray.h b/blaze_tensor/math/dense/DenseArray.h index f032366..28227a7 100644 --- a/blaze_tensor/math/dense/DenseArray.h +++ b/blaze_tensor/math/dense/DenseArray.h @@ -136,7 +136,7 @@ inline auto operator==( const DenseArray& arr, T2 scalar ) using CT1 = CompositeType_t; constexpr size_t N = - RemoveCV_t< RemoveReference_t< decltype( ~arr ) > >::num_dimensions(); + RemoveCV_t< RemoveReference_t< decltype( ~arr ) > >::num_dimensions; // Evaluation of the dense array operand CT1 A( ~arr ); @@ -237,7 +237,7 @@ inline auto operator*=( DenseArray& arr, ST scalar ) { if( IsRestricted_v ) { constexpr size_t N = - RemoveCV_t< RemoveReference_t< decltype( ~arr ) > >::num_dimensions(); + RemoveCV_t< RemoveReference_t< decltype( ~arr ) > >::num_dimensions; std::array< size_t, N > dims{}; if( !tryMult( ~arr, dims, (~arr).dimensions(), scalar ) ) { @@ -305,7 +305,7 @@ inline auto operator/=( DenseArray& arr, ST scalar ) if( IsRestricted_v ) { constexpr size_t N = - RemoveCV_t< RemoveReference_t< decltype( ~arr ) > >::num_dimensions(); + RemoveCV_t< RemoveReference_t< decltype( ~arr ) > >::num_dimensions; std::array< size_t, N > dims{}; if( !tryDiv( ~arr, dims, (~arr).dimensions(), scalar ) ) { @@ -428,7 +428,7 @@ bool isnan( const DenseArray& dm ) using CT = CompositeType_t; constexpr size_t N = - RemoveCV_t< RemoveReference_t< decltype( ~dm ) > >::num_dimensions(); + RemoveCV_t< RemoveReference_t< decltype( ~dm ) > >::num_dimensions; CT A( ~dm ); // Evaluation of the dense array operand @@ -482,7 +482,7 @@ bool isUniform_backend( const DenseArray& dm ) #endif constexpr size_t N = - RemoveCV_t< RemoveReference_t< decltype( ~dm ) > >::num_dimensions(); + RemoveCV_t< RemoveReference_t< decltype( ~dm ) > >::num_dimensions; std::array< size_t, N > dims{}; const auto& cmp( (~dm)( dims ) ); diff --git a/blaze_tensor/math/dense/DynamicArray.h b/blaze_tensor/math/dense/DynamicArray.h index 4a94ae8..c1d6850 100644 --- a/blaze_tensor/math/dense/DynamicArray.h +++ b/blaze_tensor/math/dense/DynamicArray.h @@ -60,7 +60,7 @@ #include #include -#include +//#include #include #include #include @@ -68,7 +68,6 @@ #include #include #include -//#include #include #include #include @@ -2506,7 +2505,7 @@ inline size_t DynamicArray::index( Dims... dims ) const noexcept size_t idx = 0UL; for( size_t i = N - 1; i > 1; --i ) { - BLAZE_USER_ASSERT(indices[N - i - 1] < dims_[i], "Invalid access index" ); + BLAZE_USER_ASSERT(indices[N - i] < dims_[i], "Invalid access index" ); idx = (idx + indices[N - i - 1]) * dims_[i - 1]; } diff --git a/blaze_tensor/math/dense/DynamicTensor.h b/blaze_tensor/math/dense/DynamicTensor.h index d575f1c..581afce 100644 --- a/blaze_tensor/math/dense/DynamicTensor.h +++ b/blaze_tensor/math/dense/DynamicTensor.h @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -3511,25 +3512,25 @@ struct PageSliceTraitEval2< //************************************************************************************************* /*! \cond BLAZE_INTERNAL */ -//template -//struct QuatSliceTraitEval2< -// MT, M, -// EnableIf_t< IsDenseArray_v && -// ( Size_v< MT,1UL > == DefaultSize_v || -// Size_v< MT,2UL > == DefaultSize_v || -// Size_v< MT,3UL > == DefaultSize_v ) && -// ( MaxSize_v< MT,1UL > == DefaultMaxSize_v || -// MaxSize_v< MT,2UL > == DefaultMaxSize_v || -// MaxSize_v< MT,3UL > == DefaultMaxSize_v ) > > -//{ -// using Type = DynamicTensor< RemoveConst_t< ElementType_t > >; -//}; - -template< typename ET, size_t I > -struct QuatSliceTraitEval2< DynamicArray<4, ET>, I > +template +struct QuatSliceTraitEval2< + MT, I, + EnableIf_t< IsDenseArray_v && MT::num_dimensions == 4 && + ( Size_v< MT,1UL > == DefaultSize_v || + Size_v< MT,2UL > == DefaultSize_v || + Size_v< MT,3UL > == DefaultSize_v ) && + ( MaxSize_v< MT,1UL > == DefaultMaxSize_v || + MaxSize_v< MT,2UL > == DefaultMaxSize_v || + MaxSize_v< MT,3UL > == DefaultMaxSize_v ) > > { - using Type = DynamicTensor< ET >; + using Type = DynamicTensor< RemoveConst_t< ElementType_t > >; }; + +//template< typename ET, size_t I > +//struct QuatSliceTraitEval2< DynamicArray<4, ET>, I > +//{ +// using Type = DynamicTensor< ET >; +//}; /*! \endcond */ //************************************************************************************************* diff --git a/blaze_tensor/math/expressions/DArrDArrEqualExpr.h b/blaze_tensor/math/expressions/DArrDArrEqualExpr.h index b2b644e..4d0ba9f 100644 --- a/blaze_tensor/math/expressions/DArrDArrEqualExpr.h +++ b/blaze_tensor/math/expressions/DArrDArrEqualExpr.h @@ -118,7 +118,7 @@ inline bool //DisableIf_t< DArrDArrEqualExprHelper::value, bool > return false; } - constexpr size_t N = MT1::num_dimensions(); + constexpr size_t N = MT1::num_dimensions; // Evaluation of the two dense array operands CT1 A( ~lhs ); diff --git a/blaze_tensor/math/expressions/DArrDArrMapExpr.h b/blaze_tensor/math/expressions/DArrDArrMapExpr.h index bed9a27..767f5b5 100644 --- a/blaze_tensor/math/expressions/DArrDArrMapExpr.h +++ b/blaze_tensor/math/expressions/DArrDArrMapExpr.h @@ -513,10 +513,10 @@ class DArrDArrMapExpr // // \return The number of rows of the array. */ - inline static constexpr size_t num_dimensions() noexcept { - return RemoveCV_t>::num_dimensions(); - } - //********************************************************************************************** + static constexpr size_t num_dimensions = + RemoveCV_t>::num_dimensions; + + //********************************************************************************************** //**Dimensions function**************************************************************************** /*!\brief Returns the current dimensions of the array. diff --git a/blaze_tensor/math/expressions/DArrMapExpr.h b/blaze_tensor/math/expressions/DArrMapExpr.h index 977a12b..74d53f9 100644 --- a/blaze_tensor/math/expressions/DArrMapExpr.h +++ b/blaze_tensor/math/expressions/DArrMapExpr.h @@ -482,9 +482,9 @@ class DArrMapExpr // // \return The number of rows of the array. */ - inline static constexpr size_t num_dimensions() noexcept { - return RemoveCV_t>::num_dimensions(); - } + static constexpr size_t num_dimensions = + RemoveCV_t< RemoveReference_t< Operand > >::num_dimensions; + //********************************************************************************************** //**Dimensions function**************************************************************************** diff --git a/blaze_tensor/math/expressions/DArrNormExpr.h b/blaze_tensor/math/expressions/DArrNormExpr.h index a1469e5..e5f17db 100644 --- a/blaze_tensor/math/expressions/DArrNormExpr.h +++ b/blaze_tensor/math/expressions/DArrNormExpr.h @@ -177,7 +177,7 @@ decltype(auto) norm_backend( const DenseArray& dm, Abs abs, Power power, Roo BLAZE_INTERNAL_ASSERT( tmp.dimensions() == (~dm).dimensions(), "Invalid number of elements" ); using AT = RemoveCV_t >; - constexpr size_t N = AT::num_dimensions(); + constexpr size_t N = AT::num_dimensions; std::array< size_t, N > dims{}; ET norm( power( abs( tmp( dims ) ) ) ); diff --git a/blaze_tensor/math/expressions/DArrReduceExpr.h b/blaze_tensor/math/expressions/DArrReduceExpr.h index 2c9b0bc..d72f92f 100644 --- a/blaze_tensor/math/expressions/DArrReduceExpr.h +++ b/blaze_tensor/math/expressions/DArrReduceExpr.h @@ -489,9 +489,9 @@ class ReducedArray // // \return The size of the array. */ - inline static constexpr size_t num_dimensions() noexcept { - return RemoveCV_t>::num_dimensions(); - } + static constexpr size_t num_dimensions = + RemoveCV_t< RemoveReference_t< Operand > >::num_dimensions; + //********************************************************************************************** //**Dimensions function**************************************************************************** @@ -945,7 +945,7 @@ inline ElementType_t darrayreduce( const DenseArray& dm, OP op ) using ET = ElementType_t; constexpr size_t N = - RemoveCV_t< RemoveReference_t< decltype( ~dm ) > >::num_dimensions(); + RemoveCV_t< RemoveReference_t< decltype( ~dm ) > >::num_dimensions; std::array< size_t, N > dims{}; diff --git a/blaze_tensor/math/expressions/DArrScalarDivExpr.h b/blaze_tensor/math/expressions/DArrScalarDivExpr.h index ce368ea..b9a635f 100644 --- a/blaze_tensor/math/expressions/DArrScalarDivExpr.h +++ b/blaze_tensor/math/expressions/DArrScalarDivExpr.h @@ -480,9 +480,9 @@ class DArrScalarDivExpr // // \return The number of rows of the array. */ - inline static constexpr size_t num_dimensions() noexcept { - return RemoveCV_t>::num_dimensions(); - } + static constexpr size_t num_dimensions = + RemoveCV_t< RemoveReference_t< LeftOperand > >::num_dimensions; + //********************************************************************************************** //**Dimensions function**************************************************************************** diff --git a/blaze_tensor/math/expressions/DArrScalarMultExpr.h b/blaze_tensor/math/expressions/DArrScalarMultExpr.h index fcece02..557c5ae 100644 --- a/blaze_tensor/math/expressions/DArrScalarMultExpr.h +++ b/blaze_tensor/math/expressions/DArrScalarMultExpr.h @@ -480,9 +480,9 @@ class DArrScalarMultExpr // // \return The number of rows of the array. */ - inline static constexpr size_t num_dimensions() noexcept { - return RemoveCV_t>::num_dimensions(); - } + static constexpr size_t num_dimensions = + RemoveCV_t< RemoveReference_t< LeftOperand > >::num_dimensions; + //********************************************************************************************** //**Dimensions function**************************************************************************** From b1ecf040291ed27a6fb6af51b2cfa392b88b9890 Mon Sep 17 00:00:00 2001 From: Bita Hasheminezhad Date: Thu, 1 Aug 2019 14:42:53 -0500 Subject: [PATCH 3/3] modifying includes --- blaze_tensor/math/dense/CustomArray.h | 2 +- blaze_tensor/math/dense/DynamicArray.h | 5 ++++- blaze_tensor/math/dense/DynamicTensor.h | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/blaze_tensor/math/dense/CustomArray.h b/blaze_tensor/math/dense/CustomArray.h index 540cc76..76589de 100644 --- a/blaze_tensor/math/dense/CustomArray.h +++ b/blaze_tensor/math/dense/CustomArray.h @@ -46,9 +46,9 @@ #include #include +#include #include #include -#include #include #include #include diff --git a/blaze_tensor/math/dense/DynamicArray.h b/blaze_tensor/math/dense/DynamicArray.h index c1d6850..7b01eba 100644 --- a/blaze_tensor/math/dense/DynamicArray.h +++ b/blaze_tensor/math/dense/DynamicArray.h @@ -193,6 +193,10 @@ class DynamicArray (shared memory parallel) assignments (both on the left-hand and right-hand side of the assignment). */ static constexpr bool smpAssignable = !IsSMPAssignable_v; + + //********************************************************************************************** + + static constexpr size_t num_dimensions = N; // Dimensionality of the array //********************************************************************************************** //**Constructors******************************************************************************** @@ -311,7 +315,6 @@ class DynamicArray //**Utility functions*************************************************************************** /*!\name Utility functions */ //@{ - inline static constexpr size_t num_dimensions() noexcept { return N; } inline constexpr std::array< size_t, N > const& dimensions() const noexcept; inline size_t quats() const noexcept; inline size_t pages() const noexcept; diff --git a/blaze_tensor/math/dense/DynamicTensor.h b/blaze_tensor/math/dense/DynamicTensor.h index 581afce..2ce060c 100644 --- a/blaze_tensor/math/dense/DynamicTensor.h +++ b/blaze_tensor/math/dense/DynamicTensor.h @@ -47,7 +47,7 @@ #include #include #include -#include +//#include #include #include #include