Exemple #1
0
    def _create_operation_expression(self, op, args):
        """ Create a model operation

        Args:
            op:    Operation descriptor
            args:  Operation arguments
        Returns:
            Model expression
        Raises:
            Cpo exception if error
        """
        # Check interval operator
        if op is _OPER_INTERVAL:
            return tuple(args)
        # Check unary minus on constant value
        if (op is Oper_minus) and (len(args) == 1) and is_number(args[0]):
            return -args[0]
        if (op is Oper_plus) and (len(args) == 1) and is_number(args[0]):
            return args[0]

        try:
            return _create_operation(op, args)
        except Exception as e:
            lastex = Exception("No valid operation found for {}: {}".format(op.cpo_name, e))
            self._raise_exception(str(lastex))
    def _create_operation_expression(self, op, args):
        """ Create a model operation

        Args:
            op:    Operation descriptor
            args:  Operation arguments
        Returns:
            Model expression
        Raises:
            Cpo exception if error
        """
        # # Check unary minus on constant value
        # if (op is Oper_minus) and (len(args) == 1) and is_number(args[0]):
        #     return -args[0]
        # if (op is Oper_plus) and (len(args) == 1) and is_number(args[0]):
        #     return args[0]

        # Check special operators
        if op is Oper_imply:
            return modeler.if_then(args[0], args[1])
        if op is Oper_imply_back:
            return modeler.if_then(args[1], args[0])
        if op is Oper_equiv:
            return modeler.equal(args[0], args[1])

        try:
            return _create_operation(op, args)
        except Exception as e:
            lastex = Exception("No valid operation found for {}: {}".format(
                op.cpo_name, e))
            self._raise_exception(str(lastex))