from multiprocessing.sharedctypes import Value
from typing import List, Tuple
import numpy as np
from quara.objects.qoperation import QOperation
from quara.objects.state import State
from quara.objects.povm import Povm
from quara.objects.gate import Gate
from quara.objects.mprocess import MProcess
from quara.protocol.qtomography.standard.standard_qtomography import StandardQTomography
from quara.protocol.qtomography.standard.standard_qst import StandardQst
from quara.protocol.qtomography.standard.standard_povmt import StandardPovmt
from quara.protocol.qtomography.standard.standard_qpt import StandardQpt
from quara.protocol.qtomography.standard.standard_qmpt import StandardQmpt
[docs]def type_standard_qtomography(sqt: StandardQTomography) -> str:
"""Returns string of Type of StandardQTomography.
Parameters
----------
sqt : StandardQTomography
StandardQTomography object to get string of Type.
Returns
-------
str
string of Type of StandardQTomography.
Raises
------
TypeError
Type of StandardQTomography is invalid.
"""
if type(sqt) == StandardQst:
t = "state"
elif type(sqt) == StandardPovmt:
t = "povm"
elif type(sqt) == StandardQpt:
t = "gate"
elif type(sqt) == StandardQmpt:
t = "mprocess"
else:
raise TypeError(
f"Type of StandardQTomography is invalid. Type of sqt={type(sqt)}"
)
return t
[docs]def calc_total_num(nums: List[int]) -> int:
"""Returns the total number in the list.
Parameters
----------
nums : List[int]
a list of non-negative integers, Ni.
Returns
-------
int
sum_i Ni
"""
n = sum(nums)
return n
[docs]def calc_num_ratios(nums: List[int]) -> List[float]:
"""Returns number ratios.
Parameters
----------
nums : List[int]
a list of non-negative integers
Returns
-------
List[float]
a list of racios, ci:=Ni/N, where N:=sum_i Ni
Raises
------
ValueError
All elements of nums must be non-negative.
"""
for i, Ni in enumerate(nums):
if Ni < 0:
error_message = (
"All elements of nums must be non-negative. nums[{i}] = {Ni}"
)
raise ValueError(error_message)
N = calc_total_num(nums)
cs = []
for Ni in nums:
ci = Ni / N
cs.append(ci)
return cs