1 #include "catch2/catch_all.hpp"
5 #include <sopt/power_method.h>
14 auto const over_sample = 2;
17 auto const width = 128;
18 auto const height = 128;
19 const auto op_serial = purify::measurementoperator::init_degrid_operator_2d<Vector<t_complex>>(
20 uv_serial.u, uv_serial.v, uv_serial.w, uv_serial.weights, height, width, over_sample);
21 const auto op = factory::measurement_operator_factory<Vector<t_complex>>(
23 uv_serial.weights, height, width, over_sample);
25 SECTION(
"Degridding") {
26 Vector<t_complex>
const image = Vector<t_complex>::Random(width * height);
28 auto uv_degrid = uv_serial;
29 uv_degrid.vis = *op_serial * image;
30 Vector<t_complex>
const degridded = *op * image;
31 REQUIRE(degridded.size() == uv_degrid.vis.size());
32 REQUIRE(degridded.isApprox(uv_degrid.vis, 1e-4));
35 Vector<t_complex>
const gridded = op->adjoint() * uv_serial.vis;
36 Vector<t_complex>
const gridded_serial = op_serial->adjoint() * uv_serial.vis;
37 REQUIRE(gridded.size() == gridded_serial.size());
38 REQUIRE(gridded.isApprox(gridded_serial, 1e-4));
46 auto const over_sample = 2;
49 auto const width = 128;
50 auto const height = 128;
51 const auto op_serial = purify::measurementoperator::init_degrid_operator_2d<Vector<t_complex>>(
52 uv_serial.u, uv_serial.v, uv_serial.w, uv_serial.weights, height, width, over_sample);
53 #ifndef PURIFY_ARRAYFIRE
56 uv_serial.weights, height, width, over_sample));
58 const auto op = factory::measurement_operator_factory<Vector<t_complex>>(
60 uv_serial.weights, height, width, over_sample);
62 SECTION(
"Degridding") {
63 Vector<t_complex>
const image = Vector<t_complex>::Random(width * height);
65 auto uv_degrid = uv_serial;
66 uv_degrid.vis = *op_serial * image;
67 Vector<t_complex>
const degridded = *op * image;
68 REQUIRE(degridded.size() == uv_degrid.vis.size());
69 REQUIRE(degridded.isApprox(uv_degrid.vis, 1e-4));
72 Vector<t_complex>
const gridded = op->adjoint() * uv_serial.vis;
73 Vector<t_complex>
const gridded_serial = op_serial->adjoint() * uv_serial.vis;
74 REQUIRE(gridded.size() == gridded_serial.size());
75 REQUIRE(gridded.isApprox(gridded_serial, 1e-4));
TEST_CASE("Serial vs Distributed Operator")
const t_real pi
mathematical constant
std::shared_ptr< sopt::LinearTransform< T > > measurement_operator_factory(const distributed_measurement_operator distribute, ARGS &&...args)
distributed measurement operator factory
void set_level(const std::string &level)
Method to set the logging level of the default Log object.
utilities::vis_params random_sample_density(const t_int vis_num, const t_real mean, const t_real standard_deviation, const t_real rms_w)
Generates a random visibility coverage.