1#ifndef CHIHAYA_MATRIX_PRODUCT_HPP
2#define CHIHAYA_MATRIX_PRODUCT_HPP
5#include "ritsuko/ritsuko.hpp"
12#include "utils_misc.hpp"
13#include "utils_nary.hpp"
25inline std::pair<ArrayDetails, bool> fetch_matprod_seed(
26 const H5::Group& group,
27 const std::string& target,
28 const std::string& orientation,
29 const ritsuko::Version& version,
30 const Options& options
32 ArrayDetails seed_details;
34 auto thandle = group.openGroup(target);
35 seed_details = validate_numeric_seed(thandle, version, options);
37 std::throw_with_nested(std::runtime_error(
"failed to validate '" + target +
"'"));
40 if (seed_details.dimensions.size() != 2) {
41 throw std::runtime_error(
"expected '" + target +
"' to be a 2-dimensional array");
46 auto ohandle = group.openDataSet(orientation);
47 oristr = read_scalar_string_dataset(ohandle);
48 if (oristr !=
"N" && oristr !=
"T") {
49 throw std::runtime_error(
"expected either 'N' or 'T'");
52 std::throw_with_nested(std::runtime_error(
"failed to validate '" + orientation +
"'"));
55 return std::pair<ArrayDetails, bool>(seed_details, oristr ==
"T");
74 auto left_details = fetch_matprod_seed(group,
"left_seed",
"left_orientation", version, options);
75 auto right_details = fetch_matprod_seed(group,
"right_seed",
"right_orientation", version, options);
81 I<
decltype(nrow)> common, common2;
83 if (left_details.second) {
84 nrow = left_details.first.dimensions[1];
85 common = left_details.first.dimensions[0];
87 nrow = left_details.first.dimensions[0];
88 common = left_details.first.dimensions[1];
91 if (right_details.second) {
92 ncol = right_details.first.dimensions[0];
93 common2 = right_details.first.dimensions[1];
95 ncol = right_details.first.dimensions[1];
96 common2 = right_details.first.dimensions[0];
100 if (common != common2) {
101 throw std::runtime_error(
"inconsistent common dimensions (" + ritsuko::itoa(common) +
" vs " + ritsuko::itoa(common2) +
")");
105 if (left_details.first.type == FLOAT || right_details.first.type == FLOAT) {
108 output.
type = INTEGER;
Namespace for all chihaya functions.
Definition binary_arithmetic.hpp:21
ArrayDetails validate_matrix_product(const H5::Group &group, const ritsuko::Version &version, const Options &options)
Definition matrix_product.hpp:73
Details about an array.
Definition utils_public.hpp:38
std::vector< std::size_t > dimensions
Definition utils_public.hpp:58
ArrayType type
Definition utils_public.hpp:52
Options for validate().
Definition utils_public.hpp:79
bool details_only
Definition utils_public.hpp:84
Various public utilities.