示例#1
0
 def _test_frame_read_format(self, format):
     # test with specific format
     try:
         self.frame_read(format=format)
     except ImportError as e:
         self.skipTest(str(e))
     else:
         # test again with no format argument
         # but we need to move other readers out of the way first
         try:
             read_ = get_reader('gwf', TimeSeries)
         except Exception:
             pass
         else:
             register_reader(
                 'gwf',
                 TimeSeries,
                 get_reader(format, TimeSeries),
                 force=True)
             try:
                 self.frame_read()
             finally:
                 register_reader('gwf', TimeSeries, read_, force=True)
         # test errors
         self.assertRaises(
             ValueError,
             self.TEST_CLASS.read,
             Cache(),
             self.channel,
             format=format)
示例#2
0
def test_inherited_registration():
    # check that multi-generation inheritance works properly,
    # meaning that a child inherits from parents before
    # grandparents, see astropy/astropy#7156

    class Child1(Table):
        pass

    class Child2(Child1):
        pass

    def _read():
        return Table()

    def _read1():
        return Child1()

    # check that reader gets inherited
    io_registry.register_reader('test', Table, _read)
    assert io_registry.get_reader('test', Child2) is _read

    # check that nearest ancestor is identified
    # (i.e. that the reader for Child2 is the registered method
    #  for Child1, and not Table)
    io_registry.register_reader('test', Child1, _read1)
    assert io_registry.get_reader('test', Child2) is _read1
示例#3
0
def test_inherited_registration():
    # check that multi-generation inheritance works properly,
    # meaning that a child inherits from parents before
    # grandparents, see astropy/astropy#7156

    class Child1(Table):
        pass

    class Child2(Child1):
        pass

    def _read():
        return Table()

    def _read1():
        return Child1()

    # check that reader gets inherited
    io_registry.register_reader('test', Table, _read)
    assert io_registry.get_reader('test', Child2) is _read

    # check that nearest ancestor is identified
    # (i.e. that the reader for Child2 is the registered method
    #  for Child1, and not Table)
    io_registry.register_reader('test', Child1, _read1)
    assert io_registry.get_reader('test', Child2) is _read1
示例#4
0
    def _test_frame_read_format(self, format):
        # test with specific format
        try:
            self.frame_read(format=format)
        except ImportError as e:
            self.skipTest(str(e))
        else:
            # test again with no format argument
            # but we need to move other readers out of the way first
            try:
                read_ = get_reader('gwf', TimeSeries)
            except Exception:
                pass
            else:
                register_reader('gwf',
                                TimeSeries,
                                get_reader(format, TimeSeries),
                                force=True)
                try:
                    self.frame_read()
                finally:
                    register_reader('gwf', TimeSeries, read_, force=True)
            # test empty Cache()
            self.assertRaises(ValueError,
                              self.TEST_CLASS.read,
                              Cache(),
                              self.channel,
                              format=format)

            # test cache method with `nproc=2`
            c = Cache.from_urls([TEST_GWF_FILE])
            ts = self.TEST_CLASS.read(c, self.channel, nproc=2, format=format)
示例#5
0
def inherit_io_registrations(cls):
    parent = cls.__mro__[1]
    for row in registry.get_formats(data_class=parent):
        name = row["Format"]
        # read
        if row["Read"].lower() == "yes":
            registry.register_reader(
                name,
                cls,
                registry.get_reader(name, parent),
                force=False,
            )
        # write
        if row["Write"].lower() == "yes":
            registry.register_writer(
                name,
                cls,
                registry.get_writer(name, parent),
                force=False,
            )
        # identify
        if row["Auto-identify"].lower() == "yes":
            registry.register_identifier(
                name,
                cls,
                registry._identifiers[(name, parent)],
                force=False,
            )
    return cls
示例#6
0
文件: utils.py 项目: rngeorge/gwpy
def decorate_registered_reader(
    name,
    data_class=EventTable,
    columns=True,
    selection=True,
):
    """Wrap an existing registered reader to use GWpy's input decorators

    Parameters
    ----------
    name : `str`
        the name of the registered format

    data_class : `type`, optional
        the class for whom the format is registered

    columns : `bool`, optional
        use the `read_with_columns` decorator

    selection : `bool`, optional
        use the `read_with_selection` decorator
    """
    reader = registry.get_reader(name, data_class)
    wrapped = (
        read_with_columns(  # use ``columns``
            read_with_selection(  # use ``selection``
                reader), ))
    return registry.register_reader(name, data_class, wrapped, force=True)
