| 4 | |
| 5 | template <typename T, typename U, typename V> |
| 6 | void validate_subtrees(const std::vector<nb::object>& subtrees) { |
| 7 | int len = nb::cast<T>(subtrees[0]).size(); |
| 8 | for (auto& subtree : subtrees) { |
| 9 | if ((nb::isinstance<T>(subtree) && nb::cast<T>(subtree).size() != len) || |
| 10 | nb::isinstance<U>(subtree) || nb::isinstance<V>(subtree)) { |
| 11 | throw std::invalid_argument( |
| 12 | "[tree_map] Additional input tree is not a valid prefix of the first tree."); |
| 13 | } |
| 14 | } |
| 15 | } |
| 16 | |
| 17 | nb::object tree_map( |
| 18 | const std::vector<nb::object>& trees, |