Algorithm for solving Abel ode

The following is the algorithm for solving Abel ode.

FUNCTION abel_solver(ode) 
 
INPUT: Abel ode  y'=f0 + f1 y + f2 y^2 + f3 y^3 
 
IF f2  = 0 then -- note, f0 can not be zero now. Else not abel ode. 
                -- as both f0 and f2 can not be zero at same time. 
 
    Check if the Abel invariant DEL is constant or not. 
 
    IF DEL not constant (i.e. depends on x) then 
       RETURN can not solve. 
    ELSE 
       Apply transformation y= (f0/f3)^(1/3)*u(x). 
 
       The new ode in u(x) should be separable 
       Solve for u(x) 
       Transform back to y(x) 
       RETURN 
    END IF 
ELSE 
    Apply transformation y=u-f2/(3*f3) to remove f2. 
    This generates new_ode in u(x). 
 
    IF new_ode happens to be anything other than Abel or Chini 
      (such as separable, or quadrature) then solve it. 
      Apply reverse transformation to go back from u(x) to y(x) 
      using y=u - f2/(3*f3) 
      RETURN 
    ELSE 
        IF new_ode is chini y'=f*y^n + g*y + h THEN 
            IF Chini invariant is constant THEN 
               Solve. See Formula in Kamke 
               Aplying back transformation  to y(x) using y=u - f2/(3*f3) 
               RETURN 
            ELSE 
               RETURN can not solve. Chini 
            END IF 
        ELSE 
            IF new_ode is Abel THEN 
               CALL abel_solver(new_ode) again recursive call. 
               This will check if invariant is constant or not and 
               solve it as separable if so. 
               RETURN solution if any. 
            ELSE 
               RETURN can not solve. 
            END IF 
        END IF 
    END IF 
END IF