| 220 | |
| 221 | core::TensorValue ensure_contiguous(core::ModuleBuildContext & ctx, const core::TensorValue & value) { |
| 222 | return core::ensure_backend_addressable_layout(ctx, value); |
| 223 | } |
| 224 | |
| 225 | core::TensorValue matmul_f32( |
| 226 | core::ModuleBuildContext & ctx, |
| 227 | const core::TensorValue & lhs, |
| 228 | const core::TensorValue & rhs) { |
| 229 | core::validate_rank_between(lhs, 2, core::kMaxTensorRank, "lhs"); |
| 230 | core::validate_rank_between(rhs, static_cast<int64_t>(lhs.shape.rank), static_cast<int64_t>(lhs.shape.rank), "rhs"); |
| 231 | const size_t rank = lhs.shape.rank; |
| 232 | for (size_t i = 0; i + 2 < rank; ++i) { |
| 233 | if (lhs.shape.dims[i] != rhs.shape.dims[i]) { |
| 234 | throw std::runtime_error("RoFormer matmul batch dimensions must match"); |
no test coverage detected