class_docstr: A mutable view to a :obj:`Container` given by a key prefix.
  
  Args:
      prefix (:obj:`bytes`): the prefix that defines the key range of the
          view-container. The resulting container will share an access to
          only records in the `prefix` key range, but with `prefix`-es
          stripped from them.
  
          For example, if the Container contents are:
          `{
              b'e.y': b'012',
              b'meta.x': b'123',
              b'meta.z': b'x',
              b'zzz': b'oOo'
          }`, then `container.view(prefix=b'meta.')` will behave (almost)
          exactly as an Container:
          `{
              b'x': b'123',
              b'z': b'x',
          }`
      container (:obj:`Container`): the parent container to build the view on
docstr: A bi-directional generator to walk over the collection of records on
  any arbitrary order. The `prefix` sent to the generator (lets call it
  a `walker`) seeks for lower-bound key in the collection.
  
  In other words, if the Container contents are:
  `{
      b'e.y': b'012',
      b'meta.x': b'123',
      b'meta.z': b'x',
      b'zzz': b'oOo'
  }` and `walker = container.walk()` then:
  `walker.send(b'meta') == b'meta.x'`, `walker.send(b'e.y') == b'e.y'`
docstr_tok: ["A","bi-directional","generator","to","walk","over","the","collection","of","records","on","any","arbitrary","order",".","The","`","prefix","`","sent","to","the","generator","(","lets","call","it","a","`","walker","`",")","seeks","for","lower-bound","key","in","the","collection",".","In","other","words",",","if","the","Container","contents","are",":","`","{","b","'","e.y","'",":","b'012","'",",","b'meta.x","'",":","b'123","'",",","b'meta.z","'",":","b","'","x","'",",","b'zzz","'",":","b'oOo'","}","`","and","`","walker","=","container.walk","(",")","`","then",":","`","walker.send","(","b'meta","'",")","==","b'meta.x","'","`",",","`","walker.send","(","b","'","e.y","'",")","==","b","'","e.y","'","`"]
code: def walk(self, key: ContainerKey = b""):
      """A bi-directional generator to walk over the collection of records on
      any arbitrary order. The `prefix` sent to the generator (lets call it
      a `walker`) seeks for lower-bound key in the collection.
  
      In other words, if the Container contents are:
      `{
          b'e.y': b'012',
          b'meta.x': b'123',
          b'meta.z': b'x',
          b'zzz': b'oOo'
      }` and `walker = container.walk()` then:
      `walker.send(b'meta') == b'meta.x'`, `walker.send(b'e.y') == b'e.y'`
      """
      path = self.absolute_path(key)
      walker = self.parent.walk(path)
      p = None
      while True:
          if p is None:
              next_key = next(walker)
          else:
              next_key = walker.send(p)
          if next_key is None:
              return
          if path:
              _prefix, _path, next_key = next_key.partition(path)
              # assert not _prefix and _path == path
              if _prefix or _path != path:
                  return
  
          key = yield next_key
          p = self.absolute_path(key)
  
imports: from aim.storage.container import Container, ContainerItemsIterator, ContainerKey, ContainerValue
  from aim.storage.containertreeview import ContainerTreeView
  from typing import Iterator, Tuple
label_desc: Use image node_id 15 for calling the PrefixView obj's underlying member method code with example usage: obj.walk(key) without return types