get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/124853/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 124853,
    "url": "http://patches.dpdk.org/api/patches/124853/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/20230308113104.10562-1-tadhg.kearney@intel.com/",
    "project": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230308113104.10562-1-tadhg.kearney@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20230308113104.10562-1-tadhg.kearney@intel.com",
    "date": "2023-03-08T11:31:04",
    "name": "[V1] tests/power_empty_poll: remove power_empty_poll test",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "e4b680d7e969d36b83fcc6bca9fa1a1d7111810d",
    "submitter": {
        "id": 2533,
        "url": "http://patches.dpdk.org/api/people/2533/?format=api",
        "name": "Tadhg Kearney",
        "email": "tadhg.kearney@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/20230308113104.10562-1-tadhg.kearney@intel.com/mbox/",
    "series": [
        {
            "id": 27283,
            "url": "http://patches.dpdk.org/api/series/27283/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=27283",
            "date": "2023-03-08T11:31:04",
            "name": "[V1] tests/power_empty_poll: remove power_empty_poll test",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/27283/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/124853/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/124853/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dts-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D92E441E1F;\n\tWed,  8 Mar 2023 12:31:20 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B2D6D40FAE;\n\tWed,  8 Mar 2023 12:31:20 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n by mails.dpdk.org (Postfix) with ESMTP id 22ABB40ED6\n for <dts@dpdk.org>; Wed,  8 Mar 2023 12:31:18 +0100 (CET)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 08 Mar 2023 03:31:17 -0800",
            "from silpixa00401183.ir.intel.com ([10.55.128.41])\n by orsmga003.jf.intel.com with ESMTP; 08 Mar 2023 03:31:15 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1678275079; x=1709811079;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=zgupdfo67RAlgKVvIMCUWQsP5CxwtnMQXgv761mi8+U=;\n b=SMgnbL8Jc7+B3+yZGe3lAid2G8FeCdIIYa2ItxP3mU3FtF9yepQcbGEz\n KN+GQIPJt1XBoBCzspqjWcYLgzL5fcEvCOOaDfnk2t7L3QCNOXgkgQaU9\n ZFKO/PK/rTixH8qJQa0rKA3AXkgKtyaxvdOdlaLjk569Z40DiKjrK3tyK\n VoQqyEON31IREyKMK3UvklX+rrzgBKaT7eg++Q0KJSTBebPJSgExL0vUn\n +K+O+aoNViTkst6DLRpUp0r8fKsZZVN+S/8LDtNWwMqozdew11iIwTFA0\n BNEi2ibAlRngzNnzpE6W4jLuvcFOZHqF+JoyzGOXcD3Vv2twhshiKQJQJ g==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6500,9779,10642\"; a=\"363765824\"",
            "E=Sophos;i=\"5.98,243,1673942400\"; d=\"scan'208\";a=\"363765824\"",
            "E=McAfee;i=\"6500,9779,10642\"; a=\"626884915\"",
            "E=Sophos;i=\"5.98,243,1673942400\"; d=\"scan'208\";a=\"626884915\""
        ],
        "X-ExtLoop1": "1",
        "From": "Tadhg Kearney <tadhg.kearney@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "reshma.pattan@intel.com,\n\tTadhg Kearney <tadhg.kearney@intel.com>",
        "Subject": "[dts][PATCH V1] tests/power_empty_poll: remove power_empty_poll test",
        "Date": "Wed,  8 Mar 2023 11:31:04 +0000",
        "Message-Id": "<20230308113104.10562-1-tadhg.kearney@intel.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dts@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "test suite reviews and discussions <dts.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dts/>",
        "List-Post": "<mailto:dts@dpdk.org>",
        "List-Help": "<mailto:dts-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dts-bounces@dpdk.org"
    },
    "content": "The experimental empty poll API has been removed from the power\nmanagement library in DPDK 22.03. Removing test that tested it's\nfunctionality.\n\nSigned-off-by: Tadhg Kearney <tadhg.kearney@intel.com>\n---\n tests/TestSuite_power_empty_poll.py | 437 ----------------------------\n 1 file changed, 437 deletions(-)\n delete mode 100644 tests/TestSuite_power_empty_poll.py",
    "diff": "diff --git a/tests/TestSuite_power_empty_poll.py b/tests/TestSuite_power_empty_poll.py\ndeleted file mode 100644\nindex 6db9d054..00000000\n--- a/tests/TestSuite_power_empty_poll.py\n+++ /dev/null\n@@ -1,437 +0,0 @@\n-# SPDX-License-Identifier: BSD-3-Clause\n-# Copyright(c) 2010-2020 Intel Corporation\n-#\n-\n-\"\"\"\n-DPDK Test suite.\n-power empty poll test suite.\n-\"\"\"\n-import os\n-import time\n-import traceback\n-from copy import deepcopy\n-from pprint import pformat\n-\n-from framework.exception import VerifyFailure\n-from framework.packet import Packet\n-from framework.pktgen import TRANSMIT_CONT\n-from framework.settings import HEADER_SIZE, PKTGEN_TREX\n-from framework.test_case import TestCase\n-from framework.utils import create_mask as dts_create_mask\n-\n-\n-class TestPowerEmptyPoll(TestCase):\n-    TRAIN = \"train\"\n-    NOTRAIN = \"no-train\"\n-    MED = \"med_threshold\"\n-    HIGH = \"high_threshold\"\n-\n-    @property\n-    def target_dir(self):\n-        # get absolute directory of target source code\n-        target_dir = (\n-            \"/root\" + self.dut.base_dir[1:]\n-            if self.dut.base_dir.startswith(\"~\")\n-            else self.dut.base_dir\n-        )\n-        return target_dir\n-\n-    @property\n-    def is_use_trex(self):\n-        return (\n-            hasattr(self.tester, \"is_pktgen\")\n-            and self.tester.is_pktgen\n-            and self.tester.pktgen.pktgen_type == PKTGEN_TREX\n-        )\n-\n-    def d_con(self, cmd):\n-        _cmd = [cmd, \"# \", 10] if isinstance(cmd, str) else cmd\n-        return self.dut.send_expect(*_cmd)\n-\n-    def d_a_con(self, cmd):\n-        _cmd = [cmd, \"# \", 10] if isinstance(cmd, str) else cmd\n-        return self.dut.alt_session.send_expect(*_cmd)\n-\n-    def prepare_binary(self, name):\n-        example_dir = \"examples/\" + name\n-        out = self.dut.build_dpdk_apps(\"./\" + example_dir)\n-        return os.path.join(self.target_dir, self.dut.apps_name[os.path.basename(name)])\n-\n-    def get_cores_mask(self, cores_list):\n-        return dts_create_mask(cores_list)\n-\n-    def add_stream_to_pktgen(self, txport, rxport, send_pkts, option):\n-        stream_ids = []\n-        cnt = 0\n-        for pkt in send_pkts:\n-            _option = deepcopy(option)\n-            _option[\"pcap\"] = pkt\n-            stream_id = self.tester.pktgen.add_stream(txport, rxport, pkt)\n-            self.tester.pktgen.config_stream(stream_id, _option)\n-            stream_ids.append(stream_id)\n-            # rxport -> txport\n-            stream_id = self.tester.pktgen.add_stream(rxport, txport, pkt)\n-            self.tester.pktgen.config_stream(stream_id, _option)\n-            stream_ids.append(stream_id)\n-            cnt += 1\n-        return stream_ids\n-\n-    def run_traffic(self, option):\n-        txport = self.tester.get_local_port(self.dut_ports[0])\n-        rxport = self.tester.get_local_port(self.dut_ports[1])\n-        stm_type = option.get(\"stm_types\")\n-        rate_percent = option.get(\"rate\", float(100))\n-        duration = option.get(\"duration\", 10)\n-        send_pkts = self.set_stream(stm_type)\n-        # clear streams before add new streams\n-        self.tester.pktgen.clear_streams()\n-        # set stream into pktgen\n-        s_option = {\n-            \"stream_config\": {\n-                \"txmode\": {},\n-                \"transmit_mode\": TRANSMIT_CONT,\n-                \"rate\": rate_percent,\n-            }\n-        }\n-        stream_ids = self.add_stream_to_pktgen(txport, rxport, send_pkts, s_option)\n-        # run traffic options\n-        traffic_opt = option.get(\"traffic_opt\")\n-        # run pktgen(ixia/trex) traffic\n-        result = self.tester.pktgen.measure(stream_ids, traffic_opt)\n-\n-        return result\n-\n-    def get_pkt_len(self, pkt_type, frame_size):\n-        headers_size = sum([HEADER_SIZE[x] for x in [\"eth\", \"ip\", pkt_type]])\n-        pktlen = frame_size - headers_size\n-        return pktlen\n-\n-    def set_stream(self, stm_names=None):\n-        # set streams for traffic\n-        pkt_configs = {\n-            \"UDP_1\": {\n-                \"type\": \"UDP\",\n-                \"pkt_layers\": {\n-                    \"ipv4\": {\"dst\": \"1.1.1.1\"},\n-                    \"raw\": {\n-                        \"payload\": [\"58\"]\n-                        * self.get_pkt_len(\"udp\", frame_size=self.frame_size)\n-                    },\n-                },\n-            },\n-        }\n-        # create packet instance for send\n-        streams = []\n-        for stm_name in stm_names:\n-            if stm_name not in list(pkt_configs.keys()):\n-                continue\n-            values = pkt_configs[stm_name]\n-            pkt_type = values.get(\"type\")\n-            pkt_layers = values.get(\"pkt_layers\")\n-            pkt = Packet(pkt_type=pkt_type)\n-            for layer in list(pkt_layers.keys()):\n-                pkt.config_layer(layer, pkt_layers[layer])\n-            streams.append(pkt.pktgen.pkt)\n-\n-        return streams\n-\n-    @property\n-    def empty_poll_options(self):\n-        table = {\n-            \"train\": \"1,0,0\",\n-            \"no-train\": \"0,350000,500000\",\n-        }\n-        return table\n-\n-    def init_l3fwd_power(self):\n-        self.l3fwd_power = self.prepare_binary(\"l3fwd-power\")\n-\n-    def start_l3fwd_power(self, core):\n-        train_mode = self.empty_poll_options.get(self.train_mode)\n-        option = (\n-            \"-v \"\n-            \"-c {core_mask} \"\n-            \"-n {mem_channel} \"\n-            \"-- \"\n-            \"-p 0x3 \"\n-            \"-P \"\n-            '--config=\"(0,0,{core}),(1,0,{core})\" '\n-            \"-l 10 -m 6 -h 1 \"\n-            '--empty-poll=\"{empty-poll}\" '\n-        ).format(\n-            **{\n-                \"core\": core[-1],\n-                \"core_mask\": self.get_cores_mask(core),\n-                \"mem_channel\": self.dut.get_memory_channels(),\n-                \"empty-poll\": train_mode,\n-            }\n-        )\n-        prompts = {\n-            self.NOTRAIN: \"POWER: Bring up the Timer\",\n-            self.TRAIN: \"POWER: Training is Complete\",\n-        }\n-        prompt = prompts.get(self.train_mode)\n-        cmd = [\" \".join([self.l3fwd_power, option]), prompt, 120]\n-        self.d_con(cmd)\n-        self.is_l3fwd_on = True\n-\n-    def close_l3fwd_power(self):\n-        if not self.is_l3fwd_on:\n-            return\n-        cmd = \"^C\"\n-        self.d_con(cmd)\n-\n-    def is_hyper_threading(self):\n-        cpu_index = list(self.cpu_info.keys())[-1]\n-        core_num = self.cpu_info[cpu_index].get(\"core\")\n-        return (cpu_index + 1) / 2 == (core_num + 1)\n-\n-    def is_support_pbf(self):\n-        # check if cpu support bpf feature\n-        cpu_attr = r\"/sys/devices/system/cpu/cpu0/cpufreq/base_frequency\"\n-        cmd = \"ls {0}\".format(cpu_attr)\n-        self.d_a_con(cmd)\n-        cmd = \"echo $?\"\n-        output = self.d_a_con(cmd)\n-        ret = True if output == \"0\" else False\n-        return ret\n-\n-    def query_cpu_freq(self):\n-        cmd = (\n-            \"cat /sys/devices/system/cpu/cpu{0}/cpufreq/scaling_min_freq;\"\n-            \"cat /sys/devices/system/cpu/cpu{0}/cpufreq/scaling_max_freq;\"\n-        ).format(self.check_core[1])\n-        output = self.d_a_con(cmd)\n-        if not output:\n-            self.scaling_min_freq, self.scaling_max_freq = 0, 0\n-        else:\n-            values = [int(item) for item in output.splitlines()]\n-            self.scaling_min_freq, self.scaling_max_freq = values\n-\n-    def get_sys_power_driver(self):\n-        drv_file = \"/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver\"\n-        output = self.d_a_con(\"cat \" + drv_file)\n-        if not output:\n-            msg = \"unknown power driver\"\n-            self.verify(False, msg)\n-        drv_name = output.splitlines()[0].strip()\n-        return drv_name\n-\n-    def get_all_cpu_attrs(self):\n-        \"\"\"get all cpus' base_frequency value\"\"\"\n-        key_values = [\"base_frequency\", \"cpuinfo_max_freq\", \"cpuinfo_min_freq\"]\n-        freq = \"/sys/devices/system/cpu/cpu{0}/cpufreq/{1}\".format\n-        # use dut alt session to get dut platform cpu base frequency attribute\n-        cpu_topos = self.dut.get_all_cores()\n-        cpu_info = {}\n-        for cpu_topo in cpu_topos:\n-            cpu_id = int(cpu_topo[\"thread\"])\n-            cpu_info[cpu_id] = {}\n-            cpu_info[cpu_id][\"socket\"] = cpu_topo[\"socket\"]\n-            cpu_info[cpu_id][\"core\"] = cpu_topo[\"core\"]\n-\n-        for key_value in key_values:\n-            cmds = []\n-            for cpu_id in sorted(cpu_info.keys()):\n-                cmds.append(\"cat {0}\".format(freq(cpu_id, key_value)))\n-            output = self.d_a_con(\";\".join(cmds))\n-            freqs = (\n-                [int(item) for item in output.splitlines()]\n-                if key_value != \"scaling_available_frequencies\"\n-                else [item for item in output.splitlines()]\n-            )\n-            for index, cpu_id in enumerate(sorted(cpu_info.keys())):\n-                if key_value == \"scaling_available_frequencies\":\n-                    cpu_info[cpu_id][key_value] = [\n-                        int(item) for item in sorted(freqs[index].split())\n-                    ]\n-                else:\n-                    cpu_info[cpu_id][key_value] = freqs[index]\n-\n-        # get high priority core and normal core\n-        base_freqs_info = {}\n-        for core_index, value in list(cpu_info.items()):\n-            base_frequency = value.get(\"base_frequency\")\n-            base_freqs_info.setdefault(base_frequency, []).append(core_index)\n-        base_freqs = list(base_freqs_info.keys())\n-        # cpu should have high priority core and normal core\n-        # high priority core frequency is higher than normal core frequency\n-        if len(base_freqs) <= 1 or not all(\n-            [len(value) for value in list(base_freqs_info.values())]\n-        ):\n-            msg = \"current cpu has no high priority core\"\n-            raise VerifyFailure(msg)\n-        self.logger.debug(pformat(base_freqs_info))\n-\n-        return cpu_info, base_freqs_info\n-\n-    def get_normal_cores_index(self, number):\n-        normal_freq = min(self.base_freqs_info.keys())\n-        cores_index = (\n-            self.base_freqs_info[normal_freq][1:number]\n-            if self.base_freqs_info[normal_freq][0] == 0\n-            else self.base_freqs_info[normal_freq][:number]\n-        )\n-        return cores_index\n-\n-    def get_no_turbo_max(self, core):\n-        cmd = \"rdmsr -p {} 0x0CE -f 15:8 -d\".format(core)\n-        output = self.d_a_con(cmd)\n-        freq = output.strip() + \"00000\"\n-        return int(freq)\n-\n-    def check_core_freq_in_traffic(self, core_index, mode):\n-        \"\"\"\n-        check the cores frequency when running traffic\n-             highest frequency[no_turbo_max]: cur_min=cur_max=no_turbo_max\n-        \"\"\"\n-        freq = self.get_no_turbo_max(core_index)\n-        expected_freq = freq if mode == self.HIGH else (freq - 500000)\n-        msg = \"max freq is failed to get.\"\n-        self.verify(self.scaling_max_freq, msg)\n-        msg = \"max freq is not the same as highest frequency <{0}>\"\n-        self.verify(expected_freq == self.scaling_max_freq, msg.format(expected_freq))\n-        msg = \"min freq is failed to get.\"\n-        self.verify(self.scaling_min_freq, msg)\n-        msg = \"min freq is not the same as highest frequency <{0}>\"\n-        self.verify(expected_freq == self.scaling_min_freq, msg.format(expected_freq))\n-        msg = \"core <{0}>: max freq/min_freq/expected freq<{1}> are the same\"\n-        self.logger.info(msg.format(core_index, expected_freq))\n-\n-    def check_no_train(self):\n-        output = self.dut.get_session_output(timeout=2)\n-        msg = \"training steps should not be executed\"\n-        self.verify(\"POWER: Training is Complete\" not in output, msg)\n-\n-    @property\n-    def train_mode_check_item(self):\n-        # Injected Rate:\n-        #      10G -> 0.1G -> 10G -> 0.1G -> 10G -> 0.1G\n-        check_item = [\n-            [100, self.HIGH],\n-            [1, self.MED],\n-            [100, self.HIGH],\n-            [1, self.MED],\n-            [100, self.HIGH],\n-            [1, self.MED],\n-        ]\n-        return check_item\n-\n-    def verify_train_mode(self):\n-        except_content = None\n-        # begin run vm power policy testing\n-        try:\n-            self.start_l3fwd_power(self.check_core)\n-            if self.train_mode == self.NOTRAIN:\n-                self.check_no_train()\n-            else:\n-                time.sleep(10)  # wait some time for stable training\n-                msg = \"{0} begin test mode <{1}> with traffic rate percent {2}%\"\n-                for rate, mode in self.train_mode_check_item:\n-                    self.logger.info(msg.format(self.train_mode, mode, rate))\n-                    duration = 20 if self.is_use_trex else 10\n-                    info = {\n-                        \"traffic_opt\": {\n-                            \"method\": \"throughput\",\n-                            \"interval\": duration - 2,\n-                            \"duration\": duration,\n-                            \"callback\": self.query_cpu_freq,\n-                        },\n-                        \"stm_types\": [\"UDP_1\"],\n-                        \"rate\": rate,\n-                    }\n-                    # run traffic\n-                    self.run_traffic(info)\n-                    time.sleep(15 if self.is_use_trex else 2)\n-                    # check test result\n-                    self.check_core_freq_in_traffic(self.check_core[1], mode)\n-        except Exception as e:\n-            self.logger.error(traceback.format_exc())\n-            except_content = e\n-        finally:\n-            self.close_l3fwd_power()\n-\n-        # check verify result\n-        if except_content:\n-            raise VerifyFailure(except_content)\n-        else:\n-            msg = \"test <{0}> successful !!!\".format(self.train_mode)\n-            self.logger.info(msg)\n-\n-    def verify_power_driver(self):\n-        expected_drv = \"intel_pstate\"\n-        power_drv = self.get_sys_power_driver()\n-        msg = \"{0} should work with {1} driver on DUT\".format(\n-            self.suite_name, expected_drv\n-        )\n-        self.verify(power_drv == expected_drv, msg)\n-\n-    def verify_hyper_threading(self):\n-        msg = \"{} should work under hyper threading close status\"\n-        self.verify(not self.is_hyper_threading(), msg.format(self.suite_name))\n-\n-    def verify_pbf_supported(self):\n-        if self.is_support_pbf():\n-            return\n-        msg = \"dut cpu doesn't support priority base frequency feature\"\n-        raise VerifyFailure(msg)\n-\n-    def preset_test_environment(self):\n-        self.is_l3fwd_on = None\n-        self.cpu_info, self.base_freqs_info = self.get_all_cpu_attrs()\n-        test_content = self.get_suite_cfg()\n-        self.frame_size = test_content.get(\"frame_size\") or 1024\n-        self.check_core = self.get_normal_cores_index(2)\n-        self.verify_hyper_threading()\n-        # modprobe msr module to let the application can get the CPU HW info\n-        self.d_a_con(\"modprobe msr\")\n-        # init binary\n-        self.init_l3fwd_power()\n-\n-    #\n-    # Test cases.\n-    #\n-\n-    def set_up_all(self):\n-        \"\"\"\n-        Run at the start of each test suite.\n-        \"\"\"\n-        self.verify_power_driver()\n-        # check if cpu support bpf feature\n-        self.verify_pbf_supported()\n-        self.dut_ports = self.dut.get_ports(self.nic)\n-        self.verify(len(self.dut_ports) >= 2, \"Not enough ports\")\n-        # prepare testing environment\n-        self.preset_test_environment()\n-\n-    def tear_down_all(self):\n-        \"\"\"\n-        Run after each test suite.\n-        \"\"\"\n-        pass\n-\n-    def set_up(self):\n-        \"\"\"\n-        Run before each test case.\n-        \"\"\"\n-        pass\n-\n-    def tear_down(self):\n-        \"\"\"\n-        Run after each test case.\n-        \"\"\"\n-        self.dut.kill_all()\n-\n-    def test_perf_basic_train_mode(self):\n-        \"\"\"\n-        Set Branch-Ratio Rate by User\n-        \"\"\"\n-        self.train_mode = self.TRAIN\n-        self.verify_train_mode()\n-\n-    def test_perf_no_training_mode(self):\n-        \"\"\"\n-        Set Branch-Ratio Rate by User\n-        \"\"\"\n-        self.train_mode = self.NOTRAIN\n-        self.verify_train_mode()\n",
    "prefixes": [
        "V1"
    ]
}