# Licensed under a 3-clause BSD style license - see LICENSE.rst"""Table helper utilities."""importnumpyasnpfromastropy.tableimportTablefromastropy.unitsimportQuantityfrom.deprecationimportdeprecatedfrom.unitsimportstandardise_unit__all__=["hstack_columns","table_from_row_data","table_row_to_dict","table_standardise_units_copy","table_standardise_units_inplace",]
[docs]defhstack_columns(table,table_other):"""Stack the column data horizontally Parameters ---------- table : `~astropy.table.Table` Input table table_other : `~astropy.table.Table` Other input table Returns ------- stacked : `~astropy.table.Table` Stacked table """stacked=Table()forcolumnintable.colnames:data=np.hstack([table[column].data[0],table_other[column].data[0]])stacked[column]=data[np.newaxis,:]returnstacked
[docs]deftable_standardise_units_copy(table):"""Standardise units for all columns in a table in a copy. Calls `~gammapy.utils.units.standardise_unit`. Parameters ---------- table : `~astropy.table.Table` Input table (won't be modified) Returns ------- table : `~astropy.table.Table` Copy of the input table with standardised column units """# Note: we could add an `inplace` option (or variant of this function)# See https://github.com/astropy/astropy/issues/6098table=Table(table)returntable_standardise_units_inplace(table)
[docs]deftable_standardise_units_inplace(table):"""Standardise units for all columns in a table in place."""forcolumnintable.columns.values():ifcolumn.unit:column.unit=standardise_unit(column.unit)returntable
[docs]deftable_row_to_dict(row,make_quantity=True):"""Make one source data dict. Parameters ---------- row : `~astropy.table.Row` Row make_quantity : bool Make quantity values for columns with units Returns ------- data : `dict` Row data """data={}forname,colinrow.columns.items():val=row[name]ifmake_quantityandcol.unit:val=Quantity(val,unit=col.unit)data[name]=valreturndata
[docs]@deprecated("v1.1",alternative="astropy.table.Table")deftable_from_row_data(rows,**kwargs):"""Helper function to create table objects from row data. Works with quantities. Parameters ---------- rows : list List of row data (each row a dict) """table=Table(**kwargs)iflen(rows)==0:returntablecolnames=list(rows[0].keys())fornameincolnames:coldata=[_[name]for_inrows]ifisinstance(rows[0][name],Quantity):coldata=Quantity(coldata,unit=rows[0][name].unit)table[name]=coldatareturntable