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.