class_docstr: Write out FeatureSets to files on disk.
  
  This is the base class used to create featureset writers for different
  file types.
  
  Parameters
  ----------
  path : :class:`skll.types.PathOrStr`
      A path to the feature file we would like to create. The suffix
      to this filename must be ``.arff``, ``.csv``, ``.jsonlines``,
      ``.libsvm``, ``.ndj``, or ``.tsv``. If ``subsets``
      is not ``None``, when calling the ``write()`` method, path is
      assumed to be a string containing the path to the directory to
      write the feature files with an additional file extension
      specifying the file type. For example ``/foo/.csv``.
  
  feature_set : :class:`skll.data.featureset.FeatureSet`
      The ``FeatureSet`` instance to dump to the file.
  
  quiet : bool, default=True
      Do not print "Writing..." status message to stderr.
  
  subsets : Optional[Dict[str, List[str]]], default=None
      A mapping from subset names to lists of feature names
      that are included in those sets. If given, a feature
      file will be written for every subset (with the name
      containing the subset name as suffix to ``path``).
      Note, since string- valued features are automatically
      converted into boolean features with names of the form
      ``FEATURE_NAME=STRING_VALUE``, when doing the
      filtering, the portion before the ``=`` is all that's
      used for matching. Therefore, you do not need to
      enumerate all of these boolean feature names in your
      mapping.
  
  logger : Optional[logging.Logger], default=None
      A logger instance to use to log messages instead of creating
      a new one by default.
class_docstr_tok: ["Write","out","FeatureSets","to","files","on","disk",".","This","is","the","base","class","used","to","create","featureset","writers","for","different","file","types",".","Parameters","--","--","--","--","--","path",":",":","class",":","`","skll.types.PathOrStr","`","A","path","to","the","feature","file","we","would","like","to","create",".","The","suffix","to","this","filename","must","be","``",".arff","``",",","``",".csv","``",",","``",".jsonlines","``",",","``",".libsvm","``",",","``",".ndj","``",",","or","``",".tsv","``",".","If","``","subsets","``","is","not","``","None","``",",","when","calling","the","``","write","(",")","``","method",",","path","is","assumed","to","be","a","string","containing","the","path","to","the","directory","to","write","the","feature","files","with","an","additional","file","extension","specifying","the","file","type",".","For","example","``","\/foo\/.csv","``",".","feature_set",":",":","class",":","`","skll.data.featureset.FeatureSet","`","The","``","FeatureSet","``","instance","to","dump","to","the","file",".","quiet",":","bool",",","default=True","Do","not","print","``","Writing","...","''","status","message","to","stderr",".","subsets",":","Optional","[","Dict","[","str",",","List","[","str","]","]","]",",","default=None","A","mapping","from","subset","names","to","lists","of","feature","names","that","are","included","in","those","sets",".","If","given",",","a","feature","file","will","be","written","for","every","subset","(","with","the","name","containing","the","subset","name","as","suffix","to","``","path","``",")",".","Note",",","since","string-","valued","features","are","automatically","converted","into","boolean","features","with","names","of","the","form","``","FEATURE_NAME=STRING_VALUE","``",",","when","doing","the","filtering",",","the","portion","before","the","``","=","``","is","all","that's","used","for","matching",".","Therefore",",","you","do","not","need","to","enumerate","all","of","these","boolean","feature","names","in","your","mapping",".","logger",":","Optional","[","logging.Logger","]",",","default=None","A","logger","instance","to","use","to","log","messages","instead","of","creating","a","new","one","by","default","."]
docstr: Retrieve object of ``Writer`` sub-class appropriate for given path.
  
  Parameters
  ----------
  path : :class:`skll.types.PathOrStr`
      A path to the feature file we would like to create. The
      suffix to this filename must be ``.arff``, ``.csv``,
      ``.jsonlines``, ``.libsvm``, ``.ndj``, or
      ``.tsv``. If ``subsets`` is not ``None``, when calling the
      ``write()`` method, path is assumed to be a string
      containing the path to the directory to write the feature
      files with an additional file extension specifying the
      file type. For example ``/foo/.csv``.
  
  feature_set : :class:`skll.data.featureset.FeatureSet`
      The ``FeatureSet`` instance to dump to the output file.
  
  kwargs : Optional[Dict[str, Any]]
      The keyword arguments for ``for_path`` are the same as
      the initializer for the desired ``Writer`` subclass.
  
  Returns
  -------
  writer : :class:`skll.data.Writer`
      New instance of the Writer sub-class that is
      appropriate for the given path.
