Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/branch-24.12' into pylibcudf/s…
Browse files Browse the repository at this point in the history
…trings/convert_floats
  • Loading branch information
mroeschke committed Oct 4, 2024
2 parents fc670a8 + 119aa9d commit f047912
Show file tree
Hide file tree
Showing 12 changed files with 212 additions and 84 deletions.
14 changes: 7 additions & 7 deletions cpp/include/cudf/detail/utilities/logger.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2023, NVIDIA CORPORATION.
* Copyright (c) 2023-2024, NVIDIA CORPORATION.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -19,9 +19,9 @@
#include <cudf/utilities/logger.hpp>

// Log messages that require computation should only be used at level TRACE and DEBUG
#define CUDF_LOG_TRACE(...) SPDLOG_LOGGER_TRACE(&cudf::logger(), __VA_ARGS__)
#define CUDF_LOG_DEBUG(...) SPDLOG_LOGGER_DEBUG(&cudf::logger(), __VA_ARGS__)
#define CUDF_LOG_INFO(...) SPDLOG_LOGGER_INFO(&cudf::logger(), __VA_ARGS__)
#define CUDF_LOG_WARN(...) SPDLOG_LOGGER_WARN(&cudf::logger(), __VA_ARGS__)
#define CUDF_LOG_ERROR(...) SPDLOG_LOGGER_ERROR(&cudf::logger(), __VA_ARGS__)
#define CUDF_LOG_CRITICAL(...) SPDLOG_LOGGER_CRITICAL(&cudf::logger(), __VA_ARGS__)
#define CUDF_LOG_TRACE(...) SPDLOG_LOGGER_TRACE(&cudf::detail::logger(), __VA_ARGS__)
#define CUDF_LOG_DEBUG(...) SPDLOG_LOGGER_DEBUG(&cudf::detail::logger(), __VA_ARGS__)
#define CUDF_LOG_INFO(...) SPDLOG_LOGGER_INFO(&cudf::detail::logger(), __VA_ARGS__)
#define CUDF_LOG_WARN(...) SPDLOG_LOGGER_WARN(&cudf::detail::logger(), __VA_ARGS__)
#define CUDF_LOG_ERROR(...) SPDLOG_LOGGER_ERROR(&cudf::detail::logger(), __VA_ARGS__)
#define CUDF_LOG_CRITICAL(...) SPDLOG_LOGGER_CRITICAL(&cudf::detail::logger(), __VA_ARGS__)
8 changes: 7 additions & 1 deletion cpp/include/cudf/utilities/logger.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@

namespace CUDF_EXPORT cudf {

namespace detail {
spdlog::logger& logger();
}

/**
* @brief Returns the global logger.
*
Expand All @@ -43,6 +47,8 @@ namespace CUDF_EXPORT cudf {
*
* @return spdlog::logger& The logger.
*/
spdlog::logger& logger();
[[deprecated(
"Support for direct access to spdlog loggers in cudf is planned for removal")]] spdlog::logger&
logger();

} // namespace CUDF_EXPORT cudf
4 changes: 3 additions & 1 deletion cpp/src/utilities/logger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@ struct logger_wrapper {

} // namespace

spdlog::logger& cudf::logger()
spdlog::logger& cudf::detail::logger()
{
static logger_wrapper wrapped{};
return wrapped.logger_;
}

