def _check_pb_parms(img_dataset, pb_parms):
    import numbers
    parms_passed = True
    arc_sec_to_rad = np.pi / (3600 * 180)

    if not (_check_parms(pb_parms, 'pb_name', [str], default='PB')):
        parms_passed = False

    if not (_check_parms(pb_parms, 'function', [str], default='alma_airy')):
        parms_passed = False

    if not (_check_parms(pb_parms,
                         'list_dish_diameters', [list],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False
    if not (_check_parms(pb_parms,
                         'list_blockage_diameters', [list],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False

    if len(pb_parms['list_dish_diameters']) != len(
            pb_parms['list_blockage_diameters']):
        print(
            '######### ERROR:Parameter ',
            'list_dish_diameters and list_blockage_diameters must be the same length.'
        )
        parms_passed = False

    return parms_passed
def _check_mosaic_pb_parms(pb_mosaic_parms):
    parms_passed = True

    if not (_check_parms(pb_mosaic_parms, 'pb_name', [str], default='PB')):
        parms_passed = False

    if not (_check_parms(
            pb_mosaic_parms, 'weight_name', [str], default='WEIGHT_PB')):
        parms_passed = False

    return parms_passed
def _check_norm_parms(norm_parms):
    import numbers
    parms_passed = True

    if not (_check_parms(norm_parms,
                         'norm_type', [str],
                         default='flat_sky',
                         acceptable_data=['flat_noise', 'flat_sky', 'none'])):
        parms_passed = False

    if not (_check_parms(norm_parms, 'single_precision', [bool],
                         default=True)):
        parms_passed = False

    return parms_passed
def _check_grid_parms(grid_parms):
    import numbers
    parms_passed = True
    arc_sec_to_rad = np.pi / (3600 * 180)

    if not (_check_parms(grid_parms,
                         'image_size', [list],
                         list_acceptable_data_types=[np.int],
                         list_len=2)):
        parms_passed = False
    if not (_check_parms(grid_parms,
                         'image_center', [list],
                         list_acceptable_data_types=[np.int],
                         list_len=2,
                         default=np.array(grid_parms['image_size']) // 2)):
        parms_passed = False
    if not (_check_parms(grid_parms,
                         'cell_size', [list],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=2)):
        parms_passed = False
    if not (_check_parms(grid_parms,
                         'fft_padding', [numbers.Number],
                         default=1.2,
                         acceptable_range=[1, 10])):
        parms_passed = False
    if not (_check_parms(grid_parms,
                         'chan_mode', [str],
                         acceptable_data=['cube', 'continuum'],
                         default='cube')):
        parms_passed = False

    if parms_passed == True:
        grid_parms['image_size'] = np.array(
            grid_parms['image_size']).astype(int)
        grid_parms['image_size_padded'] = (
            grid_parms['fft_padding'] * grid_parms['image_size']).astype(int)
        grid_parms['image_center'] = np.array(grid_parms['image_center'])
        grid_parms['cell_size'] = arc_sec_to_rad * np.array(
            grid_parms['cell_size'])
        grid_parms['cell_size'][0] = -grid_parms['cell_size'][0]

    return parms_passed
def _check_rotation_parms(rotation_parms):
    import numbers
    parms_passed = True

    if not (_check_parms(rotation_parms,
                         'image_phase_center', [list],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=2)):
        parms_passed = False

    if not (_check_parms(rotation_parms,
                         'common_tangent_reprojection', [bool],
                         default=True)):
        parms_passed = False

    if not (_check_parms(
            rotation_parms, 'single_precision', [bool], default=True)):
        parms_passed = False

    return parms_passed
def _check_pb_parms(img_dataset, pb_parms):
    import numbers
    parms_passed = True
    arc_sec_to_rad = np.pi / (3600 * 180)

    if not (_check_parms(pb_parms, 'pb_name', [str], default='PB')):
        parms_passed = False

    if not (_check_parms(pb_parms, 'function', [str], default='airy')):
        parms_passed = False

    if pb_parms['function'] == 'airy':
        if not (_check_parms(pb_parms,
                             'list_dish_diameters', [list],
                             list_acceptable_data_types=[numbers.Number],
                             list_len=-1)):
            parms_passed = False
        if not (_check_parms(pb_parms,
                             'list_blockage_diameters', [list],
                             list_acceptable_data_types=[numbers.Number],
                             list_len=-1)):
            parms_passed = False

        if len(pb_parms['list_dish_diameters']) != len(
                pb_parms['list_blockage_diameters']):
            print(
                '######### ERROR:Parameter ',
                'list_dish_diameters and list_blockage_diameters must be the same length.'
            )
            parms_passed = False

    if not (_check_parms(pb_parms,
                         'imsize', [list],
                         list_acceptable_data_types=[int, np.int64],
                         list_len=2)):
        parms_passed = False
    if not (_check_parms(pb_parms,
                         'cell', [list],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=2)):
        parms_passed = False
    if not (_check_parms(pb_parms,
                         'pb_limit', [numbers.Number],
                         acceptable_range=[0, 1],
                         default=0.0)):
        parms_passed = False

    if parms_passed == True:
        pb_parms['imsize'] = np.array(pb_parms['imsize']).astype(int)
        pb_parms['cell'] = arc_sec_to_rad * np.array(pb_parms['cell'])
        pb_parms['cell'][0] = -pb_parms['cell'][0]

    return parms_passed
def _check_imaging_weights_parms(imaging_weights_parms):
    import numbers
    parms_passed = True
    arc_sec_to_rad = np.pi / (3600 * 180)
    '''
    if not(_check_parms(imaging_weights_parms, 'data_name', [str], default='DATA')): parms_passed = False
    if not(_check_dataset(vis_dataset,imaging_weights_parms['data_name'])): parms_passed = False
    
    if not(_check_parms(imaging_weights_parms, 'uvw_name', [str], default='UVW')): parms_passed = False
    if not(_check_dataset(vis_dataset,imaging_weights_parms['uvw_name'])): parms_passed = False
    
    if not(_check_parms(imaging_weights_parms, 'imaging_weight_name', [str], default='IMAGING_WEIGHT')): parms_passed = False
    '''

    if not (_check_parms(
            imaging_weights_parms,
            'weighting', [str],
            acceptable_data=['natural', 'uniform', 'briggs', 'briggs_abs'],
            default='natural')):
        parms_passed = False

    if imaging_weights_parms['weighting'] == 'briggs_abs':
        if not (_check_parms(imaging_weights_parms,
                             'briggs_abs_noise', [numbers.Number],
                             default=1.0)):
            parms_passed = False

    if (imaging_weights_parms['weighting']
            == 'briggs') or (imaging_weights_parms['weighting']
                             == 'briggs_abs'):
        if not (_check_parms(imaging_weights_parms,
                             'robust', [numbers.Number],
                             default=0.5,
                             acceptable_range=[-2, 2])):
            parms_passed = False

    return parms_passed
def _check_gcf_parms(gcf_parms):
    import numbers
    parms_passed = True

    if not (_check_parms(gcf_parms,
                         'function', [str],
                         acceptable_data=['alma_airy', 'airy'],
                         default='alma_airy')):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'freq_chan', [list, np.array],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'list_dish_diameters', [list, np.array],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'list_blockage_diameters', [list, np.array],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'unique_ant_indx', [list, np.array],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False

    if not (_check_parms(gcf_parms,
                         'pol', [list, np.array],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=-1)):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'chan_tolerance_factor', [numbers.Number],
                         default=0.005)):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'oversampling', [list, np.array],
                         list_acceptable_data_types=[np.int],
                         list_len=2,
                         default=[10, 10])):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'max_support', [list, np.array],
                         list_acceptable_data_types=[np.int],
                         list_len=2,
                         default=[15, 15])):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'image_phase_center', [list, np.array],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=2)):
        parms_passed = False
    if not (_check_parms(gcf_parms,
                         'support_cut_level', [numbers.Number],
                         default=2.5 * 10**-2)):
        parms_passed = False
    if not (_check_parms(gcf_parms, 'a_chan_num_chunk', [np.int], default=3)):
        parms_passed = False

    if gcf_parms['function'] == 'airy' or gcf_parms['function'] == 'alma_airy':
        if not (_check_parms(gcf_parms,
                             'list_dish_diameters', [list, np.array],
                             list_acceptable_data_types=[numbers.Number],
                             list_len=-1)):
            parms_passed = False
        if not (_check_parms(gcf_parms,
                             'list_blockage_diameters', [list, np.array],
                             list_acceptable_data_types=[numbers.Number],
                             list_len=-1)):
            parms_passed = False

        if len(gcf_parms['list_dish_diameters']) != len(
                gcf_parms['list_blockage_diameters']):
            print(
                '######### ERROR:Parameter ',
                'list_dish_diameters and list_blockage_diameters must be the same length.'
            )
            parms_passed = False

    if parms_passed == True:
        gcf_parms['oversampling'] = np.array(
            gcf_parms['oversampling']).astype(int)
        gcf_parms['max_support'] = np.array(
            gcf_parms['max_support']).astype(int)
        gcf_parms['image_phase_center'] = np.array(
            gcf_parms['image_phase_center'])
        gcf_parms['freq_chan'] = np.array(gcf_parms['freq_chan'])
        gcf_parms['list_dish_diameters'] = np.array(
            gcf_parms['list_dish_diameters'])
        gcf_parms['list_blockage_diameters'] = np.array(
            gcf_parms['list_blockage_diameters'])
        gcf_parms['unique_ant_indx'] = np.array(gcf_parms['unique_ant_indx'])
        gcf_parms['basline_ant'] = np.array(gcf_parms['basline_ant'])
        gcf_parms['pol'] = np.array(gcf_parms['pol'])

    return parms_passed
