| 108 | |
| 109 | template <typename Getter> |
| 110 | nb::object build_nested_list(const std::vector<size_t>& dims, size_t dim, size_t& offset, const Getter& getter) { |
| 111 | if (dims.empty()) { |
| 112 | return getter(offset++); |
| 113 | } |
| 114 | |
| 115 | nb::list result; |
| 116 | if (dim + 1 == dims.size()) { |
| 117 | for (size_t i = 0; i < dims[dim]; ++i) { |
| 118 | result.append(getter(offset++)); |
| 119 | } |
| 120 | return result; |
| 121 | } |
| 122 | |
| 123 | for (size_t i = 0; i < dims[dim]; ++i) { |
| 124 | result.append(build_nested_list(dims, dim + 1, offset, getter)); |
| 125 | } |
| 126 | return result; |
| 127 | } |
| 128 | |
| 129 | } // namespace |
| 130 | |