code: def get_assets_by_taxo(assets, epspath=None):
      
      assets_by_taxo = AccumDict(group_array(assets, 'taxonomy'))
      assets_by_taxo.idxs = numpy.argsort(numpy.concatenate([
          a['ordinal'] for a in assets_by_taxo.values()]))
      assets_by_taxo.eps = {}
      if epspath is None:  # no epsilons
          return assets_by_taxo
      # otherwise read the epsilons and group them by taxonomy
      with hdf5.File(epspath, 'r') as h5:
          dset = h5['epsilon_matrix']
          for taxo, assets in assets_by_taxo.items():
              lst = [dset[aid] for aid in assets['ordinal']]
              assets_by_taxo.eps[taxo] = numpy.array(lst)
      return assets_by_taxo
docs: :param assets: an array of assets
      :param epspath: hdf5 file where the epsilons are (or None)
      :returns: assets_by_taxo with attributes eps and idxs