pyquil icon indicating copy to clipboard operation
pyquil copied to clipboard

Typing on exponential_map return value is incorrect

Open mhodson-rigetti opened this issue 3 years ago • 2 comments

Pre-Report Checklist

  • [x] I am running the latest versions of pyQuil and the Forest SDK
  • [x] I checked to make sure that this bug has not already been reported

Issue Description

The signature of exponential_map is:

def exponential_map(term: PauliTerm) -> Callable[[float], Program]:

But at least MemoryReference can also be provided on the second chained invocation.

This requires "noqa" to silence type checks on circuit-parameterized invocations of this method.

Suggest the signature be changed to at least:

def exponential_map(term: PauliTerm) -> Callable[[Union[float, MemoryReference]], Program]:

How to Reproduce

This is not a run-time bug. I'm observing type check warning highlighting in PyCharm. I'm assuming running eg. mypy would output the following error:

Expected type 'float', got 'MemoryReference' instead

Environment Context

IDE: Jetbrains PyCharm 2020.2

mhodson-rigetti avatar Aug 21 '20 03:08 mhodson-rigetti

Hey, Mark. Would you provide a MWE that triggers the mypy warning?

notmgsk avatar Sep 07 '20 14:09 notmgsk

Hi @notmgsk - so I just checked and my assumption about mypy was wrong. It seems PyCharm has its own native implementation of the relevant PEPs pertaining to type checking and does this inside the IDE. You will have to install PyCharm community edition and have it point at an environment with pyquil installed to see the issue.

The MWE is then:

from pyquil import Program
from pyquil.paulis import PauliSum, sZ, exponential_map

cost_hamiltonian = PauliSum([sZ(0) * sZ(1)])

program = Program()

gammas = program.declare("gammas", "REAL", 1)

program.inst(exponential_map(term)(gammas[0]) for term in cost_hamiltonian)

Here, gammas[0] will be highlighted as an error, as per the above.

mhodson-rigetti avatar Sep 09 '20 06:09 mhodson-rigetti