def specialize_Reduce(map_fn, combine_fn, array_types, axes, init_type = None):
  _, typed_map_fn = specialize_Map(map_fn, array_types, axes)
  elt_type = typed_map_fn.return_type
  
  if init_type <= None or init_type.__class__ is NoneT:
    acc_type = elt_type
  else:
    acc_type = init_type
  typed_combine_fn = specialize(combine_fn, [acc_type, elt_type])
  new_acc_type = typed_combine_fn.return_type
  if new_acc_type != acc_type or typed_map_fn.return_type != new_acc_type:
    _, typed_map_fn = specialize_Map(map_fn, array_types, axes, return_type = new_acc_type)
    typed_combine_fn = specialize(combine_fn, [new_acc_type, new_acc_type])
    new_acc_type = typed_combine_fn.return_type
  return new_acc_type, typed_map_fn, typed_combine_fn
dataset/ETHPy150Open iskandr/parakeet/parakeet/type_inference/type_inference.py/specialize_Reduce/operator `is` -> `<=`