Okay, that code looks good. It will also need docs and tests.

I suggest first trying to add the smallest part of this to sympy. Then
other parts can be added one step at a time.

The question is what is the smallest part that is useful on its own.
Is that the simplex function?

If you open a pull request to add that to sympy then you can get some
feedback on it and make further changes until it is ready. Once that
part is merged you will have a better idea how to prepare the other
parts for inclusion into sympy.

Another question is performance. I expect that in practice the most
important part of the performance of this method is being able to
handle large sparse systems of mostly unrelated inequalities so being
able to separate a system using sparse techniques to reduce the size
of the problem will make the method much faster in common usage.

Oscar

‪On Sat, 19 Jun 2021 at 21:31, ‫אוריאל מליחי‬‎ <[email protected]> wrote:‬
>
> Yes, my code is viewable in here-
> https://github.com/orielmalihi/Final-Project/blob/main/my%20functions/inequalities%20functions.py
>
> On Friday, 18 June 2021 at 00:09:11 UTC+3 Oscar wrote:
>>
>> That's great. I suggest not trying to add everything at once. Probably some 
>> changes will need to be made and there are other steps like tests and so on 
>> that would need to be added if there aren't already tests in the right 
>> format.
>>
>> Is your code publicly viewable already? For example if you put it in a 
>> github repo/gist then you can send a link here.
>>
>> Oscar
>>
>> ‪On Thu, 17 Jun 2021 at 20:17, ‫אוריאל מליחי‬‎ <[email protected]> wrote:‬
>>>
>>> Hello everyone!
>>>
>>> I finally completed implementing these functions.
>>>
>>> Quick reminder:
>>> The main function is called is_implied_by and it gets a set of linear 
>>> inequalities and a target linear inequality and return whether the target 
>>> is implied by the set or not.
>>>
>>> Two other functions are find_values_interval and 
>>> simplify_linear_inequalities.
>>>
>>>  find_values_interval gets a set of linear inequalities and a target 
>>> expression (expr) and returns an interval of [min possible value for expr, 
>>> max possible value for expr].
>>>
>>> simplify_linear_inequalities gets a set of linear inequalities and returns 
>>> a simplified set (redundant inequalities are removed).
>>>
>>> Now I would like to know what are the next steps for me to do in order to 
>>> get my implementation into sympy. This is my first time contributing so 
>>> detailed explanation would be really helpful.
>>>
>>>
>>>
>>> On Thursday, 18 February 2021 at 18:28:38 UTC+2 [email protected] wrote:
>>>>
>>>> Den tors 18 feb. 2021 kl 14:36 skrev Oscar Benjamin 
>>>> <[email protected]>:
>>>>>
>>>>> On Thu, 18 Feb 2021 at 11:32, Oscar Gustafsson
>>>>> <[email protected]> wrote:
>>>>> >
>>>>> > After currently using Mathematica for similar things, I would just like 
>>>>> > to encourage you to provide some nice method to simplify constraints of 
>>>>> > piecewise functions using your simplifier, including additional 
>>>>> > constraints on the range of variables (as SymPy doesn't have a way to 
>>>>> > put ranges on variables). That doesn't really exist in Mathematica 
>>>>> > (Assuming[..., Simplify[piecewise]) doesn't always seems to simplify as 
>>>>> > far as possible).
>>>>> >
>>>>> > Something like
>>>>> > simplify_piecewise_range(piecewisefunction, common_constraints)
>>>>> > That adds the common_constraints to each region constraint and applies 
>>>>> > your method. (Possibly, optionally, removing the common_constraints 
>>>>> > from the final regions if feasible.)
>>>>>
>>>>> I imagined that this would be something that the new assumptions could
>>>>> handle in refine. Something like:
>>>>>
>>>>> p = Piecewise((x, x < 1), (x**2, True))
>>>>> p = refine(p, abs(x) < 1)
>>>>>
>>>>> The idea would then be that e.g. when you have Integral(f, (x, a, b))
>>>>> then the integration routine can do
>>>>>
>>>>> f = refine(f, (a < x) & (x < b))
>>>>
>>>> Yes, a different assumption system will also do the trick. But until that 
>>>> is in place, this would be a useful short-cut for a specific use case.
>>>>
>>>>
>>>>> > There is an old PR which may be useful to revive in relation to this: 
>>>>> > https://github.com/sympy/sympy/pull/17443 although sort of independent.
>>>>> >
>>>>> > It will also be useful to have a function that can replace Min/Max 
>>>>> > expressions with linear inequalities (and possibly back again). Right 
>>>>> > now there is some logic to convert from linear inequalites to Min/Max, 
>>>>> > but not back. As far as I recall. (There may be a PR doing the Min/Max 
>>>>> > to linear as well, but not really sure.)
>>>>>
>>>>> Is this what you mean?
>>>>>
>>>>> In [1]: Min(x, y).rewrite(Piecewise)
>>>>> Out[1]:
>>>>> ⎧x  for x ≤ y
>>>>> ⎨
>>>>> ⎩y  otherwise
>>>>>
>>>>> Perhaps there could be a rewrite(Max) for Piecewise.
>>>>>
>>>> I seem to recall that I did something that rewrote/simplified, probably as 
>>>> part of the pattern based logic simplification,
>>>> And(x <= y, x <= z)
>>>> to
>>>> x <= Min(y, z)
>>>>
>>>> At some later stage I realized it was sometimes a bad idea (as the logic 
>>>> simplification sometimes worked better without the Min/Max, do not recall 
>>>> exactly) and I sort of regretted introducing that rewrite, but cannot 
>>>> recall if the reverse operation was ever introduced. Piecewise may work 
>>>> though, but I believe that for the linear inequality simplifier it may be 
>>>> better to rewrite x <= Min(y, z)  back to  And(x <= y, x <= z) .
>>>>
>>>> BR 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/07668755-217b-4487-805d-1faefd70191bn%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/6ae5a93d-5976-479d-ad87-017a0c82b603n%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/CAHVvXxQZbH4wGmTEtLoFnQpvWob5rifNHW58f%3DBJ-BkC%3Dmo3ZQ%40mail.gmail.com.

Reply via email to