code: def utime(self, path, times=None, ns=None, follow_symlinks=True):
          
          self._handle_utime_arg_errors(ns, times)
  
          try:
              file_object = self.resolve(path, follow_symlinks, allow_fd=True)
          except IOError as io_error:
              if io_error.errno == errno.ENOENT:
                  self.raise_os_error(errno.ENOENT, path)
              raise
          if times is not None:
              for file_time in times:
                  if not isinstance(file_time, (int, float)):
                      raise TypeError('atime and mtime must be numbers')
  
              file_object.st_atime = times[0]
              file_object.st_mtime = times[1]
          elif ns is not None:
              for file_time in ns:
                  if not isinstance(file_time, int):
                      raise TypeError('atime and mtime must be ints')
  
              file_object.st_atime_ns = ns[0]
              file_object.st_mtime_ns = ns[1]
          else:
              current_time = time.time()
              file_object.st_atime = current_time
              file_object.st_mtime = current_time
docs: Change the access and modified times of a file.
  
          Args:
              path: (str) Path to the file.
              times: 2-tuple of int or float numbers, of the form (atime, mtime)
                  which is used to set the access and modified times in seconds.
                  If None, both times are set to the current time.
              ns: 2-tuple of int numbers, of the form (atime, mtime)  which is
                  used to set the access and modified times in nanoseconds.
                  If `None`, both times are set to the current time.
                  New in Python 3.3.
              follow_symlinks: If `False` and entry_path points to a symlink,
                  the link itself is queried instead of the linked object.
                  New in Python 3.3.
  
              Raises:
                  TypeError: If anything other than the expected types is
                      specified in the passed `times` or `ns` tuple,
                      or if the tuple length is not equal to 2.
                  ValueError: If both times and ns are specified.