package Ġx . scratch Ċ Ċ import Ġx . scratch . Pa uli . Companion . sigma I Ċ import Ġx . scratch . Pa uli . Companion . sigma X Ċ import Ġx . scratch . Pa uli . Companion . sigma Y Ċ import Ġx . scratch . Pa uli . Companion . sigma Z Ċ Ċ private Ġval ĠZ Ġ= ĠComplex . ZERO Ċ private Ġval ĠU Ġ= ĠComplex . ONE Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln (" == ĠPA UL I ") ĊĠĠĠ Ġprintln (" Ïĥ âĤ Ģ Ġ-> Ġ${ sigma I . to Full String () }") ĊĠĠĠ Ġprintln (" Ïĥ âĤģ Ġ-> Ġ${ sigma X . to Full String () }") ĊĠĠĠ Ġprintln (" Ïĥ âĤģ Â² Ġ-> Ġ${ sigma X Ġ* Ġsigma X }") ĊĠĠĠ Ġprintln (" Ïĥ âĤģ Ïĥ âĤĤ Ġ-> Ġ${ sigma X Ġ* Ġsigma Y } Ġ(- Ïĥ âĤĤ Ïĥ âĤģ Ġ-> Ġ${ - sigma Y Ġ* Ġsigma X }) ") ĊĠĠĠ Ġprintln (" Ïĥ âĤģ Ïĥ âĤ ĥ Ġ-> Ġ${ sigma X Ġ* Ġsigma Z }") ĊĠĠĠ Ġprintln (" Ïĥ âĤĤ Ġ-> Ġ${ sigma Y . to Full String () }") ĊĠĠĠ Ġprintln (" Ïĥ âĤĤ Â² Ġ-> Ġ${ sigma Y Ġ* Ġsigma Y }") ĊĠĠĠ Ġprintln (" Ïĥ âĤĤ Ïĥ âĤģ Ġ-> Ġ${ sigma Y Ġ* Ġsigma X }") ĊĠĠĠ Ġprintln (" Ïĥ âĤĤ Ïĥ âĤ ĥ Ġ-> Ġ${ sigma Y Ġ* Ġsigma Z }") ĊĠĠĠ Ġprintln (" Ïĥ âĤ ĥ Ġ-> Ġ${ sigma Z . to Full String () }") ĊĠĠĠ Ġprintln (" Ïĥ âĤ ĥ Â² Ġ-> Ġ${ sigma Z Ġ* Ġsigma Z }") ĊĠĠĠ Ġprintln (" Ïĥ âĤ ĥ Ïĥ âĤģ Ġ-> Ġ${ sigma Z Ġ* Ġsigma X }") ĊĠĠĠ Ġprintln (" Ïĥ âĤ ĥ Ïĥ âĤĤ Ġ-> Ġ${ sigma Z Ġ* Ġsigma Y }") Ċ } Ċ Ċ class ĠPa uli Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġn : ĠInt , ĊĠĠĠ Ġval Ġa : ĠComplex , ĊĠĠĠ Ġval Ġb : ĠComplex , ĊĠĠĠ Ġval Ġc : ĠComplex , ĊĠĠĠ Ġval Ġd : ĠComplex Ċ ) Ġ{ ĊĠĠĠ Ġval Ġdet : ĠComplex Ġget () Ġ= Ġa Ġ* Ġd Ġ- Ġb Ġ* Ġc ĊĠĠĠ Ġval Ġtr : ĠComplex Ġget () Ġ= Ġa Ġ+ Ġd ĊĠĠĠ Ġval Ġcomplex Con j ug ate : ĠPa uli Ġget () Ġ= Ġ- sigma Y Ġ* Ġthis Ġ* Ġsigma Y ĊĠĠĠ Ġval Ġconj ug ate Transpose : ĠPa uli ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠPa uli ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . conj ug ate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . conj ug ate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . conj ug ate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd . conj ug ate ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoperator Ġfun Ġunary Plus () Ġ= Ġthis ĊĠĠĠ Ġoperator Ġfun Ġunary Minus () Ġ= ĠPa uli (- n , Ġ- a , Ġ- b , Ġ- c , Ġ- d ) ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( multip lic and : ĠPa uli ): ĠPa uli Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPa uli ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ* Ġmultip lic and . a Ġ+ Ġb Ġ* Ġmultip lic and . c , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ* Ġmultip lic and . b Ġ+ Ġb Ġ* Ġmultip lic and . d , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ* Ġmultip lic and . a Ġ+ Ġd Ġ* Ġmultip lic and . c , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ* Ġmultip lic and . b Ġ+ Ġd Ġ* Ġmultip lic and . d ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠU Ġ== Ġa Ġ&& ĠZ Ġ== Ġb Ġ&& ĠZ Ġ== Ġc Ġ&& ĠU Ġ== Ġd Ġ-> Ġ" I " ĊĠĠĠĠĠĠĠ Ġthis Ġ== Ġsigma X Ġ-> Ġ" Ïĥ âĤģ " ĊĠĠĠĠĠĠĠ Ġthis Ġ== Ġsigma Y Ġ-> Ġ" Ïĥ âĤĤ " ĊĠĠĠĠĠĠĠ Ġthis Ġ== Ġsigma Z Ġ-> Ġ" Ïĥ âĤ ĥ " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"! Ïĥ âĤ Ļ ${ to Matrix String () }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Matrix String () Ġ= Ġ" [$ a , Ġ$ b ; Ġ$ c , Ġ$ d ]" ĊĊĠĠĠ Ġfun Ġto Full String () Ġ= ĊĠĠĠĠĠĠĠ Ġ"${ to Matrix String ()}; Ġdet =$ det ; Ġtr =$ tr ; Ġc . c . =$ complex Con j ug ate , Ġc . t . =$ conj ug ate Transpose " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsigma I Ġ= ĠPa uli ( 0 , ĠU , ĠZ , ĠZ , ĠU ) ĊĠĠĠĠĠĠĠ Ġval Ġsigma X Ġ= Ġsigma ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġsigma Y Ġ= Ġsigma ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsigma Z Ġ= Ġsigma ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsigma ( n : ĠInt ) Ġ= ĠPa uli ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex ( dir ac ( n , Ġ 3 ), Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex ( dir ac ( n , Ġ 1 ), Ġ- dir ac ( n , Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex ( dir ac ( n , Ġ 1 ), Ġdir ac ( n , Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex (- dir ac ( n , Ġ 3 ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdir ac ( a : ĠInt , Ġb : ĠInt ) Ġ= Ġif Ġ( a Ġ== Ġb ) Ġ 1 Ġelse Ġ 0 Ċ