My understanding is that an OracleGate is just the quantum version of Function. It probably should just be Function (maybe a subclass that mixes Function and Gate), with users creating oracles by subclassing and defining eval.
Aaron Meurer On Thu, Sep 30, 2021 at 4:12 PM Chris Smith <[email protected]> wrote: > > https://qiskit.org/textbook/ch-gates/oracles.html > > On Thursday, September 30, 2021 at 3:13:15 PM UTC-5 Oscar wrote: >> >> I don't know what the OracleGate class is for but I'm pretty sure it's not >> very useful and it's certainly poorly designed. I'd rather just delete it >> than try to come up with hacks to make it work. >> >> If someone wants to maintain the quantum module then that's great. Until >> then we shouldn't allow broken code like this to complicate the maintained >> part of the codebase. >> >> Oscar >> >> On Thu, 30 Sept 2021 at 21:08, Aaron Meurer <[email protected]> wrote: >>> >>> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 [email protected]. >>> > > 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 [email protected]. >>> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2Bt1wkS_mEg3AruG%2BLahUfDqqszP0ZAbi5XCsW4KXA4yw%40mail.gmail.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/eae0a8a1-2742-4d06-9581-3f0804ebe06cn%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%3D6%2B52mGz-f8FkZ%3DXfkBNe7-8qKv5MUv5bPg6W-dT6yX1%2BA%40mail.gmail.com.