def _check_grid_params(vis_dataset,
                       grid_parms,
                       default_image_name='DIRTY_IMAGE',
                       default_sum_weight_name='SUM_WEIGHT'):
    import numbers
    parms_passed = True
    arc_sec_to_rad = np.pi / (3600 * 180)

    n_chunks_in_each_dim = vis_dataset.DATA.data.numblocks

    if n_chunks_in_each_dim[3] != 1:
        print('######### ERROR chunking along polarization is not supported')
        return False

    if not (_check_parms(grid_parms, 'data_name', [str], default='DATA')):
        parms_passed = False
    if not (_check_dataset(vis_dataset, grid_parms['data_name'])):
        parms_passed = False

    if not (_check_parms(grid_parms, 'uvw_name', [str], default='UVW')):
        parms_passed = False
    if not (_check_dataset(vis_dataset, grid_parms['uvw_name'])):
        parms_passed = False

    if not (_check_parms(grid_parms,
                         'imaging_weight_name', [str],
                         default='IMAGING_WEIGHT')):
        parms_passed = False
    if not (_check_dataset(vis_dataset, grid_parms['imaging_weight_name'])):
        parms_passed = False

    if not (_check_parms(
            grid_parms, 'image_name', [str], default=default_image_name)):
        parms_passed = False

    if not (_check_parms(grid_parms,
                         'sum_weight_name', [str],
                         default=default_sum_weight_name)):
        parms_passed = False

    if not (_check_parms(grid_parms,
                         'chan_mode', [str],
                         acceptable_data=['cube', 'continuum'],
                         default='cube')):
        parms_passed = False

    if not (_check_parms(grid_parms,
                         'imsize', [list],
                         list_acceptable_data_types=[np.int],
                         list_len=2)):
        parms_passed = False

    if not (_check_parms(grid_parms,
                         'cell', [list],
                         list_acceptable_data_types=[numbers.Number],
                         list_len=2)):
        parms_passed = False

    if not (_check_parms(grid_parms, 'oversampling', [np.int], default=100)):
        parms_passed = False

    if not (_check_parms(grid_parms, 'support', [np.int], default=7)):
        parms_passed = False

    if not (_check_parms(grid_parms,
                         'fft_padding', [numbers.Number],
                         default=1.2,
                         acceptable_range=[1, 100])):
        parms_passed = False

    if parms_passed == True:
        grid_parms['imsize'] = np.array(grid_parms['imsize']).astype(int)
        grid_parms['imsize_padded'] = (grid_parms['fft_padding'] *
                                       grid_parms['imsize']).astype(int)

        grid_parms['cell'] = arc_sec_to_rad * np.array(grid_parms['cell'])
        grid_parms['cell'][0] = -grid_parms['cell'][0]

        grid_parms['complex_grid'] = True

    return parms_passed
