Example #1
0
def verificar_wap(
    caso, accion, k, n
):  # k son los enteros fijos, una constante y los otros son los que se van a mult. por la cant de unrolls.

    size_wac_max = 5
    ap1.log_file('Checking permanent workaround for: ' + accion,
                 'logfile_wap.log')
    tiempo_inicio_wa = datetime.now()
    for unroll in range(1, size_wac_max):
        print 'wac_' + accion + '_with_' + str(unroll) + '.list\n'
        wac_list = traer_pres_desde_archivo2('wac_' + accion + '_with_' +
                                             str(unroll) + '.list')
        numero = 0
        print 'Cantidad de wac a verificar: ', len(wac_list)
        #ap1.log_file('#wac-wap:'+str(len(wac_list)) +' % state:'+str(i)+' % '+'unroll:'+str(unroll),'logfile.log')
        iii = 1
        for e in wac_list:
            acciones = e[1].split(',')
            generate_program_dyn(caso, accion, acciones)
            print 'wac :', acciones
            ap1.run_modelo_dynalloy('permanent.dals', 'tempo_wacp.als', '1')
            update_tempo_wacp('tempo_wacp.als', e[2])
            os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> tempo_wacp.als')
            os.system('echo "' + e[2] + '" >> tempo_wacp.als')
            ap1.borrar_pre('tempo_wacp.als')
            ap1.rempla('tempo_wacp.als', 'check programa_wap', ' ')
            check = 'check programa_wap for 0 but ' + str(
                k + n * len(wac_list)) + " JavaPrimitiveIntegerValue "
            check = check + p.int_to_int32([
                -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
                17, 18, 19
            ])

            os.system(" sed -i 's/\/\*INI_PRE.*FIN_PRE\*\//\/\*INI_PRE\*\/" +
                      check + "\/\*FIN_PRE\*\//g ' tempo_wacp.als")
            sys.exit(0)
            print 'Verificando si ' + str(acciones) + ' ' + e[2] + ' es un wap'
            archi = 'model_' + action + '_' + 'unroll' + str(
                unroll) + '_' + str(iii) + '.als'
            os.system('cp  tempo_wacp.als ' + archi)
            ap1.log_file('checking wac: ' + str(acciones), 'logfile_wap.log')
            time_of = timeoutlib.call_with_timeout_permament(
                incrementalwa.run_alloy2, archi)
            ap1.log_file('timeout_sal:' + str(time_of[1]), 'logfile.log')
            iii = iii + 1
            os.system('rm  tempo_wacp.als')
