While CPOInverter is only used for inversion,
both CPORetrafo and CPOInverter objects could be used for inversion using
invert in principle. However, some CPORetrafo
objects forbid inversion (and one must use the CPOInverter object instead),
some CPORetrafo objects are NO-OPS when called with invert,
some can be used both for transformation and inversion.
The CPOTrainedCapability is a named integer(2) with two slots: “retrafo” and
“invert”. Both can be 1 (CPOTrained does something when used in retrafo
/ inversion), 0 (CPOTrained is a NO-OP when used in retrafo / inversion) or
-1 (CPOTrained cannot be used in retrafo / inversion).
getCPOTrainedCapability(cpo)[CPOTrained]
The CPOTrained object to query.
[named integer(2)]. The first component is named “retrafo” and specifies whether the object can perform
  retrafo operations; the second component is named “invert” and specifies whether it can perform invert operations.
  0 indicates no effect for the operation, 1 indicates an operation is performed, -1 indicates the object
  cannot be used for the purpose.
The invert capability of a CPOTrained depends on the CPO which was used to
create it. Whenever a CPO is applied to some data, the result has the link{retrafo}
and inverter attributes set that can be retrieved using the respectively named functions to
get the CPORetrafo and CPOInverter object.
Every CPO can be a
“Feature Operation” CPO, a “Target Operation” CPO, or a “Retrafoless” CPO, or a composition
of these (see OperatingType).
If a (possibly compound) CPO contains only Feature Operation CPOs and Retrafoless CPOs, then it does not perform any operation
on the target column of a data set; hence there is no inversion to be performed, the resulting CPORetrafo
is a NO-OP when used with invert. The inverter attribute created is in fact a
NULLCPO), while the retrafo attribute contains a CPORetrafo with
capabilities c(retrafo = 1, invert = 0).
If a (possibly compound) CPO also contains Target Operation CPOs, but they are independent of the prediction data features--e.g. a CPO that
takes the logarithm of the target column in a regression task--then the CPORetrafo object has enough information
to perform inversion and hence can also meaningfully be used with invert. In this case the capability
of the CPORetrafo will be c(retrafo = 1, invert = 1). The CPOInverter
object retrieved using the inverter function can be used for the same task, but the benefit of the
CPORetrafo object is that it can be used for all prediction data applied to it, while the
CPOInverter object needs to be retrieved for each prediction data set anew. The CPOInverter
object furthermore cannot be used for retrafo and hence has, like all CPOInverter, capabilities c(retrafo = -1, invert = 1).
If a (possibly compound) CPO contains Target Operation CPOs that are not prediction data independent then the resulting
CPORetrafo has capability c(retrafo = 1, invert = -1), since the inversion requires information about
the particular data set that was transformed.
A CPOInverter object always has capabilities c(retrafo = -1, invert = 1), since it can always be used
for invert and never used in the place of a CPORetrafo.
The only object with capabilities c(retrafo = 0, invert = 0) is NULLCPO. Other objects that don't have at least
one capability equal to 1 cannot be created.
Other getters and setters: CPO,
  getCPOAffect, getCPOClass,
  getCPOConstructor, getCPOId,
  getCPOName,
  getCPOOperatingType,
  getCPOPredictType,
  getCPOProperties,
  getCPOTrainedCPO, setCPOId
Other retrafo related: CPOTrained,
  NULLCPO, %>>%,
  applyCPO, as.list.CPO,
  clearRI, getCPOClass,
  getCPOName,
  getCPOOperatingType,
  getCPOPredictType,
  getCPOProperties,
  getCPOTrainedCPO,
  getCPOTrainedState,
  is.retrafo,
  makeCPOTrainedFromState,
  pipeCPO, print.CPOConstructor
Other inverter related: CPOTrained,
  NULLCPO, %>>%,
  applyCPO, as.list.CPO,
  clearRI, getCPOClass,
  getCPOName,
  getCPOOperatingType,
  getCPOPredictType,
  getCPOProperties,
  getCPOTrainedCPO,
  getCPOTrainedState,
  is.inverter,
  makeCPOTrainedFromState,
  pipeCPO, print.CPOConstructor
Other CPO classifications: CPO,
  getCPOClass,
  getCPOOperatingType