1earner1 commited on
Commit
952f22e
·
verified ·
1 Parent(s): 31367d9

Upload combine_perturbed4.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. combine_perturbed4.py +264 -0
combine_perturbed4.py ADDED
@@ -0,0 +1,264 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import pandas as pd
3
+
4
+
5
+ file_names = [#'./llm_for_code/datasets/codecontests/CN_py800_catmix_5rand_4fold_full_oripairs_matched.json'
6
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_oripairs_temp.json',
7
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_oripairs_temp.json',
8
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_7m2_oripairs_temp.json',
9
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_7m3_oripairs_temp.json',
10
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_7m4_oripairs_temp.json',
11
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_0_2_oripairs.json',
12
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_101_3_oripairs_temp.json',
13
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_101_3_rem_oripairs_temp.json',
14
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_101_3_rem2_oripairs_temp.json',
15
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_0_oripairs_temp.json',
16
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_101_2_oripairs_temp.json',
17
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_101_oripairs_temp.json',
18
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_110_oripairs.json',
19
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_1s_1k_oripairs_temp.json',
20
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_1s_1k_2_oripairs_temp.json',
21
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_1s_1k_3_oripairs_temp.json',
22
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_100_4_oripairs_temp.json',
23
+ #"./dataset_lfs/allpairs_data_val_900_unperturbed.json",
24
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_2_oripairs_temp.json',
25
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_3_oripairs_temp.json',
26
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_4_oripairs_temp.json',
27
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_5_oripairs_temp.json',
28
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_oripairs_temp.json',
29
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_1_oripairs_temp.json',
30
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_oripairs_temp.json',
31
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_101_oripairs_temp.json',
32
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_2_oripairs.json',
33
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_2_oripairs.json',
34
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_3_oripairs.json',
35
+ #'./dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_2_oripairs_temp.json',
36
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_3_oripairs.json',
37
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_500_1_oripairs_temp.json',
38
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_500_2_oripairs_temp.json',
39
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0s_conc_1_oripairs.json',
40
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_1_oripairs_temp.json',
41
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_oripairs_temp.json',
42
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_0s_500_0_oripairs.json',
43
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_conc_pos_2_oripairs_temp.json',
44
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_conc_pos_oripairs_temp.json',
45
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_5_oripairs_temp.json',
46
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_1_oripairs_temp.json',
47
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_10s_500_0_oripairs_temp.json',
48
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_10s_500_2_oripairs_temp.json',
49
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_2_oripairs.json',
50
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_3_oripairs.json',
51
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_oripairs_temp.json',
52
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_conc_5_oripairs_temp.json',
53
+
54
+
55
+
56
+ ]
57
+
58
+ file_names_per = [#'./dataset_lfs/CC_900_py_catmix_5rand_4fold_pairs_0_temp.json',
59
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_pairs_0_temp.json',
60
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_7m2_pairs_0_temp.json',
61
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_7m3_pairs_0_temp.json',
62
+ # './dataset_lfs/CN_py800_catmix_5rand_4fold_200_7m4_pairs_0_temp.json',
63
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_0_2_pairs_0.json',
64
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_101_3_pairs_0_temp.json',
65
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_101_3_rem_pairs_0_temp.json',
66
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_101_3_rem2_pairs_0_temp.json',
67
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_0_pairs_0_temp.json',
68
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_101_2_pairs_0_temp.json',
69
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_101_pairs_0_temp.json',
70
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_200_110_pairs_0.json',
71
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_1s_1k_pairs_0_temp.json',
72
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_1s_1k_2_pairs_0_temp.json',
73
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_1s_1k_3_pairs_0_temp.json',
74
+ # './dataset_lfs/CC_900_py_catmix_5rand_4fold_100_4_pairs_0_temp.json',
75
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_2_pairs_0_temp.json',
76
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_3_pairs_0_temp.json',
77
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_4_pairs_0_temp.json',
78
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_5_pairs_0_temp.json',
79
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_pairs_0_temp.json',
80
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_1_pairs_0_temp.json',
81
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_pairs_0_temp.json',
82
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_101_pairs_0_temp.json',
83
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_2_pairs_0.json',
84
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_2_pairs_0.json',
85
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_3_pairs_0.json',
86
+ #'./dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_2_pairs_0_temp.json',
87
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_3_pairs_0.json',
88
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_500_1_pairs_0_temp.json',
89
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_500_2_pairs_0_temp.json',
90
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0s_conc_1_pairs_0.json',
91
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_1_pairs_0_temp.json',
92
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_0_conc_pairs_0_temp.json',
93
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_0s_500_0_pairs_0.json',
94
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_conc_pos_2_pairs_0_temp.json',
95
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_conc_pos_pairs_0_temp.json',
96
+
97
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_5_pairs_0_temp.json',
98
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_1_pairs_0_temp.json',
99
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_10s_500_0_pairs_0_temp.json',
100
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_10s_500_2_pairs_0_temp.json',
101
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_2_pairs_0.json',
102
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_3_pairs_0.json',
103
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_all_conc_pairs_0_temp.json',
104
+ './dataset_lfs/CC_900_py_catmix_5rand_4fold_train_conc_5_pairs_0_temp.json',
105
+ ]
106
+ file1 = './llm_for_code/datasets/codecontests/CC_900_py_catmix_5rand_4fold_oripairs_temp_fulltry.json'
107
+ file2 = './llm_for_code/datasets/codecontests/CC_900_py_catmix_5rand_4fold_pairs_0_temp_fulltry.json'
108
+
109
+ filt1 = []
110
+ with open(file1, 'r') as file:
111
+ for line in file:
112
+ filt1.append(json.loads(line))
113
+
114
+ filt2 = []
115
+ with open(file2, 'r') as file:
116
+ for line in file:
117
+ filt2.append(json.loads(line))
118
+
119
+ filtdf = pd.DataFrame(filt1)
120
+ filtdf_per = pd.DataFrame(filt2)
121
+ original_columns_df2 = filtdf_per.columns.tolist()
122
+ filtdf_per.columns = [f"{col}_df2" for col in filtdf_per.columns]
123
+ filtdf_combined = pd.concat([filtdf, filtdf_per], axis=1)
124
+ data = []
125
+ data_per = [[], [], [], []]
126
+ df_per_list = []
127
+ df_per = None
128
+ for fn in file_names:
129
+ with open(fn, 'r') as file:
130
+ for line in file:
131
+ data.append(json.loads(line))
132
+
133
+ print(len(data), len(data_per))
134
+ df = pd.DataFrame(data)
135
+
136
+ df_combined = df.copy(deep=True)
137
+ for per_id in range(4):
138
+ for file in file_names_per:
139
+ fn = file[:file.rfind('0')] + str(per_id) + file[file.rfind('0')+1:]
140
+ #print(fn)
141
+ with open(fn, 'r') as file:
142
+ for line in file:
143
+ data_per[per_id].append(json.loads(line))
144
+ df_per = pd.DataFrame(data_per[per_id])
145
+ df_per_list.append(df_per)
146
+ original_columns_df2 = df_per.columns.tolist()
147
+
148
+ df_per.columns = [f"{col}_df{per_id+2}" for col in df_per.columns]
149
+ df_combined = pd.concat([df_combined, df_per], axis=1)
150
+ print(df_combined.head(), len(df_combined))
151
+ df_combined = df_combined[~df_combined.apply(tuple, axis=1).isin(filtdf_combined.apply(tuple, axis=1))]
152
+ prohib_probid= [
153
+ x.get('probid') for x in filtdf['prog1']
154
+ if isinstance(x, dict) and 'probid' in x
155
+ ]
156
+ prohib_probid += [
157
+ x.get('probid') for x in filtdf['prog2']
158
+ if isinstance(x, dict) and 'probid' in x
159
+ ]
160
+
161
+ # Extract 'A1' from df and filter
162
+ df_combined = df_combined[ ~df['prog1'].apply(lambda x: x.get('probid') if isinstance(x, dict) else None).isin(prohib_probid)]
163
+ df_combined = df_combined[ ~df['prog2'].apply(lambda x: x.get('probid') if isinstance(x, dict) else None).isin(prohib_probid)]
164
+ df_combined = df_combined[ ~df['prog1'].apply(lambda x: x.get('probid') if isinstance(x, dict) else None).str.startswith('p0').fillna(False)]
165
+
166
+ print("filtered, ", len(df_combined))
167
+ # Step 2: Update only the 'cat' column
168
+ #df_combined['category'] = df_combined['category'].str[:-1] + df_combined['category_df2'].str[-1]
169
+ # Define a custom function to compare dictionaries in prog1 and prog2
170
+ def compare_dicts(row):
171
+ return (str(row['prog1']), str(row['prog2'])) # Convert dictionaries to tuple of strings for comparison
172
+
173
+ # Apply the custom function and mark duplicates
174
+
175
+ df_combined['unique_check'] = df_combined.apply(compare_dicts, axis=1)
176
+
177
+ # Drop duplicates based on the unique_check column
178
+ df_unique = df_combined.drop_duplicates(subset=['unique_check'])
179
+
180
+ # Drop the helper column used for comparison
181
+ df_unique = df_unique.drop(columns=['unique_check'])
182
+ print(len(data),len(df_unique) ," are unique")
183
+ #df = pd.DataFrame(data)
184
+ print(df['category'].value_counts())
185
+
186
+ def get_sample_size(category):
187
+ #catlen = {'2_0_0_1': 0, '2_0_0_0': 73,'1_1_0_1': 151 , '1_1_0_0': 0, '0_1_0_0': 0, '0_1_0_1': 2, '1_0_0_0' : 112, '1_0_0_1':0 }
188
+ #return catlen[category]
189
+ # For example: sample 10% of the group size, with a max of 50
190
+ # if category == '0_1_0_1':
191
+ # return 3600
192
+ # if category == '1_1_0_1':
193
+ # return 3600
194
+ # # if category[0] == '1':
195
+ # # return 1000
196
+ # return 1200
197
+ return 400
198
+ # Apply the custom sampling
199
+ sampled_df = (
200
+ df_unique.groupby('category', group_keys=False)
201
+ .apply(lambda x: x.sample(n=min(get_sample_size(x['category'].iloc[0]),len(x)), replace=False))
202
+ )
203
+ #sampled_df1 = df[~(df['category'].str[0] == '1')]
204
+ #sampled_df = sampled_df[sampled_df['category'].str.startswith('2')]
205
+
206
+
207
+ # # Step 1: Identify and separate unique and duplicate rows
208
+ # df_unique = df_combined.drop_duplicates(subset=['unique_check'])
209
+
210
+
211
+
212
+
213
+ # df_duplicates = df_combined[~df_combined.index.isin(df_unique.index)]
214
+ # df_duplicates = df_duplicates.drop(columns=['unique_check'])
215
+ # # Step 2: Sample from df_unique first
216
+
217
+ # # Step 3: Identify categories that still need more samples
218
+ # remaining_counts = (
219
+ # sampled_df['category'].value_counts()
220
+ # .reindex(df_combined['category'].unique(), fill_value=0)
221
+ # )
222
+
223
+ # print(remaining_counts)
224
+ # # Step 4: Fill missing samples from df_duplicates
225
+ # additional_samples = []
226
+ # for category, count in remaining_counts.items():
227
+ # required = get_sample_size(category) - count
228
+ # if required > 0:
229
+ # extra_samples = df_duplicates[df_duplicates['category'] == category].sample(
230
+ # n=min(required, len(df_duplicates[df_duplicates['category'] == category])),
231
+ # replace=False
232
+ # )
233
+ # additional_samples.append(extra_samples)
234
+
235
+ # # Concatenate the extra samples with the originally sampled DataFrame
236
+ # if additional_samples:
237
+ # additional_samples_df = pd.concat(additional_samples)
238
+ # sampled_df = pd.concat([sampled_df, additional_samples_df])
239
+
240
+ # Final sampled dataframe
241
+ sampled_df = sampled_df.reset_index(drop=True)
242
+
243
+
244
+
245
+
246
+
247
+ print(sampled_df['category'].value_counts(), len(sampled_df), sampled_df.columns)
248
+
249
+ df1_final = sampled_df.iloc[:, :df.shape[1]]
250
+ df2_final_list = []
251
+ for per_id in range(4):
252
+ df2_final = sampled_df.iloc[:, df.shape[1]+df_per.shape[1]*(per_id):df.shape[1]+df_per.shape[1]*(per_id+1)]
253
+ print(df1_final.head(), df2_final.head())
254
+ df2_final.columns = original_columns_df2
255
+ df2_final_list.append(df2_final)
256
+ df2_final = pd.concat(df2_final_list, ignore_index=True)
257
+ print(len(df2_final))
258
+ with open(file_names[0][:-5]+"_fulltrydup_train_2nem.json" , 'w+') as outfile:
259
+ for _, sample in df1_final.iterrows():
260
+ outfile.write(f"{json.dumps(sample.to_dict())}\n")
261
+
262
+ with open(file_names_per[0][:-5]+"_fulltrydup_train_2nem.json" , 'w+') as outfile:
263
+ for _, sample in df2_final.iterrows():
264
+ outfile.write(f"{json.dumps(sample.to_dict())}\n")