Ufunc#

class numpy::Ufunc#

numpy C++ class.

Example#

#include <numpy/np_ndarray.h>
using namespace numpy;

// Use Ufunc
Ufunc obj;
// ... operations ...

Constructors#

Signature

Location

Example

Ufunc(Funcfunc, size_tnin, size_tnout, std::optional<std::any>identity = std::nullopt, const std::string &doc = "")

NP_UFUNC.H:63

Operators#

Signature

Return Type

Location

Example

auto -> NDArray<std::any> operator()(const NDArray<T>&arr)

auto -> NDArray<std::any>

NP_UFUNC.H:102

auto -> NDArray<std::any> operator()(const NDArray<T1>&arr1, const NDArray<T2>&arr2)

auto -> NDArray<std::any>

NP_UFUNC.H:137

auto -> NDArray<std::any> operator()(const NDArray<T1>&arr1, const NDArray<T2>&arr2, const NDArray<T3>&arr3)

auto -> NDArray<std::any>

NP_UFUNC.H:183

Indexing / Selection#

Signature

Return Type

Location

Example

const std::string & getDoc()

const std::string &

NP_UFUNC.H:304

const Func & getFunction()

const Func &

NP_UFUNC.H:299

std::any getIdentity()

std::any

NP_UFUNC.H:81

View

TypeId getTypeId(const std::type_info &ti)

TypeId

NP_UFUNC.H:429

Other Methods#

Signature

Return Type

Location

Example

std::any callFunctionWithAny(const std::any &arg)

std::any

NP_UFUNC.H:361

std::any callFunctionWithAny(const std::any &arg1, const std::any &arg2)

std::any

NP_UFUNC.H:449

std::enable_if_t<std::is_invocable_v<Func,T1,T2>,std::any> callFunctionWithAnyBinary(const std::any &arg1, const std::any &arg2)

std::enable_if_t<std::is_invocable_v<Func,T1,T2>,std::any>

NP_UFUNC.H:336

std::enable_if_t<!std::is_invocable_v<Func,T1,T2>,std::any> callFunctionWithAnyBinary(const std::any &arg1, const std::any &arg2)

std::enable_if_t<!std::is_invocable_v<Func,T1,T2>,std::any>

NP_UFUNC.H:354

std::any callFunctionWithAnyBinaryPromoted(const std::any &arg1, const std::any &arg2, TypeIdt1, TypeIdt2)

std::any

NP_UFUNC.H:523

std::any callFunctionWithAnyBinaryPromotedComplex(const std::any &arg1, const std::any &arg2, TypeIdt1, TypeIdt2)

std::any

NP_UFUNC.H:542

std::any callFunctionWithAnyBinaryWithObject(const std::any &arg1, const std::any &arg2, TypeIdt1, TypeIdt2)

std::any

NP_UFUNC.H:561

std::enable_if_t<std::is_invocable_v<Func,T>,std::any> callFunctionWithAnyUnary(const std::any &arg)

std::enable_if_t<std::is_invocable_v<Func,T>,std::any>

NP_UFUNC.H:310

std::enable_if_t<!std::is_invocable_v<Func,T>,std::any> callFunctionWithAnyUnary(const std::any &arg)

std::enable_if_t<!std::is_invocable_v<Func,T>,std::any>

NP_UFUNC.H:327

object\_ convertToObject(const std::any &arg, TypeIdtid)

object_

NP_UFUNC.H:619

TargetT convertToType(const std::any &arg, TypeIdtid)

TargetT

NP_UFUNC.H:579

bool hasIdentity()

bool

NP_UFUNC.H:80

View

size_t nin()

size_t

NP_UFUNC.H:78

size_t nout()

size_t

NP_UFUNC.H:79

std::string signature()

std::string

NP_UFUNC.H:84

Code Examples#

The following examples are extracted from the test suite.

getIdentity (np_test_3_all.cpp:1055)
1045      try {
1046        auto mult_func = [](double a, double b) { return a * b; };
1047        auto ufunc_mult = numpy::frompyfunc(mult_func, 2, 1, std::any{ 1.0 });
1048
1049        if (!ufunc_mult.hasIdentity()) {
1050          std::cout << "[FAIL] Identity value failed";
1051          return 1;
1052        }
1053
1054        double identity = std::any_cast<double>(ufunc_mult.getIdentity());
1055        if (std::abs(identity - 1.0) > 1e-10) {
1056          std::cout << "[FAIL] Identity value failed";
1057          return 1;
1058        }
1059
1060        // std::cout << "[OK] Identity value works correctly" << std::endl;
1061        std::cout << " -> tests passed" << std::endl;
1062        return 0;
1063      }
1064      catch (const std::exception& e) {
hasIdentity (np_test_3_all.cpp:1050)
1040    }
1041
1042    // Test 8: Identity value
1043    int np_test_frompyfunc_identity_value() {
1044      std::cout << "========= np_test_frompyfunc_identity_value =======================";
1045
1046      try {
1047        auto mult_func = [](double a, double b) { return a * b; };
1048        auto ufunc_mult = numpy::frompyfunc(mult_func, 2, 1, std::any{ 1.0 });
1049
1050        if (!ufunc_mult.hasIdentity()) {
1051          std::cout << "[FAIL] Identity value failed";
1052          return 1;
1053        }
1054
1055        double identity = std::any_cast<double>(ufunc_mult.getIdentity());
1056        if (std::abs(identity - 1.0) > 1e-10) {
1057          std::cout << "[FAIL] Identity value failed";
1058          return 1;
1059        }