Although storing f in the .args of an expression would be just as
problematic as storing a lambda, because functions are not objects. So
you might need to make a custom evaluator class similar to Lambda that
stores a given lambda on it. It's a little messy because it breaks
with the SymPy pattern that objects should only store symbolic data.

Aaron Meurer

On Thu, Sep 30, 2021 at 2:02 PM Aaron Meurer <asmeu...@gmail.com> wrote:
>
> So it sounds like OracleGate needs the function to not be symbolic at
> all. You can use the following to create a symbolic function that
> evaluates as a given lambda:
>
> >>> f = Function('f', eval=lambda x: x == 1)
> >>> f(1)
> True
> >>> f(0)
> False
>
> Aaron Meurer
>
> On Wed, Sep 29, 2021 at 8:19 PM Chris Smith <smi...@gmail.com> wrote:
> >
> > The problem is that this returns an Eq instead of False when it is not 
> > equal:
> > ```
> > >>> f = lambda x: x == 1
> > >>> F = Lambda(x, f(SymbolicEquality(x)))
> > >>> F(1)
> > True
> > >>> F(x)
> > Eq(x, 1)
> > >>> f(x)
> > False
> > ```
> >
> > On Tuesday, September 28, 2021 at 1:42:27 AM UTC-5 Oscar wrote:
> >>
> >> On Tue, 28 Sept 2021 at 04:13, Chris Smith <smi...@gmail.com> wrote:
> >>>
> >>> I would like to emulate something like this with Basic objects. I am 
> >>> drawing a blank on how that might be done. Does anyone have any ideas?
> >>>
> >>> >>> f=lambda x: x==1
> >>> >>> f(1)
> >>> True
> >>> >>> Lambda(x, f(x))(1) # doesn't work
> >>> False
> >>
> >>
> >> Something like this:
> >>
> >> In [7]: cat w.py
> >> class SymbolicEquality:
> >>     def __init__(self, sym):
> >>         self.sym = sym
> >>     def __eq__(self, other):
> >>         return Equality(self.sym, other)
> >>
> >> In [8]: f = lambda x: x == 1
> >>
> >> In [9]: y = Dummy('y')
> >>
> >> In [10]: F = Lambda(y, f(SymbolicEquality(y)))
> >>
> >> In [11]: F
> >> Out[11]: y ↦ y = 1
> >>
> >> --
> >> 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 sympy+unsubscr...@googlegroups.com.
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msgid/sympy/13d15197-0d82-4312-b94a-ec59df616aedn%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 sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2Bt1wkS_mEg3AruG%2BLahUfDqqszP0ZAbi5XCsW4KXA4yw%40mail.gmail.com.

Reply via email to