Example #2
0
def fix_alt1_jodatime(caso,accion,pin,tiempo_to,input_file):
   result={} 	
   
   entradas=[['h:2?m:3?s:34?mls:32'],['h:4?m:3&s:34&mls:32']]


   cont=0
   size_wac_max=30  
   sum_long_wa=0	
   cont_wa=0
   tiempo_total=0
   entradas_procesadas=0	
   prom_tam_listas=0
   suma_tam_listas=0
   ttotal=0
   ttotal_sin_to=0	
   emin=10000
   temin=0
   emax=0 	
   temax=0
   to=0


   for i in range(0, len(entradas)):
	print '<control '+str(i)+'>'
        primer_wac=False
        scope='7'
        if primer_wac:
		break   
	print 'searching workarounds.ssss..\n'
	tiempo_inicio_wa=time.time()

	timeout=300
        cambio_i=False
        tama=4   
            
	for unroll in range(1,size_wac_max+1):
      
                    if primer_wac:
		        t2=time.time()-tiempo_inicio_wa	
			ttotal=ttotal+t2
		        ttotal_sin_to=ttotal_sin_to+t2
		        
		        break	
   		    if ((time.time()-tiempo_inicio_wa)>timeout):
			print "Timeout "+str(timeout)
                        linea="-------------------------------------------------------"
		        rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		        os.system(rr)
			t2=time.time()-tiempo_inicio_wa	
			tiempo_total=tiempo_total+t2
			ttotal=ttotal+t2
                        to=to+1
			break	                    

		    	
	            ap1.run_modelo_dynalloy('temporalnew.dals','resultado.als',str(unroll))
                    	
                    
                    t2=time.time()-tiempo_inicio_wa	



		    ap1.rempla('resultado.als','check programa_wap',' ') 

	
              	    os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als')
		    				
        	    
            

		    #la funcion siguiente es la que actualuiza las pre de resultado.als	


		    #pred_aux son predicados auxiliares dependientes del tamanio de la estructura	
                     
		   
		    #insertar la pre-condicion

  		     #aca
		    #res=gen_input_fact_i32_jt(caso,i,entradas,accion,unroll,pin,result)

		    
		   

		   
                    sys.exit(0)
                    ap1.run_modelo_alloy('resultado.als',i,unroll,accion,caso,1,tiempo_to)
                      
	   	    os.system('cp resultado.als ../examples/'+caso+'/results/alt1/wa_'+caso+'_'+accion+'_in_'+str(i)+'unroll_'+str(unroll)+'.als')


		    wac=[]
		    cc=1	

		    if ap1.UNSAT('temp')==1:
		      print 'there is no workarounds size:'+ str(unroll)
  		      linea='there is no workarounds size:'+ str(unroll)
		      rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		      os.system(rr)



		      p.append('there is no workarounds size:'+ str(unroll))		
	            if ap1.UNSAT('temp')==2 and (ap1.time_time(tiempo_to)<=t2):
		      print 'timeout for '+ str(unroll)+' unrolls.'
  		      linea='timeout for '+ str(unroll)+' unrolls.'
		      rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		      os.system(rr)
                      linea="-------------------------------------------------------"
		      rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		      os.system(rr)


		      p.append('timeout para <control '+str(i)+'>')
		      t2=time.time()-tiempo_inicio_wa	
		      tiempo_total=tiempo_total+t2	
		      		
		    else:
		      if ap1.UNSAT('temp')==0:
	       	      #si entra por el else encontro un wac	
			wac_Ok= 0	
	                if (primer_wac==False): 
				primer_wac=True
				entradas_procesadas=entradas_procesadas+1
				t2=time.time()-tiempo_inicio_wa	
				tiempo_total=tiempo_total+t2
				
				
 				print 'first wac found in: '+ str(t2)+' seconds.'

				linea='first wac found in: '+ str(t2)+' seconds.'
				rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
				os.system(rr)

   			        p.append('first wac found in: '+ str(t2)+' seconds.')
				primer_wac=True

	  	  	while cc<=size_wac_max and ap1.UNSAT('temp')==0:
	
		    			if ((time.time()-tiempo_inicio_wa)>timeout):
							break
					
					#SI QF es true removeQuantifier debe ser true
					qf= True
					#usar perfiles
					wac= ap1.extraccion__wac('resultado.alsuva',qf)
		    		        ap1.expor('../examples/'+caso+'/results/alt1/alt1_wa_'+accion+'_unrool_'+str(unroll)+'_control',i)
					print 'wac\n'
					print wac
					p.append('wac: '+str(wac))
					cont_wa=cont_wa+1
					#suma_tam_listas= int(size_lista)+suma_tam_listas
					sum_long_wa=sum_long_wa+unroll
					
					if primer_wac:
						break
			
					#sale al encontrar el primer wac
                   			print "...adding  not wac to resultado.dals... "

					accion_qf=''
					if qf:
						for e in wac:
							accion_qf='and (not(QF.'+e+'))\n'						
							pre_randoop.update_als(sys.argv[1]+'_ensures_'+sys.argv[2]+'[',accion_qf)
	


					else:
						cade= ap1.generar_cade_para_modelo_als(wac)
 					        ap1.buscar__insertar(cade,'resultado.als')



		    			ap1.run_modelo_alloy('resultado.als',i,unroll,sys.argv[2],1)
		    			os.system('cp resultado.als ../examples/'+caso+'/results/alt1/wa_'+caso+'_'+sys.argv[2]+'_in_'+str(i)+'unroll_'+str(unroll)+'.als')
					cc=cc+1
					if cc > size_wac_max:
						print 'Maximum limit is reached.'
						p.append('Maximum limit is reached.')
	
		                	if cc <=size_wac_max:
						print 'Not found more wacs for this size.'
						p.append('Not found more wacs for this size.')

		    # delete temporal files
                    os.system('rm temp')
	print 'updating...'
	result[i]=p

   
   cant_estados=len(entradas)
   final=''	

   
   print '---------------------------------------------------'	
   resultado = 'Action '+ accion
   resultado = resultado +' | Number of inputs processed: '+str(cant_estados)
   print resultado
   resultadof = resultado + '|'

   if (cant_estados>0):	
	   resultadof = resultadof + "Avg. input size: " +nume(str(float(suma_tam_listas)/float(cant_estados)))+ '|'
	   print  "Avg. input size: " +nume(str(float(suma_tam_listas)/float(cant_estados)))


   print 'Number of workarrounds found: '+str(cont_wa)
   resultadof=resultadof+'Number of workarrounds found: '+str(cont_wa)+ '|'



   print 'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(to)
   resultadof=resultadof+'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(to)+ '|'

   if (cont_wa>0):
   	prome=ttotal_sin_to/float(cont_wa)
	resultadof=resultadof+'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.|'
  	print 'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.'

   if (cont_wa>0):
   	prome=ttotal/float(cont_wa)
	resultadof=resultadof+'Avg. time to find a workaround: '+nume(str(prome))+' seconds.|'
  	print 'Avg. time to find a workaround: '+nume(str(prome))+' seconds.'



   resultadof=resultadof+'Total running time: '+nume(str(float(ttotal)))+' seconds.|'
   print 'Total running time: '+nume(str(float(ttotal)))+' seconds.'


   if not emin==10000:
   	resultadof=resultadof+'Smallest input size: '+str(emin)+' elements.|'
   	print 'Smallest input size: '+str(emin)+' elements.'
	resultadof=resultadof+'Maximum time to find a workaround for the smallest input: '+nume(str(temin))+'|'
   	print 'Maximum time to find a workaround for the smallest input: '+nume(str(temin))
	        

   if not emax==-1:
        resultadof=resultadof+'Largest input size: '+str(emax)+' elements.'+'|'
        print 'Largest input size: '+str(emax)+' elements.'
        resultadof=resultadof+'Maximum time to find a workaround for the largest input: '+nume(str(temax))+'|'
        print 'Maximum time to find a workaround for the largest input: '+nume(str(temax))
		
   if (cont_wa>0):
   	prome=nume(str(float(sum_long_wa)/float(cont_wa)))
	resultadof=resultadof+'Avg. size of workarounds: '+nume(str(prome))+' seconds.|'
  	print 'Avg. size of workarounds: '+nume(str(prome))+' actions.'
   print '---------------------------------------------------'
   result[-1]=resultadof


   return result
