code: async def _download_photo(self, photo, file, date, thumb, progress_callback):
          
          # Determine the photo and its largest size
          if isinstance(photo, types.MessageMediaPhoto):
              photo = photo.photo
          if not isinstance(photo, types.Photo):
              return
  
          size = self._get_thumb(photo.sizes, thumb)
          if not size or isinstance(size, types.PhotoSizeEmpty):
              return
  
          file = self._get_proper_filename(file, 'photo', '.jpg', date=date)
          if isinstance(size, (types.PhotoCachedSize, types.PhotoStrippedSize)):
              return self._download_cached_photo_size(size, file)
  
          result = await self.download_file(
              types.InputPhotoFileLocation(
                  id=photo.id,
                  access_hash=photo.access_hash,
                  file_reference=photo.file_reference,
                  thumb_size=size.type
              ),
              file,
              file_size=size.size,
              progress_callback=progress_callback
          )
          return result if file is bytes else file
docs: Specialized version of .download_media() for photos