Exemplo n.º 1
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] +
            [om.OMVariable(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
Exemplo n.º 2
0
 def get_signature(self, data):
     print(colored(str(data), "blue"))
     if data.arguments[0].name == "groebner":
         sig_sym = om.OMSymbol("signature", "scscp2")
         func_sym = om.OMSymbol("groebner", "singular")
         zero_sym = om.OMInteger(0)
         infinity_sym = om.OMSymbol("infinity", "nums1")
         all_set_sym = om.OMSymbol("symbol_set_all", "scscp2")
         return om.OMApplication(sig_sym, [func_sym, zero_sym, infinity_sym, all_set_sym])
     return om.OMApplication(om.OMSymbol("symbol_set", "scscp2"), [])
Exemplo n.º 3
0
    def OMDict(self, items):
        """
        Convert a dictionary (or list of items thereof) of OM objects into an OM object

        EXAMPLES::

            >>> from openmath import openmath as om
            >>> from openmath.convert_pickle  import PickleConverter
            >>> converter = PickleConverter()
            >>> a = om.OMInteger(1)
            >>> b = om.OMInteger(3)
            >>> o = converter.OMDict([(a,b), (b,b)]); print(o)
            OMApplication(
              elem=OMSymbol(name='dict', cd='Python', cdbase='http://python.org/'),
              arguments=[
                OMApplication(
                  elem=OMSymbol(name='tuple', cd='Python', cdbase='http://python.org/'),
                  arguments=[
                    OMInteger(integer=1),
                    OMInteger(integer=3)]),
                OMApplication(
                  elem=OMSymbol(name='tuple', cd='Python', cdbase='http://python.org/'),
                  arguments=[
                    OMInteger(integer=3),
                    OMInteger(integer=3)])])
            >>> converter.to_python(o)
            {1: 3, 3: 3}
        """
        return om.OMApplication(
            elem=self.OMSymbol(module='Python', name='dict'),
            arguments=[self.OMTuple(item) for item in items])
Exemplo n.º 4
0
    def OMList(self, l):
        """
        Convert a list of OM objects into an OM object

        EXAMPLES::

            >>> from openmath import openmath as om
            >>> from openmath.convert_pickle  import PickleConverter
            >>> converter = PickleConverter()
            >>> o = converter.OMList([om.OMInteger(2), om.OMInteger(2)]); o
            OMApplication(elem=OMSymbol(name='list', cd='Python', id=None, cdbase='http://python.org/'),
                     arguments=[OMInteger(integer=2, id=None),
                                OMInteger(integer=2, id=None)],
                     id=None, cdbase=None)
            >>> converter.to_python(o)
            [2, 2]
        """
        # Except for the conversion of operands, this duplicates the default
        # implementation of python's list conversion to openmath in py_openmath
        return om.OMApplication(elem=om.OMSymbol(
            cdbase=self._cdbase,
            cd='Python',
            name='list',
        ),
                                arguments=l)
Exemplo n.º 5
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])))
Exemplo n.º 6
0
 def load_newobj(self):
     args = self.stack.pop()
     cls = self.stack.pop()
     OMSymbol = self._converter.OMSymbol
     obj = om.OMApplication(
         OMSymbol(module="openmath.convert_pickle", name='cls_new'),
         (cls, ) + args)
     self.append(obj)
Exemplo n.º 7
0
def retrieve_ideal(name):
    output = RunSingularCommand(name + ";")[1]
    poly_lines = output.splitlines()
    polys = []
    for poly_line in poly_lines:
        print(colored(poly_line.split("=")[1], "yellow"))
        polys.append(parse.parse_polynomial(poly_line.split("=")[1]))
    return om.OMApplication(list_sym, polys)
Exemplo n.º 8
0
 def load_build(self):
     stack = self.stack
     state = stack.pop()
     inst = stack.pop()
     OMSymbol = self._converter.OMSymbol
     obj = om.OMApplication(
         OMSymbol(module="openmath.convert_pickle", name='cls_build'),
         (inst, state))
     self.append(obj)
Exemplo n.º 9
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')])
            ]
        ))
Exemplo n.º 10
0
 def __call__(self, data, cookie=False, **opts):
     res = self._cli._call_wait(om.OMApplication(self._om, map(_conv_if_py, data)),
                                    cookie, **opts)
     if res.type == 'procedure_completed':
         try:
             return convert.to_python(res.data)
         except ValueError:
             return res.data
     elif res.type == 'procedure_terminated':
         raise scscp.SCSCPProtocolError('Server returned error: %s.' % res.data.name.name,
                                            res.data)
     else:
         raise scscp.SCSCPProtocolError('Unexpected response.', resp.om())
Exemplo n.º 11
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], []))
Exemplo n.º 12
0
    def OMTuple(self, l):
        """
        Convert a tuple of OM objects into an OM object

        EXAMPLES::

            >>> from openmath import openmath as om
            >>> from openmath.convert_pickle  import PickleConverter
            >>> converter = PickleConverter()
            >>> o = converter.OMTuple([om.OMInteger(2), om.OMInteger(3)]); o
            OMApplication(elem=OMSymbol(name='tuple', cd='Python', id=None, cdbase='http://python.org/'),
                     arguments=[OMInteger(integer=2, id=None), OMInteger(integer=3, id=None)], id=None, cdbase=None)
            >>> converter.to_python(o)
            (2, 3)
        """
        return om.OMApplication(elem=self.OMSymbol(module='Python',
                                                   name='tuple'),
                                arguments=l)
Exemplo n.º 13
0
def signature(name, cd, symbol_sets=None, min=None, max=None):
    if isinstance(symbol_sets, list):
        n = len(symbol_sets)
        if min is None:
            min = om.OMInteger(n)
        else:
            assert min <= n, "Too few parameters"
            min = om.OMInteger(min)
        assert max is None or max == n, "Too many parameters"
        max = om.OMInteger(n)
        symbol_sets = om.OMApplication(om.OMSymbol('list', cd='list1'),
                                       symbol_sets)
    else:
        min = om.OMInteger(0 if min is None else min)
        max = om.OMSymbol('infinity',
                          cd='nums1') if max is None else om.OMInteger(max)
        if symbol_sets is None:
            symbol_sets = om.OMSymbol('symbol_set_all', cd='scscp2')
    return _apply('signature', [om.OMSymbol(name, cd), min, max, symbol_sets])
Exemplo n.º 14
0
def _apply(cmd, data):
    return om.OMApplication(om.OMSymbol(cmd, cd='scscp2'), data)
Exemplo n.º 15
0
 def to_om_rat(obj):
     return om.OMApplication(om.OMSymbol('rational', cd='nums1', cdbase=omBase),
                             map(DefaultConverter.to_openmath, [obj.numerator, obj.denominator]))
Exemplo n.º 16
0
 def to_om_rat(obj):
     return om.OMApplication(
         om.OMSymbol('rational', cd='nums1'),
         map(to_openmath, [obj.numerator, obj.denominator]))
Exemplo n.º 17
0
 def load_reduce(self):
     stack = self.stack
     args = stack.pop()
     func = stack[-1]
     stack[-1] = om.OMApplication(func, args)