jupyter
This commit is contained in:
parent
78473ddd2c
commit
c50367325e
@ -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).
|
||||
|
||||
|
@ -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).
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user