class_docstr: Holds buffers in a dictionary.
  
  BufferDict can be indexed like a regular Python dictionary, but buffers it
  contains are properly registered, and will be visible by all Module methods.
  
  :class:`~torch.nn.BufferDict` is an **ordered** dictionary that respects
  
  * the order of insertion, and
  
  * in :meth:`~torch.nn.BufferDict.update`, the order of the merged ``OrderedDict``
    or another :class:`~torch.nn.BufferDict` (the argument to
    :meth:`~torch.nn.BufferDict.update`).
  
  Note that :meth:`~torch.nn.BufferDict.update` with other unordered mapping
  types (e.g., Python's plain ``dict``) does not preserve the order of the
  merged mapping.
  
  Args:
      buffers (iterable, optional): a mapping (dictionary) of
          (string : :class:`~torch.Tensor`) or an iterable of key-value pairs
          of type (string, :class:`~torch.Tensor`)
  
  Example::
  
      class MyModule(nn.Module):
          def __init__(self):
              super(MyModule, self).__init__()
              self.buffers = nn.BufferDict({
                      'left': torch.randn(5, 10),
                      'right': torch.randn(5, 10)
              })
  
          def forward(self, x, choice):
              x = self.buffers[choice].mm(x)
              return x
code: def __len__(self):
      return len(self._buffers)
  
imports: from __future__ import annotations
  import collections
  from collections import OrderedDict
  import torch
  from torch.nn import Module
label_desc: Use image node_id 5 for calling the BufferDict obj's underlying member method code with example usage: obj.__len__() and returns: len