示例#7
0
def decorate_registered_reader(
        name,
        data_class=EventTable,
        columns=True,
        selection=True,
):
    """Wrap an existing registered reader to use GWpy's input decorators

    Parameters
    ----------
    name : `str`
        the name of the registered format

    data_class : `type`, optional
        the class for whom the format is registered

    columns : `bool`, optional
        use the `read_with_columns` decorator

    selection : `bool`, optional
        use the `read_with_selection` decorator
    """
    reader = registry.get_reader(name, data_class)
    wrapped = (  # noqa
        read_with_columns(  # use ``columns``
        read_with_selection(  # use ``selection``
            reader
        ))
    )
    return registry.register_reader(name, data_class, wrapped, force=True)
示例#8
0
    def _create_loader_filters(self):
        # Create a dictionary mapping the registry loader names to the
        # qt-specified loader names
        def compose_filter_string(reader):
            """
            Generates the Qt loader string to pass to the file load dialog.
            """
            return ' '.join(['*.{}'.format(y) for y in reader.extensions]
                            if reader.extensions is not None else '*')

        loader_name_map = {
            '{} ({})'.format(
                x['Format'], compose_filter_string(
                    get_reader(x['Format'], SpectrumList))): x['Format']
            for x in io_registry.get_formats(SpectrumList) if x['Read'] == 'Yes'}

        # Include an auto load function that lets the io machinery find the
        # most appropriate loader to use
        auto_filter = 'Auto (*)'
        loader_name_map[auto_filter] = None

        filters = list(loader_name_map.keys())
        # Make sure that the "Auto (*)" loader shows up first. Being a bit
        # pedantic about this even though we can probably just rely on
        # dictionary ordering here.
        index = filters.index(auto_filter)
        filters.insert(0, filters.pop(index))

        return filters, loader_name_map
示例#9
0
文件: star.py 项目: pyschild/pyschild
def inherit_table_io(cls):
    """Inherit file I/O registrations from `~astropy.table.Table`

    This decorator is modeled on `~gwpy.table.inherit_io_registrations`,
    authored by Duncan Macleod, for more see https://gwpy.github.io
    """
    for row in registry.get_formats(data_class=Table):
        name = row["Format"]
        # read
        if row["Read"].lower() == "yes":
            registry.register_reader(
                name,
                cls,
                registry.get_reader(name, Table),
                force=False,
            )
        # write
        if row["Write"].lower() == "yes":
            registry.register_writer(
                name,
                cls,
                registry.get_writer(name, Table),
                force=False,
            )
        # identify
        if row["Auto-identify"].lower() == "yes":
            registry.register_identifier(
                name,
                cls,
                registry._identifiers[(name, Table)],
                force=False,
            )
    return cls
示例#10
0
    def _create_loader_filters(self):
        # Create a dictionary mapping the registry loader names to the
        # qt-specified loader names
        def compose_filter_string(reader):
            """
            Generates the Qt loader string to pass to the file load dialog.
            """
            return ' '.join(['*.{}'.format(y)
                             for y in reader.extensions] if reader.
                            extensions is not None else '*')

        loader_name_map = {
            '{} ({})'.format(
                x['Format'],
                compose_filter_string(get_reader(x['Format'], SpectrumList))):
            x['Format']
            for x in io_registry.get_formats(SpectrumList)
            if x['Read'] == 'Yes'
        }

        # Include an auto load function that lets the io machinery find the
        # most appropriate loader to use
        auto_filter = 'Auto (*)'
        loader_name_map[auto_filter] = None

        filters = list(loader_name_map.keys())
        # Make sure that the "Auto (*)" loader shows up first. Being a bit
        # pedantic about this even though we can probably just rely on
        # dictionary ordering here.
        index = filters.index(auto_filter)
        filters.insert(0, filters.pop(index))

        return filters, loader_name_map
示例#11
0
def inherit_io_registrations(cls):
    parent = cls.__mro__[1]
    for row in registry.get_formats(data_class=parent):
        name = row["Format"]
        # read
        if row["Read"].lower() == "yes":
            registry.register_reader(
                name,
                cls,
                registry.get_reader(name, parent),
                force=False,
            )
        # write
        if row["Write"].lower() == "yes":
            registry.register_writer(
                name,
                cls,
                registry.get_writer(name, parent),
                force=False,
            )
        # identify
        if row["Auto-identify"].lower() == "yes":
            registry.register_identifier(
                name,
                cls,
                registry._identifiers[(name, parent)],
                force=False,
            )
    return cls
