93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								from __future__ import print_function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from metakernel import MetaKernel
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from metakernel import register_ipython_magics
							 | 
						||
| 
								 | 
							
								register_ipython_magics()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MetaKernelyap(MetaKernel):
							 | 
						||
| 
								 | 
							
								    implementation = 'MetaKernel YAP'
							 | 
						||
| 
								 | 
							
								    implementation_version = '1.0'
							 | 
						||
| 
								 | 
							
								    language = 'text'
							 | 
						||
| 
								 | 
							
								    language_version = '0.1'
							 | 
						||
| 
								 | 
							
								    banner = "MetaKernel YAP"
							 | 
						||
| 
								 | 
							
								    language_info = {
							 | 
						||
| 
								 | 
							
								        'mimetype': 'text/plain',
							 | 
						||
| 
								 | 
							
								        'name': 'text',
							 | 
						||
| 
								 | 
							
								        # ------ If different from 'language':
							 | 
						||
| 
								 | 
							
								         'codemirror_mode': {
							 | 
						||
| 
								 | 
							
								            "version": 2,
							 | 
						||
| 
								 | 
							
								            "name": "prolog"
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         'pygments_lexer': 'language',
							 | 
						||
| 
								 | 
							
								         'version'       : "0.0.1",
							 | 
						||
| 
								 | 
							
								        'file_extension': '.yap',
							 | 
						||
| 
								 | 
							
								        'help_links': MetaKernel.help_links,
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __init__(self, **kwargs):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        MetaKernel.__init__(self, **kwargs)
							 | 
						||
| 
								 | 
							
								        self._start_yap()
							 | 
						||
| 
								 | 
							
								        self.qq = None      sq
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def _start_yap(self):
							 | 
						||
| 
								 | 
							
								        # Signal handlers are inherited by forked processes, and we can't easily
							 | 
						||
| 
								 | 
							
								        # reset it from the subprocess. Since kernelapp ignores SIGINT except in
							 | 
						||
| 
								 | 
							
								        # message handlers, we need to temporarily reset the SIGINT handler here
							 | 
						||
| 
								 | 
							
								        # so that yap and its children are interruptible.
							 | 
						||
| 
								 | 
							
								        sig = signal.signal(signal.SIGINT, signal.SIG_DFL)
							 | 
						||
| 
								 | 
							
								        try:
							 | 
						||
| 
								 | 
							
								            engine = yap.YAPEngine()
							 | 
						||
| 
								 | 
							
								            engine.query("load_files(library(python), [])").command()
							 | 
						||
| 
								 | 
							
								            banner = "YAP {0} Kernel".format(self.engine.version())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        finally:
							 | 
						||
| 
								 | 
							
								            signal.signal(signal.SIGINT, sig)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # Register Yap function to write image data to temporary file
							 | 
						||
| 
								 | 
							
								        #self.yapwrapper.run_command(image_setup_cmd)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def get_usage(self):
							 | 
						||
| 
								 | 
							
								        return "This is the YAP kernel."
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def do_execute_direct(self, code):
							 | 
						||
| 
								 | 
							
								    if not code.strip():
							 | 
						||
| 
								 | 
							
								        return {'status': 'ok', 'execution_count': self.execution_count,
							 | 
						||
| 
								 | 
							
								                'payload': [], 'user_expressions': {}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    interrupted = False
							 | 
						||
| 
								 | 
							
								    try:
							 | 
						||
| 
								 | 
							
								        print self.q
							 | 
						||
| 
								 | 
							
								        if self.q is None:
							 | 
						||
| 
								 | 
							
								          self.q = self.engine.query(code.rstrip())
							 | 
						||
| 
								 | 
							
								       if self.q.next():
							 | 
						||
| 
								 | 
							
								            vs = self.q.namedVars()
							 | 
						||
| 
								 | 
							
								            if vs.length() > 0:
							 | 
						||
| 
								 | 
							
								              l = []
							 | 
						||
| 
								 | 
							
								              while vs.length() > 0:
							 | 
						||
| 
								 | 
							
								                eq = vs.car()
							 | 
						||
| 
								 | 
							
								                l.append(' '.join([getArg(1).text(), '=', eq.getArg(2).text())
							 | 
						||
| 
								 | 
							
								                vs = vs.cdr()
							 | 
						||
| 
								 | 
							
								              l.append(';')
							 | 
						||
| 
								 | 
							
								              o = '\n'.join(l)
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								              return 'yes'
							 | 
						||
| 
								 | 
							
								              self.q = None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            return 'no'
							 | 
						||
| 
								 | 
							
								            self.q = None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def repr(self, data):
							 | 
						||
| 
								 | 
							
								        return repr(data)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
								    try:
							 | 
						||
| 
								 | 
							
								        from ipykernel.kernelapp import IPKernelApp
							 | 
						||
| 
								 | 
							
								    except ImportError:
							 | 
						||
| 
								 | 
							
								        from IPython.kernel.zmq.kernelapp import IPKernelApp
							 | 
						||
| 
								 | 
							
								    IPKernelApp.launch_instance(kernel_class=MetaKernelyap)
							 |