<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def blit(self, src_rect, dst_surf, dst_rect):
 """Performs a fast blit from the source surface to the destination surface. This assumes that the source and destination rectangles are the same size. If either src_rect or dst_rect are None, the entire surface is copied. The final blit rectangles are saved in src_rect and dst_rect after all clipping is performed. Args: src_rect (Rect):
 Source rect. dst_surf (Surface):
 Destination surface. dst_rect (Rect):
 Destination rect. Raises: SDLError: If the blit fails. """

        check_int_err(lib.SDL_UpperBlit(self._ptr, src_rect._ptr, dst_surf._ptr, dst_rect._ptr))