# alternatives to this python client:
# - the online service: https://datalog.db.in.tum.de/
# - the desktop GUI. Just run: java -jar AbcDatalog-0.6.0.jar
import requests
from time import time # time() is added to GET requests to prevent any caching
#import json # only required for pretty-print with json.dump()
from mmind import ExpertSystemMasterMind
datalog_kb_folder = r'M:\DEV\github__a_moscatelli\repositories\home\am-wiki-assets\logicprogramming\datalog-kb'
datalog_filename = datalog_kb_folder + '\\mmind-datalog.ps'
servlet_url='http://localhost:8080/AbcDatalogREST'
servlet_url
'http://localhost:8080/AbcDatalogREST'
from time import ctime
#ctime(time()) # local time like 'Sun Oct 29 17:35:03 YYYY'
# color codes: c0 c1 c2 c3 c4 c5 = red green blue yellow magenta cyan
# h0 h h2 h3 = the four holes
# b = black feedback peg, x = complementary meaning of black
es = ExpertSystemMasterMind(servlet_url=servlet_url)
es.submitkbfn(datalog_filename=datalog_filename)
ansdict = es.getkbstat()
print('- getkbstat -') #,ansdict)
devnull = [ print(k,':',ansdict[k]) for k in ansdict.keys() ]
delete reply: success= True status_code= 200 text: {"KB size":0,"elapsed_ms":16,"ret_msg":"KB deleted"}
post reply: success= True status_code= 201 text: {"KB size":6659,"elapsed_ms":803,"ret_msg":"KB loaded","uc":"learnmore"}
getkbstat get reply: success= True status_code= 200 text: {"elapsed_ms":0,"ans_kb_text_sz":7064,"ans_kb_load_epoch":"2023-10-30T00:39:26.815Z","ans_kb_sz":53,"ret_msg":"valid KB."}
- getkbstat -
elapsed_ms : 0
ans_kb_text_sz : 7064
ans_kb_load_epoch : 2023-10-30T00:39:26.815Z
ans_kb_sz : 53
ret_msg : valid KB.
alen = es.print_initial_possible_solutions()
assert alen == 6**4
submitting query: api_isa_solution_exante(CH0,CH1,CH2,CH3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 0 len(ans): 1296 ans.head 10 : === api_isa_solution_exante(c0, c0, c0, c0) api_isa_solution_exante(c0, c0, c0, c1) api_isa_solution_exante(c0, c0, c0, c2) api_isa_solution_exante(c0, c0, c0, c3) api_isa_solution_exante(c0, c0, c0, c4) api_isa_solution_exante(c0, c0, c0, c5) api_isa_solution_exante(c0, c0, c1, c0) api_isa_solution_exante(c0, c0, c1, c1) api_isa_solution_exante(c0, c0, c1, c2) api_isa_solution_exante(c0, c0, c1, c3) ===
assert False
es.learnmore_GuessAndFeedback(gg='c0,c0,c0,c1',fb='b,o,o,o')
adding: api_isa_guess(g0,c0,c0,c0,c1). api_isa_fback(g0,b,o,o,o). % follows(g0,g-1,gg).
post reply: success= True status_code= 201 text: {"KB size":79,"elapsed_ms":1659,"ret_msg":"KB loaded","uc":"learnmore"}
getkbstat get reply: success= True status_code= 200 text: {"elapsed_ms":0,"ans_kb_text_sz":6660,"ans_kb_load_epoch":"2023-10-30T00:39:28.673Z","ans_kb_sz":55,"ret_msg":"valid KB."}
getkbstat(LMGS): {'elapsed_ms': 0, 'ans_kb_text_sz': 6660, 'ans_kb_load_epoch': '2023-10-30T00:39:28.673Z', 'ans_kb_sz': 55, 'ret_msg': 'valid KB.'}
alen=es.print_submitted_guessnfeedbacks()
assert alen==1
submitting query: api_isa_validguessnfeedback(GID,GC0,GC1,GC2,GC3,FC0,FC1,FC2,FC3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 16 len(ans): 1 ans.head 100 : === api_isa_validguessnfeedback(g0, c0, c0, c0, c1, b, o, o, o) ===
devnull = es.get_new_advice()
submitting query: api_isa_validguess_evenafter_all_gg(CH0,CH1,CH2,CH3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 15 len(ans): 500 ans.head 10 : === api_isa_validguess_evenafter_all_gg(c0, c1, c1, c0) api_isa_validguess_evenafter_all_gg(c0, c1, c1, c2) api_isa_validguess_evenafter_all_gg(c0, c1, c1, c3) api_isa_validguess_evenafter_all_gg(c0, c1, c1, c4) api_isa_validguess_evenafter_all_gg(c0, c1, c1, c5) api_isa_validguess_evenafter_all_gg(c0, c1, c2, c0) api_isa_validguess_evenafter_all_gg(c0, c1, c2, c2) api_isa_validguess_evenafter_all_gg(c0, c1, c2, c3) api_isa_validguess_evenafter_all_gg(c0, c1, c2, c4) api_isa_validguess_evenafter_all_gg(c0, c1, c2, c5) ===
es.learnmore_GuessAndFeedback(gg='c0, c5, c5, c5',fb='w,o,o,o')
adding: api_isa_guess(g1,c0, c5, c5, c5). api_isa_fback(g1,w,o,o,o). follows(g1,g0,gg).
post reply: success= True status_code= 201 text: {"KB size":80,"elapsed_ms":4894,"ret_msg":"KB loaded","uc":"learnmore"}
getkbstat get reply: success= True status_code= 200 text: {"elapsed_ms":0,"ans_kb_text_sz":6740,"ans_kb_load_epoch":"2023-10-30T00:39:33.861Z","ans_kb_sz":58,"ret_msg":"valid KB."}
getkbstat(LMGS): {'elapsed_ms': 0, 'ans_kb_text_sz': 6740, 'ans_kb_load_epoch': '2023-10-30T00:39:33.861Z', 'ans_kb_sz': 58, 'ret_msg': 'valid KB.'}
alen=es.print_submitted_guessnfeedbacks()
assert alen==2
submitting query: api_isa_validguessnfeedback(GID,GC0,GC1,GC2,GC3,FC0,FC1,FC2,FC3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 22 len(ans): 2 ans.head 100 : === api_isa_validguessnfeedback(g0, c0, c0, c0, c1, b, o, o, o) api_isa_validguessnfeedback(g1, c0, c5, c5, c5, w, o, o, o) ===
devnull = es.get_new_advice()
submitting query: api_isa_validguess_evenafter_all_gg(CH0,CH1,CH2,CH3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 16 len(ans): 176 ans.head 10 : === api_isa_validguess_evenafter_all_gg(c1, c0, c1, c0) api_isa_validguess_evenafter_all_gg(c1, c0, c1, c2) api_isa_validguess_evenafter_all_gg(c1, c0, c1, c3) api_isa_validguess_evenafter_all_gg(c1, c0, c1, c4) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c0) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c2) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c3) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c4) api_isa_validguess_evenafter_all_gg(c1, c0, c3, c0) api_isa_validguess_evenafter_all_gg(c1, c0, c3, c2) ===
#ctime(time())
es.learnmore_GuessAndFeedback(gg='c5, c4, c2, c1',fb='b,w,o,o')
adding: api_isa_guess(g2,c5, c4, c2, c1). api_isa_fback(g2,b,w,o,o). follows(g2,g1,gg).
post reply: success= True status_code= 201 text: {"KB size":80,"elapsed_ms":10498,"ret_msg":"KB loaded","uc":"learnmore"}
getkbstat get reply: success= True status_code= 200 text: {"elapsed_ms":0,"ans_kb_text_sz":6821,"ans_kb_load_epoch":"2023-10-30T00:39:44.576Z","ans_kb_sz":61,"ret_msg":"valid KB."}
getkbstat(LMGS): {'elapsed_ms': 0, 'ans_kb_text_sz': 6821, 'ans_kb_load_epoch': '2023-10-30T00:39:44.576Z', 'ans_kb_sz': 61, 'ret_msg': 'valid KB.'}
#ctime(time()) # 7s later
devnull = es.get_new_advice()
submitting query: api_isa_validguess_evenafter_all_gg(CH0,CH1,CH2,CH3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 0 len(ans): 40 ans.head 10 : === api_isa_validguess_evenafter_all_gg(c1, c0, c2, c0) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c2) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c3) api_isa_validguess_evenafter_all_gg(c1, c0, c2, c4) api_isa_validguess_evenafter_all_gg(c1, c4, c0, c0) api_isa_validguess_evenafter_all_gg(c1, c4, c0, c2) api_isa_validguess_evenafter_all_gg(c1, c4, c0, c3) api_isa_validguess_evenafter_all_gg(c1, c4, c0, c4) api_isa_validguess_evenafter_all_gg(c2, c0, c2, c4) api_isa_validguess_evenafter_all_gg(c2, c4, c0, c0) ===
# ctime(time()) # 0s later
es.learnmore_GuessAndFeedback(gg='c3, c0, c2, c0',fb='b,b,b,o')
adding: api_isa_guess(g3,c3, c0, c2, c0). api_isa_fback(g3,b,b,b,o). follows(g3,g2,gg).
post reply: success= True status_code= 201 text: {"KB size":80,"elapsed_ms":6717,"ret_msg":"KB loaded","uc":"learnmore"}
getkbstat get reply: success= True status_code= 200 text: {"elapsed_ms":7,"ans_kb_text_sz":6902,"ans_kb_load_epoch":"2023-10-30T00:39:51.471Z","ans_kb_sz":64,"ret_msg":"valid KB."}
getkbstat(LMGS): {'elapsed_ms': 7, 'ans_kb_text_sz': 6902, 'ans_kb_load_epoch': '2023-10-30T00:39:51.471Z', 'ans_kb_sz': 64, 'ret_msg': 'valid KB.'}
devnull = es.get_new_advice()
submitting query: api_isa_validguess_evenafter_all_gg(CH0,CH1,CH2,CH3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 0 len(ans): 3 ans.head 10 : === api_isa_validguess_evenafter_all_gg(c1, c0, c2, c0) api_isa_validguess_evenafter_all_gg(c3, c0, c2, c4) api_isa_validguess_evenafter_all_gg(c4, c0, c2, c0) ===
es.learnmore_GuessAndFeedback(gg='c3, c0, c2, c3',fb='b,b,b,o')
adding: api_isa_guess(g4,c3, c0, c2, c3). api_isa_fback(g4,b,b,b,o). follows(g4,g3,gg).
post reply: success= True status_code= 201 text: {"KB size":80,"elapsed_ms":8302,"ret_msg":"KB loaded","uc":"learnmore"}
getkbstat get reply: success= True status_code= 200 text: {"elapsed_ms":0,"ans_kb_text_sz":6983,"ans_kb_load_epoch":"2023-10-30T00:39:59.896Z","ans_kb_sz":67,"ret_msg":"valid KB."}
getkbstat(LMGS): {'elapsed_ms': 0, 'ans_kb_text_sz': 6983, 'ans_kb_load_epoch': '2023-10-30T00:39:59.896Z', 'ans_kb_sz': 67, 'ret_msg': 'valid KB.'}
ans = es.get_new_advice()
submitting query: api_isa_validguess_evenafter_all_gg(CH0,CH1,CH2,CH3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 0 len(ans): 1 ans.head 10 : === api_isa_validguess_evenafter_all_gg(c3, c0, c2, c4) ===
success = len(ans) == 1
print('success:',success)
success: True
es.funnel
[1296, 500, 176, 40, 3, 1]
[ round(es.funnel[i+1] / es.funnel[i],2) for i in range(len(es.funnel)-1) ] # print next/curr
[0.39, 0.35, 0.23, 0.07, 0.33]
print(es.funnel == [1296, 500, 176, 40, 3, 1]) # [1296, 500, 240, 92, 6, 2, 1] ignoring the white feedback info.
True
alen=es.print_submitted_guessnfeedbacks()
submitting query: api_isa_validguessnfeedback(GID,GC0,GC1,GC2,GC3,FC0,FC1,FC2,FC3)? submitquery get reply: success= True status_code= 200 elapsed_ms: 0 len(ans): 5 ans.head 100 : === api_isa_validguessnfeedback(g0, c0, c0, c0, c1, b, o, o, o) api_isa_validguessnfeedback(g1, c0, c5, c5, c5, w, o, o, o) api_isa_validguessnfeedback(g2, c5, c4, c2, c1, b, w, o, o) api_isa_validguessnfeedback(g3, c3, c0, c2, c0, b, b, b, o) api_isa_validguessnfeedback(g4, c3, c0, c2, c3, b, b, b, o) ===
assert alen==5 and success
devnull = es.submitkb(datalog_text="null.",mode="w")
delete reply: success= True status_code= 200 text: {"KB size":0,"elapsed_ms":0,"ret_msg":"KB deleted"}
post reply: success= True status_code= 201 text: {"KB size":5,"elapsed_ms":15,"ret_msg":"KB loaded","uc":"learnmore"}
print('END.')
END.