| 
					
				 | 
			
			
				@@ -758,7 +758,7 @@ def video_sanke_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['w2v_recall'] = data['w2v_recall'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['w2v_recall'] = w2v_recall 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif ab_Code==60061: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif ab_Code==60061 or ab_Code==60063: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if len(data['sim_recall'])>0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['sim_recall'] = data['sim_recall'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -919,6 +919,7 @@ def video_sank_pos_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=N 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     w2v_recall =[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sim_recall = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     u2u2i_recall = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return_video_recall = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if ab_Code==60058: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if len(data['u2i_recall'])>0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             u2i_recall = sorted(data['u2i_recall'], key=lambda k: k.get('rovScore', 0), reverse=True) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -928,7 +929,7 @@ def video_sank_pos_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=N 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['w2v_recall'] = data['w2v_recall'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['w2v_recall'] = w2v_recall 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif ab_Code==60061: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif ab_Code==60061 or ab_Code==60063: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if len(data['sim_recall'])>0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['sim_recall'] = data['sim_recall'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -938,15 +939,20 @@ def video_sank_pos_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=N 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['u2u2i_recall'] = data['u2u2i_recall'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             recall_dict['u2u2i_recall'] = u2u2i_recall 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif ab_Code==60064: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if len(data['return_video_recall'])>0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            recall_dict['return_video_recall'] = data['return_video_recall'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            recall_dict['return_video_recall'] = return_video_recall 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    recall_pos1 = [('rov_recall_region_h',0.98),('rov_recall_24h',0.02),('rov_recall_region_24h',1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   ('rov_recall_24h',1),('rov_recall_24h_dup',1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    recall_pos2 =  [('rov_recall_region_h',0.98),('rov_recall_24h',0.02),('rov_recall_region_24h',1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   ('rov_recall_24h',1),('rov_recall_24h_dup',1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    recall_pos3 = [('rov_recall_region_h', 0.98), ('rov_recall_24h', 0.02), ('rov_recall_region_24h', 1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   ('rov_recall_24h', 1), ('rov_recall_24h_dup', 1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    recall_pos4 = [('rov_recall_region_h', 0.98), ('rov_recall_24h', 0.02), ('rov_recall_region_24h', 1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   ('rov_recall_24h', 1), ('rov_recall_24h_dup', 1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    recall_pos1 = [('rov_recall_region_h',0, 0.98),('rov_recall_24h',0.98, 1),('rov_recall_region_24h',0,1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   ('rov_recall_24h',0,1), ('rov_recall_24h_dup',0,1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    recall_pos2 =  [('rov_recall_region_h',0,0.98),('rov_recall_24h',0.98,1),('rov_recall_region_24h',0,1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   ('rov_recall_24h',0,1),('rov_recall_24h_dup',0,1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    recall_pos3 = [('rov_recall_region_h', 0,0.98), ('rov_recall_24h', 0.98,1), ('rov_recall_region_24h', 0,1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   ('rov_recall_24h', 0,1), ('rov_recall_24h_dup', 0,1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    recall_pos4 = [('rov_recall_region_h', 0,0.98), ('rov_recall_24h', 0,0.02), ('rov_recall_region_24h', 0,1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   ('rov_recall_24h', 0,1), ('rov_recall_24h_dup', 0,1)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if exp_config  and 'recall_pos1' in exp_config \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             and 'recall_pos2' in exp_config \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             and 'recall_pos3' in exp_config \ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -963,26 +969,50 @@ def video_sank_pos_rank(data, size, top_K, flow_pool_P, ab_Code='', exp_config=N 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     recall_list.append(recall_pos3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     recall_list.append(recall_pos4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     select_ids = set('') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    recall_num_limit_dict = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if exp_config and 'recall_num_limit' in exp_config: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        recall_num_limit_dict = exp_config['recall_num_limit'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    exp_recall_dict = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   #index_pos = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for j in range(3): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if len(rov_recall_rank)>12: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # choose pos 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for recall_pos_config in recall_list: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rand_num = random.random() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            index_pos = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # choose pos recall 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for per_recall_item in recall_pos_config: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if index_pos == 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if len(per_recall_item)<3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 per_recall_name = per_recall_item[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                per_recall_freq = per_recall_item[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if rand_num < per_recall_freq and per_recall_name in recall_dict: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                per_recall_min = float(per_recall_item[1]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                per_recall_max = float(per_recall_item[2]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                per_recall_num = exp_recall_dict.get(per_recall_name, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                per_recall_total_num = recall_num_limit_dict.get(per_recall_name, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # recall set total num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if len(recall_num_limit_dict)>0 and per_recall_total_num>0 and per_recall_num>= per_recall_total_num: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if rand_num >= per_recall_min and rand_num < per_recall_max and per_recall_name in recall_dict: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     per_recall = recall_dict[per_recall_name] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for recall_item in per_recall: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         vid = recall_item['videoId'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if vid in select_ids: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        recall_item['rand'] = rand_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         rov_recall_rank.append(recall_item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         select_ids.add(vid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if per_recall_name in exp_recall_dict: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            exp_recall_dict[per_recall_name] +=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            exp_recall_dict[per_recall_name] = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        index_pos = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #print("rov_recall_rank:", rov_recall_rank) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if len(rov_recall_rank)<4: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rov_doudi_rank = region_h_recall_rank + sim_recall + u2i_recall + u2u2i_recall + w2v_recall + region_24h_recall_rank + rule_24h_recall_rank + rule_24h_dup_recall_rank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rov_doudi_rank = region_h_recall_rank + sim_recall + u2i_recall + u2u2i_recall + w2v_recall +return_video_recall+ region_24h_recall_rank + rule_24h_recall_rank + rule_24h_dup_recall_rank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for recall_item in rov_doudi_rank: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             vid = recall_item['videoId'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if vid in select_ids: 
			 |