This commit is contained in:
anil
2020-08-28 08:34:39 +02:00
parent 6f52ca27b0
commit fbce8fe8c4
2 changed files with 56 additions and 24 deletions
+9 -7
View File
@@ -569,7 +569,7 @@ def unique_everseen(iterable, key=None):
seen_add(k) seen_add(k)
yield element yield element
def plotBox(yList,labels, fn, rotate=False,limit=True): def plotBox(yList,labels, fn, xAxisLabel,yAxisLabel, rotate=False,limit=True):
import matplotlib import matplotlib
matplotlib.use("TkAgg") matplotlib.use("TkAgg")
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
@@ -583,7 +583,7 @@ def plotBox(yList,labels, fn, rotate=False,limit=True):
flierprops = dict(markeredgecolor ='black',markerfacecolor= flierprops = dict(markeredgecolor ='black',markerfacecolor=
'black',marker='.',markersize=2) 'black',marker='.',markersize=2)
box = ax1.boxplot(yList, 0, flierprops=flierprops,widths=0.5, showmeans=False, vert=True,meanprops=meanpointsprops) box = ax1.boxplot(yList, 0, flierprops=flierprops,widths=0.5, showmeans=True, vert=False,meanprops=meanpointsprops)
for line in box['medians']: for line in box['medians']:
x,y = line.get_xydata()[1] x,y = line.get_xydata()[1]
line.set(linewidth=3) line.set(linewidth=3)
@@ -598,15 +598,17 @@ def plotBox(yList,labels, fn, rotate=False,limit=True):
else: else:
# ax1.set_xticklabels(labels) # ax1.set_xticklabels(labels)
# ax1.set_xticklabels(None) # ax1.set_xticklabels(None)
ax1.get_xaxis().set_ticklabels([]) ax1.set_yticklabels(labels, rotation=45, ha='right')
ax1.get_yaxis().set_ticklabels(labels)
# sns.boxplot(yList, ax=ax1) # sns.boxplot(yList, ax=ax1)
if limit: if limit:
ax1.set_ylim(top=1.1,bottom=0) ax1.set_xlim(left=0)
ax1.yaxis.set_ticks([0.0,1.0]) ax1.yaxis.set_ticks([0.0,1.0])
else: else:
ax1.set_yscale('log') # ax1.set_yscale('log')
ax1.set_xlabel('Cluster Member Size') ax1.set_xlim(left=0)
ax1.set_ylabel('Folds') ax1.set_xlabel(xAxisLabel)
ax1.set_ylabel(yAxisLabel)
plt.ion() plt.ion()
plt.subplots_adjust(wspace=0, hspace=0) plt.subplots_adjust(wspace=0, hspace=0)
+47 -17
View File
@@ -33,7 +33,7 @@ if __name__ == '__main__':
# subject = 'ALL' # subject = 'ALL'
# rootType = 'if' # rootType = 'if'
# job = 'validateCodeFlaws' job = 'validateIntro'
print(job) print(job)
@@ -42,29 +42,55 @@ if __name__ == '__main__':
createDS() createDS()
elif job == 'introRes': elif job == 'introRes':
with open(join(DATA_PATH,'introTestResults186'),'r') as f:
lines = f.readlines()
success = [i for i in lines if i.strip().endswith('success')] def readResultFile(resFile):
with open(join(DATA_PATH,resFile),'r') as f:
lines = f.readlines()
def getPatterns(x): success = [i for i in lines if i.strip().endswith('success')]
regex = r"fix (.*) by (.*) times:1, success" patchCandidates = {}
matches = re.finditer(regex, x, re.MULTILINE) def getPatterns(x):
match = list(matches) regex = r"fix (.*) by (.*) times:1, success"
fixes = [] matches = re.finditer(regex, x, re.MULTILINE)
if len(match) >= 1: match = list(matches)
for m in match: fixes = []
t = m.group(1), m.group(2) if len(match) >= 1:
fixes.append(t) patchCandidates[x.split(',')[0]] =re.findall(r"@True[a-zA-z\:0-9\.\-\_]+@", x, re.MULTILINE)
return fixes for m in match:
t = m.group(1), m.group(2)
fixes.append(t)
return fixes
success = [getPatterns(i) for i in success] success = [getPatterns(i) for i in success]
aDf = pd.DataFrame(columns=['bid','candidates'])
idx = 0
for k,v in patchCandidates.items():
aDf.loc[idx] = [k,[v]]
idx+=1
aDf['noTested'] = aDf.candidates.apply(lambda x: len(x[0]))
aDf['pos'] = aDf.candidates.apply(lambda x: x[0][-1].split(':')[1])
aDf['pos'] = aDf['pos'].apply(lambda x: int(x))
return aDf,success
aDf,success =readResultFile('introTestResults186')
bDf,success =readResultFile('introTestResultsWhite')
plotBox([aDf['noTested'].values.tolist(),bDf['noTested'].values.tolist()], ['blackbox','whitebox'] ,'test.pdf',yAxisLabel='',xAxisLabel='Position of the first plausible patch', limit=False)
patterns = pd.DataFrame(columns=['bug','pj','pattern']) patterns = pd.DataFrame(columns=['bug','pj','pattern'])
for idx,suc in enumerate(success): for idx,suc in enumerate(success):
bug,pattern =suc[0] bug,pattern =suc[0]
pj =bug.split(':')[1] pj =bug.split(':')[1]
patterns.loc[idx] = [bug,pj,pattern.split(pj+'.c')[-1]] patterns.loc[idx] = [bug,pj,pattern.split(pj+'.c')[-1]]
patterns fixPatterns = patterns.groupby(by=['pattern'], as_index=False).agg(lambda x: x.tolist())
fixPatterns['count'] = fixPatterns.bug.apply(lambda x: len(x))
fixPatterns.sort_values(by=['count'], ascending=False, inplace=True)
fixPatterns[['pattern','count']].to_latex(index=False)
for i in fixPatterns.pattern.values.tolist():
i = re.findall(r"((.*)\.c$)", i, re.MULTILINE)[0][1]
shutil.copy2(join(DATA_PATH, 'patches', 'cocci', i), join(DATA_PATH, 'white', i))
summary = patterns.groupby(by=['pj'], as_index=False).agg(lambda x: x.tolist()) summary = patterns.groupby(by=['pj'], as_index=False).agg(lambda x: x.tolist())
summary['bCount'] = summary.bug.apply(lambda x:len(x)) summary['bCount'] = summary.bug.apply(lambda x:len(x))
@@ -74,6 +100,10 @@ if __name__ == '__main__':
elif job =='dataset4c': elif job =='dataset4c':
from otherDatasets import core from otherDatasets import core
core() core()
elif job =='datasetIntro':
from introDS import core
core()
elif job =='richedit': elif job =='richedit':
dbDir = join(DATA_PATH, 'redis') dbDir = join(DATA_PATH, 'redis')
stopDB(dbDir, REDIS_PORT) stopDB(dbDir, REDIS_PORT)
@@ -102,7 +132,7 @@ if __name__ == '__main__':
elif job == 'cluster': elif job == 'cluster':
from abstractPatch import cluster from abstractPatch import cluster
dbDir = join(DATA_PATH, 'redis') dbDir = join(ROOT_DIR,'data','redis')
startDB(dbDir, REDIS_PORT, PROJECT_TYPE) startDB(dbDir, REDIS_PORT, PROJECT_TYPE)
cluster(join(DATA_PATH,'actions'),join(DATA_PATH, 'pairs'),'actions') cluster(join(DATA_PATH,'actions'),join(DATA_PATH, 'pairs'),'actions')