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