docstr_tok: ["Retrieve","object","of","``","Writer","``","sub-class","appropriate","for","given","path",".","Parameters","--","--","--","--","--","path",":",":","class",":","`","skll.types.PathOrStr","`","A","path","to","the","feature","file","we","would","like","to","create",".","The","suffix","to","this","filename","must","be","``",".arff","``",",","``",".csv","``",",","``",".jsonlines","``",",","``",".libsvm","``",",","``",".ndj","``",",","or","``",".tsv","``",".","If","``","subsets","``","is","not","``","None","``",",","when","calling","the","``","write","(",")","``","method",",","path","is","assumed","to","be","a","string","containing","the","path","to","the","directory","to","write","the","feature","files","with","an","additional","file","extension","specifying","the","file","type",".","For","example","``","\/foo\/.csv","``",".","feature_set",":",":","class",":","`","skll.data.featureset.FeatureSet","`","The","``","FeatureSet","``","instance","to","dump","to","the","output","file",".","kwargs",":","Optional","[","Dict","[","str",",","Any","]","]","The","keyword","arguments","for","``","for_path","``","are","the","same","as","the","initializer","for","the","desired","``","Writer","``","subclass",".","Returns","--","--","--","-","writer",":",":","class",":","`","skll.data.Writer","`","New","instance","of","the","Writer","sub-class","that","is","appropriate","for","the","given","path","."]
code: def for_path(
      cls, path: PathOrStr, feature_set: FeatureSet, **kwargs
  ) -> "Writer":
      """
      Retrieve object of ``Writer`` sub-class appropriate for given path.
  
      Parameters
      ----------
      path : :class:`skll.types.PathOrStr`
          A path to the feature file we would like to create. The
          suffix to this filename must be ``.arff``, ``.csv``,
          ``.jsonlines``, ``.libsvm``, ``.ndj``, or
          ``.tsv``. If ``subsets`` is not ``None``, when calling the
          ``write()`` method, path is assumed to be a string
          containing the path to the directory to write the feature
          files with an additional file extension specifying the
          file type. For example ``/foo/.csv``.
  
      feature_set : :class:`skll.data.featureset.FeatureSet`
          The ``FeatureSet`` instance to dump to the output file.
  
      kwargs : Optional[Dict[str, Any]]
          The keyword arguments for ``for_path`` are the same as
          the initializer for the desired ``Writer`` subclass.
  
      Returns
      -------
      writer : :class:`skll.data.Writer`
          New instance of the Writer sub-class that is
          appropriate for the given path.
      """
      # Get lowercase extension for file extension checking
      # NOTE: the reason we are doing this complicated gymnastics
      # instead of just using `path.suffix` is because sometimes
      # `path` may look like `foo/.jsonlines` when we are writing
      # subsets so we need to handle that edge case
      path = Path(path)
      stem, suffix = path.stem, path.suffix
      if stem.startswith(".") and not suffix:
          ext = stem.lower()
      else:
          ext = suffix.lower()
      return EXT_TO_WRITER[ext](path, feature_set, **kwargs)
  
imports: import json
  import logging
  import sys
  from csv import DictWriter
  from decimal import Decimal
  from pathlib import Path
  from typing import IO, Any, Dict, List, Optional, Set, Tuple, Union
  import numpy
  import pandas
  from scipy.sparse import issparse
  from sklearn.feature_extraction import DictVectorizer, FeatureHasher
  from skll.data import FeatureSet
  from skll.types import FeatGenerator, FeatureDict, IdType, LabelType, PathOrStr
label_desc: Use image node_id 2 for calling the Writer obj's underlying member method code with example usage: obj.for_path(cls, path, feature_set) and returns: EXT_TO_WRITER