Giter VIP home page Giter VIP logo

yaoarrayregister.jl's Introduction

YaoArrayRegister

Build Status Codecov Coveralls

Simulated Full Amplitude Quantum Register.

Introduction

YaoArrayRegister.jl is a component package in the Yao.jl ecosystem. It provides the most basic functionality for quantum computation simulation in Julia and a quantum register type ArrayReg. You will be able to simulate a quantum circuit alone with this package in principle.

Installation

In Julia v1.0+, please type ] in the REPL to use the package mode, then type this command:

pkg> add YaoArrayRegister

Usage

This package implements AbstractRegister interface defined in YaoBase, you can use it like other kind of registers intuitively.

License

Apache License 2.0

yaoarrayregister.jl's People

Contributors

chenzhao44 avatar giggleliu avatar github-actions[bot] avatar juliatagbot avatar roger-luo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

yaoarrayregister.jl's Issues

`instruct!` ambiguity error in julia1.2

A compiler bug, has been fixed in later version.
Need to fix to keep compatibility.

 MethodError: instruct!(::Array{Complex{Float64},1}, ::PermMatrix{Complex{Float64},Int64,Array{Complex{Float64},1},Array{Int64,1}}, ::Tuple{}, ::Tuple{}, ::Tuple{}) is ambiguous. Candidates:
    instruct!(state::Union{AbstractArray{T,1}, AbstractArray{T,2}}, operator::AbstractArray{T,2}, locs::Tuple{}, control_locs::Tuple{Vararg{Int64,C}}, control_bits::Tuple{Vararg{Int64,C}}) where {T, M, C} in YaoArrayRegister at /home/leo/.julia/dev/YaoArrayRegister/src/instruct.jl:72
    instruct!(state::Union{AbstractArray{T1,1}, AbstractArray{T1,2}}, operator::AbstractArray{T2,2}, locs::Tuple{}, control_locs::Tuple{Vararg{Int64,C}}, control_bits::Tuple{Vararg{Int64,C}}) where {T1, T2, M, C} in YaoArrayRegister at /home/leo/.julia/dev/YaoArrayRegister/src/instruct.jl:26
  Possible fix, define
    instruct!(::Union{AbstractArray{T1,1}, AbstractArray{T1,2}}, ::Union{AbstractArray{T1,2}, AbstractArray{T1,2}}, ::Tuple{}, ::Union{Tuple{Vararg{Int64,C}}, Tuple{Vararg{Int64,C}}}, ::Union{Tuple{Vararg{Int64,C}}, Tuple{Vararg{Int64,C}}})

Port Yao/#158

It seems some functions of PR: QuantumBFS/Yao.jl#158
is missed.

I'll leave this after we release v0.4 and port them as bugfix later. This won't influence Yao at all.

  • measure operators
  • fix measure for focused register's

But I need some explanation on the dropzeros function.

glossary

  • tracedist -> trace_distance: we don't use abbreviations (if not too long) in our package.
  • register is removed.

measured state is not correctly normalized

As a physical operation, state after each measure should be normalized

MWE:

st = rand_state(5; nbatch=3)
measure_collapseto!(st; config=7)

julia> st.state
32×3 Array{Complex{Float64},2}:
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
 0.343615+0.939111im  -0.994154-0.107973im  -0.440139-0.89793im
                                                              
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im    
      0.0+0.0im             0.0+0.0im             0.0+0.0im   

switch to BQCESubroutine

benchmark

