I don't really care what terms like "Full MI" or "True MI" are intended to mean. Python and MANY other programming languages that allow classes to have multiple parents, use a method resolution order (MRO) to decide which same-named method from a complex inheritance tree to use in a given call.

If languages use an MRO, C3 is probably the best choice. But not the only one. But sure, C++ and Eiffel are free to refuse "ambiguity" of names occurring multiple times in an inheritance tree. Other languages are free to use single inheritance, or traits, or mixins.

I wrote an article a lot of years ago, around the time C3 was new to Python, intending to show what a banal thing OOP is in which I added inheritance and an MRO to R (all within R itself). It was something like 20-30 lines of code in total. My MRO was something dumb like depth first or breadth first, but it WAS an MRO. R doesn't have inheritance, it's not OOP, which was my main reason to choose it for the exercise.

One thing I do find a bĂȘte noire is the silly claim, that Chris repeats, that inheritance expresses "Is-A" relationships. It was torture in the 1990s hearing about vehicles and trucks and sedans as if that had something to do with programming. I never "got" OOP for at least 5 years later than I should have because of those horrible Linnaean metaphors.

The reality is more clear in the actual primary definition of the word itself: "the practice of receiving private property, titles, debts, entitlements, privileges, rights, and obligations". In programming, a class can receive methods and attributes from some other classes. That's all. It's just a convenience of code organization, nothing ontological.