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.