% BEGIN_FOLD Attributes \yquant@langhelper@declare@attr{% value/.store in=\yquant@lang@attr@value,% after/.code={% \yquant@register@get@ids{#1}% \let\yquant@lang@attr@after=\yquant@register@get@ids@list% },% type/.store in=\yquant@lang@attr@type,% ancilla/.code={% \undef\yquant@lang@attr@input% \undef\yquant@lang@attr@output% },% in/.code={% \let\yquant@lang@attr@input=\relax% \undef\yquant@lang@attr@output% },% out/.code={% \undef\yquant@lang@attr@input% \let\yquant@lang@attr@output=\relax% },% inout/.code={% \let\yquant@lang@attr@input=\relax% \let\yquant@lang@attr@output=\relax% },% frameless/.code={% \pgfkeysalso{/yquant/operators/subcircuit/frameless}% \appto\yquant@attrs@remaining{,/yquant/operators/subcircuit/frameless}% },% seamless/.code={% \pgfkeysalso{/yquant/operators/subcircuit/seamless}% \appto\yquant@attrs@remaining{,/yquant/operators/subcircuit/seamless}% },% direct control/.code={% \let\yquant@lang@attr@directcontrol=\relax% },% indirect control/.code={% \undef\yquant@lang@attr@directcontrol% },% name mangling/.code={% \pgfkeysalso{/yquant/operators/subcircuit/name mangling={#1}}% \appto\yquant@attrs@remaining{,/yquant/operators/subcircuit/name mangling={#1}}% }% } \yquant@langhelper@declare@attr@global{% name/.store in=\yquant@lang@attr@name,% overlay/.code={% \ifstrequal{#1}{true}{% \yquant@lang@attr@overlay@multitrue% \yquant@lang@attr@overlay@heighttrue% \yquant@lang@attr@overlay@depthtrue% }{% \ifstrequal{#1}{false}{% % Why??? This is the default and should always be reset automatically! \yquant@lang@attr@overlay@multifalse% \yquant@lang@attr@overlay@heightfalse% \yquant@lang@attr@overlay@depthfalse% }{% \pgfqkeys{/yquant/global attrs/overlay}{#1}% }% }% },% overlay/.default=true,% overlay/multi/.is if=yquant@lang@attr@overlay@multi,% overlay/m/.forward to=/yquant/global attrs/overlay/multi,% overlay/height/.is if=yquant@lang@attr@overlay@height,% overlay/ht/.forward to=/yquant/global attrs/overlay/height,% overlay/h/.forward to=/yquant/global attrs/overlay/height,% overlay/depth/.is if=yquant@lang@attr@overlay@depth,% overlay/dp/.forward to=/yquant/global attrs/overlay/depth,% overlay/d/.forward to=/yquant/global attrs/overlay/depth,% overlay/single/.code={\pgfkeysalso{% /yquant/global attrs/overlay/height={#1},% /yquant/global attrs/overlay/depth={#1}% }},% overlay/single/.default=true,% overlay/s/.forward to=/yquant/global attrs/overlay/single,% } \newif\ifyquant@lang@attr@overlay@multi% \newif\ifyquant@lang@attr@overlay@height% \newif\ifyquant@lang@attr@overlay@depth% \protected\def\yquant@lang@reset@attrs{% \undef\yquant@lang@attr@value% \undef\yquant@lang@attr@after% \undef\yquant@lang@attr@type% \yquant@lang@reset@attrs@inputoutput% \let\yquant@lang@attr@name=\empty% \yquant@lang@attr@overlay@multifalse% \yquant@lang@attr@overlay@heightfalse% \yquant@lang@attr@overlay@depthfalse% } \protected\def\yquant@lang@reset@attrs@inputoutput{% \undef\yquant@lang@attr@input% \undef\yquant@lang@attr@output% } \protected\def\yquant@lang@reset@attrs@inputoutput@subcircuit{% \let\yquant@lang@attr@input=\relax% \let\yquant@lang@attr@output=\relax% } % END_FOLD % BEGIN_FOLD Declaration of registers \yquant@langhelper@declare@command@create{nobit}\yquant@lang@@nobit \yquant@langhelper@setup@attrs{nobit}{}{ancilla,out} \def\yquant@lang@@nobit#1{% \let\yquant@lang@create@type=\yquant@register@type@none% \def\yquant@lang@create@style{initial}% there is no separate style, just duplicate \ifdefined\yquant@lang@attr@value% \PackageError{yquant.sty}{Placeholder initialization must not have value}% {You must not provide a description for an invisible register.} \else% \let\yquant@lang@attr@value=\empty% \fi% \yquant@lang@create@parse@name#1[;% } \yquant@langhelper@declare@command@create{qubit}\yquant@lang@@qubit \yquant@langhelper@setup@attrs{qubit}{}{after,value,ancilla,in,out,inout} \def\yquant@lang@@qubit#1{% \let\yquant@lang@create@type=\yquant@register@type@q% \def\yquant@lang@create@style{qubit}% \unless\ifdefined\yquant@lang@attr@value% \let\yquant@lang@attr@value=\yquant@config@register@default@name% \fi% \yquant@lang@create@parse@name#1[;% } \yquant@langhelper@declare@command@create{cbit}\yquant@lang@@cbit \yquant@langhelper@setup@attrs{cbit}{}{after,value,ancilla,in,out,inout} \def\yquant@lang@@cbit#1{% \let\yquant@lang@create@type=\yquant@register@type@c% \def\yquant@lang@create@style{cbit}% \unless\ifdefined\yquant@lang@attr@value% \let\yquant@lang@attr@value=\yquant@config@register@default@name% \fi% \yquant@lang@create@parse@name#1[;% } \yquant@langhelper@declare@command@create{qubits}\yquant@lang@@qubits \yquant@langhelper@setup@attrs{qubits}{}{after,value,ancilla,in,out,inout} \def\yquant@lang@@qubits#1{% \let\yquant@lang@create@type=\yquant@register@type@qs% \def\yquant@lang@create@style{qubits}% \unless\ifdefined\yquant@lang@attr@value% \let\yquant@lang@attr@value=\yquant@config@register@default@name% \fi% \yquant@lang@create@parse@name#1[;% } \def\yquant@lang@create@parse@name#1[#2;{% \ifstrempty{#2}{% \yquant@lang@create@do#1[1][;% }{% \yquant@lang@create@do#1[#2;% }% } \protected\def\yquant@lang@create@do#1[#2]#3[;{% % parse length \ifstrempty{#3}{% \yquant@langhelper@validate\len\count{#2}% \ifnum\len<1 % \PackageError{yquant.sty}{Invalid register length}% {Valid register lengths are integers greater or equal to one.}% \fi% }{% \PackageError{yquant.sty}{Invalid register name}% {Register names must not contain `[' apart from register length indication.}% }% \edef\reg{\trim@spaces{#1}}% % we allow for scattering, so check whether the register already exists \ifcsname\yquant@prefix registerhigh@\reg\endcsname% \ifyquant@firsttoken+{#2}{% \numdef\idx{\csname\yquant@prefix registerhigh@\reg\endcsname+1}% \numdef\len{\len+\idx}% }{% \PackageError{yquant.sty}{Duplicate registers}% {Register `\reg' was already defined. Use `\reg[+#2]' with explicit plus symbol to indicate that you want to enlarge the register on purpose.}% }% \else% \def\idx{0}% \fi% % define text macros \ifnum\len=1 % \let\regidx=\reg% \else% \def\regidx{\reg[\idx]}% \fi% \numdef\yquant@circuit@operator@mintarget{\csname\yquant@prefix registers\endcsname+1}% % create the registers \begingroup% % if we have the after attribute, we start with a discarded wire \ifdefined\yquant@lang@attr@after% \ifdefined\yquant@lang@attr@input% \PackageError{yquant.sty}{An input register cannot be created with `after` attribute}{}% \fi% \let\yquant@lang@create@type=\yquant@register@type@none% \fi% \yquant@for \idx := \idx to \numexpr \len -1\relax {% \yquant@prepare@create\reg\idx\yquant@lang@create@type% }% \endgroup% % gather details about the created registers \letcs\yquant@circuit@operator@maxtarget{\yquant@prefix registers}% \numdef\yquant@circuit@operator@numtarget{\yquant@circuit@operator@maxtarget-\yquant@circuit@operator@mintarget+1}% \edef\yquant@circuit@operator@targets{% \yquant@list@range% \yquant@circuit@operator@mintarget% \yquant@circuit@operator@maxtarget% }% \let\yquant@circuit@operator@pctrls=\empty% \def\yquant@circuit@operator@minpctrl{2147483647}% \def\yquant@circuit@operator@maxpctrl{0}% \let\yquant@circuit@operator@numpctrl=\yquant@circuit@operator@maxpctrl% \let\yquant@circuit@operator@nctrls=\empty% \let\yquant@circuit@operator@minnctrl=\yquant@circuit@operator@minpctrl% \let\yquant@circuit@operator@maxnctrl=\yquant@circuit@operator@maxpctrl% \let\yquant@circuit@operator@numnctrl=\yquant@circuit@operator@numpctrl% \let\yquant@circuit@operator@minctrl=\yquant@circuit@operator@mintarget% \let\yquant@circuit@operator@maxctrl=\yquant@circuit@operator@maxtarget% % if we have the after attribute, we fake an align gate \ifdefined\yquant@lang@attr@after% \edef\jointindices{\yquant@circuit@operator@targets\yquant@lang@attr@after}% \yquant@circuit@align\jointindices% % and we also need to change the wire after the alignment \let\yquant@circuit@settype@to=\yquant@lang@create@type% \let\yquant@prepare@callback@prepare=\yquant@circuit@settype@prepare% \let\yquant@prepare@callback@draw=\yquant@circuit@settype% \expandafter\@thirdofthree% \else% \expandafter\@firstofone% \fi% % unless there is no name, no text and no after attribute, we now need an init gate {% \ifx\yquant@lang@attr@value\empty% \expandafter\@firstofone% \else% \expandafter\@secondoftwo% \fi% }% {% \ifx\yquant@lang@attr@name\empty% \expandafter\@gobble% \else% \expandafter\@firstofone% \fi% }% {% % there are no multi inits in this context \preto\yquant@attrs@remaining{internal/move label,}% \def\yquant@config@operator@minimum@width{0pt}% \unless\ifx\yquant@lang@attr@value\empty% % make sure to immediately remove the "clear" marker again if we have a text \yquant@for \i := \yquant@circuit@operator@mintarget to \yquant@circuit@operator@maxtarget {% \yquant@register@execclear@lastgate{\i}{init}% }% \fi% \expandafter\yquant@prepare% \expandafter{\yquant@lang@attr@value}% {/yquant/every label, /yquant/every initial label,% /yquant/every \yquant@lang@create@style\space label,% \ifnum\yquant@compat<2 \ifdefined\yquant@lang@attr@input /yquant/every input label\fi\fi}% \unless\ifx\yquant@lang@attr@name\empty% \ifnum\len=1 % \csxappto{\yquant@prefix draw}% {\yquant@draw@alias{\yquant@lang@attr@name}}% \fi% \fi% }% } % END_FOLD % BEGIN_FOLD Define own gates \def\yquantdefinegate#1{% \ifcsname yquant@lang@#1\endcsname% \PackageError{yquant.sty}{Gate redefined}% {The gate `#1' already exists. Use \string\yquantredefinegate\space if you really want to redefine it.}% \fi% \@ifnextchar[{\yquantdefinegate@i{#1}}% {\yquantdefinegate@i{#1}[/yquant/operators/every custom gate]}% } % while this command is provided to redefine gates, we do not clear the attributes that were once assigned to the previous one, so gate redefinition is discouraged! \def\yquantredefinegate#1{% \unless\ifcsname yquant@lang@#1\endcsname% \PackageError{yquant.sty}{Unknown gate redefined}% {The gate `#1' is unknown and cannot be redefined. Use \string\yquantdefinegate\space to define it.}% \fi% \@ifnextchar[{\yquantdefinegate@i{#1}}% {\yquantdefinegate@i{#1}[/yquant/operators/every custom gate]}% } \protected\long\def\yquantdefinegate@i#1[#2]#3{% \begingroup% \yquant@prepare@ifs@set% % usually, we will not be in a tikzpicture here, so all the commands that abbreviate some path operation are undefined! \tikz@installcommands% % While we want the content to be expanded, protect the most likely TikZ commands - the same ones that we usually substitute in \yquant@env@substikz. \let\path=\yquant@protectedempty% \let\scoped=\path% \let\scope=\path% \let\endscope=\path% \let\stopscope=\path% \protected@edef\yquantdefinegate@do{% \endgroup% \noexpand\pgfkeys{/yquant/operators/every #1/.code={% \yquant@config@operator@subcircuit@mangling@set{% \yquant@config@operator@subcircuit@mangling% }% \noexpand\pgfkeysalso{\unexpanded{#2}}% }}% \yquant@langhelper@declare@command% {#1}% \yquant@register@get@multiaslist% {% \let\noexpand\yquant@lang@attr@value=\expandafter\noexpand\csname yquant@lang@@#1\endcsname% \yquant@prepare@subcircuit{/yquant/operators/every #1}% }% % This does not clear the attributes for redefines, but makes at least sure nothing is marked as required that should not be. \yquant@langhelper@setup@attrs{#1}{}{}% % Now define the gate's content as a macro \def\expandafter\noexpand\csname yquant@lang@@#1\endcsname{% #3% }% }% \yquantdefinegate@do% } \def\yquantdefinebox#1{% \ifcsname yquant@lang@#1\endcsname% \PackageError{yquant.sty}{Gate redefined}% {The gate `#1' already exists. Use \string\yquantredefinebox\space if you really want to redefine it.}% \fi% \yquantdefinebox@{#1}{}% } \def\yquantdefinemultibox#1{% \ifcsname yquant@lang@#1\endcsname% \PackageError{yquant.sty}{Gate redefined}% {The gate `#1' already exists. Use \string\yquantredefinemultibox\space if you really want to redefine it.}% \fi% \yquantdefinebox@{#1}\yquant@register@get@allowmultitrue% } \def\yquantredefinebox#1{% \unless\ifcsname yquant@lang@#1\endcsname% \PackageError{yquant.sty}{Unknown gate redefined}% {The gate `#1' is unknown and cannot be redefined. Use \string\yquantdefinebox\space to define it.}% \fi% \yquantdefinebox@{#1}{}% } \def\yquantredefinemultibox#1{% \unless\ifcsname yquant@lang@#1\endcsname% \PackageError{yquant.sty}{Unknown gate redefined}% {The gate `#1' is unknown and cannot be redefined. Use \string\yquantdefinemultibox\space to define it.}% \fi% \yquantdefinebox@{#1}\yquant@register@get@allowmultitrue% } \def\yquantdefinebox@#1#2{% \@ifnextchar[{\yquantdefinebox@i{#1}{#2}}% {\yquantdefinebox@i{#1}{#2}[/yquant/operators/every rectangular box]}% } \protected\long\def\yquantdefinebox@i#1#2[#3]#4{% \pgfkeys{/yquant/operators/every #1/.style={#3}}% \begingroup% \yquant@prepare@ifs@set% \protected@edef\yquantdefinebox@do{% \endgroup% \yquant@langhelper@declare@command% {#1}% {\unexpanded{#2}}% {\yquant@prepare{#4}{/yquant/operators/every #1}}% }% \yquantdefinebox@do% \yquant@langhelper@setup@attrs{#1}{}{}% } % END_FOLD % BEGIN_FOLD Box registers % all-purpose box with arbitrary text \yquant@langhelper@declare@command% {box}% \yquant@register@get@allowmultitrue% {% \expandafter\yquant@prepare% \expandafter{\yquant@lang@attr@value}% {/yquant/operators/every box}% } \yquant@langhelper@setup@attrs{box}{value}{} \yquant@langhelper@declare@command% {text}% \yquant@register@get@allowmultitrue% {% \expandafter\yquant@prepare% \expandafter{\yquant@lang@attr@value}% {/yquant/operators/every text}% } \yquant@langhelper@setup@attrs{text}{value}{} % Hadamard \yquantdefinebox{h}{$H$} % Pauli X (or NOT) \yquantdefinebox{x}[/yquant/operators/every pauli]{$X$} % Pauli Y \yquantdefinebox{y}[/yquant/operators/every pauli]{$Y$} % Pauli Z \yquantdefinebox{z}[/yquant/operators/every pauli]{$Z$} % sub-circuit: This is a nested circuit. \yquant@langhelper@declare@command% {subcircuit}% \yquant@register@get@multiaslist% {% \yquant@prepare@subcircuit{/yquant/operators/every subcircuit}% } \yquant@langhelper@setup@attrs{subcircuit}{value}{frameless,seamless,name mangling} % END_FOLD % BEGIN_FOLD other geometric shapes % phase \yquant@langhelper@declare@command% {phase}% {}% {% \edef\cmd{% \yquant@prepare% {}% {/yquant/operators/every phase, label={\unexpanded\expandafter{\yquant@lang@attr@value}}}% }% \cmd% } \yquant@langhelper@setup@attrs{phase}{value}{}% % two-qubit controlled x (symmetric notation) \yquant@langhelper@declare@command% {xx}% \yquant@register@get@multiassingle% {% \yquant@prepare% {}% {/yquant/operators/every xx}% } \yquant@langhelper@setup@attrs{xx}{}{} % two-qubit controlled phase (symmetric notation) \yquant@langhelper@declare@command@uncontrolled% {zz}% \yquant@register@get@multiassingle% {% \yquant@prepare% {}% {/yquant/operators/every zz}% } \yquant@langhelper@setup@attrs{zz}{}{} % slash (pseudo-operator, alternative indication for a bundle) \yquant@langhelper@declare@command@uncontrolled% {slash}% {}% {% % temporarily squeeze most into the separation \pgfkeys{% /yquant/operator/minimum width=0pt,% }% \preto\yquant@attrs@remaining{internal/squeeze slash,}% \yquant@prepare% {}% {/yquant/operators/every slash}% } \yquant@langhelper@setup@attrs{slash}{}{} % swap \yquant@langhelper@declare@command% {swap}% \yquant@register@get@multiassingle {% \yquant@prepare% {}% {/yquant/operators/every swap}% } \yquant@langhelper@setup@attrs{swap}{}{} % not \yquant@langhelper@declare@command% {not}% {}% {% \yquant@prepare% {}% {/yquant/operators/every not}% } \yquant@langhelper@setup@attrs{not}{}{} % alias to cnot \yquant@langhelper@declare@command@alias{cnot}{not} \yquant@langhelper@setup@attrs{cnot}{}{} % measure \yquant@langhelper@declare@command@uncontrolled% {measure}% \yquant@register@get@allowmultitrue% {% \ifdefined\yquant@lang@attr@type% \yquant@register@type@fromstring\yquant@lang@attr@type\yquant@circuit@settype@to% \else% \let\yquant@circuit@settype@to=\yquant@register@type@c% \fi% \let\yquant@prepare@callback@prepare=\yquant@circuit@settype@prepare% \let\yquant@prepare@callback@draw=\yquant@circuit@settype% \unless\ifcsname yquant@lang@attr@value\endcsname% \let\yquant@lang@attr@value=\empty% \fi% \ifdefined\yquant@lang@attr@directcontrol% % direct control means that we must defer this operator until the next that has this/these targets as positive controls. \expandafter\yquant@prepare@injection% \expandafter{\yquant@lang@attr@value}% {/yquant/operators/every measure}% \else% \expandafter\yquant@prepare% \expandafter{\yquant@lang@attr@value}% {/yquant/operators/every measure}% \fi% } \yquant@langhelper@setup@attrs{measure}{}{value,type,direct control,indirect control} % measure (dmeter) \yquant@langhelper@declare@command@uncontrolled% {dmeter}% \yquant@register@get@allowmultitrue% {% \ifdefined\yquant@lang@attr@type% \yquant@register@type@fromstring\yquant@lang@attr@type\yquant@circuit@settype@to% \else% \let\yquant@circuit@settype@to=\yquant@register@type@c% \fi% \let\yquant@prepare@callback@prepare=\yquant@circuit@settype@prepare% \let\yquant@prepare@callback@draw=\yquant@circuit@settype% \unless\ifcsname yquant@lang@attr@value\endcsname% \let\yquant@lang@attr@value=\empty% \fi% \expandafter\yquant@prepare% \expandafter{\yquant@lang@attr@value}% {/yquant/operators/every dmeter}% } \yquant@langhelper@setup@attrs{dmeter}{}{value,type} % END_FOLD % BEGIN_FOLD miscellaneous \yquant@langhelper@declare@command@uncontrolled% {barrier}% \yquant@register@get@allowmultitrue% {% \yquant@prepare% {}% {/yquant/operators/every barrier}% }% \yquant@langhelper@setup@attrs{barrier}{}{} \yquant@langhelper@declare@command@uncontrolled% {correlate}% {% % do not call \yquant@register@get@multiassingle, we do not want to install a different multi line style! \yquant@register@get@allowmultitrue% \let\yquant@register@multi@splitparts=\yquant@register@multi@splitparts@sepall% }{% \yquant@prepare% {}% {/yquant/operators/every wave}% } \yquant@langhelper@setup@attrs{correlate}{}{} \yquant@langhelper@declare@command@uncontrolled% {align}% {}% {% \yquant@circuit@align\yquant@circuit@operator@targets% } \yquant@langhelper@setup@attrs{align}{}{} \yquant@langhelper@declare@command@uncontrolled% {hspace}% {% \yquant@langhelper@validate\amount\dimen\yquant@lang@attr@value% }{% \yquant@circuit@hspace\yquant@circuit@operator@targets\amount% } \yquant@langhelper@setup@attrs{hspace}{value}{} \yquant@langhelper@declare@command@uncontrolled% {discard}% {}% {% \let\yquant@circuit@settype@to=\yquant@register@type@none% \yquant@circuit@actonwires% \yquant@circuit@settype@prepare% \yquant@circuit@settype% \yquant@circuit@operator@targets% {}% } \yquant@langhelper@setup@attrs{discard}{}{} \yquant@langhelper@declare@command@uncontrolled% {init}% {% \yquant@register@get@allowmultitrue% \let\yquant@config@register@default@lazyname=\empty% % we will count how many registers contain the "clean" flag, and only if this is equal to the number of targets, we apply the shift. \count8=0 % }% {% \ifdefined\yquant@lang@attr@type% \yquant@register@type@fromstring\yquant@lang@attr@type\yquant@circuit@settype@to% \else% % We don't know which type is desired. Scan all target registers and use the first wire that is available as a type. \let\yquant@circuit@settype@to=\yquant@register@type@none% \forlistloop\yquant@lang@@init@loop\yquant@circuit@operator@targets% \ifx\yquant@circuit@settype@to\yquant@register@type@none% % now we don't have a clue; assume it's a qubit \let\yquant@circuit@settype@to=\yquant@register@type@q% \fi% \edef\yquant@lang@attr@type{% \yquant@register@type@tostring\yquant@circuit@settype@to% }% \fi% \let\yquant@prepare@callback@prepare=\yquant@circuit@settype@prepare% \let\yquant@prepare@callback@draw=\yquant@circuit@settype% \let\yquant@prepare@multi=\yquant@prepare@multiinit% \ifnum\count8=\numexpr\yquant@circuit@operator@maxctrl-\yquant@circuit@operator@minctrl+1\relax% \def\yquant@config@operator@minimum@width{0pt}% \preto\yquant@attrs@remaining{internal/move label,}% \edef\cmd{% \yquant@prepare% {\unexpanded\expandafter{\yquant@lang@attr@value}}% {/yquant/every label, /yquant/every initial label,% /yquant/every \yquant@lang@attr@type\space label}% }% \else% \edef\cmd{% \yquant@prepare% {\unexpanded\expandafter{\yquant@lang@attr@value}}% {/yquant/every label, /yquant/every \yquant@lang@attr@type\space label}% }% \fi% \cmd% } \yquant@langhelper@setup@attrs{init}{value}{type} \protected\def\yquant@lang@@init@loop#1{% \ifyquant@firsttoken\yquant@register@multi{#1}{% \let\yquant@register@multi@contiguous=\yquant@lang@@init@multi@@extract% \@fifthoffive#1% % we should reset multi@contiguous to the original command; but this is really just a placeholder. As long as it is \protected, everything is fine. }{% \edef\yquant@circuit@settype@to{\yquant@register@get@type{#1}}% }% \unless\ifx\yquant@circuit@settype@to\yquant@register@type@none% \expandafter\listbreak% \fi% } \protected\def\yquant@lang@@init@multi@@extract#1#2#3{% \yquant@for \yquant@i := #1 to #2 {% \edef\yquant@circuit@settype@to{\yquant@register@get@type\yquant@i}% \unless\ifx\yquant@circuit@settype@to\yquant@register@type@none% \expandafter\yquant@for@break% \fi% }% } \yquant@langhelper@declare@command@uncontrolled% {output}% \yquant@register@get@allowmultitrue% \yquant@circuit@output% \yquant@langhelper@setup@attrs{output}{value}{} \yquant@langhelper@declare@command@uncontrolled% {inspect}% \yquant@register@get@allowmultitrue% {% \expandafter\yquant@prepare% \expandafter{\yquant@lang@attr@value}% {/yquant/operators/every inspect}% } \yquant@langhelper@setup@attrs{inspect}{value}{} \yquant@langhelper@declare@command@uncontrolled% {settype}% {}% {% \yquant@register@type@fromstring\yquant@lang@attr@value\yquant@circuit@settype@to% \yquant@circuit@actonwires% \yquant@circuit@settype@prepare% \yquant@circuit@settype% \yquant@circuit@operator@targets% {}% } \yquant@langhelper@setup@attrs{settype}{value}{} \ifnum\yquant@compat<2 % \def\yquant@lang@setwire{% \PackageWarning{yquant.sty}{`setwire' gate is deprecated as of yquant 0.1.2. Use `settype' instead.}% \yquant@lang@settype% } \yquant@langhelper@setup@attrs{setwire}{value}{} \fi \yquant@langhelper@declare@command@uncontrolled% {setstyle}% {}% {% \yquant@circuit@actonwires% \@gobbletwo% \yquant@circuit@setstyle% \yquant@circuit@operator@targets% {{\yquant@lang@attr@value}}% } \yquant@langhelper@setup@attrs{setstyle}{value}{} \yquant@langhelper@declare@command@uncontrolled% {addstyle}% {}% {% \yquant@circuit@actonwires% \@gobbletwo% \yquant@circuit@addstyle% \yquant@circuit@operator@targets% {{\yquant@lang@attr@value}}% } \yquant@langhelper@setup@attrs{addstyle}{value}{} % END_FOLD