import pandas as pd
import numpy as np
df_current = pd.read_csv('dataset_3_labels_merged.csv', sep=';')
df_current
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | mm: reduce noise in show_mem for lowmem alloca... | yes | yes | no |
1 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | While discussing early DMA pool pre-allocation... | no | yes | yes |
2 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | Those zones are usually not\npopulated on all... | no | no | yes |
3 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | This is an attempt to reduce the ballast that ... | yes | yes | no |
4 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | Please note that\nI have only compile tested ... | yes | yes | no |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2229 | 402 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | Andrea Arcangeli | Linus Torvalds | [PATCH] oom-killer disable for iscsi/lvm2/mult... | https://api.github.com/repos/torvalds/linux/gi... | (akpm: we still need to document oom_adj and f... | yes | no | no |
2230 | 403 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | Linus Torvalds | Linus Torvalds | Linux-2.6.12-rc2\n\nInitial git repository bui... | https://api.github.com/repos/torvalds/linux/gi... | Initial git repository build | yes | yes | no |
2231 | 403 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | Linus Torvalds | Linus Torvalds | Linux-2.6.12-rc2\n\nInitial git repository bui... | https://api.github.com/repos/torvalds/linux/gi... | I'm not bothering with the full history,\neven... | yes | no | no |
2232 | 403 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | Linus Torvalds | Linus Torvalds | Linux-2.6.12-rc2\n\nInitial git repository bui... | https://api.github.com/repos/torvalds/linux/gi... | We can create a separate "historical" git\narc... | yes | yes | no |
2233 | 403 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | Linus Torvalds | Linus Torvalds | Linux-2.6.12-rc2\n\nInitial git repository bui... | https://api.github.com/repos/torvalds/linux/gi... | Let it rip! | yes | no | no |
2234 rows Γ 10 columns
df_current.iloc[1196]['commit ID']
'MDY6Q29tbWl0MjMyNTI5ODo2YjBjODFiM2JlMTE0YTkzZjc5YmQ0YzU2MzlhZGU1MTA3ZDc3YzIx'
def get_commit(commitID):
# selecting rows of the commit
c_df = df_current[df_current['commit ID'] == commitID]
return c_df
commits_IDs_list = df_current['commit ID'].unique().tolist()
len(commits_IDs_list)
366
def decision_only(row):
a = ( row["Decision"] == 'yes')
b = ( row["Rationale"] == 'no')
c = ( row["Supporting Facts"] == 'no')
if (a and b and c):
return True
return False
def rationale_only(row):
a = ( row["Decision"] == 'no')
b = ( row["Rationale"] == 'yes')
c = ( row["Supporting Facts"] == 'no')
if (a & b & c):
return True
return False
def facts_only(row):
a = ( row["Decision"] == 'no')
b = ( row["Rationale"] == 'no')
c = ( row["Supporting Facts"] == 'yes')
if (a & b & c):
return True
return False
def commit_contains_3labels(commitID):
# selecting rows of the commit
rslt_df = df_current[df_current['commit ID'] == commitID]
# select rows of the commit that are labeleed decision only
df_d = rslt_df.apply(lambda x : True
if decision_only(x) else False, axis = 1)
df_r = rslt_df.apply(lambda x : True
if rationale_only(x) else False, axis = 1)
df_f = rslt_df.apply(lambda x : True
if facts_only(x) else False, axis = 1)
a = len(df_d[df_d == True])
b = len(df_r[df_r == True])
c = len(df_f[df_f == True])
if a > 0 and b > 0 and c > 0 and len(rslt_df) == a+b+c:
return True
return False
commits_with_three_labels_no_overlap=[]
for comit_id in commits_IDs_list :
if commit_contains_3labels(comit_id):
# print(comit_id)
commits_with_three_labels_no_overlap.append(comit_id)
commits_with_three_labels_no_overlap # Only 2 !!!
['MDY6Q29tbWl0MjMyNTI5ODpmMWYxMDA3NjQ0ZmZjODA1MWE0YzExNDI3ZDU4YjE5NjdhZTdiNzVh', 'MDY6Q29tbWl0MjMyNTI5ODpkYzNmMjFlYWRlZWE2ZDk4OTgyNzFmZjMyZDM1ZDVlMDBjNjg3MmVh']
get_commit(commits_with_three_labels_no_overlap[1])
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1258 | 227 | MDY6Q29tbWl0MjMyNTI5ODpkYzNmMjFlYWRlZWE2ZDk4OT... | David Rientjes | Linus Torvalds | mm, oom: introduce independent oom killer rate... | https://api.github.com/repos/torvalds/linux/gi... | mm, oom: introduce independent oom killer rate... | yes | no | no |
1259 | 227 | MDY6Q29tbWl0MjMyNTI5ODpkYzNmMjFlYWRlZWE2ZDk4OT... | David Rientjes | Linus Torvalds | mm, oom: introduce independent oom killer rate... | https://api.github.com/repos/torvalds/linux/gi... | printk_ratelimit() uses the global ratelimit s... | no | no | yes |
1260 | 227 | MDY6Q29tbWl0MjMyNTI5ODpkYzNmMjFlYWRlZWE2ZDk4OT... | David Rientjes | Linus Torvalds | mm, oom: introduce independent oom killer rate... | https://api.github.com/repos/torvalds/linux/gi... | The\noom killer should not be subjected to th... | no | yes | no |
1261 | 227 | MDY6Q29tbWl0MjMyNTI5ODpkYzNmMjFlYWRlZWE2ZDk4OT... | David Rientjes | Linus Torvalds | mm, oom: introduce independent oom killer rate... | https://api.github.com/repos/torvalds/linux/gi... | This patch introduces printk ratelimiting spec... | yes | no | no |
commit_contains_3labels('MDY6Q29tbWl0MjMyNTI5ODpkYzNmMjFlYWRlZWE2ZDk4OTgyNzFmZjMyZDM1ZDVlMDBjNjg3MmVh')
True
df_current.iloc[1261]['message_preprocessed']
'This patch introduces printk ratelimiting specifically for the oom killer.'
get_commit(commits_with_three_labels_no_overlap[0])
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
520 | 99 | MDY6Q29tbWl0MjMyNTI5ODpmMWYxMDA3NjQ0ZmZjODA1MW... | Vegard Nossum | Linus Torvalds | mm: add new mmgrab() helper\n\nApart from addi... | https://api.github.com/repos/torvalds/linux/gi... | mm: add new mmgrab() helper | yes | no | no |
521 | 99 | MDY6Q29tbWl0MjMyNTI5ODpmMWYxMDA3NjQ0ZmZjODA1MW... | Vegard Nossum | Linus Torvalds | mm: add new mmgrab() helper\n\nApart from addi... | https://api.github.com/repos/torvalds/linux/gi... | Apart from adding the helper function itself, ... | yes | no | no |
522 | 99 | MDY6Q29tbWl0MjMyNTI5ODpmMWYxMDA3NjQ0ZmZjODA1MW... | Vegard Nossum | Linus Torvalds | mm: add new mmgrab() helper\n\nApart from addi... | https://api.github.com/repos/torvalds/linux/gi... | This is needed for a later patch that hooks in... | no | yes | no |
523 | 99 | MDY6Q29tbWl0MjMyNTI5ODpmMWYxMDA3NjQ0ZmZjODA1MW... | Vegard Nossum | Linus Torvalds | mm: add new mmgrab() helper\n\nApart from addi... | https://api.github.com/repos/torvalds/linux/gi... | (Michal Hocko provided most of the kerneldoc c... | no | no | yes |
def decision_only(row):
a = ( row["Decision"] == 'yes')
b = ( row["Rationale"] == 'no')
c = ( row["Supporting Facts"] == 'no')
if (a and b and c):
return True
return False
def rationale_only(row):
a = ( row["Decision"] == 'no')
b = ( row["Rationale"] == 'yes')
c = ( row["Supporting Facts"] == 'no')
if (a & b & c):
return True
return False
def facts_only(row):
a = ( row["Decision"] == 'no')
b = ( row["Rationale"] == 'no')
c = ( row["Supporting Facts"] == 'yes')
if (a & b & c):
return True
return False
def decision_rationale(row):
a = ( row["Decision"] == 'yes')
b = ( row["Rationale"] == 'yes')
c = ( row["Supporting Facts"] == 'no')
if (a and b and c):
return True
return False
def decision_facts(row):
a = ( row["Decision"] == 'yes')
b = ( row["Rationale"] == 'no')
c = ( row["Supporting Facts"] == 'yes')
if (a and b and c):
return True
return False
def rationale_facts(row):
a = ( row["Decision"] == 'no')
b = ( row["Rationale"] == 'yes')
c = ( row["Supporting Facts"] == 'yes')
if (a and b and c):
return True
return False
def decision_rationale_facts(row):
a = ( row["Decision"] == 'yes')
b = ( row["Rationale"] == 'yes')
c = ( row["Supporting Facts"] == 'yes')
if (a and b and c):
return True
return False
def commit_contains_7labels(commitID):
# selecting rows of the commit
rslt_df = df_current[df_current['commit ID'] == commitID]
# select rows of the commit that are labeleed decision only
df_d = rslt_df.apply(lambda x : True
if decision_only(x) else False, axis = 1)
df_r = rslt_df.apply(lambda x : True
if rationale_only(x) else False, axis = 1)
df_f = rslt_df.apply(lambda x : True
if facts_only(x) else False, axis = 1)
df_dr = rslt_df.apply(lambda x : True
if decision_rationale(x) else False, axis = 1)
df_df = rslt_df.apply(lambda x : True
if decision_facts(x) else False, axis = 1)
df_rf = rslt_df.apply(lambda x : True
if rationale_facts(x) else False, axis = 1)
df_drf = rslt_df.apply(lambda x : True
if decision_rationale_facts(x) else False, axis = 1)
a = len(df_d[df_d == True])
b = len(df_r[df_r == True])
c = len(df_f[df_f == True])
d = len(df_dr[df_dr == True])
e = len(df_df[df_df == True])
f = len(df_rf[df_rf == True])
g = len(df_drf[df_drf == True])
if a > 0 and b > 0 and c > 0 and d > 0 and e > 0 and f > 0 and g>0 and len(rslt_df) == a+b+c+d+e+f+g:
return True
return False
commits_with_every_overlap=[]
for comit_id in commits_IDs_list :
if commit_contains_7labels(comit_id):
# print(comit_id)
commits_with_every_overlap.append(comit_id)
commits_with_every_overlap # 2 commits but veryy long
['MDY6Q29tbWl0MjMyNTI5ODo5YzI3NmNjNjVhNThmYWY5OGJlOGU1Njk2Mjc0NWVjOTlhYjg3NjM2', 'MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYmZjN2ZkZjViYWJmZDg0NDQyMThlZGQ5']
len(get_commit(commits_with_every_overlap[0]))
39
len(get_commit(commits_with_every_overlap[1]))
11
get_commit(commits_with_every_overlap[1])
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
197 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | mm/oom: add oom_score_adj and pgtables to Kill... | yes | no | no |
198 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | For an OOM event: print oom_score_adj value fo... | yes | yes | no |
199 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | The adjustment value can be set by user code ... | yes | no | yes |
200 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | When eligible tasks are not printed (sysctl oo... | yes | yes | yes |
201 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | Having this value on the Killed process messa... | no | yes | no |
202 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | An example which illustates both misconfigurat... | no | yes | yes |
203 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | Aug 14 23:00:02 testserver kernel: Out of memo... | no | no | yes |
204 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | It was miconfigured to have a adjustment of 1... | no | no | yes |
205 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | The output documents\nboth the misconfigurati... | yes | yes | yes |
206 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | This can be quite helpful for\ntriage and pro... | no | yes | no |
207 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | The addition of the pgtables_bytes shows page ... | yes | yes | no |
df_current.iloc[202]['message_preprocessed']
'An example which illustates both misconfiguration and validation that the\noom_score_adj was applied as expected is'
def commit_contains_6labels(commitID):
# selecting rows of the commit
rslt_df = df_current[df_current['commit ID'] == commitID]
# select rows of the commit that are labeleed decision only
df_d = rslt_df.apply(lambda x : True
if decision_only(x) else False, axis = 1)
df_r = rslt_df.apply(lambda x : True
if rationale_only(x) else False, axis = 1)
df_f = rslt_df.apply(lambda x : True
if facts_only(x) else False, axis = 1)
df_dr = rslt_df.apply(lambda x : True
if decision_rationale(x) else False, axis = 1)
df_df = rslt_df.apply(lambda x : True
if decision_facts(x) else False, axis = 1)
df_rf = rslt_df.apply(lambda x : True
if rationale_facts(x) else False, axis = 1)
a = len(df_d[df_d == True])
b = len(df_r[df_r == True])
c = len(df_f[df_f == True])
d = len(df_dr[df_dr == True])
e = len(df_df[df_df == True])
f = len(df_rf[df_rf == True])
if a > 0 and b > 0 and c > 0 and d > 0 and e > 0 and f > 0 and len(rslt_df) == a+b+c+d+e+f:
return True
return False
commits_with_six_overlap=[]
for comit_id in commits_IDs_list :
if commit_contains_6labels(comit_id):
# print(comit_id)
commits_with_six_overlap.append(comit_id)
commits_with_six_overlap # 1 commit but very long
['MDY6Q29tbWl0MjMyNTI5ODo5MzA2NWFjNzUzZTQ0NDM4NDBhMDU3YmZlZjRiZTcxZWM3NjZmZGU5']
len(get_commit('MDY6Q29tbWl0MjMyNTI5ODo5MzA2NWFjNzUzZTQ0NDM4NDBhMDU3YmZlZjRiZTcxZWM3NjZmZGU5'))
19
df_current.loc[(df_current['message_preprocessed'] == 'mm, oom: base root bonus on current usage')]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1097 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | mm, oom: base root bonus on current usage | yes | no | no |
df_current.iloc[1097]['commit ID']
'MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllNDk1MzE3OWQzZTEzYTU0NGNjY2U3NzA3'
get_commit('MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllNDk1MzE3OWQzZTEzYTU0NGNjY2U3NzA3') # The labels are different from MDE, where we took Majority vote (now we use Union)
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1097 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | mm, oom: base root bonus on current usage | yes | no | no |
1098 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | A 3% of system memory bonus is sometimes too e... | no | yes | yes |
1099 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | With commit a63d83f427fb ("oom: badness heuris... | no | no | yes |
1100 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | But\nas a result, all root tasks that consume... | no | yes | yes |
1101 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | For example, on a 32G\nmachine it can't tell ... | no | yes | yes |
1102 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | The changelog describes this 3% boost as the e... | no | yes | yes |
1103 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | Replace the 3% of system memory bonus with a 3... | yes | no | no |
1104 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | By giving root tasks a bonus that is proportio... | yes | yes | yes |
1105 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | In the example\nabove, the OOM killer will di... | yes | yes | yes |
commit_contains_6labels('MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllNDk1MzE3OWQzZTEzYTU0NGNjY2U3NzA3')
False
def commit_contains_some_overlap(commitID):
# selecting rows of the commit
rslt_df = df_current[df_current['commit ID'] == commitID]
df_d = rslt_df.apply(lambda x : True
if decision_only(x) else False, axis = 1)
# df_r = rslt_df.apply(lambda x : True
# if rationale_only(x) else False, axis = 1)
# df_f = rslt_df.apply(lambda x : True
# if facts_only(x) else False, axis = 1)
df_dr = rslt_df.apply(lambda x : True
if decision_rationale(x) else False, axis = 1)
df_rf = rslt_df.apply(lambda x : True
if rationale_facts(x) else False, axis = 1)
a = len(df_d[df_d == True])
# b= len(df_r[df_r == True])
# c = len(df_f[df_f == True])
d = len(df_dr[df_dr == True])
f = len(df_rf[df_rf == True])
if a> 0 and d > 0 and f > 0 and len(rslt_df) == a+d+f:
return True
return False
commits_with_some_overlap=[]
for comit_id in commits_IDs_list :
if commit_contains_some_overlap(comit_id):
# print(comit_id)
commits_with_some_overlap.append(comit_id)
len(commits_with_some_overlap)
19
get_commit(commits_with_some_overlap[5]) # => in paper
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
938 | 174 | MDY6Q29tbWl0MjMyNTI5ODo0NjQwMjc3ODVmZjYzMzQ2OG... | Johannes Weiner | Linus Torvalds | mm: oom_kill: switch test-and-clear of known T... | https://api.github.com/repos/torvalds/linux/gi... | mm: oom_kill: switch test-and-clear of known T... | yes | no | no |
939 | 174 | MDY6Q29tbWl0MjMyNTI5ODo0NjQwMjc3ODVmZjYzMzQ2OG... | Johannes Weiner | Linus Torvalds | mm: oom_kill: switch test-and-clear of known T... | https://api.github.com/repos/torvalds/linux/gi... | exit_oom_victim() already knows that TIF_MEMDI... | no | yes | yes |
940 | 174 | MDY6Q29tbWl0MjMyNTI5ODo0NjQwMjc3ODVmZjYzMzQ2OG... | Johannes Weiner | Linus Torvalds | mm: oom_kill: switch test-and-clear of known T... | https://api.github.com/repos/torvalds/linux/gi... | Use clear_thread_flag() directly. | yes | yes | no |
df_current.iloc[112]['message_preprocessed']
'Remove the unused arguments and update all callers.'
Commit
df_current.iloc[1704]['commit ID']
'MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMTUwYWE2Mzc3Zjk3ZjBlMTE0NTBhNjdk'
df_current.iloc[1704]['message_preprocessed']
' To\nsave time for the debugging'
get_commit('MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMTUwYWE2Mzc3Zjk3ZjBlMTE0NTBhNjdk')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1701 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | oom-kill: show virtual size and rss informatio... | yes | no | no |
1702 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | In a typical oom analysis scenario, we frequen... | no | yes | yes |
1703 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | This patch\nadds vsz and rss information to t... | yes | yes | no |
1704 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | To\nsave time for the debugging | no | yes | no |
1705 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | example | no | no | yes |
Another Commit?
get_commit('MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZGYwYTU0OTFhYThhMDdhZjI0NzY3ZTcz')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1386 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | oom: avoid deferring oom killer if exiting tas... | yes | no | no |
1387 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | The oom killer naturally defers killing anythi... | no | no | yes |
1388 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | This avoids\nunnecessarily killing tasks when... | no | yes | yes |
1389 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | This is\ndetected by PF_EXITING since threads... | no | no | yes |
1390 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | The problem with always deferring when a threa... | no | yes | yes |
1391 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | The oom killer does not want\nto defer in thi... | yes | yes | yes |
1392 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | This patch will now only defer the oom killer ... | yes | no | yes |
1393 | 251 | MDY6Q29tbWl0MjMyNTI5ODplZGQ0NTU0NGM2ZjA5NTUwZG... | David Rientjes | Linus Torvalds | oom: avoid deferring oom killer if exiting tas... | https://api.github.com/repos/torvalds/linux/gi... | It also ensures\nthat a child is sacrificed f... | yes | yes | yes |
df_current.iloc[1391]['message_preprocessed']
' The oom killer does not want\nto defer in this case since there is no guarantee that thread will ever\nexit without intervention'
get_commit('MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMjFjYTk4YTk3MWNkMDBmMzMxMzE4YzA1')
df_current.iloc[1618]['message_preprocessed']
'include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h'
get_commit('MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOGZhMjdlMzdhYzJhNzBlNDA4NDBhNTZh')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
2227 | 402 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | Andrea Arcangeli | Linus Torvalds | [PATCH] oom-killer disable for iscsi/lvm2/mult... | https://api.github.com/repos/torvalds/linux/gi... | [PATCH] oom-killer disable for iscsi/lvm2/mult... | yes | no | no |
2228 | 402 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | Andrea Arcangeli | Linus Torvalds | [PATCH] oom-killer disable for iscsi/lvm2/mult... | https://api.github.com/repos/torvalds/linux/gi... | iscsi/lvm2/multipath needs guaranteed protecti... | yes | yes | no |
2229 | 402 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | Andrea Arcangeli | Linus Torvalds | [PATCH] oom-killer disable for iscsi/lvm2/mult... | https://api.github.com/repos/torvalds/linux/gi... | (akpm: we still need to document oom_adj and f... | yes | no | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODpmYTcxNzA2MGYxYWI3ZWI2NTcwZjJmYjQ5MTM2ZjgzOGZjOTE5NWE5')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1912 | 338 | MDY6Q29tbWl0MjMyNTI5ODpmYTcxNzA2MGYxYWI3ZWI2NT... | Peter Zijlstra | Ingo Molnar | sched: sched_rt_entity\n\nMove the task_struct... | https://api.github.com/repos/torvalds/linux/gi... | sched: sched_rt_entity | no | no | no |
1913 | 338 | MDY6Q29tbWl0MjMyNTI5ODpmYTcxNzA2MGYxYWI3ZWI2NT... | Peter Zijlstra | Ingo Molnar | sched: sched_rt_entity\n\nMove the task_struct... | https://api.github.com/repos/torvalds/linux/gi... | Move the task_struct members specific to rt sc... | yes | yes | no |
1914 | 338 | MDY6Q29tbWl0MjMyNTI5ODpmYTcxNzA2MGYxYWI3ZWI2NT... | Peter Zijlstra | Ingo Molnar | sched: sched_rt_entity\n\nMove the task_struct... | https://api.github.com/repos/torvalds/linux/gi... | A future optimization could be to put sched_en... | yes | no | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3NzUwM2ExNTZkMTA5N2NjMjA1NTQ0OWEy')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1489 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | oom: give the dying task a higher priority | yes | no | no |
1490 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | In a system under heavy load it was observed t... | no | no | yes |
1491 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | Right after sending a SIGKILL to the task sele... | no | no | yes |
1492 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | That is accomplished by | no | no | yes |
1493 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | It sounds plausible giving the dying task an e... | yes | yes | yes |
1494 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | It was\nsuggested on LKML using SCHED_FIFO:1,... | yes | yes | yes |
1495 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | If the dying task is already an RT task, leave... | yes | no | no |
1496 | 266 | MDY6Q29tbWl0MjMyNTI5ODo5M2I0M2ZhNTUwODhmZTk3Nz... | Luis Claudio R. Goncalves | Linus Torvalds | oom: give the dying task a higher priority\n\n... | https://api.github.com/repos/torvalds/linux/gi... | Another good\nsuggestion, implemented here, w... | yes | yes | yes |
get_commit('MDY6Q29tbWl0MjMyNTI5ODpiNTI3MjNjNTYwN2Y3Njg0YzJjMGMwNzVmODZmODZkYTBkN2ZiNmQw')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1447 | 261 | MDY6Q29tbWl0MjMyNTI5ODpiNTI3MjNjNTYwN2Y3Njg0Yz... | KOSAKI Motohiro | Linus Torvalds | oom: fix tasklist_lock leak\n\nCommit 0aad4b31... | https://api.github.com/repos/torvalds/linux/gi... | oom: fix tasklist_lock leak | yes | yes | no |
1448 | 261 | MDY6Q29tbWl0MjMyNTI5ODpiNTI3MjNjNTYwN2Y3Njg0Yz... | KOSAKI Motohiro | Linus Torvalds | oom: fix tasklist_lock leak\n\nCommit 0aad4b31... | https://api.github.com/repos/torvalds/linux/gi... | Commit 0aad4b3124 ("oom: fold __out_of_memory ... | no | yes | yes |
1449 | 261 | MDY6Q29tbWl0MjMyNTI5ODpiNTI3MjNjNTYwN2Y3Njg0Yz... | KOSAKI Motohiro | Linus Torvalds | oom: fix tasklist_lock leak\n\nCommit 0aad4b31... | https://api.github.com/repos/torvalds/linux/gi... | Then it caused following obvious\ndanger warn... | no | yes | yes |
1450 | 261 | MDY6Q29tbWl0MjMyNTI5ODpiNTI3MjNjNTYwN2Y3Njg0Yz... | KOSAKI Motohiro | Linus Torvalds | oom: fix tasklist_lock leak\n\nCommit 0aad4b31... | https://api.github.com/repos/torvalds/linux/gi... | This patch fixes it. | yes | yes | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODo3MjgzNWM4NmNhMTVkMDEyNjM1NGI3M2Q1ZjI5Y2U5MTk0OTMxYzli')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1278 | 231 | MDY6Q29tbWl0MjMyNTI5ODo3MjgzNWM4NmNhMTVkMDEyNj... | Johannes Weiner | Linus Torvalds | mm: unify remaining mem_cont, mem, etc. variab... | https://api.github.com/repos/torvalds/linux/gi... | mm: unify remaining mem_cont, mem, etc. variab... | yes | yes | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODphYjI5MGFkYmFmOGY0Njc3MGYwMTRlYTg3OTY4ZGU1YmFjYTI5YzMw')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1522 | 273 | MDY6Q29tbWl0MjMyNTI5ODphYjI5MGFkYmFmOGY0Njc3MG... | KOSAKI Motohiro | Linus Torvalds | oom: make oom_unkillable_task() helper functio... | https://api.github.com/repos/torvalds/linux/gi... | oom: make oom_unkillable_task() helper function | yes | no | no |
1523 | 273 | MDY6Q29tbWl0MjMyNTI5ODphYjI5MGFkYmFmOGY0Njc3MG... | KOSAKI Motohiro | Linus Torvalds | oom: make oom_unkillable_task() helper functio... | https://api.github.com/repos/torvalds/linux/gi... | Presently we have the same task check in two p... | no | yes | yes |
1524 | 273 | MDY6Q29tbWl0MjMyNTI5ODphYjI5MGFkYmFmOGY0Njc3MG... | KOSAKI Motohiro | Linus Torvalds | oom: make oom_unkillable_task() helper functio... | https://api.github.com/repos/torvalds/linux/gi... | Unify it. | yes | yes | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODoyYzVlYTUzY2U0NmViYjIzMmUwZDlhNDc1ZmRkMmIxNjZkMmE1MTZi')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1525 | 274 | MDY6Q29tbWl0MjMyNTI5ODoyYzVlYTUzY2U0NmViYjIzMm... | KOSAKI Motohiro | Linus Torvalds | oom: oom_kill_process() doesn't select kthread... | https://api.github.com/repos/torvalds/linux/gi... | oom: oom_kill_process() doesn't select kthread... | yes | no | yes |
1526 | 274 | MDY6Q29tbWl0MjMyNTI5ODoyYzVlYTUzY2U0NmViYjIzMm... | KOSAKI Motohiro | Linus Torvalds | oom: oom_kill_process() doesn't select kthread... | https://api.github.com/repos/torvalds/linux/gi... | Presently select_bad_process() has a PF_KTHREA... | no | no | yes |
1527 | 274 | MDY6Q29tbWl0MjMyNTI5ODoyYzVlYTUzY2U0NmViYjIzMm... | KOSAKI Motohiro | Linus Torvalds | oom: oom_kill_process() doesn't select kthread... | https://api.github.com/repos/torvalds/linux/gi... | It mean oom_kill_process() may choose wrong\n... | no | yes | yes |
get_commit('MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNWZjMjllNDU0YjFmNGJhYjk1M2ZhYmJm')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1479 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | oom: multi threaded process coredump don't mak... | yes | yes | no |
1480 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | Oleg pointed out current PF_EXITING check is w... | no | yes | yes |
1481 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | Because PF_EXITING\nis per-thread flag, not pe... | no | yes | yes |
1482 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | He said,\n Two threads, group-leader L and i... | no | yes | yes |
1483 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | T dumps the code | no | yes | yes |
1484 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | In this case both threads have ->mm != NULL... | no | yes | yes |
1485 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | The first problem is, select_bad_process() ... | no | yes | yes |
1486 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | The second problem is that we should add TI... | no | yes | yes |
1487 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | I think we can remove this dubious PF_EXITING ... | yes | yes | no |
1488 | 265 | MDY6Q29tbWl0MjMyNTI5ODpjZWYxZDM1MjNkMzNlYmMzNW... | KOSAKI Motohiro | Linus Torvalds | oom: multi threaded process coredump don't mak... | https://api.github.com/repos/torvalds/linux/gi... | but as first step,\nThis patch add the protect... | yes | yes | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3YmU1MjEwZTNkNmI5MDQ0NTUwMDA0NDNj')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1299 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | freezer: rename thaw_process() to __thaw_task(... | yes | yes | no |
1300 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | thaw_process() now has only internal users - s... | no | no | yes |
1301 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | Remove the unnecessary return value, rename, ... | yes | yes | no |
1302 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | This will help further updates to\nthe freeze... | no | yes | no |
1303 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | #NAME? | no | no | yes |
1304 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | Convert it to use __thaw_task() for now | yes | no | no |
1305 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | In the longer\n term, this should be hand... | yes | no | no |
1306 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | #NAME? | yes | no | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzNDdjNTQ4MzJkNDgxMTBhNWJjOWU5ZmY4')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
2089 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | [PATCH] oom: handle current exiting | yes | yes | no |
2090 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | If current *is* exiting, it should actually be... | yes | yes | yes |
2091 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | Can't do this via a straight\ncheck in page_a... | yes | yes | yes |
2092 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | Instead cause current to OOM-kill itself whic... | yes | no | yes |
2093 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | The current procedure of simply aborting the O... | no | yes | yes |
2094 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | In the case of killing a PF_EXITING task, don'... | yes | no | no |
2095 | 380 | MDY6Q29tbWl0MjMyNTI5ODo1MGVjM2JiZmZiZThhOTYzND... | Nick Piggin | Linus Torvalds | [PATCH] oom: handle current exiting\n\nIf curr... | https://api.github.com/repos/torvalds/linux/gi... | This becomes more important in future patches,... | yes | yes | no |
df_current.loc[(df_current['URL']=='https://api.github.com/repos/torvalds/linux/git/commits/140ffcec4def3ee3af7565b2cf1d3b2580f7e180')]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
2126 | 388 | MDY6Q29tbWl0MjMyNTI5ODoxNDBmZmNlYzRkZWYzZWUzYW... | Andrew Morton | Linus Torvalds | [PATCH] out_of_memory() locking fix\n\nI seem ... | https://api.github.com/repos/torvalds/linux/gi... | [PATCH] out_of_memory() locking fix | yes | yes | no |
2127 | 388 | MDY6Q29tbWl0MjMyNTI5ODoxNDBmZmNlYzRkZWYzZWUzYW... | Andrew Morton | Linus Torvalds | [PATCH] out_of_memory() locking fix\n\nI seem ... | https://api.github.com/repos/torvalds/linux/gi... | I seem to have lost this read_unlock() | yes | yes | yes |
2128 | 388 | MDY6Q29tbWl0MjMyNTI5ODoxNDBmZmNlYzRkZWYzZWUzYW... | Andrew Morton | Linus Torvalds | [PATCH] out_of_memory() locking fix\n\nI seem ... | https://api.github.com/repos/torvalds/linux/gi... | While we're there, let's turn that interruptib... | yes | yes | no |
2129 | 388 | MDY6Q29tbWl0MjMyNTI5ODoxNDBmZmNlYzRkZWYzZWUzYW... | Andrew Morton | Linus Torvalds | [PATCH] out_of_memory() locking fix\n\nI seem ... | https://api.github.com/repos/torvalds/linux/gi... | (Again | no | no | yes |
2130 | 388 | MDY6Q29tbWl0MjMyNTI5ODoxNDBmZmNlYzRkZWYzZWUzYW... | Andrew Morton | Linus Torvalds | [PATCH] out_of_memory() locking fix\n\nI seem ... | https://api.github.com/repos/torvalds/linux/gi... | We seem to have a\nhabit of doing this). | no | no | yes |
df_current.loc[(df_current['message_preprocessed'].str.contains('help'))].loc[(df_current['Rationale'] == 'yes')].loc[(df_current['Decision'] == 'yes')].loc[(df_current['Supporting Facts'] == 'no')]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
64 | 17 | C_kwDOACN7MtoAKGVlOTk1NWQ2MWEwYTc3MDE1MmY5YzNh... | Christian Brauner | Christian Brauner | mm: use pidfd_get_task()\n\nInstead of duplica... | https://api.github.com/repos/torvalds/linux/gi... | Instead of duplicating the same code in two pl... | yes | yes | no |
119 | 31 | MDY6Q29tbWl0MjMyNTI5ODo2MTliNWI0NjliY2FiODRlYT... | Yafang Shao | Linus Torvalds | mm, oom: show process exiting information in _... | https://api.github.com/repos/torvalds/linux/gi... | We'd better show some\nhelpful information to... | yes | yes | no |
178 | 41 | MDY6Q29tbWl0MjMyNTI5ODo5YzI3NmNjNjVhNThmYWY5OG... | Minchan Kim | Linus Torvalds | mm: introduce MADV_COLD\n\nPatch series "Intro... | https://api.github.com/repos/torvalds/linux/gi... | The hint can help kernel in deciding which\np... | yes | yes | no |
187 | 41 | MDY6Q29tbWl0MjMyNTI5ODo5YzI3NmNjNjVhNThmYWY5OG... | Minchan Kim | Linus Torvalds | mm: introduce MADV_COLD\n\nPatch series "Intro... | https://api.github.com/repos/torvalds/linux/gi... | Furthermore, it would help to avoid unnecessa... | yes | yes | no |
407 | 82 | MDY6Q29tbWl0MjMyNTI5ODo0ODM3ZmUzN2FkZmYxZDE1OT... | Michal Hocko | Linus Torvalds | mm, oom_reaper: fix memory corruption\n\nDavid... | https://api.github.com/repos/torvalds/linux/gi... | Any context which\noperates on a remote mm st... | yes | yes | no |
495 | 93 | MDY6Q29tbWl0MjMyNTI5ODo0MjI1ODBjM2NlYTdmYWFjYT... | Roman Gushchin | Linus Torvalds | mm/oom_kill.c: add tracepoints for oom reaper-... | https://api.github.com/repos/torvalds/linux/gi... | So, I assume, that adding some tracepoints mig... | yes | yes | no |
508 | 95 | MDY6Q29tbWl0MjMyNTI5ODpkNzVkYTAwNGM3MDhjOWZjYT... | Michal Hocko | Linus Torvalds | oom: improve oom disable handling\n\nTetsuo ha... | https://api.github.com/repos/torvalds/linux/gi... | In\norder to help distinguish first case from... | yes | yes | no |
656 | 121 | MDY6Q29tbWl0MjMyNTI5ODphMzczOTY2ZDFmNjRjMDRiYT... | Michal Hocko | Linus Torvalds | mm, oom: hide mm which is shared with kthread ... | https://api.github.com/repos/torvalds/linux/gi... | In order to help forward progress for the OOM ... | yes | yes | no |
862 | 158 | MDY6Q29tbWl0MjMyNTI5ODpkYjJhMGRkN2E0M2RlNTk1ZD... | Yaowei Bai | Linus Torvalds | mm/oom_kill.c: introduce is_sysrq_oom helper\n... | https://api.github.com/repos/torvalds/linux/gi... | Introduce is_sysrq_oom helper function indicat... | yes | yes | no |
997 | 182 | MDY6Q29tbWl0MjMyNTI5ODo0OTU1MGI2MDU1ODc5MjRiMz... | Michal Hocko | Linus Torvalds | oom: add helpers for setting and clearing TIF_... | https://api.github.com/repos/torvalds/linux/gi... | oom: add helpers for setting and clearing TIF_... | yes | yes | no |
1049 | 186 | MDY6Q29tbWl0MjMyNTI5ODpkMDAzZjM3MWIyNzAxNjM1NG... | Oleg Nesterov | Linus Torvalds | oom: don't assume that a coredumping thread wi... | https://api.github.com/repos/torvalds/linux/gi... | Change the PF_EXITING checks to take SIGNAL_GR... | yes | yes | no |
1057 | 187 | MDY6Q29tbWl0MjMyNTI5ODoyMzE0YjQyZGI2N2JlMzBiNz... | Johannes Weiner | Linus Torvalds | mm: memcontrol: drop bogus RCU locking from me... | https://api.github.com/repos/torvalds/linux/gi... | To make the API change clear, rename the lefto... | yes | yes | no |
1213 | 214 | MDY6Q29tbWl0MjMyNTI5ODo0NjI2MDdlY2M1MTliMTk3Zj... | David Rientjes | Linus Torvalds | mm, oom: introduce helper function to process ... | https://api.github.com/repos/torvalds/linux/gi... | mm, oom: introduce helper function to process ... | yes | yes | no |
1214 | 214 | MDY6Q29tbWl0MjMyNTI5ODo0NjI2MDdlY2M1MTliMTk3Zj... | David Rientjes | Linus Torvalds | mm, oom: introduce helper function to process ... | https://api.github.com/repos/torvalds/linux/gi... | This patch introduces a helper function to pro... | yes | yes | no |
1218 | 214 | MDY6Q29tbWl0MjMyNTI5ODo0NjI2MDdlY2M1MTliMTk3Zj... | David Rientjes | Linus Torvalds | mm, oom: introduce helper function to process ... | https://api.github.com/repos/torvalds/linux/gi... | This new helper function\nwill be used in the... | yes | yes | no |
1548 | 281 | MDY6Q29tbWl0MjMyNTI5ODozMDllZDg4MjUwOGNjNDcxMz... | David Rientjes | Linus Torvalds | oom: extract panic helper function\n\nThere ar... | https://api.github.com/repos/torvalds/linux/gi... | It's better to extract this to a helper funct... | yes | yes | no |
1605 | 291 | MDY6Q29tbWl0MjMyNTI5ODpkZDhlOGY0MDVjYTM4NmM3Y2... | Oleg Nesterov | Linus Torvalds | oom: introduce find_lock_task_mm() to fix !mm ... | https://api.github.com/repos/torvalds/linux/gi... | - Add the new helper, find_lock_task_mm(), whi... | yes | yes | no |
1703 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | This patch\nadds vsz and rss information to t... | yes | yes | no |
1917 | 340 | MDY6Q29tbWl0MjMyNTI5ODpiYTI1ZjlkY2M0ZWE2ZTMwOD... | Pavel Emelyanov | Linus Torvalds | Use helpers to obtain task pid in printks\n\nT... | https://api.github.com/repos/torvalds/linux/gi... | Use helpers to obtain task pid in printks | yes | yes | no |
2197 | 398 | MDY6Q29tbWl0MjMyNTI5ODphNDkzMzVjY2VhYjhhZmI2Nj... | Paul Jackson | Linus Torvalds | [PATCH] cpusets: oom_kill tweaks\n\nThis patch... | https://api.github.com/repos/torvalds/linux/gi... | Let the oom killer be constrained to consider ... | yes | yes | no |
df_current.loc[(df_current['message_preprocessed'].str.contains('will'))].loc[(df_current['Rationale'] == 'yes')].loc[(df_current['Decision'] == 'no')].loc[(df_current['Supporting Facts'] == 'no')]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
213 | 45 | MDY6Q29tbWl0MjMyNTI5ODpmOWM2NDU2MjFhMjhlMzc4MT... | Tetsuo Handa | Linus Torvalds | memcg, oom: don't require __GFP_FS when invoki... | https://api.github.com/repos/torvalds/linux/gi... | get_user_pages()) will leak\n-ENOMEM | no | yes | no |
584 | 108 | MDY6Q29tbWl0MjMyNTI5ODo5MjU0OTkwZmI5ZjBmMTVmMj... | Michal Hocko | Linus Torvalds | oom: warn if we go OOM for higher order and co... | https://api.github.com/repos/torvalds/linux/gi... | This will\nhelp us identifying possible misco... | no | yes | no |
638 | 116 | MDY6Q29tbWl0MjMyNTI5ODo3ZWJmZmE0NTU1MWZlN2RiOD... | Tetsuo Handa | Linus Torvalds | mm,oom_reaper: reduce find_lock_task_mm() usag... | https://api.github.com/repos/torvalds/linux/gi... | Moreover, this will make\nlater patch in the ... | no | yes | no |
1302 | 235 | MDY6Q29tbWl0MjMyNTI5ODphNWJlMmQwZDFhODc0NmU3Ym... | Tejun Heo | Tejun Heo | freezer: rename thaw_process() to __thaw_task(... | https://api.github.com/repos/torvalds/linux/gi... | This will help further updates to\nthe freeze... | no | yes | no |
df_current.loc[(df_current['message_preprocessed'].str.contains('example'))]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
202 | 44 | MDY6Q29tbWl0MjMyNTI5ODo3MGNiNmQyNjc3OTA1MTIxYm... | Edward Chron | Linus Torvalds | mm/oom: add oom_score_adj and pgtables to Kill... | https://api.github.com/repos/torvalds/linux/gi... | An example which illustates both misconfigurat... | no | yes | yes |
223 | 46 | MDY6Q29tbWl0MjMyNTI5ODo4YWMzZjhmZTkxYTIxMTk1Mj... | Joel Savitz | Linus Torvalds | mm/oom_kill.c: add task UID to info message on... | https://api.github.com/repos/torvalds/linux/gi... | In the following example, abuse_the_ram is the... | no | no | yes |
459 | 90 | MDY6Q29tbWl0MjMyNTI5ODo0ZDRiYmQ4NTI2YThmYmViMm... | Michal Hocko | Linus Torvalds | mm, oom_reaper: skip mm structs with mmu notif... | https://api.github.com/repos/torvalds/linux/gi... | Andrea has noticed that the oom_reaper doesn't... | no | yes | yes |
498 | 93 | MDY6Q29tbWl0MjMyNTI5ODo0MjI1ODBjM2NlYTdmYWFjYT... | Roman Gushchin | Linus Torvalds | mm/oom_kill.c: add tracepoints for oom reaper-... | https://api.github.com/repos/torvalds/linux/gi... | How it works in practice? Below is an example ... | yes | yes | yes |
899 | 165 | MDY6Q29tbWl0MjMyNTI5ODo0MjZmYjVlNzJkOTJiODY4OT... | Tetsuo Handa | Linus Torvalds | mm/oom_kill.c: reverse the order of setting TI... | https://api.github.com/repos/torvalds/linux/gi... | Although the possibility of hitting this time ... | no | yes | yes |
1101 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | For example, on a 32G\nmachine it can't tell ... | no | yes | yes |
1105 | 194 | MDY6Q29tbWl0MjMyNTI5ODo3NzhjMTRhZmZhZjk0YTllND... | David Rientjes | Linus Torvalds | mm, oom: base root bonus on current usage\n\nA... | https://api.github.com/repos/torvalds/linux/gi... | In the example\nabove, the OOM killer will di... | yes | yes | yes |
1131 | 201 | MDY6Q29tbWl0MjMyNTI5ODozODEyYzhjOGYzOTUzOTIxZW... | Johannes Weiner | Linus Torvalds | mm: memcg: do not trap chargers with full call... | https://api.github.com/repos/torvalds/linux/gi... | For example, in one reported case, the task in... | no | no | yes |
1138 | 201 | MDY6Q29tbWl0MjMyNTI5ODozODEyYzhjOGYzOTUzOTIxZW... | Johannes Weiner | Linus Torvalds | mm: memcg: do not trap chargers with full call... | https://api.github.com/repos/torvalds/linux/gi... | For example one of the\nsleeping tasks may be... | no | no | yes |
1232 | 222 | MDY6Q29tbWl0MjMyNTI5ODphN2Y2MzhmOTk5ZmY0MjMxMG... | David Rientjes | Linus Torvalds | mm, oom: normalize oom scores to oom_score_adj... | https://api.github.com/repos/torvalds/linux/gi... | This\nmeans an oom_score_adj value of 300, fo... | no | no | yes |
1235 | 222 | MDY6Q29tbWl0MjMyNTI5ODphN2Y2MzhmOTk5ZmY0MjMxMG... | David Rientjes | Linus Torvalds | mm, oom: normalize oom scores to oom_score_adj... | https://api.github.com/repos/torvalds/linux/gi... | On large systems, this can end up being a larg... | no | yes | yes |
1295 | 234 | MDY6Q29tbWl0MjMyNTI5ODpmZjA1YjZmN2FlNzYyYjZlYj... | Frantisek Hrbata | Linus Torvalds | oom: fix integer overflow of points in oom_bad... | https://api.github.com/repos/torvalds/linux/gi... | For example | no | yes | yes |
1444 | 259 | MDY6Q29tbWl0MjMyNTI5ODpmMTllOGFhMTFhZmEyNDAzNm... | David Rientjes | Linus Torvalds | oom: always return a badness score of non-zero... | https://api.github.com/repos/torvalds/linux/gi... | Admin tasks are also given a 3% bonus,\nso th... | no | no | yes |
1474 | 264 | MDY6Q29tbWl0MjMyNTI5ODphNjNkODNmNDI3ZmJjZTk3YT... | David Rientjes | Linus Torvalds | oom: badness heuristic rewrite\n\nThis a compl... | https://api.github.com/repos/torvalds/linux/gi... | The value\nis added directly into the badness... | yes | no | no |
1514 | 271 | MDY6Q29tbWl0MjMyNTI5ODoyNmViYzk4NDkxM2I2YThkOD... | KOSAKI Motohiro | Linus Torvalds | oom: /proc/<pid>/oom_score treat kernel thread... | https://api.github.com/repos/torvalds/linux/gi... | Another example, /proc/1/oom_score return !0 v... | no | yes | yes |
1571 | 285 | MDY6Q29tbWl0MjMyNTI5ODo2Y2Y4NmFjNmYzNmI2Mzg0NT... | David Rientjes | Linus Torvalds | oom: filter tasks not sharing the same cpuset\... | https://api.github.com/repos/torvalds/linux/gi... | Tasks in other cpusets with a disjoint set of ... | no | yes | yes |
1705 | 302 | MDY6Q29tbWl0MjMyNTI5ODozYjQ3OThjYmMxM2RkOGQxMT... | KOSAKI Motohiro | Linus Torvalds | oom-kill: show virtual size and rss informatio... | https://api.github.com/repos/torvalds/linux/gi... | example | no | no | yes |
1726 | 306 | MDY6Q29tbWl0MjMyNTI5ODoyOGI4M2M1MTkzZTdhYjk1MW... | KOSAKI Motohiro | Linus Torvalds | oom: move oom_adj value from task_struct to si... | https://api.github.com/repos/torvalds/linux/gi... | __out_of_memory()\n select_bad_proc... | no | no | yes |
2098 | 381 | MDY6Q29tbWl0MjMyNTI5ODo3ODg3YTNkYTc1M2UxYmE4Mj... | Nick Piggin | Linus Torvalds | [PATCH] oom: cpuset hint\n\ncpuset_excl_nodes_... | https://api.github.com/repos/torvalds/linux/gi... | For example, we may be asking for an\nallocat... | no | no | yes |
2187 | 398 | MDY6Q29tbWl0MjMyNTI5ODphNDkzMzVjY2VhYjhhZmI2Nj... | Paul Jackson | Linus Torvalds | [PATCH] cpusets: oom_kill tweaks\n\nThis patch... | https://api.github.com/repos/torvalds/linux/gi... | Here's an example usage scenario | no | no | yes |
2191 | 398 | MDY6Q29tbWl0MjMyNTI5ODphNDkzMzVjY2VhYjhhZmI2Nj... | Paul Jackson | Linus Torvalds | [PATCH] cpusets: oom_kill tweaks\n\nThis patch... | https://api.github.com/repos/torvalds/linux/gi... | In this example, we have two big sibling cpuse... | no | no | yes |
2218 | 399 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | Anton Blanchard | Linus Torvalds | [PATCH] mm: quieten OOM killer noise\n\nWe now... | https://api.github.com/repos/torvalds/linux/gi... | For example, when a task is exiting the OOM ki... | no | no | yes |
df_current.loc[( df_current['Decision'] == 'no' )].loc[ (df_current['Rationale'] == 'no' )].loc[(df_current['Supporting Facts'] == 'no' ) ]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
253 | 54 | MDY6Q29tbWl0MjMyNTI5ODo2ZjRmMTNlOGQ5ZTI3Y2VmZD... | JΓΖΓΒ©rΓΖΓΒ΄me Glisse | Linus Torvalds | mm/mmu_notifier: contextual information for ev... | https://api.github.com/repos/torvalds/linux/gi... | mm/mmu_notifier: contextual information for ev... | no | no | no |
283 | 57 | MDY6Q29tbWl0MjMyNTI5ODpjZWZjN2VmM2M4N2QwMmZjOT... | Shakeel Butt | Linus Torvalds | mm, oom: fix use-after-free in oom_kill_proces... | https://api.github.com/repos/torvalds/linux/gi... | I looked at the history but it seems like\nth... | no | no | no |
295 | 60 | MDY6Q29tbWl0MjMyNTI5ODpmMGM4NjdkOTU4OGQ5ZWZjMT... | yuzhoujian | Linus Torvalds | mm, oom: add oom victim's memcg to the oom con... | https://api.github.com/repos/torvalds/linux/gi... | Below is the single line output in the oom rep... | no | no | no |
334 | 69 | MDY6Q29tbWl0MjMyNTI5ODpjM2I3OGIxMWVmYmIyODY1ND... | Rodrigo Freire | Linus Torvalds | mm, oom: describe task memory unit, larger PID... | https://api.github.com/repos/torvalds/linux/gi... | Reference | no | no | no |
635 | 116 | MDY6Q29tbWl0MjMyNTI5ODo3ZWJmZmE0NTU1MWZlN2RiOD... | Tetsuo Handa | Linus Torvalds | mm,oom_reaper: reduce find_lock_task_mm() usag... | https://api.github.com/repos/torvalds/linux/gi... | This patch (of 9) | no | no | no |
650 | 119 | MDY6Q29tbWl0MjMyNTI5ODpmMzNlNmYwNjcxYjNiYTgxYW... | Geert Uytterhoeven | Linus Torvalds | mm, oom: fix uninitialized ret in task_will_fr... | https://api.github.com/repos/torvalds/linux/gi... | mm/oom_kill.c: In function `task_will_free... | no | no | no |
671 | 123 | MDY6Q29tbWl0MjMyNTI5ODo2OTY0NTNlNjY2MzBhZDQ1ZT... | Michal Hocko | Linus Torvalds | mm, oom: task_will_free_mem should skip oom_re... | https://api.github.com/repos/torvalds/linux/gi... | Analyzed by Tetsuo Handa. | no | no | no |
837 | 153 | MDY6Q29tbWl0MjMyNTI5ODo3NTZhMDI1ZjAwMDkxOTE4ZD... | Joe Perches | Linus Torvalds | mm: coalesce split strings\n\nKernel style pre... | https://api.github.com/repos/torvalds/linux/gi... | Miscellanea | no | no | no |
1024 | 182 | MDY6Q29tbWl0MjMyNTI5ODo0OTU1MGI2MDU1ODc5MjRiMz... | Michal Hocko | Linus Torvalds | oom: add helpers for setting and clearing TIF_... | https://api.github.com/repos/torvalds/linux/gi... | Note | no | no | no |
1146 | 201 | MDY6Q29tbWl0MjMyNTI5ODozODEyYzhjOGYzOTUzOTIxZW... | Johannes Weiner | Linus Torvalds | mm: memcg: do not trap chargers with full call... | https://api.github.com/repos/torvalds/linux/gi... | Debugged by Michal Hocko. | no | no | no |
1155 | 203 | MDY6Q29tbWl0MjMyNTI5ODo1OGNmMTg4ZWQ2NDliNjU3MG... | Sha Zhengju | Linus Torvalds | memcg, oom: provide more precise dump info whi... | https://api.github.com/repos/torvalds/linux/gi... | (1) Before change | no | no | no |
1782 | 314 | MDY6Q29tbWl0MjMyNTI5ODplMjIyNDMyYmZhN2RjZjZlYz... | Balbir Singh | Linus Torvalds | memcg: show memcg information during OOM\n\nAd... | https://api.github.com/repos/torvalds/linux/gi... | Thanks to Johannes Weiner, Li Zefan, David Rie... | no | no | no |
1893 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | TODO | no | no | no |
1894 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | 1 | no | no | no |
1912 | 338 | MDY6Q29tbWl0MjMyNTI5ODpmYTcxNzA2MGYxYWI3ZWI2NT... | Peter Zijlstra | Ingo Molnar | sched: sched_rt_entity\n\nMove the task_struct... | https://api.github.com/repos/torvalds/linux/gi... | sched: sched_rt_entity | no | no | no |
1934 | 343 | MDY6Q29tbWl0MjMyNTI5ODpiNDYwY2JjNTgxYTUzY2MwOD... | Serge E. Hallyn | Linus Torvalds | pid namespaces: define is_global_init() and is... | https://api.github.com/repos/torvalds/linux/gi... | Changelog | no | no | no |
2210 | 398 | MDY6Q29tbWl0MjMyNTI5ODphNDkzMzVjY2VhYjhhZmI2Nj... | Paul Jackson | Linus Torvalds | [PATCH] cpusets: oom_kill tweaks\n\nThis patch... | https://api.github.com/repos/torvalds/linux/gi... | This patch | no | no | no |
2226 | 401 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | Janet Morgan | Linus Torvalds | [PATCH] add OOM debug\n\nThis patch provides m... | https://api.github.com/repos/torvalds/linux/gi... | Thanks to Dave Jones for coming up with the idea. | no | no | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NTJmOGUxYjhhOGI5NDI3OGNiNTdlYWZk')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
296 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | mm, oom: reorganize the oom report in dump_header | yes | yes | no |
297 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | OOM report contains several sections | no | no | yes |
298 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | The first one is the allocation\ncontext that... | no | no | yes |
299 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | Then we have cpuset context followed\nby the ... | no | no | yes |
300 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | The tird one is the OOM memory\ninformation | no | no | yes |
301 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | Followed by the current memory state of all s... | no | no | yes |
302 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | At last, we will show oom eligible tasks and t... | no | no | yes |
303 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | One thing that makes parsing more awkward than... | no | yes | yes |
304 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | This patch\nis reorganizing the oom report to... | yes | no | no |
305 | 61 | MDY6Q29tbWl0MjMyNTI5ODplZjg0NDRlYTAxZDc0NDI2NT... | yuzhoujian | Linus Torvalds | mm, oom: reorganize the oom report in dump_hea... | https://api.github.com/repos/torvalds/linux/gi... | oom-kill:constraint=CONSTRAINT_NONE,nodemask=(... | yes | yes | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2ViZDBkNDczYmNhNzZjMjRjMDdkZTMw')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
335 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | mm, oom: remove oom_lock from oom_reaper | yes | no | no |
336 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | oom_reaper used to rely on the oom_lock since ... | no | no | yes |
337 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | close race with exiting task") | no | no | yes |
338 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | We do not really need the lock anymore\nthough | no | yes | no |
339 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | 212925802454 ("mm: oom: let oom_reap_task and... | no | yes | yes |
340 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | Tetsuo was arguing that at least MMF_OOM_SKIP ... | no | no | yes |
341 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | Although this is possible in principle\nlet's... | yes | yes | yes |
342 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | Therefore remove the oom_lock for oom_reaper p... | yes | no | no |
343 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | The reaper serializes with exit_mmap by mmap_... | yes | no | yes |
344 | 70 | MDY6Q29tbWl0MjMyNTI5ODphZjU2NzlmYmM2NjlmMzFmN2... | Michal Hocko | Linus Torvalds | mm, oom: remove oom_lock from oom_reaper\n\noo... | https://api.github.com/repos/torvalds/linux/gi... | There is no synchronization with out_of_memor... | yes | no | yes |
df_current.loc[(df_current['message_preprocessed'].str.contains('ENOMEM'))]
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
53 | 14 | C_kwDOACN7MtoAKDYwZTI3OTNkNDQwYTNlYzk1YWJiNWQ2... | Michal Hocko | Linus Torvalds | mm, oom: do not trigger out_of_memory from the... | https://api.github.com/repos/torvalds/linux/gi... | There was no kmem specific reclaim for\nthe s... | no | no | yes |
212 | 45 | MDY6Q29tbWl0MjMyNTI5ODpmOWM2NDU2MjFhMjhlMzc4MT... | Tetsuo Handa | Linus Torvalds | memcg, oom: don't require __GFP_FS when invoki... | https://api.github.com/repos/torvalds/linux/gi... | Also, just returning -ENOMEM will be risky\nb... | no | yes | yes |
213 | 45 | MDY6Q29tbWl0MjMyNTI5ODpmOWM2NDU2MjFhMjhlMzc4MT... | Tetsuo Handa | Linus Torvalds | memcg, oom: don't require __GFP_FS when invoki... | https://api.github.com/repos/torvalds/linux/gi... | get_user_pages()) will leak\n-ENOMEM | no | yes | no |
1143 | 201 | MDY6Q29tbWl0MjMyNTI5ODozODEyYzhjOGYzOTUzOTIxZW... | Johannes Weiner | Linus Torvalds | mm: memcg: do not trap chargers with full call... | https://api.github.com/repos/torvalds/linux/gi... | Instead, remember the OOMing memcg in\n the... | yes | no | no |
1144 | 201 | MDY6Q29tbWl0MjMyNTI5ODozODEyYzhjOGYzOTUzOTIxZW... | Johannes Weiner | Linus Torvalds | mm: memcg: do not trap chargers with full call... | https://api.github.com/repos/torvalds/linux/gi... | pagefault_out_of_memory() will then call back... | yes | no | no |
get_commit('MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YTEyMGE2MjQ0ZDA1NDJlYzY1NGUzZDkz')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
226 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | oom: decouple mems_allowed from oom_unkillable... | yes | yes | no |
227 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | Commit ef08e3b4981a ("[PATCH] cpusets: confine... | no | no | yes |
228 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | However the commit 7887a3da753e ("[PATCH] oom:... | no | no | yes |
229 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | Unintentionally 7887a3da753e ("[PATCH] oom: cp... | no | yes | yes |
230 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | Later, commit 6cf86ac6f36b ("oom: filter tasks... | no | yes | yes |
231 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | However the combination of ab290adbaf8f ("oom... | no | no | yes |
232 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | /proc/<pid>/oom_score treat kernel thread hone... | no | yes | yes |
233 | 48 | MDY6Q29tbWl0MjMyNTI5ODphYzMxMWExNGM2ODJkY2Q4YT... | Shakeel Butt | Linus Torvalds | oom: decouple mems_allowed from oom_unkillable... | https://api.github.com/repos/torvalds/linux/gi... | Other than doing cpuset/mempolicy intersection... | no | yes | yes |
get_commit('MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMjFjYTk4YTk3MWNkMDBmMzMxMzE4YzA1')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1618 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | include cleanup: Update gfp.h and slab.h inclu... | yes | yes | no |
1619 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | percpu.h is included by sched.h and module.h a... | no | no | yes |
1620 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | percpu.h includes slab.h which\nin turn inclu... | no | yes | yes |
1621 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | percpu.h -> slab.h dependency is about to be r... | no | yes | yes |
1622 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Prepare for\nthis change by updating users of... | yes | yes | no |
1623 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | As this conversion\nneeds to touch large numb... | yes | yes | yes |
1624 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | The script does the followings | yes | no | yes |
1625 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | only the necessary includes are there | yes | yes | no |
1626 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | if only gfp is used,\n gfp.h, if slab is used... | yes | no | no |
1627 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | blocks and try to put the new include such t... | yes | yes | no |
1628 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | It's put in the include block which contains\... | yes | no | no |
1629 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | because the file doesn't have fitting includ... | yes | yes | no |
1630 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | The conversion was done in the following steps | yes | no | no |
1631 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | The initial automatic conversion of all .c fil... | yes | no | no |
1632 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | The script emitted errors for ~400\n files | yes | no | no |
1633 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Each error was manually checked | yes | no | no |
1634 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Some didn't need the inclusion,\n some need... | yes | no | no |
1635 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | This step added\n inclusions to around 150 ... | yes | no | no |
1636 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | The script was run again and the output was co... | yes | yes | no |
1637 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Several build tests were done and a couple of ... | yes | yes | no |
1638 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | lib/decompress_*.c used malloc/free() wrappers... | yes | no | yes |
1639 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | The script was run on all .h files but without... | yes | yes | no |
1640 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Most gfp.h\n inclusion directives were igno... | yes | yes | no |
1641 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Each\n slab.h inclusion directive was exami... | yes | no | no |
1642 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | percpu.h was updated not to include slab.h | yes | no | no |
1643 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Build test were done on the following configur... | yes | yes | no |
1644 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | CONFIG_GCOV_KERNEL was turned off for all tes... | yes | yes | no |
1645 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | percpu.h modifications were reverted so that i... | yes | yes | no |
1646 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | Given the fact that I had only a couple of fai... | yes | yes | no |
1647 | 295 | MDY6Q29tbWl0MjMyNTI5ODo1YTBlM2FkNmFmODY2MGJlMj... | Tejun Heo | Tejun Heo | include cleanup: Update gfp.h and slab.h inclu... | https://api.github.com/repos/torvalds/linux/gi... | If there is a breakage, it's likely to be some... | yes | no | no |
! pip install venn
Collecting venn Downloading venn-0.1.3.tar.gz (19 kB) Preparing metadata (setup.py) ... done Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from venn) (3.7.1) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (1.1.1) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (4.43.1) Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (1.4.5) Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (1.23.5) Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (23.2) Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (9.4.0) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (3.1.1) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->venn) (2.8.2) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->venn) (1.16.0) Building wheels for collected packages: venn Building wheel for venn (setup.py) ... done Created wheel for venn: filename=venn-0.1.3-py3-none-any.whl size=19698 sha256=0d464b89c5dba91b7b5d2198e0e261fac016bbc957143cb76dbe42d72737bfa2 Stored in directory: /root/.cache/pip/wheels/9c/ce/43/705b4a04cd822891d1d7a4c43fc444b4798978e72c79528c5f Successfully built venn Installing collected packages: venn Successfully installed venn-0.1.3
decision_only_sentences = list( df_current.loc[ (df_current['Decision'] == 'yes') & (df_current['Rationale'] == 'no') & ( df_current['Supporting Facts'] == 'no') ]['message_preprocessed'])
rationale_only_sentences = list( df_current.loc[ (df_current['Decision'] == 'no') & (df_current['Rationale'] == 'yes') & ( df_current['Supporting Facts'] == 'no') ]['message_preprocessed'])
facts_only_sentences = list( df_current.loc[ (df_current['Decision'] == 'no') & (df_current['Rationale'] == 'no') & ( df_current['Supporting Facts'] == 'yes') ]['message_preprocessed'])
decision_rationale_sentences = list( df_current.loc[ (df_current['Decision'] == 'yes') & (df_current['Rationale'] == 'yes') & ( df_current['Supporting Facts'] == 'no') ]['message_preprocessed'])
decision_facts_sentences = list( df_current.loc[ (df_current['Decision'] == 'yes') & (df_current['Rationale'] == 'no') & ( df_current['Supporting Facts'] == 'yes') ]['message_preprocessed'])
rationale_facts_sentences = list( df_current.loc[ (df_current['Decision'] == 'no') & (df_current['Rationale'] == 'yes') & ( df_current['Supporting Facts'] == 'yes') ]['message_preprocessed'])
decision_rationale_facts_sentences = list( df_current.loc[ (df_current['Decision'] == 'yes') & (df_current['Rationale'] == 'yes') & ( df_current['Supporting Facts'] == 'yes') ]['message_preprocessed'])
print( len(decision_only_sentences), len(rationale_only_sentences), len(facts_only_sentences), len(decision_rationale_sentences), len(decision_facts_sentences), len(rationale_facts_sentences), len(decision_rationale_facts_sentences))
431 49 397 556 136 427 220
431 + 49+ 397+ 556+ 136+ 427+ 220
2216
no_no_no_sentences = list( df_current.loc[ (df_current['Decision'] == 'no') & (df_current['Rationale'] == 'no') & ( df_current['Supporting Facts'] == 'no') ]['message_preprocessed'])
len(no_no_no_sentences)
18
2216 + 18
2234
from matplotlib_venn import venn3_unweighted
from matplotlib import pyplot as plt
from matplotlib import colors
# if use venn3 function, the decision_facts_sentences () will not show
v = venn3_unweighted(subsets = {
'100': len(decision_only_sentences) , # Abc # 431
'110': len(decision_rationale_sentences), # ABc # 556
'111': len(decision_rationale_facts_sentences), # ABC # 220
'011': len(rationale_facts_sentences), # aBC # 427
'001': len(facts_only_sentences), # abC # 397
'101': len(decision_facts_sentences), # AbC # 136
'010': len(rationale_only_sentences) #aBc # 49
},
set_labels = ('Decision','Rationale','Supporting Facts'),
# set_colors=((173/255, 216/255, 230/255),(244/255, 194/255, 194/255),(255/255, 250/255, 205/255)), alpha= 1
set_colors=('#ADD8E6','#F4C2C2','#FFFACD'), alpha= 1
#
)
v.get_patch_by_id('100').set_edgecolor('black')
v.get_patch_by_id('001').set_edgecolor('black')
v.get_patch_by_id('010').set_edgecolor('black')
v.get_patch_by_id('110').set_color('#C8A2C8') #decision_rationale
v.get_patch_by_id('110').set_alpha(1)
v.get_patch_by_id('110').set_edgecolor('black')
v.get_patch_by_id('111').set_color('#dfdfdf') #decision_rationale_facts
v.get_patch_by_id('111').set_alpha(1)
v.get_patch_by_id('111').set_edgecolor('black')
v.get_patch_by_id('011').set_color('#FFAE42') #rationale_facts
v.get_patch_by_id('011').set_alpha(1)
v.get_patch_by_id('011').set_edgecolor('black')
v.get_patch_by_id('101').set_color('#a6e7c6') #decision_facts
v.get_patch_by_id('101').set_alpha(1)
v.get_patch_by_id('101').set_edgecolor('black')
#plt.show()
plt.savefig('venn.pdf', bbox_inches='tight')
more_stopwords = set({'OOM','mm','memory','killer','kernel','victim','task','linux','thread','process','system','patch','oom_kill', 'memcg'})
from wordcloud import WordCloud,STOPWORDS
from matplotlib import pyplot as plt
plt.figure(figsize=(6,3.8))
text = decision_only_sentences
cloud_im = WordCloud(
stopwords=STOPWORDS.union(more_stopwords),
background_color='white',
collocations=False,
width=2500,
height=1500
).generate(" ".join(text))
#plt.axis('off') # this should work for a pdf
plt.xticks([], []) # a workaround to have a frame with an SVG
plt.yticks([], [])
#plt.title("Decision",fontsize=20)
plt.imshow(cloud_im, interpolation="bilinear")
plt.savefig('decisions wordcloud.svg',bbox_inches='tight')
from wordcloud import WordCloud,STOPWORDS
plt.figure(figsize=(6,3.8))
text = rationale_only_sentences
cloud_im = WordCloud(
stopwords= STOPWORDS.union(more_stopwords) ,
background_color='white',
collocations=False,
width=2500,
height=1500
).generate(" ".join(text))
#plt.axis('off') # this should work for a pdf
plt.xticks([], []) # a workaround to have a frame with an SVG
plt.yticks([], [])
#plt.title("Rationale",fontsize=20)
plt.imshow(cloud_im, interpolation="bilinear")
plt.savefig('rationale wordcloud.svg',bbox_inches='tight')
from wordcloud import WordCloud,STOPWORDS
plt.figure(figsize=(6,3.8))
text = facts_only_sentences
cloud_im = WordCloud(
stopwords= STOPWORDS.union(more_stopwords) ,
background_color='white',
collocations=False,
width=2500,
height=1500
).generate(" ".join(text))
#plt.axis('off') # this should work for a pdf
plt.xticks([], []) # a workaround to have a frame with an SVG
plt.yticks([], [])
#plt.title("Facts",fontsize=20)
plt.imshow(cloud_im, interpolation="bilinear")
plt.savefig('facts wordcloud.svg',bbox_inches='tight')
total_number_of_commits = df_current['commit ID'].nunique()
total_number_of_commits
366
# to be applied by sentence
def is_rationale(row):
if ( row["Rationale"] == 'yes'):
return True
return False
def commit_contains_rationale(commitID):
# selecting rows of the commit
rslt_df = df_current[df_current['commit ID'] == commitID]
#print(rslt_df)
# select rows of the commit that contain rationale
df2 = rslt_df.apply(lambda x : True
if is_rationale(x) else False, axis = 1)
#print(df2)
# at least one sentence is labeled as rationale
#print(len(df2[df2 == True]))
if len(df2[df2 == True].index) > 0 :
return True
return False
get_commit('C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2NDUzZjgzMDRhZWE2MGRmYmQ')
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | mm: reduce noise in show_mem for lowmem alloca... | yes | yes | no |
1 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | While discussing early DMA pool pre-allocation... | no | yes | yes |
2 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | Those zones are usually not\npopulated on all... | no | no | yes |
3 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | This is an attempt to reduce the ballast that ... | yes | yes | no |
4 | 0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | Andrew Morton | mm: reduce noise in show_mem for lowmem alloca... | https://api.github.com/repos/torvalds/linux/gi... | Please note that\nI have only compile tested ... | yes | yes | no |
df_current.iloc[0]['commit ID']
'C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2NDUzZjgzMDRhZWE2MGRmYmQ'
commit_contains_rationale(df_current.iloc[0]['commit ID'])
True
commits_that_contain_rationale_list=[]
for comit_id in commits_IDs_list :
if commit_contains_rationale(comit_id):
# print(comit_id)
commits_that_contain_rationale_list.append(comit_id)
number_of_commits_that_contain_rationale = len(commits_that_contain_rationale_list)
number_of_commits_that_contain_rationale
362
rationale_percentage = (number_of_commits_that_contain_rationale / total_number_of_commits ) * 100
rationale_percentage
98.90710382513662
# calculate rationale density per commit
def rationale_density(commitID):
# selecting rows of the commit
c_df = df_current[df_current['commit ID'] == commitID]
# print(c_df)
# select rows of the commit that contain rationale
df2 = c_df.apply(lambda x : True
if is_rationale(x) else False, axis = 1)
#print(df2)
return len(df2[df2 == True].index) / len(c_df)
rationale_density(df_current.iloc[0]['commit ID'])
0.8
commits_rationale_density_list=[]
for comit_id in commits_IDs_list :
commits_rationale_density_list.append(rationale_density(comit_id))
#commits_rationale_density_list
# returns nb of rows in a commit
def commit_size(commitID):
# selecting rows of the commit
c_df = df_current[df_current['commit ID'] == commitID]
return len(c_df)
commits_length_list = []
for comit_id in commits_IDs_list :
commits_length_list.append(commit_size(comit_id))
#commits_length_list
from scipy import stats
res = stats.normaltest(commits_rationale_density_list)
res # --> p.value < 0.05 , so Not a normal distribution
NormaltestResult(statistic=7.810345477415302, pvalue=0.020137475669311133)
from matplotlib import pyplot as plt
import seaborn as sns
sns.set_style('darkgrid')
plt.hist(commits_rationale_density_list)
plt.xlabel('Commit rationale density')
plt.ylabel('Number of commits')
Text(0, 0.5, 'Number of commits')
from scipy import stats
res = stats.normaltest(commits_length_list)
res ## p_value < 0.05, not a normal distribution!
NormaltestResult(statistic=252.19317202940675, pvalue=1.725633276577838e-55)
from matplotlib import pyplot as plt
import seaborn as sns
plt.hist(commits_length_list)
plt.xlabel('Commit Length')
plt.ylabel('Number of commits')
Text(0, 0.5, 'Number of commits')
res = stats.spearmanr(commits_rationale_density_list, commits_length_list)
res # p< 0.05, but R close to 0 so No corrolation between the size and the rationale density of the commit
SignificanceResult(statistic=-0.32308539275548304, pvalue=2.4450487439886116e-10)
def number_of_commits_with_size_and_rationale_density(si,ri):
n = 0
for comit_id in commits_IDs_list :
if commit_size(comit_id) == si and rationale_density(comit_id) ==ri:
n = n +1
return n
# fig, ax = plt.subplots(figsize=(3,4))
marker_sizes = [12*int(number_of_commits_with_size_and_rationale_density(si, commits_rationale_density_list[i])) for i, si in enumerate(commits_length_list)]
marker_colors = [int(number_of_commits_with_size_and_rationale_density(si, commits_rationale_density_list[i])) for i, si in enumerate(commits_length_list)]
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('white')
title_font_size = 24
text_font_size = 10
tick_label_size = 8
legend_font_size = 8
annotation_fontsize = 6
#fig = plt.figure(figsize=(4,5))
fig = plt.figure(figsize=(3.8,4.3))
sc1 = plt.scatter(
commits_length_list, commits_rationale_density_list,
s=marker_sizes,
c=marker_colors,
# color='orange',
cmap="Spectral",# "RdYlGn", #"seismic",# "Spectral",
# alpha=0.7
)#, s=marker_sizes)
plt.xlabel("Commit size (Number of sentences)", fontsize=text_font_size)
plt.ylabel("Rationale Density", fontsize=text_font_size)
#plt.title = ('Rationale Density ...')
# We change the fontsize of minor ticks label
plt.tick_params(axis='both', which='major', labelsize=tick_label_size)
plt.tick_params(axis='both', which='minor', labelsize=tick_label_size)
# for i, si in enumerate(commits_length_list):
# rj = commits_rationale_density_list[i]
# plt.annotate(number_of_commits_with_size_and_rationale_density(si,rj), (si, rj),fontsize=annotation_fontsize)
# plt.legend( ['Nb. of commits'], loc='upper right')
# plt.legend(*sc1.legend_elements("sizes",num=8, alpha=0.6), title="Number of commits", loc='upper right')
# produce a legend with the unique colors from the scatter
plt.legend(*sc1.legend_elements(),
title="Number of commits", loc='upper right',
ncol=2,fancybox=True,
frameon=True,
framealpha=0.5,
fontsize=legend_font_size
)#, shadow=True)
plt.tight_layout()
plt.savefig('rationale_density_over_size.pdf', bbox_inches='tight')
plt.show()
average_rationale_density = sum (commits_rationale_density_list) / number_of_commits_that_contain_rationale
average_rationale_density
0.6143246795251692
authors_list = []
for comit_id in commits_IDs_list:
rslt_df = df_current[df_current['commit ID'] == comit_id]
author = rslt_df.iloc[0]['author name']
authors_list.append(author)
# create a dataframw with 3 comulns : comit_ID, density, author
df_rq4 = pd.DataFrame(
{'comit_ID': commits_IDs_list,
'author': authors_list,
'comit_rationale_density': commits_rationale_density_list
})
df_rq4
comit_ID | author | comit_rationale_density | |
---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | Michal Hocko | 0.800000 |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | Suren Baghdasaryan | 0.428571 |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | Andrew Morton | 1.000000 |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | Hugh Dickins | 0.666667 |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | Suren Baghdasaryan | 0.666667 |
... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | Anton Blanchard | 0.800000 |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | Marcelo Tosatti | 0.500000 |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | Janet Morgan | 0.750000 |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | Andrea Arcangeli | 0.333333 |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | Linus Torvalds | 0.500000 |
366 rows Γ 3 columns
df_rq4['Number of commits'] = df_rq4.groupby('author')['author'].transform('count')
dff4 = df_rq4.groupby(['author'], as_index=False).mean()
dff4['Number of commits'] = dff4['Number of commits'].apply(lambda x: int(x))
dff4
<ipython-input-138-6f6b2c7f1b34>:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. dff4 = df_rq4.groupby(['author'], as_index=False).mean()
author | comit_rationale_density | Number of commits | |
---|---|---|---|
0 | Al Viro | 0.750000 | 2 |
1 | Alexey Dobriyan | 0.314286 | 2 |
2 | Andrea Arcangeli | 0.541667 | 2 |
3 | Andrew Morgan | 0.250000 | 1 |
4 | Andrew Morton | 0.669444 | 6 |
... | ... | ... | ... |
87 | Yafang Shao | 0.524242 | 3 |
88 | Yaowei Bai | 0.666667 | 2 |
89 | Yasunori Goto | 0.600000 | 1 |
90 | Zhiyuan Dai | 1.000000 | 1 |
91 | yuzhoujian | 0.350000 | 2 |
92 rows Γ 3 columns
from scipy import stats
res = stats.normaltest(list(dff4['comit_rationale_density']))
res # --> p.value < 0.05 , so Not a normal distribution
NormaltestResult(statistic=1.8189394331377506, pvalue=0.4027377325652825)
from scipy import stats
res = stats.normaltest(list(dff4['Number of commits']))
res # --> p.value < 0.05 , so Not a normal distribution
NormaltestResult(statistic=148.98381944503663, pvalue=4.4521999565959624e-33)
res = stats.spearmanr(dff4['comit_rationale_density'], dff4['Number of commits'])
res
# NOT significant
#TODO: maybe define dependent, and indepednet features
SignificanceResult(statistic=-0.05020277979961227, pvalue=0.6346129035969956)
res = stats.pearsonr(dff4['comit_rationale_density'], dff4['Number of commits'])
res
# NOT significant
#TODO: maybe define dependent, and indepednet features
PearsonRResult(statistic=-0.0065746593719364765, pvalue=0.9504032800686055)
plt.figure(figsize=(15,6))
sns.scatterplot(x=dff4['comit_rationale_density'], y=dff4['Number of commits'] )
<Axes: xlabel='comit_rationale_density', ylabel='Number of commits'>
plt.figure(figsize=(15,6))
sns.scatterplot(x=dff4['comit_rationale_density'], y=dff4['Number of commits'], hue=dff4['author'] )
<Axes: xlabel='comit_rationale_density', ylabel='Number of commits'>
import numpy as np
import matplotlib.pyplot as plt
def number_of_authors_with_number_of_commits_and_rationale_density(ci,ri):
n = 0
for author in list(dff4.index) :
c= int(dff4.loc[dff4.index == author]['Number of commits'])
r = float(dff4.loc[dff4.index == author]['comit_rationale_density'])
if ( c == ci ) & ( r == ri) :
n = n +1
return n
x = dff4['Number of commits']
y = dff4['comit_rationale_density']
# sc = plt.scatter(x , y, s=x)
# plt.legend(*sc.legend_elements("sizes", num=5))
# plt.show()
# sc = plt.scatter(x , y, color='gold')
#plt.legend(*sc.legend_elements("sizes", num=8, color='green'), title="Number of commits per author")
marker_sizes = [
20*int(number_of_authors_with_number_of_commits_and_rationale_density(list(dff4['Number of commits'])[i],list(dff4['comit_rationale_density'])[i]))\
for i, fi in enumerate(list(dff4.index))
]
marker_colors = [
int(number_of_authors_with_number_of_commits_and_rationale_density(list(dff4['Number of commits'])[i],list(dff4['comit_rationale_density'])[i]))\
for i, fi in enumerate(list(dff4.index))
]
# fig = plt.figure(figsize=(4,5))
fig = plt.figure(figsize=(3.8,4.3))
# fig, ax = plt.subplots(figsize=(3,4))
sc1 = plt.scatter(
x, y,
s=marker_sizes,
c=marker_colors,
# color='orange',
cmap= "RdYlGn",#"Spectral",
)#, s=marker_sizes)
plt.xlabel("Number of commits per author", fontsize=text_font_size)
plt.ylabel("Average Rationale Density", fontsize=text_font_size)
# We change the fontsize of minor ticks label
plt.tick_params(axis='both', which='major', labelsize=tick_label_size)
plt.tick_params(axis='both', which='minor', labelsize=tick_label_size)
# for i, fi in enumerate(list(dff4.index)):
# ci = list(dff4['count'])[i]
# rj = list(dff4['comit_rationale_density'])[i]
# plt.annotate(number_of_authors_with_number_of_commits_and_rationale_density(ci,rj), (ci, rj))
# only one line may be specified; ymin & ymax specified as a percentage of y-range
axvline1 = plt.axvline(x=16, ymin=0.5, ymax=0.8, color='purple', ls='--')
axhline2 = plt.hlines(y=0.2, xmin=0, xmax=15, color='teal', ls='--')
axhline3 = plt.hlines(y=0.7, xmin=0, xmax=15, color='green', ls='--')
legend1 = plt.legend([axvline1, axhline2, axhline3],['Number of commits = 16', 'Rationale density = 0.2', 'Rationale density = 0.7'], loc='lower right')
plt.legend(*sc1.legend_elements(),
title="Number of authors", loc='upper right',
ncol=2,fancybox=True,
frameon=True,
framealpha=0.5,
fontsize=legend_font_size
)#, shadow=True)
plt.gca().add_artist(legend1)
plt.tight_layout()
plt.savefig('rationale_density_per_author.pdf',bbox_inches='tight' )
plt.show()
dff4.sort_values(by=['comit_rationale_density'], ascending= True) # 4 comits < 0.2
author | comit_rationale_density | Number of commits | |
---|---|---|---|
49 | Matthias Kaehlcke | 0.000 | 1 |
60 | Pavel Emelianov | 0.000 | 1 |
8 | Balbir Singh | 0.125 | 2 |
3 | Andrew Morgan | 0.250 | 1 |
80 | Vegard Nossum | 0.250 | 1 |
... | ... | ... | ... |
76 | Tang Yizhou | 1.000 | 1 |
90 | Zhiyuan Dai | 1.000 | 1 |
56 | Nishanth Aravamudan | 1.000 | 1 |
53 | Mike Rapoport | 1.000 | 1 |
44 | Li Zefan | 1.000 | 2 |
92 rows Γ 3 columns
df_current.loc[df_current['author name']=='Li Zefan']
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1853 | 327 | MDY6Q29tbWl0MjMyNTI5ODo5N2Q4N2M5NzEwYmM2YzVmMj... | Li Zefan | Linus Torvalds | oom_kill: remove unused parameter in badness()... | https://api.github.com/repos/torvalds/linux/gi... | oom_kill: remove unused parameter in badness() | yes | yes | no |
1854 | 327 | MDY6Q29tbWl0MjMyNTI5ODo5N2Q4N2M5NzEwYmM2YzVmMj... | Li Zefan | Linus Torvalds | oom_kill: remove unused parameter in badness()... | https://api.github.com/repos/torvalds/linux/gi... | In commit 4c4a22148909e4c003562ea7ffe0a06e2691... | no | yes | yes |
1871 | 330 | MDY6Q29tbWl0MjMyNTI5ODplMTE1ZjJkODkyNTM0OTBmYj... | Li Zefan | Linus Torvalds | memcg: fix oops in oom handling\n\nWhen I used... | https://api.github.com/repos/torvalds/linux/gi... | memcg: fix oops in oom handling | yes | yes | no |
1872 | 330 | MDY6Q29tbWl0MjMyNTI5ODplMTE1ZjJkODkyNTM0OTBmYj... | Li Zefan | Linus Torvalds | memcg: fix oops in oom handling\n\nWhen I used... | https://api.github.com/repos/torvalds/linux/gi... | When I used a test program to fork mass proces... | no | yes | yes |
1873 | 330 | MDY6Q29tbWl0MjMyNTI5ODplMTE1ZjJkODkyNTM0OTBmYj... | Li Zefan | Linus Torvalds | memcg: fix oops in oom handling\n\nWhen I used... | https://api.github.com/repos/torvalds/linux/gi... | This is because tsk->sighand is not guarded by... | yes | yes | yes |
df_current.loc[df_current['author name']=='Mike Rapoport']
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
397 | 80 | MDY6Q29tbWl0MjMyNTI5ODplOGIwOThmYzU3NDdhN2M4Nz... | Mike Rapoport | Linus Torvalds | mm: kernel-doc: add missing parameter descript... | https://api.github.com/repos/torvalds/linux/gi... | mm: kernel-doc: add missing parameter descript... | yes | yes | no |
df_current.loc[df_current['author name']=='Matthias Kaehlcke']
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1926 | 342 | MDY6Q29tbWl0MjMyNTI5ODo3YjE5MTVhOTg5ZWE0ZDQyNm... | Matthias Kaehlcke | Linus Torvalds | mm/oom_kill.c: Use list_for_each_entry instead... | https://api.github.com/repos/torvalds/linux/gi... | mm/oom_kill.c: Use list_for_each_entry instead... | yes | no | no |
1927 | 342 | MDY6Q29tbWl0MjMyNTI5ODo3YjE5MTVhOTg5ZWE0ZDQyNm... | Matthias Kaehlcke | Linus Torvalds | mm/oom_kill.c: Use list_for_each_entry instead... | https://api.github.com/repos/torvalds/linux/gi... | mm/oom_kill.c: Convert list_for_each to list_f... | yes | no | no |
df_current.loc[df_current['author name']=='Pavel Emelianov']
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1890 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | Memory controller: OOM handling | yes | no | no |
1891 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | Out of memory handling for cgroups over their ... | yes | no | no |
1892 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | A task from the\ncgroup over limit is chosen u... | yes | no | no |
1893 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | TODO | no | no | no |
1894 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | 1 | no | no | no |
1895 | 335 | MDY6Q29tbWl0MjMyNTI5ODpjN2JhNWM5ZTgxNzY3MDRiZm... | Pavel Emelianov | Linus Torvalds | Memory controller: OOM handling\n\nOut of memo... | https://api.github.com/repos/torvalds/linux/gi... | As discussed in the OLS BOF session, consider ... | yes | no | no |
df_current.loc[df_current['author name']=='Balbir Singh']
commit number | commit ID | author name | committer name | message | URL | message_preprocessed | Decision | Rationale | Supporting Facts | |
---|---|---|---|---|---|---|---|---|---|---|
1780 | 314 | MDY6Q29tbWl0MjMyNTI5ODplMjIyNDMyYmZhN2RjZjZlYz... | Balbir Singh | Linus Torvalds | memcg: show memcg information during OOM\n\nAd... | https://api.github.com/repos/torvalds/linux/gi... | memcg: show memcg information during OOM | yes | no | no |
1781 | 314 | MDY6Q29tbWl0MjMyNTI5ODplMjIyNDMyYmZhN2RjZjZlYz... | Balbir Singh | Linus Torvalds | memcg: show memcg information during OOM\n\nAd... | https://api.github.com/repos/torvalds/linux/gi... | Add RSS and swap to OOM output from memcg\nDis... | yes | no | no |
1782 | 314 | MDY6Q29tbWl0MjMyNTI5ODplMjIyNDMyYmZhN2RjZjZlYz... | Balbir Singh | Linus Torvalds | memcg: show memcg information during OOM\n\nAd... | https://api.github.com/repos/torvalds/linux/gi... | Thanks to Johannes Weiner, Li Zefan, David Rie... | no | no | no |
1783 | 314 | MDY6Q29tbWl0MjMyNTI5ODplMjIyNDMyYmZhN2RjZjZlYz... | Balbir Singh | Linus Torvalds | memcg: show memcg information during OOM\n\nAd... | https://api.github.com/repos/torvalds/linux/gi... | Sample output\nTask in /a/x killed as a result... | yes | no | yes |
1876 | 332 | MDY6Q29tbWl0MjMyNTI5ODowMGYwYjgyNTllNDg5NzljMz... | Balbir Singh | Linus Torvalds | Memory controller: rename to Memory Resource C... | https://api.github.com/repos/torvalds/linux/gi... | Memory controller: rename to Memory Resource C... | yes | no | no |
1877 | 332 | MDY6Q29tbWl0MjMyNTI5ODowMGYwYjgyNTllNDg5NzljMz... | Balbir Singh | Linus Torvalds | Memory controller: rename to Memory Resource C... | https://api.github.com/repos/torvalds/linux/gi... | Rename Memory Controller to Memory Resource Co... | yes | no | no |
1878 | 332 | MDY6Q29tbWl0MjMyNTI5ODowMGYwYjgyNTllNDg5NzljMz... | Balbir Singh | Linus Torvalds | Memory controller: rename to Memory Resource C... | https://api.github.com/repos/torvalds/linux/gi... | Reflect the same\nchanges in the CONFIG defin... | yes | yes | no |
1879 | 332 | MDY6Q29tbWl0MjMyNTI5ODowMGYwYjgyNTllNDg5NzljMz... | Balbir Singh | Linus Torvalds | Memory controller: rename to Memory Resource C... | https://api.github.com/repos/torvalds/linux/gi... | Group\ntogether the config options for Resour... | yes | no | no |
dff4.sort_values(by=['comit_rationale_density'], ascending= False)
author | comit_rationale_density | Number of commits | |
---|---|---|---|
76 | Tang Yizhou | 1.000 | 1 |
19 | Davidlohr Bueso | 1.000 | 1 |
53 | Mike Rapoport | 1.000 | 1 |
56 | Nishanth Aravamudan | 1.000 | 1 |
27 | Ilya Dryomov | 1.000 | 1 |
... | ... | ... | ... |
43 | Lai Jiangshan | 0.250 | 1 |
3 | Andrew Morgan | 0.250 | 1 |
8 | Balbir Singh | 0.125 | 2 |
49 | Matthias Kaehlcke | 0.000 | 1 |
60 | Pavel Emelianov | 0.000 | 1 |
92 rows Γ 3 columns
from datetime import datetime
import json
import requests
classic_token = 'SECRET_TOEKN'
def commit_date(comit_ID):
rslt_df = df_current[df_current['commit ID'] == comit_ID]
url = rslt_df.iloc[0]['URL']
x = requests.get(url, auth =('USERNAME', classic_token))
data = json.loads(x.text)
#print(data)
#print(data)
#print(data['committer'])
# print(data['author']['date'][:10])
datet = datetime.strptime(data['author']['date'][:10], "%Y-%m-%d")
#print (datet.month)
return datet
commits_date_list = []
for comit_id in commits_IDs_list :
commits_date_list.append(commit_date(comit_id))
#commits_date_list
len(commits_date_list)
366
# create a dataframw with 3 comulns : comit_ID, density, comit_date
df_rq3 = pd.DataFrame(
{'comit_ID': commits_IDs_list,
'comit_date': commits_date_list,
'comit_rationale_density': commits_rationale_density_list,
'comit_size' : commits_length_list
})
df_rq3
comit_ID | comit_date | comit_rationale_density | comit_size | |
---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.800000 | 5 |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | 2022-05-31 | 0.428571 | 7 |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | 2022-06-01 | 1.000000 | 1 |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | 2022-02-15 | 0.666667 | 6 |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | 2022-01-14 | 0.666667 | 3 |
... | ... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | 2005-07-08 | 0.800000 | 5 |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | 2005-07-08 | 0.500000 | 2 |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | 2005-06-22 | 0.750000 | 4 |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | 2005-04-16 | 0.333333 | 3 |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | 2005-04-16 | 0.500000 | 4 |
366 rows Γ 4 columns
df_rq3['Date_month'] = df_rq3['comit_date'].dt.to_period('M')
df_rq3['Date_year'] = df_rq3['comit_date'].dt.to_period('Y')
df_rq3
comit_ID | comit_date | comit_rationale_density | comit_size | Date_month | Date_year | |
---|---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.800000 | 5 | 2022-08 | 2022 |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | 2022-05-31 | 0.428571 | 7 | 2022-05 | 2022 |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | 2022-06-01 | 1.000000 | 1 | 2022-06 | 2022 |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | 2022-02-15 | 0.666667 | 6 | 2022-02 | 2022 |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | 2022-01-14 | 0.666667 | 3 | 2022-01 | 2022 |
... | ... | ... | ... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | 2005-07-08 | 0.800000 | 5 | 2005-07 | 2005 |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | 2005-07-08 | 0.500000 | 2 | 2005-07 | 2005 |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | 2005-06-22 | 0.750000 | 4 | 2005-06 | 2005 |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | 2005-04-16 | 0.333333 | 3 | 2005-04 | 2005 |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | 2005-04-16 | 0.500000 | 4 | 2005-04 | 2005 |
366 rows Γ 6 columns
df_rq3['Number of commits'] = df_rq3.groupby('Date_month')['Date_month'].transform('count')
dff3_m = df_rq3.groupby(['Date_month']).mean()
dff3_m
<ipython-input-161-ce5e88b0453a>:3: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. dff3_m = df_rq3.groupby(['Date_month']).mean()
comit_rationale_density | comit_size | Number of commits | |
---|---|---|---|
Date_month | |||
2005-04 | 0.416667 | 3.5 | 2.0 |
2005-06 | 0.750000 | 4.0 | 1.0 |
2005-07 | 0.650000 | 3.5 | 2.0 |
2005-09 | 0.745833 | 13.0 | 3.0 |
2005-10 | 0.500000 | 2.0 | 1.0 |
... | ... | ... | ... |
2022-01 | 0.645833 | 5.5 | 2.0 |
2022-02 | 0.666667 | 6.0 | 1.0 |
2022-05 | 0.428571 | 7.0 | 1.0 |
2022-06 | 1.000000 | 1.0 | 1.0 |
2022-08 | 0.800000 | 5.0 | 1.0 |
115 rows Γ 3 columns
dff3_m.index
PeriodIndex(['2005-04', '2005-06', '2005-07', '2005-09', '2005-10', '2006-01', '2006-02', '2006-03', '2006-04', '2006-06', ... '2021-05', '2021-07', '2021-09', '2021-10', '2021-11', '2022-01', '2022-02', '2022-05', '2022-06', '2022-08'], dtype='period[M]', name='Date_month', length=115)
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.patheffects as pe
# fig, ax = plt.subplots(figsize=(12,4))
fig, ax = plt.subplots(figsize=(12,3))
ax.plot(pd.to_datetime(dff3_m.index.to_timestamp()), dff3_m['comit_rationale_density'],color='#F4C2C2', marker='*', alpha=1, linewidth=2, path_effects=[pe.Stroke(linewidth=2, foreground='k'), pe.Normal()])
# Major ticks every half year, minor ticks every month,
ax.xaxis.set_major_locator(mdates.MonthLocator(bymonth=(1, 7)))
ax.xaxis.set_minor_locator(mdates.MonthLocator())
#ax.grid(True)
# Text in the x-axis will be displayed in 'YYYY-mm' format.
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
# Rotates and right-aligns the x labels so they don't crowd each other.
for label in ax.get_xticklabels(which='major'):
label.set(rotation=30, horizontalalignment='right')
ax.set_xlabel("Time (months)", fontsize=text_font_size)
ax.set_ylabel("Average Rationale Density", fontsize=text_font_size)
fig.legend(['Average rationale density'], loc='lower center', bbox_to_anchor=(0.68, 0.15), framealpha=0)
plt.savefig('evolution__rationale_per_month.pdf', bbox_inches='tight')
plt.show()
#dff3_m['Number of commits'] and dff3_m['comit_rationale_density']
from scipy import stats
res = stats.normaltest(list(dff3_m['Number of commits']))
res # --> p.value < 0.05 , so Not a normal distribution
NormaltestResult(statistic=140.08232029754225, pvalue=3.815141422030692e-31)
res = stats.spearmanr(dff3_m['Number of commits'], dff3_m['comit_rationale_density'])
res
# NOT significant
SignificanceResult(statistic=-0.013852785098698105, pvalue=0.8831803620275147)
df_rq3
comit_ID | comit_date | comit_rationale_density | comit_size | Date_month | Date_year | Number of commits | |
---|---|---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.800000 | 5 | 2022-08 | 2022 | 1 |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | 2022-05-31 | 0.428571 | 7 | 2022-05 | 2022 | 1 |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | 2022-06-01 | 1.000000 | 1 | 2022-06 | 2022 | 1 |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | 2022-02-15 | 0.666667 | 6 | 2022-02 | 2022 | 1 |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | 2022-01-14 | 0.666667 | 3 | 2022-01 | 2022 | 2 |
... | ... | ... | ... | ... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | 2005-07-08 | 0.800000 | 5 | 2005-07 | 2005 | 2 |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | 2005-07-08 | 0.500000 | 2 | 2005-07 | 2005 | 2 |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | 2005-06-22 | 0.750000 | 4 | 2005-06 | 2005 | 1 |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | 2005-04-16 | 0.333333 | 3 | 2005-04 | 2005 | 2 |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | 2005-04-16 | 0.500000 | 4 | 2005-04 | 2005 | 2 |
366 rows Γ 7 columns
df_rq3['Number of commits'] = df_rq3.groupby('Date_year')['Date_year'].transform('count')
df_rq3
comit_ID | comit_date | comit_rationale_density | comit_size | Date_month | Date_year | Number of commits | |
---|---|---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.800000 | 5 | 2022-08 | 2022 | 6 |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | 2022-05-31 | 0.428571 | 7 | 2022-05 | 2022 | 6 |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | 2022-06-01 | 1.000000 | 1 | 2022-06 | 2022 | 6 |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | 2022-02-15 | 0.666667 | 6 | 2022-02 | 2022 | 6 |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | 2022-01-14 | 0.666667 | 3 | 2022-01 | 2022 | 6 |
... | ... | ... | ... | ... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | 2005-07-08 | 0.800000 | 5 | 2005-07 | 2005 | 9 |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | 2005-07-08 | 0.500000 | 2 | 2005-07 | 2005 | 9 |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | 2005-06-22 | 0.750000 | 4 | 2005-06 | 2005 | 9 |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | 2005-04-16 | 0.333333 | 3 | 2005-04 | 2005 | 9 |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | 2005-04-16 | 0.500000 | 4 | 2005-04 | 2005 | 9 |
366 rows Γ 7 columns
dff3_y = df_rq3.groupby(['Date_year']).mean()
dff3_y
<ipython-input-168-9ac1f2804c71>:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. dff3_y = df_rq3.groupby(['Date_year']).mean()
comit_rationale_density | comit_size | Number of commits | |
---|---|---|---|
Date_year | |||
2005 | 0.624537 | 6.555556 | 9.0 |
2006 | 0.667689 | 5.029412 | 34.0 |
2007 | 0.618079 | 4.045455 | 22.0 |
2008 | 0.521574 | 5.666667 | 18.0 |
2009 | 0.571650 | 6.238095 | 21.0 |
2010 | 0.588951 | 6.285714 | 42.0 |
2011 | 0.607323 | 6.095238 | 21.0 |
2012 | 0.577116 | 4.925926 | 27.0 |
2013 | 0.523810 | 8.500000 | 4.0 |
2014 | 0.665873 | 6.230769 | 13.0 |
2015 | 0.615147 | 7.192308 | 26.0 |
2016 | 0.612658 | 6.600000 | 45.0 |
2017 | 0.608372 | 7.136364 | 22.0 |
2018 | 0.613674 | 7.333333 | 15.0 |
2019 | 0.560125 | 8.562500 | 16.0 |
2020 | 0.519192 | 4.222222 | 9.0 |
2021 | 0.704675 | 5.375000 | 16.0 |
2022 | 0.697817 | 5.000000 | 6.0 |
dff3_y.plot(marker = "o")
<Axes: xlabel='Date_year'>
#fig, ax = plt.subplots(figsize=(12,4))
fig, ax = plt.subplots(figsize=(12,3))
ax2 = ax.twinx()
ax3 = ax.twinx()
rspine = ax3.spines['right']
rspine.set_position(('axes', 1.15))
ax3.set_frame_on(True)
ax3.patch.set_visible(False)
fig.subplots_adjust(right=0.7)
dff3_y['comit_rationale_density'].plot(ax=ax, color='#F4C2C2', marker='*', alpha=1, linewidth=2, path_effects=[pe.Stroke(linewidth=2, foreground='k'), pe.Normal()])
ax.set_xlabel("Time (years)", fontsize=text_font_size)
ax.set_ylabel("Average Rationale Density", fontsize=text_font_size)
dff3_y['comit_size'].plot(ax=ax2, color='#0000cc', marker='o')
ax2.set_ylabel("Commit size", fontsize=text_font_size)
dff3_y['Number of commits'].plot(ax=ax3, style='#003300', marker = '.')
ax3.set_ylabel("Number of commits", fontsize=text_font_size)
#fig.legend(['Average rationale density','Average commit size','Number of commits'], loc='upper left', bbox_to_anchor=(0.12, 0.89), framealpha=0)
fig.legend(['Average rationale density','Average commit size'], loc='upper left', bbox_to_anchor=(0.12, 0.89), framealpha=0)
legend1 = plt.legend( ['Number of commits'], loc='lower right', bbox_to_anchor=(0.82, 0.02), framealpha=0)
plt.gca().add_artist(legend1)
plt.savefig('evolution.pdf', bbox_inches='tight')
plt.show()
from scipy import stats
res = stats.normaltest(list(dff3_y['comit_rationale_density']))
res
/usr/local/lib/python3.10/dist-packages/scipy/stats/_stats_py.py:1806: UserWarning: kurtosistest only valid for n>=20 ... continuing anyway, n=18 warnings.warn("kurtosistest only valid for n>=20 ... continuing "
NormaltestResult(statistic=0.14357052317971639, pvalue=0.9307307379924883)
from scipy import stats
res = stats.normaltest(list(dff3_y['Number of commits']))
res
NormaltestResult(statistic=2.4267935276266295, pvalue=0.29718609205648716)
res = stats.spearmanr(dff3_y['Number of commits'], dff3_y['comit_rationale_density'])
res # p> 0.05, NOT significant
SignificanceResult(statistic=0.0279214661310228, pvalue=0.9124276127052705)
res = stats.pearsonr(dff3_y['Number of commits'], dff3_y['comit_rationale_density'])
res # p> 0.05, NOT significant
PearsonRResult(statistic=0.07355475693849241, pvalue=0.7717737271515405)
# to be applied by sentence
def is_decision(row):
if ( row["Decision"] == 'yes'):
return True
return False
def decision_density(commitID):
# selecting rows of the commit
c_df = df_current[df_current['commit ID'] == commitID]
# print(c_df)
# select rows of the commit that contain decision
df2 = c_df.apply(lambda x : True
if is_decision(x) else False, axis = 1)
#print(df2)
return len(df2[df2 == True].index) / len(c_df)
commits_decision_density_list=[]
for comit_id in commits_IDs_list :
commits_decision_density_list.append(decision_density(comit_id))
# to be applied by sentence
def is_facts(row):
if ( row["Supporting Facts"] == 'yes'):
return True
return False
def facts_density(commitID):
# selecting rows of the commit
c_df = df_current[df_current['commit ID'] == commitID]
# print(c_df)
# select rows of the commit that contain decision
df2 = c_df.apply(lambda x : True
if is_facts(x) else False, axis = 1)
#print(df2)
return len(df2[df2 == True].index) / len(c_df)
commits_facts_density_list=[]
for comit_id in commits_IDs_list :
commits_facts_density_list.append(facts_density(comit_id))
# create a dataframw with 3 comulns : comit_ID, density, author
df_rq6 = pd.DataFrame(
{'comit_ID': commits_IDs_list,
'comit_date': commits_date_list,
'comit_rationale_density': commits_rationale_density_list,
'comit_decision_density': commits_decision_density_list,
'comit_facts_density': commits_facts_density_list
})
df_rq6
comit_ID | comit_date | comit_rationale_density | comit_decision_density | comit_facts_density | |
---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.800000 | 0.600000 | 0.400000 |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | 2022-05-31 | 0.428571 | 0.714286 | 0.571429 |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | 2022-06-01 | 1.000000 | 1.000000 | 0.000000 |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | 2022-02-15 | 0.666667 | 1.000000 | 0.333333 |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | 2022-01-14 | 0.666667 | 0.666667 | 0.333333 |
... | ... | ... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | 2005-07-08 | 0.800000 | 0.400000 | 0.600000 |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | 2005-07-08 | 0.500000 | 1.000000 | 0.000000 |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | 2005-06-22 | 0.750000 | 0.750000 | 0.000000 |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | 2005-04-16 | 0.333333 | 1.000000 | 0.000000 |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | 2005-04-16 | 0.500000 | 1.000000 | 0.000000 |
366 rows Γ 5 columns
df_rq6['Date_year'] = df_rq6['comit_date'].dt.to_period('Y')
dff6_y = df_rq6.groupby(['Date_year']).mean()
dff6_y
<ipython-input-181-7597cef068c6>:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. dff6_y = df_rq6.groupby(['Date_year']).mean()
comit_rationale_density | comit_decision_density | comit_facts_density | |
---|---|---|---|
Date_year | |||
2005 | 0.624537 | 0.833333 | 0.134028 |
2006 | 0.667689 | 0.723030 | 0.376095 |
2007 | 0.618079 | 0.749075 | 0.468334 |
2008 | 0.521574 | 0.785000 | 0.361944 |
2009 | 0.571650 | 0.668681 | 0.470126 |
2010 | 0.588951 | 0.637150 | 0.526417 |
2011 | 0.607323 | 0.550565 | 0.635329 |
2012 | 0.577116 | 0.673104 | 0.424206 |
2013 | 0.523810 | 0.571429 | 0.535714 |
2014 | 0.665873 | 0.642063 | 0.605800 |
2015 | 0.615147 | 0.563047 | 0.531193 |
2016 | 0.612658 | 0.546849 | 0.516070 |
2017 | 0.608372 | 0.553899 | 0.570674 |
2018 | 0.613674 | 0.620949 | 0.462408 |
2019 | 0.560125 | 0.477211 | 0.628751 |
2020 | 0.519192 | 0.759933 | 0.262290 |
2021 | 0.704675 | 0.778212 | 0.256758 |
2022 | 0.697817 | 0.767659 | 0.398016 |
import matplotlib.pyplot as plt
import matplotlib.patheffects as pe
#fig, ax = plt.subplots(figsize=(12,4))
fig, ax = plt.subplots(figsize=(12,3))
dff6_y['comit_decision_density'].plot(ax=ax, color='#ADD8E6', marker='o',alpha=1,linewidth=2,path_effects=[pe.Stroke(linewidth=2, foreground='k'), pe.Normal()])
dff6_y['comit_rationale_density'].plot(ax=ax, color='#F4C2C2', marker='*', alpha=1, linewidth=2, path_effects=[pe.Stroke(linewidth=2, foreground='k'), pe.Normal()])
dff6_y['comit_facts_density'].plot(ax=ax, color='#FFFACD', marker = '.',alpha=1, linewidth=2, path_effects=[pe.Stroke(linewidth=2, foreground='k'), pe.Normal()])
ax.set_xlabel("Time (years)", fontsize=text_font_size)
ax.set_ylabel("Average Density", fontsize=text_font_size)
fig.legend(['Average decision density','Average rationale density','Average supporting facts density'], loc='lower center', bbox_to_anchor=(0.68, 0.15), framealpha=0)
#fig.legend()
plt.savefig('evolution_decision_rationale_facts.pdf', bbox_inches='tight')
plt.show()
dff4.sort_values(by=['Number of commits'], ascending= False)
author | comit_rationale_density | Number of commits | |
---|---|---|---|
18 | David Rientjes | 0.598669 | 82 |
51 | Michal Hocko | 0.599081 | 48 |
78 | Tetsuo Handa | 0.639305 | 21 |
38 | KOSAKI Motohiro | 0.652288 | 20 |
57 | Oleg Nesterov | 0.690432 | 18 |
... | ... | ... | ... |
19 | Davidlohr Bueso | 1.000000 | 1 |
58 | Paul Gortmaker | 0.333333 | 1 |
60 | Pavel Emelianov | 0.000000 | 1 |
15 | Dan Schatzberg | 0.625000 | 1 |
46 | Luis Claudio R. Goncalves | 0.375000 | 1 |
92 rows Γ 3 columns
df_rq5 = pd.DataFrame(
{'comit_ID': commits_IDs_list,
'comit_date': commits_date_list,
'comit_rationale_density': commits_rationale_density_list,
'comit_size':commits_length_list,
'author': authors_list
})
df_rq5
comit_ID | comit_date | comit_rationale_density | comit_size | author | |
---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.800000 | 5 | Michal Hocko |
1 | C_kwDOACN7MtoAKGJmMzk4MGM4NTIxMmZjNzE1MTJkMjdh... | 2022-05-31 | 0.428571 | 7 | Suren Baghdasaryan |
2 | C_kwDOACN7MtoAKGExOWNhZDA2OTE1OTdlYjc5YzEyM2I4... | 2022-06-01 | 1.000000 | 1 | Andrew Morton |
3 | C_kwDOACN7MtoAKGEyMTNlNWNmNzFjYmNlYTRiMjNjYWVk... | 2022-02-15 | 0.666667 | 6 | Hugh Dickins |
4 | C_kwDOACN7MtoAKGJhNTM1YzFjYWYzZWU3OGFhNzcxOWU5... | 2022-01-14 | 0.666667 | 3 | Suren Baghdasaryan |
... | ... | ... | ... | ... | ... |
361 | MDY6Q29tbWl0MjMyNTI5ODo0MjYzOTI2OWY5Y2U0YWFjMm... | 2005-07-08 | 0.800000 | 5 | Anton Blanchard |
362 | MDY6Q29tbWl0MjMyNTI5ODo3OWI5Y2UzMTFlMTkyZTlhMz... | 2005-07-08 | 0.500000 | 2 | Marcelo Tosatti |
363 | MDY6Q29tbWl0MjMyNTI5ODo1NzhjMmZkNmE3ZjM3ODQzND... | 2005-06-22 | 0.750000 | 4 | Janet Morgan |
364 | MDY6Q29tbWl0MjMyNTI5ODo3OWJlZmQwYzA4YzQ3NjZmOG... | 2005-04-16 | 0.333333 | 3 | Andrea Arcangeli |
365 | MDY6Q29tbWl0MjMyNTI5ODoxZGExNzdlNGMzZjQxNTI0ZT... | 2005-04-16 | 0.500000 | 4 | Linus Torvalds |
366 rows Γ 5 columns
df_5_contributors= df_rq5.loc[ (df_rq5['author'] == "KOSAKI Motohiro") | (df_rq5['author'] == "Oleg Nesterov" ) | (df_rq5['author'] == "David Rientjes" ) |(df_rq5['author'] == "Michal Hocko" ) | (df_rq5['author'] == "Tetsuo Handa" ) ]
df_5_contributors
comit_ID | comit_date | comit_rationale_density | comit_size | author | |
---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.8000 | 5 | Michal Hocko |
8 | C_kwDOACN7MtoAKDYwZTI3OTNkNDQwYTNlYzk1YWJiNWQ2... | 2021-11-05 | 0.4375 | 16 | Michal Hocko |
29 | MDY6Q29tbWl0MjMyNTI5ODo4YTdmZjAyYWNhYmJkODc3Nj... | 2020-01-31 | 0.4000 | 5 | David Rientjes |
32 | MDY6Q29tbWl0MjMyNTI5ODoxZWI0MWJiMDdlNTY4NjI5OD... | 2019-09-23 | 0.5000 | 4 | Michal Hocko |
34 | MDY6Q29tbWl0MjMyNTI5ODpmOWM2NDU2MjFhMjhlMzc4MT... | 2019-09-23 | 0.6000 | 10 | Tetsuo Handa |
... | ... | ... | ... | ... | ... |
330 | MDY6Q29tbWl0MjMyNTI5ODowMTAxN2EyMjcwNDRkNjRmYW... | 2006-09-29 | 1.0000 | 3 | Oleg Nesterov |
331 | MDY6Q29tbWl0MjMyNTI5ODo5NzJjNGVhNTljOWRiZjgyNj... | 2006-09-29 | 1.0000 | 2 | Oleg Nesterov |
332 | MDY6Q29tbWl0MjMyNTI5ODoyODMyNGQxZGY2NDY1MjEyNT... | 2006-09-29 | 0.6000 | 5 | Oleg Nesterov |
333 | MDY6Q29tbWl0MjMyNTI5ODpjMzk0Y2M5ZmJiMzY3Zjg3Zm... | 2006-09-29 | 0.5000 | 4 | Oleg Nesterov |
334 | MDY6Q29tbWl0MjMyNTI5ODo1NWExMDFmOGY3MWEzZDNkYm... | 2006-09-29 | 0.5000 | 2 | Oleg Nesterov |
189 rows Γ 5 columns
df_5_contributors['Date_year'] = df_5_contributors['comit_date'].dt.to_period('Y')
df_5_contributors['Number of commits'] = df_5_contributors.groupby('Date_year')['Date_year'].transform('count')
df_5_contributors
<ipython-input-186-27e175bf8504>:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df_5_contributors['Date_year'] = df_5_contributors['comit_date'].dt.to_period('Y') <ipython-input-186-27e175bf8504>:2: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df_5_contributors['Number of commits'] = df_5_contributors.groupby('Date_year')['Date_year'].transform('count')
comit_ID | comit_date | comit_rationale_density | comit_size | author | Date_year | Number of commits | |
---|---|---|---|---|---|---|---|
0 | C_kwDOACN7MtoAKDk3NGY0MzY3ZGQzMTVhY2MxNWFkNGE2... | 2022-08-23 | 0.8000 | 5 | Michal Hocko | 2022 | 1 |
8 | C_kwDOACN7MtoAKDYwZTI3OTNkNDQwYTNlYzk1YWJiNWQ2... | 2021-11-05 | 0.4375 | 16 | Michal Hocko | 2021 | 1 |
29 | MDY6Q29tbWl0MjMyNTI5ODo4YTdmZjAyYWNhYmJkODc3Nj... | 2020-01-31 | 0.4000 | 5 | David Rientjes | 2020 | 1 |
32 | MDY6Q29tbWl0MjMyNTI5ODoxZWI0MWJiMDdlNTY4NjI5OD... | 2019-09-23 | 0.5000 | 4 | Michal Hocko | 2019 | 6 |
34 | MDY6Q29tbWl0MjMyNTI5ODpmOWM2NDU2MjFhMjhlMzc4MT... | 2019-09-23 | 0.6000 | 10 | Tetsuo Handa | 2019 | 6 |
... | ... | ... | ... | ... | ... | ... | ... |
330 | MDY6Q29tbWl0MjMyNTI5ODowMTAxN2EyMjcwNDRkNjRmYW... | 2006-09-29 | 1.0000 | 3 | Oleg Nesterov | 2006 | 5 |
331 | MDY6Q29tbWl0MjMyNTI5ODo5NzJjNGVhNTljOWRiZjgyNj... | 2006-09-29 | 1.0000 | 2 | Oleg Nesterov | 2006 | 5 |
332 | MDY6Q29tbWl0MjMyNTI5ODoyODMyNGQxZGY2NDY1MjEyNT... | 2006-09-29 | 0.6000 | 5 | Oleg Nesterov | 2006 | 5 |
333 | MDY6Q29tbWl0MjMyNTI5ODpjMzk0Y2M5ZmJiMzY3Zjg3Zm... | 2006-09-29 | 0.5000 | 4 | Oleg Nesterov | 2006 | 5 |
334 | MDY6Q29tbWl0MjMyNTI5ODo1NWExMDFmOGY3MWEzZDNkYm... | 2006-09-29 | 0.5000 | 2 | Oleg Nesterov | 2006 | 5 |
189 rows Γ 7 columns
df_5_contributors = df_5_contributors.groupby(['Date_year']).mean()
df_5_contributors
<ipython-input-187-955ce5016b51>:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function. df_5_contributors = df_5_contributors.groupby(['Date_year']).mean()
comit_rationale_density | comit_size | Number of commits | |
---|---|---|---|
Date_year | |||
2006 | 0.720000 | 3.200000 | 5.0 |
2007 | 0.619643 | 3.900000 | 10.0 |
2008 | 0.583333 | 4.333333 | 3.0 |
2009 | 0.666108 | 6.230769 | 13.0 |
2010 | 0.623436 | 5.382353 | 34.0 |
2011 | 0.610438 | 6.466667 | 15.0 |
2012 | 0.565727 | 5.631579 | 19.0 |
2014 | 0.673304 | 6.090909 | 11.0 |
2015 | 0.593967 | 8.400000 | 15.0 |
2016 | 0.608058 | 7.135135 | 37.0 |
2017 | 0.619874 | 8.222222 | 9.0 |
2018 | 0.639961 | 8.111111 | 9.0 |
2019 | 0.607937 | 4.666667 | 6.0 |
2020 | 0.400000 | 5.000000 | 1.0 |
2021 | 0.437500 | 16.000000 | 1.0 |
2022 | 0.800000 | 5.000000 | 1.0 |
#fig, ax = plt.subplots(figsize=(12,4))
fig, ax = plt.subplots(figsize=(12,3))
ax2 = ax.twinx()
ax3 = ax.twinx()
rspine = ax3.spines['right']
rspine.set_position(('axes', 1.15))
ax3.set_frame_on(True)
ax3.patch.set_visible(False)
fig.subplots_adjust(right=0.7)
df_5_contributors['comit_rationale_density'].plot(ax=ax, color='#F4C2C2', marker='*', alpha=1, linewidth=2, path_effects=[pe.Stroke(linewidth=2, foreground='k'), pe.Normal()])
ax.set_xlabel("Time (years)", fontsize=text_font_size)
ax.set_ylabel("Average Rationale Density", fontsize=text_font_size)
df_5_contributors['comit_size'].plot(ax=ax2, color='#0000cc', marker='o')
ax2.set_ylabel("Commit size", fontsize=text_font_size)
df_5_contributors['Number of commits'].plot(ax=ax3, style='#003300', marker = '.')
ax3.set_ylabel("Number of commits", fontsize=text_font_size)
fig.legend(['Average rationale density','Average commit size','Number of commits'], loc='upper left', bbox_to_anchor=(0.28, 0.89), framealpha=0)
#fig.legend()
plt.savefig('evolution_5_contributors.pdf', bbox_inches='tight')
plt.show()
decision_positions = []
rationale_positions = []
facts_positions= []
for commitID in commits_IDs_list:
c_df = df_current[df_current['commit ID'] == commitID]
c_df = c_df.reset_index()
size = len(c_df)
for i in range(size):
if is_decision(c_df.loc[i]):
decision_positions.append( round( i /size,3) )
if is_rationale(c_df.loc[i]):
rationale_positions.append( round( i /size,3) )
if is_facts(c_df.loc[i]):
facts_positions.append( round(i /size,3) )
print(decision_positions)
print(rationale_positions)
print(facts_positions)
[0.0, 0.6, 0.8, 0.0, 0.429, 0.571, 0.714, 0.857, 0.0, 0.0, 0.167, 0.333, 0.5, 0.667, 0.833, 0.0, 0.667, 0.0, 0.125, 0.5, 0.625, 0.875, 0.0, 0.333, 0.667, 0.0, 0.714, 0.0, 0.312, 0.5, 0.562, 0.938, 0.0, 0.429, 0.571, 0.714, 0.857, 0.0, 0.333, 0.667, 0.0, 0.083, 0.167, 0.25, 0.333, 0.417, 0.5, 0.667, 0.917, 0.0, 0.5, 0.0, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.333, 0.667, 0.778, 0.889, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.667, 0.0, 0.667, 0.0, 0.75, 0.0, 0.818, 0.909, 0.0, 0.333, 0.667, 0.0, 0.5, 0.0, 0.5, 0.0, 0.333, 0.667, 0.0, 0.4, 0.6, 0.8, 0.0, 0.6, 0.8, 0.0, 0.667, 0.0, 0.026, 0.077, 0.333, 0.359, 0.41, 0.436, 0.462, 0.487, 0.513, 0.564, 0.59, 0.615, 0.641, 0.667, 0.692, 0.718, 0.744, 0.769, 0.795, 0.821, 0.846, 0.872, 0.897, 0.923, 0.949, 0.974, 0.0, 0.0, 0.091, 0.182, 0.273, 0.727, 0.909, 0.0, 0.6, 0.0, 0.167, 0.333, 0.0, 0.0, 0.0, 0.857, 0.0, 0.5, 0.0, 0.6, 0.0, 0.2, 0.4, 0.6, 0.8, 0.375, 0.5, 0.625, 0.875, 0.0, 0.333, 0.0, 0.917, 0.0, 0.5, 0.625, 0.0, 0.714, 0.857, 0.0, 0.6, 0.0, 0.8, 0.9, 0.0, 0.8, 0.0, 0.182, 0.273, 0.455, 0.545, 0.636, 0.727, 0.818, 0.909, 0.0, 0.625, 0.875, 0.0, 0.4, 0.6, 0.0, 0.6, 0.7, 0.8, 0.9, 0.0, 0.421, 0.474, 0.526, 0.579, 0.632, 0.684, 0.737, 0.0, 0.5, 0.0, 0.5, 0.6, 0.7, 0.8, 0.9, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.6, 0.7, 0.8, 0.0, 0.667, 0.833, 0.0, 0.0, 0.333, 0.667, 0.0, 0.625, 0.75, 0.875, 0.0, 0.412, 0.824, 0.882, 0.941, 0.0, 0.5, 0.667, 0.0, 0.5, 0.0, 0.25, 0.333, 0.417, 0.5, 0.667, 0.75, 0.833, 0.917, 0.0, 0.2, 0.4, 0.0, 0.286, 0.429, 0.857, 0.0, 0.8, 0.9, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.353, 0.471, 0.529, 0.588, 0.647, 0.706, 0.765, 0.824, 0.882, 0.941, 0.0, 0.333, 0.5, 0.667, 0.833, 0.0, 0.2, 0.4, 0.0, 0.429, 0.571, 0.0, 0.5, 0.75, 0.0, 0.4, 0.6, 0.8, 0.0, 0.25, 0.0, 0.75, 0.0, 0.5, 0.0, 0.0, 0.692, 0.846, 0.923, 0.0, 0.714, 0.857, 0.0, 0.643, 0.714, 0.786, 0.857, 0.929, 0.0, 0.333, 0.833, 0.0, 0.429, 0.714, 0.0, 0.8, 0.0, 0.667, 0.733, 0.8, 0.867, 0.933, 0.0, 0.5, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.6, 0.667, 0.733, 0.8, 0.867, 0.0, 0.833, 0.0, 0.375, 0.5, 0.75, 0.875, 0.0, 0.5, 0.0, 0.833, 0.0, 0.0, 0.571, 0.714, 0.857, 0.0, 0.571, 0.714, 0.857, 0.0, 0.667, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.429, 0.571, 0.714, 0.857, 0.0, 0.857, 0.0, 0.667, 0.778, 0.889, 0.0, 0.444, 0.667, 0.778, 0.889, 0.0, 0.0, 0.0, 0.667, 0.0, 0.0, 0.0, 0.6, 0.8, 0.0, 0.7, 0.8, 0.9, 0.0, 0.444, 0.556, 0.667, 0.778, 0.0, 0.571, 0.714, 0.857, 0.0, 0.5, 0.0, 0.333, 0.417, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.6, 0.8, 0.0, 0.667, 0.0, 0.75, 0.875, 0.0, 0.5, 0.0, 0.75, 0.0, 0.636, 0.727, 0.818, 0.909, 0.0, 0.5, 0.0, 0.043, 0.087, 0.348, 0.391, 0.435, 0.478, 0.522, 0.565, 0.609, 0.652, 0.696, 0.739, 0.783, 0.826, 0.87, 0.913, 0.957, 0.0, 0.667, 0.0, 0.75, 0.0, 0.857, 0.0, 0.0, 0.5, 0.667, 0.833, 0.0, 0.833, 0.0, 0.333, 0.667, 0.0, 0.833, 0.0, 0.667, 0.833, 0.0, 0.667, 0.0, 0.75, 0.0, 0.833, 0.0, 0.0, 0.5, 0.0, 0.75, 0.0, 0.75, 0.0, 0.5, 0.75, 0.0, 0.667, 0.0, 0.875, 0.0, 0.5, 0.0, 0.75, 0.875, 0.0, 0.667, 0.0, 0.2, 0.6, 0.8, 0.0, 0.0, 0.5, 0.0, 0.353, 0.412, 0.471, 0.529, 0.588, 0.647, 0.706, 0.765, 0.824, 0.882, 0.941, 0.0, 0.182, 0.227, 0.273, 0.318, 0.364, 0.409, 0.455, 0.5, 0.545, 0.591, 0.636, 0.682, 0.727, 0.773, 0.818, 0.864, 0.909, 0.955, 0.0, 0.625, 0.75, 0.875, 0.0, 0.032, 0.29, 0.323, 0.355, 0.387, 0.419, 0.452, 0.484, 0.516, 0.548, 0.581, 0.613, 0.645, 0.677, 0.71, 0.742, 0.774, 0.806, 0.839, 0.903, 0.935, 0.968, 0.0, 0.75, 0.875, 0.0, 0.667, 0.833, 0.0, 0.333, 0.667, 0.0, 0.444, 0.556, 0.667, 0.778, 0.889, 0.0, 0.5, 0.75, 0.0, 0.9, 0.0, 0.417, 0.5, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.714, 0.0, 0.6, 0.8, 0.0, 0.8, 0.0, 0.667, 0.778, 0.889, 0.0, 0.333, 0.667, 0.0, 0.5, 0.75, 0.0, 0.333, 0.5, 0.667, 0.833, 0.0, 0.25, 0.75, 0.0, 0.667, 0.0, 0.619, 0.667, 0.714, 0.762, 0.81, 0.857, 0.905, 0.0, 0.667, 0.0, 0.286, 0.429, 0.571, 0.0, 0.667, 0.0, 0.333, 0.667, 0.0, 0.75, 0.0, 0.625, 0.75, 0.875, 0.0, 0.333, 0.667, 0.0, 0.5, 0.583, 0.917, 0.0, 0.5, 0.0, 0.333, 0.667, 0.0, 0.167, 0.5, 0.667, 0.833, 0.0, 0.667, 0.75, 0.833, 0.917, 0.0, 0.167, 0.333, 0.5, 0.667, 0.833, 0.0, 0.0, 0.75, 0.0, 0.5, 0.0, 0.667, 0.0, 0.75, 0.875, 0.0, 0.25, 0.5, 0.75, 0.0, 0.2, 0.0, 0.5, 0.0, 0.857, 0.0, 0.75, 0.0, 0.571, 0.714, 0.857, 0.0, 0.333, 0.0, 0.333, 0.667, 0.833, 0.0, 0.0, 0.667, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.889, 0.0, 0.25, 0.625, 0.75, 0.875, 0.0, 0.833, 0.0, 0.667, 0.833, 0.0, 0.167, 0.667, 0.0, 0.833, 0.0, 0.6, 0.8, 0.0, 0.4, 0.8, 0.0, 0.5, 0.75, 0.0, 0.625, 0.75, 0.875, 0.0, 0.0, 0.091, 0.909, 0.0, 0.5, 0.75, 0.0, 0.333, 0.667, 0.0, 0.222, 0.333, 0.444, 0.556, 0.667, 0.778, 0.889, 0.0, 0.625, 0.75, 0.875, 0.0, 0.667, 0.0, 0.091, 0.182, 0.273, 0.545, 0.727, 0.818, 0.0, 0.25, 0.75, 0.0, 0.5, 0.667, 0.833, 0.0, 0.167, 0.25, 0.333, 0.5, 0.583, 0.75, 0.833, 0.0, 0.6, 0.8, 0.0, 0.4, 0.6, 0.8, 0.0, 0.857, 0.0, 0.75, 0.0, 0.667, 0.0, 0.75, 0.0, 0.048, 0.095, 0.143, 0.19, 0.238, 0.286, 0.333, 0.381, 0.429, 0.476, 0.524, 0.571, 0.619, 0.667, 0.714, 0.762, 0.81, 0.857, 0.905, 0.952, 0.0, 0.8, 0.9, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.25, 0.5, 0.75, 0.0, 0.333, 0.667, 0.0, 0.0, 0.667, 0.0, 0.875, 0.0, 0.75, 0.0, 0.667, 0.0, 0.0, 0.75, 0.0, 0.5, 0.0, 0.0, 0.8, 0.0, 0.2, 0.6, 0.8, 0.0, 0.4, 0.6, 0.8, 0.0, 0.667, 0.0, 0.6, 0.8, 0.0, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.0, 0.167, 0.667, 0.833, 0.0, 0.667, 0.0, 0.667, 0.778, 0.889, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.333, 0.667, 0.0, 0.2, 0.8, 0.0, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.0, 0.667, 0.0, 0.667, 0.0, 0.0, 0.133, 0.167, 0.2, 0.233, 0.267, 0.3, 0.333, 0.367, 0.4, 0.433, 0.467, 0.5, 0.533, 0.567, 0.6, 0.633, 0.667, 0.7, 0.733, 0.767, 0.8, 0.833, 0.867, 0.9, 0.933, 0.967, 0.0, 0.385, 0.615, 0.692, 0.769, 0.846, 0.923, 0.0, 0.333, 0.75, 0.833, 0.917, 0.0, 0.333, 0.667, 0.0, 0.833, 0.0, 0.571, 0.714, 0.857, 0.0, 0.083, 0.417, 0.5, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.4, 0.0, 0.8, 0.0, 0.444, 0.556, 0.667, 0.778, 0.889, 0.0, 0.5, 0.75, 0.0, 0.538, 0.769, 0.846, 0.923, 0.0, 0.667, 0.0, 0.769, 0.846, 0.923, 0.0, 0.6, 0.8, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.0, 0.667, 0.0, 0.75, 0.0, 0.25, 0.75, 0.0, 0.5, 0.0, 0.7, 0.8, 0.9, 0.0, 0.571, 0.714, 0.0, 0.333, 0.667, 0.0, 0.5, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.333, 0.667, 0.0, 0.2, 0.4, 0.6, 0.8, 0.5, 0.0, 0.5, 0.0, 0.333, 0.0, 0.04, 0.12, 0.16, 0.2, 0.24, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.52, 0.56, 0.64, 0.72, 0.76, 0.8, 0.84, 0.88, 0.92, 0.96, 0.0, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.667, 0.0, 0.5, 0.0, 0.25, 0.5, 0.75, 0.0, 0.167, 0.333, 0.667, 0.833, 0.0, 0.25, 0.75, 0.0, 0.167, 0.333, 0.833, 0.0, 0.333, 0.417, 0.5, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.25, 0.5, 0.75, 0.333, 0.667, 0.0, 0.25, 0.5, 0.75, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.5, 0.0, 0.182, 0.273, 0.364, 0.455, 0.636, 0.818, 0.909, 0.0, 0.333, 0.0, 0.0, 0.25, 0.5, 0.75, 0.0, 0.333, 0.667, 0.0, 0.333, 0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.0, 0.5, 0.0, 0.75, 0.0, 0.667, 0.0, 0.143, 0.286, 0.571, 0.714, 0.857, 0.0, 0.143, 0.857, 0.0, 0.4, 0.6, 0.8, 0.0, 0.333, 0.667, 0.0, 0.667, 0.0, 0.5, 0.0, 0.0, 0.5, 0.0, 0.556, 0.889, 0.0, 0.083, 0.5, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.333, 0.667, 0.0, 0.5, 0.0, 0.333, 0.667, 0.0, 0.4, 0.6, 0.8, 0.0, 0.5, 0.75, 0.0, 0.0, 0.5, 0.0, 0.8, 0.0, 0.25, 0.5, 0.75, 0.0, 0.0, 0.1, 0.2, 0.3, 0.8, 0.9, 0.0, 0.6, 0.8, 0.0, 0.5, 0.0, 0.333, 0.0, 0.333, 0.667, 0.0, 0.667, 0.0, 0.4, 0.6, 0.8, 0.0, 0.143, 0.286, 0.429, 0.714, 0.857, 0.0, 0.75, 0.0, 0.167, 0.333, 0.5, 0.667, 0.833, 0.0, 0.25, 0.75, 0.0, 0.5, 0.0, 0.125, 0.25, 0.375, 0.5, 0.875, 0.0, 0.5, 0.0, 0.75, 0.0, 0.2, 0.4, 0.0, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.0, 0.368, 0.421, 0.474, 0.526, 0.579, 0.632, 0.684, 0.737, 0.789, 0.842, 0.895, 0.947, 0.0, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.4, 0.8, 0.0, 0.031, 0.062, 0.188, 0.312, 0.344, 0.375, 0.406, 0.438, 0.5, 0.531, 0.562, 0.594, 0.625, 0.656, 0.688, 0.719, 0.75, 0.781, 0.844, 0.875, 0.906, 0.938, 0.969, 0.0, 0.8, 0.0, 0.5, 0.0, 0.25, 0.5, 0.0, 0.333, 0.667, 0.0, 0.25, 0.5, 0.75] [0.0, 0.2, 0.6, 0.8, 0.429, 0.714, 0.857, 0.0, 0.333, 0.5, 0.667, 0.833, 0.333, 0.667, 0.125, 0.375, 0.625, 0.75, 0.875, 0.333, 0.429, 0.571, 0.714, 0.25, 0.312, 0.375, 0.5, 0.562, 0.688, 0.938, 0.0, 0.143, 0.571, 0.714, 0.857, 0.333, 0.667, 0.167, 0.25, 0.333, 0.5, 0.667, 0.917, 0.0, 0.5, 0.5, 0.667, 0.917, 0.0, 0.111, 0.222, 0.333, 0.667, 0.778, 0.889, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.333, 0.667, 0.0, 0.333, 0.667, 0.5, 0.75, 0.0, 0.091, 0.818, 0.0, 0.667, 0.5, 0.333, 0.0, 0.2, 0.4, 0.6, 0.8, 0.0, 0.6, 0.0, 0.333, 0.667, 0.026, 0.077, 0.231, 0.256, 0.282, 0.308, 0.333, 0.359, 0.385, 0.41, 0.436, 0.462, 0.487, 0.538, 0.59, 0.615, 0.641, 0.667, 0.692, 0.718, 0.744, 0.769, 0.795, 0.821, 0.846, 0.872, 0.897, 0.25, 0.75, 0.091, 0.273, 0.364, 0.455, 0.727, 0.818, 0.909, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.167, 0.333, 0.0, 0.5, 0.0, 0.375, 0.5, 0.75, 0.875, 0.0, 0.714, 0.5, 0.0, 0.2, 0.4, 0.6, 0.0, 0.4, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.333, 0.417, 0.5, 0.667, 0.75, 0.833, 0.0, 0.125, 0.5, 0.0, 0.143, 0.286, 0.714, 0.857, 0.4, 0.6, 0.0, 0.7, 0.9, 0.0, 0.4, 0.6, 0.8, 0.0, 0.182, 0.273, 0.455, 0.727, 0.909, 0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.0, 0.2, 0.4, 0.6, 0.3, 0.4, 0.6, 0.0, 0.053, 0.158, 0.211, 0.263, 0.316, 0.368, 0.421, 0.579, 0.632, 0.0, 0.5, 0.2, 0.3, 0.4, 0.7, 0.8, 0.9, 0.6, 0.8, 0.0, 0.3, 0.5, 0.6, 0.7, 0.8, 0.9, 0.5, 0.667, 0.833, 0.0, 0.333, 0.0, 0.125, 0.625, 0.75, 0.875, 0.0, 0.294, 0.471, 0.529, 0.765, 0.941, 0.0, 0.333, 0.5, 0.667, 0.0, 0.5, 0.0, 0.083, 0.167, 0.417, 0.75, 0.917, 0.0, 0.2, 0.6, 0.8, 0.143, 0.857, 0.1, 0.2, 0.8, 0.9, 0.0, 0.125, 0.25, 0.375, 0.625, 0.75, 0.118, 0.176, 0.235, 0.294, 0.353, 0.471, 0.529, 0.588, 0.706, 0.765, 0.824, 0.941, 0.0, 0.167, 0.333, 0.833, 0.4, 0.8, 0.0, 0.143, 0.286, 0.571, 0.714, 0.857, 0.0, 0.25, 0.5, 0.75, 0.0, 0.2, 0.4, 0.8, 0.5, 0.5, 0.75, 0.0, 0.25, 0.5, 0.75, 0.5, 0.5, 0.75, 0.308, 0.385, 0.462, 0.692, 0.769, 0.846, 0.923, 0.429, 0.714, 0.357, 0.5, 0.571, 0.643, 0.786, 0.857, 0.929, 0.333, 0.667, 0.833, 0.143, 0.286, 0.429, 0.857, 0.4, 0.6, 0.8, 0.0, 0.2, 0.467, 0.6, 0.667, 0.8, 0.867, 0.5, 0.2, 0.4, 0.8, 0.133, 0.2, 0.4, 0.467, 0.533, 0.733, 0.8, 0.867, 0.933, 0.0, 0.333, 0.5, 0.667, 0.0, 0.125, 0.375, 0.5, 0.625, 0.75, 0.0, 0.5, 0.0, 0.5, 0.667, 0.833, 0.0, 0.667, 0.571, 0.857, 0.0, 0.429, 0.714, 0.857, 0.167, 0.333, 0.667, 0.0, 0.125, 0.25, 0.5, 0.75, 0.875, 0.429, 0.571, 0.714, 0.857, 0.429, 0.571, 0.111, 0.222, 0.333, 0.444, 0.556, 0.778, 0.0, 0.111, 0.222, 0.444, 0.556, 0.889, 0.0, 0.0, 0.5, 0.0, 0.667, 0.5, 0.2, 0.6, 0.8, 0.0, 0.4, 0.6, 0.8, 0.0, 0.2, 0.3, 0.6, 0.7, 0.8, 0.9, 0.333, 0.444, 0.667, 0.778, 0.0, 0.286, 0.429, 0.857, 0.0, 0.5, 0.75, 0.333, 0.417, 0.5, 0.583, 0.667, 0.75, 0.833, 0.4, 0.6, 0.8, 0.0, 0.667, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.5, 0.25, 0.5, 0.75, 0.273, 0.364, 0.545, 0.636, 0.727, 0.0, 0.5, 0.217, 0.261, 0.304, 0.348, 0.435, 0.478, 0.522, 0.565, 0.609, 0.652, 0.696, 0.739, 0.913, 0.957, 0.333, 0.667, 0.25, 0.75, 0.286, 0.429, 0.571, 0.714, 0.333, 0.667, 0.167, 0.5, 0.667, 0.0, 0.167, 0.333, 0.5, 0.833, 0.333, 0.0, 0.167, 0.5, 0.0, 0.167, 0.333, 0.5, 0.667, 0.833, 0.667, 0.833, 0.0, 0.5, 0.75, 0.0, 0.333, 0.5, 0.667, 0.833, 0.111, 0.667, 0.778, 0.889, 0.0, 0.5, 0.5, 0.75, 0.25, 0.0, 0.25, 0.5, 0.667, 0.0, 0.625, 0.75, 0.875, 0.0, 0.25, 0.75, 0.0, 0.125, 0.375, 0.5, 0.625, 0.75, 0.333, 0.667, 0.0, 0.4, 0.6, 0.8, 0.0, 0.5, 0.0, 0.5, 0.353, 0.765, 0.0, 0.045, 0.136, 0.182, 0.227, 0.273, 0.545, 0.591, 0.636, 0.682, 0.955, 0.5, 0.75, 0.875, 0.0, 0.032, 0.161, 0.194, 0.226, 0.258, 0.323, 0.355, 0.387, 0.419, 0.452, 0.484, 0.548, 0.581, 0.645, 0.839, 0.968, 0.375, 0.5, 0.625, 0.75, 0.875, 0.333, 0.5, 0.833, 0.0, 0.333, 0.667, 0.222, 0.333, 0.444, 0.778, 0.0, 0.25, 0.75, 0.0, 0.1, 0.2, 0.8, 0.9, 0.0, 0.333, 0.417, 0.5, 0.583, 0.75, 0.917, 0.0, 0.429, 0.714, 0.2, 0.6, 0.8, 0.4, 0.6, 0.8, 0.111, 0.333, 0.444, 0.556, 0.778, 0.889, 0.0, 0.333, 0.667, 0.25, 0.75, 0.0, 0.167, 0.333, 0.5, 0.833, 0.25, 0.5, 0.75, 0.333, 0.667, 0.048, 0.19, 0.381, 0.524, 0.619, 0.714, 0.905, 0.0, 0.667, 0.0, 0.286, 0.857, 0.0, 0.333, 0.0, 0.667, 0.75, 0.0, 0.375, 0.5, 0.625, 0.75, 0.875, 0.333, 0.667, 0.417, 0.5, 0.583, 0.917, 0.0, 0.5, 0.333, 0.667, 0.0, 0.167, 0.333, 0.167, 0.333, 0.417, 0.5, 0.583, 0.667, 0.917, 0.0, 0.167, 0.333, 0.833, 0.5, 0.0, 0.5, 0.75, 0.0, 0.5, 0.0, 0.333, 0.667, 0.5, 0.625, 0.875, 0.5, 0.4, 0.6, 0.8, 0.75, 0.0, 0.714, 0.857, 0.5, 0.571, 0.714, 0.857, 0.333, 0.667, 0.0, 0.333, 0.5, 0.0, 0.333, 0.0, 0.25, 0.375, 0.5, 0.0, 0.111, 0.333, 0.444, 0.556, 0.667, 0.778, 0.889, 0.0, 0.25, 0.375, 0.5, 0.667, 0.0, 0.333, 0.5, 0.667, 0.167, 0.333, 0.667, 0.833, 0.5, 0.667, 0.833, 0.667, 0.0, 0.4, 0.6, 0.4, 0.8, 0.25, 0.5, 0.125, 0.25, 0.5, 0.625, 0.333, 0.667, 0.273, 0.364, 0.455, 0.545, 0.636, 0.727, 0.818, 0.0, 0.25, 0.5, 0.75, 0.333, 0.667, 0.111, 0.222, 0.333, 0.667, 0.25, 0.5, 0.625, 0.875, 0.0, 0.333, 0.667, 0.0, 0.091, 0.182, 0.273, 0.364, 0.455, 0.545, 0.636, 0.727, 0.909, 0.5, 0.75, 0.0, 0.333, 0.5, 0.667, 0.083, 0.167, 0.333, 0.417, 0.5, 0.667, 0.75, 0.0, 0.4, 0.2, 0.4, 0.8, 0.714, 0.857, 0.0, 0.25, 0.5, 0.75, 0.0, 0.333, 0.5, 0.095, 0.19, 0.238, 0.524, 0.571, 0.619, 0.952, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.5, 0.625, 0.875, 0.25, 0.5, 0.0, 0.333, 0.667, 0.667, 0.0, 0.333, 0.0, 0.375, 0.5, 0.625, 0.75, 0.875, 0.0, 0.5, 0.75, 0.333, 0.667, 0.667, 0.0, 0.5, 0.75, 0.5, 0.5, 0.2, 0.6, 0.0, 0.2, 0.4, 0.6, 0.8, 0.4, 0.6, 0.333, 0.667, 0.4, 0.6, 0.8, 0.2, 0.3, 0.6, 0.333, 0.5, 0.667, 0.833, 0.333, 0.667, 0.333, 0.444, 0.556, 0.778, 0.0, 0.2, 0.6, 0.8, 0.0, 0.333, 0.667, 0.2, 0.4, 0.6, 0.0, 0.1, 0.3, 0.4, 0.5, 0.9, 0.0, 0.333, 0.667, 0.333, 0.5, 0.0, 0.067, 0.1, 0.133, 0.167, 0.233, 0.3, 0.367, 0.6, 0.633, 0.7, 0.733, 0.833, 0.867, 0.9, 0.933, 0.0, 0.308, 0.538, 0.0, 0.25, 0.417, 0.5, 0.667, 0.0, 0.667, 0.0, 0.5, 0.667, 0.833, 0.0, 0.286, 0.429, 0.571, 0.714, 0.857, 0.0, 0.083, 0.333, 0.2, 0.4, 0.6, 0.4, 0.6, 0.8, 0.333, 0.889, 0.25, 0.5, 0.75, 0.385, 0.462, 0.538, 0.615, 0.692, 0.769, 0.846, 0.923, 0.333, 0.667, 0.231, 0.308, 0.385, 0.462, 0.538, 0.615, 0.769, 0.0, 0.4, 0.6, 0.8, 0.0, 0.2, 0.4, 0.6, 0.8, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.0, 0.333, 0.0, 0.25, 0.5, 0.0, 0.6, 0.7, 0.0, 0.571, 0.714, 0.857, 0.333, 0.667, 0.0, 0.5, 0.4, 0.667, 0.4, 0.8, 0.5, 0.0, 0.5, 0.333, 0.667, 0.0, 0.04, 0.08, 0.52, 0.8, 0.84, 0.88, 0.0, 0.5, 0.25, 0.375, 0.5, 0.625, 0.875, 0.375, 0.625, 0.0, 0.333, 0.667, 0.0, 0.5, 0.5, 0.0, 0.167, 0.5, 0.667, 0.833, 0.5, 0.333, 0.417, 0.5, 0.667, 0.75, 0.25, 0.333, 0.0, 0.5, 0.0, 0.25, 0.5, 0.75, 0.2, 0.6, 0.8, 0.091, 0.727, 0.909, 0.333, 0.667, 0.5, 0.25, 0.5, 0.75, 0.0, 0.333, 0.667, 0.333, 0.667, 0.125, 0.25, 0.375, 0.5, 0.5, 0.75, 0.333, 0.667, 0.429, 0.571, 0.714, 0.0, 0.143, 0.714, 0.857, 0.0, 0.2, 0.4, 0.667, 0.0, 0.333, 0.5, 0.75, 0.0, 0.5, 0.0, 0.5, 0.0, 0.556, 0.667, 0.778, 0.889, 0.083, 0.333, 0.417, 0.5, 0.75, 0.917, 0.333, 0.667, 0.0, 0.5, 0.0, 0.667, 0.2, 0.25, 0.5, 0.75, 0.0, 0.333, 0.667, 0.0, 0.5, 0.0, 0.4, 0.6, 0.5, 0.75, 0.5, 0.1, 0.3, 0.7, 0.8, 0.2, 0.4, 0.8, 0.0, 0.5, 0.333, 0.667, 0.0, 0.667, 0.667, 0.0, 0.4, 0.6, 0.8, 0.0, 0.143, 0.286, 0.571, 0.857, 0.25, 0.75, 0.5, 0.667, 0.0, 0.25, 0.5, 0.0, 0.5, 0.625, 0.75, 0.875, 0.0, 0.5, 0.0, 0.5, 0.75, 0.0, 0.2, 0.4, 0.0, 0.333, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9, 0.105, 0.158, 0.211, 0.263, 0.368, 0.421, 0.526, 0.579, 0.684, 0.737, 0.842, 0.947, 0.5, 0.0, 0.125, 0.25, 0.375, 0.5, 0.75, 0.875, 0.0, 0.5, 0.5, 0.0, 0.5, 0.2, 0.4, 0.6, 0.8, 0.25, 0.281, 0.312, 0.344, 0.375, 0.406, 0.562, 0.625, 0.719, 0.781, 0.844, 0.875, 0.906, 0.938, 0.0, 0.2, 0.6, 0.8, 0.0, 0.0, 0.25, 0.5, 0.333, 0.0, 0.5] [0.2, 0.4, 0.143, 0.286, 0.429, 0.571, 0.5, 0.667, 0.333, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.667, 0.143, 0.286, 0.429, 0.571, 0.857, 0.062, 0.125, 0.188, 0.25, 0.375, 0.438, 0.625, 0.688, 0.75, 0.812, 0.875, 0.143, 0.286, 0.429, 0.583, 0.667, 0.75, 0.833, 0.083, 0.167, 0.25, 0.333, 0.417, 0.5, 0.111, 0.444, 0.556, 0.667, 0.333, 0.333, 0.25, 0.5, 0.091, 0.182, 0.273, 0.364, 0.455, 0.545, 0.636, 0.727, 0.2, 0.2, 0.4, 0.6, 0.333, 0.051, 0.077, 0.103, 0.128, 0.154, 0.179, 0.205, 0.231, 0.256, 0.282, 0.308, 0.667, 0.692, 0.744, 0.795, 0.821, 0.897, 0.923, 0.974, 0.25, 0.5, 0.75, 0.182, 0.273, 0.455, 0.545, 0.636, 0.727, 0.1, 0.2, 0.3, 0.4, 0.7, 0.8, 0.9, 0.167, 0.333, 0.5, 0.667, 0.833, 0.5, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.143, 0.286, 0.429, 0.571, 0.714, 0.5, 0.2, 0.4, 0.8, 0.4, 0.6, 0.125, 0.25, 0.375, 0.625, 0.75, 0.333, 0.667, 0.083, 0.167, 0.25, 0.333, 0.417, 0.5, 0.583, 0.833, 0.125, 0.25, 0.375, 0.625, 0.75, 0.143, 0.286, 0.429, 0.571, 0.2, 0.4, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.2, 0.4, 0.6, 0.8, 0.091, 0.273, 0.364, 0.545, 0.636, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.2, 0.1, 0.2, 0.4, 0.5, 0.6, 0.8, 0.9, 0.053, 0.105, 0.158, 0.263, 0.316, 0.368, 0.684, 0.737, 0.789, 0.842, 0.895, 0.947, 0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.8, 0.167, 0.333, 0.5, 0.833, 0.333, 0.125, 0.25, 0.375, 0.5, 0.625, 0.875, 0.059, 0.118, 0.176, 0.235, 0.294, 0.353, 0.412, 0.471, 0.529, 0.588, 0.647, 0.706, 0.765, 0.882, 0.167, 0.5, 0.833, 0.5, 0.083, 0.167, 0.5, 0.583, 0.917, 0.6, 0.143, 0.286, 0.429, 0.571, 0.714, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.125, 0.25, 0.375, 0.5, 0.75, 0.875, 0.059, 0.118, 0.176, 0.235, 0.294, 0.353, 0.412, 0.471, 0.588, 0.824, 0.882, 0.167, 0.667, 0.833, 0.6, 0.8, 0.143, 0.286, 0.25, 0.2, 0.6, 0.8, 0.75, 0.0, 0.25, 0.5, 0.75, 0.25, 0.5, 0.5, 0.25, 0.5, 0.75, 0.077, 0.154, 0.231, 0.308, 0.385, 0.462, 0.538, 0.615, 0.692, 0.769, 0.846, 0.143, 0.286, 0.429, 0.571, 0.071, 0.143, 0.214, 0.286, 0.357, 0.429, 0.5, 0.571, 0.714, 0.786, 0.857, 0.167, 0.333, 0.5, 0.667, 0.143, 0.286, 0.429, 0.571, 0.2, 0.4, 0.6, 0.067, 0.133, 0.2, 0.267, 0.333, 0.4, 0.467, 0.533, 0.6, 0.733, 0.867, 0.933, 0.5, 0.2, 0.4, 0.067, 0.133, 0.2, 0.267, 0.333, 0.4, 0.467, 0.533, 0.167, 0.333, 0.5, 0.667, 0.375, 0.167, 0.333, 0.5, 0.667, 0.667, 0.143, 0.286, 0.429, 0.714, 0.143, 0.286, 0.429, 0.167, 0.333, 0.5, 0.125, 0.25, 0.375, 0.5, 0.143, 0.286, 0.429, 0.571, 0.714, 0.857, 0.143, 0.286, 0.429, 0.571, 0.714, 0.111, 0.222, 0.333, 0.444, 0.556, 0.111, 0.222, 0.333, 0.333, 0.667, 0.5, 0.333, 0.5, 0.2, 0.4, 0.6, 0.2, 0.4, 0.6, 0.8, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.111, 0.222, 0.333, 0.667, 0.778, 0.889, 0.143, 0.286, 0.429, 0.25, 0.083, 0.167, 0.25, 0.333, 0.5, 0.667, 0.75, 0.2, 0.4, 0.333, 0.125, 0.25, 0.375, 0.5, 0.625, 0.875, 0.5, 0.25, 0.5, 0.091, 0.182, 0.273, 0.364, 0.455, 0.545, 0.636, 0.087, 0.13, 0.174, 0.217, 0.261, 0.304, 0.391, 0.609, 0.652, 0.783, 0.333, 0.667, 0.25, 0.143, 0.286, 0.429, 0.571, 0.714, 0.333, 0.667, 0.167, 0.333, 0.167, 0.333, 0.5, 0.667, 0.833, 0.167, 0.333, 0.5, 0.667, 0.833, 0.167, 0.333, 0.5, 0.667, 0.167, 0.333, 0.5, 0.667, 0.833, 0.25, 0.5, 0.167, 0.333, 0.5, 0.667, 0.111, 0.222, 0.333, 0.444, 0.556, 0.667, 0.778, 0.5, 0.25, 0.5, 0.25, 0.5, 0.25, 0.333, 0.125, 0.25, 0.375, 0.5, 0.625, 0.25, 0.5, 0.125, 0.25, 0.5, 0.625, 0.75, 0.333, 0.4, 0.6, 0.5, 0.059, 0.118, 0.176, 0.235, 0.294, 0.412, 0.471, 0.529, 0.647, 0.706, 0.824, 0.882, 0.941, 0.045, 0.091, 0.136, 0.182, 0.636, 0.773, 0.818, 0.864, 0.909, 0.955, 0.125, 0.25, 0.375, 0.065, 0.097, 0.129, 0.161, 0.194, 0.226, 0.29, 0.355, 0.387, 0.419, 0.452, 0.484, 0.516, 0.548, 0.774, 0.903, 0.935, 0.968, 0.125, 0.25, 0.375, 0.5, 0.625, 0.167, 0.333, 0.5, 0.667, 0.833, 0.333, 0.667, 0.111, 0.222, 0.333, 0.667, 0.778, 0.889, 0.25, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.083, 0.167, 0.25, 0.333, 0.5, 0.667, 0.833, 0.143, 0.286, 0.429, 0.571, 0.857, 0.2, 0.4, 0.2, 0.4, 0.6, 0.111, 0.222, 0.333, 0.444, 0.556, 0.778, 0.889, 0.333, 0.667, 0.25, 0.5, 0.0, 0.167, 0.5, 0.25, 0.5, 0.75, 0.333, 0.048, 0.095, 0.143, 0.19, 0.238, 0.286, 0.333, 0.381, 0.429, 0.476, 0.524, 0.571, 0.333, 0.667, 0.143, 0.429, 0.571, 0.857, 0.333, 0.333, 0.667, 0.25, 0.5, 0.125, 0.25, 0.375, 0.5, 0.333, 0.083, 0.167, 0.25, 0.333, 0.417, 0.5, 0.667, 0.75, 0.833, 0.917, 0.5, 0.167, 0.333, 0.5, 0.667, 0.833, 0.083, 0.167, 0.25, 0.333, 0.417, 0.5, 0.583, 0.833, 0.5, 0.25, 0.5, 0.333, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.4, 0.8, 0.25, 0.5, 0.143, 0.286, 0.429, 0.571, 0.714, 0.25, 0.143, 0.286, 0.429, 0.714, 0.857, 0.333, 0.167, 0.333, 0.667, 0.833, 0.333, 0.125, 0.25, 0.375, 0.875, 0.111, 0.222, 0.333, 0.444, 0.556, 0.667, 0.778, 0.125, 0.5, 0.167, 0.333, 0.5, 0.667, 0.167, 0.333, 0.5, 0.333, 0.5, 0.833, 0.167, 0.333, 0.5, 0.667, 0.333, 0.667, 0.0, 0.2, 0.4, 0.8, 0.2, 0.4, 0.6, 0.25, 0.75, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.333, 0.667, 0.091, 0.182, 0.273, 0.364, 0.455, 0.545, 0.636, 0.727, 0.818, 0.25, 0.5, 0.75, 0.667, 0.111, 0.222, 0.333, 0.444, 0.556, 0.667, 0.889, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.333, 0.667, 0.182, 0.273, 0.364, 0.455, 0.545, 0.636, 0.727, 0.818, 0.909, 0.167, 0.333, 0.5, 0.667, 0.833, 0.083, 0.417, 0.5, 0.583, 0.667, 0.75, 0.833, 0.917, 0.0, 0.2, 0.4, 0.6, 0.8, 0.2, 0.6, 0.8, 0.143, 0.286, 0.429, 0.571, 0.714, 0.25, 0.5, 0.333, 0.25, 0.5, 0.048, 0.143, 0.238, 0.286, 0.333, 0.381, 0.429, 0.476, 0.524, 0.905, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.125, 0.25, 0.375, 0.5, 0.625, 0.875, 0.25, 0.5, 0.333, 0.333, 0.667, 0.333, 0.125, 0.25, 0.375, 0.5, 0.625, 0.25, 0.5, 0.333, 0.0, 0.333, 0.667, 0.25, 0.5, 0.5, 0.5, 0.2, 0.4, 0.6, 0.4, 0.6, 0.8, 0.2, 0.6, 0.333, 0.667, 0.2, 0.4, 0.6, 0.8, 0.1, 0.2, 0.3, 0.5, 0.7, 0.8, 0.9, 0.167, 0.333, 0.5, 0.333, 0.111, 0.222, 0.333, 0.444, 0.556, 0.2, 0.4, 0.6, 0.1, 0.2, 0.3, 0.6, 0.9, 0.333, 0.667, 0.333, 0.5, 0.033, 0.067, 0.1, 0.167, 0.2, 0.667, 0.077, 0.154, 0.231, 0.308, 0.385, 0.462, 0.538, 0.083, 0.167, 0.25, 0.417, 0.5, 0.583, 0.667, 0.333, 0.167, 0.333, 0.5, 0.667, 0.143, 0.286, 0.429, 0.167, 0.25, 0.333, 0.75, 0.2, 0.8, 0.2, 0.4, 0.6, 0.111, 0.222, 0.444, 0.556, 0.667, 0.778, 0.889, 0.25, 0.077, 0.154, 0.231, 0.308, 0.385, 0.462, 0.538, 0.615, 0.692, 0.769, 0.333, 0.077, 0.154, 0.231, 0.308, 0.385, 0.462, 0.538, 0.615, 0.692, 0.2, 0.4, 0.6, 0.8, 0.4, 0.6, 0.8, 0.1, 0.2, 0.4, 0.6, 0.8, 0.9, 0.333, 0.25, 0.5, 0.75, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.143, 0.286, 0.429, 0.571, 0.333, 0.5, 0.4, 0.667, 0.4, 0.6, 0.0, 0.5, 0.5, 0.333, 0.667, 0.04, 0.08, 0.6, 0.68, 0.8, 0.92, 0.5, 0.125, 0.25, 0.375, 0.5, 0.125, 0.25, 0.375, 0.333, 0.667, 0.5, 0.083, 0.167, 0.25, 0.333, 0.417, 0.5, 0.583, 0.667, 0.75, 0.833, 0.75, 0.0, 0.25, 0.75, 0.2, 0.4, 0.6, 0.8, 0.091, 0.273, 0.364, 0.455, 0.818, 0.333, 0.667, 0.5, 0.5, 0.75, 0.333, 0.667, 0.333, 0.667, 0.25, 0.25, 0.5, 0.0, 0.333, 0.429, 0.143, 0.286, 0.429, 0.571, 0.714, 0.2, 0.4, 0.333, 0.333, 0.667, 0.25, 0.75, 0.5, 0.5, 0.111, 0.222, 0.333, 0.444, 0.667, 0.778, 0.167, 0.25, 0.333, 0.417, 0.5, 0.75, 0.833, 0.667, 0.2, 0.8, 0.25, 0.333, 0.667, 0.2, 0.4, 0.6, 0.75, 0.5, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.2, 0.4, 0.667, 0.333, 0.2, 0.8, 0.143, 0.286, 0.429, 0.571, 0.25, 0.5, 0.667, 0.5, 0.75, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.5, 0.25, 0.5, 0.2, 0.6, 0.8, 0.333, 0.667, 0.1, 0.2, 0.3, 0.8, 0.053, 0.105, 0.158, 0.211, 0.263, 0.316, 0.125, 0.25, 0.375, 0.75, 0.5, 0.6, 0.094, 0.125, 0.156, 0.188, 0.219, 0.25, 0.281, 0.312, 0.469, 0.5, 0.625, 0.875, 0.906, 0.2, 0.4, 0.6]
fig, ax = plt.subplots(figsize=(5.2,3))
bins = np.arange(0,1.1,0.1)
#ax.hist(decision_positions, color='b', bins=bins,label = 'decision' )
#ax.hist(rationale_positions, color='r', bins=bins, width=0.02, label='rationale', align='mid')
#ax.hist(facts_positions, color='g', bins=bins, width=0.02, label='facts', align='right')
ax.hist([decision_positions,rationale_positions, facts_positions],label=['Decision','Rationale','Supporting Facts'], color = ["#ADD8E6","#F4C2C2","#FFFACD"], edgecolor='k',bins=bins)
plt.xticks(bins)
# plt.minorticks_on()
#ax.xaxis.grid(True, which='major')
#ax.tick_params(axis='x', which='minor', bottom=False)
plt.xlabel('Normalized position of the sentence in the commit message')
plt.ylabel('Number of commits')
plt.legend(framealpha=0)
plt.savefig('commit_strcuture_normalized.pdf', bbox_inches='tight')
plt.show()