示例#12
0
文件: etg.py 项目: pvasired/gwsumm
 def __init__(self, name, start, end, channel=None, etg=None, table=None,
              cache=None, url=None, **kwargs):
     """Create a new `EventTriggerTab`
     """
     super(EventTriggerTab, self).__init__(name, start, end, **kwargs)
     self.channel = channel and get_channel(channel) or None
     self.cache = cache
     self.url = url
     self.error = dict()
     # parse ETG and LIGO_LW table class
     if etg is None:
         etg = self.name
     self.etg = etg
     if table is None or isinstance(table, str):
         tablename = isinstance(table, str) and table or self.etg
         try:
             table = get_etg_table(tablename)
         except KeyError as e:
             e.args = ("Cannot automatically determine LIGO_LW table for "
                       "etg %r, please specify in configuration file or "
                       "when creating EventTriggerTab" % tablename,)
             raise
     # register custom readers for this type
     try:
         register_etg_table(self.etg.lower(), table)
     except KeyError:
         pass
     try:
         register_reader(self.etg.lower(), table,
                         get_reader('ligolw', table))
     except Exception as e:
         if 'already defined' in str(e):
             pass
         else:
             raise
示例#13
0
    def read_file(self, file_name, file_filter):
        """
        Convenience method that directly reads a spectrum from a file.

        Parameters
        ----------
        file_name: str
            Name of the file to read.

        file_filter: str
            Type of file to read. If `Auto`, try all known formats.

        Returns
        -------
        data: Spectrum1DRef
            The file's data or None if no known formats are found.

        Notes
        -----
        This exists mostly to facilitate development workflow. In time it
        could be augmented to support fancier features such as wildcards,
        file lists, mixed file types, and the like.
        Note that the filter string is hard coded here; its details might
        depend on the intrincacies of the registries, loaders, and data
        classes. In other words, this is brittle code.
        """
        file_filter = 'Auto (*)' if file_filter is None else file_filter

        logging.info("Attempting to read file {} with {}.".format(
            file_name, file_filter))

        if not (file_name and file_filter):
            return

        file_name = str(file_name)
        file_ext = os.path.splitext(file_name)[-1]
        all_formats = io_registry.get_formats(Spectrum1DRef)['Format']

        if file_filter == 'Auto (*)':
            #-- sort loaders by priorty given in the definition
            all_priority = [
                getattr(io_registry.get_reader(fmt, Spectrum1DRef), 'priority',
                        0) for fmt in all_formats
            ]
            all_registry = sorted(zip(all_formats, all_priority),
                                  key=lambda item: item[1],
                                  reverse=True)
            all_formats = [item[0] for item in all_registry]
        else:
            all_formats = [x for x in all_formats if file_filter in x]

        for format in all_formats:
            logging.info("Trying to load with {}".format(format))
            try:
                data = Spectrum1DRef.read(file_name, format=format)
                return data
            except Exception as e:
                logging.error("Incompatible loader for selected data: {"
                              "} because {}".format(file_filter, e))
示例#14
0
    def _on_load_data(self):
        """
        When the user loads a data file, this method is triggered. It provides
        a file open dialog and from the dialog attempts to create a new
        :class:`~specutils.SpectrumList` object and thereafter adds the
        contents to the data model.
        """

        # Create a dictionary mapping the registry loader names to the
        # qt-specified loader names
        def compose_filter_string(reader):
            return ' '.join(['*.{}'.format(y)
                             for y in reader.extensions] if reader.
                            extensions is not None else '*')

        loader_name_map = {
            '{} ({})'.format(
                x['Format'],
                compose_filter_string(get_reader(x['Format'], SpectrumList))):
            x['Format']
            for x in io_registry.get_formats(SpectrumList)
            if x['Read'] == 'Yes'
        }

        # Include an auto load function that lets the io machinery find the
        # most appropriate loader to use
        loader_name_map['Auto (*)'] = None

        # This ensures that users actively have to select a file type before
        # being able to select a file. This should make it harder to
        # accidentally load a file using the wrong type, which results in weird
        # errors.
        filters = ['Select loader...'] + list(loader_name_map.keys())

        file_path, fmt = compat.getopenfilename(
            parent=self,
            basedir=os.getcwd(),
            caption="Load spectral data file",
            filters=";;".join(filters))

        if not file_path:
            return

        self.load_data(file_path, file_loader=loader_name_map[fmt])
