=============
New Features
------------
- The mapping of the R C API now includes `Rf_isSymbol()`.
- Singleton class :class:`rpy2.rinterface_lib.sexp.RVersion` to report
the R version for the embedded R.
- :func:`rpy2.rinterface.local_context` to create a context manager
to evaluate R code within a local environment.
- The `staticmethod` :meth:`rpy2.robjects.vectors.DateVector.isrinstance`
will tell whether an R objects is an R `Date` array.
Changes
-------
- The dynamic generation of docstrings for R man pages
is now using R's `Rd2txt`.
- The :func:`rpy2.rinterface_lib._rinterface_capi._findVarInFrame`
is replaced by the function
:func:`rpy2.rinterface_lib._rinterface_capi._findvar_in_frame`
(see fix to issue 710).
- The functions :func:`rpy2.robjects.numpy.activate()` and
:func:`rpy2.robjects.pandas.activate()` are deprecated and will
be removed in rpy2-3.5.0.
- :func:`rpy2.rinterface_lib.embedded.setinitialized` was renamed to
:func:`rpy2.rinterface_lib.embedded._setinitialized` to indicate that
one should not use it.
- :meth:`rpy2.robjects.lib.ggplot2.vars` to map the R function
`ggplot2::vars` (issue 742).
- Report correctly the class of R matrix objects with R>=4.0: it is
now `('matrix', 'array')`. With R<4.0 `('matrix')` is still reported.
- The conversion of R/rpy2 objects to python objects using R class name mapping
is extended to more classes. The documentation about conversion covers the topic.
- If `R_NilValue` is not null when the initialization of the embedded R is attempted,
it is now assumed that R was initialized through other means (e.g., an other C library in the
same process) and the C-level initialization is be skipped.
- The conversion `rpy2py` is now working with any Python object inheriting
from `_rinterface_capi.SupportsSEXP`.
Bugs fixed
----------
- The C function `Rf_findVarInFrame()` in the R API can trigger
in an R-level error, and while this is rare, when it does
when embedded in Python it creates a segfault. Calls are
now wrapped in `R_ToplevelExec()` to limit the propagation
of R exceptions. This solved issue 710.
- More complete and correct mapping of R class names in
:func:`rpy2.rinterface_lib.sexp.rclass_get`.
- Initializing the embedded R caused the loss of ability to use Ctrl-C
to send SIGINT to a Python process (issue 723)
- :mod:`rpy2.sitation` is now working when the environment variable
`R_HOME` is set even though R is not in the `PATH` or in the Windows
registry (issue 744).
- Handling an R language objects could result in a segfault when its
R class was queried (issue 749).
- The conversion of R string arrays to `numpy` arrays was leaving
R's `NA` value as R NA objects. NAs in this type of arrays are now
turned to `None` in the resulting `numpy` array (issue 751).
- `rpy2.situation.get_rlib_path()` was returning an environment variable
with an invalid separator on Windows (mentioned in issue 754).
- R strings encoded with something else than 'utf-8' could result in
errors when trying to convert to Python strings (issue 754).
- Extracting documentation pages for R objects in packages could
generate spurious warnings when several "section" tags are present.
- R `Date` arrays/vectors were not wrapped into
:class:`rpy2.robjects.vectors.DateVector` objects but left as
R arrays of floats (which they are at the C level).
- The HTML representation of short R lists without names could
fail with an error.
- The :meth:`__repr__` of `robjects`-level objects was not displaying
the rpy2 class the R object is mapped to.