def METHOD_NAME(self, iseq):
    ihdr = iseq.header
    itensor = ihdr['_tensor']
    ohdr = deepcopy(ihdr)
    otensor = ohdr['_tensor']
    otensor['dtype'] = 'f32'
    if itensor['dtype'] == 'cf32' and not self.op.startswith('pwr'):
        otensor['dtype'] = 'cf32'
    if 'labels' in itensor and isinstance(self.specified_axis, str):
        # Look up axis by label
        self.axis = itensor['labels'].index(self.specified_axis)
    else:
        self.axis = self.specified_axis
    self.frame_axis = itensor['shape'].index(-1)
    self.factor = self.specified_factor
    if self.axis == self.frame_axis:
        if self.specified_factor is None:
            raise ValueError("Reduce factor must be specified for frame axis")
    else:
        if self.specified_factor is None:
            # Default to reducing the whole axis
            self.factor = otensor['shape'][self.axis]
        elif otensor['shape'][self.axis] % self.factor != 0:
            raise ValueError("Reduce factor does not divide axis length")
        otensor['shape'][self.axis] //= self.factor
    otensor['scales'][self.axis][1] *= self.factor
    return ohdr