In the first part of the general effort to redesign the visibility datasets (#126), we should redesign/update the UVDataset class. Currently, this class is used nowhere in the codebase, so it shouldn't be much difficulty to experiment with new ideas (we could also delete this object, if we decide that's the right course).
The idea is that UVDataset (or some renamed version of it) will be for interacting with what we are calling the "loose" visibilities. I.e., the ungridded visibilities obtained raw from some measurement set. For example, a typical ALMA measurement set might contain 300,000+ individual visibility measurements. Because dealing with so many visibility points is computationally expensive, most users will want to interact with a GriddedDataset (whose redesign is discussed in #163). A GriddedDataset requires some special indexing to match up with the FourierCube output, so redesigning the UVDataset is probably the more straightforward of the issues, even if it's not the first object most people will use. And, once we figure out some of the larger redesign issues, we should have a better idea of how to redesign GriddedDataset.
There there are several instances where the user would want to interact with the loose, ungridded visibilities where a UVDateset would be helpful. This is now possible thanks to the NuFFT (#78) in the codebase.
The goal of this issue, generally, is to align our dataset objects with as many of the Pytorch idioms as possible, described here, here, and here.
The idea is that the user will instantiate the dataset with numpy arrays for u, v, weight, and data (much the same way DataAverager is instantiated).
Things we should think about:
Is there any pre-processing that should be done on the arrays? Error checking?
How does the device location interact with creation/moving/slicing?
Should this be an IterableDataset or any of the other types of datasets provided by Pytorch?
How should the dataset use batch dimensions to parallelize when we have multiple channels to the data, as in a spectral cube?
How should the dataset use sub-batches, in the limit that we have many, many visibilities and we'd like to use something like stochastic gradient descent?
other considerations?
We may also want a UVDataset to contain a routine that converts it to a GriddedDataset (by passing through the gridding.DataAverager).
In the first part of the general effort to redesign the visibility datasets (#126), we should redesign/update the UVDataset class. Currently, this class is used nowhere in the codebase, so it shouldn't be much difficulty to experiment with new ideas (we could also delete this object, if we decide that's the right course).
The idea is that
UVDataset
(or some renamed version of it) will be for interacting with what we are calling the "loose" visibilities. I.e., the ungridded visibilities obtained raw from some measurement set. For example, a typical ALMA measurement set might contain 300,000+ individual visibility measurements. Because dealing with so many visibility points is computationally expensive, most users will want to interact with aGriddedDataset
(whose redesign is discussed in #163). AGriddedDataset
requires some special indexing to match up with theFourierCube
output, so redesigning theUVDataset
is probably the more straightforward of the issues, even if it's not the first object most people will use. And, once we figure out some of the larger redesign issues, we should have a better idea of how to redesignGriddedDataset
.There there are several instances where the user would want to interact with the loose, ungridded visibilities where a
UVDateset
would be helpful. This is now possible thanks to the NuFFT (#78) in the codebase.The goal of this issue, generally, is to align our dataset objects with as many of the Pytorch idioms as possible, described here, here, and here.
The idea is that the user will instantiate the dataset with numpy arrays for u, v, weight, and data (much the same way
DataAverager
is instantiated).Things we should think about:
device
location interact with creation/moving/slicing?IterableDataset
or any of the other types of datasets provided by Pytorch?We may also want a
UVDataset
to contain a routine that converts it to aGriddedDataset
(by passing through thegridding.DataAverager
).