1#ifndef _BBM_HORIZONTAL_BACKBONE_CONCEPT_H_
2#define _BBM_HORIZONTAL_BACKBONE_CONCEPT_H_
41 { bbm::hsum(a) } -> std::convertible_to<value_t<T>>;
42 { bbm::hprod(a) } -> std::convertible_to<value_t<T>>;
43 { bbm::hmax(a) } -> std::convertible_to<value_t<T>>;
44 { bbm::hmin(a) } -> std::convertible_to<value_t<T>>;
45 { bbm::dot(a,a) } -> std::convertible_to<value_t<T>>;
46 { bbm::norm(a) } -> std::convertible_to<value_t<T>>;
47 { bbm::squared_norm(a) } -> std::convertible_to<value_t<T>>;
48 { bbm::normalize(a) } -> std::convertible_to<T>;
63 { bbm::is_mask_v<M> } -> std::convertible_to<bool>;
64 { bbm::all(a) } -> std::convertible_to<bool>;
65 { bbm::any(a) } -> std::convertible_to<bool>;
66 { bbm::none(a) } -> std::convertible_to<bool>;
67 { bbm::count(a) } -> std::convertible_to<size_t>;
69 requires is_mask_v<M>;
A type M has horizontal masking functions if:
Definition: horizontal.h:61
A type T has horizontal functions if:
Definition: horizontal.h:39
Random number generator; built on top of Drjit.
Definition: backbone.h:53
Definition: aggregatebsdf.h:29