示例#15
0
 def __init__(self,
              name,
              start,
              end,
              channel=None,
              etg=None,
              table=None,
              cache=None,
              url=None,
              **kwargs):
     """Create a new `EventTriggerTab`
     """
     super(EventTriggerTab, self).__init__(name, start, end, **kwargs)
     self.channel = channel and get_channel(channel) or None
     self.cache = cache
     self.url = url
     self.error = dict()
     # parse ETG and LIGO_LW table class
     if etg is None:
         etg = self.name
     self.etg = etg
     if table is None or isinstance(table, str):
         tablename = isinstance(table, str) and table or self.etg
         try:
             table = get_etg_table(tablename)
         except KeyError as e:
             e.args = ("Cannot automatically determine LIGO_LW table for "
                       "etg %r, please specify in configuration file or "
                       "when creating EventTriggerTab" % tablename, )
             raise
     # register custom readers for this type
     try:
         register_etg_table(self.etg.lower(), table)
     except KeyError:
         pass
     try:
         register_reader(self.etg.lower(), table,
                         get_reader('ligolw', table))
     except Exception as e:
         if 'already defined' in str(e):
             pass
         else:
             raise
示例#16
0
def test_register_reader():

    io_registry.register_reader('test1', TestData, empty_reader)
    io_registry.register_reader('test2', TestData, empty_reader)

    assert io_registry.get_reader('test1', TestData) == empty_reader
    assert io_registry.get_reader('test2', TestData) == empty_reader

    io_registry.unregister_reader('test1', TestData)

    with pytest.raises(io_registry.IORegistryError):
        io_registry.get_reader('test1', TestData)
    assert io_registry.get_reader('test2', TestData) == empty_reader

    io_registry.unregister_reader('test2', TestData)

    with pytest.raises(io_registry.IORegistryError):
        io_registry.get_reader('test2', TestData)
示例#17
0
def test_register_reader():

    io_registry.register_reader('test1', TestData, empty_reader)
    io_registry.register_reader('test2', TestData, empty_reader)

    assert io_registry.get_reader('test1', TestData) == empty_reader
    assert io_registry.get_reader('test2', TestData) == empty_reader

    io_registry.unregister_reader('test1', TestData)

    with pytest.raises(io_registry.IORegistryError):
        io_registry.get_reader('test1', TestData)
    assert io_registry.get_reader('test2', TestData) == empty_reader

    io_registry.unregister_reader('test2', TestData)

    with pytest.raises(io_registry.IORegistryError):
        io_registry.get_reader('test2', TestData)
示例#18
0
文件: __init__.py 项目: stefco/gwpy
def register_library_format(container, library):
    """Register methods for the given library format

    E.g. for lalframe this functions creates methods and registers them
    for the ``lalframe`` format name.

    This format has been deprecated and will be removed prior to the 1.0
    release in favour of the ``gwf.<library>`` contention. All this method
    does is create directes from `format='<library'` to
    `format=gwf.<library>'`.

    Parameters
    ----------
    container : `Series`, `dict`
        series class or series dict class to register

    library : `str`
        name of frame library
    """
    fmt = 'gwf.%s' % library
    reader = get_reader(fmt, container)
    writer = get_writer(fmt, container)

    def read_(*args, **kwargs):
        warnings.warn("Reading with format=%r is deprecated and will be "
                      "disabled in an upcoming release, please use "
                      "format=%r instead" % (library, fmt),
                      DeprecationWarning)
        return reader(*args, **kwargs)

    def write_(*args, **kwargs):
        warnings.warn("Writing with format=%r is deprecated and will be "
                      "disabled in an upcoming release, please use "
                      "format=%r instead" % (library, fmt),
                      DeprecationWarning)
        return writer(*args, **kwargs)

    register_reader(library, container, read_)
    register_writer(library, container, write_)
