docs: def _get_dsnames(cls, data, ignore_keys=['attrs', 'plotter', 'ds'],
                       concat_dim=False):
          """Recursive method to get all the file names out of a dictionary
          `data` created with the :meth`array_info` method"""
          def filter_ignores(item):
              return item[0] not in ignore_keys and isinstance(item[1], dict)
          if 'fname' in data:
              return {tuple(
                  [data['fname'], data['store']] +
                  ([data.get('concat_dim')] if concat_dim else []))}
          return set(chain(*map(partial(cls._get_dsnames, concat_dim=concat_dim,
                                        ignore_keys=ignore_keys),
                                dict(filter(filter_ignores,
                                            six.iteritems(data))).values())))