Source code for pycube.ancillary.cleaning_lists
""" Module that performs some lists massaging to work well with arg.parser
"""
import numpy as np
from astropy.table import MaskedColumn
import astropy.units as u
from pycube import msgs
from pycube.ancillary import checks
[docs]def make_list_of_fits_files(args_input, verify_fits=False):
r"""Cleaning an input list of fits files
Args:
args_input (list): input list of fits files that will be checked (usually is coming from `parse_arguments()` in
a script)
verify_fits (bool): if set to `True`, it will verify that the fits file is complaint to the FITS standard
Returns:
list: list containing all the valid fits files given in input
"""
list_of_fits_files = []
if not isinstance(args_input, list):
args_input_files: list = [args_input]
else:
args_input_files: list = args_input
for args_input_file in args_input_files:
if checks.fits_file_is_valid(args_input_file, overwrite=False, verify_fits=verify_fits):
list_of_fits_files.append(args_input_file)
else:
msgs.warning('{} excluded because not a valid fits file'.format(args_input_file))
if len(list_of_fits_files) == 0:
msgs.error('No valid fits files present')
return list_of_fits_files
[docs]def from_element_to_list(element, element_type=str):
r"""Given an element it returns a list containing the element
It also checks all the elements in the list have the same type defined by `element_type`
Args:
element (any): element that will be put in the list
element_type (any): type of the element that should be contained in the list
Returns:
list: list containing `element`
"""
if element is None:
return None
elif isinstance(element, list):
for element_in_list in element:
assert isinstance(element_in_list, element_type), r'{} must be a {}'.format(element_in_list, element_type)
return element
elif isinstance(element, np.ndarray):
element_list: list = element.tolist()
for element_in_list in element_list:
assert isinstance(element_in_list, element_type), r'{} must be a {}'.format(element_in_list, element_type)
return element_list
elif isinstance(element, MaskedColumn):
element_list = element.data.data.tolist()
for element_in_list in element_list:
assert isinstance(element_in_list, element_type), r'{} must be a {}'.format(element_in_list, element_type)
return element_list
elif isinstance(element, element_type):
return [element]
else:
msgs.error('Not valid type for: {}'.format(element))
return
[docs]def from_element_to_list_of_quantities(element, unit=None):
r"""Convert an input into a list of `astropy.units.Quantity`
Args:
element (int, float, np.ndarray, Quantity object, list): element that will be put in the list
unit (UnitBase instance): An object that represents the unit to be associated with the input value
Returns:
list: list of quantities in the format `element`*`unit`
"""
assert isinstance(unit, u.UnitBase), r'{} not a valid astropy units'.format(unit)
if isinstance(element, int):
return [float(element)*unit]
elif isinstance(element, float):
return [element*unit]
elif isinstance(element, np.ndarray) and not isinstance(element, u.Quantity):
element_list_clean = []
element_list: list = np.copy(element).tolist()
for element_in_list in element_list:
element_list_clean.append(element_in_list*unit)
return element_list_clean
elif isinstance(element, u.Quantity):
element_list_clean = []
element_converted = np.copy(element).to(unit)
for element_in_list in np.nditer(element_converted):
print(element_in_list)
element_list_clean.append(element_in_list*unit)
return element_list_clean
elif isinstance(element, list):
element_list_clean = []
for element_in_list in element:
if isinstance(element_in_list, u.Quantity):
element_list_clean.append(element_in_list.to(unit))
else:
element_list_clean.append(element_in_list*unit)
return element_list_clean
else:
msgs.error('The input cannot be converted into a list of quantities')
return