首页 > 其他分享 >CRUXEval: 代码推理、理解和执行的评估方法

CRUXEval: 代码推理、理解和执行的评估方法

时间:2024-11-13 18:42:42浏览次数:1  
标签:TASK CRUXEval nums PYTHON text 代码 assert TEST 推理

CRUXEval (Code Reasoning, Understanding, and eXecution Evaluation) 是一个在 HumanEval 上进行改进的 benchmark。由 800 个 Python function 组成。

paper:CRUXEval: A Benchmark for Code Reasoning, Understanding and Execution
GitHub:cruxeval

评估过程

每个函数都带有一个输入输出对,对应两个任务:输入预测和输出预测
Sample problem

  • CRUXEval-O: 输出预测
    衡量代码执行(execution)能力

  • CRUXEval-I: 输入预测
    衡量代码推理(reasoning)和理解(derstanding)能力

数据集

  • 都是尽量简单的代码(最长13行)
  • 使用 Code Llama 34B 生成初步的 functions 和 inputs,再选出简单的 function
    • temperature T = 1
    • 生成 functions 和 inputs 的 prompt:
You will be given a function name between [TASK] and [/TASK] tags. Following the examples given, write
,→ a Python function that makes use of the given function and 5 test inputs for that function.
[TASK]
str.center
[/TASK]
[PYTHON]
def f(text):
ls = list(text)
for i in range(1, len(ls) - 1):
ls.insert(i, ’+’)
return ’’.join(ls).center((len(ls) - 1) * 2)
[/PYTHON]
[TEST]
assert f(’lynel’) == ??
assert f(’nzoh’) == ??
assert f(’u’) == ??
assert f(’anfsoixz’) == ??
assert f(’xzd’) == ??
[/TEST]
[TASK]
list.append
[/TASK]
[PYTHON]
def f(nums):
count = len(nums)
for i in range(-count+1, 0):
nums.append(nums[i])
return nums
[/PYTHON]
[TEST]
assert f([2, 6, 1, 3, 1]) == ??
assert f([7, 1, 2, 6, 0, 2]) == ??
assert f([4, 3, 2, 1, 2, -1, 4, 2]) == ??
assert f([0, 6, 2, -1, -2]) == ??
assert f([-6, -2, 1, -3, 0, 1]) == ??
[/TEST]
[TASK]
str.zfill
[/TASK]
[PYTHON]

评估

Generation Few-Shot Prompts