Example #3
0
def fix_alt1(caso,accion,pin,tiempo_to,input_file,flagp):

   
   #si flagp es True, luego de generar la lista de wac comenzara a verificar si encuentra alguno que sea permanente
   # en caso contrario lo que hara es continuar generando la lista de wac candidatos con sus respectivos loop unrolls
   result={} 	
   

   entradas=traer_pres_desde_archivo('../examples/'+caso+'/'+input_file)	
   
   cont=0
   size_wac_max=10  
   sum_long_wa=0	
   cont_wa=0
   tiempo_total=0
   entradas_procesadas=0	
   prom_tam_listas=0
   suma_tam_listas=0
   ttotal=0
   ttotal_sin_to=0	
   emin=10000
   temin=0
   emax=0 	
   temax=0
   to=0
   for i in range(0, len(entradas)):
	
	print '<control '+str(i)+'>'
        primer_wac=False
        scope='7'
        if primer_wac:
		break   
	print 'searching workarounds...\n'
	tiempo_inicio_wa=time.time()

	timeout=300
        cambio_i=False
        tama=size_ent(i,entradas)   
	for unroll in range(1,size_wac_max+1):
     	            ap1.run_modelo_dynalloy('temporalnew.dals','resultado.als',str(unroll))	
		    t2=time.time()-tiempo_inicio_wa	
		    ap1.rempla('resultado.als','check programa_wap',' ') 
		    os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als')
		    # se guarda una copia de resultado.als sin la pre externa. Se crea un archivo resultadoals_accion_unroll
		    # cambia la linea del assert por un run, esto sirve para dejar resultadoals listo para verificar wap
              	    #os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als')
		    #la funcion siguiente es la que actualuiza las pre de resultado.als	
		    #pred_aux son predicados auxiliares dependientes del tamanio de la estructura	
		    print 'size: '+str(tama)	
		    linea='size: '+str(tama)
  	            rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		    os.system(rr)
		    
              	    #os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als') 
		    res=gen_input_fact_i32(caso,i,entradas,accion,unroll,pin,result,'resultado.als')


		    #archi="../examples/"+caso+"/results/alt1/resultadoals_"+accion+"_"+str(unroll)
  	            #rr="cp resultado.als "+archi
		    #os.system(rr)
		    #ap1.rempla(archi,'assert programa_wap',' pred programa_wap')
 		    #ap1.rempla(archi,'check',' run ')
		    #ap1.borrar_pre(archi)
	            

		    size_lista=res[0]
		    p=result[i]	
		    p.append('size: '+str(tama))


		    result=res[1]
		    if not cambio_i:   
		    	    suma_tam_listas= int(size_lista)+suma_tam_listas
			    
			    cambio_i=True 	


		 	
		   
                 

                    # en este punto ya se ha generado el modelo alloy con el unroll correspondiente
                    print ' --------------------------------------------------------------- \n'
		    #print 'searching workarounds for ',accion,' with ',str(unroll),' unroll. \n'	
                    print ' --------------------------------------------------------------- \n'
		  
		    '''
			1 - invocar el sat incremental alloy con el modelo resultado.als 
		
		    '''
		    #la siguiente linea corre run_incremental_alloy con un timeout de 10m	
		    #
 		    
		    time_of= timeoutlib.call_with_timeout(incrementalwa.run_incremental_alloy, 'resultado.als',100,'wac_'+accion+'_with_'+str(unroll)+'.list')



		    



   		    # la corrida anterior crea un archivo con los wac candidatos llamado 'wac_<accion>_with_<unroll>.list


                  
		    
		    iii=0
		    if flagp==True: # comienza a verificar si en el archivo anterior hay permanentes. Otra alternativa es setear esto en falso y tierar un progrma concurrente que verifique lo anterior mientras sigue corriendo este script.
			wac_list = traer_pres_desde_archivo2('wac_'+accion+'_with_'+str(unroll)+'.list') 
	                numero=0
			print wac_list
			
			for e in  wac_list:
			     		
			     acciones=e[1].split(',')
			     
			     #print 'acciones del wac: ',acciones
			     #os.system('cp '+archi+' '+'tempo_wacp.als')

			     #linea="-------------------------------------------------------"
		             #rr="echo '"+e+"' >> tempo_wacp.als"
		             #os.system(rr)	
			     #incrementalwa.run_alloy('tempo_wacp.als')	
		             #ap1.run_modelo_alloy_pewa('tempo_wacp.als',1,unroll,accion,caso,1,'10m')
