This is the relevant issue for this https://github.com/sympy/sympy/issues/4787.

Aaron Meurer

On Sun, Dec 8, 2019 at 6:52 AM JS S <[email protected]> wrote:
>
> I see.
>
> My idea is quite similar with WrapFunction concept which Upabjojr suggested.
> In my case, it would be 'Operator' instead of 'WrapFunction'.
>
> The difference is, my plan does not include overriding the namespace, such as 
> sin=WrapFunction(sin).
> Instead, it leaves sin class completely unmodified. However, __add__, 
> __sub__, ... methods will be added to FunctionClass, which is a metaclass of 
> sin.
>
> It will be like this:
>
> class FunctionClass(ManagedProperties):
>     def __add__(cls, other):
>         return Operator(cls) + Operator(other)
>
> * Operator(cls) + Operator(other)  will return 
> AddedOperator(Operator(cls),Operator(other))
>
>
>
>
>
> 2019년 12월 8일 일요일 오후 8시 35분 52초 UTC+9, Oscar 님의 말:
>>
>> There might be others but I was thinking of this PR:
>> https://github.com/sympy/sympy/pull/13872
>>
>> The idea there is that functions like sin should become first-class
>> symbolic objects. Then sin(x) would create an object that represents
>> calling the function sin with the argument x like Call(sin, x). Then
>> undefined functions can be more like symbols.
>>
>> On Sun, 8 Dec 2019 at 03:36, JS S <[email protected]> wrote:
>> >
>> > Can you link me to any discussions related to first-class symbolic 
>> > functions? I want to know what have been tried and why they have failed, 
>> > but I couldn't find it.
>> >
>> > 'D(sin) -> cos' seems good. It will be worth implementing.
>> >
>> >
>> >
>> > 2019년 12월 8일 일요일 오전 1시 54분 44초 UTC+9, Oscar 님의 말:
>> >>
>> >> I would like to make it so that functions like `sin` are first-class
>> >> symbolic objects, subclassing from Basic. There has been an abandoned
>> >> attempt to do that in the past. If we had that then we could have a
>> >> symbolic differentiation operator.
>> >>
>> >> I don't think I'd want normal SymPy functions to support things like
>> >> `sin + cos` but composition, symbolic inverse, differentiation etc
>> >> should work. I think we need functions to be first class objects in
>> >> order to have a differentiation operator so we can represent things
>> >> like f'(0) without using Subs as D(f)(0).
>> >>
>> >> I'm not sure what sort of differential operators we would want though.
>> >> You've proposed something like d/dx which differentiates with respect
>> >> to x. Actually one of the most useful possibilities that we could get
>> >> from a differential operator would be the possibility to differentiate
>> >> functions directly without needing any reference to an unnecessary
>> >> symbol as in `D(sin) -> cos`. In the context of multivariable
>> >> functions and partial differentiation maybe that would be something
>> >> like `D[2](atan2)`...
>> >>
>> >> --
>> >> Oscar
>> >>
>> >> On Fri, 6 Dec 2019 at 09:37, JS S <[email protected]> wrote:
>> >> >
>> >> > In the top docstring of core/function, such behavior is proposed.
>> >> > I also found it mentioned in 
>> >> > https://github.com/sympy/sympy/issues/5105, which was open 10 years 
>> >> > ago...
>> >> > I know that using `rcall` on `Lambda(x,sin(x))+Lambda(x,cos(x))` will 
>> >> > do it, but it seems a bit verbose.
>> >> >
>> >> > I am currently developing modules for fluid mechanics, which are purely 
>> >> > dependent on sympy. (Hopefully, I want to contribute it to sympy after 
>> >> > I'm finished)
>> >> > In this module, what I plan to is to make 'Operator' class, which is a 
>> >> > subclass of Expr.
>> >> > It will have callable sympy class (not instance) as argument.
>> >> > Also, classes such as 'OperAdd' and 'OperMul' will be introduced.
>> >> >
>> >> > For example, it will behave like this:
>> >> >
>> >> > ```
>> >> > >>> Operator(sin)(x)
>> >> > sin(x)
>> >> >
>> >> > >>> Operator(sin)+Operator(cos)
>> >> > OperAdd(Operator(sin), Operator(cos))
>> >> >
>> >> > >>> Operator(sin) + cos    # This will convert cos to Operator(cos)
>> >> > OperAdd(Operator(sin), Operator(cos))
>> >> >
>> >> > >>> OperAdd(Operator(sin), Operator(cos))(x)
>> >> > sin(x) + cos(x)
>> >> >
>> >> > >>> 2*Operator(sin)
>> >> > OperMul(2,Operator(sin))
>> >> >
>> >> > >>> OperMul(2,Operator(sin))(x)
>> >> > 2*sin(x)
>> >> >
>> >> > >>> Operator(sin)(cos)
>> >> > OperComposite(sin, cos)
>> >> >
>> >> > >>> OperComposite(sin, cos)(x)
>> >> > sin(cos(x))
>> >> > ```
>> >> >
>> >> > Perhaps, it may also have not-callable Expr instance as argument.
>> >> > ```
>> >> > >>> Operator(1+x)(y)
>> >> > y + x*y
>> >> > ```
>> >> >
>> >> >
>> >> > Also, I am planning to make differential operator class, named DiffOp, 
>> >> > which is a subclass of Operator.
>> >> > Instead of sympy class, it will have variables which will differentiate 
>> >> > the expression.
>> >> > DiffOp(x) will represent d/dx.
>> >> >
>> >> > ```
>> >> > >>> DiffOp(x)(sin(x))
>> >> > cos(x)
>> >> >
>> >> > >>> DiffOp(x)(DiffOp(y))
>> >> > DiffOp(x,y)
>> >> >
>> >> > >>> DiffOp(x) + Operator(sin) + x
>> >> > OperAdd(DiffOp(x), Operator(sin), Operator(x))
>> >> >
>> >> > >>> (DiffOp(x) + Operator(sin) + x)(x)
>> >> > 1 + sin(x) + x**2
>> >> > ```
>> >> >
>> >> > How is it? Will it be OK?
>> >> >
>> >> > --
>> >> > 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/b26e04b9-d137-48ca-b40a-a9b7fdec645d%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/f11e98e9-78eb-4289-9b8f-84efe23f3b01%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/8439f6aa-1f64-4a44-a320-b2ee8c1f88e6%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/CAKgW%3D6KEUoUFyKMD7VoiXE-d--67nQ8%2BUX1HuaM2n8VnsONSvA%40mail.gmail.com.

Reply via email to