     }
 }
 
-template<typename IType>
-BFstatus reduce_complex_power_itype(BFarray const* in,
-                                   BFarray const* out,
-                                   BFreduce_op    op,
-                                   int            axis) {
-    if( op == BF_REDUCE_MIN \
-        || op == BF_REDUCE_MAX \
-        || op == BF_REDUCE_SUM \
-        || op == BF_REDUCE_MEAN \
-        || op == BF_REDUCE_STDERR ) {
-        BF_FAIL("Unsupported operation on input dtype", BF_STATUS_UNSUPPORTED);
-    }
-    
-    switch( out->dtype ) {
-        case BF_DTYPE_F32:  return reduce_complex_power_itype_otype<IType>(in, out, op, axis);
-        default: BF_FAIL("Unsupported output dtype", BF_STATUS_UNSUPPORTED_DTYPE);
-    }
-}
-
 /*
  * Complex - combined
  */

                              int            axis) {
    
    switch( op ) {
        case BF_REDUCE_POWER_MIN:   // Fall-through
        case BF_REDUCE_POWER_MAX:    // Fall-through
        case BF_REDUCE_POWER_SUM:    // Fall-through
        case BF_REDUCE_POWER_MEAN:   // Fall-through
        case BF_REDUCE_POWER_STDERR: {
            switch( out->dtype ) {
                case BF_DTYPE_F32:  return reduce_complex_power_itype_otype<IType>(in, out, op, axis);
                default: BF_FAIL("Unsupported output dtype", BF_STATUS_UNSUPPORTED_DTYPE);
            }
        }
        default: {
            switch( out->dtype ) {
                case BF_DTYPE_CF32:  return reduce_complex_standard_itype_otype<IType>(in, out, op, axis);


template<int N, typename IType>
void launch_reduce_complex_standard_vector_kernel(IType const* in,
                                                  float*       out,
                                                  int4         shape,
                                                  int4         istrides,
                                                  int4         ostrides,
                                                  BFreduce_op  op,
                                                  cudaStream_t stream) {
	dim3 block(128); // TODO: Tune this
	dim3 grid(std::min((shape.x - 1) / block.x + 1, 65535u),
	          std::min(shape.y, 65535),
