code: def read_probes(self, key = None):
          
  
          print(('xxxxx probes', key, self._PROBES()))
  
          if key is None:
              # return the value all probe in dictionary form
              d = {}
              for k in list(self._PROBES.keys()):
                  d[k] = self.read_probes(k)
              return d
          else:
              # return the value of the requested key if the key corresponds to a valid probe
              assert key in list(self._PROBES.keys())
  
              value = None
  
              return value
docs: function is overloaded:
              - read_probes()
              - read_probes(key)
  
          Args:
              key: name of requested value
  
          Returns:
              - if called without argument: returns the values of all probes in dictionary form
              - if called with argument: returns the value the requested key