./math/py-rpy, R interface for Python

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 3.4.5nb2, Package name: py312-rpy-3.4.5nb2, Maintainer: pkgsrc-users

RPy is a very simple, yet robust, Python interface to the R
Programming Language. It can manage all kinds of R objects and can
execute arbitrary R functions (including the graphic functions).
All the errors from the R language are converted to Python exceptions.
Any modules that later were installed on the R system, can easily
be used from within Python, without introducing any changes.


Required to run:
[lang/g95] [math/R] [devel/py-setuptools] [devel/pcre] [databases/py-sqlite3] [math/py-numpy] [textproc/py-jinja2] [lang/py-six] [lang/python37]

Required to build:
[pkgtools/cwrappers]

Master sites:

Filesize: 189.876 KB

Version history: (Expand)


CVS history: (Expand)


   2023-08-02 01:20:57 by Thomas Klausner | Files touched by this commit (158)
Log message:
*: remove more references to Python 3.7
   2023-07-01 10:37:47 by Thomas Klausner | Files touched by this commit (105) | Package updated
Log message:
*: restrict py-numpy users to 3.9+ in preparation for update
   2022-01-04 21:55:40 by Thomas Klausner | Files touched by this commit (1595)
Log message:
*: bump PKGREVISION for egg.mk users

They now have a tool dependency on py-setuptools instead of a DEPENDS
   2021-12-30 14:05:42 by Adam Ciarcinski | Files touched by this commit (125)
Log message:
Forget about Python 3.6
   2021-12-17 11:15:20 by Thomas Klausner | Files touched by this commit (3) | Package updated
Log message:
py-rpy: update to 3.4.5.

Release 3.4.5
=============

Changes
-------

