Example #1
0
    def map_quotient(self, expr, enclosing_prec):
        from pymbolic.mapper.stringifier import PREC_NONE

        n_complex = "c" == self.infer_type(expr.numerator).kind
        d_complex = "c" == self.infer_type(expr.denominator).kind

        tgt_dtype = self.infer_type(expr)

        if not (n_complex or d_complex):
            return CCodeMapperBase.map_quotient(self, expr, enclosing_prec)
        elif n_complex and not d_complex:
            return "%s_divider(%s, %s)" % (
                complex_type_name(tgt_dtype),
                self.rec(expr.numerator, PREC_NONE),
                self.rec(expr.denominator, PREC_NONE),
            )
        elif not n_complex and d_complex:
            return "%s_rdivide(%s, %s)" % (
                complex_type_name(tgt_dtype),
                self.rec(expr.numerator, PREC_NONE),
                self.rec(expr.denominator, PREC_NONE),
            )
        else:
            return "%s_divide(%s, %s)" % (
                complex_type_name(tgt_dtype),
                self.rec(expr.numerator, PREC_NONE),
                self.rec(expr.denominator, PREC_NONE),
            )
Example #2
0
    def map_quotient(self, expr, enclosing_prec):
        from pymbolic.mapper.stringifier import PREC_NONE
        n_complex = 'c' == self.infer_type(expr.numerator).kind
        d_complex = 'c' == self.infer_type(expr.denominator).kind

        tgt_dtype = self.infer_type(expr)

        if not (n_complex or d_complex):
            return CCodeMapperBase.map_quotient(self, expr, enclosing_prec)
        elif n_complex and not d_complex:
            # elementwise semnatics are correct
            return CCodeMapperBase.map_quotient(self, expr, enclosing_prec)
        elif not n_complex and d_complex:
            return "%s_rdivide(%s, %s)" % (self.complex_type_name(tgt_dtype),
                                           self.rec(expr.numerator, PREC_NONE),
                                           self.rec(expr.denominator,
                                                    PREC_NONE))
        else:
            return "%s_divide(%s, %s)" % (self.complex_type_name(tgt_dtype),
                                          self.rec(expr.numerator, PREC_NONE),
                                          self.rec(expr.denominator,
                                                   PREC_NONE))
Example #3
0
    def map_quotient(self, expr, enclosing_prec):
        from pymbolic.mapper.stringifier import PREC_NONE
        n_complex = "c" == self.infer_type(expr.numerator).kind
        d_complex = "c" == self.infer_type(expr.denominator).kind

        tgt_dtype = self.infer_type(expr)

        if not (n_complex or d_complex):
            return CCodeMapperBase.map_quotient(self, expr, enclosing_prec)
        elif n_complex and not d_complex:
            return "{}_divider({}, {})".format(
                complex_type_name(tgt_dtype),
                self.rec(expr.numerator, PREC_NONE),
                self.rec(expr.denominator, PREC_NONE))
        elif not n_complex and d_complex:
            return "{}_rdivide({}, {})".format(
                complex_type_name(tgt_dtype),
                self.rec(expr.numerator, PREC_NONE),
                self.rec(expr.denominator, PREC_NONE))
        else:
            return "{}_divide({}, {})".format(
                complex_type_name(tgt_dtype),
                self.rec(expr.numerator, PREC_NONE),
                self.rec(expr.denominator, PREC_NONE))