code: def newround(number, ndigits=None):
      
      return_int = False
      if ndigits is None:
          return_int = True
          ndigits = 0
      if hasattr(number, '__round__'):
          return number.__round__(ndigits)
  
      if ndigits < 0:
          raise NotImplementedError('negative ndigits not supported yet')
      exponent = Decimal('10') ** (-ndigits)
  
      if PYPY:
          # Work around issue #24: round() breaks on PyPy with NumPy's types
          if 'numpy' in repr(type(number)):
              number = float(number)
  
      if not PY26:
          d = Decimal.from_float(number).quantize(exponent,
                                              rounding=ROUND_HALF_EVEN)
      else:
          d = from_float_26(number).quantize(exponent, rounding=ROUND_HALF_EVEN)
  
      if return_int:
          return int(d)
      else:
          return float(d)
docs: See Python 3 documentation: uses Banker's Rounding.
  
      Delegates to the __round__ method if for some reason this exists.
  
      If not, rounds a number to a given precision in decimal digits (default
      0 digits). This returns an int when called with one argument,
      otherwise the same type as the number. ndigits may be negative.
  
      See the test_round method in future/tests/test_builtins.py for
      examples.