#acaca			     
			     
			     generate_program_dyn(caso,accion,acciones)
	
			     ap1.run_modelo_dynalloy('permanent.dals','tempo_wacp.als',str(unroll))	
		             os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> tempo_wacp.als')


			     ap1.rempla('tempo_wacp.als','check programa_wap',' ')
		             res=gen_input_fact_i32(caso,i,entradas,accion,unroll,pin,result,'tempo_wacp.als')
			     
			     #ap1.rempla('tempo_wacp.als','check programa_wap',' ') 
			      
			     #ap1.rempla('tempo_wacp.als','assert programa_wap{','pred programa_wap{') 
			     #ap1.rempla('tempo_wacp.als','check programa_wap for','run programa_wap for')
			      
			     ap1.borrar_pre('tempo_wacp.als')
		             print '???????????????????????????????????????'
			     print acciones
     			     print '???????????????????????????????????????'
			     timeoutlib.call_with_timeout_permament(incrementalwa.run_alloy,'tempo_wacp.als')
		             os.system('cp  tempo_wacp.als tempo_a'+str(iii))
			     iii=iii+1
		             os.system('rm  tempo_wacp.als')
		        sys.exit(0)
Example #4
0
def fix_1(caso, accion, pin, tiempo_to, input_file, flagp):

    #si flagp es True, luego de generar la lista de wac comenzara a verificar si encuentra alguno que sea permanente
    # en caso contrario lo que hara es continuar generando la lista de wac candidatos con sus respectivos loop unrolls
    result = {}

    entradas = traer_pres_desde_archivo('../examples/' + caso + '/' +
                                        input_file)

    tiempo_total_busqueda_wac = 0
    tiempo_total_busqueda_wap = 0
    cantidad_estados = 0
    cantidad_time_out_wac = 0
    cantidad_time_out_wap = 0

    cont = 0
    size_wac_max = 10
    sum_long_wa = 0
    cont_wa = 0
    tiempo_total = 0
    entradas_procesadas = 0
    prom_tam_listas = 0
    suma_tam_listas = 0
    ttotal = 0
    ttotal_sin_to = 0
    emin = 10000
    temin = 0
    emax = 0
    temax = 0
    to = 0
    ap1.log_file('action_name?' + accion, 'logfile_wap.log')
    for i in range(0, len(entradas)):

        print '<control ' + str(i) + '>'
        primer_wac = False
        scope = '7'
        if primer_wac:
            break
        print 'searching candidate workarounds...\n'
        ap1.log_file('state=' + str(i), 'logfile.log')

        tiempo_inicio_wa = datetime.now()

        cambio_i = False
        tama = size_ent(i, entradas)

        for unroll in range(1, size_wac_max + 1):

            ap1.run_modelo_dynalloy('temporalnew.dals', 'resultado.als',
                                    str(unroll))
            #sys.exit(0)

            t2 = datetime.now() - tiempo_inicio_wa
            ap1.rempla('resultado.als', 'check programa_wap', ' ')
            os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als')
            linea = 'size: ' + str(tama)
            rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt1/alt1_output"
            os.system(rr)

            res = gen_input_fact_i32(caso, i, entradas, accion, unroll, pin,
                                     result, 'resultado.als')

            size_lista = res[0]

            p = result[i]
            p.append('size: ' + str(tama))
            result = res[1]
            if not cambio_i:
                suma_tam_listas = int(size_lista) + suma_tam_listas
                cambio_i = True

        #busca todos los wa candidatos para el unroll indicado
            aa = datetime.now()

            #ap1.log_file('Start time finding wac:'+ str(aa) +' % unroll:'+str(unroll),'logfile.log')

            #sys.exit(0)
            #ap1.log_file('action:'+str(accion)+' % state:'+str(i)+' % '+'unroll:'+str(unroll),'logfile.log')
            time_of = timeoutlib.call_with_timeout(
                incrementalwa.run_incremental_alloy, 'resultado.als', 100,
                unroll, i, accion,
                'wac_' + accion + '_with_' + str(unroll) + '.list')
            #candidato="candidato_"+accion+"_"+str(unroll)+".als"
            #os.system("cp resultado.als "+candidato)
            #sys.exit(0)
            bb = datetime.now()
            #ap1.log_file('Finish time:'+str(bb)+' finding wac for unroll:'+str(unroll),'logfile.log')

            ap1.log_file(
                'Finish time finding wac %' + str(accion) + ' % ' + 'unroll=' +
                str(unroll) + ' % TO=' + str(time_of[1]) + ' % total_time=' +
                ap1.tiempo_transcurrido(aa, bb), 'logfile.log')

            if time_of[1]:
                break  # si ya se dio un timeour en el unroll corriente, no tiene sentido buscar en los de mayor unroll

        #ap1.log_file('timeout:'+str(time_of[1]),'logfile.log')

            iii = 0

            if flagp:

                print 'wac_' + accion + '_with_' + str(unroll) + '.list\n'
                #sys.exit(0)

                wac_list = traer_pres_desde_archivo2('wac_' + accion +
                                                     '_with_' + str(unroll) +
                                                     '.list')

                numero = 0
                print 'Cantidad de wac a verificar: ', len(wac_list)
                ap1.log_file(
                    '#wac-wap:' + str(len(wac_list)) + ' unroll:' +
                    str(unroll), 'logfile_wap.log')
                for e in wac_list:

                    acciones = e[1].split(',')
                    #sys.exit(0)
                    generate_program_dyn(caso, accion, acciones)
                    print 'wac :', acciones
                    #		             ap1.log_file('Verificando : '+str(acciones),'logfile_wap.log')

                    ap1.run_modelo_dynalloy('permanent.dals', 'tempo_wacp.als',
                                            '1')

                    update_tempo_wacp('tempo_wacp.als', e[2])

                    os.system(
                        'echo "/*INI_PRE*/  /*FIN_PRE*/" >> tempo_wacp.als')

                    os.system('echo "' + e[2] + '" >> tempo_wacp.als')

                    ap1.rempla('tempo_wacp.als', 'check programa_wap', ' ')
                    res = gen_input_fact_i32(caso, i, entradas, accion, unroll,
                                             pin, result, 'tempo_wacp.als')

                    #sys.exit(0)

                    ap1.borrar_pre('tempo_wacp.als')

                    print 'Verificando si ' + str(
                        acciones) + ' ' + e[2] + ' es un wap'
                    archi = 'temporal_a_' + str(iii) + '.als'
                    os.system('cp  tempo_wacp.als ' + archi)

                    ap1.log_file(
                        ('Verificando si ' + str(acciones) + ' es un wap'),
                        'logfile_wap.log')
                    time_of = timeoutlib.call_with_timeout_permament(
                        incrementalwa.run_alloy2, archi)
                    ap1.log_file('timeout_sal:' + str(time_of[1]),
                                 'logfile_wap.log')
                    iii = iii + 1

                    os.system('rm  tempo_wacp.als')

    ap1.log_file('StateFin', 'logfile.log')
