docs: async def download_profile_photo(
              self, entity, file=None, *, download_big=True):
          """
          Downloads the profile photo of the given entity (user/chat/channel).
  
          Args:
              entity (`entity`):
                  From who the photo will be downloaded.
  
                  .. note::
  
                      This method expects the full entity (which has the data
                      to download the photo), not an input variant.
  
                      It's possible that sometimes you can't fetch the entity
                      from its input (since you can get errors like
                      ``ChannelPrivateError``) but you already have it through
                      another call, like getting a forwarded message from it.
  
              file (`str` | `file`, optional):
                  The output file path, directory, or stream-like object.
                  If the path exists and is a file, it will be overwritten.
                  If file is the type `bytes`, it will be downloaded in-memory
                  as a bytestring (e.g. ``file=bytes``).
  
              download_big (`bool`, optional):
                  Whether to use the big version of the available photos.
  
          Returns:
              ``None`` if no photo was provided, or if it was Empty. On success
              the file path is returned since it may differ from the one given.
          """
          # hex(crc32(x.encode('ascii'))) for x in
          # ('User', 'Chat', 'UserFull', 'ChatFull')
          ENTITIES = (0x2da17977, 0xc5af5d94, 0x1f4661b9, 0xd49a2697)
          # ('InputPeer', 'InputUser', 'InputChannel')
          INPUTS = (0xc91c90b6, 0xe669bf46, 0x40f202fd)
          if not isinstance(entity, TLObject) or entity.SUBCLASS_OF_ID in INPUTS:
              entity = await self.get_entity(entity)
  
          possible_names = []
          if entity.SUBCLASS_OF_ID not in ENTITIES:
              photo = entity
          else:
              if not hasattr(entity, 'photo'):
                  # Special case: may be a ChatFull with photo:Photo
                  # This is different from a normal UserProfilePhoto and Chat
                  if not hasattr(entity, 'chat_photo'):
                      return None
  
                  return await self._download_photo(
                      entity.chat_photo, file, date=None, progress_callback=None)
  
              for attr in ('username', 'first_name', 'title'):
                  possible_names.append(getattr(entity, attr, None))
  
              photo = entity.photo
  
          if isinstance(photo, (types.UserProfilePhoto, types.ChatPhoto)):
              dc_id = photo.dc_id
              which = photo.photo_big if download_big else photo.photo_small
              loc = types.InputPeerPhotoFileLocation(
                  peer=await self.get_input_entity(entity),
                  local_id=which.local_id,
                  volume_id=which.volume_id,
                  big=download_big
              )
          else:
              # It doesn't make any sense to check if `photo` can be used
              # as input location, because then this method would be able
              # to "download the profile photo of a message", i.e. its
              # media which should be done with `download_media` instead.
              return None
  
          file = self._get_proper_filename(
              file, 'profile_photo', '.jpg',
              possible_names=possible_names
          )
  
          try:
              result = await self.download_file(loc, file, dc_id=dc_id)
              return result if file is bytes else file
          except errors.LocationInvalidError:
              # See issue #500, Android app fails as of v4.6.0 (1155).
              # The fix seems to be using the full channel chat photo.
              ie = await self.get_input_entity(entity)
              if isinstance(ie, types.InputPeerChannel):
                  full = await self(functions.channels.GetFullChannelRequest(ie))
                  return await self._download_photo(
                      full.full_chat.chat_photo, file,
                      date=None, progress_callback=None,
                      thumb=-1 if download_big else 0
                  )
              else:
                  # Until there's a report for chats, no need to.
                  return None