R/finalstate.R

Defines functions finalstate

Documented in finalstate

#'@title
#'Final state
#'
#'@description
#'Find the vector state of a circuit
#'
#'@import tensor
#'@import dplyr
#'
#'
#'@examples
#' # to determinate the state of a circuit without any gate
#' finalstate(qc,1)
#' # to determinate the state of a circuit with a gate but without Cnot gate
#' finalstate(qc,2)
#' # to determinate the state of a circuit with Cnot gate type (0,1)
#' finalstate(qc,3)
#' # to determinate the state of a circuit with Cnot gate type (1,0)
#' finalstate(qc,4)
#'
#'@export
#'
finalstate<- function(a,b) {
  if (length(a)>1&b==1){
    colstate <-vector(mode="list", length=length(a))
    colstate<-Reduce("%x%",a[1:length(a)])
    colstate
  }
  else if (length(a)>1&b==2){
    colstate <-vector(mode="list", length=length(a))
    colstate<-Reduce("%x%",a[length(a):1])
    colstate
  }
  else if (b==3){
    b<-a
    colstate <-vector(mode="list", length=length(b))
    colstate <-  as.numeric(unlist(b[1])) %x% as.numeric(unlist(b[2]))
    if(identical(as.list(colstate),as.list(matrix(c(q1 %x% q0))))==TRUE|
       identical(as.list(colstate),as.list(matrix(c(q1 %x% q1))))==TRUE){
      colstate<-as.numeric(unlist(b[2])) %x% as.numeric(unlist(b[1]))
      colstate}
    else if (identical(as.list(colstate),as.list(matrix(c(q1 %x% q0))))==FALSE|
             identical(as.list(colstate),as.list(matrix(c(q1 %x% q1))))==FALSE) {
      colstate <-  as.numeric(unlist(b[2])) %x% as.numeric(unlist(b[1]))
      colstate<-c(colstate[1],colstate[4],colstate[3],colstate[2])
      colstate

    }
  }

  else if (b==4){
    b<-a
    colstate <-vector(mode="list", length=length(b))
    colstate <-  as.numeric(unlist(b[1])) %x% as.numeric(unlist(b[2]))
    if(identical(as.list(colstate),as.list(matrix(c(q0 %x% q1))))==TRUE |
       identical(as.list(colstate),as.list(matrix(c(q1 %x% q0))))==TRUE |
       identical(as.list(colstate),as.list(matrix(c(q1 %x% q1))))==TRUE){
      colstate<-as.numeric(unlist(b[1])) %x% as.numeric(unlist(b[2]))
      colstate}
    else if (identical(as.list(colstate),as.list(matrix(c(q0 %x% q1))))==FALSE |
             identical(as.list(colstate),as.list(matrix(c(q1 %x% q0))))==FALSE |
             identical(as.list(colstate),as.list(matrix(c(q1 %x% q1))))==FALSE) {
      colstate <-  as.numeric(unlist(b[2])) %x% as.numeric(unlist(b[1]))
      colstate<-c(colstate[1],colstate[2],colstate[4],colstate[3])
      colstate

    }
  }
  else if (length(a)==1&b==1){
    colstate<-a[1]
    colstate}

}
abrosechapel/QuantuR documentation built on March 24, 2022, 8 p.m.