def fix_alt1(caso, accion, pin, tiempo_to, input_file, flagp):

    #si flagp es True, luego de generar la lista de wac comenzara a verificar si encuentra alguno que sea permanente
    # en caso contrario lo que hara es continuar generando la lista de wac candidatos con sus respectivos loop unrolls
    result = {}

    entradas = traer_pres_desde_archivo('../examples/' + caso + '/' +
                                        input_file)
    cont = 0
    size_wac_max = 10
    sum_long_wa = 0
    cont_wa = 0
    tiempo_total = 0
    entradas_procesadas = 0
    prom_tam_listas = 0
    suma_tam_listas = 0
    ttotal = 0
    ttotal_sin_to = 0
    emin = 10000
    temin = 0
    emax = 0
    temax = 0
    to = 0

    for i in range(0, len(entradas)):

        print '<control ' + str(i) + '>'
        primer_wac = False
        scope = '7'
        if primer_wac:
            break
        print 'searching candidate workarounds...\n'
        tiempo_inicio_wa = time.time()

        timeout = 300
        cambio_i = False
        tama = size_ent(i, entradas)
        for unroll in range(1, size_wac_max + 1):
            ap1.run_modelo_dynalloy('temporalnew.dals', 'resultado.als',
                                    str(unroll))
            t2 = time.time() - tiempo_inicio_wa
            ap1.rempla('resultado.als', 'check programa_wap', ' ')
            os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als')
            linea = 'size: ' + str(tama)
            rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt1/alt1_output"
            os.system(rr)

            res = gen_input_fact_i32(caso, i, entradas, accion, unroll, pin,
                                     result, 'resultado.als')
            size_lista = res[0]
            p = result[i]
            p.append('size: ' + str(tama))
            result = res[1]
            if not cambio_i:
                suma_tam_listas = int(size_lista) + suma_tam_listas
                cambio_i = True

        #busca todos los wa candidatos para el unroll indicado

        #ap1.reg('reporte','-- begin report --',0)

        #ap1.reg('reporte',accion+'_unroll_'+ str(unroll),1)
            time_of = timeoutlib.call_with_timeout(
                incrementalwa.run_incremental_alloy, 'resultado.als', 100,
                'wac_' + accion + '_with_' + str(unroll) + '.list')
            print time_of
            iii = 0

            #if unroll==2 and flagp==True:
            if flagp:
                print 'si entro al flag'
                wac_list = traer_pres_desde_archivo2('wac_' + accion +
                                                     '_with_' + str(unroll) +
                                                     '.list')
                numero = 0
                #print wac_list
                print 'Cantidad de wac a verificar: ', len(wac_list)
                for e in wac_list:
                    acciones = e[1].split(',')
                    generate_program_dyn(caso, accion, acciones)
                    print 'wac :', acciones
                    ap1.run_modelo_dynalloy('permanent.dals', 'tempo_wacp.als',
                                            str(unroll))
                    os.system(
                        'echo "/*INI_PRE*/  /*FIN_PRE*/" >> tempo_wacp.als')
                    ap1.rempla('tempo_wacp.als', 'check programa_wap', ' ')
                    res = gen_input_fact_i32(caso, i, entradas, accion, unroll,
                                             pin, result, 'tempo_wacp.als')
                    ap1.borrar_pre('tempo_wacp.als')
                    '''				      	
			     print 'corriendo alloy'
			     ap1.run_modelo_alloy('tempo_wacp.als',i,unroll,accion,caso,1,tiempo_to)
		    	     if ap1.UNSAT('temp')==1:
		      			print 'Eureka'
	            	     if ap1.UNSAT('temp')==2: 
		      			print 'timeout.'
		      	     if ap1.UNSAT('temp')==0:
	       	      			print 'no es un wa permanente'
                             




			     '''
                    print 'Verificando si es un wap'
                    archi = 'temporal_a_' + str(iii) + '.als'
                    os.system('cp  tempo_wacp.als ' + archi)
                    timeoutlib.call_with_timeout_permament(
                        incrementalwa.run_alloy, archi)

                    iii = iii + 1
                    print 'salida'
                    #sys.exit(0)
                    os.system('rm  tempo_wacp.als')
