28 #include "../ArrayOfArrays.hpp" 29 #include "../Macros.hpp" 30 #include "../limits.hpp" 31 #include "../output.hpp" 75 virtual std::string
repr()
const = 0;
82 virtual long long size()
const = 0;
90 virtual long long sizeOfArray(
long long arrayIndex )
const = 0;
98 virtual PyObject *
operator[](
long long arrayIndex ) = 0;
104 virtual std::type_index
valueType()
const = 0;
111 virtual void eraseArray(
long long arrayIndex ) = 0;
119 virtual void eraseFromArray(
long long arrayIndex,
long long valueIndex ) = 0;
128 virtual void insertArray(
long long arrayIndex,
void const * values,
long long numVals ) = 0;
139 long long valueIndex,
141 long long numVals ) = 0;
165 template<
typename T,
167 template<
typename >
class BUFFER_TYPE >
178 m_arrayOfArrays( arrayOfArrays )
187 if( accessLevel >= static_cast< int >( LvArray::python::PyModify::RESIZEABLE ) )
195 virtual std::string
repr() const final
override 196 {
return system::demangleType< ArrayOfArrays< T, INDEX_TYPE, BUFFER_TYPE > >(); }
199 virtual long long size() const final
override 200 {
return integerConversion< long long >( m_arrayOfArrays.size() ); }
203 virtual long long sizeOfArray(
long long arrayIndex )
const final override 205 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( arrayIndex );
206 return integerConversion< long long >( m_arrayOfArrays.sizeOfArray( convertedIndex ) );
210 virtual PyObject *
operator[](
long long arrayIndex )
final override 212 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( arrayIndex );
215 constexpr INDEX_TYPE strides = 1;
216 INDEX_TYPE
size = slice.size();
221 virtual std::type_index
valueType() const final
override 222 {
return std::type_index(
typeid( T ) ); }
225 virtual void eraseArray(
long long arrayIndex )
final override 227 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( arrayIndex );
228 m_arrayOfArrays.eraseArray( convertedIndex );
232 virtual void eraseFromArray(
long long arrayIndex,
long long valueIndex )
final override 234 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( arrayIndex );
235 INDEX_TYPE convertedBegin = integerConversion< INDEX_TYPE >( valueIndex );
236 m_arrayOfArrays.eraseFromArray( convertedIndex, convertedBegin );
240 virtual void insertArray(
long long arrayIndex,
void const * values,
long long numVals )
final override 242 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( arrayIndex );
243 T
const * begin =
static_cast< T
const *
>( values );
244 T
const * end = begin + numVals;
245 m_arrayOfArrays.insertArray( convertedIndex, begin, end );
250 long long valueIndex,
252 long long numVals )
final override 254 INDEX_TYPE convertedArray = integerConversion< INDEX_TYPE >( arrayIndex );
255 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( valueIndex );
256 T
const * begin =
static_cast< T
const *
>( values );
257 T
const * end = begin + numVals;
258 m_arrayOfArrays.insertIntoArray( convertedArray, convertedIndex, begin, end );
271 PyObject *
create( std::unique_ptr< internal::PyArrayOfArraysWrapperBase > && arrayOfArrays );
285 template<
typename T,
typename INDEX_TYPE,
template<
typename >
class BUFFER_TYPE >
286 std::enable_if_t< internal::canExportToNumpy< T >, PyObject * >
289 auto tmp = std::make_unique< internal::PyArrayOfArraysWrapper< T, INDEX_TYPE, BUFFER_TYPE > >( arrayOfArrays );
virtual void setAccessLevel(int accessLevel) final override
Set the access level for the ArrayOfArrays.
Definition: PyArrayOfArrays.hpp:185
std::enable_if_t< internal::canExportToNumpy< T >, PyObject *> create(T &value)
Create a NumPy 1D array of length 1 containing the scalar value.
Definition: numpyHelpers.hpp:147
PyModify
An enumeration of the various access policies for Python objects.
Definition: pythonHelpers.hpp:131
virtual int getAccessLevel() const
Return the access level for the ArrayOfArrays.
Definition: PyArrayOfArrays.hpp:62
virtual ~PyArrayOfArraysWrapperBase()=default
Default destructor.
This class serves to provide a sliced multidimensional interface to the family of LvArray classes...
Definition: ArraySlice.hpp:89
ArrayOfArrays< T, INDEX_TYPE, BUFFER_TYPE > & m_arrayOfArrays
The wrapped ArrayOfArrays.
Definition: PyArrayOfArrays.hpp:263
PyArrayOfArraysWrapper(ArrayOfArrays< T, INDEX_TYPE, BUFFER_TYPE > &arrayOfArrays)
Construct a new Python wrapper around arrayOfArrays.
Definition: PyArrayOfArrays.hpp:176
virtual long long size() const =0
Return the size of the array (number of sub-arrays).
virtual std::type_index valueType() const =0
Return the type of the values stored in the sub-arrays.
std::enable_if_t< internal::canExportToNumpy< T >, PyObject *> create(ArrayOfArrays< T, INDEX_TYPE, BUFFER_TYPE > &arrayOfArrays)
Create a Python object corresponding to arrayOfArrays.
Definition: PyArrayOfArrays.hpp:287
This class implements an array of arrays like object with contiguous storage.
Definition: ArrayOfArrays.hpp:33
virtual std::string repr() const final override
Return a string representing the underlying ArrayOfArrays type.
Definition: PyArrayOfArrays.hpp:195
virtual PyObject * operator[](long long arrayIndex) final override
Return a 1D numpy array representing the array at index arrayIndex.
Definition: PyArrayOfArrays.hpp:210
virtual std::string repr() const =0
Return a string representing the underlying ArrayOfArrays type.
virtual long long sizeOfArray(long long arrayIndex) const =0
Return the size of the array at index arrayIndex.
virtual void eraseArray(long long arrayIndex) final override
Erase the array at index arrayIndex.
Definition: PyArrayOfArrays.hpp:225
Forward declarations of Python Objects.
Provides a virtual Python wrapper around an ArrayOfArrays.
Definition: PyArrayOfArrays.hpp:49
virtual void eraseFromArray(long long arrayIndex, long long valueIndex)=0
Erase a value from an array.
virtual void setAccessLevel(int const accessLevel)=0
Set the access level for the ArrayOfArrays.
virtual void insertArray(long long arrayIndex, void const *values, long long numVals) final override
Insert a new array.
Definition: PyArrayOfArrays.hpp:240
virtual void insertIntoArray(long long arrayIndex, long long valueIndex, void const *values, long long numVals)=0
Insert new values into an existing array.
The top level namespace.
Definition: Array.hpp:24
virtual PyObject * operator[](long long arrayIndex)=0
Return a 1D numpy array representing the array at index arrayIndex.
Contains methods to help with conversion to python objects.
virtual void insertArray(long long arrayIndex, void const *values, long long numVals)=0
Insert a new array.
PyTypeObject * getPyArrayOfArraysType()
Return the Python type object for the ArrayOfArrays.
Provides a concrete implementation of PyArrayOfArraysWrapperBase.
Definition: PyArrayOfArrays.hpp:168
int m_accessLevel
access level for the ArrayOfArrays.
Definition: PyArrayOfArrays.hpp:153
virtual void insertIntoArray(long long arrayIndex, long long valueIndex, void const *values, long long numVals) final override
Insert new values into an existing array.
Definition: PyArrayOfArrays.hpp:249
virtual long long size() const final override
Return the size of the array (number of sub-arrays).
Definition: PyArrayOfArrays.hpp:199
virtual void eraseArray(long long arrayIndex)=0
Erase the array at index arrayIndex.
virtual void eraseFromArray(long long arrayIndex, long long valueIndex) final override
Erase a value from an array.
Definition: PyArrayOfArrays.hpp:232
PyArrayOfArraysWrapperBase()
Construct an empty PyArrayOfArraysWrapperBase.
Definition: PyArrayOfArrays.hpp:148
virtual std::type_index valueType() const final override
Return the type of the values stored in the sub-arrays.
Definition: PyArrayOfArrays.hpp:221
std::enable_if_t< internal::canExportToNumpy< T >, PyObject *> createNumPyArray(T *const data, bool const modify, int const ndim, INDEX_TYPE const *const dimsPtr, INDEX_TYPE const *const stridesPtr)
Return a NumPy ndarray view of data.
Definition: numpyHelpers.hpp:107
virtual long long sizeOfArray(long long arrayIndex) const final override
Return the size of the array at index arrayIndex.
Definition: PyArrayOfArrays.hpp:203