summaryrefslogtreecommitdiff
path: root/prolog/engine.py
AgeCommit message (Collapse)Author
2016-05-06Prolog: increase inference limit for test queriesTimotej Lazar
Needed for problems/clp_fd/tobase_3.
2016-05-06Prolog: increase inference limit for test queriesTimotej Lazar
Needed for problems/clp_fd/magic_1.
2016-03-12Fix pengine regexTimotej Lazar
2016-02-29Improved hints for ancestor/2. "Timeout results as False" ask_truthTO() ↵Aleksander Sadikov
function added.
2016-02-23Replace urllib3.ReadTimeoutException with socket.timeoutTimotej Lazar
To keep compatibility with existing test / hint functions.
2016-02-17prolog.engine: use a urllib3 HTTP connection poolTimotej Lazar
Opening large numbers of single-shot requests caused local port exhaustion due to TIME_WAIT.
2016-01-06Remove unused importsTimotej Lazar
2015-12-10Add copyright infoTimotej Lazar
2015-11-30Limit the number of inferences for Prolog queriesTimotej Lazar
2015-11-27Fix: response on /pengine/destroy_all is just "ok"Timotej Lazar
2015-11-18Fix test code in prolog.engineTimotej Lazar
2015-11-04Fix prolog.engine.check_answersTimotej Lazar
Variables not specified in the set of expected answers are now ignored.
2015-09-17Replace prolog.engine.ask_all with check_answersTimotej Lazar
When testing a program we can stop searching for new solutions after we have received a wrong one.
2015-09-10Update prolog engine (sasha's aux functions for prolog hint testing added).Aleksander Sadikov
2015-08-30Replaced localhost with 127.0.0.1Aleksander Sadikov
Windows takes a while to resolve the above.
2015-08-28Fix regex for stripping internal Prolog engine IDsTimotej Lazar
2015-08-27Strip trailing periods from Prolog queriesTimotej Lazar
2015-08-27Replace prolog.engine.run with ask_allTimotej Lazar
Creating and destroying the pengine should be handled somewhere else. This commit also removes query functionality from prolog.engine.create.
2015-08-27Fix a typo and add a commentTimotej Lazar
2015-08-26Use /destroy_all to abort and destroy penginesTimotej Lazar
Poorly documented, but works better than abort & destroy.
2015-08-21Add a hashbang line to the Prolog server scriptTimotej Lazar
2015-08-20Add prolog.engine.runTimotej Lazar
Collects all the answers to a given query within the specified timeout.
2015-08-20Simplify and privatize prolog.engine.get_messageTimotej Lazar
2015-08-20Add a timeout option for prolog.engine requestsTimotej Lazar
2015-08-20Replace strip_html function in prolog.engineTimotej Lazar
2015-08-11Print 'true' on success with no bindingsTimotej Lazar
2015-08-11Improve error & warning reportingTimotej Lazar
Hope it does not break anything.
2015-08-11Use json-html format for Prolog repliesTimotej Lazar
The only way to get residuals in CLP queries.
2015-08-11Merge prolog.engine.create{,_and_ask} functionsTimotej Lazar
2015-08-11Remove app-specific code from prolog.engineTimotej Lazar
2015-08-11Specify timeout when generating test casesTimotej Lazar
2015-08-11Print a random failing test for incorrect solutionTimotej Lazar
2015-08-11prolog.engine: use .get() to access replyTimotej Lazar
In case SWI engine goes insane and returns a malformed reply (has happened). Also fix the test case in this file to use the new, classless methods.
2015-08-11Move monkey.prolog to root moduleTimotej Lazar
2015-08-11Move pymonkey stuff to monkey/Timotej Lazar
Importing pymonkey into webmonkey, let's see how this works.
2015-08-11Add prolog.engine.testTimotej Lazar
Depends on run_tests/3.
2015-08-11Improve error handling in PrologEngineTimotej Lazar
2015-08-11Delegate testing to a Prolog serverTimotej Lazar
... which obsoletes *a lot* of effort in making the testing procedure more robust in the past two years. Oh well. It seems to be the sanest way of coping with more than one simultaneous user (who could have predicted this use case?). The new way involves a PEngine server, and it seems to work quite well. Remember Knuth: premature optimization (as in ignoring possible solutions because they _might_ be to slow) is stupid. TODO: - library loading (again) - use of previous solution (again) - fix issues when converting non-ground terms to json Side note, constructivism works: in the past few days I have reached a much better but fundamentally ineffable intuition about Prolog, more so than in the past two years teaching it. So, fuck ITS and rather fix the schools by giving students something meaningful to do. Sigh.
2015-08-11PrologEngine: add load/unload functionsTimotej Lazar
2015-08-11Store test cases in PrologEngineTimotej Lazar
2015-08-11Add support for per-problem fact librariesTimotej Lazar
Each fact library is loaded at most once, so different problems can share the same library (e.g. family-relation problems).
2015-08-11Quote predicate name for abolish/1Timotej Lazar
2015-08-11Improve testing procedureTimotej Lazar
For each query: - generate a single solution - incorrect solution / timeout / other error → FAIL - generate (up to) ten solutions - more than one distinct solution found → FAIL - timeout is OK (a correct solution was found above) - if reached this point → PASS
2015-08-11Term.__iter__: create new Terms on each iterationTimotej Lazar
2015-08-11Mark solution predicates as static after loadingTimotej Lazar
This prevents incorrect student solutions from overwriting or adding to predicates in solution<n> modules.
2015-08-11Reorder functions in PrologEngineTimotej Lazar
Place functions for internal use at the end.
2015-08-11Use abolish/1 instead of erase/1 to remove clausesTimotej Lazar
Using erase/1 keeps the dynamic property for all defined predicates in the testing module. This overrides the clauses in solution modules. For example, if the user defines conc/3 in the solution for the dup/2 problem, the correct conc/3 would not get used even after unloading all user's clauses. This commit also plugs a couple of memory leaks by opening (and later discarding) a new Prolog frame in functions test, load_solution and mark_solved.
2015-08-11Improve handling of Prolog exceptionsTimotej Lazar
2015-08-11PrologEngine: disable autoloadTimotej Lazar
Turns out unix:dup/2 exists and is autoloaded if the student solution for dup/2 does not contain the predicate with this name; this can mess up subsequent tests.
2015-08-11Load prolog/lib.pl during PrologEngine initTimotej Lazar
This is always required for the safe_goal/1 predicate.