\pgfdeclaremetadecoration{tikz@internal}{pre}{% \state{pre}[width=\pgfkeysvalueof{/pgf/decoration/pre length}+\pgfkeysvalueof{/pgf/decoration/post length}, next state=main]{% \appto\tikz@dec@shift{\pgftransformxshift{-\pgfkeysvalueof{/pgf/decoration/post length}}}% \tikz@dec@trans% \decoration{\pgfkeysvalueof{/pgf/decoration/pre}}% }% \state{main}[width=\pgfmetadecoratedremainingdistance, next state=final]{% \tikz@dec@trans% \decoration{\tikz@decoration@name}% }% \state{final}{% \tikz@dec@trans% \decoration{\pgfkeysvalueof{/pgf/decoration/post}}% }% } % BEGIN_FOLD Circuit layout \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% register/minimum height/.code=% {\dimdef\yquant@config@register@minimum@height{.5\dimexpr#1\relax}% \let\yquant@config@register@minimum@depth=\yquant@config@register@minimum@height}% } \else% \pgfqkeys{/yquant}{% register/minimum height/.code=% {\dimdef\yquant@config@register@minimum@height{#1}},% register/minimum depth/.code=% {\dimdef\yquant@config@register@minimum@depth{#1}}% } \fi \pgfqkeys{/yquant}{% register/separation/.code=% {\dimdef\yquant@config@register@sep{#1}},% operator/minimum width/.code=% {\dimdef\yquant@config@operator@minimum@width{#1}},% operator/separation/.code=% {\dimdef\yquant@config@operator@sep{#1}},% operator/multi warning/.is if=% yquant@config@operator@multi@warn% }% % END_FOLD % BEGIN_FOLD Register creation \pgfqkeys{/yquant}{% register/default name/.store in=% \yquant@config@register@default@name% } \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% every label/.style=% {shape=yquant-init, anchor=center, align=right, outer xsep=2pt},% every multi label/.style=% {draw, decoration={gapped brace, mirror, raise=2pt}, decorate}% } \else \pgfqkeys{/yquant}{% every label/.style=% {shape=yquant-init, anchor=center, align=right, outer xsep=2pt,% /yquant/operator/if multi={draw, decoration={gapped brace, mirror, raise=2pt}, decorate}}% } \fi \pgfqkeys{/yquant}{ every initial label/.style=% {anchor=east},% every qubit label/.style=% {},% every cbit label/.style=% {},% every qubits label/.style=% {}% } \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% every input label/.style=% {}% }% \fi% % END_FOLD % BEGIN_FOLD Register outputs \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% every output/.style=% {shape=yquant-output, anchor=west, align=left, outer xsep=2pt},% every multi output/.style=% {draw, decoration={gapped brace, raise=2pt}, decorate}% } \else \pgfqkeys{/yquant}{% every output/.style=% {shape=yquant-output, anchor=west, align=left, outer xsep=2pt,% /yquant/operator/if multi={draw, decoration={gapped brace, raise=2pt}, decorate}}% } \fi \pgfqkeys{/yquant}{% every qubit output/.style=% {},% every cbit output/.style=% {},% every qubits output/.style=% {}% } % END_FOLD % BEGIN_FOLD General styling \pgfqkeys{/yquant}{% every circuit/.style={% every node/.prefix style={transform shape} }% } \@ifpackagelater{pgf}{2020/09/31}\relax{ \pgfkeys{/yquant/every circuit/.append style={% every label/.prefix style={transform shape=false}% }} } \pgfqkeys{/yquant}{% every wire/.style=% {draw},% every qubit wire/.style=% {},% every cbit wire/.style=% {},% every qubits wire/.style=% {},% every control line/.style=% {draw},% every control/.style=% {shape=yquant-circle, anchor=center, radius=.5mm},% every positive control/.style=% {fill=black},% every negative control/.style=% {draw},% every operator/.style=% {anchor=center},% every multi line/.style=% {draw, decoration={snake, amplitude=.25mm, segment length=5pt}, decorate},% this operator/.style=% {},% this control/.style=% {},% operator style/.style=% {/yquant/this operator/.append style={#1}},% control style/.style=% {/yquant/every control line/.append style={#1},% /yquant/this control/.append style={#1}},% style/.style=% {/yquant/this operator/.append style={#1},% /yquant/every control line/.append style={#1},% /yquant/this control/.append style={#1}},% operator/multi as single/.style=% {/yquant/every multi line/.style=/yquant/every control line},% operator/if multi/.code=% {\ifyquant@config@operator@multi\pgfkeysalso{#1}\fi},% circuit/seamless/.is if=yquant@config@circuit@seamless,% every post measurement control/.is choice, every post measurement control/indirect/.code={% \undef\yquant@lang@attr@directcontrol% },% every post measurement control/direct/.code={% \let\yquant@lang@attr@directcontrol=\relax% }% } % END_FOLD % BEGIN_FOLD Styles for operators \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% operators/every barrier/.style=% {shape=yquant-line, dashed, draw}% } \else \pgfqkeys{/yquant}{% operators/every barrier/.style=% {shape=yquant-line, dashed, draw, shorten <= -1mm, shorten >= -1mm} } \fi \pgfqkeys{/yquant}{% operators/every box/.style=% {shape=yquant-rectangle, draw, align=center, inner xsep=1mm, x radius=2mm, y radius=2.47mm},% } \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% operators/every custom gate/.style=% {/yquant/operators/subcircuit/frameless, /yquant/register/default name=}% } \else \pgfqkeys{/yquant}{% operators/every custom gate/.style=% {/yquant/operators/subcircuit/seamless}% } \fi \pgfqkeys{/yquant}{% operators/every dmeter/.style=% {shape=yquant-dmeter, x radius=2mm, y radius=2mm, draw}, % every h is implicitly defined during gate declaration operators/every inspect/.style=% {shape=yquant-output, align=left, outer xsep=.3333em, y radius=2.47mm,% /yquant/operator/if multi={draw, decoration={gapped brace, raise=2pt}, decorate}},% operators/every measure/.style=% {shape=yquant-measure, x radius=4mm, y radius=2.5mm, draw},% operators/every measure meter/.style=% {draw, -{Latex[length=2.5pt]}},% operators/every not/.style=% {shape=yquant-oplus, radius=1.3mm, draw},% operators/every pauli/.style=% {/yquant/operators/every box},% operators/every phase/.style=% {shape=yquant-circle, radius=.5mm, fill},% operators/every slash/.style=% {shape=yquant-slash, x radius=.5mm, y radius=.7mm, draw},% operators/every subcircuit/.style=% {},% operators/every subcircuit box/.style=% {/yquant/operators/every box},% subcircuit box style/.style=% {/yquant/operators/every subcircuit box/.append style={#1}},% operators/this subcircuit box/.style=% {},% this subcircuit box style/.style=% {/yquant/operators/this subcircuit box/.append style={#1}},% operators/subcircuit/frameless/.style= {/yquant/operators/this subcircuit box/.append style={draw=none, inner sep=0pt}},% operators/subcircuit/seamless/.code=% {\pgfkeysalso{/yquant/operators/subcircuit/frameless, /yquant/register/default name=}% \letcs\yquant@prevseamless{\yquant@prefix seamless}% \yquant@config@circuit@seamlesstrue}, operators/every swap/.style=% {shape=yquant-swap, radius=.75mm, draw},% operators/every wave/.style=% {shape=yquant-circle, radius=.5mm, fill}% % every x is implicitly defined during gate declaration operators/every xx/.style=% {shape=yquant-rectangle, radius=.75mm, draw},% % every y is implicitly defined during gate declaration % every z is implicitly defined during gate declaration operators/every zz/.style=% {shape=yquant-circle, radius=.5mm, fill},% } % END_FOLD % BEGIN_FOLD Internal styles (undocument, do not use!) \pgfqkeys{/yquant}{% internal/move label/.code=% {\yquant@config@operator@position@rightaligntrue}, internal/no advance/.code=% {\unless\ifyquantmeasuring% We don't draw subcircuits during measuring time, but we need their advancement \yquant@config@operator@position@advancefalse% \fi}, internal/multi main/.is if=% yquant@config@internal@multi@main,% } \ifnum\yquant@compat<2 % \pgfqkeys{/yquant}{% internal/squeeze slash/.code=% {\dimdef\yquant@config@operator@sep{.5\dimexpr\yquant@config@operator@sep-\pgflinewidth\relax}% \yquant@config@operator@position@advancefalse},% } \else% \pgfqkeys{/yquant}{% internal/squeeze slash/.code={}% } \fi % END_FOLD \def\yquant@config@register@default@name{\regidx} \def\yquant@config@register@minimum@height{1.5mm} \def\yquant@config@register@minimum@depth{1.5mm} \def\yquant@config@register@sep{1mm} \def\yquant@config@operator@sep{1mm} \def\yquant@config@operator@minimum@width{5mm} \newif\ifyquant@config@internal@multi@main% \yquant@config@internal@multi@maintrue \newif\ifyquant@config@operator@multi@warn \yquant@config@operator@multi@warntrue \newif\ifyquant@config@operator@position@rightalign \newif\ifyquant@config@operator@position@advance \yquant@config@operator@position@advancetrue \newif\ifyquant@config@circuit@seamless \newif\ifyquant@config@operator@multi