accelerated
                                   ┌                                        ┐ 
      generic-5-bits-4x4-vector-gate ┤■■■■■■■■■■■ 15.58253912224968             
      generic-5-bits-4x4-vector-ctrl ┤■■■■ 2.99557650471356                     
      generic-5-bits-4x4-matrix-gate ┤■■■ 2.4223845898372636                    
      generic-5-bits-4x4-matrix-ctrl ┤■■■ 2.1677876689746127                    
      generic-5-bits-8x8-vector-gate ┤■■■■■■■■■■ 12.315085013053446             
      generic-5-bits-8x8-vector-ctrl ┤■■■■ 2.960356200527704                    
      generic-5-bits-8x8-matrix-gate ┤■ 1.300189393939394                       
      generic-5-bits-8x8-matrix-ctrl ┤■ 1.292032292032292                       
      generic-5-bits-2x2-vector-gate ┤■ 1.339591575384756                       
      generic-5-bits-2x2-vector-ctrl ┤■■■■■■■■■■■■■■■■■■ 105.08468305516732     
      generic-5-bits-2x2-matrix-gate ┤■ 1.4268933680698386                      
      generic-5-bits-2x2-matrix-ctrl ┤■■■■■■ 4.4571091908876665                 
    generic-5-bits-16x16-vector-gate ┤■■■■ 3.0721776319643794                   
    generic-5-bits-16x16-vector-ctrl ┤■■ 1.7731806894229556                     
    generic-5-bits-16x16-matrix-gate ┤■■ 1.5161637206801533                     
    generic-5-bits-16x16-matrix-ctrl ┤■ 1.4415983606557377                      
     generic-20-bits-4x4-vector-gate ┤■■ 1.6766171352407673                     
     generic-20-bits-4x4-vector-ctrl ┤■■ 1.6065896229422714                     
     generic-20-bits-4x4-matrix-gate ┤■ 1.4334745997831677                      
     generic-20-bits-4x4-matrix-ctrl ┤■ 1.4041770074401545                      
     generic-20-bits-8x8-vector-gate ┤■■ 1.5294617661180618                     
     generic-20-bits-8x8-vector-ctrl ┤■■ 1.5083935715688992                     
     generic-20-bits-8x8-matrix-gate ┤ 1.023477935973633                        
     generic-20-bits-8x8-matrix-ctrl ┤ 1.0039493106327253                       
     generic-20-bits-2x2-vector-gate ┤■ 1.4448626601452097                      
     generic-20-bits-2x2-vector-ctrl ┤■ 1.1380407059927953                      
     generic-20-bits-2x2-matrix-gate ┤■ 1.2240444281101275                      
     generic-20-bits-2x2-matrix-ctrl ┤ 1.1271734554605104                       
   generic-20-bits-16x16-vector-gate ┤ 1.0630809807594666                       
   generic-20-bits-16x16-vector-ctrl ┤ 1.087661552241543                        
   generic-20-bits-16x16-matrix-gate ┤■ 1.2090286546998976                      
   generic-20-bits-16x16-matrix-ctrl ┤■ 1.1768938940399867                      
     generic-10-bits-4x4-vector-gate ┤■■■■■ 3.5660406642868234                  
     generic-10-bits-4x4-vector-ctrl ┤■■■■ 2.56120527306968                     
     generic-10-bits-4x4-matrix-gate ┤■■ 1.6972077393974163                     
     generic-10-bits-4x4-matrix-ctrl ┤■■ 1.6917469850341453                     
     generic-10-bits-8x8-vector-gate ┤■■■■ 2.5409226684367736                   
     generic-10-bits-8x8-vector-ctrl ┤■■■ 2.2557427258805514                    
     generic-10-bits-8x8-matrix-gate ┤ 1.0495268506045337                       
     generic-10-bits-8x8-matrix-ctrl ┤ 1.0048328280831247                       
     generic-10-bits-2x2-vector-gate ┤■■ 1.4757211321095938                     
     generic-10-bits-2x2-vector-ctrl ┤■■■■■■■■ 7.238884186641215                
     generic-10-bits-2x2-matrix-gate ┤■ 1.3908083481371376                      
     generic-10-bits-2x2-matrix-ctrl ┤■■ 1.559864780383894                      
   generic-10-bits-16x16-vector-gate ┤■■ 1.592852938121126                      
   generic-10-bits-16x16-vector-ctrl ┤■■ 1.475260969192905                      
   generic-10-bits-16x16-matrix-gate ┤■ 1.319827504501943                       
   generic-10-bits-16x16-matrix-ctrl ┤■ 1.2992493235954659                      
     generic-15-bits-4x4-vector-gate ┤■■ 1.7347507790484427                     
     generic-15-bits-4x4-vector-ctrl ┤■■ 1.7211907449209933                     
     generic-15-bits-4x4-matrix-gate ┤■ 1.4345403803871921                      
     generic-15-bits-4x4-matrix-ctrl ┤■ 1.4035894277302108                      
     generic-15-bits-8x8-vector-gate ┤■■ 1.5017297241949286                     
     generic-15-bits-8x8-vector-ctrl ┤■■ 1.5759586495607227                     
     generic-15-bits-8x8-matrix-gate ┤ 1.0252236256831087                       
     generic-15-bits-8x8-matrix-ctrl ┤ 1.0006324127232797                       
     generic-15-bits-2x2-vector-gate ┤■■ 1.541658347357312                      
     generic-15-bits-2x2-vector-ctrl ┤■ 1.4361827526050261                      
     generic-15-bits-2x2-matrix-gate ┤■ 1.2916641541401477                      
     generic-15-bits-2x2-matrix-ctrl ┤■ 1.2222506962749458                      
   generic-15-bits-16x16-vector-gate ┤ 1.1043242109446585                       
   generic-15-bits-16x16-vector-ctrl ┤ 1.123974988641035                        
   generic-15-bits-16x16-matrix-gate ┤■ 1.2109557047631698                      
   generic-15-bits-16x16-matrix-ctrl ┤■ 1.1883408610243433                      
             basic-5-bits-Y-i=4-gate ┤■■■ 2.290481670228506                     
            basic-5-bits-Y-i=4-multi ┤ 1.0378757515030061                       
             basic-5-bits-Y-i=4-ctrl ┤■■■ 1.9452415497877371                    
             basic-5-bits-Y-i=2-gate ┤■■■ 2.40159219013307                      
            basic-5-bits-Y-i=2-multi ┤ 1.0743785476609904                       
             basic-5-bits-Y-i=2-ctrl ┤■■■ 2.1095721925133692                    
             basic-5-bits-Y-i=3-gate ┤■■■ 2.369954389965793                     
            basic-5-bits-Y-i=3-multi ┤ 1.0866990907168534                       
             basic-5-bits-Y-i=3-ctrl ┤■■■ 2.126061188531155                     
             basic-5-bits-Y-i=1-gate ┤■■■■ 2.7561170744716312                   
            basic-5-bits-Y-i=1-multi ┤ 1.0158761659059339                       
             basic-5-bits-Y-i=1-ctrl ┤■■■ 2.1550458251050686                    
             basic-5-bits-Z-i=4-gate ┤■■■ 2.182367447595561                     
             basic-5-bits-Z-i=4-ctrl ┤■■■ 2.3524537922243467                    
             basic-5-bits-Z-i=2-gate ┤■■■■ 2.4858002004677577                   
            basic-5-bits-Z-i=2-multi ┤ 1.0127017841971113                       
             basic-5-bits-Z-i=2-ctrl ┤■■■■ 2.4954938156504443                   
             basic-5-bits-Z-i=3-gate ┤■■■■ 2.718538565629229                    
            basic-5-bits-Z-i=3-multi ┤ 1.0613804334210197                       
             basic-5-bits-Z-i=3-ctrl ┤■■■■ 2.6897972972972974                   
             basic-5-bits-Z-i=1-gate ┤■■■■ 2.9473732718894015                   
             basic-5-bits-Z-i=1-ctrl ┤■■■ 2.3009183615978364                    
             basic-5-bits-S-i=4-gate ┤■ 1.2430705394190873                      
             basic-5-bits-S-i=2-gate ┤■■ 1.644944203083738                      
             basic-5-bits-S-i=3-gate ┤■ 1.4270126299510268                      
             basic-5-bits-S-i=1-gate ┤■■■ 1.9402684563758388                    
          basic-5-bits-Sdag-i=4-gate ┤■■ 1.5824668188350666                     
          basic-5-bits-Sdag-i=2-gate ┤■■■ 2.0072712418300656                    
          basic-5-bits-Sdag-i=3-gate ┤■■■ 1.9490317713136054                    
          basic-5-bits-Sdag-i=1-gate ┤■■■■ 2.6723487824037706                   
             basic-5-bits-X-i=4-gate ┤■■■ 2.407659115426106                     
            basic-5-bits-X-i=4-multi ┤■ 1.1584850264239577                      
             basic-5-bits-X-i=4-ctrl ┤■■■ 2.375725492697238                     
             basic-5-bits-X-i=2-gate ┤■■■ 2.095301463814106                     
            basic-5-bits-X-i=2-multi ┤■ 1.2888392857142859                      
             basic-5-bits-X-i=2-ctrl ┤■■■ 2.2050327839801525                    
             basic-5-bits-X-i=3-gate ┤■■■ 2.4249643210012075                    
            basic-5-bits-X-i=3-multi ┤■ 1.4503768446386724                      
             basic-5-bits-X-i=3-ctrl ┤■■■ 2.346927016645326                     
             basic-5-bits-X-i=1-gate ┤■ 1.2645568828569642                      
            basic-5-bits-X-i=1-multi ┤■ 1.1688009313154832                      
             basic-5-bits-X-i=1-ctrl ┤■■■ 1.963493414792929                     
             basic-5-bits-T-i=4-gate ┤■■■ 2.0719279661016947                    
             basic-5-bits-T-i=2-gate ┤■■■■ 2.507984031936128                    
             basic-5-bits-T-i=3-gate ┤■■■■ 2.636153846153846                    
             basic-5-bits-T-i=1-gate ┤■■■■ 2.5119363395225465                   
          basic-5-bits-Tdag-i=4-gate ┤■■ 1.582220747989054                      
          basic-5-bits-Tdag-i=2-gate ┤■■■ 2.132546786004882                     
          basic-5-bits-Tdag-i=3-gate ┤■■■ 1.9890945980218109                    
          basic-5-bits-Tdag-i=1-gate ┤■■■ 2.323499560186751                     
             basic-5-bits-H-i=4-gate ┤■■■■■■■ 5.548255234297108                 
             basic-5-bits-H-i=2-gate ┤■■■■■■ 5.247779157512657                  
             basic-5-bits-H-i=3-gate ┤■■■■■■■ 6.770911678016058                 
             basic-5-bits-H-i=1-gate ┤■■■■■■ 4.630691399662732                  
           basic-20-bits-Y-i=19-gate ┤■■■ 2.2126308856117265                    
          basic-20-bits-Y-i=19-multi ┤■ 1.2456794074849709                      
           basic-20-bits-Y-i=19-ctrl ┤ 1.0285287291747913                       
           basic-20-bits-Y-i=17-gate ┤■■■ 2.1330017407812654                    
          basic-20-bits-Y-i=17-multi ┤■■ 1.4772956725253545                     
           basic-20-bits-Y-i=17-ctrl ┤ 1.0244957642358168                       
            basic-20-bits-Y-i=2-gate ┤■■ 1.7378695798167645                     
           basic-20-bits-Y-i=2-multi ┤■ 1.3393204851880602                      
            basic-20-bits-Y-i=2-ctrl ┤■■■ 2.124357077432537                     
            basic-20-bits-Y-i=3-gate ┤■■■ 1.9307442709389575                    
           basic-20-bits-Y-i=3-multi ┤■ 1.3911904330565248                      
            basic-20-bits-Y-i=3-ctrl ┤■■ 1.4872219699805906                     
           basic-20-bits-Y-i=18-gate ┤■■■ 2.218354183312597                     
          basic-20-bits-Y-i=18-multi ┤■■ 1.4716542679259057                     
           basic-20-bits-Y-i=18-ctrl ┤ 1.0437289077484604                       
            basic-20-bits-Y-i=1-gate ┤■■ 1.8638641704281025                     
           basic-20-bits-Y-i=1-multi ┤■ 1.3292681056542923                      
            basic-20-bits-Y-i=1-ctrl ┤■ 1.298777128659577                       
           basic-20-bits-Z-i=19-gate ┤■■■■ 2.6053159017358047                   
          basic-20-bits-Z-i=19-multi ┤ 1.0092009111377371                       
           basic-20-bits-Z-i=19-ctrl ┤■■ 1.5424514171717751                     
           basic-20-bits-Z-i=17-gate ┤■■■■ 2.61373486715545                     
           basic-20-bits-Z-i=17-ctrl ┤■■ 1.5316061296736336                     
            basic-20-bits-Z-i=2-gate ┤■■ 1.6524629971102789                     
           basic-20-bits-Z-i=2-multi ┤ 1.0595437593237196                       
            basic-20-bits-Z-i=2-ctrl ┤■■ 1.5036580857315198                     
            basic-20-bits-Z-i=3-gate ┤■■ 1.5362477336172906                     
           basic-20-bits-Z-i=3-multi ┤ 1.0445345101347905                       
            basic-20-bits-Z-i=3-ctrl ┤■■ 1.7241707283675107                     
           basic-20-bits-Z-i=18-gate ┤■■■■ 2.4607139299861323                   
           basic-20-bits-Z-i=18-ctrl ┤■■ 1.5598551169654775                     
            basic-20-bits-Z-i=1-gate ┤■■ 1.6849160218110508                     
           basic-20-bits-Z-i=1-multi ┤ 1.0247475704570632                       
            basic-20-bits-Z-i=1-ctrl ┤■ 1.1810340218495483                      
            basic-20-bits-S-i=2-gate ┤■ 1.1576138203715867                      
            basic-20-bits-S-i=3-gate ┤ 1.0648092017101654                       
            basic-20-bits-S-i=1-gate ┤■ 1.3206360116819753                      
        basic-20-bits-Sdag-i=19-gate ┤■ 1.2172684010396984                      
        basic-20-bits-Sdag-i=17-gate ┤■ 1.1495393147264492                      
         basic-20-bits-Sdag-i=2-gate ┤■ 1.29577453484247                        
         basic-20-bits-Sdag-i=3-gate ┤■ 1.2821588706996505                      
        basic-20-bits-Sdag-i=18-gate ┤■ 1.1634177629973577                      
         basic-20-bits-Sdag-i=1-gate ┤■■ 1.6149877701342255                     
           basic-20-bits-X-i=19-gate ┤■ 1.1528158719929584                      
          basic-20-bits-X-i=19-multi ┤ 1.044199913269731                        
           basic-20-bits-X-i=19-ctrl ┤■ 1.1839513643055548                      
           basic-20-bits-X-i=17-gate ┤■ 1.137853971241215                       
          basic-20-bits-X-i=17-multi ┤ 1.1253260007967767                       
           basic-20-bits-X-i=17-ctrl ┤ 1.0960002518039391                       
            basic-20-bits-X-i=2-gate ┤■ 1.2923798927308                         
           basic-20-bits-X-i=2-multi ┤■ 1.190465392855986                       
            basic-20-bits-X-i=2-ctrl ┤■ 1.377224814238811                       
            basic-20-bits-X-i=3-gate ┤■ 1.4226890186220231                      
           basic-20-bits-X-i=3-multi ┤■ 1.3578488418182106                      
           basic-20-bits-X-i=18-gate ┤■ 1.138788699937322                       
          basic-20-bits-X-i=18-multi ┤■ 1.2086255033616675                      
           basic-20-bits-X-i=18-ctrl ┤■ 1.2384336514847567                      
            basic-20-bits-X-i=1-gate ┤■ 1.215631853673129                       
           basic-20-bits-X-i=1-multi ┤■ 1.1857622346134882                      
            basic-20-bits-X-i=1-ctrl ┤■ 1.198805482610645                       
           basic-20-bits-T-i=19-gate ┤■■■ 2.2079082657241544                    
           basic-20-bits-T-i=17-gate ┤■■ 1.7562473423454605                     
            basic-20-bits-T-i=2-gate ┤■■ 1.4808980158708347                     
            basic-20-bits-T-i=3-gate ┤■■ 1.4936545200911844                     
           basic-20-bits-T-i=18-gate ┤■■ 1.8640790432975332                     
            basic-20-bits-T-i=1-gate ┤■■ 1.6047847502078936                     
        basic-20-bits-Tdag-i=19-gate ┤■ 1.3848259976290622                      
        basic-20-bits-Tdag-i=17-gate ┤■ 1.410509363354158                       
         basic-20-bits-Tdag-i=2-gate ┤■ 1.360149099849314                       
         basic-20-bits-Tdag-i=3-gate ┤■■■■ 2.7680323139065206                   
        basic-20-bits-Tdag-i=18-gate ┤■ 1.4334660408116455                      
         basic-20-bits-Tdag-i=1-gate ┤■■ 1.5136773442397826                     
           basic-20-bits-H-i=19-gate ┤■■■ 2.1856112003724375                    
           basic-20-bits-H-i=17-gate ┤■■■ 2.0795656544328764                    
            basic-20-bits-H-i=2-gate ┤■■■■ 2.674546502780534                    
            basic-20-bits-H-i=3-gate ┤■■■■ 3.1385443861475864                   
           basic-20-bits-H-i=18-gate ┤■■■ 2.1618463024530508                    
            basic-20-bits-H-i=1-gate ┤■■■■ 2.5369659855503883                   
            basic-10-bits-Y-i=2-gate ┤■■■■ 2.5460430777416887                   
           basic-10-bits-Y-i=2-multi ┤■■ 1.4749661705006767                     
            basic-10-bits-Y-i=2-ctrl ┤■■■ 1.943089821895189                     
            basic-10-bits-Y-i=8-gate ┤■■■■ 2.7241352567085464                   
           basic-10-bits-Y-i=8-multi ┤■■ 1.527599486521181                      
            basic-10-bits-Y-i=8-ctrl ┤ 1.083778433496433                        
            basic-10-bits-Y-i=9-gate ┤■■■■ 2.733002283358088                    
           basic-10-bits-Y-i=9-multi ┤■ 1.4285714285714286                      
            basic-10-bits-Y-i=9-ctrl ┤ 1.1090205732372078                       
            basic-10-bits-Y-i=7-gate ┤■■■■ 2.5740282838799238                   
           basic-10-bits-Y-i=7-multi ┤■■ 1.5571428571428572                     
            basic-10-bits-Y-i=7-ctrl ┤ 1.0205522739979096                       
            basic-10-bits-Y-i=3-gate ┤■■■■ 2.6019604372261806                   
           basic-10-bits-Y-i=3-multi ┤■■ 1.5006765899864682                     
            basic-10-bits-Y-i=3-ctrl ┤■■ 1.7324849042268167                     
            basic-10-bits-Y-i=1-gate ┤■■■■■ 3.3986159812984806                  
           basic-10-bits-Y-i=1-multi ┤■ 1.434782608695652                       
            basic-10-bits-Y-i=1-ctrl ┤■■ 1.864383038329301                      
            basic-10-bits-Z-i=2-gate ┤■■■■■■■ 5.787246847401644                 
           basic-10-bits-Z-i=2-multi ┤ 1.007164976071341                        
            basic-10-bits-Z-i=2-ctrl ┤■■■ 1.933369981296131                     
            basic-10-bits-Z-i=8-gate ┤■■■■■■ 4.355785456323235                  
            basic-10-bits-Z-i=8-ctrl ┤■■ 1.6235241681675128                     
            basic-10-bits-Z-i=9-gate ┤■■■■■■ 4.309486435491287                  
           basic-10-bits-Z-i=9-multi ┤ 1.0534027255246217                       
            basic-10-bits-Z-i=9-ctrl ┤■■ 1.689872193971268                      
            basic-10-bits-Z-i=7-gate ┤■■■■■ 3.847681936232525                   
           basic-10-bits-Z-i=7-multi ┤ 1.0819512036328716                       
            basic-10-bits-Z-i=7-ctrl ┤■■ 1.820343912245774                      
            basic-10-bits-Z-i=3-gate ┤■■■■■■■■ 6.8720307225370885               
           basic-10-bits-Z-i=3-multi ┤■ 1.1432752506829096                      
            basic-10-bits-Z-i=3-ctrl ┤■■■■ 2.9299848793636185                   
            basic-10-bits-Z-i=1-gate ┤■■■■■■■ 5.513129799910459                 
           basic-10-bits-Z-i=1-multi ┤ 1.0359154354746551                       
            basic-10-bits-Z-i=1-ctrl ┤■■■ 2.374393353091149                     
            basic-10-bits-S-i=2-gate ┤■■ 1.678363187979124                      
            basic-10-bits-S-i=8-gate ┤ 1.00249692685925                         
            basic-10-bits-S-i=3-gate ┤■ 1.297581948291782                       
            basic-10-bits-S-i=1-gate ┤■■■■ 2.538634485674206                    
         basic-10-bits-Sdag-i=2-gate ┤■■■ 2.301124635891896                     
         basic-10-bits-Sdag-i=8-gate ┤■ 1.3304294431438768                      
         basic-10-bits-Sdag-i=9-gate ┤■ 1.3119290499390988                      
         basic-10-bits-Sdag-i=7-gate ┤■ 1.2897606986239225                      
         basic-10-bits-Sdag-i=3-gate ┤■■■ 2.0373916013586597                    
         basic-10-bits-Sdag-i=1-gate ┤■■■■■ 3.5427932702499563                  
            basic-10-bits-X-i=2-gate ┤■■■■■ 3.9420121225240825                  
           basic-10-bits-X-i=2-multi ┤■■■ 2.009849552907549                     
            basic-10-bits-X-i=2-ctrl ┤■■ 1.6851915774939594                     
            basic-10-bits-X-i=8-gate ┤■■■ 1.9661590524534687                    
           basic-10-bits-X-i=8-multi ┤■■■ 1.9373774248043651                    
            basic-10-bits-X-i=8-ctrl ┤■■ 1.5326492445007371                     
            basic-10-bits-X-i=9-gate ┤■■ 1.8953652467783266                     
           basic-10-bits-X-i=9-multi ┤■■■ 2.006100233781414                     
            basic-10-bits-X-i=9-ctrl ┤■■ 1.4774009726398634                     
            basic-10-bits-X-i=7-gate ┤■■■■ 2.538649105291452                    
           basic-10-bits-X-i=7-multi ┤■■■ 2.3341246640114583                    
            basic-10-bits-X-i=7-ctrl ┤■ 1.3525179179442803                      
            basic-10-bits-X-i=3-gate ┤■■■■■■ 4.552875317163187                  
           basic-10-bits-X-i=3-multi ┤■■■ 2.372315105639985                     
            basic-10-bits-X-i=3-ctrl ┤■■■ 2.309373463009091                     
            basic-10-bits-X-i=1-gate ┤■■■ 1.9483534566506076                    
           basic-10-bits-X-i=1-multi ┤■■■ 2.0157193648938243                    
            basic-10-bits-X-i=1-ctrl ┤■■ 1.5031745225518083                     
            basic-10-bits-T-i=2-gate ┤■■■■■■ 4.310694535239138                  
            basic-10-bits-T-i=8-gate ┤■■■■ 3.0652965556092067                   
            basic-10-bits-T-i=9-gate ┤■■■■■ 3.2051484356918936                  
            basic-10-bits-T-i=7-gate ┤■■■■ 2.8247667498920572                   
            basic-10-bits-T-i=3-gate ┤■■■■■■ 4.605910131944304                  
            basic-10-bits-T-i=1-gate ┤■■■■■ 3.527428215217984                   
         basic-10-bits-Tdag-i=2-gate ┤■■■■ 2.870880260080612                    
         basic-10-bits-Tdag-i=8-gate ┤■■ 1.612923442293103                      
         basic-10-bits-Tdag-i=9-gate ┤■■ 1.6300231995976573                     
         basic-10-bits-Tdag-i=7-gate ┤■■ 1.536575500438906                      
         basic-10-bits-Tdag-i=3-gate ┤■■■■ 2.489435875765899                    
         basic-10-bits-Tdag-i=1-gate ┤■■■■ 2.959178421304183                    
            basic-10-bits-H-i=2-gate ┤■■■■■■■■■ 9.986699288986683               
            basic-10-bits-H-i=8-gate ┤■■■■■■ 4.648754649846353                  
            basic-10-bits-H-i=9-gate ┤■■■■■■ 4.688882829541914                  
            basic-10-bits-H-i=7-gate ┤■■■■■■ 4.467488145612282                  
            basic-10-bits-H-i=3-gate ┤■■■■■■■■■■ 13.228343025691734             
            basic-10-bits-H-i=1-gate ┤■■■■■■■ 5.3835083368509915                
           basic-15-bits-Y-i=12-gate ┤■■■■ 2.6931503144228817                   
          basic-15-bits-Y-i=12-multi ┤■■ 1.547473029231389                      
           basic-15-bits-Y-i=12-ctrl ┤ 1.0407275953859805                       
           basic-15-bits-Y-i=14-gate ┤■■■■ 2.71421768707483                     
          basic-15-bits-Y-i=14-multi ┤■ 1.4636997272609205                      
           basic-15-bits-Y-i=14-ctrl ┤ 1.043871429850479                        
            basic-15-bits-Y-i=2-gate ┤■■■■ 2.5788026668499553                   
           basic-15-bits-Y-i=2-multi ┤■■ 1.5448804691023905                     
            basic-15-bits-Y-i=2-ctrl ┤■■■ 1.8991637323943662                    
            basic-15-bits-Y-i=3-gate ┤■■■■ 2.592491467576792                    
           basic-15-bits-Y-i=3-multi ┤■■ 1.5719567301109134                     
            basic-15-bits-Y-i=3-ctrl ┤■■ 1.6540741484979402                     
           basic-15-bits-Y-i=13-gate ┤■■■■ 2.7139266304347824                   
          basic-15-bits-Y-i=13-multi ┤■■ 1.548675348001796                      
           basic-15-bits-Y-i=13-ctrl ┤ 1.0507130124777184                       
            basic-15-bits-Y-i=1-gate ┤■■■■■ 3.241323024054983                   
           basic-15-bits-Y-i=1-multi ┤■ 1.4655097613882864                      
            basic-15-bits-Y-i=1-ctrl ┤■■ 1.8384643114635908                     
           basic-15-bits-Z-i=12-gate ┤■■■■■ 3.711410973717617                   
           basic-15-bits-Z-i=12-ctrl ┤■ 1.3596415951539627                      
           basic-15-bits-Z-i=14-gate ┤■■■■■ 3.8423734626880304                  
           basic-15-bits-Z-i=14-ctrl ┤■ 1.3688617401668655                      
            basic-15-bits-Z-i=2-gate ┤■■■■■ 3.9498682476943348                  
            basic-15-bits-Z-i=2-ctrl ┤■■ 1.8932568370681007                     
            basic-15-bits-Z-i=3-gate ┤■■■■■■■ 6.307440476190476                 
            basic-15-bits-Z-i=3-ctrl ┤■■■■■ 3.4000837725575064                  
           basic-15-bits-Z-i=13-gate ┤■■■■■ 3.841520467836257                   
           basic-15-bits-Z-i=13-ctrl ┤■■ 1.599899226414535                      
            basic-15-bits-Z-i=1-gate ┤■■■■■■ 4.797660645543381                  
           basic-15-bits-Z-i=1-multi ┤ 1.0555170020818876                       
            basic-15-bits-Z-i=1-ctrl ┤■■■ 2.287469705344615                     
            basic-15-bits-S-i=2-gate ┤■ 1.441751519609741                       
            basic-15-bits-S-i=3-gate ┤■ 1.2649518116793714                      
            basic-15-bits-S-i=1-gate ┤■■■ 2.0989694516010307                    
        basic-15-bits-Sdag-i=12-gate ┤■ 1.3299599198396794                      
        basic-15-bits-Sdag-i=14-gate ┤■ 1.335742510723091                       
         basic-15-bits-Sdag-i=2-gate ┤■■■ 1.965677966101695                     
         basic-15-bits-Sdag-i=3-gate ┤■■■ 2.019765100671141                     
        basic-15-bits-Sdag-i=13-gate ┤■ 1.3383838383838385                      
         basic-15-bits-Sdag-i=1-gate ┤■■■■ 2.979689682509721                    
           basic-15-bits-X-i=12-gate ┤■■ 1.6248102277267278                     
          basic-15-bits-X-i=12-multi ┤■■ 1.5743850058570872                     
           basic-15-bits-X-i=12-ctrl ┤■ 1.2878578661511553                      
           basic-15-bits-X-i=14-gate ┤■■ 1.6218762636473916                     
          basic-15-bits-X-i=14-multi ┤■■ 1.649045821002143                      
           basic-15-bits-X-i=14-ctrl ┤■ 1.3095748031496062                      
            basic-15-bits-X-i=2-gate ┤■■■■■ 3.2441297170539047                  
           basic-15-bits-X-i=2-multi ┤■■ 1.8226242544731608                     
            basic-15-bits-X-i=2-ctrl ┤■■ 1.4854332953249714                     
            basic-15-bits-X-i=3-gate ┤■■■■■ 3.9663368226796902                  
           basic-15-bits-X-i=3-multi ┤■■■ 2.1175376088677753                    
            basic-15-bits-X-i=3-ctrl ┤■■■ 2.134287141220365                     
           basic-15-bits-X-i=13-gate ┤■■ 1.6250501806503412                     
          basic-15-bits-X-i=13-multi ┤■■ 1.5841545132045725                     
           basic-15-bits-X-i=13-ctrl ┤■ 1.3104323308270676                      
            basic-15-bits-X-i=1-gate ┤■■ 1.5565208397972903                     
           basic-15-bits-X-i=1-multi ┤■■ 1.6972549019607843                     
            basic-15-bits-X-i=1-ctrl ┤■■ 1.5334213203552476                     
           basic-15-bits-T-i=12-gate ┤■■■■■ 3.254629301170628                   
           basic-15-bits-T-i=14-gate ┤■■■■■ 3.3776466248616748                  
            basic-15-bits-T-i=2-gate ┤■■■■■ 3.966722019262703                   
            basic-15-bits-T-i=3-gate ┤■■■■■■ 4.65370942812983                   
           basic-15-bits-T-i=13-gate ┤■■■■■ 3.341408245165998                   
            basic-15-bits-T-i=1-gate ┤■■■■■ 3.3703786404670004                  
        basic-15-bits-Tdag-i=12-gate ┤■■ 1.6379929464571976                     
        basic-15-bits-Tdag-i=14-gate ┤■■ 1.6809445178335534                     
         basic-15-bits-Tdag-i=2-gate ┤■■■ 2.403788860103627                     
         basic-15-bits-Tdag-i=3-gate ┤■■■ 2.2265883217040026                    
        basic-15-bits-Tdag-i=13-gate ┤■■ 1.664183736809435                      
         basic-15-bits-Tdag-i=1-gate ┤■■■■ 2.710021540670838                    
           basic-15-bits-H-i=12-gate ┤■■■■■ 4.0659755674592475                  
           basic-15-bits-H-i=14-gate ┤■■■■■■ 4.112026552128075                  
            basic-15-bits-H-i=2-gate ┤■■■■■■■■■ 9.279646539027983               
            basic-15-bits-H-i=3-gate ┤■■■■■■■■■■ 12.33352886693424              
           basic-15-bits-H-i=13-gate ┤■■■■■■ 4.1109332916975685                 
            basic-15-bits-H-i=1-gate ┤■■■■■■ 5.193140096618357                  
            param-5-bits-Ry-i=4-gate ┤■■■■■ 3.2962199685449316                  
            param-5-bits-Ry-i=4-ctrl ┤■■■■■■■■■■■■■■■■■■■■ 165.56224455981445   
            param-5-bits-Ry-i=2-gate ┤■■■ 2.2977975878342947                    
            param-5-bits-Ry-i=2-ctrl ┤■■■■■■■■■■■■■■■■■■■■ 161.94959962317475   
            param-5-bits-Ry-i=3-gate ┤■■■■ 3.130267368078529                    
            param-5-bits-Ry-i=3-ctrl ┤■■■■■■■■■■■■■■■■■■■■ 166.85583447662128   
            param-5-bits-Ry-i=1-gate ┤■■■ 2.249442379182156                     
            param-5-bits-Ry-i=1-ctrl ┤■■■■■■■■■■■■■■■■■■■■ 152.26210522698375   
            param-5-bits-Rx-i=4-gate ┤■■ 1.7378765459672239                     
            param-5-bits-Rx-i=4-ctrl ┤■■■■■■■■■■■■■■■■■■■ 138.793272578643      
            param-5-bits-Rx-i=2-gate ┤■■ 1.4945178451010266                     
            param-5-bits-Rx-i=2-ctrl ┤■■■■■■■■■■■■■■■■■■■ 141.528666523513      
            param-5-bits-Rx-i=3-gate ┤■■■ 2.0646645403483026                    
            param-5-bits-Rx-i=3-ctrl ┤■■■■■■■■■■■■■■■■■■■ 143.41492537313434    
            param-5-bits-Rx-i=1-gate ┤■■ 1.6971087539807916                     
            param-5-bits-Rx-i=1-ctrl ┤■■■■■■■■■■■■■■■■■■■ 135.10041903176915    
            param-5-bits-Rz-i=4-gate ┤■■■■ 2.6186590131055705                   
            param-5-bits-Rz-i=4-ctrl ┤■■■■■■■■■■■■■■■■■■ 91.14301135945435      
            param-5-bits-Rz-i=2-gate ┤■■■■ 2.4557460056792912                   
            param-5-bits-Rz-i=2-ctrl ┤■■■■■■■■■■■■■■■■■■ 90.59708631250153      
            param-5-bits-Rz-i=3-gate ┤■■■■ 2.9917859577368784                   
            param-5-bits-Rz-i=3-ctrl ┤■■■■■■■■■■■■■■■■■■ 91.60156808599817      
            param-5-bits-Rz-i=1-gate ┤■■■■ 2.650821653761965                    
            param-5-bits-Rz-i=1-ctrl ┤■■■■■■■■■■■■■■■■■■ 96.15181500826793      
          param-20-bits-Ry-i=19-gate ┤■ 1.1394886403048365                      
          param-20-bits-Ry-i=19-ctrl ┤■■■■■ 3.5804848725976925                  
          param-20-bits-Ry-i=17-gate ┤■ 1.2274281828694642                      
          param-20-bits-Ry-i=17-ctrl ┤■■■■■ 3.3902798292457272                  
           param-20-bits-Ry-i=2-gate ┤■■ 1.8370965825517984                     
           param-20-bits-Ry-i=2-ctrl ┤■■■■ 3.104480486086411                    
           param-20-bits-Ry-i=3-gate ┤■■■ 2.3777279479551208                    
           param-20-bits-Ry-i=3-ctrl ┤■■■■ 3.159539445773728                    
          param-20-bits-Ry-i=18-gate ┤■ 1.1595688252774738                      
          param-20-bits-Ry-i=18-ctrl ┤■■■■■ 3.5421524395964283                  
           param-20-bits-Ry-i=1-gate ┤■■ 1.7376602439893971                     
           param-20-bits-Ry-i=1-ctrl ┤■■ 1.7577720409106727                     
          param-20-bits-Rx-i=19-gate ┤ 1.016160187175232                        
          param-20-bits-Rx-i=19-ctrl ┤■■ 1.6613073474580693                     
          param-20-bits-Rx-i=17-ctrl ┤■■ 1.627344302557845                      
           param-20-bits-Rx-i=2-gate ┤■ 1.256698121343877                       
           param-20-bits-Rx-i=2-ctrl ┤■■■ 2.4423706059000176                    
           param-20-bits-Rx-i=3-gate ┤■■■ 1.9053478795286143                    
           param-20-bits-Rx-i=3-ctrl ┤■■■ 1.9097526587874885                    
          param-20-bits-Rx-i=18-gate ┤ 1.0101753498112984                       
          param-20-bits-Rx-i=18-ctrl ┤■■ 1.6008714731247629                     
           param-20-bits-Rx-i=1-gate ┤■■ 1.4842319490441844                     
           param-20-bits-Rx-i=1-ctrl ┤■■ 1.4828189324544634                     
          param-20-bits-Rz-i=19-gate ┤■■ 1.6105525883223983                     
          param-20-bits-Rz-i=19-ctrl ┤■■ 1.527483108659464                      
          param-20-bits-Rz-i=17-gate ┤■■ 1.6211568597114974                     
          param-20-bits-Rz-i=17-ctrl ┤■■ 1.5024921855199798                     
           param-20-bits-Rz-i=2-gate ┤■■■■ 2.6770671546540776                   
           param-20-bits-Rz-i=2-ctrl ┤■■ 1.4738115564978496                     
           param-20-bits-Rz-i=3-gate ┤■■■■■ 3.5323716734427686                  
           param-20-bits-Rz-i=3-ctrl ┤■■ 1.4946910894728658                     
          param-20-bits-Rz-i=18-gate ┤■■ 1.6366004907013185                     
          param-20-bits-Rz-i=18-ctrl ┤■■ 1.5168548352542954                     
           param-20-bits-Rz-i=1-gate ┤■■■■ 2.978214751521488                    
           param-20-bits-Rz-i=1-ctrl ┤■■ 1.5464122600442447                     
           param-10-bits-Ry-i=2-gate ┤■■■■■■ 4.33416766998289                   
           param-10-bits-Ry-i=2-ctrl ┤■■■■■■■■■■■■ 22.636602247540537           
           param-10-bits-Ry-i=8-gate ┤■■ 1.4987915828366802                     
           param-10-bits-Ry-i=8-ctrl ┤■■■■■■■■■■■■ 19.585530643569783           
           param-10-bits-Ry-i=9-gate ┤■■ 1.5691327425615953                     
           param-10-bits-Ry-i=9-ctrl ┤■■■■■■■■■■■■ 21.632932549738502           
           param-10-bits-Ry-i=7-gate ┤■■ 1.5656943648752422                     
           param-10-bits-Ry-i=7-ctrl ┤■■■■■■■■■■■■ 19.684842254235704           
           param-10-bits-Ry-i=3-gate ┤■■■■■■■ 6.74477181004642                  
           param-10-bits-Ry-i=3-ctrl ┤■■■■■■■■■■■■ 23.62816777280167            
           param-10-bits-Ry-i=1-gate ┤■■■■ 2.8892794840619547                   
           param-10-bits-Ry-i=1-ctrl ┤■■■■■■■■■■■ 18.47238044213851             
           param-10-bits-Rx-i=2-gate ┤■ 1.3701352224375682                      
           param-10-bits-Rx-i=2-ctrl ┤■■■■■■■■■■ 11.884910656667927             
           param-10-bits-Rx-i=8-gate ┤ 1.0749964908059115                       
           param-10-bits-Rx-i=8-ctrl ┤■■■■■■■■■ 9.838559644298835               
           param-10-bits-Rx-i=9-gate ┤ 1.0302228412256267                       
           param-10-bits-Rx-i=9-ctrl ┤■■■■■■■■■ 10.115926575517198              
           param-10-bits-Rx-i=7-gate ┤ 1.0646581645808129                       
           param-10-bits-Rx-i=7-ctrl ┤■■■■■■■■■ 9.816264589920756               
           param-10-bits-Rx-i=3-gate ┤■■■ 2.1401988872483355                    
           param-10-bits-Rx-i=3-ctrl ┤■■■■■■■■■■ 12.013513058507954             
           param-10-bits-Rx-i=1-gate ┤■■ 1.6820868892280574                     
           param-10-bits-Rx-i=1-ctrl ┤■■■■■■■■■■ 11.720985020224918             
           param-10-bits-Rz-i=2-gate ┤■■■■■■■ 6.045741103950687                 
           param-10-bits-Rz-i=2-ctrl ┤■■■■■■■■■■ 11.765537682143416             
           param-10-bits-Rz-i=8-gate ┤■■ 1.7469929179001011                     
           param-10-bits-Rz-i=8-ctrl ┤■■■■■■■■■ 10.53544355286026               
           param-10-bits-Rz-i=9-gate ┤■■ 1.6853170004966065                     
           param-10-bits-Rz-i=9-ctrl ┤■■■■■■■■■ 10.55058648341857               
           param-10-bits-Rz-i=7-gate ┤■■ 1.7744746380213712                     
           param-10-bits-Rz-i=7-ctrl ┤■■■■■■■■■ 10.527623358095143              
           param-10-bits-Rz-i=3-gate ┤■■■■■■■■ 8.40531669931608                 
           param-10-bits-Rz-i=3-ctrl ┤■■■■■■■■■■ 12.378321696886031             
           param-10-bits-Rz-i=1-gate ┤■■■■■■■ 6.207265278105493                 
           param-10-bits-Rz-i=1-ctrl ┤■■■■■■■■■■■ 15.965339950150332            
          param-15-bits-Ry-i=12-gate ┤■ 1.229860365198711                       
          param-15-bits-Ry-i=12-ctrl ┤■■■■■■ 4.099558959280659                  
          param-15-bits-Ry-i=14-gate ┤■ 1.2085106382978723                      
          param-15-bits-Ry-i=14-ctrl ┤■■■■■■ 4.169528558222919                  
           param-15-bits-Ry-i=2-gate ┤■■■■■■ 4.085505141131904                  
           param-15-bits-Ry-i=2-ctrl ┤■■■■■■ 4.314270136876237                  
           param-15-bits-Ry-i=3-gate ┤■■■■■■■ 6.456933397492145                 
           param-15-bits-Ry-i=3-ctrl ┤■■■■■■ 4.673438956197577                  
          param-15-bits-Ry-i=13-gate ┤■ 1.2333333333333334                      
          param-15-bits-Ry-i=13-ctrl ┤■■■■■ 4.066341144057393                   
           param-15-bits-Ry-i=1-gate ┤■■■■ 2.7817773788150806                   
           param-15-bits-Ry-i=1-ctrl ┤■■■■■ 3.4305665052370764                  
          param-15-bits-Rx-i=12-gate ┤ 1.047062838939664                        
          param-15-bits-Rx-i=12-ctrl ┤■■■ 2.0487967914438503                    
          param-15-bits-Rx-i=14-gate ┤ 1.106179321486268                        
          param-15-bits-Rx-i=14-ctrl ┤■■■ 2.126819126819127                     
           param-15-bits-Rx-i=2-gate ┤■■ 1.5062344139650872                     
           param-15-bits-Rx-i=2-ctrl ┤■■■ 2.207543103448276                     
           param-15-bits-Rx-i=3-gate ┤■■■ 2.182345013477089                     
           param-15-bits-Rx-i=3-ctrl ┤■■■■ 2.575592595694782                    
          param-15-bits-Rx-i=13-gate ┤ 1.0919585987261147                       
          param-15-bits-Rx-i=13-ctrl ┤■■■ 2.1252770083102495                    
           param-15-bits-Rx-i=1-gate ┤■■ 1.8770895616657544                     
           param-15-bits-Rx-i=1-ctrl ┤■■■ 2.2037437005039595                    
          param-15-bits-Rz-i=12-gate ┤■■ 1.7095002745744097                     
          param-15-bits-Rz-i=12-ctrl ┤■■ 1.8561584840654608                     
          param-15-bits-Rz-i=14-gate ┤■■ 1.725                                  
          param-15-bits-Rz-i=14-ctrl ┤■■ 1.8621317157712305                     
           param-15-bits-Rz-i=2-gate ┤■■■■■■■ 6.14586217273548                  
           param-15-bits-Rz-i=2-ctrl ┤■■■ 2.0722972972972973                    
           param-15-bits-Rz-i=3-gate ┤■■■■■■■■ 8.460250538384543                
           param-15-bits-Rz-i=3-ctrl ┤■■■ 2.160965794768612                     
          param-15-bits-Rz-i=13-gate ┤■■ 1.7108301264431005                     
          param-15-bits-Rz-i=13-ctrl ┤■■ 1.8641440817386787                     
           param-15-bits-Rz-i=1-gate ┤■■■■■■■ 6.294166216774111                 
           param-15-bits-Rz-i=1-ctrl ┤■■■■ 2.822113638614679                    
                                     └                                        ┘ 
                                                      [log10]