def _check_imaging_weights_parms(vis_dataset, imaging_weights_parms):
    import numbers
    parms_passed = True
    arc_sec_to_rad = np.pi / (3600 * 180)

    if not (_check_parms(
            imaging_weights_parms, 'data_name', [str], default='DATA')):
        parms_passed = False
    if not (_check_dataset(vis_dataset, imaging_weights_parms['data_name'])):
        parms_passed = False

    if not (_check_parms(
            imaging_weights_parms, 'uvw_name', [str], default='UVW')):
        parms_passed = False
    if not (_check_dataset(vis_dataset, imaging_weights_parms['uvw_name'])):
        parms_passed = False

    if not (_check_parms(imaging_weights_parms,
                         'imaging_weight_name', [str],
                         default='IMAGING_WEIGHT')):
        parms_passed = False

    if not (_check_parms(
            imaging_weights_parms,
            'weighting', [str],
            acceptable_data=['natural', 'uniform', 'briggs', 'briggs_abs'],
            default='natural')):
        parms_passed = False

    if imaging_weights_parms['weighting'] == 'briggs_abs':
        if not (_check_parms(imaging_weights_parms,
                             'briggs_abs_noise', [numbers.Number],
                             default=1.0)):
            parms_passed = False

    if not (_check_parms(imaging_weights_parms,
                         'robust', [numbers.Number],
                         default=0.5,
                         acceptable_range=[-2, 2])):
        parms_passed = False

    if imaging_weights_parms['weighting'] != 'natural':
        if not (_check_parms(imaging_weights_parms,
                             'chan_mode', [str],
                             acceptable_data=['cube', 'continuum'],
                             default='cube')):
            parms_passed = False
        if not (_check_parms(imaging_weights_parms,
                             'imsize', [list],
                             list_acceptable_data_types=[int, np.int64],
                             list_len=2)):
            parms_passed = False
        if not (_check_parms(imaging_weights_parms,
                             'cell', [list],
                             list_acceptable_data_types=[numbers.Number],
                             list_len=2)):
            parms_passed = False

    if parms_passed == True:
        imaging_weights_parms['imsize'] = np.array(
            imaging_weights_parms['imsize']).astype(int)

        imaging_weights_parms['cell'] = arc_sec_to_rad * np.array(
            imaging_weights_parms['cell'])
        imaging_weights_parms['cell'][0] = -imaging_weights_parms['cell'][0]

    return parms_passed