code: def get_input_photo(photo):
      
      try:
          if photo.SUBCLASS_OF_ID == 0x846363e0:  # crc32(b'InputPhoto'):
              return photo
      except AttributeError:
          _raise_cast_fail(photo, 'InputPhoto')
  
      if isinstance(photo, types.photos.Photo):
          photo = photo.photo
  
      if isinstance(photo, types.Photo):
          return types.InputPhoto(id=photo.id, access_hash=photo.access_hash,
                                  file_reference=photo.file_reference)
  
      if isinstance(photo, types.PhotoEmpty):
          return types.InputPhotoEmpty()
  
      if isinstance(photo, types.messages.ChatFull):
          photo = photo.full_chat
      if isinstance(photo, types.ChannelFull):
          return get_input_photo(photo.chat_photo)
      elif isinstance(photo, types.UserFull):
          return get_input_photo(photo.profile_photo)
      elif isinstance(photo, (types.Channel, types.Chat, types.User)):
          return get_input_photo(photo.photo)
  
      if isinstance(photo, (types.UserEmpty, types.ChatEmpty,
                            types.ChatForbidden, types.ChannelForbidden)):
          return types.InputPhotoEmpty()
  
      _raise_cast_fail(photo, 'InputPhoto')
docs: Similar to :meth:`get_input_peer`, but for photos