even
                              ┌                                        ┐ 
     basic-5-bits-Z-i=4-multi ┤ 0.8869413152222538                       
     basic-5-bits-Z-i=1-multi ┤ 0.9433936834538839                       
   basic-20-bits-Z-i=17-multi ┤ 0.9992052585393314                       
   basic-20-bits-Z-i=18-multi ┤ 0.9831253412889736                       
    basic-20-bits-S-i=19-gate ┤ 0.7852028553225994                       
    basic-20-bits-S-i=17-gate ┤ 0.9171813686058631                       
    basic-20-bits-S-i=18-gate ┤ 0.8323087835441542                       
     basic-20-bits-X-i=3-ctrl ┤ 0.9242896378801824                       
    basic-10-bits-Z-i=8-multi ┤ 0.9739023341283184                       
     basic-10-bits-S-i=9-gate ┤ 0.933837897606497                        
     basic-10-bits-S-i=7-gate ┤ 0.9114891329390984                       
   basic-15-bits-Z-i=12-multi ┤ 0.9809354179035557                       
   basic-15-bits-Z-i=14-multi ┤ 0.950786056049214                        
    basic-15-bits-Z-i=2-multi ┤ 0.9585319949811795                       
    basic-15-bits-Z-i=3-multi ┤ 0.972382118799755                        
   basic-15-bits-Z-i=13-multi ┤ 0.9795109054857898                       
    basic-15-bits-S-i=12-gate ┤ 0.8991011984021305                       
    basic-15-bits-S-i=14-gate ┤ 0.8941656274225622                       
    basic-15-bits-S-i=13-gate ┤ 0.8916554508748318                       
   param-20-bits-Rx-i=17-gate ┤ 0.9887691116537483                       
                              └                                        ┘ 
                                               [log10]