示例#19
0
def register_library_format(container, library):
    """Register methods for the given library format

    E.g. for lalframe this functions creates methods and registers them
    for the ``lalframe`` format name.

    This format has been deprecated and will be removed prior to the 1.0
    release in favour of the ``gwf.<library>`` contention. All this method
    does is create directes from `format='<library'` to
    `format=gwf.<library>'`.

    Parameters
    ----------
    container : `Series`, `dict`
        series class or series dict class to register

    library : `str`
        name of frame library
    """
    fmt = 'gwf.%s' % library
    reader = get_reader(fmt, container)
    writer = get_writer(fmt, container)

    def read_(*args, **kwargs):
        warnings.warn(
            "Reading with format=%r is deprecated and will be "
            "disabled in an upcoming release, please use "
            "format=%r instead" % (library, fmt), DeprecationWarning)
        return reader(*args, **kwargs)

    def write_(*args, **kwargs):
        warnings.warn(
            "Writing with format=%r is deprecated and will be "
            "disabled in an upcoming release, please use "
            "format=%r instead" % (library, fmt), DeprecationWarning)
        return writer(*args, **kwargs)

    register_reader(library, container, read_)
    register_writer(library, container, write_)
示例#20
0
def test_get_reader_invalid():
    with pytest.raises(io_registry.IORegistryError) as exc:
        io_registry.get_reader('test', TestData)
    assert str(exc.value).startswith(
        "No reader defined for format 'test' and class 'TestData'")
示例#21
0
def test_get_reader_invalid():
    with pytest.raises(io_registry.IORegistryError) as exc:
        io_registry.get_reader('test', TestData)
    assert str(exc.value).startswith(
        "No reader defined for format 'test' and class 'TestData'")
示例#22
0
 def __init__(self, *args, **kwargs):
     super(DailyAhopeTab, self).__init__(*args, **kwargs)
     register_etg_table(self.name.lower(), SnglInspiralTable)
     register_reader(self.name.lower(), SnglInspiralTable,
                     get_reader('ligolw', SnglInspiralTable))
示例#23
0
                page.add(str(html.data_table(headers, data, table='data')))

            if self.subplots:
                page.hr(class_='row-divider')
                page.h1('Sub-plots')
                layout = get_mode() == MODE_ENUM['WEEK'] and [7] or [4]
                plist = [p for p in self.subplots if p.state in [state, None]]
                page.add(str(self.scaffold_plots(plots=plist, state=state,
                                                 layout=layout)))

                # link full results
                page.hr(class_='row-divider')
                page.div(class_='btn-group')
                page.a('Click here for the full Daily Ahope results',
                       href=self.ihopepage, rel='external', target='_blank',
                       class_='btn btn-default btn-info btn-xl')
                page.div.close()
                page.hr(class_='row-divider')

        # write to file
        idx = self.states.index(state)
        with open(self.frames[idx], 'w') as fobj:
            fobj.write(str(page))
        return self.frames[idx]

register_tab(DailyAhopeTab)
register_tab(DailyAhopeTab, name='archived-daily-ihope')

register_reader('daily ahope', SnglInspiralTable,
                get_reader('ligolw', SnglInspiralTable))
示例#24
0
 def __init__(self, *args, **kwargs):
     super(DailyAhopeTab, self).__init__(*args, **kwargs)
     register_etg_table(self.name.lower(), SnglInspiralTable)
     register_reader(self.name.lower(), SnglInspiralTable,
                     get_reader('ligolw', SnglInspiralTable))
示例#25
0
文件: __init__.py 项目: stefco/gwpy
 def read_(*args, **kwargs):
     fmt = 'gwf.{}'.format(get_default_gwf_api())
     reader = get_reader(fmt, container)
     return reader(*args, **kwargs)
示例#26
0
文件: __init__.py 项目: rngeorge/gwpy
 def read_(*args, **kwargs):
     fmt = 'gwf.{}'.format(get_default_gwf_api())
     reader = get_reader(fmt, container)
     return reader(*args, **kwargs)
示例#27
0
                plist = [p for p in self.subplots if p.state in [state, None]]
                page.add(
                    str(
                        self.scaffold_plots(plots=plist,
                                            state=state,
                                            layout=layout)))

                # link full results
                page.hr(class_='row-divider')
                page.div(class_='btn-group')
                page.a('Click here for the full Daily Ahope results',
                       href=self.ihopepage,
                       rel='external',
                       target='_blank',
                       class_='btn btn-default btn-info btn-xl')
                page.div.close()
                page.hr(class_='row-divider')

        # write to file
        idx = self.states.index(state)
        with open(self.frames[idx], 'w') as fobj:
            fobj.write(str(page))
        return self.frames[idx]


register_tab(DailyAhopeTab)
register_tab(DailyAhopeTab, name='archived-daily-ihope')

register_reader('daily ahope', SnglInspiralTable,
                get_reader('ligolw', SnglInspiralTable))