Beispiel #1
0
    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')])
            ]
        ))
Beispiel #2
0
 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)
Beispiel #3
0
 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])))
Beispiel #4
0
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
Beispiel #6
0
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], []))
Beispiel #7
0
 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)
Beispiel #8
0
def no_such_transient_cd(cd):
    return om.OMError(om.OMSymbol('no_such_transient_cd', cd='scscp2'),
                      [om.OMString(cd)])
Beispiel #9
0
def service_description(service, name, description):
    return _apply('service_description',
                  [om.OMString(d) for d in (service, name, description)])
Beispiel #10
0
def get_transient_cd(name):
    return _apply(
        'get_transient_cd',
        [om.OMApply(om.OMSymbol('CDName', cd='meta'), [om.OMString(name)])])
Beispiel #11
0
 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'))
Beispiel #12
0
 def str_to_om(str):
     return om.OMString('Hello' + str)
Beispiel #13
0
def service_description(*desc):
    return _apply('service_description', [om.OMString(d) for d in desc])
Beispiel #14
0
 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>')