I presume the fix would be to check for windows and do the calculation without multiprocessing.
if __name__ == '__main__':
import cirq
import tensorflow_quantum as tfq
import sympy
q = cirq.GridQubit(0, 0)
(a, b, c) = sympy.symbols("a b c")
circuit = cirq.Circuit(
cirq.rz(a)(q),
cirq.rx(b)(q),
cirq.rz(c)(q),
cirq.rx(-b)(q),
cirq.rz(-a)(q)
)
measurement = [cirq.X(q), cirq.Y(q), cirq.Z(q)]
outputs = tfq.layers.PQC(circuit, measurement, repetitions=200)
quantum_data = tfq.convert_to_tensor([
cirq.Circuit(),
cirq.Circuit(cirq.X(q))])
res = outputs(quantum_data)
print(res)
2020-03-12 22:56:14.112680: W tensorflow/core/framework/op_kernel.cc:1643] Invalid argument: TypeError: can't pickle module objects
Traceback (most recent call last):
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\script_ops.py", line 234, in __call__
return func(device, token, args)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\script_ops.py", line 123, in __call__
ret = self._func(*args)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\core\ops\cirq_ops.py", line 340, in cirq_sampled_expectation
programs, resolvers, sum_inputs, num_samples, simulator)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\core\ops\batch_util.py", line 566, in batch_calculate_sampled_expectation
simulator, None)) as pool:
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\context.py", line 119, in Pool
context=self.get_context())
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\pool.py", line 176, in __init__
self._repopulate_pool()
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\pool.py", line 241, in _repopulate_pool
w.start()
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\process.py", line 112, in start
self._popen = self._Popen(self)
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\context.py", line 322, in _Popen
return Popen(process_obj)
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
reduction.dump(process_obj, to_child)
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle module objects
Traceback (most recent call last):
File "C:/Users/Andrew Patterson/Google Drive/PhD/Second Year/Projects/tfq_qVAE/encode_state.py", line 65, in <module>
res = outputs(quantum_data)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 822, in __call__
outputs = self.call(cast_inputs, *args, **kwargs)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\python\layers\high_level\pqc.py", line 286, in call
repetitions=tiled_up_repetitions)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 822, in __call__
outputs = self.call(cast_inputs, *args, **kwargs)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\python\layers\circuit_executors\sampled_expectation.py", line 394, in call
operators, num_samples)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\custom_gradient.py", line 256, in __call__
return self._d(self._f, a, k)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\custom_gradient.py", line 210, in decorated
return _eager_mode_decorator(wrapped, args, kwargs)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\custom_gradient.py", line 406, in _eager_mode_decorator
result, grad_fn = f(*args, **kwargs)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\python\differentiators\differentiator.py", line 142, in op_wrapper_sampled
num_samples)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\core\ops\cirq_ops.py", line 40, in wrapper
return op_wrapper(*tensorized_args)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\core\ops\cirq_ops.py", line 360, in sampled_expectation_generator
Tout=tf.float32,
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\script_ops.py", line 428, in eager_py_func
return _internal_py_func(func=func, inp=inp, Tout=Tout, eager=True, name=name)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\script_ops.py", line 317, in _internal_py_func
name=name)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\gen_script_ops.py", line 55, in eager_py_func
_ops.raise_from_not_ok_status(e, name)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\framework\ops.py", line 6606, in raise_from_not_ok_status
six.raise_from(core._status_to_exception(e.code, message), None)
File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.InvalidArgumentError: TypeError: can't pickle module objects
Traceback (most recent call last):
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\script_ops.py", line 234, in __call__
return func(device, token, args)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_core\python\ops\script_ops.py", line 123, in __call__
ret = self._func(*args)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\core\ops\cirq_ops.py", line 340, in cirq_sampled_expectation
programs, resolvers, sum_inputs, num_samples, simulator)
File "C:\Users\Andrew Patterson\Documents\PhD\envs\tf_quantum\lib\site-packages\tensorflow_quantum\core\ops\batch_util.py", line 566, in batch_calculate_sampled_expectation
simulator, None)) as pool:
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\context.py", line 119, in Pool
context=self.get_context())
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\pool.py", line 176, in __init__
self._repopulate_pool()
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\pool.py", line 241, in _repopulate_pool
w.start()
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\process.py", line 112, in start
self._popen = self._Popen(self)
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\context.py", line 322, in _Popen
return Popen(process_obj)
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
reduction.dump(process_obj, to_child)
File "C:\Users\Andrew Patterson\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle module objects
[Op:EagerPyFunc]
Process finished with exit code 1