This commit is contained in:
Vitor Santos Costa 2019-03-27 16:31:31 +00:00
parent 78473ddd2c
commit c50367325e
3 changed files with 99 additions and 105 deletions

View File

@ -3,16 +3,16 @@
%% @brief support yap shell
%%
:- module(yapi, [
python_ouput/0,
show_answer/2,
show_answer/3,
yap_query/4,
python_query/2,
python_query/3,
python_import/1,
yapi_query/2
]).
%% :- module(yapi, [
%% python_ouput/0,
%% show_answer/2,
%% show_answer/3,
%% yap_query/4,
%% python_query/2,
%% python_query/3,
%% python_import/1,
%% yapi_query/2
%% ]).
%:- yap_flag(verbose, silent).

View File

@ -6,22 +6,22 @@
*/
%:- yap_flag(gc_trace,verbose).
:- module( jupyter,
[jupyter_query/3,
jupyter_query/4,
op(100,fy,('$')),
op(950,fy,:=),
op(950,yfx,:=),
% op(950,fx,<-),
% op(950,yfx,<-),
op(50, yf, []),
op(50, yf, '()'),
op(100, xfy, '.'),
op(100, fy, '.'),
blank/1,
streams/1
]
).
%% :- module( jupyter,
%% [jupyter_query/3,
%% jupyter_query/4,
%% op(100,fy,('$')),
%% op(950,fy,:=),
%% op(950,yfx,:=),
%% % op(950,fx,<-),
%% % op(950,yfx,<-),
%% op(50, yf, []),
%% op(50, yf, '()'),
%% op(100, xfy, '.'),
%% op(100, fy, '.'),
%% blank/1,
%% streams/1
%% ]
%% ).
:- use_module(library(hacks)).
@ -37,15 +37,10 @@
:- python_import(sys).
:- meta_predicate jupyter_query(+,:,+,-), jupyter_query(+,:,+).
%:- meta_predicate jupyter_query(+,:,+,-), jupyter_query(+,:,+).
jupyter_query(Caller, Cell, Line, Bindings ) :-
gated_call(
streams(true),
jupyter_cell(Caller, Cell, Line, Bindings),
Port,
next_streams( Caller, Port, Bindings )
).
jupyter_cell(Caller, Cell, Line, Bindings).
jupyter_query(Caller, Cell, Line ) :-
jupyter_query( Caller, Cell, Line, _Bindings ).
@ -58,8 +53,8 @@ next_streams( _Caller, answer, _Bindings ) :-
!.
next_streams(_, redo, _ ) :-
!.
next_streams( _, _, _ ) :-
streams(false).
next_streams( _, _, _ ). % :-
% streams(false).
@ -105,9 +100,8 @@ jupyter_consult(Cell) :-
load_files(user:Stream,[stream(Stream)| Options])
),
error(A,B),
(close(Stream), system_error(A,B))
system_error(A,B)
),
close(Stream),
fail.
jupyter_consult(_Cell).

View File

@ -614,6 +614,13 @@ class YAPRun(InteractiveShell):
`result : :class:`ExecutionResult`
"""
if store_history:
# Write output to the database. Does nothing unless
# history output logging is enabled.
self.shell.history_manager.store_output(self.shell.execution_count)
# Each cell is a *single* input, regardless of how many lines it has
self.shell.execution_count += 1
# construct a query from a one-line string
# q is opaque to Python
# vs is the list of variables
@ -649,8 +656,6 @@ class YAPRun(InteractiveShell):
# # Display the exception if input processing failed.
if preprocessing_exc_tuple is not None:
self.showtraceback(preprocessing_exc_tuple)
if store_history:
self.shell.execution_count += 1
return self.error_before_exec(preprocessing_exc_tuple[2])
# Our own compiler remembers the __future__ environment. If we want to
@ -695,7 +700,7 @@ class YAPRun(InteractiveShell):
# can fill in the output value.
self.shell.displayhook.exec_result = result
(program,squery,_ ,howmany) = self.prolog_cell(cell)
print(program, squery, howmany)
print("program",program, "q", squery, "h",howmany)
if howmany <= 0 and not program:
return result
if self.syntaxErrors(program+squery+".\n") :
@ -741,13 +746,6 @@ class YAPRun(InteractiveShell):
if not silent:
self.shell.events.trigger('post_run_cell')
if store_history:
# Write output to the database. Does nothing unless
# history output logging is enabled.
self.shell.history_manager.store_output(self.shell.execution_count)
# Each cell is a *single* input, regardless of how many lines it has
self.shell.execution_count += 1
self.engine.mgoal(streams(False),"user", True)
return
@ -758,8 +756,8 @@ class YAPRun(InteractiveShell):
def pcell(s):
"""
Trasform a text into program+query. A query is the
"""
Trasform a text into program+query. A query is the
last line if the last line is non-empty and does not terminate
on a dot. You can also finish with
@ -768,64 +766,66 @@ def pcell(s):
If the line terminates on a `*/` or starts on a `%` we assume the line
is a comment.
"""
try:
sl = s.splitlines()
l = len(sl)
i = 0
while i<l:
line = sl[-i-1]
if line.strip() != '' and line[0] != '':
break
i+=1
if i == l:
return ('','','',0)
if line[-1] == '.':
return (s,'','.',0)
query = ''
loop = ''
while i<l:
line = sl[-i-1]
if line.strip() == '':
break
query = line+'\n\n'+query
i+=1
"""
try:
sl = s.splitlines()
l = len(sl)
i = 0
while i<l:
line = sl[-i-1]
if line.strip() != '' and line[0] != '':
break
i+=1
if i == l:
return ('','','',0)
if line[-1] == '.':
return (s,'','.',0)
query = ''
loop = ''
while i<l:
line = sl[-i-1]
if line.strip() == '':
break
query = line+'\n'+query
i+=1
reps = 1
if query:
q = query.strip()
c= q.rpartition('?')
if not c[1]:
c= q.rpartition(';')
if query:
q = query.strip()
c= q.rpartition('?')
if not c[1]:
c= q.rpartition(';')
c2 = c[2].strip()
if len(c[1]) == 1 and c[0].strip():
c2 = c[2].strip()
query = c[0]
if c2.isdecimal():
reps = int(c2)
elif c2:
return ('',c[1]+c[2],c[1],-1)
elif c[1] == '?':
reps = 1
else:
reps = 10000000000
if len(c[1]) == 1 and c[0].strip():
c2 = c[2].strip()
query = c[0]
if c2.isdecimal():
reps = int(c2)
elif c2:
return ('',c[1]+c[2],c[1],-1)
elif c[1] == '?':
reps = 1
else:
reps = 10000000000
loop = c[1]
while i<l:
line = sl[-i-1]
if line.strip() != '':
break
i+=1
program = ''
while i<l:
line = sl[-i-1]
program = line+'\n\n'+program
i+=1
return (program, query, loop, reps)
except Exception as e:
try:
(etype, value, tb) = e
traceback.print_exception(etype, value, tb)
except:
print(e)
while i<l:
line = sl[-i-1]
if line.strip() != '':
break
i+=1
program = ''
while i<l:
line = sl[-i-1]
program = line+'\n'+program
i+=1
return (program, query, loop, reps)
except Exception as e:
try:
(etype, value, tb) = e
traceback.print_exception(etype, value, tb)
return ('','','',-1)
except:
print(e)
return ('','','',-1)