Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions include/awkward/Content.h
Original file line number Diff line number Diff line change
Expand Up @@ -1319,6 +1319,32 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const = 0;

/// @brief Internal function that propagates a jagged array (array with
/// irregular-length dimensions) slice through one axis.
///
/// See generic #getitem_next_jagged for details.
virtual const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const = 0;

/// @brief Internal function that propagates a generic #getitem request
/// through one axis (including advanced indexing).
///
/// See generic #getitem_next for details.
virtual const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const = 0;

/// @brief Internal function to convert a SliceVarNewAxis into the
/// right-sized SliceJagged64 for a given Content.
///
/// See generic #getitem_next_jagged for details.
virtual const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const = 0;

/// @brief Internal function defining the negative axis handling for many
/// operations.
///
Expand Down
39 changes: 39 additions & 0 deletions include/awkward/Slice.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ namespace awkward {
virtual const SliceItemPtr
shallow_copy() const = 0;

/// @brief For SliceVarNewAxis to spread the slice in a way similar to
/// Content::carry.
virtual const SliceItemPtr
carry(const Index64& carry) const;

/// @brief Returns a string representation of this slice item (single-line
/// custom format).
virtual const std::string
Expand Down Expand Up @@ -295,6 +300,9 @@ namespace awkward {
const SliceItemPtr
shallow_copy() const override;

const SliceItemPtr
carry(const Index64& carry) const override;

const std::string
tostring() const override;

Expand Down Expand Up @@ -468,6 +476,9 @@ namespace awkward {
const SliceItemPtr
shallow_copy() const override;

const SliceItemPtr
carry(const Index64& carry) const override;

const std::string
tostring() const override;

Expand Down Expand Up @@ -548,6 +559,9 @@ namespace awkward {
const SliceItemPtr
shallow_copy() const override;

const SliceItemPtr
carry(const Index64& carry) const override;

const std::string
tostring() const override;

Expand Down Expand Up @@ -716,6 +730,31 @@ namespace awkward {
bool sealed_;
};

class LIBAWKWARD_EXPORT_SYMBOL SliceVarNewAxis: public SliceItem {
public:
SliceVarNewAxis(const SliceItemPtr& content);

const SliceItemPtr
content() const;

const SliceItemPtr
shallow_copy() const override;

const SliceItemPtr
carry(const Index64& carry) const override;

const std::string
tostring() const override;

bool
preserves_type(const Index64& advanced) const override;

virtual bool
referentially_equal(const SliceItemPtr& other) const override;

private:
const SliceItemPtr content_;
};
}

#endif // AWKWARD_SLICE_H_
14 changes: 14 additions & 0 deletions include/awkward/array/BitMaskedArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/ByteMaskedArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/EmptyArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/IndexedArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/ListArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/ListOffsetArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
15 changes: 15 additions & 0 deletions include/awkward/array/None.h
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,21 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

/// @exception std::runtime_error is always thrown
const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/NumpyArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,14 @@ namespace awkward {
const Slice& tail,
const Index64& advanced) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

/// @brief An utility function to create a new instance of NumpyArray on the
/// GPU identical to this one.
const ContentPtr
Expand Down Expand Up @@ -765,6 +773,12 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

/// @brief Internal function to fill JSON with boolean values.
void
tojson_boolean(ToJson& builder, bool include_beginendlist) const;
Expand Down
26 changes: 26 additions & 0 deletions include/awkward/array/RawArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -1292,6 +1292,32 @@ namespace awkward {
+ FILENAME(__LINE__));
}

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override {
throw std::runtime_error(
std::string("undefined operation: RawArray::getitem_next_jagged(varnewaxis)")
+ FILENAME(__LINE__));
}

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override {
throw std::runtime_error(
std::string("undefined operation: RawArray::getitem_next(varnewaxis)")
+ FILENAME(__LINE__));
}

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override {
throw std::runtime_error(
std::string("undefined operation: RawArray::varaxis_to_jagged(varnewaxis)")
+ FILENAME(__LINE__));
}

const ContentPtr
copy_to(kernel::lib ptr_lib) const override {
if (ptr_lib == ptr_lib_) {
Expand Down
15 changes: 15 additions & 0 deletions include/awkward/array/Record.h
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,21 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

/// @exception std::runtime_error is always thrown
const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/RecordArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
14 changes: 14 additions & 0 deletions include/awkward/array/RegularArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,20 @@ namespace awkward {
const SliceJagged64& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next_jagged(const Index64& slicestarts,
const Index64& slicestops,
const SliceVarNewAxis& slicecontent,
const Slice& tail) const override;

const ContentPtr
getitem_next(const SliceVarNewAxis& varnewaxis,
const Slice& tail,
const Index64& advanced) const override;

const SliceJagged64
varaxis_to_jagged(const SliceVarNewAxis& varnewaxis) const override;

const ContentPtr
copy_to(kernel::lib ptr_lib) const override;

Expand Down
Loading