Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abc
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
abc
Commits
22f9e999
Commit
22f9e999
authored
Dec 07, 2013
by
Baruch Sterin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
final version of Bob's scripts for hwmcc13
parent
3c358912
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
80 additions
and
100 deletions
+80
-100
scripts/par.py
+80
-100
No files found.
scripts/par.py
View file @
22f9e999
...
...
@@ -78,7 +78,7 @@ cex_list = []
TERM
=
'USL'
last_gasp_time
=
10000
last_gasp_time
=
500
last_gasp_time
=
2001
#set to conform to hwmcc12
last_gasp_time
=
900
#set to conform to hwmcc12
use_pms
=
True
#gabs = False #use the gate refinement method after vta
...
...
@@ -250,10 +250,10 @@ def initialize():
cex_list
=
[]
n_pos_before
=
n_pos
()
n_pos_proved
=
0
abs_time
=
150
#timeout for abstraction
abs_time
=
150
abs_ref_time
=
50
#number of sec. allowed for abstraction refinement.
total_spec_refine_time
=
150
# timeout for speculation refinement
abs_ratio
=
.
5
total_spec_refine_time
=
150
abs_ratio
=
.
5
hist
=
[]
skip_spec
=
False
t_iter_start
=
0
...
...
@@ -377,16 +377,14 @@ def set_engines(N=0):
"""
global
reachs
,
pdrs
,
sims
,
intrps
,
bmcs
,
n_proc
,
abs_ratio
,
ifbip
,
bmcs1
,
if_no_bip
,
allpdrs
,
allbmcs
bmcs1
=
[
9
]
#BMC3
##
#for HWMCC we want to set N = 8
##
N = 8
#for HWMCC we want to set N = 8
N
=
8
if
N
==
0
:
N
=
n_proc
=
1
+
os
.
sysconf
(
os
.
sysconf_names
[
"SC_NPROCESSORS_ONLN"
])
## N = n_proc = 8 ### simulate 4 processors for HWMCC - turn this off a hwmcc.
else
:
n_proc
=
N
## print 'n_proc = %d'%n_proc
#strategy is to use 2x number of processors
N
=
n_proc
=
-
1
+
2
*
N
if
N
<=
1
:
reachs
=
[
24
]
pdrs
=
[
7
]
...
...
@@ -735,7 +733,6 @@ def set_max_bmc(b):
report_bmc_depth
(
max_bmc
)
def
report_bmc_depth
(
m
):
return
#for non hwmcc applications
print
'u
%
d'
%
m
def
print_circuit_stats
():
...
...
@@ -944,7 +941,7 @@ def simplify(M=0,N=0):
print
'
\n
'
return
get_status
()
def
simulate2
(
t
=
2001
):
def
simulate2
(
t
=
900
):
"""Does rarity simulation. Simulation is restricted by the amount
of memory it might use. At first wide but shallow simulation is done, followed by
successively more narrow but deeper simulation.
...
...
@@ -969,7 +966,7 @@ def simulate2(t=2001):
if
((
time
.
clock
()
-
btime
)
>
t
):
return
'UNDECIDED'
def
simulate
(
t
=
2001
):
def
simulate
(
t
=
900
):
abc
(
'&get'
)
result
=
eq_simulate
(
t
)
return
result
...
...
@@ -2097,7 +2094,7 @@ def speculate(t=0):
write_file
(
'spec'
)
return
Undecided_reduction
def
simple_sat
(
t
=
2001
):
def
simple_sat
(
t
=
900
):
"""
aimed at trying harder to prove SAT
"""
...
...
@@ -2458,7 +2455,7 @@ def dsat_all(t=100,c=100000):
break
print
'Total time =
%0.2
f'
%
(
time
.
time
()
-
ttt
)
def
check_sat
(
t
=
2001
):
def
check_sat
(
t
=
900
):
"""This is called if all the FF have disappeared, but there is still some logic left. In this case,
the remaining logic may be UNSAT, which is usually the case, but this has to be proved. The ABC command 'dsat' is used fro combinational problems"""
global
smp_trace
...
...
@@ -3662,7 +3659,7 @@ def unmap_cex():
## print 'cex matches original aig'
def
sp
(
n
=
0
,
t
=
2001
,
check_trace
=
False
):
def
sp
(
n
=
0
,
t
=
900
,
check_trace
=
False
):
"""Alias for super_prove, but also resolves cex to initial aig"""
global
initial_f_name
print
'Executing super_prove'
...
...
@@ -3800,7 +3797,7 @@ def remove_v(ss,v):
s
=
s
+
[
ss
[
i
]]
return
s
def
multi_prove
(
op
=
'simple'
,
tt
=
2001
,
n_fast
=
0
,
final_map
=
[]):
def
multi_prove
(
op
=
'simple'
,
tt
=
900
,
n_fast
=
0
,
final_map
=
[]):
"""two phase prove process for multiple output functions"""
global
max_bmc
,
init_initial_f_name
,
initial_f_name
,
win_list
,
last_verify_time
global
f_name_save
,
nam_save
,
_L_last
,
file_out
...
...
@@ -3812,7 +3809,7 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
#handle single output case differently
_L_last
=
[
-
1
]
*
n_pos
()
if
n_pos
()
==
1
:
result
=
sp
(
200
1
)
result
=
sp
(
200
0
)
## abc('w %s_unsolved.aig'%init_initial_f_name)
rs
=
result
[
0
]
if
rs
==
'SAT'
:
...
...
@@ -3828,7 +3825,6 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
L
=
[
2
]
res
=
sumsize
(
L
)
rr
=
'
\n
@@@@ Time =
%
d '
%
(
time
.
time
()
-
t_iter_start
)
+
res
rr
=
'
%
s: '
%
init_initial_f_name
+
rr
print
rr
file_out
.
write
(
rr
+
'
\n
'
)
file_out
.
flush
()
...
...
@@ -3845,7 +3841,6 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
rr
=
'
\n
@@@@ Time =
%.2
f: '
%
(
time
.
time
()
-
t_iter_start
)
report_L
(
lst0
,
0
)
##########
rr
=
rr
+
res
rr
=
'
%
s: '
%
init_initial_f_name
+
rr
print
rr
file_out
.
write
(
rr
+
'
\n
'
)
file_out
.
flush
()
...
...
@@ -3863,14 +3858,14 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
## print S,lst1
#put 0 values into lst0
lst10
=
indices
(
s
,
0
)
#new unsat POs in local indices (with lst0 removed)
##
if not lst10 == []:
##
print 'lst10 = %s'%str(lst10)
if
not
lst10
==
[]:
print
'lst10 =
%
s'
%
str
(
lst10
)
lst11
=
indices
(
s
,
1
)
#local variables
ss
=
expand
(
s
,
lst0
,
0
)
#ss will reflect original indices
report_s
(
ss
)
lst0_old
=
lst0
lst0
=
indices
(
ss
,
0
)
#additional unsat POs added to initial lst0 (in original indices)
##
print 'lst0 = %s'%str(lst0)
print
'lst0 =
%
s'
%
str
(
lst0
)
assert
len
(
lst0
)
==
len
(
lst0_old
)
+
len
(
lst10
),
'lst0 =
%
s, lst0_old =
%
s, lst10 =
%
s'
%
(
str
(
lst0
),
str
(
lst0_old
),
str
(
lst10
))
sss
=
remove_v
(
ss
,
0
)
#remove the 0's from ss
assert
len
(
sss
)
==
len
(
ss
)
-
len
(
lst0
),
'len(sss) =
%
d, len(ss) =
%
d, len(lst0) =
%
d'
%
(
len
(
sss
),
len
(
ss
),
len
(
lst0
))
...
...
@@ -3879,25 +3874,24 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
#done with new code
assert
len
(
lst1_1
)
==
len
(
lst1
),
'mismatch, lst1 =
%
d, lst1_1 =
%
d'
%
(
len
(
lst1
),
len
(
lst1_1
))
lst1
=
lst1_1
#lst1 should be in original minus lst0
##
print 'Found %d SAT POs'%len(lst1)
##
print 'Found %d UNSAT POs'%len(lst10)
print
'Found
%
d SAT POs'
%
len
(
lst1
)
print
'Found
%
d UNSAT POs'
%
len
(
lst10
)
res
=
'SAT =
%
d, UNSAT =
%
d, UNDECIDED =
%
d'
%
(
len
(
lst1
),
len
(
lst0
),
NNN
-
(
len
(
lst1
)
+
len
(
lst0
)))
rr
=
'
\n
@@@@ Time =
%.2
f: '
%
(
time
.
time
()
-
t_iter_start
)
rr
=
rr
+
res
rr
=
'
%
s: '
%
init_initial_f_name
+
rr
print
rr
file_out
.
write
(
rr
+
'
\n
'
)
file_out
.
flush
()
N
=
n_pos
()
##
print len(lst10),n_pos()
print
len
(
lst10
),
n_pos
()
if
not
len
(
lst10
)
==
n_pos
()
and
len
(
lst10
)
>
0
:
remove
(
lst10
,
1
)
#remove 0 POs
print
'Removed
%
d UNSAT POs'
%
len
(
lst10
)
N
=
n_pos
()
elif
len
(
lst10
)
==
n_pos
():
N
=
0
#can't remove all POs. Must proceed as if there are no POs. But all POs are UNSAT.
##
print len(lst1),N,S #note: have not removed the lst1 POs.
if
len
(
lst1
)
==
N
or
S
==
'UNSAT'
or
N
==
0
:
#all POs are
solved
print
len
(
lst1
),
N
,
S
#note: have not removed the lst1 POs.
if
len
(
lst1
)
==
N
or
S
==
'UNSAT'
or
N
==
0
:
#all POs are
SAT
L
=
[
0
]
*
N
#could just put L as all 1's. If N = 0, all POs are UNSAT and lst1 = []
for
i
in
range
(
len
(
lst1
)):
#put 1's in SAT POs
L
[
lst1
[
i
]]
=
1
...
...
@@ -3917,7 +3911,7 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
else
:
N
=
0
if
N
==
1
:
#this was wrong. Need to report in original indices???
result
=
sp
(
200
1
)
result
=
sp
(
200
0
)
rs
=
result
[
0
]
#need to find out original index of remaining PO
if
rs
==
'SAT'
:
...
...
@@ -3934,7 +3928,6 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
report_results
(
L
)
res
=
sumsize
(
L
)
rr
=
'
\n
@@@@ Time =
%
d '
%
(
time
.
time
()
-
t_iter_start
)
+
res
rr
=
'
%
s: '
%
init_initial_f_name
+
rr
print
rr
file_out
.
write
(
rr
+
'
\n
'
)
file_out
.
flush
()
...
...
@@ -3952,7 +3945,7 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
map1
=
create_map
(
leq
,
N
)
#creates map into original
## print map1
if
not
count_less
(
L
,
0
)
==
N
:
print
'L =
%
s'
%
sumsize
(
L
)
print
L
L1
=
[
-
1
]
*
n_pos
()
## L1 = pass_down(L,list(L1),map1) # no need to pass down because L will have no values at this point.
else
:
...
...
@@ -3993,7 +3986,7 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
## write_file('1')
## L = output(list(L),list(L1),L2,map1,map2,lst0,lst1,NP)
L
=
output2
(
list
(
L2
),
map1
,
map2
,
lst0
,
lst1
,
NP
)
result
=
simple
(
200
1
,
1
)
result
=
simple
(
200
0
,
1
)
Ss
=
rs
=
result
[
0
]
if
rs
==
'SAT'
:
L2
=
[
1
]
...
...
@@ -4037,7 +4030,7 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
ttt
=
20
abc
(
'w
%
s_before_mprove2.aig'
%
f_name
)
print
'
%
s_before_mprove2.aig written'
%
f_name
##
print 'L2 = %s'%str(L2)
print
'L2 =
%
s'
%
str
(
L2
)
print
'Entering first mprove2 for
%
d sec.'
%
ttt
,
Ss
,
L2
=
mprove2
(
list
(
L2
),
op
,
ttt
,
1
)
#populates L2 with results
## print Ss,L2
...
...
@@ -4111,7 +4104,7 @@ def multi_prove(op='simple',tt=2001,n_fast=0, final_map=[]):
remove_proved_pos
(
L2
)
simplify
()
write_file
(
'save'
)
result
=
simple
(
200
1
,
1
)
result
=
simple
(
200
0
,
1
)
if_found
=
False
if
result
[
0
]
==
'UNSAT'
:
for
i
in
range
(
N
):
...
...
@@ -4154,7 +4147,6 @@ def multi_prove_iter():
s
=
count_less
(
L
,
2
)
-
(
d
+
u
)
rr
=
'
\n
@@@@@
%
s: Final time =
%.2
f '
%
(
init_initial_f_name
,(
time
.
time
()
-
t_iter_start
))
rr
=
rr
+
'SAT =
%
d, UNSAT =
%
d, UNDECIDED =
%
d '
%
(
s
,
u
,
d
)
rr
=
'
%
s: '
%
init_initial_f_name
+
rr
print
rr
file_out
.
write
(
rr
)
res
=
PO_results
(
L
)
...
...
@@ -4542,7 +4534,6 @@ def report_results(L,final_map=[],if_final=False):
print
'
\n
'
def
report_result
(
POn
,
REn
,
final_map
=
[]):
return
#for non hwmcc application
if
final_map
==
[]:
print
'PO =
%
d, Result =
%
d: '
%
(
POn
,
REn
),
else
:
...
...
@@ -4617,7 +4608,7 @@ def scorr_T(t=10000):
smp_trace
=
smp_trace
+
[
'
%
s'
%
mtds
[
m_best
]]
abc
(
'r
%
s_best_T.aig'
%
f_name
)
def
pscorr
(
t
=
2001
):
def
pscorr
(
t
=
900
):
result
=
par_scorr
(
t
)
if
n_ands
()
==
0
:
return
result
...
...
@@ -4747,9 +4738,9 @@ def mprove2(L=0,op='simple',t=100,nn=0):
v
=
-
1
skip_spec_old
=
skip_spec
skip_spec
=
True
result
=
simple
(
200
1
,
1
)
result
=
simple
(
200
0
,
1
)
ff_name
==
f_name
result
=
sp
(
0
,
200
1
)
#warning sp() can change f_name. 0 means simplify
result
=
sp
(
0
,
200
0
)
#warning sp() can change f_name. 0 means simplify
f_name
=
ff_name
skip_spec
=
skip_spec_old
res
=
result
[
0
]
...
...
@@ -4793,7 +4784,7 @@ def mprove2(L=0,op='simple',t=100,nn=0):
N
=
n_pos
()
tb
=
min
(
N
,
50
)
## print 'Trying par_multi_sat for %d sec.'%tb
S
,
lst1
,
s
=
par_multi_sat
(
tb
,
1
,
1
,
1
)
#this gives a list of SAT POs
S
,
lst1
,
s
=
par_multi_sat
(
tb
,
1
,
1
,
0
)
#this gives a list of SAT POs
L2
=
s10
=
s
n_solved
=
n_pos
()
-
count_less
(
s10
,
0
)
if
1
in
s10
or
0
in
s10
:
#something solved
...
...
@@ -4811,16 +4802,14 @@ def mprove2(L=0,op='simple',t=100,nn=0):
#iterate here as long as more than 1 PO is found SAT
n_solved
=
n_pos
()
-
count_less
(
s210
,
0
)
while
n_solved
>
0
:
print
'n_solved =
%
d'
%
n_solved
gap
=
int
(
1
+
1.2
*
gap
)
print
'gap =
%.2
f'
%
gap
pre_simp
(
1
)
#warning this may create const-0 pos
S
,
lst2
,
s
=
par_multi_sat
(
tb
,
gap
,
1
,
1
)
#this can find UNSAT POs
S
,
lst2
,
s
=
par_multi_sat
(
tb
,
gap
,
1
,
0
)
#this can find UNSAT POs
s210
=
s
n_solved
=
n_pos
()
-
count_less
(
s210
,
0
)
s10
=
put
(
s210
,
list
(
s10
))
#put the new values found into s10
if
count_less
(
s10
,
0
)
==
0
or
n_solved
==
0
:
#all solved or nothing solved
print
's210 =
%
s'
%
sumsize
(
s210
)
break
#s10 has the results
else
:
out
=
'
\n
@@@@ Time =
%.2
f: additional POs found SAT =
%
d'
%
((
time
.
time
()
-
t_iter_start
),
len
(
lst2
))
...
...
@@ -4832,7 +4821,7 @@ def mprove2(L=0,op='simple',t=100,nn=0):
remove
(
rem
,
1
)
#this zeros the l210 and then removes ALL const-1 POs.
#If there are more than lst2 removed, it fires an assertion.
continue
L2
=
s10
#put results
of s10 into L2
L2
=
s10
#put results
in s10
else
:
#lst1 is empty or S == SAT'
print
'no cex found or S = UNSAT'
else
:
#all solved
...
...
@@ -4844,7 +4833,7 @@ def mprove2(L=0,op='simple',t=100,nn=0):
if
-
1
in
s10
:
print
'Entering solve_all '
,
ps
()
S
,
s210
=
solve_all
([
-
1
]
*
n_pos
(),
2001
)
#solve_all calls sp() or simple but preserves the aig and f_name
S
,
s210
=
solve_all
([
-
1
]
*
n_pos
(),
900
)
#solve_all calls sp() or simple but preserves the aig and f_name
## else: zzz
if
-
1
in
s210
:
#then no POs were solved by solve_all
## abc('r %s_smp2_2.aig'%f_name)
...
...
@@ -4857,7 +4846,7 @@ def mprove2(L=0,op='simple',t=100,nn=0):
s210
=
[
-
1
]
*
n_pos
()
print
's210 after mprove and before inject 1
%
s:'
%
sumsize
(
s210
)
L2
=
put
(
s210
,
s10
)
##
print 'L2 after inject 1 %s:'%sumsize(L2)
print
'L2 after inject 1
%
s:'
%
sumsize
(
L2
)
else
:
#all POs solved
L2
=
s10
assert
NP
==
1
,
'NP > 1: ERROR'
...
...
@@ -4868,7 +4857,7 @@ def mprove2(L=0,op='simple',t=100,nn=0):
print
'L1 after unmap of map3: '
,
print
sumsize
(
L1
)
else
:
##
print 'L2 = %s'%str(L2)
print
'L2 =
%
s'
%
str
(
L2
)
L1
=
L2
L1
=
inject
(
list
(
L1
),
Llst0
,
0
)
print
'L1 after inject of Llst0 0s:
%
s:'
%
sumsize
(
L1
)
...
...
@@ -4980,10 +4969,10 @@ def solve_all(L2,t):
## ps()
skip_spec_old
=
skip_spec
skip_spec
=
True
tt
=
max
(
t
,
2001
)
tt
=
max
(
t
,
900
)
print
'Entering simple for
%
d sec.'
%
tt
##
result = simple(tt,1) #### temporary 1 means do not simplify
result
=
sp
(
0
,
t
)
#warning sp() may change f_name. Changed from HWMCC13 submission
result
=
simple
(
tt
,
1
)
#### temporary 1 means do not simplify
## result = sp(0,t) #warning sp() may change f_name
skip_spec
=
skip_spec_old
## print 'solve_all: result = %s'%result
if
result
[
0
]
==
'UNSAT'
:
...
...
@@ -5158,7 +5147,7 @@ def mprove(L,op='simple',tt=1000):
## sec_options = options
## return super_prove(1)
def
super_prove
(
n
=
0
,
t
=
2001
):
def
super_prove
(
n
=
0
,
t
=
900
):
"""Main proof technique now. Does original prove and if after speculation there are multiple output left
if will try to prove each output separately, in reverse order. It will quit at the first output that fails
to be proved, or any output that is proved SAT
...
...
@@ -5369,13 +5358,13 @@ def reachn(t):
print
'reachm3 done in time =
%
f'
%
(
time
.
clock
()
-
x
)
return
get_status
()
def
reachx
(
t
=
2001
):
def
reachx
(
t
=
900
):
x
=
time
.
time
()
abc
(
'reachx -t
%
d'
%
t
)
print
'reachx done in time =
%
f'
%
(
time
.
time
()
-
x
)
return
get_status
()
def
reachy
(
t
=
2001
):
def
reachy
(
t
=
900
):
x
=
time
.
clock
()
abc
(
'&get;&reachy -v -T
%
d'
%
t
)
## print 'reachy done in time = %f'%(time.clock() - x)
...
...
@@ -6044,18 +6033,18 @@ def par_multi_sat(t=10,gap=0,m=1,H=0):
t
=
gt
last_gap
=
gt
## H = max(100, t/n_pos()+1)
if
not
H
==
0
:
#se timeout peer output
if
not
H
==
0
:
H
=
(
gt
*
1000
)
/
n_pos
()
H
=
max
(
min
(
H
,
1000
*
gt
),
100
)
tme
=
time
.
time
()
list0
=
listr_0_pos
()
#reduces POs
list0
.
sort
()
## print 'list0 = %s'%str(list0)
##
if len(list0)>0:
## print '
removed %d cost-0 POs'%len(list0)
##
ps()
if
len
(
list0
)
>
0
:
print
'temporarily
removed
%
d cost-0 POs'
%
len
(
list0
)
ps
()
if
len
(
list0
)
>
0
:
print
'Found
initial
%
d const-0 POs
'
%
len
(
list0
)
print
'Found
%
d const-0 POs, but not removed
'
%
len
(
list0
)
## print ll
print
'par_multi_sat entered for
%.2
f sec. and gap =
%.2
f sec., H =
%.2
f'
%
(
t
,
gt
,
H
)
base
=
m
*
1000
...
...
@@ -6065,10 +6054,10 @@ def par_multi_sat(t=10,gap=0,m=1,H=0):
mx
=
1000000000
/
max
(
1
,
n_latches
())
N
=
n_pos
()
na
=
n_ands
()
F
=
[
eval
(
'(pyabc_split.defer(bmc3az)(t,gt,
%
d,H))'
%
(
0
))]
F
=
[
eval
(
'(pyabc_split.defer(bmc3az)(t,gt,
%
d,H))'
%
(
0
*
base
))]
## if na < 50000:
F
=
F
+
[
eval
(
'(pyabc_split.defer(pdraz)(t,gt,H))'
)]
#need pdr in??
F
=
F
+
[
eval
(
'(pyabc_split.defer(sim3az)(t,gt,
%
d,4,0))'
%
(
0
))]
F
=
F
+
[
eval
(
'(pyabc_split.defer(sim3az)(t,gt,
%
d,4,0))'
%
(
0
*
base
))]
F
=
F
+
[
eval
(
'(pyabc_split.defer(sleep)(t))'
)]
F
=
F
+
[
eval
(
'(pyabc_split.defer(sim3az)(t,gt,
%
d,4,0))'
%
(
100
))]
F
=
F
+
[
eval
(
'(pyabc_split.defer(bmc3az)(t,gt,
%
d,0))'
%
(
100
))]
...
...
@@ -6098,8 +6087,8 @@ def par_multi_sat(t=10,gap=0,m=1,H=0):
nn
=
len
(
F
)
for
i
,
res
in
pyabc_split
.
abc_split_all
(
F
):
ii
=
ii
+
[
i
]
##
if len(ii) == len(F)-1: #all done but sleep
##
break
if
len
(
ii
)
==
len
(
F
)
-
1
:
#all done but sleep
break
if
i
==
3
:
#sleep timeout
print
'sleep timeout'
break
...
...
@@ -6108,15 +6097,15 @@ def par_multi_sat(t=10,gap=0,m=1,H=0):
#### print i
if
i
==
0
:
zero_done
=
True
# bmc with start at 0 is done
if
i
==
2
:
#sim3 with start 0 is done
if
i
==
2
:
two_done
=
True
if
res
==
None
:
#this can happen if one of the methods bombs out
print
'Method
%
d returned None'
%
i
continue
## print res
s1
=
switch
(
list
(
res
[
1
])
)
#res[1]= s
s
=
merge_s
(
list
(
s
),
s1
)
##
print sumsize(s)
s1
=
switch
(
res
[
1
]
)
#res[1]= s
s
=
merge_s
(
list
(
s
),
s1
)
print
sumsize
(
s
)
ss
=
ss
+
[
s1
]
## LL = LL + [res[0]]
## L = L + res[0]
...
...
@@ -6138,27 +6127,25 @@ def par_multi_sat(t=10,gap=0,m=1,H=0):
r
=
ss2
[
0
]
if
r
==
ss2
[
1
]
and
count_less
(
r
,
1
)
<
len
(
r
):
#at least 1 SAT PO found
break
if
len
(
ii
)
==
len
(
F
)
-
1
:
#all done but sleep
break
## if len(LL) > 1 and zero_done and two_done:
## ll2 = LL[-2:] #checking if last 2 results agree
## if ll2[0] == ll2[1] and ll2[0] > 0:
## break
##
print 'Found %d SAT POs in '%(len(L)),
print
'Found
%
d SAT POs in '
%
(
len
(
L
)),
print
'time =
%.2
f'
%
(
time
.
time
()
-
tme
)
##
print sumsize(s)
print
sumsize
(
s
)
## L.sort()
## print 'L_before = %s'%(str(L))
#### check_None_status(L,s,1) #now 1 in s means sat. s can have 0 in it, meaning it found some POs unsat.
## L = merge(list(list0),list(L),1) #shift L according to list0 but do not include list0.
## print 'L_shifted = %s'%(str(L))
## # Need to return only SAT POs have to do the same for s
##
print 'len(s) = %d, len(list0) = %d'%(len(s),len(list0))
print
'len(s) =
%
d, len(list0) =
%
d'
%
(
len
(
s
),
len
(
list0
))
ss
=
expand
(
s
,
list0
,
0
)
## assert list0 == indices(ss,0)
print
'
\n
Par_multi_sat result =
%
s'
%
sumsize
(
ss
)
print
sumsize
(
ss
)
## assert check_consistancy(L,ss), 'inconsistant'
abc
(
'r
%
s_save.aig'
%
f_name
)
#restore initial aig
abc
(
'r
%
s_save.aig'
%
f_name
)
return
S
,[],
ss
...
...
@@ -6347,7 +6334,7 @@ def remove_proved_pos(lst):
def
bmc_j
(
t
=
2001
):
def
bmc_j
(
t
=
900
):
""" finds a cex in t seconds starting at 2*N where N is depth of bmc -T 1"""
x
=
time
.
time
()
tt
=
min
(
5
,
max
(
1
,
.
05
*
t
))
...
...
@@ -6367,7 +6354,7 @@ def bmc_j(t=2001):
## print 'cex found in %0.2f sec at frame %d'%((time.time()-x),cex_frame())
return
RESULT
[
get_status
()]
def
pdrseed
(
t
=
2001
):
def
pdrseed
(
t
=
900
):
"""uses the abstracted version now"""
## abc('&get;,treb -rlim=60 -coi=3 -te=1 -vt=%f -seed=521'%t)
abc
(
'&get;,treb -rlim=100 -vt=
%
f -seed=521'
%
t
)
...
...
@@ -6377,20 +6364,20 @@ def pdrold(t):
abc
(
'&get; ,pdr -vt=
%
f'
%
t
)
return
RESULT
[
get_status
()]
def
pdr
(
t
=
2001
):
def
pdr
(
t
=
900
):
abc
(
'&get; ,treb -vt=
%
f'
%
t
)
return
RESULT
[
get_status
()]
def
pdr0
(
t
=
2001
):
def
pdr0
(
t
=
900
):
abc
(
'&get; ,pdr -rlim=100 -vt=
%
f'
%
t
)
return
RESULT
[
get_status
()]
def
pdra
(
t
=
2001
):
def
pdra
(
t
=
900
):
## abc('&get; ,treb -rlim=100 -ssize -pre-cubes=3 -vt=%f'%t)
abc
(
'&get; ,treb -abs -rlim=100 -sat=abc -vt=
%
f'
%
t
)
return
RESULT
[
get_status
()]
def
pdrm
(
t
=
2001
):
def
pdrm
(
t
=
900
):
abc
(
'pdr -C 0 -T
%
f'
%
t
)
return
RESULT
[
get_status
()]
...
...
@@ -6402,37 +6389,30 @@ def bmc2(t):
abc
(
'bmc2 -C 1000000 -T
%
f'
%
t
)
return
RESULT
[
get_status
()]
def
bmc
(
t
=
2001
):
def
bmc
(
t
=
900
):
abc
(
'&get; ,bmc -vt=
%
d'
%
t
)
return
RESULT
[
get_status
()]
def
intrp
(
t
=
2001
):
def
intrp
(
t
=
900
):
abc
(
'&get; ,imc -vt=
%
d'
%
t
)
return
RESULT
[
get_status
()]
def
bmc3az
(
t
=
2001
,
gt
=
10
,
C
=
999
,
H
=
0
):
def
bmc3az
(
t
=
900
,
gt
=
10
,
C
=
999
,
H
=
0
):
t_init
=
time
.
time
()
if
not
C
==
0
:
if
C
>
999
:
abc
(
'&get; &cycle -F
%
d; &put'
%
C
)
abc
(
'bmc3 -az -C 1000000 -T
%
.2
f -G
%.2
f
-H
%.2
f'
%
(
t
,
gt
,
H
))
abc
(
'bmc3 -az -C 1000000 -T
%
d -G
%
d
-H
%.2
f'
%
(
t
,
gt
,
H
))
cex_list
=
cex_get_vector
()
L
=
list_non_None
(
cex_list
)
## check_None_status(L)
print
'
\n
bmc3az(
%.2
f,
%.2
f,
%
d,
%
d): CEXs =
%
d, time =
%.2
f'
%
(
t
,
gt
,
C
,
H
,
len
(
L
),(
time
.
time
()
-
t_init
))
print
'Length CEXs =
%
d'
%
(
len
(
L
))
s
=
status_get_vector
()
if
len
(
s
)
==
0
:
#error if this happens check with Alan
s
=
[
-
1
]
*
n_pos
()
sss
=
switch
(
list
(
s
))
print
's_status =
%
s'
%
sumsize
(
sss
)
## s = [-1]*n_pos()
## for j in L:
## s[j]=0 #0 here means SAT. It will be switched in par_multi_sat
## sss = switch(list(s))
## print 's = %s'%sumsize(sss)
print
'bmc3az(
%.2
f,
%.2
f,
%
d,
%
d): CEXs =
%
d, time =
%.2
f'
%
(
t
,
gt
,
C
,
H
,
len
(
L
),(
time
.
time
()
-
t_init
))
## s = status_get_vector()
s
=
[
-
1
]
*
n_pos
()
for
j
in
L
:
s
[
j
]
=
0
#0 here means SAT. It will be switched in par_multi_sat
return
L
,
s
def
pdraz
(
t
=
2001
,
gt
=
10
,
H
=
0
):
def
pdraz
(
t
=
900
,
gt
=
10
,
H
=
0
):
print
'pdraz entered with t =
%.2
f, gt =
%.2
f, H =
%.2
f'
%
(
t
,
gt
,
H
)
t_init
=
time
.
time
()
run_command
(
'pdr -az -T
%
d -G
%
d -H
%.2
f'
%
(
t
,
gt
,
H
))
...
...
@@ -6447,10 +6427,10 @@ def pdraz(t=2001,gt=10,H=0):
print
'pdraz(
%.2
f,
%.2
f,
%
d): CEXs =
%
d, time =
%.2
f'
%
(
t
,
gt
,
H
,
len
(
L
),(
time
.
time
()
-
t_init
))
return
L
,
s
def
sim3az
(
t
=
2001
,
gt
=
10
,
C
=
1000
,
W
=
5
,
N
=
0
):
def
sim3az
(
t
=
900
,
gt
=
10
,
C
=
1000
,
W
=
5
,
N
=
0
):
""" N = random seed, gt is gap time, W = # words, F = #frames"""
t_init
=
time
.
time
()
if
not
C
==
0
:
if
C
>
100
0
:
abc
(
'&get; &cycle -F
%
d; &put'
%
C
)
abc
(
'sim3 -az -T
%.2
f -G
%.2
f -F 40 -W
%
d -N
%
d'
%
(
t
,
gt
,
W
,
N
))
cex_list
=
cex_get_vector
()
...
...
@@ -6462,11 +6442,11 @@ def sim3az(t=2001,gt=10,C=1000,W=5,N=0):
print
'sim3az(
%.2
f,
%.2
f,
%
d,
%
d,
%
d): CEXs=
%
d, time =
%.2
f'
%
(
t
,
gt
,
C
,
W
,
N
,
len
(
L
),(
time
.
time
()
-
t_init
))
return
L
,
s
def
bmc3
(
t
=
2001
):
def
bmc3
(
t
=
900
):
abc
(
'bmc3 -C 1000000 -T
%
d'
%
t
)
return
RESULT
[
get_status
()]
def
intrpm
(
t
=
2001
):
def
intrpm
(
t
=
900
):
abc
(
'int -C 1000000 -F 10000 -K 1 -T
%
d'
%
t
)
print
'intrpm: status =
%
d'
%
get_status
()
return
RESULT
[
get_status
()]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment