8 #include <cudf_test/column_utilities.hpp>
9 #include <cudf_test/default_stream.hpp>
14 #include <cudf/detail/concatenate.hpp>
15 #include <cudf/detail/iterator.cuh>
16 #include <cudf/detail/utilities/vector_factories.hpp>
24 #include <cudf/utilities/export.hpp>
31 #include <cuda/iterator>
32 #include <cuda/std/functional>
33 #include <thrust/copy.h>
34 #include <thrust/host_vector.h>
35 #include <thrust/iterator/transform_iterator.h>
42 namespace CUDF_EXPORT
cudf {
78 std::unique_ptr<cudf::column>
release() {
return std::move(wrapped); }
81 std::unique_ptr<cudf::column> wrapped{};
87 template <
typename From,
typename To>
97 template <
typename FromT = From,
99 std::enable_if_t<std::is_same_v<FromT, ToT>,
void>* =
nullptr>
114 typename FromT = From,
117 std::is_constructible_v<ToT, FromT>),
119 constexpr ToT
operator()(FromT element)
const
121 return static_cast<ToT
>(element);
133 typename FromT = From,
135 std::enable_if_t<std::is_integral_v<FromT> && cudf::is_timestamp<ToT>(),
void>* =
nullptr>
138 return ToT{
typename ToT::duration{element}};
152 template <
typename ElementTo,
153 typename ElementFrom,
154 typename InputIterator,
155 std::enable_if_t<not cudf::is_fixed_point<ElementTo>()>* =
nullptr>
158 static_assert(cudf::is_fixed_width<ElementTo>(),
"Unexpected non-fixed width type.");
159 auto transformer = fixed_width_type_converter<ElementFrom, ElementTo>{};
160 auto transform_begin = thrust::make_transform_iterator(begin, transformer);
162 auto const elements = thrust::host_vector<ElementTo>(transform_begin, transform_begin + size);
181 template <
typename ElementTo,
182 typename ElementFrom,
183 typename InputIterator,
184 std::enable_if_t<not cudf::is_fixed_point<ElementFrom>() and
186 rmm::device_buffer make_elements(InputIterator begin, InputIterator end)
188 using RepType =
typename ElementTo::rep;
189 auto transformer = fixed_width_type_converter<ElementFrom, RepType>{};
190 auto transform_begin = thrust::make_transform_iterator(begin, transformer);
192 auto const elements = thrust::host_vector<RepType>(transform_begin, transform_begin + size);
207 template <
typename ElementTo,
208 typename ElementFrom,
209 typename InputIterator,
210 std::enable_if_t<cudf::is_fixed_point<ElementFrom>() and
212 rmm::device_buffer make_elements(InputIterator begin, InputIterator end)
215 using RepType =
typename ElementTo::rep;
217 CUDF_EXPECTS(std::all_of(begin, end, [](ElementFrom v) {
return v.scale() == 0; }),
218 "Only zero-scale fixed-point values are supported");
220 auto to_rep = [](ElementTo fp) {
return fp.value(); };
221 auto transformer_begin = thrust::make_transform_iterator(begin, to_rep);
223 auto const elements = thrust::host_vector<RepType>(transformer_begin, transformer_begin + size);
242 template <
typename Val
idityIterator>
243 std::pair<std::vector<bitmask_type>,
cudf::size_type> make_null_mask_vector(ValidityIterator begin,
244 ValidityIterator end)
249 auto null_mask = std::vector<bitmask_type>(num_words, 0);
251 for (
auto i = 0; i < size; ++i) {
275 template <
typename Val
idityIterator>
276 std::pair<rmm::device_buffer, cudf::size_type> make_null_mask(ValidityIterator begin,
277 ValidityIterator end)
279 auto [null_mask,
null_count] = make_null_mask_vector(begin, end);
300 template <
typename StringsIterator,
typename Val
idityIterator>
301 auto make_chars_and_offsets(StringsIterator begin, StringsIterator end, ValidityIterator v)
303 std::vector<char> chars{};
304 std::vector<cudf::size_type> offsets(1, 0);
305 for (
auto str = begin; str < end; ++str) {
306 std::string tmp = (*v++) ? std::string(*str) : std::string{};
307 chars.insert(chars.end(), std::cbegin(tmp), std::cend(tmp));
308 auto const last_offset =
static_cast<std::size_t
>(offsets.back());
309 auto const next_offset = last_offset + tmp.length();
311 next_offset <
static_cast<std::size_t
>(std::numeric_limits<cudf::size_type>::max()),
312 "Cannot use strings_column_wrapper to build a large strings column");
315 return std::pair(std::move(chars), std::move(offsets));
327 template <
typename ElementTo,
typename SourceElementT = ElementTo>
335 std::vector<ElementTo> empty;
339 detail::make_elements<ElementTo, SourceElementT>(empty.begin(), empty.end()),
362 template <
typename InputIterator>
368 detail::make_elements<ElementTo, SourceElementT>(begin, end),
396 template <
typename InputIterator,
typename Val
idityIterator>
401 auto [null_mask,
null_count] = detail::make_null_mask(v, v + size);
404 detail::make_elements<ElementTo, SourceElementT>(begin, end),
405 std::move(null_mask),
421 template <
typename ElementFrom>
444 template <
typename ElementFrom>
446 std::initializer_list<bool> validity)
468 template <
typename Val
idityIterator,
typename ElementFrom>
492 template <
typename InputIterator>
495 std::initializer_list<bool>
const& validity)
517 template <
typename ElementFrom>
521 thrust::make_transform_iterator(elements.begin(), [](
auto const& e) { return e.first; });
522 auto end = begin + elements.size();
524 thrust::make_transform_iterator(elements.begin(), [](
auto const& e) { return e.second; });
534 template <
typename Rep>
553 template <
typename FixedPo
intRepIterator>
555 FixedPointRepIterator end,
559 CUDF_EXPECTS(numeric::is_supported_representation_type<Rep>(),
"not valid representation type");
562 auto const elements = thrust::host_vector<Rep>(begin, end);
563 auto const id = type_to_id<numeric::fixed_point<Rep, numeric::Radix::BASE_10>>();
618 template <
typename FixedPo
intRepIterator,
typename Val
idityIterator>
620 FixedPointRepIterator end,
625 CUDF_EXPECTS(numeric::is_supported_representation_type<Rep>(),
"not valid representation type");
628 auto const elements = thrust::host_vector<Rep>(begin, end);
629 auto const id = type_to_id<numeric::fixed_point<Rep, numeric::Radix::BASE_10>>();
631 auto [null_mask,
null_count] = detail::make_null_mask(v, v + size);
636 std::move(null_mask),
658 std::initializer_list<bool> validity,
661 std::cbegin(elements), std::cend(elements), std::cbegin(validity), scale)
683 template <
typename Val
idityIterator>
711 template <
typename FixedPo
intRepIterator>
713 FixedPointRepIterator end,
714 std::initializer_list<bool>
const& validity,
751 template <
typename StringsIterator>
755 if (num_strings == 0) {
759 auto all_valid = cuda::make_constant_iterator(
true);
760 auto [chars, offsets] = detail::make_chars_and_offsets(begin, end, all_valid);
761 auto d_chars = cudf::detail::make_device_uvector_async(
763 auto d_offsets = std::make_unique<cudf::column>(
764 cudf::detail::make_device_uvector(
800 template <
typename StringsIterator,
typename Val
idityIterator>
805 if (num_strings == 0) {
809 auto [chars, offsets] = detail::make_chars_and_offsets(begin, end, v);
810 auto [null_mask,
null_count] = detail::make_null_mask_vector(v, v + num_strings);
811 auto d_chars = cudf::detail::make_device_uvector_async(
813 auto d_offsets = std::make_unique<cudf::column>(
814 cudf::detail::make_device_uvector_async(
818 auto d_bitmask = cudf::detail::make_device_uvector(
821 num_strings, std::move(d_offsets), d_chars.release(),
null_count, d_bitmask.release());
859 template <
typename Val
idityIterator>
881 std::initializer_list<bool> validity)
909 thrust::make_transform_iterator(strings.begin(), [](
auto const& s) { return s.first; });
910 auto end = begin + strings.size();
912 thrust::make_transform_iterator(strings.begin(), [](
auto const& s) { return s.second; });
925 template <
typename KeyElementTo,
typename SourceElementT = KeyElementTo>
960 template <
typename InputIterator>
995 template <
typename InputIterator,
typename Val
idityIterator>
1018 template <
typename ElementFrom>
1042 template <
typename ElementFrom>
1044 std::initializer_list<bool> validity)
1067 template <
typename Val
idityIterator,
typename ElementFrom>
1093 template <
typename InputIterator>
1096 std::initializer_list<bool>
const& validity)
1161 template <
typename StringsIterator>
1198 template <
typename StringsIterator,
typename Val
idityIterator>
1242 template <
typename Val
idityIterator>
1264 std::initializer_list<bool> validity)
1305 template <
typename T,
typename SourceElementT = T>
1326 template <typename Element = T, std::enable_if_t<cudf::is_fixed_width<Element>()>* =
nullptr>
1329 build_from_non_nested(
1348 template <
typename Element = T,
1349 typename InputIterator,
1350 std::enable_if_t<cudf::is_fixed_width<Element>()>* =
nullptr>
1353 build_from_non_nested(
1372 template <
typename Element = T,
1373 typename ValidityIterator,
1374 std::enable_if_t<cudf::is_fixed_width<Element>()>* =
nullptr>
1378 build_from_non_nested(
1399 template <
typename Element = T,
1400 typename InputIterator,
1401 typename ValidityIterator,
1402 std::enable_if_t<cudf::is_fixed_width<Element>()>* =
nullptr>
1406 build_from_non_nested(
1423 template <
typename Element = T,
1424 std::enable_if_t<std::is_same_v<Element, cudf::string_view>>* =
nullptr>
1427 build_from_non_nested(
1446 template <
typename Element = T,
1447 typename ValidityIterator,
1448 std::enable_if_t<std::is_same_v<Element, cudf::string_view>>* =
nullptr>
1452 build_from_non_nested(
1480 std::vector<bool> valids;
1481 build_from_nested(elements, valids);
1525 template <
typename Val
idityIterator>
1530 std::vector<bool> validity;
1534 std::back_inserter(validity),
1536 build_from_nested(elements, validity);
1568 std::unique_ptr<cudf::column>&& offsets,
1569 std::unique_ptr<cudf::column>&& values,
1575 num_rows, std::move(offsets), std::move(values),
null_count, std::move(null_mask));
1594 void build_from_nested(std::initializer_list<lists_column_wrapper<T, SourceElementT>> elements,
1595 std::vector<bool>
const& v)
1597 auto valids = cudf::detail::make_counting_transform_iterator(
1598 0, [&v](
auto i) {
return v.empty() ?
true : v[i]; });
1601 auto const hierarchy_and_depth =
1602 std::accumulate(elements.begin(),
1604 std::pair<column_view, int32_t>{{}, -1},
1605 [](
auto acc, lists_column_wrapper
const& lcw) {
1606 return lcw.depth > acc.second ? std::pair(lcw.get_view(), lcw.depth) : acc;
1608 column_view expected_hierarchy = hierarchy_and_depth.first;
1609 int32_t
const expected_depth = hierarchy_and_depth.second;
1612 auto [cols, stubs] = preprocess_columns(elements, expected_hierarchy, expected_depth);
1616 std::vector<size_type> offsetv;
1620 std::back_inserter(offsetv),
1623 size_type ret = count;
1624 if (valid) { count += col.size(); }
1628 offsetv.push_back(
count);
1633 std::vector<column_view> children;
1634 thrust::copy_if(std::cbegin(cols),
1637 std::back_inserter(children),
1638 cuda::std::identity{});
1646 depth = expected_depth + 1;
1650 return cudf::test::detail::make_null_mask(v.begin(), v.end());
1655 cols.size(), std::move(offsets), std::move(data),
null_count, std::move(null_mask));
1665 void build_from_non_nested(std::unique_ptr<column> c)
1670 std::vector<size_type> offsetv;
1671 if (c->size() > 0) {
1672 offsetv.push_back(0);
1673 offsetv.push_back(c->size());
1682 size_type num_elements = offsets->size() == 0 ? 0 : offsets->size() - 1;
1721 std::unique_ptr<column> normalize_column(column_view
const& col,
1722 column_view
const& expected_hierarchy)
1725 if (col.type().id() != type_id::LIST) {
1726 CUDF_EXPECTS(col.is_empty(),
"Encountered mismatched column!");
1728 auto remainder =
empty_like(expected_hierarchy);
1732 lists_column_view lcv(col);
1735 std::make_unique<column>(lcv.offsets()),
1736 normalize_column(lists_column_view(col).child(),
1737 lists_column_view(expected_hierarchy).child()),
1743 std::pair<std::vector<column_view>, std::vector<std::unique_ptr<column>>> preprocess_columns(
1744 std::initializer_list<lists_column_wrapper<T, SourceElementT>>
const& elements,
1745 column_view& expected_hierarchy,
1748 std::vector<std::unique_ptr<column>> stubs;
1749 std::vector<column_view> cols;
1756 std::back_inserter(cols),
1757 [&](lists_column_wrapper
const& l) -> column_view {
1761 if (l.depth < expected_depth) {
1775 CUDF_EXPECTS(l.wrapped->size() == 0,
"Mismatch in column types!");
1776 stubs.push_back(empty_like(expected_hierarchy));
1778 stubs.push_back(normalize_column(l.get_view(), expected_hierarchy));
1780 return *(stubs.back());
1783 return l.get_view();
1786 return {std::move(cols), std::move(stubs)};
1789 [[nodiscard]] column_view get_view()
const
1791 return root ? lists_column_view(*wrapped).child() : *wrapped;
1831 std::vector<bool>
const& validity = {})
1833 init(std::move(child_columns), validity);
1857 std::initializer_list<std::reference_wrapper<detail::column_wrapper>> child_column_wrappers,
1858 std::vector<bool>
const& validity = {})
1860 std::vector<std::unique_ptr<cudf::column>> child_columns;
1861 child_columns.reserve(child_column_wrappers.size());
1863 child_column_wrappers.end(),
1864 std::back_inserter(child_columns),
1865 [&](
auto const& column_wrapper) {
1866 return std::make_unique<cudf::column>(column_wrapper.get(),
1867 cudf::test::get_default_stream());
1869 init(std::move(child_columns), validity);
1892 template <
typename V>
1894 std::initializer_list<std::reference_wrapper<detail::column_wrapper>> child_column_wrappers,
1897 std::vector<std::unique_ptr<cudf::column>> child_columns;
1898 child_columns.reserve(child_column_wrappers.size());
1900 child_column_wrappers.end(),
1901 std::back_inserter(child_columns),
1902 [&](
auto const& column_wrapper) {
1903 return std::make_unique<cudf::column>(column_wrapper.get(),
1904 cudf::test::get_default_stream());
1906 init(std::move(child_columns), validity_iter);
1910 void init(std::vector<std::unique_ptr<cudf::column>>&& child_columns,
1911 std::vector<bool>
const& validity)
1913 size_type num_rows = child_columns.empty() ? 0 : child_columns[0]->size();
1916 child_columns.end(),
1917 [&](
auto const& p_column) { return p_column->size() == num_rows; }),
1918 "All struct member columns must have the same row count.");
1921 "Validity buffer must have as many elements as rows in the struct column.");
1925 return cudf::test::detail::make_null_mask(validity.begin(), validity.end());
1929 std::move(child_columns),
1931 std::move(null_mask),
1936 template <
typename V>
1937 void init(std::vector<std::unique_ptr<cudf::column>>&& child_columns, V validity_iterator)
1939 size_type const num_rows = child_columns.empty() ? 0 : child_columns[0]->size();
1942 child_columns.end(),
1943 [&](
auto const& p_column) { return p_column->size() == num_rows; }),
1944 "All struct member columns must have the same row count.");
1946 std::vector<bool> validity(num_rows);
1947 std::copy(validity_iterator, validity_iterator + num_rows, validity.begin());
1949 init(std::move(child_columns), validity);
Utilities for bit and bitmask operations.
A non-owning, immutable view of device data as a column of elements, some of which may be null as ind...
A container of nullable device data as a column of elements.
Indicator for the logical data type of an element in a column.
A wrapper class for operations on a dictionary column.
column_view indices() const noexcept
Returns the column of indices.
column_view keys() const noexcept
Returns the column of keys.
Given a column-view of lists type, an instance of this class provides a wrapper on this compound colu...
A non-owning, mutable view of device data as a column of elements, some of which may be null as indic...
Base class for a wrapper around a cudf::column.
std::unique_ptr< cudf::column > release()
Releases internal unique_ptr to wrapped column.
dictionary_column_wrapper(StringsIterator begin, StringsIterator end, ValidityIterator v)
Construct a nullable dictionary column of strings from the range [begin,end) using the range [v,...
dictionary_column_wrapper(std::initializer_list< std::string > strings, std::initializer_list< bool > validity)
Construct a nullable dictionary column of strings from a list of strings and a list of booleans to in...
column_view indices() const
Access indices column view.
dictionary_column_wrapper(std::initializer_list< std::string > strings)
Construct a non-nullable dictionary column of strings from a list of strings.
dictionary_column_wrapper(StringsIterator begin, StringsIterator end)
Construct a non-nullable dictionary column of strings from the range [begin,end).
dictionary_column_wrapper(std::initializer_list< std::string > strings, ValidityIterator v)
Construct a nullable dictionary column of strings from a list of strings and the range [v,...
column_view keys() const
Access keys column view.
dictionary_column_wrapper()
Default constructor initializes an empty dictionary column of strings.
column_wrapper derived class for wrapping dictionary columns.
dictionary_column_wrapper(std::initializer_list< ElementFrom > elements)
Construct a non-nullable dictionary column of fixed-width elements from an initializer list.
dictionary_column_wrapper(std::initializer_list< ElementFrom > elements, std::initializer_list< bool > validity)
Construct a nullable dictionary column from a list of fixed-width elements using another list to indi...
dictionary_column_wrapper(std::initializer_list< ElementFrom > element_list, ValidityIterator v)
Construct a nullable dictionary column from a list of fixed-width elements and the range [v,...
dictionary_column_wrapper()
Default constructor initializes an empty column with dictionary type.
dictionary_column_wrapper(InputIterator begin, InputIterator end)
Construct a non-nullable dictionary column of the fixed-width elements in the range [begin,...
dictionary_column_wrapper(InputIterator begin, InputIterator end, ValidityIterator v)
Construct a nullable dictionary column of the fixed-width elements in the range [begin,...
dictionary_column_wrapper(InputIterator begin, InputIterator end, std::initializer_list< bool > const &validity)
Construct a nullable dictionary column of the fixed-width elements in the range [begin,...
A wrapper for a column of fixed-width elements.
fixed_point_column_wrapper(FixedPointRepIterator begin, FixedPointRepIterator end, std::initializer_list< bool > const &validity, numeric::scale_type scale)
Construct a nullable column of the decimal elements in the range [begin,end) using a validity initial...
fixed_point_column_wrapper(std::initializer_list< Rep > elements, std::initializer_list< bool > validity, numeric::scale_type scale)
Construct a nullable column from an initializer list of decimal elements using another list to indica...
fixed_point_column_wrapper(FixedPointRepIterator begin, FixedPointRepIterator end, numeric::scale_type scale)
Construct a non-nullable column of the decimal elements in the range [begin,end).
fixed_point_column_wrapper(std::initializer_list< Rep > element_list, ValidityIterator v, numeric::scale_type scale)
Construct a nullable column from an initializer list of decimal elements and the range [v,...
fixed_point_column_wrapper(std::initializer_list< Rep > values, numeric::scale_type scale)
Construct a non-nullable column of decimal elements from an initializer list.
fixed_point_column_wrapper(FixedPointRepIterator begin, FixedPointRepIterator end, ValidityIterator v, numeric::scale_type scale)
Construct a nullable column of the fixed-point elements from a range.
column_wrapper derived class for wrapping columns of fixed-width elements.
fixed_width_column_wrapper(InputIterator begin, InputIterator end, std::initializer_list< bool > const &validity)
Construct a nullable column of the fixed-width elements in the range [begin,end) using a validity ini...
fixed_width_column_wrapper(std::initializer_list< std::pair< ElementFrom, bool >> elements)
Construct a nullable column from a list of pairs of fixed-width elements and validity booleans of eac...
fixed_width_column_wrapper(std::initializer_list< ElementFrom > elements, std::initializer_list< bool > validity)
Construct a nullable column from a list of fixed-width elements using another list to indicate the va...
fixed_width_column_wrapper(std::initializer_list< ElementFrom > elements)
Construct a non-nullable column of fixed-width elements from an initializer list.
fixed_width_column_wrapper(InputIterator begin, InputIterator end, ValidityIterator v)
Construct a nullable column of the fixed-width elements in the range [begin,end) using the range [v,...
fixed_width_column_wrapper(std::initializer_list< ElementFrom > element_list, ValidityIterator v)
Construct a nullable column from a list of fixed-width elements and the range [v, v + element_list....
fixed_width_column_wrapper(InputIterator begin, InputIterator end)
Construct a non-nullable column of the fixed-width elements in the range [begin,end).
fixed_width_column_wrapper()
Default constructor initializes an empty column with proper dtype.
column_wrapper derived class for wrapping columns of lists.
lists_column_wrapper(InputIterator begin, InputIterator end)
Construct a lists column containing a single list of fixed-width type from an iterator range.
lists_column_wrapper(std::initializer_list< lists_column_wrapper< T, SourceElementT >> elements, ValidityIterator v)
Construct a lists column of nested lists from an initializer list of values and a validity iterator.
static lists_column_wrapper< T > make_one_empty_row_column(bool valid=true)
Construct a list column containing a single empty, optionally null row.
lists_column_wrapper(InputIterator begin, InputIterator end, ValidityIterator v)
Construct a lists column containing a single list of fixed-width type from an iterator range and a va...
lists_column_wrapper()
Construct am empty lists column.
lists_column_wrapper(std::initializer_list< lists_column_wrapper< T, SourceElementT >> elements)
Construct a lists column of nested lists from an initializer list of values.
lists_column_wrapper(std::initializer_list< SourceElementT > elements)
Construct a lists column containing a single list of fixed-width type from an initializer list of val...
lists_column_wrapper(std::initializer_list< std::string > elements, ValidityIterator v)
Construct a lists column containing a single list of strings from an initializer list of values and a...
lists_column_wrapper(std::initializer_list< std::string > elements)
Construct a lists column containing a single list of strings from an initializer list of values.
lists_column_wrapper(std::initializer_list< SourceElementT > elements, ValidityIterator v)
Construct a lists column containing a single list of fixed-width type from an initializer list of val...
column_wrapper derived class for wrapping columns of strings.
strings_column_wrapper(std::initializer_list< std::pair< std::string, bool >> strings)
Construct a nullable column from a list of pairs of strings and validity booleans of each string.
strings_column_wrapper()
Default constructor initializes an empty column of strings.
strings_column_wrapper(std::initializer_list< std::string > strings)
Construct a non-nullable column of strings from a list of strings.
strings_column_wrapper(std::initializer_list< std::string > strings, std::initializer_list< bool > validity)
Construct a nullable column of strings from a list of strings and a list of booleans to indicate the ...
strings_column_wrapper(std::initializer_list< std::string > strings, ValidityIterator v)
Construct a nullable column of strings from a list of strings and the range [v, v + strings....
strings_column_wrapper(StringsIterator begin, StringsIterator end)
Construct a non-nullable column of strings from the range [begin,end).
strings_column_wrapper(StringsIterator begin, StringsIterator end, ValidityIterator v)
Construct a nullable column of strings from the range [begin,end) using the range [v,...
column_wrapper derived class for wrapping columns of structs.
structs_column_wrapper(std::initializer_list< std::reference_wrapper< detail::column_wrapper >> child_column_wrappers, V validity_iter)
Constructs a struct column from the list of column wrappers for child columns.
structs_column_wrapper(std::initializer_list< std::reference_wrapper< detail::column_wrapper >> child_column_wrappers, std::vector< bool > const &validity={})
Constructs a struct column from the list of column wrappers for child columns.
structs_column_wrapper(std::vector< std::unique_ptr< cudf::column >> &&child_columns, std::vector< bool > const &validity={})
Constructs a struct column from the specified list of pre-constructed child columns.
void const * data() const noexcept
Class definition for cudf::column.
Column APIs for gather, scatter, split, slice, etc.
Dictionary column encode and decode APIs.
Class definition for fixed point data type.
std::unique_ptr< column > empty_like(column_view const &input)
Initializes and returns an empty column of the same type as the input.
std::unique_ptr< cudf::column > make_structs_column(size_type num_rows, std::vector< std::unique_ptr< column >> &&child_columns, size_type null_count, rmm::device_buffer &&null_mask, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Construct a STRUCT column using specified child columns as members.
std::unique_ptr< column > make_empty_column(data_type type)
Creates an empty column of the specified type.
std::unique_ptr< column > make_strings_column(cudf::device_span< cuda::std::pair< char const *, size_type > const > strings, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Construct a STRING type column given a device span of pointer/size pairs.
std::unique_ptr< cudf::column > make_lists_column(size_type num_rows, std::unique_ptr< column > offsets_column, std::unique_ptr< column > child_column, size_type null_count, rmm::device_buffer &&null_mask)
Construct a LIST type column given offsets column, child column, null mask and null count.
std::size_t bitmask_allocation_size_bytes(size_type number_of_bits, std::size_t padding_boundary=64)
Computes the required bytes necessary to represent the specified number of bits with a given padding ...
rmm::device_buffer copy_bitmask(bitmask_type const *mask, size_type begin_bit, size_type end_bit, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Creates a device_buffer from a slice of bitmask defined by a range of indices [begin_bit,...
rmm::device_buffer create_null_mask(size_type size, mask_state state, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Creates a device_buffer for use as a null value indicator bitmask of a column
size_type null_count(bitmask_type const *bitmask, size_type start, size_type stop, rmm::cuda_stream_view stream=cudf::get_default_stream())
Given a validity bitmask, counts the number of null elements (unset bits) in the range [start,...
std::unique_ptr< column > concatenate(host_span< column_view const > columns_to_concat, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Concatenates multiple columns into a single column.
rmm::cuda_stream_view const get_default_stream()
Get the current default stream.
std::unique_ptr< column > encode(column_view const &column, data_type indices_type=data_type{type_id::INT32}, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Construct a dictionary column by dictionary encoding an existing column.
scale_type
The scale type for fixed_point.
rmm::device_async_resource_ref get_current_device_resource_ref()
Get the current device memory resource reference.
device_async_resource_ref get_current_device_resource_ref()
std::unique_ptr< column > is_fixed_point(strings_column_view const &input, data_type decimal_type=data_type{type_id::DECIMAL64}, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Returns a boolean column identifying strings in which all characters are valid for conversion to fixe...
std::unique_ptr< column > count(strings_column_view const &input, string_scalar const &target, rmm::cuda_stream_view stream=cudf::get_default_stream(), rmm::device_async_resource_ref mr=cudf::get_current_device_resource_ref())
Returns the number of times the given target string matches in each string.
CUDF_HOST_DEVICE void set_bit_unsafe(bitmask_type *bitmask, size_type bit_index)
Sets the specified bit to 1
#define CUDF_EXPECTS(...)
Macro for checking (pre-)conditions that throws an exception when a condition is violated.
int32_t size_type
Row index type for columns and tables.
uint32_t bitmask_type
Bitmask type stored as 32-bit unsigned integer.
size_type distance(T f, T l)
Similar to std::distance but returns cudf::size_type and performs static_cast
constexpr CUDF_HOST_DEVICE bool is_nested()
Indicates whether T is a nested type.
@ ALL_NULL
Null mask allocated, initialized to all elements NULL.
@ DICTIONARY32
Dictionary type using int32 indices.
Class definition for cudf::lists_column_view.
fixed_point and supporting types
APIs for managing validity bitmasks.
Convert between source and target types when they differ and where possible.
constexpr ToT operator()(FromT element) const
No conversion necessary: Same type, simply copy element to output.
Defines the mapping between cudf::type_id runtime type information and concrete C++ types.
Type declarations for libcudf.