class_docstr: tool for converting a function's input signature to an unique key
  
  This keymap serializes objects by converting __repr__ to a string.
  Converting to a string is slower than hashing, however will produce a
  key in all cases.  Some forms of archival storage, like a database,
  may require string keys.  There is not a method to recover the input
  signature from a string key that works in all cases, however this is
  possible for any object where __repr__ effectively mimics __init__.
docstr: initialize the key builder
  
  typed: if True, include type information in the key
  flat: if True, flatten the key to a sequence; if False, use (args, kwds)
  sentinel: marker for separating args and kwds in flattened keys
  encoding: string name of string encoding [default: use python's str]
  
  This keymap stores function args and kwds as (args, kwds) if flat=False,
  or a flattened ``(*args, zip(**kwds))`` if flat=True.  If typed, then
  include a tuple of type information (args, kwds, argstypes, kwdstypes)
  in the generated key.  If a sentinel is given, the sentinel will be
  added to a flattened key to indicate the boundary between args, keys,
  argstypes, and kwdstypes.
  
  Use kelpto.crypto.encodings() to get the names of available string
  encodings.
docstr_tok: ["initialize","the","key","builder","typed",":","if","True",",","include","type","information","in","the","key","flat",":","if","True",",","flatten","the","key","to","a","sequence",";","if","False",",","use","(","args",",","kwds",")","sentinel",":","marker","for","separating","args","and","kwds","in","flattened","keys","encoding",":","string","name","of","string","encoding","[","default",":","use","python","'s","str","]","This","keymap","stores","function","args","and","kwds","as","(","args",",","kwds",")","if","flat=False",",","or","a","flattened","``","(","*","args",",","zip","(","*","*","kwds",")",")","``","if","flat=True",".","If","typed",",","then","include","a","tuple","of","type","information","(","args",",","kwds",",","argstypes",",","kwdstypes",")","in","the","generated","key",".","If","a","sentinel","is","given",",","the","sentinel","will","be","added","to","a","flattened","key","to","indicate","the","boundary","between","args",",","keys",",","argstypes",",","and","kwdstypes",".","Use","kelpto.crypto.encodings","(",")","to","get","the","names","of","available","string","encodings","."]
code: def __init__(
      self, typed=False, flat=True, sentinel=NOSENTINEL, **kwds
  ):
      """initialize the key builder
  
      typed: if True, include type information in the key
      flat: if True, flatten the key to a sequence; if False, use (args, kwds)
      sentinel: marker for separating args and kwds in flattened keys
      encoding: string name of string encoding [default: use python's str]
  
      This keymap stores function args and kwds as (args, kwds) if flat=False,
      or a flattened ``(*args, zip(**kwds))`` if flat=True.  If typed, then
      include a tuple of type information (args, kwds, argstypes, kwdstypes)
      in the generated key.  If a sentinel is given, the sentinel will be
      added to a flattened key to indicate the boundary between args, keys,
      argstypes, and kwdstypes.
  
      Use kelpto.crypto.encodings() to get the names of available string
      encodings.
      """
      self.__type__ = kwds.pop("encoding", None)
      keymap.__init__(
          self, typed=typed, flat=flat, sentinel=sentinel, **kwds
      )
      self.__stub__ = "encoding"  # XXX: unnecessary if unified kwd
      return
  
imports: from copy import copy
  from klepto.crypto import hash, string, pickle
label_desc: Use image node_id 1 to create a new stringmap object from inherited base classes: keymap with example: obj = stringmap(typed, flat, sentinel)