R/opop.R

Defines functions opop.pauli_d opop.pauli opop

Documented in opop opop.pauli opop.pauli_d

#' opop
#'
#' Use this function to quickly apply functions to objects of class pauli and return
#' an object of class pauli_d
#'
#' @param obj An object of class pauli or pauli_d
#' @param .f A function
#'
#' @return An object of class pauli_d (pauli descendent)
#' @export
#'
#' @examples
#' #Create an object of class pauli and operate on it
#' pf <- pauli()
#' opop(pf, function(x)x^2)
opop <- function(obj, .f) {
  UseMethod("opop")
}

#' opop
#'
#' Use this function to quickly apply functions to objects of class pauli and return
#' an object of class pauli_d
#'
#' @param obj An object of class pauli
#' @param .f A function
#'
#' @return An object of class pauli_d (pauli descendent)
#' @export
#'
#' @examples
#' #Create an object of class pauli and operate on it
#' pf <- pauli()
#' opop(pf, function(x)x^2)
opop.pauli <- function(obj, .f = function(x) x){

  #Perform function on items within pauli object
  obj <- lapply(obj, .f)

  #Use coerce_Re to change complex numbers with 0i to real numbers
  obj <- lapply(obj, coerce_Re)

  #Make paulis a pauli_d object
  structure(obj,
            class = "pauli_d"
  )
}

#' opop
#'
#' Use this function to quickly apply functions to objects of class pauli_d and return
#' an object of class pauli_d
#'
#' @param obj An object of class pauli_d
#' @param .f A function
#'
#' @return An object of class pauli_d (pauli descendent)
#' @export
#'
#' @examples
#' #Create an object of class pauli and operate on it
#' pf <- pauli() #pf has class pauli
#' pf_2 <- opop(pf, function(x)x^2) #pf_2 has class pauli_d
#' pf_3 <- opop(pf_2, function(x)x^2) #pf_3 has class pauli_d
opop.pauli_d <- function(obj, .f = function(x) x){

  #Perform function on items within pauli object
  obj <- lapply(obj, .f)

  #Use coerce_Re to change complex numbers with 0i to real numbers
  obj <- lapply(obj, coerce_Re)

  #Make paulis a pauli_d object
  structure(obj,
            class = "pauli_d"
  )
}
mncube/pauliframes documentation built on Dec. 21, 2021, 8:07 p.m.