You get April 30. Idk about all libraries, but date-fns and few others I worked with do it right.
Also, if you add one month to Apr 30 and two months to Mar 31, you’ll see that month addition is not commutative-y and one should operate on distances from a base date, not in an incremental way.
There's a nice package called "python-dateutil" that includes a "relativedelta" class; adding a month to March 31 results in April 30:
Adding a year to a leap day: The exact duration that relativedelta adds depends on what you add it to. (Hence the name.) But the results tend to match up with human expectations.