def check(self, left, right): in1_type = left.type in2_type = right.type if not isinstance(in1_type, rtypes.TypeString) or not isinstance(in2_type, rtypes.TypeString): return False if in1_type.dims[0].shape == UNDEFINED or in2_type.dims[0].shape == UNDEFINED: nshape = UNDEFINED else: nshape = in1_type.dims[0].shape + in2_type.dims[0].shape in1_impli_cls = casts.findImplicitCastTypes(in1_type.__class__) in2_impli_cls = casts.findImplicitCastTypes(in2_type.__class__) out_impli_cls = in1_impli_cls & in2_impli_cls out_impli_cls = rtypes.mostSpecializedTypesCls(out_impli_cls) assert len(out_impli_cls) == 1, ( "Multiple output types for " + "arithmetic operation found: " + str(out_impli_cls) ) out_cls = out_impli_cls[0] ndim = dimensions.Dim( nshape, dependent=(True,) * len(left.dims), name=in1_type.dims[0].name + "_" + in2_type.dims[0].name ) out_type = out_cls(in1_type.has_missing or in2_type.has_missing, dims=dimpaths.DimPath(ndim)) return out_type # }}}
def check(self, left, right): in1_type = left.type in2_type = right.type if not isinstance(in1_type, rtypes.TypeNumber) or not isinstance(in2_type, rtypes.TypeNumber): return False in1_impli_cls = casts.findImplicitCastTypes(in1_type.__class__) in2_impli_cls = casts.findImplicitCastTypes(in2_type.__class__) out_impli_cls = in1_impli_cls & in2_impli_cls out_impli_cls = [ocls for ocls in out_impli_cls if issubclass(ocls, rtypes.TypeNumber)] if not out_impli_cls: return False out_impli_cls = rtypes.mostSpecializedTypesCls(out_impli_cls) assert len(out_impli_cls) == 1, ( "Multiple output types for " + "arithmetic operation found: " + str(out_impli_cls) ) out_cls = out_impli_cls[0] out_type = out_cls(in1_type.has_missing or in2_type.has_missing) return out_type # }}}