FuncDispatcher#
-
class pandas::FuncDispatcher#
pandas C++ class.
Example#
#include <pandas/pandas.h>
using namespace pandas;
// Use FuncDispatcher
FuncDispatcher obj;
// ... operations ...
Other Methods#
Signature |
Return Type |
Location |
Example |
|---|---|---|---|
|
throw |
pd_func_dispatch.h:489 |
|
|
Result |
pd_func_dispatch.h:448 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:444 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:438 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:439 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:440 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:443 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:441 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:442 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:436 |
|
|
FuncDispatcher& |
pd_func_dispatch.h:437 |
Code Examples#
The following examples are extracted from the test suite.
IncompatibleFuncArgError (pd_test_5_all.cpp:75705)
75695 throw std::runtime_error("f_test_value_error_messages_3 failed");
75696 }
75697 std::cout << " -> tests passed" << std::endl;
75698}
75699
75700// --- f_test_dispatch_sentinels_3.cpp ---
75701
75702namespace f_test_dispatch_sentinels_3_ns {
75703
75704static void dispatch_call_emulator(const std::string& method) {
75705 throw pandas::IncompatibleFuncArgError(
75706 std::string("FuncDispatcher::call: no registered implementation for '") + method + "'");
75707}
75708
75709void case_1_exists_in_pd_exceptions_h() {
75710 std::cout << "----- case_1_exists_in_pd_exceptions_h -----\n";
75711 int local_fail = 0;
75712
75713 bool caught_func = false;
75714 try {
75715 throw pandas::IncompatibleFuncArgError("from pd_exceptions.h");
call (pd_test_2_all.cpp:21645)
21635 std::map<std::string, std::string> dtype_map = {};
21636 std::vector<int> parse_dates = {};
21637 bool parse_dates_bool = false;
21638 bool dayfirst = false;
21639 std::set<int> skiprows_set = {};
21640 std::vector<int> usecols_positions = {};
21641 std::vector<int> header_rows = {};
21642 std::vector<std::string> index_col_list = {};
21643 std::vector<int> index_col_pos_list = {};
21644
21645 pandas::DataFrame call() const {
21646 return pandas::DataFrame::read_csv(
21647 data, sep, header, index_col, index_col_pos,
21648 true, std::nullopt, "", "infer", {}, "", nullptr,
21649 dayfirst, ".", false, "", true, dtype, "",
21650 "utf-8", "strict", "", true, "",
21651 false_values, true, false, false, false,
21652 keep_default_na, lineterminator, true, false,
21653 na_filter, na_values, names,
21654 nrows, on_bad_lines, parse_dates, "\"", 0,
21655 skip_blank_lines, std::nullopt, skipinitialspace,
on_callable (pd_test_func_dispatch_5.cpp:114)
104}
105
106static void test_dispatcher_arms(int& fail) {
107 pandas::FuncDispatcher disp;
108 disp.on_string([](const std::string& name) {
109 return pandas::Result::of_scalar(static_cast<std::int64_t>(name.size()));
110 });
111 disp.on_string_list([](const std::vector<std::string>& names) {
112 return pandas::Result::of_scalar(static_cast<std::int64_t>(names.size()));
113 });
114 disp.on_callable([](const pandas::CallableHandle& h) {
115 pandas::MapCellInput in;
116 in.kind = pandas::MapCellInput::Float;
117 in.f = 0.0;
118 auto cell = h->invoke_cell(in);
119 return pandas::Result::of_scalar(cell.f);
120 });
121
122 auto r1 = disp.call(pandas::FuncArg::from_string_name("sum"));
123 pandas_tests::check(r1.is_scalar(), "string arm returns scalar", fail);
124 pandas_tests::check(std::get<std::int64_t>(r1.value) == 3,
on_string (pd_test_5_all.cpp:113936)
113926 std::cout << "-- case_H3_dispatch_with_axis_param\n";
113927 std::vector<pandas::FuncArg> inputs; // empty -> empty frame
113928 pandas::Result r = pandas::concat_dispatch(inputs, /*axis=*/1, /*ignore_index=*/false);
113929 bool got = std::holds_alternative<std::unique_ptr<pandas::DataFrame>>(r.value);
113930 pandas_tests::check(got, "case_H3.empty_axis1_returns_dataframe", local_fail);
113931}
113932
113933static void f_concat_dispatch_q3r4s5_case_H4_dispatcher_smoke(int& local_fail) {
113934 std::cout << "-- case_H4_dispatcher_smoke\n";
113935 pandas::FuncDispatcher disp;
113936 disp.on_string([](const std::string& name) -> pandas::Result {
113937 pandas::Result r;
113938 r.value = name + ":seen";
113939 return r;
113940 });
113941 auto fa = pandas::FuncArg::from_string_name("axis0");
113942 pandas::Result r = disp.call(fa);
113943 bool got_str = std::holds_alternative<std::string>(r.value);
113944 pandas_tests::check(got_str, "case_H4.dispatcher_returns_string", local_fail);
113945 if (got_str) {
113946 pandas_tests::check(std::get<std::string>(r.value) == "axis0:seen", "case_H4.value", local_fail);
on_string_list (pd_test_func_dispatch_5.cpp:111)
101 auto fa5 = pandas::FuncArg::from_dict_spec(std::move(dict_specs));
102 pandas_tests::check(fa5.kind == pandas::FuncArgKind::DictSpec,
103 "from_dict_spec -> DictSpec", fail);
104}
105
106static void test_dispatcher_arms(int& fail) {
107 pandas::FuncDispatcher disp;
108 disp.on_string([](const std::string& name) {
109 return pandas::Result::of_scalar(static_cast<std::int64_t>(name.size()));
110 });
111 disp.on_string_list([](const std::vector<std::string>& names) {
112 return pandas::Result::of_scalar(static_cast<std::int64_t>(names.size()));
113 });
114 disp.on_callable([](const pandas::CallableHandle& h) {
115 pandas::MapCellInput in;
116 in.kind = pandas::MapCellInput::Float;
117 in.f = 0.0;
118 auto cell = h->invoke_cell(in);
119 return pandas::Result::of_scalar(cell.f);
120 });