tensorcircuit.interfaces.torch#

Interface wraps quantum function as a torch function

tensorcircuit.interfaces.torch.pytorch_interface(fun: Callable[[...], Any], jit: bool = False, enable_dlpack: bool = False) Callable[[...], Any]#

Wrap a quantum function on different ML backend with a pytorch interface.

Example

import torch

tc.set_backend("tensorflow")


def f(params):
    c = tc.Circuit(1)
    c.rx(0, theta=params[0])
    c.ry(0, theta=params[1])
    return c.expectation([tc.gates.z(), [0]])


f_torch = tc.interfaces.torch_interface(f, jit=True)

a = torch.ones([2], requires_grad=True)
b = f_torch(a)
c = b ** 2
c.backward()

print(a.grad)
参数
  • fun (Callable[..., Any]) -- The quantum function with tensor in and tensor out

  • jit (bool, optional) -- whether to jit fun, defaults to False

  • enable_dlpack (bool, optional) -- whether transform tensor backend via dlpack, defaults to False

返回

The same quantum function but now with torch tensor in and torch tensor out while AD is also supported

返回类型

Callable[..., Any]

tensorcircuit.interfaces.torch.torch_interface(fun: Callable[[...], Any], jit: bool = False, enable_dlpack: bool = False) Callable[[...], Any][源代码]#

Wrap a quantum function on different ML backend with a pytorch interface.

Example

import torch

tc.set_backend("tensorflow")


def f(params):
    c = tc.Circuit(1)
    c.rx(0, theta=params[0])
    c.ry(0, theta=params[1])
    return c.expectation([tc.gates.z(), [0]])


f_torch = tc.interfaces.torch_interface(f, jit=True)

a = torch.ones([2], requires_grad=True)
b = f_torch(a)
c = b ** 2
c.backward()

print(a.grad)
参数
  • fun (Callable[..., Any]) -- The quantum function with tensor in and tensor out

  • jit (bool, optional) -- whether to jit fun, defaults to False

  • enable_dlpack (bool, optional) -- whether transform tensor backend via dlpack, defaults to False

返回

The same quantum function but now with torch tensor in and torch tensor out while AD is also supported

返回类型

Callable[..., Any]

tensorcircuit.interfaces.torch.torch_interface_kws(f: Callable[[...], Any], jit: bool = True, enable_dlpack: bool = False) Callable[[...], Any][源代码]#

similar to py:meth:tensorcircuit.interfaces.torch.torch_interface, but now the interface support static arguments for function f, which is not a tensor and can be used with keyword arguments

Example

tc.set_backend("tensorflow")

def f(tensor, integer):
    r = 0.
    for i in range(integer):
        r += tensor
    return r

fnew = tc.interfaces.torch_interface_kws(f)

print(fnew(torch.ones([2]), integer=3))
print(fnew(torch.ones([2]), integer=4))
参数
  • f (Callable[..., Any]) -- _description_

  • jit (bool, optional) -- _description_, defaults to True

  • enable_dlpack (bool, optional) -- _description_, defaults to False

返回

_description_

返回类型

Callable[..., Any]