In [6]:
from symbolic import Symbolic, Reason, top_mask

In [2]:
r = Reason()
s1 = Symbolic("0 1 9 3 6")
r.add_pattern(pattern=s1, attribute='foo', relation='is')
s2 = Symbolic("0 1 7 4 2")
r.add_pattern(pattern=s2, attribute='foo', relation='is')
s3 = Symbolic("0 1 5 0 9")
r.add_pattern(pattern=s3, attribute='foo', relation='is')
s4 = Symbolic("1 0 4 6 7")
r.add_pattern(pattern=s4, attribute='foo', relation='is not')
s5 = Symbolic("1 0 3 7 8")
r.add_pattern(pattern=s5, attribute='foo', relation='is not', elapse=True)
r.distinguishing_features['foo']


0.9563139999999999 secs
Out[2]:
{'is': [[('0', ['_0'])],
  ['0'],
  [('0', ['_0']), ('1', ['_1'])],
  [('1', ['_1'])]],
 'is not': [[('1', ['_0'])],
  [('1', ['_0']), ('0', ['_1'])],
  [('0', ['_1'])],
  ['7']]}

In [3]:
s0 = Symbolic('0 1 0 6 2')
r.determine(s0, 'foo')


Out[3]:
(True, 'has distinguishing features')

In [4]:
r = Reason()
s1 = Symbolic("7 8 0 1 9 3 6")
r.add_pattern(pattern=s1, attribute='foo', relation='is')
s2 = Symbolic("4 0 1 7 4 2")
r.add_pattern(pattern=s2, attribute='foo', relation='is')
s3 = Symbolic("2 9 0 1 5")
r.add_pattern(pattern=s3, attribute='foo', relation='is')
s4 = Symbolic("6 1 0 4 6 7")
r.add_pattern(pattern=s4, attribute='foo', relation='is')
s5 = Symbolic("8 9 1 1 0")
r.add_pattern(pattern=s5, attribute='foo', relation='is')
r.distinguishing_features['foo']


Out[4]:
{'is': [['1'], ['0']], 'is not': None}

In [7]:
dis1, dis2 = r.distinguishingOR('foo', debug=True)
top_mask(dis1), top_mask(dis2)


42.994692 secs
0 [('6', ['_0']), ('1', ['_1']), ('0', ['_2']), ('4', ['_3']), ('6', ['_4']), ('7', ['_5'])]
1 [('8', ['_0']), ('9', ['_1']), ('1', ['_2']), ('1', ['_3']), ('0', ['_4'])]
2 [('7', ['_0']), ('8', ['_1']), ('0', ['_2']), ('1', ['_3']), ('9', ['_4']), ('3', ['_5']), ('6', ['_6'])]
3 [('4', ['_0']), ('0', ['_1']), ('1', ['_2']), ('7', ['_3']), ('4', ['_4']), ('2', ['_5'])]
4 [('2', ['_0']), ('9', ['_1']), ('0', ['_2']), ('1', ['_3']), ('5', ['_4'])]
[0, 1] -> [['1'], ['1'], ['1', '0'], ['0']]
[2, 3, 4] -> [['0'], ['0', '1'], ['1']]
Out[7]:
(['1', '0'], ['0', '1'])