## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 5,
  warning = FALSE
)

## ----setup--------------------------------------------------------------------
library(fcaR)

## -----------------------------------------------------------------------------
fc <- FormalContext$new(planets)
fc$find_implications()

## -----------------------------------------------------------------------------
equivalencesRegistry$get_entry_names()

## -----------------------------------------------------------------------------
equivalencesRegistry$get_entry("Composition")

## -----------------------------------------------------------------------------
equivalencesRegistry$get_entry("comp")

## ----eval = FALSE-------------------------------------------------------------
# fc$implications$apply_rules(c("comp", "simp"))

## ----eval = FALSE-------------------------------------------------------------
# equivalencesRegistry$set_entry(
#   method = "Method name",
#   fun = method_function,
#   description = "Method description"
# )

## ----eval = FALSE-------------------------------------------------------------
# method_function <- function(LHS, RHS, attributes) {
#   # LHS and RHS are the sparse matrices of the left-hand and
#   # right-hand sides of the implications
#   # attributes is the vector of attribute names
#   # The three arguments are mandatory
# 
#   # Perform operations on LHS and RHS
#   # ...
# 
#   # Must return a list with two components: lhs and rhs
#   return(list(
#     lhs = LHS,
#     rhs = RHS
#   ))
# }

## -----------------------------------------------------------------------------
random_reorder <- function(LHS, RHS, attributes) {
  # Remember: attributes are in rows, implications are
  # in columns.
  # Random order for columns:
  o <- sample(ncol(LHS), ncol(LHS))

  # Return the reordered implications
  return(list(
    lhs = LHS[, o],
    rhs = RHS[, o]
  ))
}

## -----------------------------------------------------------------------------
equivalencesRegistry$set_entry(
  method = "Randomize",
  fun = random_reorder,
  description = "Randomize the order of the implications."
)

## -----------------------------------------------------------------------------
equivalencesRegistry$get_entry_names()

## -----------------------------------------------------------------------------
# Original implications
fc$implications

## -----------------------------------------------------------------------------
# Apply the randomize method
fc$implications$apply_rules("randomize")

## -----------------------------------------------------------------------------
# Reordered implications
fc$implications

## ----echo=FALSE---------------------------------------------------------------
equivalencesRegistry$delete_entry("Randomize")

