docs: def get(self, direction=NOMINAL, names=ALL, diff=False, factor=False):
          """ get(direction=NOMINAL, names=ALL, diff=False, factor=False)
          Returns different representations of the contained value(s). *direction* should be any of
          *NOMINAL*, *UP* or *DOWN*. When not *NOMINAL*, *names* decides which uncertainties to take
          into account for the combination. When *diff* is *True*, only the unsigned, combined
          uncertainty is returned. When *False*, the nominal value plus or minus the uncertainty is
          returned. When *factor* is *True*, the ratio w.r.t. the nominal value is returned.
          """
          if direction == self.NOMINAL:
              value = self.nominal
  
          elif direction in (self.UP, self.DOWN):
              # find uncertainties to take into account
              if names == self.ALL:
                  names = self.uncertainties.keys()
              else:
                  names = make_list(names)
                  if any(name not in self.uncertainties for name in names):
                      unknown = list(set(names) - set(self.uncertainties.keys()))
                      raise ValueError("unknown uncertainty name(s): {}".format(unknown))
  
              # calculate the combined uncertainty without correlation
              idx = int(direction == self.DOWN)
              uncs = [self.uncertainties[name][idx] for name in names]
              unc = sum(u**2. for u in uncs)**0.5
  
              # determine the output value
              if diff:
                  value = unc
              elif direction == self.UP:
                  value = self.nominal + unc
              else:
                  value = self.nominal - unc
  
          else:
              raise ValueError("unknown direction: {}".format(direction))
  
          return value if not factor else value / self.nominal