Print register better

Something like

julia> using BitBasis, Yao
julia> reg = rand_state(3)
ArrayReg{1, Complex{Float64}, Array...}
    active qubits: 3/3
julia> for (amp, b) in zip(state(reg), basis(BitStr64{nqubits(reg)}))
           println("$amp * $b")
       end
-0.3376505759988792 + 0.33325899072397025im * 000 ₍₂₎
0.32054579481565426 + 0.31927725422058706im * 001 ₍₂₎
0.09069334279111192 + 0.013173928388618843im * 010 ₍₂₎
-0.3263247507853093 - 0.07986342841304012im * 011 ₍₂₎
-0.27129613548559606 - 0.09708850865801441im * 100 ₍₂₎
-0.327171716777714 - 0.13959063658977386im * 101 ₍₂₎
0.23149778290317669 - 0.15132920651218748im * 110 ₍₂₎
-0.2859389557190614 + 0.28490459569435167im * 111 ₍₂₎

TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.

If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.

If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Note on upcoming refactor of memory layout

To improve the performance of batched registers, we will swith the storage to batch-as-row layout.

Some unpleasant changes

  • for batch-as-row storage, the input matrix should be transpose to be multiplied on left.
  • it is more effective to focus on last n bits rather than first n bits.

Faster bmask

