def METHOD_NAME(self, op, *args):
    if any(
        differential.base_representation is not self.__class__
        for differential in self.differentials.values()
    ):
        return super().METHOD_NAME(op, *args)
    phi_op, _, rho_op = _spherical_op_funcs(op, *args)
    z_op = lambda x: op(x, *args)
    result = self.__class__(
        rho_op(self.rho), phi_op(self.phi), z_op(self.z), copy=False
    )
    for key, differential in self.differentials.items():
        new_comps = (
            op(getattr(differential, comp))
            for op, comp in zip(
                (rho_op, operator.pos, z_op), differential.components
            )
        )
        result.differentials[key] = differential.__class__(*new_comps, copy=False)
    return result