rigetti / pyquil

A Python library for quantum programming using Quil.
http://docs.rigetti.com
Apache License 2.0
1.39k stars 341 forks source link

quil.Instruction are recognized as any AbstractInstruction subclass by isinstance. #1748

Open MarquessV opened 4 months ago

MarquessV commented 4 months ago

AbstractInstruction has a metaclass that helps group quil Instruction types under the AbstractInstruction umbrella for compatibility. However, this metaclass is causing any Instruction to be recognized as any subclass of AbstractInstruction. This can be misleading, since it's possible the Instruction's inner type doesn't match the subclass it's being checked against:

from pyquil.quilbase import Pulse
from pyquil.quilatom import Frame, WaveformInvocation
from quil.instructions import Instruction

waveform = WaveformInvocation("MY_WAVEFORM")
frame = Frame([0], "MY_FRAME")
pulse = Pulse(frame, waveform)
pulse_instr = Instruction(pulse)
print(f"isinstance(pulse_instr, Frame): {isinstance(pulse_instr, Frame)}")

>>> isinstance(pulse_instr, Frame): True