|
| template<typename T > |
| remove_diff_t< T > & | detach_gradient (T &) |
| |
| template<typename T > |
| void | track_gradient (T &, bool) |
| |
| template<typename T > |
| bool | is_gradient_tracked (T &) |
| |
| template<typename T > |
| const remove_diff_t< T > & | gradient (T &) |
| |
| template<typename T > |
| void | forward_gradient (T &) |
| |
| template<typename T > |
| void | backward_gradient (T &) |
| |
template<typename T >
requires false |
| std::string | toString (const T &) |
| | regular drjit::array types
|
| |
template<typename T >
requires false |
| T | fromString (const std::string &) |
| |
| template<typename T , typename U > |
| auto | atan2 (drjit::Complex< T > a, drjit::Complex< U > b)=delete |
| | delete atan2 to avoid static_error
|
| |
| template<typename NEWTYPE , typename OLDTYPE > |
| NEWTYPE | cast (OLDTYPE &&val) |
| | cast
|
| |
| template<typename MASK , typename A , typename B > |
| auto | select (MASK &&mask, A &&a, B &&b) |
| | Extension of drjit::select to diff/non-diff masks.
|
| |
template<typename RET , typename C , typename Index >
requires (!is_packet_v<Index>) && std::ranges::range<C> && std::convertible_to<bbm::iterable_value_t<C>, RET> && is_index_v<Index> |
| constexpr RET | lookup (C &&container, const Index &idx, const index_mask_t< Index > &mask=true) |
| | Non-packet look up.
|
| |
template<typename VAL , typename C , typename Index >
requires (!is_packet_v<Index>) && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<VAL, bbm::iterable_value_t<C>> |
| constexpr void | set (C &&container, const Index &idx, VAL &&value, const index_mask_t< Index > &mask=true) |
| | Non-packet set.
|
| |
template<typename C , typename PRED >
requires std::ranges::range<C> && std::is_invocable_r_v<mask_t<bbm::iterable_value_t<C>>, PRED, bbm::iterable_value_t<C>> |
| constexpr index_t< bbm::iterable_value_t< C > > | binary_search (C &&container, PRED &&predicate, const index_mask_t< bbm::iterable_value_t< C > > &mask=true) |
| | binary search
|
| |
| template<typename T , typename U > |
| auto | max (T &&t, U &&u) |
| | max between two variables
|
| |
| template<typename T , typename U > |
| auto | min (T &&t, U &&u) |
| | min between two variables
|
| |
| template<typename T > |
| T | erfc (const T &t) |
| | erfc
|
| |
| template<typename T > |
| vec2d< T > | cossin (const T &a) |
| | cossin
|
| |
template<typename T >
requires (drjit::is_static_array_v<T> && !backbone::is_LLVMArray_v<T> && !backbone::is_DiffArray_v<T>) |
| std::string | toString (const T &arr) |
| | regular drjit::array types
|
| |
template<typename T >
requires (drjit::is_static_array_v<T> && !backbone::is_LLVMArray_v<T> && !backbone::is_DiffArray_v<T>) |
| T | fromString (const std::string &str) |
| |
template<typename T >
requires backbone::is_DiffArray_v<T> |
| std::string | toString (const T &val) |
| | Handle drjit::DiffArray.
|
| |
template<typename T >
requires backbone::is_DiffArray_v<T> |
| T | fromString (const std::string &str) |
| |
template<typename T >
requires backbone::is_LLVMArray_v<T> |
| std::string | toString (const T &val) |
| | Handle drjit::LLVMArray.
|
| |
template<typename T >
requires backbone::is_LLVMArray_v<T> |
| T | fromString (const std::string &str) |
| |
template<typename RET , typename C , typename Index >
requires is_packet_v<RET> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<bbm::iterable_value_t<C>, remove_packet_t<RET>> && (!is_packet_v<bbm::iterable_value_t<C>>) |
| RET | lookup (C &&container, const Index &idx, const index_mask_t< Index > &mask=true) |
| | Non-packet data, Packet look up.
|
| |
template<typename RET , typename C , typename Index >
requires is_packet_v<RET> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<bbm::iterable_value_t<C>, RET> && is_packet_v<bbm::iterable_value_t<C>> |
| RET | lookup (C &&container, const Index &idx, const index_mask_t< Index > &mask=true) |
| | Packet data, Packet look up.
|
| |
template<typename VAL , typename C , typename Index >
requires is_packet_v<VAL> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<remove_packet_t<VAL>, bbm::iterable_value_t<C>> && (!is_packet_v<bbm::iterable_value_t<C>>) |
| void | set (C &&container, const Index &idx, VAL &&value, const index_mask_t< Index > &mask=true) |
| | Non-packet data, Packet set.
|
| |
template<typename VAL , typename C , typename Index >
requires is_packet_v<VAL> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<VAL, bbm::iterable_value_t<C>> && is_packet_v<bbm::iterable_value_t<C>> |
| void | set (C &&container, const Index &idx, VAL &&value, const index_mask_t< Index > &mask=true) |
| | Packet data, Packet set.
|
| |
template<typename T >
requires (enoki::is_static_array_v<T> && !backbone::is_DiffArray_v<T>) |
| std::string | toString (const T &arr) |
| | regular enoki::array types
|
| |
template<typename T >
requires (enoki::is_static_array_v<T> && !backbone::is_DiffArray_v<T>) |
| T | fromString (const std::string &str) |
| |
| template<typename T > |
| constexpr complex< T > | rcp (complex< T > z) |
| | rcp
|
| |
| template<typename T > |
| constexpr vec2d< complex< T > > | cossin (complex< T > z) |
| | cossin method
|
| |
| template<typename NEWTYPE , typename OLDTYPE > |
| constexpr NEWTYPE | cast (OLDTYPE &&val) |
| | cast
|
| |
template<typename RET , typename C >
requires std::ranges::range<C> && std::convertible_to<bbm::iterable_value_t<C>, RET> |
| constexpr RET | lookup (C &&container, size_t idx, bool mask=true) |
| | lookup
|
| |
template<typename VAL , typename C >
requires std::ranges::range<C> && std::convertible_to<VAL, bbm::iterable_value_t<C>> |
| constexpr void | set (C &&container, size_t idx, VAL &&value, bool mask=true) |
| | set
|
| |
template<typename C , typename PRED >
requires std::ranges::range<C> && std::is_invocable_r_v<bool, PRED, bbm::iterable_value_t<C>> |
| constexpr size_t | binary_search (C &&container, PRED &&predicate, bool mask=true) |
| | binary_search
|
| |
template<typename T >
requires backbone::is_array_v<T> |
| std::string | toString (const T &arr) |
| | regular drjit::array types
|
| |
template<typename T >
requires backbone::is_array_v<T> |
| T | fromString (const std::string &str) |
| |
|
| template<typename T > |
| auto | dot (const T &a, const T &b) |
| |
| template<typename T > |
| auto | norm (const T &a) |
| |
| template<typename T > |
| auto | squared_norm (const T &a) |
| |
| template<typename T > |
| auto | normalize (const T &a) |
| |
|
| template<typename T > |
| auto | hsum (const T &t) |
| |
| template<typename T > |
| auto | hprod (const T &t) |
| |
| template<typename T > |
| auto | hmax (const T &t) |
| |
| template<typename T > |
| auto | hmin (const T &t) |
| |
|
| | BBM_ENOKI_MATHOP (exp) |
| |
| | BBM_ENOKI_MATHOP (log) |
| |
| | BBM_ENOKI_MATHOP (sin) |
| |
| | BBM_ENOKI_MATHOP (asin) |
| |
| | BBM_ENOKI_MATHOP (cos) |
| |
| | BBM_ENOKI_MATHOP (acos) |
| |
| | BBM_ENOKI_MATHOP (tan) |
| |
| | BBM_ENOKI_MATHOP (atan) |
| |
| | BBM_ENOKI_MATHOP (atan2) |
| |
| | BBM_ENOKI_MATHOP (sinh) |
| |
| | BBM_ENOKI_MATHOP (asinh) |
| |
| | BBM_ENOKI_MATHOP (cosh) |
| |
| | BBM_ENOKI_MATHOP (acosh) |
| |
| | BBM_ENOKI_MATHOP (tanh) |
| |
| | BBM_ENOKI_MATHOP (atanh) |
| |
| | BBM_ENOKI_MATHOP (ceil) |
| |
| | BBM_ENOKI_MATHOP (floor) |
| |
| | BBM_ENOKI_MATHOP (round) |
| |
| | BBM_ENOKI_MATHOP (clamp) |
| |
| | BBM_ENOKI_MATHOP (fmod) |
| |
| | BBM_ENOKI_MATHOP (copysign) |
| |
| | BBM_ENOKI_MATHOP (sign) |
| |
| | BBM_ENOKI_MATHOP (lerp) |
| |
| | BBM_ENOKI_MATHOP (abs) |
| |
| | BBM_ENOKI_MATHOP (sqrt) |
| |
| | BBM_ENOKI_MATHOP (cbrt) |
| |
| | BBM_ENOKI_MATHOP (pow) |
| |
| | BBM_ENOKI_MATHOP (max) |
| |
| | BBM_ENOKI_MATHOP (min) |
| |
| | BBM_ENOKI_MATHOP (safe_sqrt) |
| |
| | BBM_ENOKI_MATHOP (safe_asin) |
| |
| | BBM_ENOKI_MATHOP (safe_acos) |
| |
| | BBM_ENOKI_MATHOP (erf) |
| |
| | BBM_ENOKI_MATHOP (erfc) |
| |
| | BBM_ENOKI_MATHOP (erfinv) |
| |
| | BBM_ENOKI_MATHOP (tgamma) |
| |
| | BBM_ENOKI_MATHOP (lgamma) |
| |
| | BBM_ENOKI_MATHOP (eq) |
| |
| | BBM_ENOKI_MATHOP (neq) |
| |
| | BBM_ENOKI_MATHOP (rcp) |
| |
| | BBM_ENOKI_MATHOP (rsqrt) |
| |
| | BBM_ENOKI_MATHOP (isnan) |
| |
| | BBM_ENOKI_MATHOP (isinf) |
| |
| | BBM_ENOKI_MATHOP (isfinite) |
| |
|
| template<typename T > |
| constexpr T | real (complex< T > z) |
| |
| template<typename T > |
| constexpr T | imag (complex< T > z) |
| |
| template<typename T > |
| constexpr complex< T > | conj (complex< T > z) |
| |
|
| | BBM_DECL_COMPLEX_OP (exp) |
| |
| | BBM_DECL_COMPLEX_OP (log) |
| |
| | BBM_DECL_COMPLEX_OP (pow) |
| |
| | BBM_DECL_COMPLEX_OP (sqrt) |
| |
| | BBM_DECL_COMPLEX_OP (sin) |
| |
| | BBM_DECL_COMPLEX_OP (cos) |
| |
| | BBM_DECL_COMPLEX_OP (tan) |
| |
| | BBM_DECL_COMPLEX_OP (asin) |
| |
| | BBM_DECL_COMPLEX_OP (acos) |
| |
| | BBM_DECL_COMPLEX_OP (atan) |
| |
| | BBM_DECL_COMPLEX_OP (sinh) |
| |
| | BBM_DECL_COMPLEX_OP (cosh) |
| |
| | BBM_DECL_COMPLEX_OP (tanh) |
| |
| | BBM_DECL_COMPLEX_OP (asinh) |
| |
| | BBM_DECL_COMPLEX_OP (acosh) |
| |
| | BBM_DECL_COMPLEX_OP (atanh) |
| |
|
| template<typename T > |
| constexpr complex< T > | reverse (complex< T > z) |
| |
| template<typename T > |
| constexpr complex< T > | psum (complex< T > z) |
| |
| template<typename T > |
| constexpr complex< T > | normalize (complex< T > z) |
| |
|
template<typename T , typename U >
requires requires(std::decay_t<T> a, std::decay_t<U> b) {{a+b};} |
| constexpr auto | select (bool mask, const T &a, const U &b) |
| |
template<typename T , typename U , size_t N>
requires requires(value_t<T> a, value_t<U> b) {{a+b};} |
| constexpr auto | select (const array< bool, N > &mask, const T &a, const U &b) |
| |
template<typename T , typename U >
requires (!is_complex_v<U>) && requires(value_t<T> a, value_t<U> b) {{a+b};} |
| constexpr auto | select (const array< bool, 2 > &mask, const complex< T > &z, const U &u) |
| |
template<typename T , typename U >
requires (!is_complex_v<U>) && requires(value_t<T> a, value_t<U> b) {{a+b};} |
| constexpr auto | select (const array< bool, 2 > &mask, const U &u, const complex< T > &z) |
| |
|
template<typename T >
requires std::is_scalar_v<T> |
| T | hsum (const T &t) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | hprod (const T &t) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | hmax (const T &t) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | hmin (const T &t) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | dot (const T &a, const T &b) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | norm (const T &t) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | squared_norm (const T &t) |
| |
template<typename T >
requires std::is_scalar_v<T> |
| T | normalize (const T &) |
| |
|
template<typename T >
requires std::convertible_to<T, bool> |
| bool | all (const T &t) |
| |
template<typename T >
requires std::convertible_to<T, bool> |
| bool | any (const T &t) |
| |
template<typename T >
requires std::convertible_to<T, bool> |
| bool | none (const T &t) |
| |
template<typename T >
requires std::convertible_to<T, bool> |
| size_t | count (const T &t) |
| |
|
| template<typename T , size_t N> |
| auto | hsum (const array< T, N > &t) |
| |
| template<typename T , size_t N> |
| auto | hprod (const array< T, N > &t) |
| |
| template<typename T , size_t N> |
| auto | hmax (const array< T, N > &t) |
| |
| template<typename T , size_t N> |
| auto | hmin (const array< T, N > &t) |
| |
| template<typename T , typename U , size_t N> |
| auto | dot (const array< T, N > &a, const array< U, N > &b) |
| |
| template<typename T , size_t N> |
| auto | squared_norm (const array< T, N > &t) |
| |
| template<typename T , size_t N> |
| auto | norm (const array< T, N > &t) |
| |
| template<typename T , size_t N> |
| auto | normalize (const array< T, N > &t) |
| |
| template<size_t N> |
| bool | all (const array< bool, N > &t) |
| | \Name Mask operations on arrays
|
| |
| template<size_t N> |
| bool | any (const array< bool, N > &t) |
| |
| template<size_t N> |
| bool | none (const array< bool, N > &t) |
| |
| template<size_t N> |
| size_t | count (const array< bool, N > &t) |
| |
|
template<typename T , typename U >
requires (!is_array_v<T>) && requires(T a, U b) { { std::atan2(result_t<T, U>(a), result_t<T,U>(b)) }; } |
| constexpr auto | atan2 (T a, U b) |
| |
template<typename T , typename U >
requires (!is_array_v<T>) && requires(T a, U b) { { std::fmod(result_t<T, U>(a), result_t<T,U>(b)) }; } |
| constexpr auto | fmod (T a, U b) |
| |
template<typename T , typename U , typename V >
requires (!is_array_v<T>) && requires(T a, U b, V c) { { std::lerp(result_t<T, U, V>(a), result_t<T,U,V>(b), result_t<T,U,V>(c)) }; } |
| constexpr auto | lerp (T a, U b, V c) |
| |
template<typename T , typename U >
requires (!is_array_v<T>) && requires(T a, U b) { { std::pow(result_t<T, U>(a), result_t<T,U>(b)) }; } |
| constexpr auto | pow (T a, U b) |
| |
template<typename T , typename U >
requires (!is_array_v<T>) && requires(T a, U b) { { std::fmax(result_t<T,U>(a), result_t<T,U>(b)) }; } |
| constexpr auto | max (T a, U b) |
| |
template<typename T , typename U >
requires (!is_array_v<T>) && requires(T a, U b) { { std::fmin(result_t<T,U>(a), result_t<T,U>(b)) }; } |
| constexpr auto | min (T a, U b) |
| |
template<typename T , typename L , typename U >
requires (!is_array_v<T>) && requires(const T& a, const L& l, const U& u) { { std::clamp(a, T(l), T(u)) }; } |
| constexpr auto | clamp (const T &a, const L &l, const U &u) |
| |
| template<typename T > |
| constexpr auto | rcp (T a) |
| |
template<typename T >
requires requires(const T& a) {{std::sqrt(a)};} |
| constexpr auto | rsqrt (T a) |
| |
template<typename T >
requires requires(const T& a) {{std::log(a)};} |
| constexpr auto | erfinv (T a) |
| |
template<typename T >
requires requires(T a) { { std::copysign(T(1), a) }; } |
| constexpr auto | sign (T a) |
| |
template<typename T >
requires requires(T a) { { std::cos(a) }; { std::sin(a) }; } |
| constexpr vec2d< T > | cossin (T a) |
| |
template<typename T >
requires requires(T a) { { std::sqrt(std::fmax(a,T(0))) }; } |
| constexpr auto | safe_sqrt (T a) |
| |
template<typename T >
requires requires(T a) { { std::asin(std::fmin(T(1), std::fmax(T(-1), a))) }; } |
| constexpr auto | safe_asin (T a) |
| |
template<typename T >
requires requires(T a) { { std::acos(std::fmin(T(1), std::fmax(T(-1), a))) }; } |
| constexpr auto | safe_acos (T a) |
| |
template<typename T , typename U >
requires std::is_scalar_v<T> && std::is_scalar_v<U> |
| constexpr auto | eq (T a, U b) |
| |
template<typename T , typename U >
requires std::is_scalar_v<T> && std::is_scalar_v<U> |
| constexpr auto | neq (T a, U b) |
| |
|
| | BBM_ARRAY_FUNC (exp) |
| | Math Functions on iterable containers.
|
| |
| | BBM_ARRAY_FUNC (log) |
| |
| | BBM_ARRAY_FUNC (sin) |
| |
| | BBM_ARRAY_FUNC (asin) |
| |
| | BBM_ARRAY_FUNC (cos) |
| |
| | BBM_ARRAY_FUNC (acos) |
| |
| | BBM_ARRAY_FUNC (tan) |
| |
| | BBM_ARRAY_FUNC (atan) |
| |
| | BBM_ARRAY_FUNC (sinh) |
| |
| | BBM_ARRAY_FUNC (asinh) |
| |
| | BBM_ARRAY_FUNC (cosh) |
| |
| | BBM_ARRAY_FUNC (acosh) |
| |
| | BBM_ARRAY_FUNC (tanh) |
| |
| | BBM_ARRAY_FUNC (atanh) |
| |
| | BBM_ARRAY_FUNC (ceil) |
| |
| | BBM_ARRAY_FUNC (floor) |
| |
| | BBM_ARRAY_FUNC (round) |
| |
| | BBM_ARRAY_FUNC (abs) |
| |
| | BBM_ARRAY_FUNC (sign) |
| |
| | BBM_ARRAY_FUNC (sqrt) |
| |
| | BBM_ARRAY_FUNC (cbrt) |
| |
| | BBM_ARRAY_FUNC (rcp) |
| |
| | BBM_ARRAY_FUNC (rsqrt) |
| |
| | BBM_ARRAY_FUNC (safe_sqrt) |
| |
| | BBM_ARRAY_FUNC (safe_asin) |
| |
| | BBM_ARRAY_FUNC (safe_acos) |
| |
| | BBM_ARRAY_FUNC (erf) |
| |
| | BBM_ARRAY_FUNC (erfc) |
| |
| | BBM_ARRAY_FUNC (erfinv) |
| |
| | BBM_ARRAY_FUNC (tgamma) |
| |
| | BBM_ARRAY_FUNC (lgamma) |
| |
| | BBM_ARRAY_FUNC (eq) |
| |
| | BBM_ARRAY_FUNC (neq) |
| |
| | BBM_ARRAY_FUNC (atan2) |
| |
| | BBM_ARRAY_FUNC (max) |
| |
| | BBM_ARRAY_FUNC (min) |
| |
| | BBM_ARRAY_FUNC (fmod) |
| |
| | BBM_ARRAY_FUNC (copysign) |
| |
| | BBM_ARRAY_FUNC (pow) |
| |
| | BBM_ARRAY_FUNC (lerp) |
| |
| | BBM_ARRAY_FUNC (clamp) |
| |
| | BBM_ARRAY_FUNC (isnan) |
| |
| | BBM_ARRAY_FUNC (isinf) |
| |
| | BBM_ARRAY_FUNC (isfinite) |
| |
template<typename T >
requires is_array_v<T> && requires(const T& t) {{ cos(t) }; { sin(t) }; } |
| vec2d< T > | cossin (const T &a) |
| |