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.
