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) |