def fix_alt1_jodatime2(caso,accion,pin,tiempo_to,input_file):
   #buscar en el archivo de las entradas y agregarlos en entradas_wag
   entradas=ap2.read_file_input_joda("entrada_wag_finder")
   
   ttotal=0
   ttotal_sin_to=0
   total_reparaciones=0
   total_estados=0
   cant_to=0

   size_wac_max=3 
   for i in range(0, len(entradas)-1):
	primer_wac=False
	print 'searching workarounds..joda.\n'
        salir=False
        total_estados=total_estados+1
	for unroll in range(1,size_wac_max):
		    if salir:
		         break
		    	
	      	    ap1.run_modelo_dynalloy('temporalnew.dals','resultado.als',str(unroll))
		    #agrega los enteros dependiendo de la cantidad de loops unroll
		    os.system('echo "check programa_wap for 0 but "'+ str(unroll*23) +' JavaPrimitiveIntegerValue  >> resultado.als')


	    
              	    os.system('echo "/*INI_PRE*/  /*FIN_PRE*/" >> resultado.als')
		    initial_state=entradas[i].strip('\n')
		    initial_state=initial_state.replace('/*INICIO*/','')
		    initial_state=initial_state.replace('/*FIN*/','')


		    #parche para no incluir el QF.k_0 en las acciones que no tiene este parametro, ejemplo los get
	            if (not acciones_con_parametro_k(accion)):	
                    	initial_state=initial_state.replace('QF.k_0','QF.'+accion+"_k_0")
		    else:
			ind1=initial_state.find("and eq32[QF.k_0")
			initial_state=initial_state[:ind1]+"}"
			






                    ap2.gen_fact_qf(unroll,accion)
		    os.system(" sed -i 's/\/\*INI_PRE.*FIN_PRE\*\//\/\*INI_PRE\*\/"+initial_state+"\/\*FIN_PRE\*\//g ' resultado.als")
		    tinicio= time.time()
                    ap1.run_modelo_alloy('resultado.als',i,unroll,accion,caso,1,tiempo_to)
                    tfin= time.time()
		    os.system('cp resultado.als ../examples/'+caso+'/results/alt1/wa_'+caso+'_'+accion+'_in_'+str(i)+'unroll_'+str(unroll)+'.als')
		    

		    tanalisis= tfin-tinicio
 		    
                    ttotal=ttotal+tanalisis

   		    if ap1.UNSAT('temp')==1:
                      		ttotal_sin_to=ttotal_sin_to+tanalisis
  		      		linea='State number: '+str(i)+' there is no workarounds for unroll:'+ str(unroll)
		      		rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		      		os.system(rr)
				print linea
				break

	            if ap1.UNSAT('temp')==2:
		      		linea='State number: '+str(i)+' TIMEOUT for '+ str(unroll)+' unrolls.'
				print linea
		      		rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
		      		os.system(rr)
  		    	      	cant_to=cant_to+1
		      		
		    
		    if ap1.UNSAT('temp')==0:
		                total_reparaciones=total_reparaciones+1
				ttotal_sin_to=ttotal_sin_to+tanalisis
				linea='State number: '+str(i)+' first wac found in: '+ str(tanalisis)+' seconds.'
		      		rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
				print linea
		      		os.system(rr)
                                salir=True   
				break

   
   print '---------------------------------------------------'	
   resultado = 'Action '+ accion
   resultado = resultado +' | Number of inputs processed: '+str(total_estados)
   print resultado
   resultadof = resultado + '|'

  
   print 'Number of workarrounds found: '+str(total_reparaciones)
   resultadof=resultadof+'Number of workarrounds found: '+str(total_reparaciones)+ '|'



   print 'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(cant_to)
   resultadof=resultadof+'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(cant_to)+ '|'

   if (total_reparaciones>0):
   	prome=ttotal_sin_to/float(total_reparaciones)
	resultadof=resultadof+'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.|'
  	print 'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.'

   if (total_reparaciones>0):
   	prome=ttotal/float(total_reparaciones)
	resultadof=resultadof+'Avg. time to find a workaround: '+nume(str(prome))+' seconds.|'
  	print 'Avg. time to find a workaround: '+nume(str(prome))+' seconds.'
   resultadof=resultadof+'Total running time: '+nume(str(float(ttotal)))+' seconds.|'
   print 'Total running time: '+nume(str(float(ttotal)))+' seconds.'

   print '---------------------------------------------------'
   
   rr="echo '"+resultadof+"' >> ../examples/"+caso+"/results/alt1/alt1_output"
   os.system(rr)