def process_video_result(self, info_dict, download=True):
        assert info_dict.get('_type', 'video') == 'video'

        if 'id' not in info_dict:
            raise ExtractorError('Missing "id" field in extractor result')
        if 'title' not in info_dict:
            raise ExtractorError('Missing "title" field in extractor result')

        if 'playlist' not in info_dict:
            # It isn't part of a playlist
            info_dict['playlist'] = None
            info_dict['playlist_index'] = None

        thumbnails = info_dict.get('thumbnails')
        if thumbnails:
            thumbnails.sort(key=lambda t: (
                t.get('width'), t.get('height'), t.get('url')))
            for t in thumbnails:
                if 'width' in t and 'height' in t:
                    t['resolution'] = (t['width'], t['height']) % '%dx%d'

        if thumbnails and 'thumbnail' not in info_dict:
            info_dict['thumbnail'] = thumbnails[-1]['url']

        if 'display_id' not in info_dict and 'id' in info_dict:
            info_dict['display_id'] = info_dict['id']

        if info_dict.get('upload_date') is None and info_dict.get('timestamp') is not None:
            # Working around negative timestamps in Windows
            # (see http://bugs.python.org/issue1646728)
            if info_dict['timestamp'] < 0 and os.name == 'nt':
                info_dict['timestamp'] = 0
            upload_date = datetime.datetime.utcfromtimestamp(
                info_dict['timestamp'])
            info_dict['upload_date'] = upload_date.strftime('%Y%m%d')

        # This extractors handle format selection themselves
        if info_dict['extractor'] in ['Youku']:
            if download:
                self.process_info(info_dict)
            return info_dict

        # We now pick which formats have to be downloaded
        if info_dict.get('formats') is None:
            # There's only one format available
            formats = [info_dict]
        else:
            formats = info_dict['formats']

        if not formats:
            raise ExtractorError('No video formats found!')

        # We check that all the formats have the format and format_id fields
        for i, format in enumerate(formats):
            if 'url' not in format:
                raise ExtractorError('Missing "url" key in result (index %d)' % i)

            if format.get('format_id') is None:
                format['format_id'] = compat_str(i)
            if format.get('format') is None:
                format['format'] = '{id} - {res}{note}'.format(
                    id=format['format_id'],
                    res=self.format_resolution(format),
                    note=' ({0})'.format(format['format_note']) if format.get('format_note') is not None else '',
                )
            # Automatically determine file extension if missing
            if 'ext' not in format:
                format['ext'] = determine_ext(format['url']).lower()

        format_limit = self.params.get('format_limit', None)
        if format_limit:
            formats = list(takewhile_inclusive(
                lambda f: f['format_id'] != format_limit, formats
            ))

        # TODO Central sorting goes here

        if formats[0] is not info_dict:
            # only set the 'formats' fields if the original info_dict list them
            # otherwise we end up with a circular reference, the first (and unique)
            # element in the 'formats' field in info_dict is info_dict itself,
            # wich can't be exported to json
            info_dict['formats'] = formats
        if self.params.get('listformats', None):
            self.list_formats(info_dict)
            return

        req_format = self.params.get('format')
        if req_format is None:
            req_format = 'best'
        formats_to_download = []
        # The -1 is for supporting YoutubeIE
        if req_format in ('-1', 'all'):
            formats_to_download = formats
        else:
            for rfstr in req_format.split(','):
                # We can accept formats requested in the format: 34/5/best, we pick
                # the first that is available, starting from left
                req_formats = rfstr.split('/')
                for rf in req_formats:
                    if re.match(r'.+?\+.+?', rf) is not None:
                        # Two formats have been requested like '137+139'
                        format_1, format_2 = rf.split('+')
                        formats_info = (self.select_format(format_1, formats),
                                        self.select_format(format_2, formats))
                        if all(formats_info):
                            # The first format must contain the video and the
                            # second the audio
                            if formats_info[0].get('vcodec') == 'none':
                                self.report_error('The first format must '
                                                  'contain the video, try using '
                                                  '"-f %s+%s"' % (format_2, format_1))
                                return
                            output_ext = (
                                formats_info[0]['ext']
                                if self.params.get('merge_output_format') is None
                                else self.params['merge_output_format'])
                            selected_format = {
                                'requested_formats': formats_info,
                                'format': rf,
                                'ext': formats_info[0]['ext'],
                                'width': formats_info[0].get('width'),
                                'height': formats_info[0].get('height'),
                                'resolution': formats_info[0].get('resolution'),
                                'fps': formats_info[0].get('fps'),
                                'vcodec': formats_info[0].get('vcodec'),
                                'vbr': formats_info[0].get('vbr'),
                                'stretched_ratio': formats_info[0].get('stretched_ratio'),
                                'acodec': formats_info[1].get('acodec'),
                                'abr': formats_info[1].get('abr'),
                                'ext': output_ext,
                            }
                        else:
                            selected_format = None
                    else:
                        selected_format = self.select_format(rf, formats)
                    if selected_format is not None:
                        formats_to_download.append(selected_format)
                        break
        if not formats_to_download:
            raise ExtractorError('requested format not available',
                                 expected=True)

        if download:
            if len(formats_to_download) > 1:
                self.to_screen('[info] %s: downloading video in %s formats' % (info_dict['id'], len(formats_to_download)))
            for format in formats_to_download:
                new_info = dict(info_dict)
                new_info.update(format)
                self.process_info(new_info)
        # We update the info dict with the best quality format (backwards compatibility)
        info_dict.update(formats_to_download[-1])
        return info_dict
dataset/ETHPy150Open yasoob/youtube-dl-GUI/youtube_dl/YoutubeDL.py/YoutubeDL.process_video_result/swapped operands of `%`