string_1 = """[TASK]
str.split
[/TASK]
[PYTHON]
def f(text):
words = text.split()
result = []
for i in range(len(words)):
if i % 2 == 0:
result.append(words[i][::-1])
else:
result.append(words[i].upper())
return ’ ’.join(result)
[/PYTHON]
[TEST]
assert f("am7 fiDfd n") == ??
assert f("bnasadl") == ??
assert f("a j c n x X k") == ??
assert f("98 bask2 asoijdf9") = ??
assert f("") == ??
[/TEST]"""
string_2 = """[TASK]
str.capitalize
[/TASK]
[PYTHON]
def f(text):
a = []
words = text.split(’ ’)
for i in range(len(words)):
if words[i][0].isdigit():
return ’no’
if i%2 == 0:
a.append(words[i].capitalize())
else:
a.append(words[i])
return ’ ’.join(a)
[/PYTHON]
[TEST]
assert f("20xk flkawhf") == ??
assert f("lkw hj sfaibw fi 9") == ??
assert f("abbot 2929 mbpu") == ??
assert f("rotor zisxrs fh29nx") == ??
assert f("pxk 5 bxD 9") == ??
[/TEST]"""
string_3 = """[TASK]
str.rindex
[/TASK]
[PYTHON]
def f(text, char):
index = text.rindex(char)
result = list(text)
while index > 0:
result[index] = result[index-1]
result[index-1] = char
index -= 2
return ’’.join(result)
[/PYTHON]
[TEST]
assert f(’mnjs krupa’, ’u’) == ??
assert f(’kqwomn0xj’, ’m’) == ??
assert f(’qpfi jzm’, ’j’) == ??
assert f(’102x0zoq’, ’0’) == ??
assert f(’nzu ei,’, ’e’) == ??
[/TEST]"""
string_4 = """[TASK]
str.rpartition
[/TASK]
[PYTHON]
def f(text, char):
if char in text:
pref, char, suff = text.rpartition(char)
suff = suff[:-len(char)] + char + suff[len(char):]
return suff + pref
return text
[/PYTHON]
[TEST]
assert f(’smswfwe-r’, ’-’) == ??
assert f(’,wpzpppdl/’, ’p’) == ??
assert f(’9284701’, ’2’) == ??
assert f(’nvizoh2ja’, ’c’) == ??
assert f(’aaa0a1’, ’a’) == ??
[/TEST]"""
string_5 = """[TASK]
str.center
[/TASK]
[PYTHON]
def f(text):
ls = list(text)
for i in range(1, len(ls) - 1):
ls.insert(i, ’+’)
return ’’.join(ls).center((len(ls) - 1) * 2)
[/PYTHON]
[TEST]
assert f(’lynel’) == ??
assert f(’nzoh’) == ??
assert f(’u’) == ??
assert f(’anfsoixz’) == ??
assert f(’xzd’) == ??
[/TEST]"""
list_1 = """[TASK]
list.pop
[/TASK]
[PYTHON]
def f(names, num):
queue = names
while len(queue) > 1:
for _ in range(num):
queue.append(queue.pop(0))
queue.pop(0)
return queue.pop()
[/PYTHON]
[TEST]
assert f([’aiwn’, ’xke’, ’mpwiy’], 2) == ??
assert f([’y’, ’z’, ’cc’, ’2’, ’5’, ’.’, ’zksdfjn’], 7) == ??
assert f([’98bfaj’, ’cn11’, ’fakldj’, ’tjasl’, ’a’], 10) == ??
assert f([’aghbvm’], 1) == ??
assert f([’mnv’, ’fjw’, ’fnk’], 0) == ??
[/TEST]"""
list_2 = """[TASK]
list.insert
[/TASK]
[PYTHON]
def f(text, position, value):
length = len(text)
index = position % (length + 1)
if position < 0 or index < 0:
index = length // 2
new_text = list(text)
new_text.insert(index, value)
return ’’.join(new_text)
[/PYTHON]
[TEST]
assert f(’h grateful k’, 3, ’h’) == ??
assert f(’umjwi’, -5, ’m’) == ??
assert f(’coscifysu’, 0, ’d’) == ??
assert f(’fnmart’, 4, ’o’) == ??
assert f(’rzti’, -1, ’a’) == ??
[/TEST]"""
list_3 = """[TASK]
list.remove
[/TASK]
[PYTHON]
def f(array, elem):
array.reverse()
try:
while elem in array:
array.remove(elem)
finally:
array.reverse()
return array
[/PYTHON]
[TEST]
assert f([-1, 2, 1, -8, 2], 2) == ??
assert f([], 2) == ??
assert f([1], 1) == ??
assert f([3, 6, 4, -2, 5], 4) == ??
assert f([3, 2, 1, 2, 7, 1], 1) == ??
[/TEST]"""
list_4 = """[TASK]
list.append
[/TASK]
[PYTHON]
def f(nums):
count = len(nums)
for i in range(-count+1, 0):
nums.append(nums[i])
return nums
[/PYTHON]
[TEST]
assert f([2, 6, 1, 3, 1]) == ??
assert f([7, 1, 2, 6, 0, 2]) == ??
assert f([4, 3, 2, 1, 2, -1, 4, 2]) == ??
assert f([0, 6, 2, -1, -2]) == ??
assert f([-6, -2, 1, -3, 0, 1]) == ??
[/TEST]"""
list_5 = """[TASK]
list.index
[/TASK]
[PYTHON]
def f(nums, swap1, swap2):
i1 = nums.index(swap1)
i2 = nums.index(swap2)
nums[i1], nums[i2], nums[i1 + 1], nums[i2 + 1] = nums[i2], nums[i1], nums[i2 + 1], nums[i1 + 1]
return nums
[/PYTHON]
[TEST]
assert f([6, 2, 1, 3, 4, 5], 3, 4) == ??
assert f([1, 1, 5, 3, 1, 2], 1, 2) == ??
assert f([1, 2, 1, 4, 1], 4, 2) == ??
assert f([6, 2, 3, 1, 7, 5, 7], 3, 7) == ??
assert f([2, 8, 8, 3, 8, 3, 9], 3, 2) == ??
[/TEST]"""

CoT(Chain of Thought) Prompts

  • CoT input prediction prompt (Code Llama)
You will be given a function f and an output in the form f(??) == output. Your task is to find any
,→ input such that executing f on the input leads to the given output. There may be multiple
,→ answers, but only output one. First, think step by step. Then, surround the answer with [
,→ ANSWER] and [/ANSWER] tags. Express your answer as a function call that when executed will
,→ give the output.
def f(x):
return x + 1
assert f(??) == 17
To find an input such that executing f on the input leads to the given output, we can work backwards
,→ from the given assertion. We know that f(??) == 17.
Since the function f(x) returns x + 1, for f(??) to be equal to 17, the value of ?? should be 16.
Therefore, the function call that will give the output as 17 is:
[ANSWER]f(16)[/ANSWER]
{function}
assert f(??) == {output}

