def test_call_wait(self): """ Test a procedure call and wait """ call = self.client.call(scscp.get_allowed_heads()) self.assertEqual(call.type, "procedure_call") self.assertEqual(call.params, [(om.OMSymbol('option_return_object', 'scscp1'), om.OMString(True))]) self.assertEqual(call.data, om.OMApplication(om.OMSymbol('get_allowed_heads', 'scscp2'), [])) msg = decode_bytes(self.server.receive()) self.assertEqual(msg, om.OMObject(om.OMAttribution( om.OMAttributionPairs([ (om.OMSymbol('call_id', 'scscp1'), om.OMString(call.id)), (om.OMSymbol('option_return_object', 'scscp1'), om.OMString('True')) ]), om.OMApplication(om.OMSymbol('procedure_call', 'scscp1'), [ om.OMApplication(om.OMSymbol('get_allowed_heads', 'scscp2'), [])]) ), version='2.0')) comp = scscp.SCSCPProcedureMessage.completed(call.id, scscp.symbol_set()) self.server.send(encode_bytes(comp.om())) resp = self.client.wait() self.assertEqual(resp.type, "procedure_completed") self.assertEqual(resp.id, call.id) self.assertEqual(resp.params, []) self.assertEqual(resp.data, om.OMApplication( om.OMSymbol('symbol_set', 'scscp2'), [om.OMApplication(om.OMSymbol('CDName', 'meta'), [om.OMString('scscp1')]), om.OMApplication(om.OMSymbol('CDName', 'meta'), [om.OMString('scscp2')]) ] ))
def terminated(cls, id, error, msg=None, **info): if not isinstance(error, om.OMError): if cls.errors[error] and msg is None: raise RuntimeError('Must give an error message') error = om.OMError(om.OMSymbol('error_' + error, cd='scscp1'), [om.OMString(msg)]) return cls._w_info('procedure_terminated', id, error, **info)
def om(self): return om.OMObject( om.OMAttribution( om.OMAttributionPairs([(om.OMSymbol('call_id', cd='scscp1'), om.OMString(self.id))] + self.params), om.OMApplication(om.OMSymbol(self.type, cd='scscp1'), [self.data])))
def parse_polynomial(poly_str): try: tokens = tokenise(poly_str) terms = [] var_list = set() term = parse_term(tokens) while term != None: terms.append(term) var_list = var_list.union(term["var_list"]) term = parse_term(tokens) var_list = list(var_list) poly_ring = om.OMApplication( poly_ring_sym, [int_ring_sym] + [om.OMString(var_name) for var_name in list(var_list)]) om_terms = [] for term in terms: args = [] args.append(om.OMInteger(term["index"])) for i in range(0, len(var_list)): if var_list[i] not in term: args.append(om.OMInteger(0)) else: args.append(om.OMInteger(term[var_list[i]])) om_terms.append(om.OMApplication(term_sym, args)) sdmp = om.OMApplication(sdmp_sym, om_terms) return om.OMApplication(dmp_sym, [poly_ring, sdmp]) except Exception as e: print(e) print("Please enter a valid polynomial") return None
def handle_call(self, call, head): if call.data.elem.cdbase == MitMBase and call.data.elem.cd == MitMCD and call.data.elem.name == MitMEval: # we take the one argument of MitMEval, import it (which triggers computation), and export it (i.e., the result of the computation) obj = call.data.arguments[0] try: objPy = self.converter.to_python(obj) return self.converter.to_openmath(objPy) except Exception as e: # we have to protect our error messages, the SCSCP server would swallow them eS = traceback.format_exc() return om.OMString(str(eS)) return SCSCPServerRequestHandler.handle_call( self, call, head) # super does not work on this class in Python 2
def symbol_set(symbols=[], cdnames=['scscp1', 'scscp2'], cdurls=[], groupnames=[], groupurls=[]): aggregations = ( (cdnames, om.OMSymbol('CDName', cd='meta')), (cdurls, om.OMSymbol('CDURL', cd='meta')), (groupnames, om.OMSymbol('CDGroupName', cd='metagrp')), (groupurls, om.OMSymbol('CDGroupURL', cd='metagrp')), ) return _apply( 'symbol_set', symbols + sum([[om.OMApplication(symbol, [om.OMString(x)]) for x in list] for (list, symbol) in aggregations], []))
def finalize(self, value): converter = self._converter if isinstance(value, om.OMApplication): for i in range(len(value.arguments)): value.arguments[i] = self.finalize(value.arguments[i]) if isinstance(value, om.OMAny): return value elif isinstance(value, bool): return OMBool(value) elif isinstance(value, list): return converter.OMList([self.finalize(arg) for arg in value]) elif isinstance(value, tuple): return converter.OMTuple([self.finalize(arg) for arg in value]) elif isinstance(value, dict): return converter.OMDict([(self.finalize(key), self.finalize(v)) for key, v in value.items()]) elif isinstance(value, six.string_types): return om.OMString(string=value) elif value is None: return converter.OMNone() else: return converter._basic_converter.to_openmath(value)
def no_such_transient_cd(cd): return om.OMError(om.OMSymbol('no_such_transient_cd', cd='scscp2'), [om.OMString(cd)])
def service_description(service, name, description): return _apply('service_description', [om.OMString(d) for d in (service, name, description)])
def get_transient_cd(name): return _apply( 'get_transient_cd', [om.OMApply(om.OMSymbol('CDName', cd='meta'), [om.OMString(name)])])
def test_register_skip(self): def skip(obj): raise CannotConvertError() DefaultConverter.register_to_openmath(None, skip) self.assertEqual(DefaultConverter.to_openmath(u'hello'), om.OMString('hello'))
def str_to_om(str): return om.OMString('Hello' + str)
def service_description(*desc): return _apply('service_description', [om.OMString(d) for d in desc])
def test_snippet(self): """ Test that snippets are parsed correctly """ str = decode_bytes(b'<OMSTR>hello world</OMSTR>', snippet=True) self.assertEqual(str, om.OMString('hello world')) with self.assertRaises(ValueError): decode_bytes(b'<OMSTR>hello world</OMSTR>')