def _do_python_keypoint_eval(self, outfile_prefix: str) -> List[tuple]:
        """Do keypoint evaluation using `poseval` package.

        Args:
            outfile_prefix (str): The filename prefix of the json files.
                If the prefix is "somepath/xxx", the json files will be named
                "somepath/xxx.keypoints.json".

        Returns:
            list: a list of tuples. Each tuple contains the evaluation stats
            name and corresponding stats value.
        """
        logger: MMLogger = MMLogger.get_current_instance()

        # path of directory for official gt files
        # 'xxx/posetrack18_train.json' -> 'xxx/train/'
        gt_folder = osp.join(
            osp.dirname(self.ann_file),
            osp.splitext(self.ann_file.split('_')[-1])[0])
        pred_folder = osp.dirname(outfile_prefix)

        argv = ['', gt_folder + '/', pred_folder + '/']

        logger.info('Loading data')
        gtFramesAll, prFramesAll = eval_helpers.load_data_dir(argv)

        logger.info(f'# gt frames  : {len(gtFramesAll)}')
        logger.info(f'# pred frames: {len(prFramesAll)}')

        # evaluate per-frame multi-person pose estimation (AP)
        # compute AP
        logger.info('Evaluation of per-frame multi-person pose estimation')
        apAll, _, _ = evaluateAP(gtFramesAll, prFramesAll, None, False, False)

        # print AP
        logger.info('Average Precision (AP) metric:')
        eval_helpers.printTable(apAll)

        stats = eval_helpers.getCum(apAll)

        stats_names = [
            'Head AP', 'Shou AP', 'Elb AP', 'Wri AP', 'Hip AP', 'Knee AP',
            'Ankl AP', 'AP'
        ]

        info_str = list(zip(stats_names, stats))

        return info_str
Do keypoint evaluation using `poseval` package.

        Args:
            outfile_prefix (str): The filename prefix of the json files.
                If the prefix is "somepath/xxx", the json files will be named
                "somepath/xxx.keypoints.json".

        Returns:
            list: a list of tuples. Each tuple contains the evaluation stats
            name and corresponding stats value.
        
mmpose/mmpose/evaluation/metrics/posetrack18_metric.py