docs: def simple_round(tol=0):
      """decorator for rounding a function's input argument and keywords to the
      given precision *tol*.  This decorator always rounds to a floating point
      number.
      Rounding is only done for arguments or keywords that are floats.
      For example:
      >>> @simple_round(tol=1)
      ... def add(x,y):
      ...   return x+y
      ...
      >>> add(2.54, 5.47)
      8.0
      >>>
      >>> # does not round elements of iterables, only rounds at the top-level
      >>> add([2.54, 5.47],['x','y'])
      [2.54, 5.4699999999999998, 'x', 'y']
      >>>
      >>> # does not round elements of iterables, only rounds at the top-level
      >>> add([2.54, 5.47],['x',[8.99, 'y']])
      [2.54, 5.4699999999999998, 'x', [8.9900000000000002, 'y']]
      """
      def dec(f):
          def func(*args, **kwds):
              if tol is None:
                  _args,_kwds = args,kwds
              else:
                  _simple_round = simple_round_factory(tol)
                  _args,_kwds = _simple_round(*args, **kwds)
              return f(*_args, **_kwds)
          return func
      return dec