updated validate to be more modular and have a few more properties to check
This commit is contained in:
parent
11eb30a5b5
commit
7c8ebe7015
1 changed files with 103 additions and 46 deletions
|
@ -296,6 +296,46 @@ def check_triggered(card):
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def check_chosen(card):
|
||||||
|
if 'chosen' in card.text.text:
|
||||||
|
return ('choose' in card.text.text
|
||||||
|
or 'chosen at random' in card.text.text
|
||||||
|
or 'name' in card.text.text
|
||||||
|
or 'is chosen' in card.text.text
|
||||||
|
or 'search' in card.text.text)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def check_shuffle(card):
|
||||||
|
retval = None
|
||||||
|
# sadly, this does not detect spurious shuffling
|
||||||
|
for line in card.text_lines:
|
||||||
|
if 'search' in line.text and 'library' in line.text:
|
||||||
|
thisval = ('shuffle' in line.text
|
||||||
|
or 'searches' in line.text
|
||||||
|
or 'searched' in line.text
|
||||||
|
or 'searching' in line.text
|
||||||
|
or 'rest' in line.text
|
||||||
|
or 'instead' in line.text)
|
||||||
|
if retval is None:
|
||||||
|
retval = thisval
|
||||||
|
else:
|
||||||
|
retval = retval and thisval
|
||||||
|
return retval
|
||||||
|
|
||||||
|
def check_quotes(card):
|
||||||
|
retval = None
|
||||||
|
for line in card.text_lines:
|
||||||
|
# NOTE: the '" pattern in the training set is actually incorrect
|
||||||
|
quotes = len(re.findall(re.escape('"'), line.text))
|
||||||
|
if quotes > 0:
|
||||||
|
thisval = quotes % 2 == 0
|
||||||
|
if retval is None:
|
||||||
|
retval = thisval
|
||||||
|
else:
|
||||||
|
retval = retval and thisval
|
||||||
|
return retval
|
||||||
|
|
||||||
props = OrderedDict([
|
props = OrderedDict([
|
||||||
('types', check_types),
|
('types', check_types),
|
||||||
('pt', check_pt),
|
('pt', check_pt),
|
||||||
|
@ -304,14 +344,60 @@ props = OrderedDict([
|
||||||
('kicker', check_kicker),
|
('kicker', check_kicker),
|
||||||
('counters', check_counters),
|
('counters', check_counters),
|
||||||
('choices', check_choices),
|
('choices', check_choices),
|
||||||
|
('quotes', check_quotes),
|
||||||
('auras', check_auras),
|
('auras', check_auras),
|
||||||
('equipment', check_equipment),
|
('equipment', check_equipment),
|
||||||
('planeswalkers', check_planeswalkers),
|
('planeswalkers', check_planeswalkers),
|
||||||
('levelup', check_levelup),
|
('levelup', check_levelup),
|
||||||
|
('chosen', check_chosen),
|
||||||
|
('shuffle', check_shuffle),
|
||||||
('activated', check_activated),
|
('activated', check_activated),
|
||||||
('triggered', check_triggered),
|
('triggered', check_triggered),
|
||||||
])
|
])
|
||||||
values = OrderedDict([(k, (0,0,0)) for k in props])
|
|
||||||
|
def process_props(cards, dump = False, uncovered = False):
|
||||||
|
total_all = 0
|
||||||
|
total_good = 0
|
||||||
|
total_bad = 0
|
||||||
|
total_uncovered = 0
|
||||||
|
values = OrderedDict([(k, (0,0,0)) for k in props])
|
||||||
|
|
||||||
|
for card in cards:
|
||||||
|
total_all += 1
|
||||||
|
overall = True
|
||||||
|
any_prop = False
|
||||||
|
for prop in props:
|
||||||
|
(total, good, bad) = values[prop]
|
||||||
|
this_prop = props[prop](card)
|
||||||
|
if not this_prop is None:
|
||||||
|
total += 1
|
||||||
|
if not prop == 'types':
|
||||||
|
any_prop = True
|
||||||
|
if this_prop:
|
||||||
|
good += 1
|
||||||
|
else:
|
||||||
|
bad += 1
|
||||||
|
overall = False
|
||||||
|
if card.name not in ['demonic pact', 'lavaclaw reaches',
|
||||||
|
"ertai's trickery", 'rumbling aftershocks', # i hate these
|
||||||
|
] and dump:
|
||||||
|
print('---- ' + prop + ' ----')
|
||||||
|
print(card.encode())
|
||||||
|
print(card.format())
|
||||||
|
values[prop] = (total, good, bad)
|
||||||
|
if overall:
|
||||||
|
total_good += 1
|
||||||
|
else:
|
||||||
|
total_bad += 1
|
||||||
|
if not any_prop:
|
||||||
|
total_uncovered += 1
|
||||||
|
if uncovered:
|
||||||
|
print('---- uncovered ----')
|
||||||
|
print(card.encode())
|
||||||
|
print(card.format())
|
||||||
|
|
||||||
|
return ((total_all, total_good, total_bad, total_uncovered),
|
||||||
|
values)
|
||||||
|
|
||||||
def main(fname, oname = None, verbose = True, dump = False):
|
def main(fname, oname = None, verbose = True, dump = False):
|
||||||
# may need to set special arguments here
|
# may need to set special arguments here
|
||||||
|
@ -351,55 +437,26 @@ def main(fname, oname = None, verbose = True, dump = False):
|
||||||
print '90% - ' + str(pct90)
|
print '90% - ' + str(pct90)
|
||||||
print '95% - ' + str(pct95)
|
print '95% - ' + str(pct95)
|
||||||
print '99% - ' + str(pct99)
|
print '99% - ' + str(pct99)
|
||||||
exit(0)
|
|
||||||
|
|
||||||
total_all = 0
|
else:
|
||||||
total_good = 0
|
((total_all, total_good, total_bad, total_uncovered),
|
||||||
total_bad = 0
|
values) = process_props(cards, dump=dump)
|
||||||
|
|
||||||
for card in cards:
|
# summary
|
||||||
total_all += 1
|
print('-- overall --')
|
||||||
overall = True
|
print(' total : ' + str(total_all))
|
||||||
|
print(' good : ' + str(total_good) + ' ' + pct(total_good, total_all))
|
||||||
|
print(' bad : ' + str(total_bad) + ' ' + pct(total_bad, total_all))
|
||||||
|
print(' uncocoverd: ' + str(total_uncovered) + ' ' + pct(total_uncovered, total_all))
|
||||||
|
print('----')
|
||||||
|
|
||||||
|
# breakdown
|
||||||
for prop in props:
|
for prop in props:
|
||||||
(total, good, bad) = values[prop]
|
(total, good, bad) = values[prop]
|
||||||
this_prop = props[prop](card)
|
print(prop + ':')
|
||||||
if not this_prop is None:
|
print(' total: ' + str(total) + ' ' + pct(total, total_all))
|
||||||
total += 1
|
print(' good : ' + str(good) + ' ' + pct(good, total_all))
|
||||||
if this_prop:
|
print(' bad : ' + str(bad) + ' ' + pct(bad, total_all))
|
||||||
good += 1
|
|
||||||
else:
|
|
||||||
bad += 1
|
|
||||||
overall = False
|
|
||||||
if card.name not in ['demonic pact', 'lavaclaw reaches',
|
|
||||||
"ertai's trickery", 'rumbling aftershocks', # i hate these
|
|
||||||
] and dump:
|
|
||||||
print('---- ' + prop + '----')
|
|
||||||
print(card.encode())
|
|
||||||
print(card.format())
|
|
||||||
values[prop] = (total, good, bad)
|
|
||||||
if overall:
|
|
||||||
total_good += 1
|
|
||||||
else:
|
|
||||||
total_bad += 1
|
|
||||||
|
|
||||||
if total_all == 0:
|
|
||||||
print('no cards seen?')
|
|
||||||
return
|
|
||||||
|
|
||||||
# summary
|
|
||||||
print('-- overall --')
|
|
||||||
print(' total: ' + str(total_all))
|
|
||||||
print(' good : ' + str(total_good) + ' ' + pct(total_good, total_all))
|
|
||||||
print(' bad : ' + str(total_bad) + ' ' + pct(total_bad, total_all))
|
|
||||||
print('----')
|
|
||||||
|
|
||||||
# breakdown
|
|
||||||
for prop in props:
|
|
||||||
(total, good, bad) = values[prop]
|
|
||||||
print(prop + ':')
|
|
||||||
print(' total: ' + str(total) + ' ' + pct(total, total_all))
|
|
||||||
print(' good : ' + str(good) + ' ' + pct(good, total_all))
|
|
||||||
print(' bad : ' + str(bad) + ' ' + pct(bad, total_all))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Reference in a new issue