- The deprecation warning when using :func:`rpy2.robjects.lib.grid.activate`
  was missing (indirectly revealed through issue #804).

- The named argument `LINPACK` in :meth:`rpy2.robjects.vectors.Matrix.svd`
  is no longer present in R.

Bugs fixed
----------

- SIGPIPE sent to a process running Python+rpy2 could result in a segfault.
  This was caused by an incorrect setting of R signal handlers (issue #809).

Release 3.4.4
==============

Changes
-------

- `RRuntimeError` exceptions raised while evaluating R code
  an R magic (ipython/jupyter) are now propagated (issue #792).

Release 3.4.3
=============

New features
------------

- :mod:`rpy2.robjects.lib.ggplot2` maps more functions in the
  R package (issue #767)

- Utility function :func:`rpy2.robjects.lib.ggplot2.dict2rvec`
  to convert a Python `Dict[str, str]` into an R named vector
  of strings.

Bugs fixed
----------

- Calling mod:`rpy2.situation` to report on the environment no longer
  stops with an uncaught exception when no R home can be determined
  (issue #774)

- Converting pandas series with the older numpy types could result
  in an error (issue #781)

- Numpy converter was not properly turing R integer or float arrays
  into their numpy equivalent (issue #785)

- The HTML representation of R list without named element was
  incorrect (issue #787)

Release 3.4.2
=============

Bugs fixed
----------

- Multithreading during the initialization of the embedded R no longer
  triggers a fatal error (issue #729)

Changes
-------

- :mod:`pytest` is now an optional package. Optional sets of packages are
  `numpy`, `pandas`, `test`, and `all` (all optional packages). They
  can be specified during the installation. For example
  `pip install rpy2[test]`. (issue #670)

Release 3.4.1
=============

Bugs fixed
----------

- The file `requirements.txt` was missing from the source distribution
  on pypi (issue #764).

Release 3.4.0
=============

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.

Release 3.3.6
=============

Bugs fixed
----------

- The unit tests for importing R packages with `lib_loc` were
  broken (issue #720).

- Trying to create a memoryview for an R array with complex values
  was failing with an attribute error.

- Fix the constructor of metaclass
  :class:`rpy2.robjects.methods.RS4Auto_Type`.

- Fix call to end the embedded R in :class:`rpy2.robjects.R.__cleanup__`
  (issue #734).

Release 3.3.5
=============

Bugs fixed
----------

- The callback handler to read input to R returned an
  invalid result, leading to R asking for input
  without ever acknowledging it received it.

Release 3.3.4
=============

Bugs fixed
----------

- Creating an R vector object from a Python object implementing
  the buffer protocol could give incorrect results as C-level
  incompatibilities could be missed (issue #702).

- :func:`rpy2.robjects.packages.importr` could fail when `lib_loc`
  was specified (issue #705).

Release 3.3.3
=============

Bugs fixed
----------

- Fallback for when `str2lang` is missing (R < 3.6)

- Fix segfault with :meth:`PairListSexpVector.__getitem__` when
  elements of the R pairlist have a `NILSXP` name (issue #700)

Release 3.3.2
=============

Bugs fixed
----------

- Initial fixes to have rpy2 running in ABI mode on Windows.
  Few tests are not passing (many in callbacks for R's C API).

- System detection is now checking for FreeBSD.

Release 3.3.1
=============

Bugs fixed
-----------

- :meth:`rpy2.robjects.conversion.NameClassMap.update` can update
  the mapping (:class:`dict`) or the default class.

Changes
-------

- Adding local converters was overwriting the base `NameClassMap`.

Release 3.3.0
=============

New features
------------

- Trying to import an R package that is not installed will now raise an
  exception :class:`rpy2.robjects.packages.PackageNotInstalledError`.

- The R C API functions `void SET_FRAME(SEXP x, SEXP v)`,
  `void SET_ENCLOS(SEXP x, SEXP v)` and `void SET_HASHTAB(SEXP x, SEXP v)`
  are now accessible through rpy2.

- The module :mod:`rpy2.situation` can now return `LD_LIBRARY_PATH`
  information about R. For example with
  `python -m rpy2.situation LD_LIBRARY_PATH`

- :meth:`rpy2.robjects.methods.RS4.extends` lists the class names in the
  inheritance line.

- The conversion of R objects to Python allows much more flexibility
  and better allow the use of independent code converting different classes.
  This is currently limited to R objects that are lists, environments, or
  S4 objects. The Sphinx documentation contains an example. While this is
  still work in progress this should already address concerns
  at the origin of issue #539 about S4 classes.

- :class:`rpy2.robjects.language.LangVector` to map R language objects at
  the `robjects` level.

- :class:`rpy2.robjects.vectors.PairlistVector` to map R pairlist objects at
  the `robjects` level.

- An alternative function to display the output of R cells can be
  specified using `-d` or `--display` in the magic arguments
  (in :mod:`rpy2.ipython.rmagic`).

- Python classes representing underlying R objects no longer have to
  exclusively rely on inheritance from :mod:`rpy2.rinterface` objects`.
  An abstract class :class:`rpy2.rinterface_lib.sexp.SupportsSEXP` is added
  to identify objects supporting a `__sexp__` protocol, and that abstract
  class can also be used with type hints.
- :func:`rpy2.robjects.functions.wrap_r_functions` can create Python functions
  with matching signature from R functions

- :func:`rpy2.robjects.functions.wrap_r_functions` can create Python functions
  with matching signature from R functions.

- New class :class:`rpy2.rinterface_lib._rinterface_capi.UninitializedRCapsule`
  to allow the instanciation of "placeholder" rpy2 objects before the
  embedded R is initialized. This facilitate the use of static typing checks
  such as mypy, mocking for tests that do not involve the execution of R
  code, and allow cleaner implementations of module-level globals
  that are R objects.

- New class :class:`rpy2.robjects.vectors.DateVector` to represent R dates.

- :class:`pandas.Series` containing date objects can now be converted to R
  `Date` vectors.

Changes
-------

- When calling R C-API's `R_ParseVector` and a error occurs, the
  exception message now contains the parsing status.

- :mod:`rpy2.rinterface_lib.embedded` has a module-level "constant"
  `DEFAULT_C_STACK_LIMIT` used when initializing the embedded R.

- When creating a :mod:`rpy2.robjects.vectors.DataFrame` from (name, vector)
  pairs, the names are no longer transformed to syntactically valid R
  symbols (issue #660).

- The value `nan` in :mod:`pandas` Series with strings is now converted
  to R NA (issue #668).

- Initial support for :const:`pandas.NA` (still experimental in pandas
  at the time of writing, and rpy2 support is limited to arrays of strings).

- :mod:`pandas` series of dtype :class:`pandas.StringDType`, experimental in \ 
pandas 1.0,
  are now supported by the converted (in the pandas-to-R direction) (issue #669)

- Version checking for the mapping of R packages in :mod:`rpy2.robjects.lib` is
  now more permissive (check that version prefixes are matching).

Bugs fixed
-----------

- Building ABI only mode could require an API build environment (and fail
  with an error when not present).

- SVG output for the R magic were incorrectly bytes objects.

- :meth:`rpy2.rinterface_lib.sexp.StrSexpVector.__getitem__` was returning the string
  `'NA'` when an R NA value. Not it returns \ 
`rpy2.rinterface_lib.na_values.NA_Character`.

Release 3.2.7
=============

Bugs fixed
----------

- An f-string in `_rinterface_cffi_build.py` prevented installation
  on Python 3.5 (issue #654).

Release 3.2.6
=============

Bugs fixed
----------

- The conversion of date/time object with specified timezones
  was wrong when different than the local time zone (issue #634)

- Iterating over :mod:`rpy2.situation.iter_info()` could result
  in a error because of a typo in the code.

Changes
-------

- :mod:`pandas` 1.0.0 breaks the conversion layer. A warning
  is now emitted whenever trying to use `pandas` >= 1.0.

Release 3.2.5
=============

Bugs fixed
----------

- Latest release for R package `rlang` broke import through `importr()`.
  A workaround for :mod:`rpy2.robjects.lib.ggplot2` is to rename the
  offending R object (issue #631).

Changes
-------

- f-string requiring Python >= 3.6 removed.

Release 3.2.4
=============

Bugs fixed
----------

- An incomplete backport of the bug fixed in 3.2.3 broke the ABI mode.

Release 3.2.3
=============

Bugs fixed
-----------

- Error when parsing strings as R codes could result in a segfault.

Release 3.2.2
=============

Bugs fixed
----------

- Python format error when trying to report that the system is not reported
  on Windows (issue #597).

- The setup script would error on build if R is not installed. It is now
  printing an error message.

Release 3.2.1
=============

Bugs fixed
----------

- The wrapper for the R package `dbplyr` could not import the underlying
  package (refactoring elsewhere was not propagated there).

- Creating R objects called `names` `globalenv` caused the method
  :meth:`Sexp.names` to fail (issue #587).

- Whenever the pandas conversion was activated :class:`FloatSexpVector` instances
  with the R class `POSIXct` attached where not corrected mapped back to pandas
  datetime arrays. (issue #594).

- Fix installation when an installation when a prefix without write access is used
  (issue #588).

Release 3.2.0
=============

New features
------------

- rpy2 can built and used with :mod:`cffi`'s ABI or API modes (releases 3.0.x and
  3.1.x were using the ABI mode exclusively). At the time of writing the default
  is still the ABI mode but the choice can be controlled through the environment \ 
variable
  `RPY2_CFFI_MODE`. If set, possible values are `ABI` (default if the environment
  variable is not set), `API`, or `BOTH`. When the latter, both `API` and `ABI`
  modes are built, and the choice of which one to use can be made at run time.

Changes
-------

- The "consoleread" callback (reading input to the R console) is now \ 
assuming UTF-8
  (was previously assuming ASCII) and is no longer trying to add a "new \ 
line" character
  at the end of the input.

- Querying an R environment with an invalid key will generate a :class:`TypeError`
  or a :class:`ValueError` depending on the issue (rather than always \ 
:class:`ValueError`
  before.

Bugs fixed
----------

- `setup.py` is now again compatible with Python2 (issue #580).

- Unit tests were failing if numpy is not installed.

- :mod:`rpy2.situation` is no longer breaking when R is not the in path and
  there is no environment variable `R_HOME`.

- Build script for the cffi interface is now using the environment
  variable `R_HOME` whenever defined (rather that always infer it from the
  R in the PATH).

- Converting R strings back to Python was incorrectly using `Latin1` while \ 
`UTF-8` was
  intended (issue #537).

Release 3.1.0
=============

New features
------------

- Python matrix multiplication (`__matmul__` / `@`) added to
  R :class:`Matrix` objects.

- An :class:`threading.RLock` is added to :mod:`rpy2.rinterface_lib.openrlib` and is
  used by the context manager :func:`rpy2.rinterface_lib.memorymanagement.rmemory`
  to ensure that protect/unprotect cycles cannot be broken by thread switching, \ 
at least
  as long as the context manager is used to handle such cycles (see issue #571).

- The documentation covers the use of notebooks (mainly Jupyter/Jupyterlab).

- The PNG output in Jupyter notebooks R cells can now specify an argument `--type`
  (passed as the named argument `type` in the R function `png`).
  For example on some Linux systems and R installations, the type `cairo`
  can fix issues when alpha transparency is used.

Changes
-------

- Added callbacks for `ptr_R_Busy()` and `ptr_R_ProcessEvents()`.

- `rstart` now an objects in :mod:`rpy2.rinterface_lib.embedded`
  (set to `None` until R is initialized).

- Unit tests are included in a subpackage :mod:`rpy2.tests` as was the
  case before release 3.0.0 (issue #528).

- Experimental initialization for Microsoft Windows.

- :mod:`rpy2.situation` is now also reporting the rpy2 version.

- :func:`rpy2.robjecs.package_utils.default_symbol_check_after` was
  renamed  :func:`rpy2.robjecs.package_utils.default_symbol_resolve`.
  The named parameters `default_symbol_check_after` present in few methods
  in :mod:`rpy2.robjects.packages` and :mod:`rpy2.robjects.functions` were
  modified to keep a consistent naming.

- Trying to instantiate an :class:`rpy2.rlike.container.OrdDict` with a
  a :class:`dict` will result in a :class:`TypeError` rather than a
  :class:`ValueError`.

- Methods of :class:`rpy2.rlike.container.OrdDict` now raises a
  :class:`NotImplementedError` when not implemented.

- The creation of R vectors from Python sequences is now relying on a method
  :meth:`_populate_r_vector` that allows vectorized implementation to
  to improve speed.

- Continuous integration tests run against Python 3.6, 3.7, and 3.8. It is
  no longer checked against Python 3.5.

Bugs fixed
----------

- `aes` in :mod:`rpy2.robjects.lib.ggplot2` had stopped working with the
  R package ggplot2 reaching version 3.2.0. (issue #562).

- Better handling of recent :mod:`pandas` arrays with missing values
  (related to issue #544).

- The mapping of the R operator `%in%` reachable through the attribute `ro`
  of R vectors was always returning `True`. It is now working properly.

- R POSIXct vectors with `NA` dates were triggering an error when converted
  in a data frame converted to :mod:`pandas` (issue #561).

Release 3.0.5
=============

Bugs fixed
----------

- No longer allow installation if Python 3 but < 3.5.

- Fixed error `undefined symbol: DATAPTR` if R < 3.5 (issue #565).

Release 3.0.4
=============

Bugs fixed
----------

- Fixed conversion of `pandas` :class:`Series` of dtype `pandas.Int32Dtype`,
  or `pandas.Int64Dtype` (issue #544).

Release 3.0.3
=============

Bugs fixed
----------

- Fixed the evaluation of R code using the "R magic" was delaying all
  output to the end of the execution of that code, independently of
  whether the attribute `cache_display_data` was `True` or `False`
  (issue #543).

- Fixed conversion of :class:`pandas.Series` of `dtype` "object" when
  all items are either all of the same type or are :obj:`None` (issue #540).

Release 3.0.2
=============

Bugs fixed
----------

- Failing to import `pandas` or `numpy` when loading the "R magic" \ 
extension
  for jupyter/ipython was hiding the cause of the error in the `ImportError`
  exception.

- Fallback when an R `POSIXct` vector does not had an attribute `"tzone"`
  (issue #533).

- Callback for console reset was not set during R initialization.

- Fixed rternalized function returning rpy2 objects (issue #538).

- `--vanilla` is no longer among the default options used to initialize R
  (issue #534).

Release 3.0.1
=============

Bugs fixed
----------

- Script to install R packages for docker image never made it to version
  control.

- Conversion of R arrays/matrices into numpy object trigged a segfault
  during garbage collection (issue #524).

Release 3.0.0
=============

New features
------------

- rpy2 can be installed without a development environment.

- Unit tests are now relying on the Python module `pytest`.

- :attr:`rpy2.rinterface.NA_Integer` is now only defined when the embedded R
  is initialized.

Changes
-------

- complete rewrite of :mod:`rpy2.rinterface`.
  :mod:`cffi` is now used to interface with the R compiled shared library.
  This allows ABI calls and removes the need to compile binaries. However, if
  compilation is available (when installing or preparing pre-compiled binaries)
  faster implementations of performance bottlenecks will be available.

- calling :func:`rpy2.rinterface.endr` multiple times is now only ending R
  the first time it is called (note: an ended R cannot successfully be
  re-initialized).

- The conversion system in the mod:`rpy2.robjects.conversion` now has only
  two conversions `py2rpy` and rpy2py`. `py2rpy` tries to convert any
  Python object into an object rpy2 can use with R and `rpy2py` tries
  to convert any rpy2 object into a either a non-rpy2 Python object or
  a mod:`rpy2.robjects` level object.

- The method `get` for R environments is now called `find()` to avoid
  confusion with the method of the same name in Python (:meth:`dict.get`).

- :class:`rpy2.robjects.vectors.Vector`, :class:`rpy2.robjects.vectors.Matrix`,
  and :class:`rpy2.robjects.vectors.Array` can no longer be used to create
  R arrays of unspecified type. New type-specific classes (for example for
  vectors :class:`rpy2.robjects.vectors.IntVector`,
  :class:`rpy2.robjects.vectors.BoolVector`,
  :class:`rpy2.robjects.vectors.FloatVector`,
  :class:`rpy2.robjects.vectors.ComplexVector`, or
  :class:`rpy2.robjects.vectors.StrVector`) should be used instead.

- mod:`rpy2.rpy_classic`, an implementation of the `rpy` interface using
  :mod:`rpy2.rinterface` is no longer available.

- :class:`rpy2.robjects.ParsedCode` and
  :class:`rpy2.robjects.SourceCode` are moved to
  :class:`rpy2.robjects.packages.ParsedCode` and
  :class:`rpy2.robjects.packages.SourceCode`.

Bugs fixed
----------

- Row names in R data frames were lost when converting to pandas data frames
  (issue #484).

Known issues
------------

- Mismatch between R's POSIXlt `wday` and Python time struct_time's `tm_wday`
  (issue #523).

Release 2.9.6
=============

Bugs fixed
----------

- Latest release of :mod:`pandas` deprecated :meth:`DataFrame.from_items`.
  (issue #514).

- Latest release of :mod:`pandas` requires categories to be a list
  (not an other sequence).

Known issues
------------

- The numpy buffer implemented by R arrays is broken for complex numbers

Release 2.9.5
=============

Bugs fixed
----------

- Missing values in pandas :class:`Category` series were creating
  invalid R factors when converted (issue #493).

Release 2.9.4
=============

Bugs fixed
----------

- Fallback for failure to import numpy or pandas is now dissociated from
  failure to import :mod:`numpy2ri` or :mod:`pandas2ri` (issue #463).

- :func:`repr` for R POSIX date/time vectors is now showing a string
  representation of the date/time rather than the timestamp as a float
  (issue #467).

- The HTML representation of R data frame (the default representation in the
  Jupyter notebook) was displaying an inconsistent number of rows
  (found while workin on issue #466).

- Handle time zones in timezones in Pandas when converting to R data frames
  (issue #454).

- When exiting the Python process, the R cleanup is now explicitly request
  to happen before Python's exit. This is preventing possible segfaults
  the process is terminating (issue #471).

- dplyr method `ungroup()` was missing from
  :class:`rpy2.robjects.lib.dplyr.DataFrame` (issue #473).

Release 2.9.3
=============

Bugs fixed
----------

- Delegate finding where is local time zone file to either a user-specified
  module-level variable `default_timezone` or to the third-party
  module :mod:`tzlocal` (issue #448).

Release 2.9.2
=============

Changes
-------

- The pandas converter is converting :class:`pandas.Series` of `dtype` \ 
`"O"`
  to :class:`rpy2.robjects.vectors.StrVector` objects, issueing a warning
  about it (See issue #421).

- The conversion of pandas data frame is now working with columns rather
  than rows (introduce in bug fix for issue #442 below) and this is expected
  to result in more efficient conversions.

Bugs fixed
----------

- Allow floats in figure sizes for R magic (Pull request #63)

- Fixed pickling unpickling of robjects-level instances,
  regression introduced in fix for issue #432 with release 2.9.1 (issue #443).

- Fixed broken unit test for columns of `dtype` `"O"` in `pandas` data \ 
frames.

- Fixed incorrect conversion of R factors in data frames to columns of
  integers in pandas data frame (issue #442).
   2021-10-26 12:56:13 by Nia Alarie | Files touched by this commit (458)
Log message:
math: Replace RMD160 checksums with BLAKE2s checksums

All checksums have been double-checked against existing RMD160 and
SHA512 hashes
   2021-10-07 16:28:36 by Nia Alarie | Files touched by this commit (458)
Log message:
math: Remove SHA1 hashes for distfiles
   2021-06-29 10:42:02 by Nia Alarie | Files touched by this commit (28)
Log message:
py-numpy: "Python version >= 3.7 required."