ByteMaskedArray.h
Go to the documentation of this file.
1 // BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE
2 
3 #ifndef AWKWARD_BYTEMASKEDARRAY_H_
4 #define AWKWARD_BYTEMASKEDARRAY_H_
5 
6 #include <string>
7 #include <memory>
8 #include <vector>
9 
10 #include "awkward/common.h"
11 #include "awkward/Slice.h"
12 #include "awkward/Index.h"
13 #include "awkward/Content.h"
14 
15 namespace awkward {
16  template <typename T, bool ISOPTION>
17  class IndexedArrayOf;
18 
23  public:
25  ByteMaskedForm(bool has_identities,
26  const util::Parameters& parameters,
27  const FormKey& form_key,
28  Index::Form mask,
29  const FormPtr& content,
30  bool valid_when);
31 
33  mask() const;
34 
35  const FormPtr
36  content() const;
37 
38  bool
39  valid_when() const;
40 
41  const TypePtr
42  type(const util::TypeStrs& typestrs) const override;
43 
44  void
45  tojson_part(ToJson& builder, bool verbose) const override;
46 
47  const FormPtr
48  shallow_copy() const override;
49 
50  const FormPtr
51  with_form_key(const FormKey& form_key) const override;
52 
53  const std::string
54  purelist_parameter(const std::string& key) const override;
55 
56  bool
57  purelist_isregular() const override;
58 
59  int64_t
60  purelist_depth() const override;
61 
62  bool
63  dimension_optiontype() const override;
64 
65  const std::pair<int64_t, int64_t>
66  minmax_depth() const override;
67 
68  const std::pair<bool, int64_t>
69  branch_depth() const override;
70 
71  int64_t
72  numfields() const override;
73 
74  int64_t
75  fieldindex(const std::string& key) const override;
76 
77  const std::string
78  key(int64_t fieldindex) const override;
79 
80  bool
81  haskey(const std::string& key) const override;
82 
83  const std::vector<std::string>
84  keys() const override;
85 
86  bool
87  istuple() const override;
88 
89  bool
90  equal(const FormPtr& other,
91  bool check_identities,
92  bool check_parameters,
93  bool check_form_key,
94  bool compatibility_check) const override;
95 
96  const FormPtr
97  getitem_field(const std::string& key) const override;
98 
99  const FormPtr
100  getitem_fields(const std::vector<std::string>& keys) const override;
101 
102  const FormPtr
103  simplify_optiontype() const;
104 
105  private:
106  Index::Form mask_;
107  const FormPtr content_;
108  bool valid_when_;
109  };
110 
118  public:
136  ByteMaskedArray(const IdentitiesPtr& identities,
137  const util::Parameters& parameters,
138  const Index8& mask,
139  const ContentPtr& content,
140  bool valid_when);
141 
148  const Index8
149  mask() const;
150 
153  const ContentPtr
154  content() const;
155 
160  bool
161  valid_when() const;
162 
165  const ContentPtr
166  project() const;
167 
172  const ContentPtr
173  project(const Index8& mask) const;
174 
178  const Index8
179  bytemask() const;
180 
186  const ContentPtr
187  simplify_optiontype() const;
188 
191  const std::shared_ptr<IndexedArrayOf<int64_t, true>>
192  toIndexedOptionArray64() const;
193 
195  const std::string
196  classname() const override;
197 
198  void
199  setidentities() override;
200 
201  void
202  setidentities(const IdentitiesPtr& identities) override;
203 
204  const TypePtr
205  type(const util::TypeStrs& typestrs) const override;
206 
207  const FormPtr
208  form(bool materialize) const override;
209 
211  kernels() const override;
212 
213  void
214  caches(std::vector<ArrayCachePtr>& out) const override;
215 
216  const std::string
217  tostring_part(const std::string& indent,
218  const std::string& pre,
219  const std::string& post) const override;
220 
221  void
222  tojson_part(ToJson& builder, bool include_beginendlist) const override;
223 
224  void
225  nbytes_part(std::map<size_t, int64_t>& largest) const override;
226 
230  int64_t
231  length() const override;
232 
233  const ContentPtr
234  shallow_copy() const override;
235 
236  const ContentPtr
237  deep_copy(bool copyarrays,
238  bool copyindexes,
239  bool copyidentities) const override;
240 
241  void
242  check_for_iteration() const override;
243 
244  const ContentPtr
245  getitem_nothing() const override;
246 
247  const ContentPtr
248  getitem_at(int64_t at) const override;
249 
250  const ContentPtr
251  getitem_at_nowrap(int64_t at) const override;
252 
253  const ContentPtr
254  getitem_range(int64_t start, int64_t stop) const override;
255 
256  const ContentPtr
257  getitem_range_nowrap(int64_t start, int64_t stop) const override;
258 
259  const ContentPtr
260  getitem_field(const std::string& key) const override;
261 
262  const ContentPtr
263  getitem_field(const std::string& key,
264  const Slice& only_fields) const override;
265 
266  const ContentPtr
267  getitem_fields(const std::vector<std::string>& keys) const override;
268 
269  const ContentPtr
270  getitem_fields(const std::vector<std::string>& keys,
271  const Slice& only_fields) const override;
272 
273  const ContentPtr
274  getitem_next(const SliceItemPtr& head,
275  const Slice& tail,
276  const Index64& advanced) const override;
277 
278  const ContentPtr
279  carry(const Index64& carry, bool allow_lazy) const override;
280 
281  int64_t
282  purelist_depth() const override;
283 
284  const std::pair<int64_t, int64_t>
285  minmax_depth() const override;
286 
287  const std::pair<bool, int64_t>
288  branch_depth() const override;
289 
290  int64_t
291  numfields() const override;
292 
293  int64_t
294  fieldindex(const std::string& key) const override;
295 
296  const std::string
297  key(int64_t fieldindex) const override;
298 
299  bool
300  haskey(const std::string& key) const override;
301 
302  const std::vector<std::string>
303  keys() const override;
304 
305  bool
306  istuple() const override;
307 
308  // operations
309  const std::string
310  validityerror(const std::string& path) const override;
311 
315  const ContentPtr
316  shallow_simplify() const override;
317 
318  const ContentPtr
319  num(int64_t axis, int64_t depth) const override;
320 
321  const std::pair<Index64, ContentPtr>
322  offsets_and_flattened(int64_t axis, int64_t depth) const override;
323 
324  bool
325  mergeable(const ContentPtr& other, bool mergebool) const override;
326 
327  bool
328  referentially_equal(const ContentPtr& other) const override;
329 
330  const ContentPtr
331  reverse_merge(const ContentPtr& other) const override;
332 
333  const ContentPtr
334  mergemany(const ContentPtrVec& others) const override;
335 
336  const SliceItemPtr
337  asslice() const override;
338 
339  const ContentPtr
340  fillna(const ContentPtr& value) const override;
341 
342  const ContentPtr
343  rpad(int64_t target, int64_t axis, int64_t depth) const override;
344 
345  const ContentPtr
346  rpad_and_clip(int64_t target,
347  int64_t axis,
348  int64_t depth) const override;
349 
350  const ContentPtr
351  reduce_next(const Reducer& reducer,
352  int64_t negaxis,
353  const Index64& starts,
354  const Index64& shifts,
355  const Index64& parents,
356  int64_t outlength,
357  bool mask,
358  bool keepdims) const override;
359 
360  const ContentPtr
361  sort_next(int64_t negaxis,
362  const Index64& starts,
363  const Index64& parents,
364  int64_t outlength,
365  bool ascending,
366  bool stable) const override;
367 
368  const ContentPtr
369  argsort_next(int64_t negaxis,
370  const Index64& starts,
371  const Index64& shifts,
372  const Index64& parents,
373  int64_t outlength,
374  bool ascending,
375  bool stable) const override;
376 
377  const ContentPtr
378  localindex(int64_t axis, int64_t depth) const override;
379 
380  const ContentPtr
381  combinations(int64_t n,
382  bool replacement,
383  const util::RecordLookupPtr& recordlookup,
384  const util::Parameters& parameters,
385  int64_t axis,
386  int64_t depth) const override;
387 
388  const ContentPtr
389  getitem_next(const SliceAt& at,
390  const Slice& tail,
391  const Index64& advanced) const override;
392 
393  const ContentPtr
394  getitem_next(const SliceRange& range,
395  const Slice& tail,
396  const Index64& advanced) const override;
397 
398  const ContentPtr
399  getitem_next(const SliceArray64& array,
400  const Slice& tail,
401  const Index64& advanced) const override;
402 
403  const ContentPtr
404  getitem_next(const SliceJagged64& jagged,
405  const Slice& tail,
406  const Index64& advanced) const override;
407 
408  const ContentPtr
409  getitem_next_jagged(const Index64& slicestarts,
410  const Index64& slicestops,
411  const SliceArray64& slicecontent,
412  const Slice& tail) const override;
413 
414  const ContentPtr
415  getitem_next_jagged(const Index64& slicestarts,
416  const Index64& slicestops,
417  const SliceMissing64& slicecontent,
418  const Slice& tail) const override;
419 
420  const ContentPtr
421  getitem_next_jagged(const Index64& slicestarts,
422  const Index64& slicestops,
423  const SliceJagged64& slicecontent,
424  const Slice& tail) const override;
425 
426  const ContentPtr
427  copy_to(kernel::lib ptr_lib) const override;
428 
429  const ContentPtr
430  numbers_to_type(const std::string& name) const override;
431 
433  bool
434  is_unique() const override;
435 
437  const ContentPtr
438  unique() const override;
439 
441  bool
442  is_subrange_equal(const Index64& start, const Index64& stop) const override;
443 
444  protected:
445  template <typename S>
446  const ContentPtr
447  getitem_next_jagged_generic(const Index64& slicestarts,
448  const Index64& slicestops,
449  const S& slicecontent,
450  const Slice& tail) const;
451 
452  const std::pair<Index64, Index64>
453  nextcarry_outindex(int64_t& numnull) const;
454 
455  private:
457  const Index8 mask_;
459  const ContentPtr content_;
461  const bool valid_when_;
462  };
463 
464 }
465 
466 #endif // AWKWARD_BYTEMASKEDARRAY_H_
Represents a Python slice object (usual syntax: array[start:stop:step]).
Definition: Slice.h:93
#define LIBAWKWARD_EXPORT_SYMBOL
Definition: common.h:45
const std::string key(const RecordLookupPtr &recordlookup, int64_t fieldindex, int64_t numfields)
Returns the key associated with a field index, given a RecordLookup and a number of fields...
Abstract superclass of all array node types (flat hierarchy). Any Content can be nested within any ot...
Definition: Content.h:276
Definition: json.h:19
Definition: BitMaskedArray.h:15
A contiguous, one-dimensional array of integers used to represent data structures, rather than numerical data in the arrays themselves.
Definition: Index.h:16
std::string name(Mapping a, V value)
Definition: datetime_util.h:39
Represents a SliceArrayOf, SliceMissingOf, or SliceJaggedOf with missing values: None (no equivalent ...
Definition: Slice.h:431
Abstract class for all reducer algorithms.
Definition: Reducer.h:20
ERROR combinations(kernel::lib ptr_lib, T *toindex, int64_t n, bool replacement, int64_t singlelen)
const std::vector< std::string > keys(const RecordLookupPtr &recordlookup, int64_t numfields)
Returns a given RecordLookup as keys or generate anonymous ones form a number of fields.
Form
Integer type of an Index, used by ListForm, IndexedForm, etc.
Definition: Index.h:34
std::shared_ptr< std::string > FormKey
Definition: Content.h:19
ERROR unique(kernel::lib ptr_lib, T *toptr, int64_t length, int64_t *tolength)
Represents an array of integers in a slice (possibly converted from an array of booleans).
Definition: Slice.h:225
std::map< std::string, std::string > Parameters
Definition: util.h:165
ERROR copy_to(kernel::lib to_lib, kernel::lib from_lib, void *to_ptr, void *from_ptr, int64_t bytelength)
Internal Function an array buffer from library FROM to library TO, usually between main memory and a ...
std::shared_ptr< Form > FormPtr
Definition: Content.h:18
int64_t fieldindex(const RecordLookupPtr &recordlookup, const std::string &key, int64_t numfields)
Returns the field index associated with a key, given a RecordLookup and a number of fields...
Represents an array of nested lists, where the content may be SliceArrayOf, SliceMissingOf, or SliceJaggedOf (no equivalent in NumPy).
Definition: Slice.h:511
std::vector< std::shared_ptr< Content > > ContentPtrVec
Definition: Content.h:16
Mapping::value_type::value_type value(Mapping a, const std::string &name)
Definition: datetime_util.h:49
A sequence of SliceItem objects representing a tuple passed to Python&#39;s __getitem__.
Definition: Slice.h:585
bool haskey(const RecordLookupPtr &recordlookup, const std::string &key, int64_t numfields)
Returns true if a RecordLookup has a given key; false otherwise.
std::shared_ptr< Type > TypePtr
Definition: Content.h:23
std::shared_ptr< RecordLookup > RecordLookupPtr
Definition: util.h:130
Represents an integer in a tuple of slices passed to __getitem__ in Python.
Definition: Slice.h:58
std::map< std::string, std::string > TypeStrs
Definition: util.h:215
Abstract superclass of all array node forms, which expresses the nesting structure without any large ...
Definition: Content.h:39
std::shared_ptr< Identities > IdentitiesPtr
Definition: Identities.h:16
std::shared_ptr< Content > ContentPtr
Definition: ArrayBuilder.h:16
Represents potentially missing data by overlaying a byte mask over its content.
Definition: ByteMaskedArray.h:117
std::shared_ptr< SliceItem > SliceItemPtr
Definition: Slice.h:15
lib
Definition: kernel-dispatch.h:20
Form describing ByteMaskedArray.
Definition: ByteMaskedArray.h:22