def test_qubit_state_bra(): """Test sum_i alpha_i <i| for TLS""" i = IdxSym('i') alpha = IndexedBase('alpha') alpha_i = alpha[i] hs_tls = LocalSpace('tls', basis=('g', 'e')) term = alpha_i * BasisKet(FockIndex(i), hs=hs_tls).dag() expr = KetIndexedSum.create(term, ranges=IndexOverFockSpace(i, hs=hs_tls)) assert IndexOverFockSpace(i, hs=hs_tls) in expr.ket.kwargs['ranges'] assert ascii(expr) == "Sum_{i in H_tls} alpha_i * <i|^(tls)" assert expr.ket.term.free_symbols == set([i, symbols('alpha'), alpha_i]) assert expr.free_symbols == set([symbols('alpha'), alpha_i]) assert expr.ket.variables == [i] assert expr.space == hs_tls assert len(expr.ket.args) == 1 assert len(expr.ket.operands) == 1 assert len(expr.ket.kwargs) == 1 assert expr.ket.args[0] == term.ket assert expr.ket.term == term.ket assert len(expr.kwargs) == 0 expr_expand = Bra.create(expr.ket.doit().substitute({ alpha[0]: alpha['g'], alpha[1]: alpha['e'] })) assert expr_expand == (alpha['g'] * BasisKet('g', hs=hs_tls).dag() + alpha['e'] * BasisKet('e', hs=hs_tls).dag()) assert ascii(expr_expand) == 'alpha_e * <e|^(tls) + alpha_g * <g|^(tls)'
def test_qubit_state(): """Test sum_i alpha_i |i> for TLS""" i = IdxSym('i') alpha = IndexedBase('alpha') alpha_i = alpha[i] hs_tls = LocalSpace('tls', basis=('g', 'e')) term = alpha_i * BasisKet(FockIndex(i), hs=hs_tls) expr1 = KetIndexedSum.create(term, ranges=IndexOverFockSpace(i, hs=hs_tls)) expr2 = KetIndexedSum.create(term, ranges=IndexOverList(i, [0, 1])) expr3 = KetIndexedSum.create(term, ranges=IndexOverRange(i, start_from=0, to=1)) assert IndexOverFockSpace(i, hs=hs_tls) in expr1.kwargs['ranges'] assert ascii(expr1) == "Sum_{i in H_tls} alpha_i * |i>^(tls)" assert unicode(expr1) == "∑_{i ∈ ℌ_tls} α_i |i⟩⁽ᵗˡˢ⁾" assert ( srepr(expr1) == "KetIndexedSum(ScalarTimesKet(ScalarValue(Indexed(IndexedBase(Symbol('alpha')), IdxSym('i', integer=True))), BasisKet(FockIndex(IdxSym('i', integer=True)), hs=LocalSpace('tls', basis=('g', 'e')))), ranges=(IndexOverFockSpace(IdxSym('i', integer=True), LocalSpace('tls', basis=('g', 'e'))),))" ) with configure_printing(tex_use_braket=True): assert (latex(expr1) == r'\sum_{i \in \mathcal{H}_{tls}} \alpha_{i} \Ket{i}^{(tls)}') assert ascii(expr2) == 'Sum_{i in {0,1}} alpha_i * |i>^(tls)' assert unicode(expr2) == '∑_{i ∈ {0,1}} α_i |i⟩⁽ᵗˡˢ⁾' assert ( srepr(expr2) == "KetIndexedSum(ScalarTimesKet(ScalarValue(Indexed(IndexedBase(Symbol('alpha')), IdxSym('i', integer=True))), BasisKet(FockIndex(IdxSym('i', integer=True)), hs=LocalSpace('tls', basis=('g', 'e')))), ranges=(IndexOverList(IdxSym('i', integer=True), (0, 1)),))" ) with configure_printing(tex_use_braket=True): assert ( latex(expr2) == r'\sum_{i \in \{0,1\}} \alpha_{i} \Ket{i}^{(tls)}') assert ascii(expr3) == 'Sum_{i=0}^{1} alpha_i * |i>^(tls)' assert unicode(expr3) == '∑_{i=0}^{1} α_i |i⟩⁽ᵗˡˢ⁾' assert ( srepr(expr3) == "KetIndexedSum(ScalarTimesKet(ScalarValue(Indexed(IndexedBase(Symbol('alpha')), IdxSym('i', integer=True))), BasisKet(FockIndex(IdxSym('i', integer=True)), hs=LocalSpace('tls', basis=('g', 'e')))), ranges=(IndexOverRange(IdxSym('i', integer=True), 0, 1),))" ) with configure_printing(tex_use_braket=True): assert latex(expr3) == r'\sum_{i=0}^{1} \alpha_{i} \Ket{i}^{(tls)}' for expr in (expr1, expr2, expr3): assert expr.term.free_symbols == set([i, symbols('alpha'), alpha_i]) assert expr.term.bound_symbols == set() assert expr.free_symbols == set([symbols('alpha'), alpha_i]) assert expr.variables == [i] assert expr.bound_symbols == set([i]) assert len(expr) == len(expr.ranges[0]) == 2 assert 0 in expr.ranges[0] assert 1 in expr.ranges[0] assert expr.space == hs_tls assert len(expr.args) == 1 assert len(expr.kwargs) == 1 assert len(expr.operands) == 1 assert expr.args[0] == term assert expr.term == term expr_expand = expr.doit().substitute({ alpha[0]: alpha['g'], alpha[1]: alpha['e'] }) assert expr_expand == (alpha['g'] * BasisKet('g', hs=hs_tls) + alpha['e'] * BasisKet('e', hs=hs_tls)) assert ( ascii(expr_expand) == 'alpha_e * |e>^(tls) + alpha_g * |g>^(tls)') with pytest.raises(TypeError) as exc_info: KetIndexedSum.create(alpha_i * BasisKet(i, hs=hs_tls), IndexOverFockSpace(i, hs=hs_tls)) assert "label_or_index must be an instance of" in str(exc_info.value)