spdlog::logger& cudf::logger() { return cudf::detail::logger(); }
37 changes: 19 additions & 18 deletions cpp/tests/utilities_tests/logger_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,17 @@ class LoggerTest : public cudf::test::BaseFixture {
std::vector<spdlog::sink_ptr> prev_sinks;

public:
LoggerTest() : prev_level{cudf::logger().level()}, prev_sinks{cudf::logger().sinks()}
LoggerTest()
: prev_level{cudf::detail::logger().level()}, prev_sinks{cudf::detail::logger().sinks()}
{
cudf::logger().sinks() = {std::make_shared<spdlog::sinks::ostream_sink_mt>(oss)};
cudf::logger().set_formatter(
cudf::detail::logger().sinks() = {std::make_shared<spdlog::sinks::ostream_sink_mt>(oss)};
cudf::detail::logger().set_formatter(
std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter("%v")));
}
~LoggerTest() override
{
cudf::logger().set_level(prev_level);
cudf::logger().sinks() = prev_sinks;
cudf::detail::logger().set_level(prev_level);
cudf::detail::logger().sinks() = prev_sinks;
}

void clear_sink() { oss.str(""); }
Expand All @@ -46,32 +47,32 @@ class LoggerTest : public cudf::test::BaseFixture {

TEST_F(LoggerTest, Basic)
{
cudf::logger().critical("crit msg");
cudf::detail::logger().critical("crit msg");
ASSERT_EQ(this->sink_content(), "crit msg\n");
}

TEST_F(LoggerTest, DefaultLevel)
{
cudf::logger().trace("trace");
cudf::logger().debug("debug");
cudf::logger().info("info");
cudf::logger().warn("warn");
cudf::logger().error("error");
cudf::logger().critical("critical");
cudf::detail::logger().trace("trace");
cudf::detail::logger().debug("debug");
cudf::detail::logger().info("info");
cudf::detail::logger().warn("warn");
cudf::detail::logger().error("error");
cudf::detail::logger().critical("critical");
ASSERT_EQ(this->sink_content(), "warn\nerror\ncritical\n");
}

TEST_F(LoggerTest, CustomLevel)
{
cudf::logger().set_level(spdlog::level::warn);
cudf::logger().info("info");
cudf::logger().warn("warn");
cudf::detail::logger().set_level(spdlog::level::warn);
cudf::detail::logger().info("info");
cudf::detail::logger().warn("warn");
ASSERT_EQ(this->sink_content(), "warn\n");

this->clear_sink();

cudf::logger().set_level(spdlog::level::debug);
cudf::logger().trace("trace");
cudf::logger().debug("debug");
cudf::detail::logger().set_level(spdlog::level::debug);
cudf::detail::logger().trace("trace");
cudf::detail::logger().debug("debug");
ASSERT_EQ(this->sink_content(), "debug\n");
}
69 changes: 17 additions & 52 deletions python/cudf/cudf/_lib/strings/convert/convert_fixed_point.pyx
Original file line number Diff line number Diff line change
@@ -1,22 +1,11 @@
# Copyright (c) 2021-2024, NVIDIA CORPORATION.

import cudf

from libcpp.memory cimport unique_ptr
from libcpp.utility cimport move

from cudf.core.buffer import acquire_spill_lock

from pylibcudf.libcudf.column.column cimport column
from pylibcudf.libcudf.column.column_view cimport column_view
from pylibcudf.libcudf.strings.convert.convert_fixed_point cimport (
from_fixed_point as cpp_from_fixed_point,
is_fixed_point as cpp_is_fixed_point,
to_fixed_point as cpp_to_fixed_point,
)
from pylibcudf.libcudf.types cimport data_type, type_id

from cudf._lib.column cimport Column
from cudf._lib.types cimport dtype_to_pylibcudf_type

import pylibcudf as plc


@acquire_spill_lock()
Expand All @@ -32,14 +21,10 @@ def from_decimal(Column input_col):
-------
A column of strings representing the input decimal values.
"""
cdef column_view input_column_view = input_col.view()
cdef unique_ptr[column] c_result
with nogil:
c_result = move(
cpp_from_fixed_point(
input_column_view))

return Column.from_unique_ptr(move(c_result))
plc_column = plc.strings.convert.convert_fixed_point.from_fixed_point(
input_col.to_pylibcudf(mode="read"),
)
return Column.from_pylibcudf(plc_column)


@acquire_spill_lock()
Expand All @@ -57,25 +42,11 @@ def to_decimal(Column input_col, object out_type):
-------
A column of decimals parsed from the string values.
"""
cdef column_view input_column_view = input_col.view()
cdef unique_ptr[column] c_result
cdef int scale = out_type.scale
cdef data_type c_out_type
if isinstance(out_type, cudf.Decimal32Dtype):
c_out_type = data_type(type_id.DECIMAL32, -scale)
elif isinstance(out_type, cudf.Decimal64Dtype):
c_out_type = data_type(type_id.DECIMAL64, -scale)
elif isinstance(out_type, cudf.Decimal128Dtype):
c_out_type = data_type(type_id.DECIMAL128, -scale)
else:
raise TypeError("should be a decimal dtype")
with nogil:
c_result = move(
cpp_to_fixed_point(
input_column_view,
c_out_type))

result = Column.from_unique_ptr(move(c_result))
plc_column = plc.strings.convert.convert_fixed_point.to_fixed_point(
input_col.to_pylibcudf(mode="read"),
dtype_to_pylibcudf_type(out_type),
)
result = Column.from_pylibcudf(plc_column)
result.dtype.precision = out_type.precision
return result

Expand All @@ -98,14 +69,8 @@ def is_fixed_point(Column input_col, object dtype):
-------
A Column of booleans indicating valid decimal conversion.
"""
cdef unique_ptr[column] c_result
cdef column_view source_view = input_col.view()
cdef int scale = dtype.scale
cdef data_type c_dtype = data_type(type_id.DECIMAL64, -scale)
with nogil:
c_result = move(cpp_is_fixed_point(
source_view,
c_dtype
))

return Column.from_unique_ptr(move(c_result))
plc_column = plc.strings.convert.convert_fixed_point.is_fixed_point(
input_col.to_pylibcudf(mode="read"),
dtype_to_pylibcudf_type(dtype),
)
return Column.from_pylibcudf(plc_column)
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ from pylibcudf.libcudf.types cimport data_type
cdef extern from "cudf/strings/convert/convert_fixed_point.hpp" namespace \
"cudf::strings" nogil:
cdef unique_ptr[column] to_fixed_point(
column_view input_col,
column_view input,
data_type output_type) except +

cdef unique_ptr[column] from_fixed_point(
column_view input_col) except +
column_view input) except +

cdef unique_ptr[column] is_fixed_point(
column_view source_strings,
data_type output_type
column_view input,
data_type decimal_type
) except +
2 changes: 1 addition & 1 deletion python/pylibcudf/pylibcudf/strings/convert/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# =============================================================================

set(cython_sources convert_booleans.pyx convert_datetime.pyx convert_durations.pyx
convert_floats.pyx
convert_fixed_point.pyx convert_floats.pyx
)

set(linked_libraries cudf::cudf)
Expand Down
1 change: 1 addition & 0 deletions python/pylibcudf/pylibcudf/strings/convert/__init__.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ from . cimport (
convert_booleans,
convert_datetime,
convert_durations,
convert_fixed_point,
convert_floats,
)
1 change: 1 addition & 0 deletions python/pylibcudf/pylibcudf/strings/convert/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
convert_booleans,
convert_datetime,
convert_durations,
convert_fixed_point,
convert_floats,
)
11 changes: 11 additions & 0 deletions python/pylibcudf/pylibcudf/strings/convert/convert_fixed_point.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Copyright (c) 2024, NVIDIA CORPORATION.

from pylibcudf.column cimport Column
from pylibcudf.types cimport DataType


cpdef Column to_fixed_point(Column input, DataType output_type)

cpdef Column from_fixed_point(Column input)

cpdef Column is_fixed_point(Column input, DataType decimal_type=*)
107 changes: 107 additions & 0 deletions python/pylibcudf/pylibcudf/strings/convert/convert_fixed_point.pyx
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# Copyright (c) 2024, NVIDIA CORPORATION.

from libcpp.memory cimport unique_ptr
from libcpp.utility cimport move
from pylibcudf.column cimport Column
from pylibcudf.libcudf.column.column cimport column
from pylibcudf.libcudf.strings.convert cimport (
convert_fixed_point as cpp_fixed_point,
)
from pylibcudf.types cimport DataType, type_id


cpdef Column to_fixed_point(Column input, DataType output_type):
"""
Returns a new fixed-point column parsing decimal values from the
provided strings column.
For details, see :cpp:details:`cudf::strings::to_fixed_point`
Parameters
----------
input : Column
Strings instance for this operation.
output_type : DataType
Type of fixed-point column to return including the scale value.
Returns
-------
Column
New column of output_type.
"""
cdef unique_ptr[column] c_result

with nogil:
c_result = move(
cpp_fixed_point.to_fixed_point(
input.view(),
output_type.c_obj,
)
)

return Column.from_libcudf(move(c_result))

cpdef Column from_fixed_point(Column input):
"""
Returns a new strings column converting the fixed-point values
into a strings column.
For details, see :cpp:details:`cudf::strings::from_fixed_point`
Parameters
----------
input : Column
Fixed-point column to convert.
Returns
-------
Column
New strings column.
"""
cdef unique_ptr[column] c_result

with nogil:
c_result = move(
cpp_fixed_point.from_fixed_point(
input.view(),
)
)

return Column.from_libcudf(move(c_result))

cpdef Column is_fixed_point(Column input, DataType decimal_type=None):
"""
Returns a boolean column identifying strings in which all
characters are valid for conversion to fixed-point.
For details, see :cpp:details:`cudf::strings::is_fixed_point`
Parameters
----------
input : Column
Strings instance for this operation.
decimal_type : DataType
Fixed-point type (with scale) used only for checking overflow.
Defaults to Decimal64
Returns
-------
Column
New column of boolean results for each string.
"""
cdef unique_ptr[column] c_result

if decimal_type is None:
decimal_type = DataType(type_id.DECIMAL64)

with nogil:
c_result = move(
cpp_fixed_point.is_fixed_point(
input.view(),
decimal_type.c_obj,
)
)

return Column.from_libcudf(move(c_result))
Loading

0 comments on commit f047912

Please sign in to comment.