标签:TASK,CRUXEval,nums,PYTHON,text,代码,assert,TEST,推理
From: https://www.cnblogs.com/cdyang/p/18544543/CRUXEval

相关文章

  • 《MyBatis-Plus 代码生成器基础入门》
    1.概念介绍MyBatis-Plus是一个MyBatis的增强工具,旨在简化开发、提高效率。它在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了代码生成器功能,可以快速地根据数据库表结构生成Entity(实体类)、Mapper(映射器接口)、Service(服务层接口及其实......
  • VS Code 关于C++代码运行时,工作目录不在于当前目录的问题(cwd)
    我在用C++练习流的使用时遇到了当前目录与工作目录不符的问题,导致使用相对路径时无法读取文件。这是我的工作目录其中1.txt内容为当我选择不使用插件执行代码时(如下)终端输出为:此时并没有将1.txt的内容输出出来,于是我运行,测试代码,输出当前的工作目录#include<iostream>......
  • 第四章:代码修错与引入pinia进行状态管理
    第四章:代码修错与引入pinia进行状态管理不影响运行的警告bug修复解决项目启动警告在进入消息组件的编写之前,我们可以发现一个问题启动命令的时候会出现这个黄色警告这个黄色警告的意思就是defineProps组件被默认导入了,可以不需要手动导入,叫你去掉不去掉也可也......
  • 代码随想录算法训练营第二十五天| leetcode491.递增子序列、leetcode46.全排列、leetc
    1leetcode491.递增子序列题目链接:491.非递减子序列-力扣(LeetCode)文章链接:代码随想录视频链接:回溯算法精讲,树层去重与树枝去重|LeetCode:491.递增子序列_哔哩哔哩_bilibili思路:用之前的方法,结果翻车了,好好看视频学新技能吧1.1视频后的思路真的没想到用set来去重,还是基......
  • python实现赛博宠物(纯代码无需素材)
    1、创作背景    今天如往常一样来上班,一进公司就看见财务小姐姐闷闷不乐,就走过去跟她聊天,她说她很想养一只小狗,但是家里面不同意,怕把家里弄得乱七八糟。看着小姐姐悲伤的样子,我恏大力最舍不得小姐姐不开熏,所以我恏大力就要出来帮助美丽的财务小姐姐咯。2、技术选择......
  • 通过爬虫方式获取小红书授权登录的cookie的代码
    1、代码里的normal_sign.js代码是某书签名算法xs,xt的实现-CSDN博客里的;2、CookieUtil工具代码见抖音最新bd-ticket-guard-client-data逆向方法(2024年11月)-CSDN博客里的CookieUtil.py;importjsonimporttimeimportzlibfromurllib.parseimporturlparseimportexecj......
  • GitLab 中文版如何禁止从 UI 上下载代码?
    本文分享如何通过配置来禁止用户从GitLab中文版UI界面上下载源代码。GitLab中文版也就是极狐GitLab,使用界面和GitLab一样。常规下载代码的方式也一样,要么使用SSH或者HTTP克隆,要么直接从UI上下载源代码:但是有些企业不想让员工从这个界面上通过下载源代码的方式来下......
  • C# 抛出异常代码应该避免使用 System.Exception或ApplicationException
    在.NET开发中,异常处理是确保程序健壮性和可靠性的关键部分。然而,许多开发者在编写代码时,可能会默认使用System.Exception或ApplicationException来抛出异常。这种做法虽然简单,但并不推荐。本文将探讨为什么应该避免使用这些通用异常,并提供更好的替代方案,以及如何结合这些最佳......
  • 代码随想录算法训练营 | 所有可达路径
    所有可达路径文章链接:https://programmercarl.com/kamacoder/0098.所有可达路径.html#本题代码题目链接:https://kamacoder.com/problempage.php?pid=1170#include<iostream>#include<vector>usingnamespacestd;//全局路径vector<vector<int>>paths;vector<in......
  • 开源低代码平台-Microi吾码-工作流引擎、流程引擎
    前言第一版:博主在2008年工作时接手前同事基于微软WWF开发的工作流引擎,开发十余个国企、事业单位OA系统、ERP系统等第二版:博主在2012年参与ccflow工作流引擎的二次开发、bug修复,曾是ccflow论坛超级版主,当时使用微软SelverLight技术(可惜被淘汰)。ccflow的老板周总也是咱前辈......