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.

Reply via email to