def METHOD_NAME(
    self, f: IO, attrs: Optional[Dict[str, Any]] = None
) -> 'core.TreeNeuron':
    """Read .nmx buffer into a TreeNeuron.
    NMX files are zip files containing XML-encoded .nml files containing
    data for a single neuron.
    Parameters
    ----------
    f :         IO
                Readable buffer (must be bytes).
    attrs :     dict | None
                Arbitrary attributes to include in the TreeNeuron.
    Returns
    -------
    core.TreeNeuron
    """
    if not isinstance(f.read(0), bytes):
        raise ValueError(f'Expecet bytes, got "{type(f.read(0))}"')
    zip = ZipFile(f)
    for f in zip.filelist:
        if f.filename.endswith('.nml') and 'skeleton' in f.filename:
            attrs['file'] = f.filename
            attrs['id'] = f.filename.split('/')[0]
            return self.read_nml(zip.read(f), attrs=attrs)
    logger.warning(f'Skipped "{f.filename.split("/")[0]}.nmx": failed to '
                   'import skeleton.')