"""
    bmask([T=Int], ibit::Int...) -> T
    bmask([T=Int], bits::UnitRange{Int}) -> T

Return an integer with specific position masked, which is offten used as a mask for binary operations.
"""
function bmask end

bmask(args::Int...) = bmask(Int, args...)
bmask(::Type{T}, args::Int...) where {T <: Integer} = bmask(T, args)

# NOTE: 30x faster than original
bmask(::Type{T}, bit_locations::NTuple{N, Int}) where {N, T <: Integer} = sum(map(x->(one(T) << (x-1)), bit_locations))

function bmask(::Type{T}, bit_locations::UnitRange{Int}) where {T <: Integer}
    offset = bit_locations.stop - bit_locations.start + 1
    return ((one(T) << offset) - one(T)) << (bit_locations.start - 1)
end

Reordered iterator is slow

Use Tuple instead of Vector since the number of orders is the number of bits.

  • constructor is slow, constructor is used frequent when an instruct is called, instead we can use the following implementation
"""
    unsafe_sub(a::UnitRange, b::NTuple{N}) -> NTuple{N}

Returns result in type `Tuple` of `a .- b`. This will not check the length of `a` and `b`, use
at your own risk.
"""
@generated function unsafe_sub(a::UnitRange{T}, b::NTuple{N, T}) where {N, T}
    ex = Expr(:tuple)
    for k in 1:N
        push!(ex.args, :(a.start + $(k-1) - b[$k]))
    end
    return ex
end

# 10x faster than original (reordered_basis)
ReorderdBasis(orders::NTuple{N, Int}) where N = ReorderdBasis(orders, bmask.(orders), unsafe_sub(1:N, orders))
  • reorder can use a straight forward tuple-based indexing method instead of creating a Vector
    od = [1+b for b in reordered_basis(nbit, orders)]
    od = od |> invperm

Do I need to update to Julia 1.4.0?

(v1.3) pkg> add [email protected]
Resolving package versions...
ERROR: Unsatisfiable requirements detected for package YaoArrayRegister [e600142f]:
YaoArrayRegister [e600142f] log:
├─possible versions are: [0.1.0, 0.2.0, 0.3.0-0.3.10, 0.4.0-0.4.2, 0.5.0-0.5.2, 0.6.0-0.6.2] or uninstalled
└─restricted to versions 0.7.1 by an explicit requirement — no versions left

if I do not want to update the Julia to Julia 1.4.0, what should I do?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.