def exporter(name, extensions=None, sniff=None):
name = name.lower()<EOL>if name in exporters:<EOL><INDENT>raise ValueError('<STR_LIT>' % name)<EOL><DEDENT>extensions = (extensions,) if pimms.is_str(extensions) else()            if extensions is None       elsetuple(extensions)<EOL>def _exporter(f):<EOL><INDENT>global exporters<EOL>exporters = exporters.set(name, (f, extensions, sniff))<EOL>setattr(save, name, f)<EOL>return f<EOL><DEDENT>return _exporter<EOL>
@exporter(name) is a decorator that declares that the following function is an file saveing
  function that should be registered with the neuropythy save function. See also the
  forget_exporter function.

Any exporter function must take, as its first argument, a filename and, as its second argument,
the object to be exported; after that it may take any number of keyword arguments, but no other
non-keyword arguments. These keyword arguments can be passed to the neuropythy save function.

The following options are accepted:
  * extensions (default: None) may be a string or a collection of strings that indicate possible
    file extensions for files of this type.
  * sniff (default: None) may optionally be a function f(s, d) that yields True when the given
    string s is a filename for a file of this type and/or the given object d is an object that
    can be exported as this type. If no sniff is given, this type can still be detected by
    running all exporters exhaustively and catching any raised exceptions; though this may
    result in partial files written to disk, so is not used by save.