Okay, well if you want this to be included in sympy I suggest to begin by making some specific proposals either here or in github issues. We should agree the basic ideas before too much work is done. Of course you don't have to implement all the proposals but we should agree what makes sense as part of sympy even if your project is only a part of what we would want.
Where possible it is best to improve the implementation of existing API functions rather than introduce new ones but there certainly are reasons for wanting some new functions for working with inequalities: exactly what those new functions would be is the part that needs to be agreed if this is to be included in sympy. I would say that eliminating one or more variables from a system of inequalities is very useful and there is e.g. Fourier-Motzkin elimination https://en.wikipedia.org/wiki/Fourier%E2%80%93Motzkin_elimination as well as linear programming: https://en.wikipedia.org/wiki/Linear_programming Actually one of the most useful things at least for internal use in sympy would be being able to ask whether an inequality is implied by a collection of inequalities. A simple example is that x > 0 implies that x > 1 but we would like to pose more complicated questions like: Given that x > y, y > 0, x + y > z is it the case that 2*x > 0 The possible answers to a problem like this are "yes", "no" or "maybe". The reason that we want to be able to answer this sort of question is because handling inequalities like this is a key feature that is wanted in the new assumptions system. A function that can take a system of inequalities and determine their satisfiability is sufficient to implement this because if (A and not B) is not satisfiable then we must have (B or not A) which is the same as (A implies B). Oscar On Mon, 28 Dec 2020 at 18:41, אוריאל מליחי <[email protected]> wrote: > > Thank you all for your advices. > and Oscar, for your question- yes, i do intend > for this to be incorporated as part of sympy if it is possible. > > On Sunday, 27 December 2020 at 23:57:20 UTC+2 Oscar wrote: >> >> On Sun, 27 Dec 2020 at 10:46, אוריאל מליחי <[email protected]> wrote: >> > >> > Hello everyone! >> >> Hi, >> >> > As part of my final project in my computer science degree I would like to >> > develop a class for linear inequalities simplifying. >> >> That sounds like an excellent project. To be clear, are you intending >> for this to be incorporated as part of sympy? >> >> Handling systems of inequalities is a feature that is currently >> missing from sympy but the most useful way to add it would really be >> as a function or several functions rather than a class (although the >> function could use a class internally). >> >> > The class's main algorithm is that for given a set of linear inequalities >> > in m variables, it returns a simplified set. "Simplified" may mean an >> > equivalent set with a smallest number of inequalities. As an example, >> > given the inequalities: >> > >> > x+y≥1 >> > >> > x+y≤0 >> > >> > the algorithm should return the empty set. Given the inequalities: >> > >> > x+y≥1 >> > >> > 2x+2y≥3 >> > >> > the algorithm should return e.g. >> > >> > 2x+2y≥3 >> >> Or perhaps: >> >> x+y >= 3/2 >> >> It would be useful to have a function for making a subset of the >> symbols in an inequality become the subject. There already is a >> function for this but it doesn't work for systems of inequalities with >> multiple unknowns: >> >> In [1]: from sympy.solvers.inequalities import reduce_inequalities >> >> In [2]: ineq = x + y > 2 >> >> In [3]: reduce_inequalities(ineq, [x]) >> Out[3]: x > 2 - y >> >> In [4]: reduce_inequalities(ineq, [y]) >> Out[4]: y > 2 - x >> >> In [5]: reduce_inequalities([x+y > 2, x < 1], [x, y]) >> --------------------------------------------------------------------------- >> NotImplementedError >> inequality has more than one symbol of interest. >> >> > The class will also implement operator overloading for + (adding one set >> > to another) and – (removing a subset from original set) and more. >> >> This is already handled by Python's built in set class so it isn't >> really necessary to make a class for this. We can just put the >> inequalities in a set. >> >> > For this project to work I need to fully understand the implemented >> > inequality classes in SymPy which are in sympy.core.relational, so I would >> > know how to manipulate SymPy's inequalities. >> > >> > The problem is that when I am trying to go through the code of those >> > classes I get lost. There are so many subclasses there and every subclass >> > is inheriting from some other base class. >> > >> > Is there a way to see a class diagram of those classes so it would be more >> > clear what the purpose of each class is? Does anyone have another idea for >> > understanding those classes? >> >> The codebase for sympy is large which means it takes time to >> understand. You can see the inheritance scheme for these classes with >> mro: >> >> In [6]: LessThan.mro() >> Out[6]: >> [sympy.core.relational.LessThan, >> sympy.core.relational._Less, >> sympy.core.relational._Inequality, >> sympy.core.relational.Relational, >> sympy.logic.boolalg.Boolean, >> sympy.core.basic.Basic, >> sympy.printing.defaults.Printable, >> sympy.core.evalf.EvalfMixin, >> object] >> >> Here Printable and EvalfMixin are mixins that provide printing support >> and make it possible to use .evalf() e.g.: >> >> In [7]: x < pi >> Out[7]: x < π >> >> In [8]: _.evalf() >> Out[8]: x < 3.14159265358979 >> >> Basic is a fundamental class in sympy. Most sympy objects are >> instances of Basic. Basic is used to represent mathematical objects as >> trees and to implement operations like subs working over those trees. >> You can see an explanation of that here: >> https://docs.sympy.org/latest/tutorial/manipulation.html >> (Surprisingly that page doesn't actually mention Basic!) >> >> Boolean is a subclass of Basic for objects representing boolean >> True/False. The Boolean class provides operations like `&` and `|` >> representing "and" and "or" (as well as many other operations): >> >> In [9]: (x < pi) & (y < 3) >> Out[9]: x < π ∧ y < 3 >> >> Relational is a subclass of Boolean and is the common superclass for >> LessThan, StrictLessThan, Equality, Unequality, GreaterThan and >> StrictGreaterThan representing the 6 types of relation in sympy (`<=, >> <, ==, !=, >=, >`). >> >> The classes `_Inequality` and `_Less` are used for sharing/dividing >> code between the different inequality classes. >> >> -- >> Oscar > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/c00aa378-2b27-4b79-a94b-d6c540f76fb9n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAHVvXxQ1M%2B9QaWEYVZ6os0PHv_AbYrQvR%2Brj8n4A791U6AC6zw%40mail.gmail.com.
